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

Merge remote-tracking branch 'origin/master'

liub 4 месяцев назад
Родитель
Сommit
24ffe67ece

+ 6 - 0
commons/src/main/java/com/jzg/commons/config/MultiTenantHandler.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.base.TenantContext;
 import com.jzg.commons.entity.properties.TenantProperties;
+import com.jzg.commons.util.TenantContextUtils;
 import jakarta.servlet.http.HttpServletRequest;
 import jodd.util.StringUtil;
 import net.sf.jsqlparser.expression.Expression;
@@ -44,6 +45,11 @@ public class MultiTenantHandler implements TenantLineHandler {
      */
     @Override
     public Expression getTenantId() {
+        // 用于合伙人定时任务处理租户code
+        String customTenantId = TenantContextUtils.getCustomTenantId();
+        if (StringUtil.isNotEmpty(customTenantId)) {
+            return new StringValue(customTenantId);
+        }
         // 实际应该从用户信息中获取,框架一般都有获取用户信息的接口
         String tenant_id = controller.getUserLoginSystem();
         //如果使用的是APP 则从请求头中获取租户id

+ 1 - 1
commons/src/main/java/com/jzg/commons/core/base/PartnerBaseModel.java

@@ -35,7 +35,7 @@ public class PartnerBaseModel implements Serializable {
     @TableField(fill = FieldFill.INSERT_UPDATE)
     private LocalDateTime updateTime;
 
-
+    @TableField(value = "system_code")
     private String systemCode;
 
 }

+ 50 - 0
commons/src/main/java/com/jzg/commons/util/TenantContextUtils.java

@@ -0,0 +1,50 @@
+package com.jzg.commons.util;
+
+public class TenantContextUtils {
+
+    private static final ThreadLocal<Boolean> INTERNAL_INVOCATION = ThreadLocal.withInitial(() -> false);
+
+    public static boolean isInternalInvocation() {
+        return INTERNAL_INVOCATION.get();
+    }
+    public static void setInternalInvocation(boolean internalInvocation) {
+        INTERNAL_INVOCATION.set(internalInvocation);
+    }
+    public static void clearInternalInvocation() {
+        INTERNAL_INVOCATION.remove();
+    }
+
+    // ===================== 新增:自定义租户ID 核心代码 =====================
+    // 线程隔离存储自定义租户ID
+    private static final ThreadLocal<String> CUSTOM_TENANT_ID = new ThreadLocal<>();
+
+    /**
+     * 手动设置自定义租户ID
+     */
+    public static void setCustomTenantId(String tenantId) {
+        CUSTOM_TENANT_ID.set(tenantId);
+    }
+
+    /**
+     * 获取自定义租户ID
+     */
+    public static String getCustomTenantId() {
+        return CUSTOM_TENANT_ID.get();
+    }
+
+    /**
+     * 清空自定义租户ID(必须调用,防止内存泄漏)
+     */
+    public static void clearCustomTenantId() {
+        CUSTOM_TENANT_ID.remove();
+    }
+
+    /**
+     * 一键清空所有租户上下文(推荐使用)
+     */
+    public static void clear() {
+        clearInternalInvocation();
+        clearCustomTenantId();
+    }
+
+}

+ 1 - 1
partner/src/main/java/com/jzg/PartnerApplication.java

@@ -12,6 +12,6 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 @EnableScheduling
 public class PartnerApplication {
     public static void main(String[] args) {
-        SpringApplication.run(PartnerApplication.class);
+        SpringApplication.run(PartnerApplication.class,args);
     }
 }

+ 18 - 0
partner/src/main/java/com/jzg/config/ScheduledThreadPoolConfig.java

@@ -0,0 +1,18 @@
+package com.jzg.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+
+@Configuration
+public class ScheduledThreadPoolConfig implements SchedulingConfigurer {
+    @Override
+    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
+        scheduler.setPoolSize(10);
+        scheduler.setThreadNamePrefix("partner-task-");
+        scheduler.initialize();
+        taskRegistrar.setTaskScheduler(scheduler);
+    }
+}

+ 1 - 1
partner/src/main/java/com/jzg/controller/PartnerUserController.java

@@ -241,7 +241,7 @@ public class PartnerUserController extends BaseController {
      */
     @GetMapping("checkCommissionExpireTime")
     public void checkCommissionExpireTime() {
-        SpringUtil.getBean(TimedTaskUtils.class).checkCommissionExpireTime();
+        SpringUtil.getBean(TimedTaskUtils.class).updateOrderDateNoon();
     }
 
 

+ 0 - 4
partner/src/main/java/com/jzg/entity/PartnerUser.java

@@ -90,10 +90,6 @@ public class PartnerUser extends PartnerBaseModel {
      */
     private Date upgradeTime;
 
-
-    @TableField(value = "system_code")
-    private String systemCode;
-
     @TableField(value = "status")
     private boolean status;
 

+ 2 - 1
partner/src/main/java/com/jzg/entity/param/PartnerRuleEntity.java

@@ -59,6 +59,7 @@ public class PartnerRuleEntity implements Serializable {
     @TableField(exist = false)
     private String assessmentEndDate;
 
-
+    @Schema(description = "租户code")
+    private String  systemCode;
 
 }

+ 5 - 0
partner/src/main/java/com/jzg/mapper/PartnerUserMapper.java

@@ -1,6 +1,7 @@
 package com.jzg.mapper;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -216,4 +217,8 @@ public interface PartnerUserMapper extends BaseMapper<PartnerUser> {
     List<PartnerUser> selectListByUserId(@Param("userId") String userId);
 
     SysPartnerAccount selectFee(@Param("userId") String userId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<String> distinctSystemCode();
+
 }

+ 5 - 0
partner/src/main/java/com/jzg/service/Impl/PartnerRuleServiceImpl.java

@@ -328,6 +328,11 @@ public class PartnerRuleServiceImpl extends ServiceImpl<PartnerRuleMapper, Partn
         return new BigDecimal(number);
     }
 
+    @Override
+    public List<PartnerRuleEntity> querySystemCodeAll() {
+        return attributeMapper.queryAll();
+    }
+
     @Override
     public  CommissionValidityPeriod getCommissionValidityPeriod(PartnerAttribute cycle1, String userId, String grade) {
         CommissionValidityPeriod period = new CommissionValidityPeriod();

+ 2 - 0
partner/src/main/java/com/jzg/service/PartnerRuleService.java

@@ -54,4 +54,6 @@ public interface PartnerRuleService {
 
     BigDecimal getInviteData(String userId, String grade, CommissionValidityPeriod period);
 
+    List<PartnerRuleEntity> querySystemCodeAll();
+
 }

+ 84 - 58
partner/src/main/java/com/jzg/utils/TimedTaskUtils.java

@@ -6,6 +6,7 @@ import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.jzg.commons.util.StringUtils;
+import com.jzg.commons.util.TenantContextUtils;
 import com.jzg.entity.*;
 import com.jzg.entity.param.PartnerRuleEntity;
 import com.jzg.mapper.PartnerExpiredCommissionMapper;
@@ -61,35 +62,46 @@ public class TimedTaskUtils {
     @Scheduled(cron = "0 0 0 * * *")
     public void updateOrderDateNoon() {
         log.info("记录佣金过期定时任务开始执行:{}", expireDays);
-        List<PartnerUser> partnerUserList = partnerUserMapper.queryExpiredRecords(expireDays);
-        for (PartnerUser partnerUser : partnerUserList) {
-            String date = PartnerDateUtils.timeExample(expireDays + 1);
-            LambdaQueryWrapper<PartnerPremiumDetails> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-            lambdaQueryWrapper.eq(PartnerPremiumDetails::getUserId, partnerUser.getUserId())
-                    .eq(PartnerPremiumDetails::getSource, partnerUser.getGrade())
-                    .eq(PartnerPremiumDetails::getAppStatus, 1)
-                    .between(PartnerPremiumDetails::getCreateTime,date+" 00:00:00",date+" 23:59:59");
-            List<PartnerPremiumDetails> partnerPremiumDetails = premiumDetailsMapper.selectList(lambdaQueryWrapper);
-            if (CollectionUtil.isNotEmpty(partnerPremiumDetails)){
-                BigDecimal lockCommission = partnerPremiumDetails.stream().map(PartnerPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add);
-                PartnerExpiredCommission commission = getExpiredUserCommission(partnerUser,lockCommission,date);
-                expiredCommissionMapper.insert(commission);
-                if (null != lockCommission){
-                    PartnerPartnerAccount account = accountMapper.selectOne(new LambdaQueryWrapper<>(PartnerPartnerAccount.class)
-                            .eq(PartnerPartnerAccount::getUserId, partnerUser.getUserId()).eq(PartnerPartnerAccount::getGrade, partnerUser.getGrade()));
-                    if (null == account) {
-                        continue;
-                    }
-                    if (null != lockCommission){
-                        account.setExpiredAmount(account.getExpiredAmount().add(lockCommission));
-                        accountMapper.updateById(account);
-                    }
-                    //更新单据状态
-                    for (PartnerPremiumDetails detail : partnerPremiumDetails) {
-                        detail.setAppStatus(2);
-                        premiumDetailsMapper.updateById(detail);
+        // 查询所有用户的租户code
+        List<String> systemCodeList = partnerUserMapper.distinctSystemCode();
+        for (String systemCode : systemCodeList) {
+            TenantContextUtils.setCustomTenantId(systemCode);
+            try {
+                List<PartnerUser> partnerUserList = partnerUserMapper.queryExpiredRecords(expireDays);
+                for (PartnerUser partnerUser : partnerUserList) {
+                    String date = PartnerDateUtils.timeExample(expireDays + 1);
+                    LambdaQueryWrapper<PartnerPremiumDetails> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+                    lambdaQueryWrapper.eq(PartnerPremiumDetails::getUserId, partnerUser.getUserId())
+                            .eq(PartnerPremiumDetails::getSource, partnerUser.getGrade())
+                            .eq(PartnerPremiumDetails::getAppStatus, 1)
+                            .between(PartnerPremiumDetails::getCreateTime,date+" 00:00:00",date+" 23:59:59");
+                    List<PartnerPremiumDetails> partnerPremiumDetails = premiumDetailsMapper.selectList(lambdaQueryWrapper);
+                    if (CollectionUtil.isNotEmpty(partnerPremiumDetails)){
+                        BigDecimal lockCommission = partnerPremiumDetails.stream().map(PartnerPremiumDetails::getExtractFee).reduce(BigDecimal.ZERO, BigDecimal::add);
+                        PartnerExpiredCommission commission = getExpiredUserCommission(partnerUser,lockCommission,date);
+                        expiredCommissionMapper.insert(commission);
+                        if (null != lockCommission){
+                            PartnerPartnerAccount account = accountMapper.selectOne(new LambdaQueryWrapper<>(PartnerPartnerAccount.class)
+                                    .eq(PartnerPartnerAccount::getUserId, partnerUser.getUserId()).eq(PartnerPartnerAccount::getGrade, partnerUser.getGrade()));
+                            if (null == account) {
+                                continue;
+                            }
+                            if (null != lockCommission){
+                                account.setExpiredAmount(account.getExpiredAmount().add(lockCommission));
+                                accountMapper.updateById(account);
+                            }
+                            //更新单据状态
+                            for (PartnerPremiumDetails detail : partnerPremiumDetails) {
+                                detail.setAppStatus(2);
+                                premiumDetailsMapper.updateById(detail);
+                            }
+                        }
                     }
                 }
+            }catch (Exception e){
+                log.error("updateOrderDateNoon定时任务执行失败:{}",e.getMessage());
+            }finally {
+                TenantContextUtils.clear();
             }
         }
     }
@@ -135,40 +147,54 @@ public class TimedTaskUtils {
     //@XxlJob("checkCommissionExpireTime")
     @Scheduled(cron = "0 0 0 * * *")
     public void checkCommissionExpireTime() {
-        // TODO等级规则
-        List<PartnerRuleEntity> partnerRuleEntities = partnerRuleService.queryAll();
-        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        List<PartnerUser> partnerUsers = partnerUserMapper.queryDowngradedData();
-        Date date = new Date();
-        for (PartnerUser partnerUser : partnerUsers) {
-            PartnerRuleEntity rule = getRule(String.valueOf(partnerUser.getGrade()), partnerRuleEntities);
-            Integer khDays = rule.getKhDays();
-            Date upgradeStartTime = getUpgradeStartTime(partnerUser);
-            if (null == upgradeStartTime){
-                continue;
-            }
-            log.info("开始时间:{}", formatter.format(upgradeStartTime));
-            //  生成结束时间
-            Date upgradeEndTime = PartnerDateUtils.generateEndTime(upgradeStartTime, khDays);
-            log.info("结束时间:{}", formatter.format(upgradeEndTime));
-            if (date.compareTo(upgradeEndTime) >= 0){
-                // TODO考核条件  不满足时需锁定
-                ExpiredCommissionUtils commissionUtils = SpringUtil.getBean(ExpiredCommissionUtils.class);
-                boolean checked = commissionUtils.checkUpgradeConditions(partnerUser);
-                if (!checked){
-                    //TODO  不满足
-                    commissionUtils.generateLockRecords(partnerUser);
+
+        // 查询所有用户的租户code
+        List<String> systemCodeList = partnerUserMapper.distinctSystemCode();
+        for (String systemCode : systemCodeList) {
+            try {
+                TenantContextUtils.setCustomTenantId(systemCode);
+                // TODO等级规则
+                List<PartnerRuleEntity> partnerRuleEntities = partnerRuleService.querySystemCodeAll();
+                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                List<PartnerUser> partnerUsers = partnerUserMapper.queryDowngradedData();
+                Date date = new Date();
+                for (PartnerUser partnerUser : partnerUsers) {
+                    PartnerRuleEntity rule = getRule(String.valueOf(partnerUser.getGrade()), partnerRuleEntities);
+                    Integer khDays = rule.getKhDays();
+                    Date upgradeStartTime = getUpgradeStartTime(partnerUser);
+                    if (null == upgradeStartTime){
+                        continue;
+                    }
+                    log.info("开始时间:{}", formatter.format(upgradeStartTime));
+                    //  生成结束时间
+                    Date upgradeEndTime = PartnerDateUtils.generateEndTime(upgradeStartTime, khDays);
+                    log.info("结束时间:{}", formatter.format(upgradeEndTime));
+                    if (date.compareTo(upgradeEndTime) >= 0){
+                        // TODO考核条件  不满足时需锁定
+                        ExpiredCommissionUtils commissionUtils = SpringUtil.getBean(ExpiredCommissionUtils.class);
+                        boolean checked = commissionUtils.checkUpgradeConditions(partnerUser);
+                        if (!checked){
+                            //TODO  不满足
+                            commissionUtils.generateLockRecords(partnerUser);
+                        }
+                        //TODO    更新考核周期
+                        partnerUserMapper.updateUpgradeCycleStartTime(partnerUser.getUserId(), PartnerDateUtils.addDaysToday(upgradeEndTime,1),partnerUser.getGrade());
+                        partnerUserMapper.updateNextLevelAssessmentTime(partnerUser.getUserId(), (partnerUser.getGrade() + 1),PartnerDateUtils.addDaysToday(upgradeEndTime,1));
+                    }
+
                 }
-                //TODO    更新考核周期
-                partnerUserMapper.updateUpgradeCycleStartTime(partnerUser.getUserId(), PartnerDateUtils.addDaysToday(upgradeEndTime,1),partnerUser.getGrade());
-                partnerUserMapper.updateNextLevelAssessmentTime(partnerUser.getUserId(), (partnerUser.getGrade() + 1),PartnerDateUtils.addDaysToday(upgradeEndTime,1));
+                List<String> idList = partnerUsers.stream()
+                        .map(PartnerUser::getId)
+                        .collect(Collectors.toList());
+                update(partnerRuleEntities,idList);
+            }catch (Exception e){
+                e.printStackTrace();
+                log.error("checkCommissionExpireTime定时任务执行失败:{}",e.getMessage());
+            }finally {
+                TenantContextUtils.clear();
             }
-
         }
-        List<String> idList = partnerUsers.stream()
-                .map(PartnerUser::getId)
-                .collect(Collectors.toList());
-        update(partnerRuleEntities,idList);
+
     }
 
 

+ 2 - 1
partner/src/main/resources/mapper/PartnerAttributeMapper.xml

@@ -14,6 +14,7 @@
         <result property="khDays" column="kh_days"/>
         <result property="fallTick" column="fall_tick"/>
         <result property="fallAmount" column="fall_amount"/>
+        <result property="systemCode" column="system_code"/>
         <association property="cycle"  column="id=id" select="selectCycle" />
         <collection property="strategyArray" column="id=id" select="selectStrategy" />
         <collection property="requirement" column="id=id" select="selectRequirement" />
@@ -36,7 +37,7 @@
     </resultMap>
 
     <select id="queryAll" resultMap="BaseMapper">
-        select id, upgrade, relegation, grade_name, grade, appraise, rel_satisfy,strategy,kh_days,fall_tick,fall_amount from partner_rule
+        select id, upgrade, relegation, grade_name, grade, appraise, rel_satisfy,strategy,kh_days,fall_tick,fall_amount,system_code from partner_rule
     </select>
 
 

+ 5 - 0
partner/src/main/resources/mapper/PartnerUserMapper.xml

@@ -1230,4 +1230,9 @@ SELECT
     </select>
 
 
+    <select id="distinctSystemCode" resultType="java.lang.String">
+        SELECT DISTINCT system_code FROM partner_user where system_code is not null and system_code != ''
+    </select>
+
+
 </mapper>