Explorar el Código

Merge branch 'master' into dev

# Conflicts:
#	netflix-common/src/main/java/com/cyksj/xxljob/XxlJobUtil.java
zoujiajian hace 2 años
padre
commit
bf0ec8d6e8
Se han modificado 31 ficheros con 240 adiciones y 118 borrados
  1. 18 18
      netflix-common/src/main/java/com/cyksj/common/constant/RandomConstant.java
  2. 0 13
      netflix-dao/src/main/java/com/cyksj/mapper/ChatGptPwdViewRecordMapper.java
  3. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/TicketPwdViewRecordMapper.java
  4. 2 0
      netflix-dao/src/main/java/com/cyksj/mapper/corp/CorpCustomerAcquisitionLinkMapper.java
  5. 3 2
      netflix-dao/src/main/java/com/cyksj/mapper/corp/CorpUserFollowRelationMapper.java
  6. 2 0
      netflix-dao/src/main/java/com/cyksj/mapper/corp/CorpUserTagMapper.java
  7. 13 0
      netflix-dao/src/main/java/com/cyksj/model/entity/CorpMsgBulkTask.java
  8. 6 2
      netflix-dao/src/main/java/com/cyksj/model/entity/TicketPwdViewRecord.java
  9. 14 45
      netflix-dao/src/main/java/com/cyksj/model/excel/ExcelRealGoodsOrderData.java
  10. 5 0
      netflix-dao/src/main/java/com/cyksj/model/manage/request/ReqGoodsSkuSpec.java
  11. 3 0
      netflix-dao/src/main/java/com/cyksj/model/manage/views/GroupsRelationView.java
  12. 51 0
      netflix-dao/src/main/java/com/cyksj/model/views/TicketPwdViewRecordView.java
  13. 10 1
      netflix-dao/src/main/resources/mapper/CorpCustomerAcquisitionLinkMapper.xml
  14. 1 1
      netflix-dao/src/main/resources/mapper/CorpFollowActiveCodeMapper.xml
  15. 12 0
      netflix-dao/src/main/resources/mapper/CorpUserFollowRelationMapper.xml
  16. 8 0
      netflix-dao/src/main/resources/mapper/CorpUserTagMapper.xml
  17. 1 1
      netflix-dao/src/main/resources/mapper/GroupRelationMapper.xml
  18. 1 1
      netflix-dao/src/main/resources/mapper/UserDistributeMapper.xml
  19. 4 2
      netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpMsgBulkTaskServiceImpl.java
  20. 1 3
      netflix-service/src/main/java/com/cyksj/service/distribute/impl/DistributeServiceImpl.java
  21. 1 0
      netflix-service/src/main/java/com/cyksj/service/pay/impl/TransferFuncServiceImpl.java
  22. 5 1
      netflix-service/src/main/java/com/cyksj/service/paypal/PayPalService.java
  23. 1 1
      netflix-service/src/main/java/com/cyksj/service/relation/GroupRelationFrontService.java
  24. 7 2
      netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java
  25. 13 4
      netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java
  26. 8 5
      netflix-web/src/main/java/com/cyksj/web/controller/group/GroupRelationController.java
  27. 4 6
      netflix-web/src/main/java/com/cyksj/web/controller/manage/CmsOrderController.java
  28. 11 0
      netflix-web/src/main/java/com/cyksj/web/controller/manage/account/CmsAccountController.java
  29. 15 8
      netflix-web/src/main/java/com/cyksj/web/controller/manage/distribute/DistributeController.java
  30. 4 1
      netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonSkuController.java
  31. 3 1
      netflix-web/src/main/java/com/cyksj/web/controller/manage/group/CmsGroupRelationController.java

+ 18 - 18
netflix-common/src/main/java/com/cyksj/common/constant/RandomConstant.java

@@ -35,24 +35,24 @@ public class RandomConstant {
 			"快乐飞行员",
 			"悠闲游戏者");
 
-	public final static List<String> imgs = List.of("https://cdn2.liuliangbang.vip/picture/3d31de8deaa69d860483dbf4b5bdf495-1682238950376.png",
-			"https://cdn2.liuliangbang.vip/picture/4d8782126a98b0f35f4313011b4c56f7-1682238950431.png",
-			"https://cdn2.liuliangbang.vip/picture/438892d60ec935e174e5c6c59ca02542-1682238950278.png",
-			"https://cdn2.liuliangbang.vip/picture/b01f30f75283585d613136e339781962-1682238950404.png",
-			"https://cdn2.liuliangbang.vip/picture/043dd1a9457c4feadb3c6627b3abd152-1682238950316.png",
-			"https://cdn2.liuliangbang.vip/picture/c08fc448e0b494b9ff2b62dc4e3660f6-1682238950349.png",
-			"https://cdn2.liuliangbang.vip/picture/47cb6ea39a5005f6fddb1413bdc81ea7-1682238950532.png",
-			"https://cdn2.liuliangbang.vip/picture/40794090747d848ca142473aa2e3ca6a-1682238950559.png",
-			"https://cdn2.liuliangbang.vip/picture/bb6f0ab1406d1fb9bbed32eef0168ba7-1682238950474.png",
-			"https://cdn2.liuliangbang.vip/picture/e904769134d846046e2d3d4c84090875-1682239434345.png",
-			"https://cdn2.liuliangbang.vip/picture/f2e65a63af190b592b3166698d54adaa-1682239434318.png",
-			"https://cdn2.liuliangbang.vip/picture/e79c30bd0740ee66a70ea26ba2c73d50-1682239434256.png",
-			"https://cdn2.liuliangbang.vip/picture/98902342b15406fe3d170d8d4aad6f49-1682239434286.png",
-			"https://cdn2.liuliangbang.vip/picture/d28416360ed022e8f27767c1fef6bd69-1682239434384.png",
-			"https://cdn2.liuliangbang.vip/picture/c7bc9ba763d3ec97e0aed906e974af9d-1682239434469.png",
-			"https://cdn2.liuliangbang.vip/picture/7c017d1910efd32f56f3ef1b10c574d5-1682239434116.png",
-			"https://cdn2.liuliangbang.vip/picture/aa5333d89cf1dafa11905c86ba10948e-1682239434416.png",
-			"https://cdn2.liuliangbang.vip/picture/2fdea3f9b383e594a0a3b3b908b2eac6-1682239434498.png");
+	public final static List<String> imgs = List.of("https://cdn2.yicanggongyi.com/picture/3d31de8deaa69d860483dbf4b5bdf495-1682238950376.png",
+			"https://cdn2.yicanggongyi.com/picture/4d8782126a98b0f35f4313011b4c56f7-1682238950431.png",
+			"https://cdn2.yicanggongyi.com/picture/438892d60ec935e174e5c6c59ca02542-1682238950278.png",
+			"https://cdn2.yicanggongyi.com/picture/b01f30f75283585d613136e339781962-1682238950404.png",
+			"https://cdn2.yicanggongyi.com/picture/043dd1a9457c4feadb3c6627b3abd152-1682238950316.png",
+			"https://cdn2.yicanggongyi.com/picture/c08fc448e0b494b9ff2b62dc4e3660f6-1682238950349.png",
+			"https://cdn2.yicanggongyi.com/picture/47cb6ea39a5005f6fddb1413bdc81ea7-1682238950532.png",
+			"https://cdn2.yicanggongyi.com/picture/40794090747d848ca142473aa2e3ca6a-1682238950559.png",
+			"https://cdn2.yicanggongyi.com/picture/bb6f0ab1406d1fb9bbed32eef0168ba7-1682238950474.png",
+			"https://cdn2.yicanggongyi.com/picture/e904769134d846046e2d3d4c84090875-1682239434345.png",
+			"https://cdn2.yicanggongyi.com/picture/f2e65a63af190b592b3166698d54adaa-1682239434318.png",
+			"https://cdn2.yicanggongyi.com/picture/e79c30bd0740ee66a70ea26ba2c73d50-1682239434256.png",
+			"https://cdn2.yicanggongyi.com/picture/98902342b15406fe3d170d8d4aad6f49-1682239434286.png",
+			"https://cdn2.yicanggongyi.com/picture/d28416360ed022e8f27767c1fef6bd69-1682239434384.png",
+			"https://cdn2.yicanggongyi.com/picture/c7bc9ba763d3ec97e0aed906e974af9d-1682239434469.png",
+			"https://cdn2.yicanggongyi.com/picture/7c017d1910efd32f56f3ef1b10c574d5-1682239434116.png",
+			"https://cdn2.yicanggongyi.com/picture/aa5333d89cf1dafa11905c86ba10948e-1682239434416.png",
+			"https://cdn2.yicanggongyi.com/picture/2fdea3f9b383e594a0a3b3b908b2eac6-1682239434498.png");
 
 	public static String getName() {
 		int i = RandomUtil.randomInt(names.size());

+ 0 - 13
netflix-dao/src/main/java/com/cyksj/mapper/ChatGptPwdViewRecordMapper.java

@@ -1,13 +0,0 @@
-package com.cyksj.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.cyksj.model.entity.ChatGptPwdViewRecord;
-
-/*
- *项目名: netflix
- *文件名: ChatGptPwdViewRecordMapper
- *创建者: JavaZou
- *创建时间:2023/5/17 16:15
- */
-public interface ChatGptPwdViewRecordMapper extends BaseMapper<ChatGptPwdViewRecord> {
-}

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/TicketPwdViewRecordMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.TicketPwdViewRecord;
+
+/*
+ *项目名: netflix
+ *文件名: TicketPwdViewRecordMapper
+ *创建者: JavaZou
+ *创建时间:2023/5/17 16:15
+ */
+public interface TicketPwdViewRecordMapper extends BaseMapper<TicketPwdViewRecord> {
+}

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/mapper/corp/CorpCustomerAcquisitionLinkMapper.java

@@ -17,4 +17,6 @@ public interface CorpCustomerAcquisitionLinkMapper extends BaseMapper<CorpCustom
     CorpCustomerAcquisitionLink getByLinkPopularizeId(Long linkId);
 
 	List<CorpCustomerAcquisitionLink> selectActiveCodeByFollowIndx(@Param("list") List<Integer> updateFollowIndx);
+
+	List<Long> selectAcLinkCorpTemplateCouponIdsByTagIds(@Param("tagIds") List<Long> tagIds);
 }

+ 3 - 2
netflix-dao/src/main/java/com/cyksj/mapper/corp/CorpUserFollowRelationMapper.java

@@ -5,6 +5,7 @@ import com.cyksj.model.dto.CorpUserFollowRelationDto;
 import com.cyksj.model.entity.CorpUserFollowRelation;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -15,9 +16,9 @@ public interface CorpUserFollowRelationMapper extends BaseMapper<CorpUserFollowR
 
 	String selectCorpCustomers(@Param("unionid") String unionid, @Param("wxCorpId") Long wxCorpId);
 
-	List<CorpUserFollowRelationDto> selectCorpUserFollowRelationByTagIds(@Param("list") List<String> tagIds, @Param("wxCorpId") Long wxCorpId, @Param("followIds") List<String> followIds, @Param("userScope") Integer userScope, @Param("consumerScope") Integer consumerScope);
+	List<CorpUserFollowRelationDto> selectCorpUserFollowRelationByTagIds(@Param("list") List<String> tagIds, @Param("wxCorpId") Long wxCorpId, @Param("followIds") List<String> followIds, @Param("userScope") Integer userScope, @Param("consumerScope") Integer consumerScope, @Param("joinStartTime") Date joinStartTime, @Param("joinEndTime") Date joinEndTime);
 
 	List<CorpUserFollowRelationDto> selectCorpUserFollowRelation(@Param("wxCorpId") Long wxCorpId, @Param("followIds") List<String> service_follow_ids);
 
-	List<CorpUserFollowRelationDto> selectCorpUserNotUnderTagIds(@Param("list") List<String> tagIds, @Param("wxCorpId") Long wxCorpId, @Param("followIds") List<String> followIds, @Param("userScope") Integer userScope, @Param("consumerScope") Integer consumerScope);
+	List<CorpUserFollowRelationDto> selectCorpUserNotUnderTagIds(@Param("list") List<String> tagIds, @Param("wxCorpId") Long wxCorpId, @Param("followIds") List<String> followIds, @Param("userScope") Integer userScope, @Param("consumerScope") Integer consumerScope, @Param("joinStartTime") Date joinStartTime, @Param("joinEndTime") Date joinEndTime);
 }

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/mapper/corp/CorpUserTagMapper.java

@@ -21,4 +21,6 @@ public interface CorpUserTagMapper extends BaseMapper<CorpUserTag> {
 	List<CorpUserTagExcelData> exportUserTagDetail(@Param("tagIds") String[] tagIds, @Param("groupIds") String[] groupIds, @Param("wxCorpId") Long wxCorpId);
 
 	UserOrderDetailView countTagUser(@Param("tagIdStr") String tagIdStr, @Param("startTime") String startTime, @Param("endTime") String endTime);
+
+	List<Long> getTagIdByCorpUserId(Long corpUserId);
 }

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CorpMsgBulkTask.java

@@ -148,6 +148,19 @@ public class CorpMsgBulkTask implements Serializable {
 	 */
 	private Integer consumerScope;
 
+
+	/**
+	 * 用户添加客服起始时间
+	 */
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private Date joinStartTime;
+
+	/**
+	 * 用户添加客服结束时间
+	 */
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private Date joinEndTime;
+
 	private Boolean deleted;
 
 	/**

+ 6 - 2
netflix-dao/src/main/java/com/cyksj/model/entity/ChatGptPwdViewRecord.java → netflix-dao/src/main/java/com/cyksj/model/entity/TicketPwdViewRecord.java

@@ -5,17 +5,21 @@ import lombok.Setter;
 
 /*
  *项目名: netflix
- *文件名: ChatGptPwdViewRecord
+ *文件名: TicketPwdViewRecord
  *创建者: JavaZou
  *创建时间:2023/5/17 16:07
  */
 @Getter
 @Setter
-public class ChatGptPwdViewRecord extends BaseEntity{
+public class TicketPwdViewRecord extends BaseEntity{
 	private Long userId;
 
 	private Long relationId;
 
+	private String account;
+
+	private String password;
+
 	private Long skuId;
 
 	private String operateLocation;

+ 14 - 45
netflix-dao/src/main/java/com/cyksj/model/excel/ExcelRealGoodsOrderData.java

@@ -4,11 +4,11 @@ import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.cyksj.model.entity.OrderDon;
 import com.ejlchina.searcher.bean.DbField;
-import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /*
@@ -99,57 +99,32 @@ public class ExcelRealGoodsOrderData {
 	/**
 	 * 收货人
 	 */
-	@ExcelProperty("序号")
-	@DbIgnore
-	private Integer index;
-
-	/**
-	 * 收货人
-	 */
-	@ExcelProperty("姓名")
+	@ExcelProperty("*收件人姓名")
 	@DbField("odt.receiver")
 	private String receiver;
 
 	/**
 	 * 手机号
 	 */
-	@ExcelProperty("手机号码")
+	@ExcelProperty("*收件人电话")
 	@DbField("odt.phone")
 	private String phone;
 
-	@ExcelProperty("座机号")
-	private String landLine;
-
-	@ExcelProperty("公司名称")
-	private String company;
-
 	/**
 	 * 省份
 	 */
-	@ExcelProperty("")
-	@DbField("odt.province")
-	private String province;
+	@ExcelProperty("*收件人地址")
+	@DbField("concat(odt.province,odt.city,odt.district,odt.address)")
+	private String address;
 
-	/**
-	 * 城市
-	 */
-	@ExcelProperty("市")
-	@DbField("odt.city")
-	private String city;
+	@ExcelProperty("公司名称")
+	private String company;
 
-	/**
-	 * 区/县
-	 */
-	@ExcelProperty("区")
-	@DbField("odt.district")
-	private String district;
+	@ExcelProperty("物品名称")
+	private String realGoodName;
 
-	/**
-	 * 详细地址
-	 */
-	@ExcelProperty("详细地址")
-	@DbField("odt.address")
-	private String address;
+	@ExcelProperty("重量(kg)")
+	private BigDecimal weight;
 
 	@ExcelProperty("付款方式")
 	private String payType;
@@ -157,18 +132,12 @@ public class ExcelRealGoodsOrderData {
 	@ExcelProperty("月结卡号")
 	private String monthCardNo;
 
-	@ExcelProperty("托寄物名称")
-	private String realGoodName;
-
-	@ExcelProperty("代收卡号(可选增加服务)")
+	@ExcelProperty("代收卡号")
 	private String toMoneyCardNumber;
 
-	@ExcelProperty("代收金额(可选增值服务)")
+	@ExcelProperty("代收金额")
 	private String toMoney;
 
-	@ExcelProperty("收件统编")
-	private String deliveryNumber;
-
 	@ExcelProperty("备注")
 	private String remark;
 }

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/request/ReqGoodsSkuSpec.java

@@ -30,6 +30,11 @@ public class ReqGoodsSkuSpec {
 
         private BigDecimal price;
 
+        /**
+         * 预览图
+         */
+        private String previewImgs;
+
         private String benefitsList;
     }
 }

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/GroupsRelationView.java

@@ -50,6 +50,9 @@ public class GroupsRelationView {
     @DbField("if(a.api_secret='',false,true)")
     private Boolean isVerify;
 
+    @DbField("gr.verify_code")
+    private String verifyCode;
+
     @DbField("g.id")
     private Long goodsId;
 

+ 51 - 0
netflix-dao/src/main/java/com/cyksj/model/views/TicketPwdViewRecordView.java

@@ -0,0 +1,51 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: TicketPwdViewRecordView
+ * 创建者: JavaZou
+ * 创建时间:2024/1/23 13:54
+ */
+@Getter
+@Setter
+@SearchBean(tables = "(select * from ticket_pwd_view_record where account is not null) tpr left join goods_don_sku sku on sku.id = tpr.sku_id" +
+		" left join goods_don g on g.id = sku.goods_id" +
+		" left join user u on u.id = tpr.user_id")
+public class TicketPwdViewRecordView {
+	@DbField("tpr.id")
+	private Long id;
+
+	@DbField("u.id")
+	private Long userId;
+
+	@DbField("u.nickname")
+	private String nickname;
+
+	@DbField("tpr.account")
+	private String account;
+
+	@DbField("tpr.password")
+	private String password;
+
+	@DbField("g.id")
+	private Long goodsId;
+
+	@DbField("g.title")
+	private String title;
+
+	@DbField("sku.id")
+	private Long skuId;
+
+	@DbField("sku.spec_val")
+	private String specVal;
+
+	@DbField("tpr.created_time")
+	private Date createdTime;
+}

+ 10 - 1
netflix-dao/src/main/resources/mapper/CorpCustomerAcquisitionLinkMapper.xml

@@ -7,8 +7,17 @@
         select *
         from corp_customer_acquisition_link
         where user_list != '[]' and
-        <foreach collection="list" item="item" separator="OR">
+        <foreach collection="list" item="item" open="(" separator="OR" close=")">
             JSON_CONTAINS(user_list, '${item}')
         </foreach>
     </select>
+
+    <select id="selectAcLinkCorpTemplateCouponIdsByTagIds" resultType="java.lang.Long">
+        select distinct ct.coupon_id from (select msg_id from corp_customer_acquisition_link
+        where msg_id != 0 and tags != '[]' and
+        <foreach collection="tagIds" item="item" open="(" separator="OR" close=")">
+            JSON_CONTAINS(tags, '"${item}"')
+        </foreach>)s inner join corp_welcome_template ct on ct.id = s.msg_id
+        where ct.coupon_id is not null
+    </select>
 </mapper>

+ 1 - 1
netflix-dao/src/main/resources/mapper/CorpFollowActiveCodeMapper.xml

@@ -8,7 +8,7 @@
         from corp_follow_active_code
         where deleted is true
         and follow_str != '' and
-        <foreach collection="list" item="item" separator="OR">
+        <foreach collection="list" item="item" open="(" separator="OR" close=")">
             JSON_CONTAINS(follow_str, '${item}')
         </foreach>
     </select>

+ 12 - 0
netflix-dao/src/main/resources/mapper/CorpUserFollowRelationMapper.xml

@@ -26,6 +26,12 @@
         left join `corp_user_auth` ca on ca.external_userid = cufr.corp_user_id
         left join `corp_user` cu on cu.id = ca.corp_user_id
         where cufr.wx_corp_id = #{wxCorpId}
+        <if test="joinStartTime != null">
+            and cu.created_time >= #{joinStartTime}
+        </if>
+        <if test="joinEndTime != null">
+            and cu.created_time &lt; #{joinEndTime}
+        </if>
         <choose>
             <when test="userScope == 2">
                 and cu.user_id != 0
@@ -78,6 +84,12 @@
         any_value(cu.user_id) as user_id
         from corp_user cu inner join corp_user_auth ca on ca.corp_user_id = cu.id
         and ca.wx_corp_id = #{wxCorpId}
+        <if test="joinStartTime != null">
+            and cu.created_time >= #{joinStartTime}
+        </if>
+        <if test="joinEndTime != null">
+            and cu.created_time &lt; #{joinEndTime}
+        </if>
         <choose>
             <when test="userScope == 2">
                 and cu.user_id != 0

+ 8 - 0
netflix-dao/src/main/resources/mapper/CorpUserTagMapper.xml

@@ -76,4 +76,12 @@
         left join corp_user_follow_relation cufr on cufr.id = s.relation_id
         left join corp_user_auth ca on ca.external_userid = cufr.corp_user_id
     </select>
+
+    <select id="getTagIdByCorpUserId" resultType="java.lang.Long">
+        select distinct ct.id
+        from (select external_userid from corp_user_auth where corp_user_id = #{corpUserId} limit 1) ca
+                 inner join corp_user_follow_relation cufr on cufr.corp_user_id = ca.external_userid
+                 inner join corp_user_tag cut on cut.relation_id = cufr.id
+                 inner join corp_tag ct on ct.tag_id = cut.tag_id
+    </select>
 </mapper>

+ 1 - 1
netflix-dao/src/main/resources/mapper/GroupRelationMapper.xml

@@ -99,7 +99,7 @@
     <select id="selectViewPwdCount" resultType="java.lang.Integer">
         select count(distinct relation_id)
         from (select id, user_id from `groups_relation` where groups_id = #{groupsId} and `status` = 'validity') s
-                 inner join chat_gpt_pwd_view_record cr on cr.relation_id = s.id and s.user_id = cr.user_id
+                 inner join ticket_pwd_view_record cr on cr.relation_id = s.id and s.user_id = cr.user_id
     </select>
 
     <select id="selectRandomOneRelationByGroupsId" resultType="com.cyksj.model.entity.GroupsRelation">

+ 1 - 1
netflix-dao/src/main/resources/mapper/UserDistributeMapper.xml

@@ -80,7 +80,7 @@
             </if>
             limit 1
         </where>
-        )u inner join user_distribute ud on ud.user_id = u.id and ud.deleted is true
+        )u inner join user_distribute ud on ud.user_id = u.id and ud.deleted is true limit 1
     </select>
 
     <select id="getDistributeGoodsRateByUidAndGid" resultType="java.lang.Integer">

+ 4 - 2
netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpMsgBulkTaskServiceImpl.java

@@ -263,14 +263,16 @@ public class CorpMsgBulkTaskServiceImpl extends ServiceImpl<CorpMsgBulkTaskMappe
 		Integer sendScope = corpMsgBulkTask.getSendScope();
 
 		Integer consumerScope = corpMsgBulkTask.getConsumerScope();
+		Date joinStartTime = corpMsgBulkTask.getJoinStartTime();
+		Date joinEndTime = corpMsgBulkTask.getJoinEndTime();
 
 		List<CorpUserFollowRelationDto> corpUserFollowRelations = null;
 		//全部用户
 		if (sendScope == 1) {
 			//此时tagIds是 需要过滤的用户标签
-			corpUserFollowRelations = corpUserFollowRelationMapper.selectCorpUserNotUnderTagIds(tagIds, wxCorpApp.getId(), service_follow_ids, userScope, consumerScope);
+			corpUserFollowRelations = corpUserFollowRelationMapper.selectCorpUserNotUnderTagIds(tagIds, wxCorpApp.getId(), service_follow_ids, userScope, consumerScope, joinStartTime, joinEndTime);
 		} else {
-			corpUserFollowRelations = corpUserFollowRelationMapper.selectCorpUserFollowRelationByTagIds(tagIds, wxCorpApp.getId(), service_follow_ids, userScope, consumerScope);
+			corpUserFollowRelations = corpUserFollowRelationMapper.selectCorpUserFollowRelationByTagIds(tagIds, wxCorpApp.getId(), service_follow_ids, userScope, consumerScope, joinStartTime, joinEndTime);
 		}
 		//将成员与客户相同关联聚合
 		Map<String, List<CorpUserFollowRelationDto>> userRelationMap = corpUserFollowRelations.stream().collect(Collectors.groupingBy(CorpUserFollowRelationDto::getFollowId));

+ 1 - 3
netflix-service/src/main/java/com/cyksj/service/distribute/impl/DistributeServiceImpl.java

@@ -77,7 +77,7 @@ public class DistributeServiceImpl implements DistributeService {
 	@Override
 	@Transactional(rollbackFor = Throwable.class)
 	public void insertDistribute(UserDistributeReq userDistributeReq) {
-		if (!redisService.setNx(RedisService.key.USER_DISTRIBUTE_ADD_KEY.getNameFormat(userDistributeReq.getUserId()), userDistributeReq.getUserId(), 60l)) {
+		if (!redisService.setNx(RedisService.key.USER_DISTRIBUTE_ADD_KEY.getNameFormat(userDistributeReq.getUserId()), userDistributeReq.getUserId(), 2 * 60l)) {
 			throw BusinessRuntimeException.getInstance("请勿重复点击");
 		}
 		UserDistribute exists = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class).eq(UserDistribute::getUserId, userDistributeReq.getUserId()).eq(UserDistribute::getDeleted, true).last("limit 1"));
@@ -149,8 +149,6 @@ public class DistributeServiceImpl implements DistributeService {
 		//渠道目标额配置
 		List<UserDistributeTargetAlert> targets = userDistributeReq.getTargets();
 		handlerDistributeTargetAlert(userDistribute.getId(), targets);
-
-		redisService.del(RedisService.key.USER_DISTRIBUTE_ADD_KEY.getNameFormat(userDistributeReq.getUserId()));
 	}
 
 	@Override

+ 1 - 0
netflix-service/src/main/java/com/cyksj/service/pay/impl/TransferFuncServiceImpl.java

@@ -80,6 +80,7 @@ public class TransferFuncServiceImpl implements TransferFuncService {
 		if (user == null) {
 			throw BusinessRuntimeException.getInstance("请先授权登录");
 		}
+		if (user.getIsBlack()) throw BusinessRuntimeException.getInstance("系统检测操作异常,请稍后再试");
 		Boolean isTakeAll = applyMoneyReq.getIsTakeAll();
 		DistributeMoneyApply.Type type = applyMoneyReq.getType();
 		if (type == null) type = DistributeMoneyApply.Type.zfb;

+ 5 - 1
netflix-service/src/main/java/com/cyksj/service/paypal/PayPalService.java

@@ -121,8 +121,12 @@ public class PayPalService{
 
 
     public Payment createPayment(Long orderId,String successUrl) throws PayPalRESTException {
-        redisService.set(RedisService.key.ABROAD_SUCCESS_URL.getName() + orderId,successUrl,RedisService.key.ABROAD_SUCCESS_URL.getTimeout());
         OrderDon orderDon = orderDonService.getById(orderId);
+        //paypal 不能购买奈飞月付账号 24-1-23
+        if (orderDon.getSkuId() != null && orderDon.getSkuId() == 4) {
+            throw BusinessRuntimeException.getInstance("暂不支持paypal购买该规格车票..");
+        }
+        redisService.set(RedisService.key.ABROAD_SUCCESS_URL.getName() + orderId,successUrl,RedisService.key.ABROAD_SUCCESS_URL.getTimeout());
         BigDecimal money = orderDon.getMoney().divide(new BigDecimal(7),2,RoundingMode.HALF_DOWN);
         orderDon.setAbroadMoney(money);
         orderDon.setType(OrderDon.Type.PAYPAL);

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/relation/GroupRelationFrontService.java

@@ -49,5 +49,5 @@ public interface GroupRelationFrontService {
 
 	void setGroupsTripsParkingTimeEmpty(GoodsDonSku sku, Long relationId);
 
-	Integer getUserCodeNumBySkuId(Long userId, Long skuId);
+	Integer getUserCodeNumBySkuId(Long userId, Long skuId, Boolean isHasVerifyCode);
 }

+ 7 - 2
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java

@@ -216,7 +216,8 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 			}
 			//查看双重验证码
 			if (StrUtil.isNotEmpty(ticket.getApiSecret())) {
-				Integer codeNum = getUserCodeNumBySkuId(ticket.getUserId(), ticket.getSkuId());
+				Boolean isHasVerifyCode = StrUtil.isNotBlank(ticket.getVerifyCode()) ? true : false;
+				Integer codeNum = getUserCodeNumBySkuId(ticket.getUserId(), ticket.getSkuId(), isHasVerifyCode);
 				ticket.setCodeNum(codeNum);
 			}
 		});
@@ -576,7 +577,7 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 	}
 
 	@Override
-	public Integer getUserCodeNumBySkuId(Long userId, Long skuId) {
+	public Integer getUserCodeNumBySkuId(Long userId, Long skuId, Boolean isHasVerifyCode) {
 		//查看双重验证码
 		UserFuncProperty userFuncProperty = userFuncPropertyMapper.selectOne(Wrappers.lambdaQuery(UserFuncProperty.class).eq(UserFuncProperty::getUserId, userId).last("limit 1"));
 		//默认0次
@@ -586,6 +587,10 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 		if (sku.getCodeNum() > 0) {
 			num = sku.getCodeNum();
 		}
+		//有安全码并客服未设置对应用户可查看次数 置为0
+		if (isHasVerifyCode && userFuncProperty == null) {
+			num = 0;
+		}
 		if (userFuncProperty != null) num = userFuncProperty.getVerifyCheckNum();
 		return num;
 	}

+ 13 - 4
netflix-service/src/main/java/com/cyksj/service/user/impl/UserServiceImpl.java

@@ -19,10 +19,7 @@ import com.cyksj.config.wxlogin.WxOpenPlatYHLXLoginConfig;
 import com.cyksj.dto.UserSharedDto;
 import com.cyksj.mapper.*;
 import com.cyksj.mapper.channel.ChannelPopularizeMapper;
-import com.cyksj.mapper.corp.CorpCustomerAcquisitionLinkMapper;
-import com.cyksj.mapper.corp.CorpFollowActiveCodeMapper;
-import com.cyksj.mapper.corp.CorpUserMapper;
-import com.cyksj.mapper.corp.CorpWelcomeTemplateMapper;
+import com.cyksj.mapper.corp.*;
 import com.cyksj.mapper.manage.cps.UserDistributePopularizeMapper;
 import com.cyksj.mapper.manage.distribute.UserDistributeSharedMapper;
 import com.cyksj.mapper.market.task.UserBindDetailMapper;
@@ -108,6 +105,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
 	private final CorpUserMapper corpUserMapper;
 
+	private final CorpUserTagMapper corpUserTagMapper;
+
 	private final CorpFollowActiveCodeMapper corpFollowActiveCodeMapper;
 
 	private final CorpCustomerAcquisitionLinkMapper corpCustomerAcquisitionLinkMapper;
@@ -688,6 +687,16 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 					couponCommonService.sendCouponToUser(fUid, corpWelcomeTemplate.getCouponId(), 0l, 0l, 0l, channel);
 				}
 			}
+
+			//是否有对应获客链接的标签
+			List<Long> tagIds = corpUserTagMapper.getTagIdByCorpUserId(corpUser.getId());
+			if (CollUtil.isNotEmpty(tagIds)) {
+				List<Long> couponIds = corpCustomerAcquisitionLinkMapper.selectAcLinkCorpTemplateCouponIdsByTagIds(tagIds);
+				if (CollUtil.isNotEmpty(couponIds)) {
+					log.info("用户userId:{}存在获客链接标记的标签:{}", fUid, tagIds);
+					couponIds.forEach(couponId -> couponCommonService.sendCouponToUser(fUid, couponId, 0l, 0l, 0l, CouponUser.Channel.customer_link));
+				}
+			}
 		}
 	}
 

+ 8 - 5
netflix-web/src/main/java/com/cyksj/web/controller/group/GroupRelationController.java

@@ -82,7 +82,7 @@ public class GroupRelationController {
 
     private final UserBindRelationService userBindRelationService;
 
-    private final ChatGptPwdViewRecordMapper chatGptPwdViewRecordMapper;
+    private final TicketPwdViewRecordMapper ticketPwdViewRecordMapper;
 
     private final HttpServletRequest request;
 
@@ -210,13 +210,15 @@ public class GroupRelationController {
         }
         if (groupsRelationView.getAccountId() == null) throw BusinessRuntimeException.getInstance("该车队未配置账号");
         if (groupRelationFrontService == null) throw BusinessRuntimeException.getInstance("车票已不存在");
-        ChatGptPwdViewRecord viewRecord = new ChatGptPwdViewRecord();
+        TicketPwdViewRecord viewRecord = new TicketPwdViewRecord();
         viewRecord.setUserId(userId);
         viewRecord.setRelationId(relationId);
         viewRecord.setSkuId(groupsRelationView.getSkuId());
         viewRecord.setOperateLocation(StringUtil.getRealAddressByIP(ServletUtil.getClientIP(request)));
-        chatGptPwdViewRecordMapper.insert(viewRecord);
-        if (StrUtil.isEmpty(groupsRelationView.getApiSecret())) {
+        viewRecord.setAccount(groupsRelationView.getTripsAccount());
+        viewRecord.setPassword(groupsRelationView.getTripsPassword());
+        ticketPwdViewRecordMapper.insert(viewRecord);
+        if (groupsRelationView.getGoodsId() == 18 && StrUtil.isEmpty(groupsRelationView.getApiSecret())) {
             THREAD_POOL.execute(() -> {
                 //车队所有人查看密码
                 Integer num = groupsRelationView.getGtNum();
@@ -263,7 +265,8 @@ public class GroupRelationController {
                 .eq(DoubleVerifyClickRecord::getAccountId, groupsRelationView.getAccountId())
                 .between(DoubleVerifyClickRecord::getCreatedTime, DateUtil.beginOfMonth(now), DateUtil.endOfMonth(now)));
         //获取双重验证码
-        Integer num = groupRelationFrontService.getUserCodeNumBySkuId(userId, groupsRelationView.getSkuId());
+        Boolean isHasVerifyCode = StrUtil.isNotBlank(groupsRelationView.getVerifyCode()) ? true : false;
+        Integer num = groupRelationFrontService.getUserCodeNumBySkuId(userId, groupsRelationView.getSkuId(), isHasVerifyCode);
         if (count >= num) throw BusinessRuntimeException.getInstance("获取双重验证码次数上限");
         //一分钟内 只能一人获取
         boolean b = redisService.setNx(RedisService.key.DOUBLE_VERIFY_CODE_VIEW_MINUTES_KEY.getEnvName() + groupsRelationView.getTripsAccount(), relationId, RedisService.key.DOUBLE_VERIFY_CODE_VIEW_MINUTES_KEY.getTimeout());

+ 4 - 6
netflix-web/src/main/java/com/cyksj/web/controller/manage/CmsOrderController.java

@@ -32,7 +32,6 @@ import com.cyksj.model.excel.ExcelOrderDonData;
 import com.cyksj.model.excel.ExcelRealGoodsOrderData;
 import com.cyksj.model.excel.ExcelRealGoodsUserInterestData;
 import com.cyksj.model.excel.ExcelRealGoodsUserInterestHasPaymentData;
-import com.cyksj.model.excel.merge.RealGoodsOrderLineStrategy;
 import com.cyksj.model.manage.request.ReqSetLogisticsPost;
 import com.cyksj.model.manage.views.AccountView;
 import com.cyksj.model.manage.views.OrderDonBackView;
@@ -59,7 +58,6 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.math.BigDecimal;
 import java.util.*;
-import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 /**
@@ -276,7 +274,7 @@ public class CmsOrderController {
 		List<ExcelRealGoodsOrderData> list = beanSearcher.searchAll(ExcelRealGoodsOrderData.class, MapUtils.flatBuilder(request.getParameterMap())
 				.field(ExcelOrderDonData::getGoodsDonType, Constant.realGoodsType).op(Operator.InList)
 				.build());
-		AtomicInteger index = new AtomicInteger(1);
+//		AtomicInteger index = new AtomicInteger(1);
 		list.forEach(data -> {
 			data.setPayType("寄付现结");
 			if (data.getGoodsDonType() == Constant.realGoodsType.get(0)) {
@@ -284,7 +282,7 @@ public class CmsOrderController {
 			} else if (data.getGoodsDonType() == Constant.realGoodsType.get(1)) {
 				data.setRealGoodName("银河潮玩");
 			}
-			data.setIndex(index.getAndIncrement());
+//			data.setIndex(index.getAndIncrement());
 		});
 		if (CollUtil.isEmpty(list)) {
 			throw BusinessRuntimeException.getInstance("导出数据为空");
@@ -299,11 +297,11 @@ public class CmsOrderController {
 		EasyExcel.write(response.getOutputStream())
 				.head(ExcelRealGoodsOrderData.class)
 				//设置合并单元格策略
-				.registerWriteHandler(new RealGoodsOrderLineStrategy())
+//				.registerWriteHandler(new RealGoodsOrderLineStrategy())
 				.excelType(ExcelTypeEnum.XLS)
 				.sheet("实物订单列表")
 				//设置头部标题从那行开始
-				.relativeHeadRowIndex(2)
+//				.relativeHeadRowIndex(2)
 				.doWrite(list);
 	}
 

+ 11 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/account/CmsAccountController.java

@@ -943,6 +943,17 @@ public class CmsAccountController {
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}
 
+	/**
+	 * 用户车看车票账号密码 记录列表
+	 */
+	@GetMapping("/get/ticket/pwd/view")
+	public Result<SearchResult<TicketPwdViewRecordView>> getTicketPwdView() {
+		SearchResult<TicketPwdViewRecordView> search = beanSearcher.search(TicketPwdViewRecordView.class, MapUtils.flatBuilder(request.getParameterMap())
+				.orderBy(TicketPwdViewRecordView::getId).desc()
+				.build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+
 	/**
 	 * MidJourney、ChatGPT年付 ChatGpt独立月付未续费列表
 	 */

+ 15 - 8
netflix-web/src/main/java/com/cyksj/web/controller/manage/distribute/DistributeController.java

@@ -127,14 +127,21 @@ public class DistributeController {
 	@Log(module = "分销管理/增加推广者", businessType = BusinessType.POST, isSaveRequestData = true)
 	@Transactional(rollbackFor = Throwable.class)
 	public Result<String> saveDistributes(@RequestBody @NotNull UserDistributeReq userDistributeReq) {
-		distributeService.insertDistribute(userDistributeReq);
-		Long businessId = userDistributeReq.getBusinessId();
-		//保存商务人员提成比例
-		userBusinessRateService.saveBusinessRate(businessId);
-		//清除 之前有普通推广专属码
-		couponDistributePopularizeMapper.delete(Wrappers.lambdaQuery(CouponDistributePopularize.class)
-				.eq(CouponDistributePopularize::getUserId, userDistributeReq.getUserId())
-				.eq(CouponDistributePopularize::getIsGeneral, true));
+		try {
+			distributeService.insertDistribute(userDistributeReq);
+			Long businessId = userDistributeReq.getBusinessId();
+			//保存商务人员提成比例
+			userBusinessRateService.saveBusinessRate(businessId);
+			//清除 之前有普通推广专属码
+			couponDistributePopularizeMapper.delete(Wrappers.lambdaQuery(CouponDistributePopularize.class)
+					.eq(CouponDistributePopularize::getUserId, userDistributeReq.getUserId())
+					.eq(CouponDistributePopularize::getIsGeneral, true));
+		} finally {
+			String cacheKey = RedisService.key.USER_DISTRIBUTE_ADD_KEY.getNameFormat(userDistributeReq.getUserId());
+			if (redisService.hasKey(cacheKey)) {
+				redisService.del(cacheKey);
+			}
+		}
 		return GatewayResponse.SUCCESS.newBuilder().toResult("添加成功");
 	}
 

+ 4 - 1
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonSkuController.java

@@ -66,7 +66,8 @@ public class CmsGoodsDonSkuController {
     @Log(module = "平台管理/新增商品sku&spec", businessType = BusinessType.POST, isSaveRequestData = true)
     public Result<String> skuInsert(@Validated @RequestBody ReqGoodsSkuInsert insert) throws Exception{
         goodsDonSpecService.insertOrUpdateSkuSpec(insert, false);
-
+        Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
+        redisService.del(keys.toArray(String[]::new));
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
@@ -76,6 +77,8 @@ public class CmsGoodsDonSkuController {
     @PutMapping("/update/spec")
     public Result<String> updateGoodsSpec(@Validated @RequestBody ReqGoodsSkuInsert insert) throws Exception {
         goodsDonSpecService.insertOrUpdateSkuSpec(insert, true);
+        Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getEnvName() + "*");
+        redisService.del(keys.toArray(String[]::new));
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 

+ 3 - 1
netflix-web/src/main/java/com/cyksj/web/controller/manage/group/CmsGroupRelationController.java

@@ -199,7 +199,9 @@ public class CmsGroupRelationController {
         if (ObjectUtil.hasEmpty(relationId, userId, isRenew)) {
             throw BusinessRuntimeException.getInstance("参数错误");
         }
-        GroupsRelationIndependentRenew groupsRelationIndependentRenew = Optional.ofNullable(groupsRelationIndependentRenewMapper.selectOne(Wrappers.lambdaQuery(GroupsRelationIndependentRenew.class).eq(GroupsRelationIndependentRenew::getUserId, userId)
+        GroupsRelationIndependentRenew groupsRelationIndependentRenew = Optional.ofNullable(groupsRelationIndependentRenewMapper.selectOne(Wrappers.lambdaQuery(GroupsRelationIndependentRenew.class)
+                .eq(GroupsRelationIndependentRenew::getOrderId, view.getOrderId())
+                .eq(GroupsRelationIndependentRenew::getUserId, userId)
                 .eq(GroupsRelationIndependentRenew::getRelationId, relationId).last("limit 1"))).orElse(new GroupsRelationIndependentRenew());
         CmsUser cmsUser = cmsUserMapper.selectById(adminId);
         if (cmsUser != null) {