ExpiredCommissionUtils.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. package com.ydtech.modules.partner.utils;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.extra.spring.SpringUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.ydtech.modules.admin.model.SysUser;
  6. import com.ydtech.modules.admin.service.SysUserService;
  7. import com.ydtech.modules.admin.service.impl.SysUserServiceImpl;
  8. import com.ydtech.modules.partner.dao.PartnerUserMapper;
  9. import com.ydtech.modules.partner.model.PartnerAttribute;
  10. import com.ydtech.modules.partner.model.PartnerLiftingRecord;
  11. import com.ydtech.modules.partner.model.PartnerUser;
  12. import com.ydtech.modules.partner.model.param.PartnerRuleEntity;
  13. import com.ydtech.modules.partner.service.PartnerLiftingRecordService;
  14. import com.ydtech.modules.partner.service.PartnerRuleService;
  15. import com.ydtech.utils.StringUtils;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Component;
  18. import org.springframework.transaction.annotation.Transactional;
  19. import java.time.LocalDateTime;
  20. import java.time.format.DateTimeFormatter;
  21. import java.util.Date;
  22. import java.util.List;
  23. import java.util.Objects;
  24. /**
  25. * 降级辅助 类
  26. */
  27. @Component
  28. public class ExpiredCommissionUtils {
  29. @Autowired
  30. private PartnerUserMapper partnerUserMapper;
  31. @Autowired
  32. private PartnerRuleService partnerRuleService;
  33. @Autowired
  34. private PartnerLiftingRecordService liftingRecordService;
  35. @Autowired
  36. private SysUserService sysUserService;
  37. /**
  38. * 登录初始化用户升级时间
  39. */
  40. @Transactional(rollbackFor = Exception.class)
  41. public void initCommissionExpireTime(String userId) {
  42. // 等级规则
  43. List<PartnerRuleEntity> partnerRuleEntities = partnerRuleService.queryAll();
  44. List<PartnerUser> partnerUsers = partnerUserMapper.selectList(new QueryWrapper<PartnerUser>().eq("user_id", userId));
  45. for (PartnerUser partnerUser : partnerUsers) {
  46. if (1 == partnerUser.getGrade()) {
  47. continue;
  48. }
  49. PartnerRuleEntity rule = getRule(String.valueOf(partnerUser.getGrade()), partnerRuleEntities);
  50. PartnerAttribute cycle = rule.getCycle();
  51. String grade = String.valueOf(partnerUser.getGrade());
  52. if ("1".equals(cycle.getCycle())) {
  53. Date upgradeTime = partnerUserMapper.selectUpgradeTime(userId, grade);
  54. if (upgradeTime == null) {
  55. partnerUserMapper.updateUpgradeTime(userId, grade);
  56. }
  57. } else if ("2".equals(cycle.getCycle())) {
  58. Date upgradeTime = partnerUserMapper.selectUpgradeTime(userId, grade);
  59. if (upgradeTime == null) {
  60. partnerUserMapper.updateUpgradeTime(userId, grade);
  61. upgradeTime = partnerUserMapper.selectUpgradeTime(userId, grade);
  62. }
  63. String fixedDays = cycle.getFixedDays();
  64. if (!PartnerDateUtils.isWithinDays(upgradeTime, Integer.valueOf(fixedDays))) {
  65. updateUpgradeTimeByDate(upgradeTime, Integer.valueOf(fixedDays), userId, partnerUser.getGrade());
  66. }
  67. } else if ("3".equals(cycle.getCycle())) {
  68. // TODO: 添加相应的逻辑处理
  69. }
  70. }
  71. }
  72. public PartnerRuleEntity getRule(String grade,List<PartnerRuleEntity> partnerRuleEntities) {
  73. return partnerRuleEntities.stream().filter(partnerRuleEntity -> StringUtils.equals(partnerRuleEntity.getGrade(), grade)).findAny().orElse(null);
  74. }
  75. private void updateUpgradeTimeByDate(Date assessmentTime, int days, String userId,Integer grade) {
  76. Date newDate = PartnerDateUtils.addDaysToday(assessmentTime, days);
  77. while (!PartnerDateUtils.isWithinDays(newDate, days)) {
  78. newDate = PartnerDateUtils.addDaysToday(newDate, days);
  79. }
  80. partnerUserMapper.updateUpgradeTimeByDate(userId, newDate,grade);
  81. }
  82. /**
  83. * 登录初始化过期时间
  84. */
  85. @Transactional(rollbackFor = Exception.class)
  86. public void initializeExpirationTime(String userId) {
  87. List<PartnerUser> partnerUsers = partnerUserMapper.selectList(new QueryWrapper<PartnerUser>().eq("user_id", userId));
  88. for (PartnerUser partnerUser : partnerUsers) {
  89. if (null == partnerUser.getUpgradeCycleStartTime()){
  90. partnerUserMapper.updateUpgradeStartTime(userId, partnerUser.getGrade());
  91. }
  92. }
  93. }
  94. /**
  95. * TODO: 登录计算用户身份是否过期
  96. */
  97. // @Transactional(rollbackFor = Exception.class)
  98. // public void checkCommissionExpireTime(String userId) {
  99. // // TODO等级规则
  100. // List<PartnerRuleEntity> partnerRuleEntities = partnerRuleService.queryAll();
  101. // SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  102. // List<PartnerUser> partnerUsers = partnerUserMapper.selectList(new QueryWrapper<PartnerUser>().eq("user_id", userId));
  103. // for (PartnerUser partnerUser : partnerUsers) {
  104. // if (1 == partnerUser.getGrade() || partnerUser.isIdentityStatus()) {
  105. // continue;
  106. // }
  107. // PartnerRuleEntity rule = getRule(String.valueOf(partnerUser.getGrade()), partnerRuleEntities);
  108. // Integer khDays = rule.getKhDays();
  109. // Date upgradeStartTime = partnerUserMapper.selectUpgradeStartTime(userId, partnerUser.getGrade());
  110. // if (upgradeStartTime == null) {
  111. // partnerUserMapper.updateUpgradeStartTime(userId, partnerUser.getGrade());
  112. // }else {
  113. // //TODO 更新考核周期
  114. // updateUpgradeCycleTime(partnerUser,rule, upgradeStartTime);
  115. // }
  116. // upgradeStartTime = partnerUserMapper.selectUpgradeStartTime(userId, partnerUser.getGrade());
  117. // System.out.println("开始时间:" + formatter.format(upgradeStartTime));
  118. // // 生成结束时间
  119. // Date upgradeEndTime = PartnerDateUtils.addDays(upgradeStartTime, khDays);
  120. // System.out.println("结束时间:" + formatter.format(upgradeEndTime));
  121. // // 判断当前时间是否大于考核周期时间
  122. // boolean withinDays = PartnerDateUtils.isBefore(upgradeEndTime);
  123. // if (withinDays){
  124. // List<PartnerAttribute> strategyArray = rule.getStrategyArray();
  125. // String appraise = rule.getAppraise();
  126. // // TODO考核条件 不满足时需锁定
  127. // boolean checked = checkUpgradeConditions(partnerUser, appraise, strategyArray);
  128. // if (checked){
  129. // // TODO 满足
  130. // }else {
  131. // //TODO 不满足
  132. // generateLockRecords(partnerUser);
  133. // }
  134. //
  135. // }
  136. // }
  137. // }
  138. // public void updateUpgradeCycleTime(PartnerUser partnerUser,PartnerRuleEntity rule,Date upgradeTime) {
  139. // Integer khDays = rule.getKhDays();
  140. // while (!PartnerDateUtils.isWithinDays(upgradeTime, khDays)) {
  141. // upgradeTime = PartnerDateUtils.addDaysToday(upgradeTime, khDays);
  142. // }
  143. // partnerUserMapper.updateUpgradeCycleStartTime(partnerUser.getUserId(), upgradeTime,partnerUser.getGrade());
  144. // }
  145. /**
  146. * TODO 生成降级记录
  147. * @param partnerUser
  148. */
  149. public void generateLockRecords(PartnerUser partnerUser){
  150. // Long aLong = liftingRecordService.selectQueryDowngradeStatus(partnerUser.getUserId(), partnerUser.getGrade());
  151. // if (aLong > 0){
  152. // return;
  153. // }
  154. PartnerUser selectOne = partnerUserMapper.selectOne(new QueryWrapper<PartnerUser>().eq("user_id", partnerUser.getUserId()).eq("grade", (partnerUser.getGrade() + 1)));
  155. PartnerUser user = new PartnerUser();
  156. BeanUtil.copyProperties(partnerUser,user);
  157. user.setGrade(4 == partnerUser.getGrade() ? 4 : partnerUser.getGrade() + 1);
  158. user.setReferrerId(partnerUser.getUserId());
  159. user.setId(null);
  160. if (Objects.isNull(selectOne) && 4 != partnerUser.getGrade()){
  161. if (4 == user.getGrade()){
  162. SysUser sysUser = sysUserService.getById(user.getUserId());
  163. String deptId = SpringUtil.getBean(SysUserServiceImpl.class).addDeptUser(sysUser, "4");
  164. user.setDeptId(deptId);
  165. }
  166. partnerUserMapper.insert(user);
  167. }
  168. partnerUser.setIdentityStatus(true);
  169. partnerUser.setCommissionRate(null);
  170. partnerUser.setIdentityTime(PartnerDateUtils.addDaysToday(new Date(),0));
  171. partnerUserMapper.updateById(partnerUser);
  172. partnerUserMapper.resetFixedRatio(partnerUser.getUserId(),user.getGrade());
  173. PartnerLiftingRecord liftingRecord = getLiftingRecord(partnerUser, user);
  174. liftingRecordService.saveLiftingRecord(liftingRecord);
  175. }
  176. private static PartnerLiftingRecord getLiftingRecord(PartnerUser partnerUser, PartnerUser user) {
  177. PartnerLiftingRecord liftingRecord = new PartnerLiftingRecord();
  178. liftingRecord.setName(partnerUser.getName());
  179. liftingRecord.setMobile(partnerUser.getMobile());
  180. liftingRecord.setUserId(partnerUser.getUserId());
  181. liftingRecord.setDeptId(partnerUser.getDeptId());
  182. liftingRecord.setDeptName(partnerUser.getDeptName());
  183. liftingRecord.setType("1");
  184. liftingRecord.setOriginalLevel(String.valueOf(partnerUser.getGrade()));
  185. liftingRecord.setAfterChange(String.valueOf(user.getGrade()));
  186. liftingRecord.setCreateTime(new Date());
  187. return liftingRecord;
  188. }
  189. public boolean checkUpgradeConditions(PartnerUser partnerUser) {
  190. return partnerRuleService.verifyDowngradeUpgradeConditions(partnerUser.getUserId(),String.valueOf(partnerUser.getGrade()));
  191. }
  192. /**
  193. * TODO 生成降级时间
  194. * @param grade
  195. */
  196. public String generateDowngradeTime(String grade,String startTime) {
  197. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  198. // TODO等级规则
  199. List<PartnerRuleEntity> partnerRuleEntities = partnerRuleService.queryAll();
  200. PartnerRuleEntity rule = getRule(grade, partnerRuleEntities);
  201. Integer khDays = rule.getKhDays();
  202. try {
  203. LocalDateTime dateTime = LocalDateTime.parse(startTime, formatter);
  204. // 加一天然后减一秒,得到目标日期时间
  205. LocalDateTime resultDateTime = dateTime.plusDays(khDays).minusSeconds(1);
  206. return resultDateTime.format(formatter);
  207. }catch (Exception e){
  208. e.printStackTrace();
  209. }
  210. return "";
  211. }
  212. }