Просмотр исходного кода

Merge branch 'distribute_general_rank' into pre

# Conflicts:
#	netflix-common/src/main/java/com/cyksj/common/constant/Constant.java
#	netflix-service/src/main/java/com/cyksj/service/mail/impl/CuiQiuMailServiceImpl.java
zoujiajian 2 лет назад
Родитель
Сommit
fd7c66928a
21 измененных файлов с 722 добавлено и 30 удалено
  1. 4 0
      netflix-common/src/main/java/com/cyksj/common/constant/Constant.java
  2. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/CuiQiuEmailConfigMapper.java
  3. 13 0
      netflix-dao/src/main/java/com/cyksj/mapper/UserActivityRankRobotMapper.java
  4. 23 0
      netflix-dao/src/main/java/com/cyksj/mapper/UserDistributeRankStatisticsRecordMapper.java
  5. 24 0
      netflix-dao/src/main/java/com/cyksj/model/entity/CuiQiuEmailConfig.java
  6. 66 1
      netflix-dao/src/main/java/com/cyksj/model/entity/UserActivity.java
  7. 46 0
      netflix-dao/src/main/java/com/cyksj/model/entity/UserActivityRankRobot.java
  8. 57 0
      netflix-dao/src/main/java/com/cyksj/model/entity/UserDistributeRankStatisticsRecord.java
  9. 26 0
      netflix-dao/src/main/java/com/cyksj/model/views/DistributeUserRankPersonalView.java
  10. 45 0
      netflix-dao/src/main/java/com/cyksj/model/views/DistributeUserRankView.java
  11. 74 0
      netflix-dao/src/main/java/com/cyksj/model/views/UserActivityDistributeDetailView.java
  12. 41 0
      netflix-dao/src/main/java/com/cyksj/model/views/UserDistributeRankRewardDetailView.java
  13. 49 0
      netflix-dao/src/main/resources/mapper/UserDistributeRankStatisticsRecordMapper.xml
  14. 2 0
      netflix-service/src/main/java/com/cyksj/service/mail/CuiQiuMailService.java
  15. 47 12
      netflix-service/src/main/java/com/cyksj/service/mail/impl/CuiQiuMailServiceImpl.java
  16. 1 5
      netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java
  17. 1 4
      netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java
  18. 25 4
      netflix-service/src/main/java/com/cyksj/service/user/impl/UserActivityServiceImpl.java
  19. 140 0
      netflix-web/src/main/java/com/cyksj/web/controller/distribute/DistributeRankController.java
  20. 1 3
      netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java
  21. 24 1
      netflix-web/src/main/java/com/cyksj/web/controller/manage/active/UserActivityController.java

+ 4 - 0
netflix-common/src/main/java/com/cyksj/common/constant/Constant.java

@@ -356,6 +356,10 @@ public interface Constant {
 	 */
 	List<Long> SPECIAL_PRICE_SKU_IDS = List.of(409l);
 
+	String month = "month";
+
+	String week = "week";
+
 	/**
 	 * 镜像GPT cookie
 	 */

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

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.CuiQiuEmailConfig;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: CuiQiuEmailConfigMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/7/22 15:31
+ */
+public interface CuiQiuEmailConfigMapper extends BaseMapper<CuiQiuEmailConfig> {
+}

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

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserActivityRankRobot;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserActivityRankRobotMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/7/24 16:10
+ */
+public interface UserActivityRankRobotMapper extends BaseMapper<UserActivityRankRobot> {
+}

+ 23 - 0
netflix-dao/src/main/java/com/cyksj/mapper/UserDistributeRankStatisticsRecordMapper.java

@@ -0,0 +1,23 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cyksj.model.entity.UserDistributeRankStatisticsRecord;
+import com.cyksj.model.views.DistributeUserRankView;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserDistributeRankStatisticsRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2024/7/23 16:37
+ */
+public interface UserDistributeRankStatisticsRecordMapper extends BaseMapper<UserDistributeRankStatisticsRecord> {
+	Page<DistributeUserRankView> selectDistributeRanks(@Param("filed") String filed, @Param("statisticsTime") String statisticsTime, @Param("page") Page<DistributeUserRankView> objectPage);
+
+	DistributeUserRankView getSelfRank( @Param("filed") String filed, @Param("userId") long userId, @Param("statisticsTime") String statisticsTime);
+
+	List<DistributeUserRankView> getPreviousWinners(@Param("filed") String filed, @Param("lastTime") String lastTime);
+}

+ 24 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CuiQiuEmailConfig.java

@@ -0,0 +1,24 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj2
+ * 文件名: CuiQiuEmailConfig
+ * 创建者: JavaZou
+ * 创建时间:2024/7/22 15:29
+ */
+@Getter
+@Setter
+public class CuiQiuEmailConfig {
+	/**
+	 * 域名前缀
+	 */
+	private String domainPrefix;
+
+	/**
+	 * 接受主邮件id
+	 */
+	private String mailId;
+}

+ 66 - 1
netflix-dao/src/main/java/com/cyksj/model/entity/UserActivity.java

@@ -2,11 +2,13 @@ package com.cyksj.model.entity;
 
 import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.ejlchina.searcher.bean.DbIgnore;
 import lombok.Getter;
 import lombok.Setter;
 
 import javax.validation.constraints.NotEmpty;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 项目名: yhlxj
@@ -17,7 +19,7 @@ import java.util.Date;
  */
 @Getter
 @Setter
-public class UserActivity extends BaseEntity{
+public class UserActivity extends BaseEntity {
 	/**
 	 * 活动名称
 	 */
@@ -59,8 +61,71 @@ public class UserActivity extends BaseEntity{
 	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String rules;
 
+	/**
+	 * 0.大学生认证
+	 * 1.个人分销排行
+	 */
+	private Integer type;
+
+	/**
+	 * 统计类型(周/月)
+	 * week,month
+	 */
+	private String statisticsType;
+
+	/**
+	 * 分销排行榜类型
+	 * 0.金额榜,1.打单榜
+	 */
+	private Integer rankType;
+
+	/**
+	 * 头奖范围
+	 * 5:前五名
+	 */
+	private Integer headRank;
+
+	/**
+	 * 奖励信息json
+	 */
+	private String rewardInfo;
+
+	@DbIgnore
+	@TableField(exist = false)
+	private List<RewardInfo> rewardInfoList;
+
+	/**
+	 * 设置机器人
+	 */
+	@DbIgnore
+	@TableField(exist = false)
+	private List<UserActivityRankRobot> rankRobots;
+
 	/**
 	 * 是否删除
 	 */
 	private Boolean deleted;
+
+	@Getter
+	@Setter
+	public static class RewardInfo{
+
+		/**
+		 * 名次
+		 */
+		private Integer rank;
+
+		/**
+		 * 0.返现
+		 * 1.余额
+		 * 2.兑换码
+		 * 奖品类型
+		 */
+		private Integer type;
+
+		/**
+		 * 具体奖励
+		 */
+		private String reward;
+	}
 }

+ 46 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserActivityRankRobot.java

@@ -0,0 +1,46 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+@Getter
+@Setter
+public class UserActivityRankRobot extends BaseEntity{
+	private Long acId;
+
+	private String headimgurl;
+
+	private String nickname;
+
+	/**
+	 * 每日增单数开始
+	 */
+	private Integer addOrdersSt;
+
+	/**
+	 * 每日增单数结束
+	 */
+	private Integer addOrdersEt;
+
+	/**
+	 * 初始订单数
+	 */
+	private Integer initOrders;
+
+	/**
+	 * 每单金额开始
+	 */
+	private BigDecimal moneySt;
+
+	/**
+	 * 每单金额结束
+	 */
+	private BigDecimal moneyEt;
+
+	/**
+	 * 初始金额
+	 */
+	private BigDecimal initMoney;
+}

+ 57 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserDistributeRankStatisticsRecord.java

@@ -0,0 +1,57 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserDistributeRankStatisticsRecord
+ * 创建者: JavaZou
+ * 创建时间:2024/7/23 16:33
+ */
+@Getter
+@Setter
+public class UserDistributeRankStatisticsRecord extends BaseEntity{
+	/**
+	 * 排行类型
+	 * 0金额,1单数
+	 */
+	private Integer type;
+
+	/**
+	 * 分销用户
+	 */
+	private Long userId;
+
+	/**
+	 * 机器人id
+	 */
+	private Long robotId;
+
+	/**
+	 * 分销用户数
+	 */
+	private Integer userNUm;
+
+	/**
+	 * 分销订单数
+	 */
+	private Integer orders;
+
+	/**
+	 * 分销金额
+	 */
+	private BigDecimal money;
+
+	/**
+	 * 奖品明细
+	 */
+	private String reward;
+
+	/**
+	 * 统计类型
+	 */
+	private Integer statisticsType;
+}

+ 26 - 0
netflix-dao/src/main/java/com/cyksj/model/views/DistributeUserRankPersonalView.java

@@ -0,0 +1,26 @@
+package com.cyksj.model.views;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: DistributeUserRankPersonalView
+ * 创建者: JavaZou
+ * 创建时间:2024/7/23 17:43
+ */
+@Getter
+@Setter
+public class DistributeUserRankPersonalView {
+
+	/**
+	 * 个人排行
+	 */
+	private DistributeUserRankView self;
+
+	/**
+	 * 排行列表
+	 */
+	private Page<DistributeUserRankView> ranks;
+}

+ 45 - 0
netflix-dao/src/main/java/com/cyksj/model/views/DistributeUserRankView.java

@@ -0,0 +1,45 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.DbIgnore;
+import com.ejlchina.searcher.bean.SearchBean;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: DistributeUserRankView
+ * 创建者: JavaZou
+ * 创建时间:2024/7/23 17:30
+ */
+@Getter
+@Setter
+@SearchBean(tables = "user_distribute_rank_statistics_record udsr left join user u on u.id = udsr.user_id",
+		where = "udsr.is_present is true")
+public class DistributeUserRankView {
+
+	@DbIgnore
+	private Integer rankId;
+
+	@DbField("udsr.user_id")
+	@JsonIgnore
+	private Long userId;
+
+	@DbField("concat(LEFT(ifnull(u.nickname,udsr.nickname),1),'*',RIGHT(ifnull(u.nickname,udsr.nickname),1))")
+	private String nickname;
+
+	@DbField("ifnull(u.headimgurl,udsr.headimgurl)")
+	private String headimgurl;
+
+	@DbField("udsr.orders")
+	private Integer orders = 0;
+
+	@DbField("udsr.statistics_start_time")
+	private String statisticsStartTime;
+
+	@DbField("udsr.money")
+	private BigDecimal money = BigDecimal.ZERO;
+}

+ 74 - 0
netflix-dao/src/main/java/com/cyksj/model/views/UserActivityDistributeDetailView.java

@@ -0,0 +1,74 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: UserActivityDistributeDetailView
+ * 创建者: JavaZou
+ * 创建时间:2024/7/23 17:12
+ */
+@Data
+@SearchBean(tables = "user_activity ua"
+		, where = "ua.deleted = true :time:")
+public class UserActivityDistributeDetailView {
+	@DbField("ua.id")
+	private Integer id;
+
+	@DbField("ua.name")
+	private String name;
+
+	@DbField("ua.start_time")
+	private Date startTime;
+
+	@DbField("ua.end_time")
+	private Date endTime;
+
+	@DbField("ua.img")
+	private String img;
+
+	/**
+	 * 规则图片
+	 */
+	@DbField("ua.rules")
+	private String rules;
+
+	/**
+	 * 0.大学生认证
+	 * 1.个人分销排行
+	 */
+	@DbField("ua.type")
+	private Integer type;
+
+	/**
+	 * 统计类型(周/月)
+	 * week,month
+	 */
+	@DbField("ua.statistics_type")
+	private String statisticsType;
+
+	/**
+	 * 分销排行榜类型
+	 * 0.金额榜,1.打单榜
+	 * 2.both
+	 */
+	@DbField("ua.rank_type")
+	private Integer rankType;
+
+	/**
+	 * 头奖范围
+	 * 5:前五名
+	 */
+	@DbField("ua.head_rank")
+	private Integer headRank;
+
+	/**
+	 * 奖励信息json
+	 */
+	@DbField("ua.reward_info")
+	private String rewardInfo;
+}

+ 41 - 0
netflix-dao/src/main/java/com/cyksj/model/views/UserDistributeRankRewardDetailView.java

@@ -0,0 +1,41 @@
+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
+ * 文件名: UserDistributeRankRewardDetailView
+ * 创建者: JavaZou
+ * 创建时间:2024/7/24 17:56
+ */
+
+@Getter
+@Setter
+@SearchBean(tables = "user_distribute_rank_reward_detail ud")
+public class UserDistributeRankRewardDetailView {
+	@DbField("ud.user_id")
+	private Long userId;
+
+	@DbField("ud.reward_type")
+	private Integer rewardType;
+
+	@DbField("ud.reward")
+	private String reward;
+
+	/**
+	 * 排行类型 0金额,1单数
+	 */
+	@DbField("ud.type")
+	private Integer type;
+
+	@DbField("ud.rank_id")
+	private Integer rankId;
+
+	@DbField("ud.created_time")
+	private Date createdTime;
+}

+ 49 - 0
netflix-dao/src/main/resources/mapper/UserDistributeRankStatisticsRecordMapper.xml

@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.cyksj.mapper.UserDistributeRankStatisticsRecordMapper">
+
+    <select id="selectDistributeRanks" resultType="com.cyksj.model.views.DistributeUserRankView">
+        select ROW_NUMBER()                             OVER (ORDER BY ${filed}) AS rank_id, concat(LEFT(ifnull(u.nickname,udsr.nickname),1),'*', RIGHT(ifnull(u.nickname,udsr.nickname),1)) as nickname,
+               ifnull(u.headimgurl, udsr.headimgurl) as headimgurl,
+               udsr.type,
+               udsr.user_id,
+               udsr.statistics_start_time,
+               udsr.money,
+               udsr.orders
+        from user_distribute_rank_statistics_record udsr
+                 left join user u on u.id = udsr.user_id
+        where udsr.is_present is true
+        and statistics_start_time = #{statisticsTime}
+        order by ${filed} desc
+    </select>
+
+    <select id="getSelfRank" resultType="com.cyksj.model.views.DistributeUserRankView">
+        select ROW_NUMBER()                             OVER (ORDER BY ${filed} desc) AS rank_id, concat(LEFT(ifnull(u.nickname,udsr.nickname),1),'*', RIGHT(ifnull(u.nickname,udsr.nickname),1)) as nickname,
+               ifnull(u.headimgurl, udsr.headimgurl) as headimgurl,
+               udsr.type,
+               udsr.user_id,
+               udsr.statistics_start_time,
+               udsr.money,
+               udsr.orders
+        from user_distribute_rank_statistics_record udsr
+                 left join user u on u.id = udsr.user_id
+        where udsr.user_id = #{userId}
+          and udsr.is_present is true
+          and statistics_start_time = #{statisticsTime}
+    </select>
+
+    <select id="getPreviousWinners" resultType="com.cyksj.model.views.DistributeUserRankView">
+        select ROW_NUMBER()                             OVER (ORDER BY ${filed}) AS rank_id, concat(LEFT(ifnull(u.nickname,udsr.nickname),1),'*', RIGHT(ifnull(u.nickname,udsr.nickname),1)) as nickname,
+               ifnull(u.headimgurl, udsr.headimgurl) as headimgurl,
+               udsr.type,
+               udsr.user_id,
+               udsr.statistics_start_time,
+               udsr.money,
+               udsr.orders
+        from user_distribute_rank_statistics_record udsr
+                 left join user u on u.id = udsr.user_id
+        where statistics_start_time = #{lastTime}
+          and udsr.is_present is false
+    </select>
+</mapper>

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/mail/CuiQiuMailService.java

@@ -12,4 +12,6 @@ public interface CuiQiuMailService {
 	 * 获取最新邮箱 返回验证码
 	 */
 	String getVerifyCode(String email, Long goodsId, Integer type, Boolean sync, Integer linkType) throws Exception;
+
+	boolean isCuiQiuEmail(String account);
 }

+ 47 - 12
netflix-service/src/main/java/com/cyksj/service/mail/impl/CuiQiuMailServiceImpl.java

@@ -11,15 +11,18 @@ import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.common.util.StringUtil;
 import com.cyksj.common.util.TicketCodeCommonUtil;
+import com.cyksj.mapper.CuiQiuEmailConfigMapper;
 import com.cyksj.model.dto.CuiQiuEmailDetailDto;
 import com.cyksj.model.dto.CuiQiuEmailDto;
 import com.cyksj.model.dto.CuiQiuEmailResultDto;
+import com.cyksj.model.entity.CuiQiuEmailConfig;
 import com.cyksj.service.mail.CuiQiuMailService;
 import com.cyksj.service.relation.GroupsRelationNetflixService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.PostConstruct;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -42,9 +45,6 @@ public class CuiQiuMailServiceImpl implements CuiQiuMailService {
 	//脆球域名id
 	private final static String DOMAIN_ID = "1696913058045050661";
 
-	//代收管理员邮件id
-	private final static String ADMIN_MAIL_ID = "1696913058063659217";
-
 	//PS 验证码官方
 	private final static String PS_ADOBE = "Adobe";
 
@@ -52,6 +52,15 @@ public class CuiQiuMailServiceImpl implements CuiQiuMailService {
 
 	private final static String NETFLIX = "Netflix";
 
+	private static List<CuiQiuEmailConfig> CuiQiuEmailConfigs;
+
+	private final CuiQiuEmailConfigMapper CuiQiuEmailConfigMapper;
+
+	@PostConstruct
+	public void getCuiQiuEmailConfig() {
+		CuiQiuEmailConfigs = CuiQiuEmailConfigMapper.selectList(null);
+	}
+
 	@Override
 	public String getVerifyCode(String email, Long goodsId, Integer type, Boolean sync, Integer linkType) throws Exception {
 		//获取近二十封邮件
@@ -63,8 +72,12 @@ public class CuiQiuMailServiceImpl implements CuiQiuMailService {
 		//维度是天
 		DateTime now = DateTime.now();
 		params.put("token", CUI_QIU_TOKEN);
-		params.put("mail_id", ADMIN_MAIL_ID);
-		params.put("start_time", DateUtil.offsetDay(now, -10).toDateStr());
+		String mailId = getAdmainMailId(email);
+		if (StrUtil.isEmpty(mailId)) {
+			throw BusinessRuntimeException.getInstance("系统异常,请联系客服..");
+		}
+		params.put("mail_id", mailId);
+		params.put("start_time", DateUtil.offsetDay(now, -1).toDateStr());
 		params.put("end_time", DateUtil.offsetDay(now, 1).toDateStr());
 		params.put("to", email);
 		params.put("limit", 20);
@@ -98,10 +111,10 @@ public class CuiQiuMailServiceImpl implements CuiQiuMailService {
 		}).collect(Collectors.toList());
 
 		if (CollUtil.isNotEmpty(list)) {
-			for (CuiQiuEmailDto cuiQiuEmailDto : list) {
-				Long messageId = cuiQiuEmailDto.getId();
+			for (CuiQiuEmailDto CuiQiuEmailDto : list) {
+				Long messageId = CuiQiuEmailDto.getId();
 				try {
-					String code = getVerifyCodeByEmail(messageId, goodsId, type, sync, linkType);
+					String code = getVerifyCodeByEmail(messageId, goodsId, type, sync, linkType, mailId);
 					if (StrUtil.isNotBlank(code)) {
 						return code;
 					}
@@ -112,18 +125,28 @@ public class CuiQiuMailServiceImpl implements CuiQiuMailService {
 		return null;
 	}
 
-	public String getVerifyCodeByEmail(Long messageId, Long goodsId, Integer type, Boolean sync, Integer linkType) throws Exception {
+	@Override
+	public boolean isCuiQiuEmail(String account) {
+		for (CuiQiuEmailConfig CuiQiuEmailConfig : CuiQiuEmailConfigs) {
+			if (account.contains(CuiQiuEmailConfig.getDomainPrefix())) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public String getVerifyCodeByEmail(Long messageId, Long goodsId, Integer type, Boolean sync, Integer linkType, String mailId) throws Exception {
 		String url = "https://domain-open-api.cuiqiu.com/v1/message/detail";
 		Map<String, Object> params = new HashMap<>();
 		params.put("token", CUI_QIU_TOKEN);
-		params.put("mail_id", ADMIN_MAIL_ID);
+		params.put("mail_id", mailId);
 		params.put("message_id", messageId);
 		HttpRequest post = HttpUtil.createPost(url);
 		post.form(params);
 		HttpResponse execute = post.execute();
 		String respBody = execute.body();
-		CuiQiuEmailDetailDto cuiQiuEmailDetailDto = Jsons.parseObject(respBody, CuiQiuEmailDetailDto.class);
-		CuiQiuEmailDetailDto.Content content = cuiQiuEmailDetailDto.getData().getContent();
+		CuiQiuEmailDetailDto CuiQiuEmailDetailDto = Jsons.parseObject(respBody, CuiQiuEmailDetailDto.class);
+		CuiQiuEmailDetailDto.Content content = CuiQiuEmailDetailDto.getData().getContent();
 		String code = null;
 		String body = content.getBody();
 		if (goodsId == 1) {
@@ -169,4 +192,16 @@ public class CuiQiuMailServiceImpl implements CuiQiuMailService {
 		}
 		return StringUtil.getVerifyCodePattern(code, length);
 	}
+
+	/**
+	 * 获取接受邮件邮箱id
+	 */
+	private String getAdmainMailId(String email) {
+		for (CuiQiuEmailConfig CuiQiuEmailConfig : CuiQiuEmailConfigs) {
+			if (email.contains(CuiQiuEmailConfig.getDomainPrefix())) {
+				return CuiQiuEmailConfig.getMailId();
+			}
+		}
+		return null;
+	}
 }

+ 1 - 5
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -488,11 +488,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 						.last("limit 1"));
 				if (one != null && StrUtil.isNotBlank(one.getSysValue())) {
 					GoodsDonPriceDto goodsDonPriceDto = Jsons.parseObject(one.getSysValue(), GoodsDonPriceDto.class);
-					Long sharedId = distributeShared.getSharedId();
-					List<Long> sharedIdList = goodsDonPriceDto.getSharedId();
-					if (CollUtil.isNotEmpty(sharedIdList) && sharedIdList.contains(sharedId)) {
-						payRequest.setDonMoney(goodsDonPriceDto.getPrice());
-					}
+					payRequest.setDonMoney(goodsDonPriceDto.getPrice());
 				}
 			}
 		}

+ 1 - 4
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java

@@ -124,9 +124,6 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 
 	private final ChatGptAccountService chatGptAccountService;
 
-	//脆球邮箱后缀
-	private final static String CUI_QIU_EMAIL_SUFFIX = "@kindvd.com";
-
 	private final UpgradePackageMapper upgradePackageMapper;
 
 	private final GoodsDonQaRelateMapper goodsDonQaRelateMapper;
@@ -542,7 +539,7 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 		if (StrUtil.hasEmpty(account, password)) {
 			throw BusinessRuntimeException.getInstance("您的车票账号密码异常,请联系客服...");
 		}
-		if (renewalView.getAccount().contains(CUI_QIU_EMAIL_SUFFIX)) {
+		if (cuiQiuMailService.isCuiQiuEmail(renewalView.getAccount())) {
 			return cuiQiuMailService.getVerifyCode(renewalView.getAccount(), renewalView.getGoodsId(), type, sync, loginReq.getLinkType());
 		}
 		//获取邮箱密码

+ 25 - 4
netflix-service/src/main/java/com/cyksj/service/user/impl/UserActivityServiceImpl.java

@@ -1,16 +1,15 @@
 package com.cyksj.service.user.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.mapper.UserActivityMapper;
+import com.cyksj.mapper.UserActivityRankRobotMapper;
 import com.cyksj.mapper.UserMapper;
 import com.cyksj.mapper.UserStudentCertRecordMapper;
-import com.cyksj.model.entity.CouponUser;
-import com.cyksj.model.entity.User;
-import com.cyksj.model.entity.UserActivity;
-import com.cyksj.model.entity.UserStudentCertRecord;
+import com.cyksj.model.entity.*;
 import com.cyksj.service.mange.coupon.CouponCommonService;
 import com.cyksj.service.user.UserActivityService;
 import lombok.RequiredArgsConstructor;
@@ -19,6 +18,7 @@ import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 项目名: yhlxj
@@ -35,6 +35,8 @@ public class UserActivityServiceImpl extends ServiceImpl<UserActivityMapper, Use
 	private final UserMapper userMapper;
 
 	private final UserStudentCertRecordMapper userStudentCertRecordMapper;
+
+	private final UserActivityRankRobotMapper UserActivityRankRobotMapper;
 	@Override
 	public void sendStudentCertActivity(User user, String dsCode, String school) throws Exception {
 		UserActivity activity = getById(1);
@@ -67,7 +69,26 @@ public class UserActivityServiceImpl extends ServiceImpl<UserActivityMapper, Use
 	@Override
 	public void saveOrUpdateActivity(UserActivity userActivity) throws Exception {
 		checkActivity(userActivity);
+		if (userActivity.getType() == 1) {
+			userActivity.setRewardInfo(Jsons.toJson(userActivity.getRewardInfoList()));
+		}
 		saveOrUpdate(userActivity);
+		if (userActivity.getType() == 1) {
+			List<UserActivityRankRobot> rankRoot = userActivity.getRankRobots();
+			List<Long> collect = rankRoot.stream().filter(e -> e.getId() != null).map(UserActivityRankRobot::getId).collect(Collectors.toList());
+			UserActivityRankRobotMapper.delete(Wrappers.lambdaQuery(UserActivityRankRobot.class)
+					.eq(UserActivityRankRobot::getAcId, userActivity.getId())
+					.notIn(CollUtil.isNotEmpty(collect), UserActivityRankRobot::getId, collect));
+
+			rankRoot.forEach(root -> {
+				root.setAcId(userActivity.getId());
+				if (root.getId() != null) {
+					UserActivityRankRobotMapper.updateById(root);
+				} else {
+					UserActivityRankRobotMapper.insert(root);
+				}
+			});
+		}
 	}
 
 

+ 140 - 0
netflix-web/src/main/java/com/cyksj/web/controller/distribute/DistributeRankController.java

@@ -0,0 +1,140 @@
+package com.cyksj.web.controller.distribute;
+
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cyksj.common.constant.Constant;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.UserDistributeRankStatisticsRecordMapper;
+import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
+import com.cyksj.model.entity.UserDistribute;
+import com.cyksj.model.views.DistributeUserRankPersonalView;
+import com.cyksj.model.views.DistributeUserRankView;
+import com.cyksj.model.views.UserActivityDistributeDetailView;
+import com.cyksj.model.views.UserDistributeRankRewardDetailView;
+import com.cyksj.web.util.StpUserUtil;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.time.DayOfWeek;
+import java.time.LocalDate;
+import java.time.temporal.ChronoField;
+import java.util.List;
+
+/**
+ * server/分销排行
+ * 项目名: yhlxj
+ * 文件名: DistributeRankController
+ * 创建者: JavaZou
+ * 创建时间:2024/7/23 17:10
+ */
+@RestController
+@RequestMapping("/applets/distribute/rank")
+@RequiredArgsConstructor
+public class DistributeRankController {
+
+	private final BeanSearcher beanSearcher;
+
+	private final HttpServletRequest request;
+
+	private final UserDistributeMapper userDistributeMapper;
+
+	private final UserDistributeRankStatisticsRecordMapper userDistributeRankStatisticsRecordMapper;
+
+	/**
+	 * 分销排行活动详情
+	 */
+	@GetMapping("/get/activity/detail")
+	public Result<UserActivityDistributeDetailView> getActivityDetail() {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		UserDistribute userDistribute = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class)
+				.eq(UserDistribute::getUserId, userId)
+				.eq(UserDistribute::getDeleted, 1)
+				.last("limit 1"));
+		//非普通推广渠道
+		if (userDistribute != null) {
+			return GatewayResponse.SUCCESS.newBuilder().toResult();
+		}
+		String dateStr = DateTime.now().toString();
+		String time = String.format(" and (ua.start_time is null or (ua.start_time < '%s' and ua.end_time > '%s'))", dateStr, dateStr);
+		UserActivityDistributeDetailView view = beanSearcher.searchFirst(UserActivityDistributeDetailView.class, MapUtils.flatBuilder(request.getParameterMap())
+				.field(UserActivityDistributeDetailView::getType, 1)
+				.put("time", time)
+				.build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(view);
+	}
+
+	/**
+	 * 个人分销排行详情  以及所属分类排行列表
+	 */
+	@GetMapping("/get/personal")
+	public Result<DistributeUserRankPersonalView> getPersonal(@RequestParam(defaultValue = "0") Integer type, @RequestParam(defaultValue = "week") String statisticsType, @RequestParam(defaultValue = "1") Integer start, @RequestParam(defaultValue = "5") Integer limit) {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		DistributeUserRankPersonalView distributeUserRankPersonalView = new DistributeUserRankPersonalView();
+		String orderByField = "money";
+		//订单排行
+		if (type == 1) {
+			orderByField = "orders";
+		}
+		String statisticsTime;
+		if (Constant.week.equals(statisticsType)) {
+			//上周一
+			LocalDate monday = LocalDate.now().with(ChronoField.DAY_OF_WEEK, DayOfWeek.MONDAY.getValue());
+			statisticsTime = monday.toString();
+		} else {
+			LocalDate monday = LocalDate.now().with(ChronoField.DAY_OF_MONTH, DayOfWeek.MONDAY.getValue()).plusMonths(-1);
+			statisticsTime = monday.toString();
+		}
+
+		DistributeUserRankView self = userDistributeRankStatisticsRecordMapper.getSelfRank(orderByField, userId, statisticsTime);
+		distributeUserRankPersonalView.setSelf(self);
+
+
+		Page<DistributeUserRankView> ranks = userDistributeRankStatisticsRecordMapper.selectDistributeRanks(orderByField, statisticsTime, new Page<>(start, limit));
+		distributeUserRankPersonalView.setRanks(ranks);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(distributeUserRankPersonalView);
+	}
+
+	/**
+	 * 上期获奖名单
+	 */
+	@GetMapping("/get/previous/winners")
+	public Result<List<DistributeUserRankView>> getPreviousWinners(@RequestParam(defaultValue = "0") Integer type, @RequestParam(defaultValue = "week") String statisticsType) {
+		String lastTime;
+		if (Constant.week.equals(statisticsType)) {
+			//上周一
+			LocalDate monday = LocalDate.now().with(ChronoField.DAY_OF_WEEK, DayOfWeek.MONDAY.getValue()).plusWeeks(-1);
+			lastTime = monday.toString();
+		} else {
+			LocalDate monday = LocalDate.now().with(ChronoField.DAY_OF_MONTH, DayOfWeek.MONDAY.getValue()).plusMonths(-1);
+			lastTime = monday.toString();
+		}
+		String orderByField = "money";
+		if (type == 1) {
+			orderByField = "orders";
+		}
+		List<DistributeUserRankView> ranks = userDistributeRankStatisticsRecordMapper.getPreviousWinners(orderByField, lastTime);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(ranks);
+	}
+
+	/**
+	 * 获奖明细
+	 */
+	@GetMapping("/get/reward/detail")
+	public Result<SearchResult<UserDistributeRankRewardDetailView>> getUserRewardDetailView() {
+		long userId = StpUserUtil.getLoginIdAsLong();
+		SearchResult<UserDistributeRankRewardDetailView> search = beanSearcher.search(UserDistributeRankRewardDetailView.class, MapUtils.flatBuilder(request.getParameterMap())
+				.field(UserDistributeRankRewardDetailView::getUserId, userId)
+				.build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+
+}

+ 1 - 3
netflix-web/src/main/java/com/cyksj/web/controller/goods/GoodsDonController.java

@@ -434,9 +434,7 @@ public class GoodsDonController {
 						if (StrUtil.isNotBlank(sysConfig.getSysValue())) {
 							try {
 								GoodsDonPriceDto goodsDonPriceDto = Jsons.parseObject(sysConfig.getSysValue(), GoodsDonPriceDto.class);
-								if (CollUtil.isNotEmpty(goodsDonPriceDto.getSharedId()) && goodsDonPriceDto.getSharedId().contains(distributeShared.getSharedId())) {
-									sku.setPrice(goodsDonPriceDto.getPrice());
-								}
+								sku.setPrice(goodsDonPriceDto.getPrice());
 							} catch (Exception e) {
 							}
 						}

+ 24 - 1
netflix-web/src/main/java/com/cyksj/web/controller/manage/active/UserActivityController.java

@@ -1,8 +1,13 @@
 package com.cyksj.web.controller.manage.active;
 
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.util.Jsons;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.UserActivityRankRobotMapper;
 import com.cyksj.model.entity.UserActivity;
+import com.cyksj.model.entity.UserActivityRankRobot;
 import com.cyksj.service.user.UserActivityService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.SearchResult;
@@ -13,6 +18,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 /**
  * 项目名: yhlxj
@@ -31,6 +37,8 @@ public class UserActivityController {
 
 	private final HttpServletRequest request;
 
+	private final UserActivityRankRobotMapper rankRootMapper;
+
 	/**
 	 * 新建活动
 	 */
@@ -66,8 +74,23 @@ public class UserActivityController {
 	 * 活动列表
 	 */
 	@GetMapping("/get")
-	public Result<SearchResult<UserActivity> > get() {
+	public Result<SearchResult<UserActivity>> get() {
 		SearchResult<UserActivity> search = beanSearcher.search(UserActivity.class, MapUtils.flatBuilder(request.getParameterMap()).field(UserActivity::getDeleted, 1).build());
+		search.getDataList().forEach(e -> {
+			if (e.getType() == 1) {
+				List<UserActivityRankRobot> UserActivityRankRobots = rankRootMapper.selectList(Wrappers.lambdaQuery(UserActivityRankRobot.class)
+						.eq(UserActivityRankRobot::getAcId, e.getId()));
+				e.setRankRobots(UserActivityRankRobots);
+
+				try {
+					if (StrUtil.isNotBlank(e.getRewardInfo())) {
+						List<UserActivity.RewardInfo> rewardInfos = Jsons.parseList(e.getRewardInfo(), UserActivity.RewardInfo.class);
+						e.setRewardInfoList(rewardInfos);
+					}
+				} catch (Exception ex) {
+				}
+			}
+		});
 		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
 	}