package com.ydtech.modules.partner.utils; import cn.hutool.core.bean.BeanUtil; import cn.hutool.extra.spring.SpringUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ydtech.modules.admin.model.SysUser; import com.ydtech.modules.admin.service.SysUserService; import com.ydtech.modules.admin.service.impl.SysUserServiceImpl; import com.ydtech.modules.partner.dao.PartnerUserMapper; import com.ydtech.modules.partner.model.PartnerAttribute; import com.ydtech.modules.partner.model.PartnerLiftingRecord; import com.ydtech.modules.partner.model.PartnerUser; import com.ydtech.modules.partner.model.param.PartnerRuleEntity; import com.ydtech.modules.partner.service.PartnerLiftingRecordService; import com.ydtech.modules.partner.service.PartnerRuleService; import com.ydtech.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.List; import java.util.Objects; /** * 降级辅助 类 */ @Component public class ExpiredCommissionUtils { @Autowired private PartnerUserMapper partnerUserMapper; @Autowired private PartnerRuleService partnerRuleService; @Autowired private PartnerLiftingRecordService liftingRecordService; @Autowired private SysUserService sysUserService; /** * 登录初始化用户升级时间 */ @Transactional(rollbackFor = Exception.class) public void initCommissionExpireTime(String userId) { // 等级规则 List partnerRuleEntities = partnerRuleService.queryAll(); List partnerUsers = partnerUserMapper.selectList(new QueryWrapper().eq("user_id", userId)); for (PartnerUser partnerUser : partnerUsers) { if (1 == partnerUser.getGrade()) { continue; } PartnerRuleEntity rule = getRule(String.valueOf(partnerUser.getGrade()), partnerRuleEntities); PartnerAttribute cycle = rule.getCycle(); String grade = String.valueOf(partnerUser.getGrade()); if ("1".equals(cycle.getCycle())) { Date upgradeTime = partnerUserMapper.selectUpgradeTime(userId, grade); if (upgradeTime == null) { partnerUserMapper.updateUpgradeTime(userId, grade); } } else if ("2".equals(cycle.getCycle())) { Date upgradeTime = partnerUserMapper.selectUpgradeTime(userId, grade); if (upgradeTime == null) { partnerUserMapper.updateUpgradeTime(userId, grade); upgradeTime = partnerUserMapper.selectUpgradeTime(userId, grade); } String fixedDays = cycle.getFixedDays(); if (!PartnerDateUtils.isWithinDays(upgradeTime, Integer.valueOf(fixedDays))) { updateUpgradeTimeByDate(upgradeTime, Integer.valueOf(fixedDays), userId, partnerUser.getGrade()); } } else if ("3".equals(cycle.getCycle())) { // TODO: 添加相应的逻辑处理 } } } public PartnerRuleEntity getRule(String grade,List partnerRuleEntities) { return partnerRuleEntities.stream().filter(partnerRuleEntity -> StringUtils.equals(partnerRuleEntity.getGrade(), grade)).findAny().orElse(null); } private void updateUpgradeTimeByDate(Date assessmentTime, int days, String userId,Integer grade) { Date newDate = PartnerDateUtils.addDaysToday(assessmentTime, days); while (!PartnerDateUtils.isWithinDays(newDate, days)) { newDate = PartnerDateUtils.addDaysToday(newDate, days); } partnerUserMapper.updateUpgradeTimeByDate(userId, newDate,grade); } /** * 登录初始化过期时间 */ @Transactional(rollbackFor = Exception.class) public void initializeExpirationTime(String userId) { List partnerUsers = partnerUserMapper.selectList(new QueryWrapper().eq("user_id", userId)); for (PartnerUser partnerUser : partnerUsers) { if (null == partnerUser.getUpgradeCycleStartTime()){ partnerUserMapper.updateUpgradeStartTime(userId, partnerUser.getGrade()); } } } /** * TODO: 登录计算用户身份是否过期 */ // @Transactional(rollbackFor = Exception.class) // public void checkCommissionExpireTime(String userId) { // // TODO等级规则 // List partnerRuleEntities = partnerRuleService.queryAll(); // SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // List partnerUsers = partnerUserMapper.selectList(new QueryWrapper().eq("user_id", userId)); // for (PartnerUser partnerUser : partnerUsers) { // if (1 == partnerUser.getGrade() || partnerUser.isIdentityStatus()) { // continue; // } // PartnerRuleEntity rule = getRule(String.valueOf(partnerUser.getGrade()), partnerRuleEntities); // Integer khDays = rule.getKhDays(); // Date upgradeStartTime = partnerUserMapper.selectUpgradeStartTime(userId, partnerUser.getGrade()); // if (upgradeStartTime == null) { // partnerUserMapper.updateUpgradeStartTime(userId, partnerUser.getGrade()); // }else { // //TODO 更新考核周期 // updateUpgradeCycleTime(partnerUser,rule, upgradeStartTime); // } // upgradeStartTime = partnerUserMapper.selectUpgradeStartTime(userId, partnerUser.getGrade()); // System.out.println("开始时间:" + formatter.format(upgradeStartTime)); // // 生成结束时间 // Date upgradeEndTime = PartnerDateUtils.addDays(upgradeStartTime, khDays); // System.out.println("结束时间:" + formatter.format(upgradeEndTime)); // // 判断当前时间是否大于考核周期时间 // boolean withinDays = PartnerDateUtils.isBefore(upgradeEndTime); // if (withinDays){ // List strategyArray = rule.getStrategyArray(); // String appraise = rule.getAppraise(); // // TODO考核条件 不满足时需锁定 // boolean checked = checkUpgradeConditions(partnerUser, appraise, strategyArray); // if (checked){ // // TODO 满足 // }else { // //TODO 不满足 // generateLockRecords(partnerUser); // } // // } // } // } // public void updateUpgradeCycleTime(PartnerUser partnerUser,PartnerRuleEntity rule,Date upgradeTime) { // Integer khDays = rule.getKhDays(); // while (!PartnerDateUtils.isWithinDays(upgradeTime, khDays)) { // upgradeTime = PartnerDateUtils.addDaysToday(upgradeTime, khDays); // } // partnerUserMapper.updateUpgradeCycleStartTime(partnerUser.getUserId(), upgradeTime,partnerUser.getGrade()); // } /** * TODO 生成降级记录 * @param partnerUser */ public void generateLockRecords(PartnerUser partnerUser){ // Long aLong = liftingRecordService.selectQueryDowngradeStatus(partnerUser.getUserId(), partnerUser.getGrade()); // if (aLong > 0){ // return; // } PartnerUser selectOne = partnerUserMapper.selectOne(new QueryWrapper().eq("user_id", partnerUser.getUserId()).eq("grade", (partnerUser.getGrade() + 1))); PartnerUser user = new PartnerUser(); BeanUtil.copyProperties(partnerUser,user); user.setGrade(4 == partnerUser.getGrade() ? 4 : partnerUser.getGrade() + 1); user.setReferrerId(partnerUser.getUserId()); user.setId(null); if (Objects.isNull(selectOne) && 4 != partnerUser.getGrade()){ if (4 == user.getGrade()){ SysUser sysUser = sysUserService.getById(user.getUserId()); String deptId = SpringUtil.getBean(SysUserServiceImpl.class).addDeptUser(sysUser, "4"); user.setDeptId(deptId); } partnerUserMapper.insert(user); } partnerUser.setIdentityStatus(true); partnerUser.setCommissionRate(null); partnerUser.setIdentityTime(PartnerDateUtils.addDaysToday(new Date(),0)); partnerUserMapper.updateById(partnerUser); partnerUserMapper.resetFixedRatio(partnerUser.getUserId(),user.getGrade()); PartnerLiftingRecord liftingRecord = getLiftingRecord(partnerUser, user); liftingRecordService.saveLiftingRecord(liftingRecord); } private static PartnerLiftingRecord getLiftingRecord(PartnerUser partnerUser, PartnerUser user) { PartnerLiftingRecord liftingRecord = new PartnerLiftingRecord(); liftingRecord.setName(partnerUser.getName()); liftingRecord.setMobile(partnerUser.getMobile()); liftingRecord.setUserId(partnerUser.getUserId()); liftingRecord.setDeptId(partnerUser.getDeptId()); liftingRecord.setDeptName(partnerUser.getDeptName()); liftingRecord.setType("1"); liftingRecord.setOriginalLevel(String.valueOf(partnerUser.getGrade())); liftingRecord.setAfterChange(String.valueOf(user.getGrade())); liftingRecord.setCreateTime(new Date()); return liftingRecord; } public boolean checkUpgradeConditions(PartnerUser partnerUser) { return partnerRuleService.verifyDowngradeUpgradeConditions(partnerUser.getUserId(),String.valueOf(partnerUser.getGrade())); } /** * TODO 生成降级时间 * @param grade */ public String generateDowngradeTime(String grade,String startTime) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // TODO等级规则 List partnerRuleEntities = partnerRuleService.queryAll(); PartnerRuleEntity rule = getRule(grade, partnerRuleEntities); Integer khDays = rule.getKhDays(); try { LocalDateTime dateTime = LocalDateTime.parse(startTime, formatter); // 加一天然后减一秒,得到目标日期时间 LocalDateTime resultDateTime = dateTime.plusDays(khDays).minusSeconds(1); return resultDateTime.format(formatter); }catch (Exception e){ e.printStackTrace(); } return ""; } }