xuqiang 4 місяців тому
батько
коміт
35a8a9dc78

+ 62 - 24
partner/src/main/java/com/jzg/service/Impl/PartnerCommissionServiceImpl.java

@@ -43,13 +43,15 @@ public class PartnerCommissionServiceImpl extends ServiceImpl<PartnerCommissionM
             return 0;
         }
         try {
-            // 保存管理员规则
+            final int ADMIN_TYPE = 1;
+            final int PARTNER_TYPE = 2;
             PartnerCommissionRules administrator = rulesVo.getAdministrator();
             administrator.setFounderRatio(rulesVo.getOriginator());
-            saveCommissionRules(administrator, 1);
+            saveCommissionRules(administrator, ADMIN_TYPE);
             // 保存合伙人规则
-            saveCommissionRules(rulesVo.getPartner(), 2);
+            saveCommissionRules(rulesVo.getPartner(), PARTNER_TYPE);
         } catch (Exception e) {
+            e.printStackTrace();
             throw new SystemException("保存失败", e.getMessage());
         }
         return 1;
@@ -59,38 +61,74 @@ public class PartnerCommissionServiceImpl extends ServiceImpl<PartnerCommissionM
      * 保存 CommissionRules 及其 Ratio 数据
      */
     private void saveCommissionRules(PartnerCommissionRules commissionRules, int proportionType) {
+        // 主表保存
         if (StringUtils.isNotBlank(commissionRules.getId())) {
             baseMapper.updateById(commissionRules);
         } else {
             baseMapper.insert(commissionRules);
         }
+
         List<PartnerRulesRatio> rulesRatioList = commissionRules.getRulesRatioList();
-        if (CollectionUtil.isNotEmpty(rulesRatioList)){
-            for (PartnerRulesRatio rulesRatio : rulesRatioList) {
-                rulesRatio.setProportionType(proportionType);
-                rulesRatio.setCommissionRulesId(commissionRules.getId());
-                if (Objects.nonNull(rulesRatio)) {
-                    if (StringUtils.isNotBlank(rulesRatio.getId())) {
-                        rulesRatioMapper.updateById(rulesRatio);
-                    } else {
-                        rulesRatioMapper.insert(rulesRatio);
-                    }
-                    List<PartnerRatio> ratioList = rulesRatio.getPartnerRatioList();
-                    if (CollectionUtil.isNotEmpty(ratioList)){
-                        for (PartnerRatio ratio : ratioList) {
-                            ratio.setRulesRatioId(rulesRatio.getId());
-                            if (StringUtils.isNotBlank(ratio.getId())) {
-                                ratioMapper.updateById(ratio);
-                            } else {
-                                ratioMapper.insert(ratio);
-                            }
-                        }
-                    }
+        if (CollectionUtil.isEmpty(rulesRatioList)) {
+            return;
+        }
+        List<PartnerRulesRatio> dbRulesRatio = rulesRatioMapper.selectList(new LambdaQueryWrapper<>(PartnerRulesRatio.class)
+                .eq(PartnerRulesRatio::getCommissionRulesId, commissionRules.getId()));
+        // 获取要删除的ID
+        List<String> deleteRatioIds = getDeleteIds(dbRulesRatio, rulesRatioList);
+        if (CollectionUtil.isNotEmpty(deleteRatioIds)) {
+            rulesRatioMapper.deleteByIds(deleteRatioIds);
+        }
+        for (PartnerRulesRatio rulesRatio : rulesRatioList) {
+            if (Objects.isNull(rulesRatio)) {
+                continue;
+            }
+            rulesRatio.setProportionType(proportionType);
+            rulesRatio.setCommissionRulesId(commissionRules.getId());
+            if (StringUtils.isNotBlank(rulesRatio.getId())) {
+                rulesRatioMapper.updateById(rulesRatio);
+            } else {
+                rulesRatioMapper.insert(rulesRatio);
+            }
+            List<PartnerRatio> ratioList = rulesRatio.getPartnerRatioList();
+            if (CollectionUtil.isEmpty(ratioList)) {
+                continue;
+            }
+            List<PartnerRatio> dbRatio = ratioMapper.selectList(new LambdaQueryWrapper<>(PartnerRatio.class)
+                    .eq(PartnerRatio::getRulesRatioId, rulesRatio.getId()));
+            List<String> deleteIds = getDeleteIds(dbRatio, ratioList);
+            if (CollectionUtil.isNotEmpty(deleteIds)){
+                ratioMapper.deleteByIds(deleteIds);
+            }
+            for (PartnerRatio ratio : ratioList) {
+                ratio.setRulesRatioId(rulesRatio.getId());
+                if (StringUtils.isNotBlank(ratio.getId())) {
+                    ratioMapper.updateById(ratio);
+                } else {
+                    ratioMapper.insert(ratio);
                 }
             }
         }
     }
 
+    private <T> List<String> getDeleteIds(List<T> dbList, List<T> keepList) {
+        List<String> dbIds = dbList.stream().map(item -> {
+            try {
+                return (String) item.getClass().getMethod("getId").invoke(item);
+            } catch (Exception e) {
+                return null;
+            }
+        }).filter(Objects::nonNull).toList();
+        List<String> keepIds = keepList.stream().map(item -> {
+            try {
+                return (String) item.getClass().getMethod("getId").invoke(item);
+            } catch (Exception e) {
+                return null;
+            }
+        }).filter(Objects::nonNull).toList();
+        return dbIds.stream().filter(id -> !keepIds.contains(id)).toList();
+    }
+
     @Override
     public CommissionRulesVo queryAll() {
         List<PartnerCommissionRules> commissionRules = baseMapper.selectList(new LambdaQueryWrapper<>(PartnerCommissionRules.class));

+ 55 - 21
partner/src/main/java/com/jzg/service/Impl/PartnerPremiumDetailsServiceImpl.java

@@ -1,6 +1,9 @@
 package com.jzg.service.Impl;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -26,10 +29,7 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -57,35 +57,69 @@ public class PartnerPremiumDetailsServiceImpl extends ServiceImpl<PartnerPremium
      * @author lipf
      * @date 2026/4/15 14:58
      */
-    @Override
     public IPage queryPage(PartnerDetailsParam detailsParam) {
         log.info("查询佣金明细:detailsParam=[{}]", JSONUtil.toJsonStr(detailsParam));
         QueryWrapper<PartnerPremiumDetails> queryWrapper = new QueryWrapper<>();
-
-        queryWrapper.like(StringUtils.isNotBlank(detailsParam.getUserName()), "info.`name`",detailsParam.getUserName());
-        queryWrapper.like(StringUtils.isNotBlank(detailsParam.getMobile()), "u.mobile",detailsParam.getMobile());
-        queryWrapper.like(StringUtils.isNotBlank(detailsParam.getUserId()), "d.user_id",detailsParam.getUserId());
-        queryWrapper.like(StringUtils.isNotBlank(detailsParam.getOrderno()), "d.orderno",detailsParam.getOrderno());
-        queryWrapper.like(StringUtils.isNotBlank(detailsParam.getLicenseno()), "d.licenseno",detailsParam.getLicenseno());
-        if (CollectionUtil.isNotEmpty(detailsParam.getSigningTime())){
-            String startTime = detailsParam.getSigningTime().get(0);
-            String endTime = null;
-            if (detailsParam.getSigningTime().size() >= 2){
-                endTime = detailsParam.getSigningTime().get(1);
-            }
-            if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) {
+        // 拼接查询条件
+        queryWrapper.like(StrUtil.isNotBlank(detailsParam.getUserName()), "info.`name`", detailsParam.getUserName());
+        queryWrapper.like(StrUtil.isNotBlank(detailsParam.getMobile()), "u.mobile", detailsParam.getMobile());
+        queryWrapper.like(StrUtil.isNotBlank(detailsParam.getUserId()), "d.user_id", detailsParam.getUserId());
+        queryWrapper.like(StrUtil.isNotBlank(detailsParam.getOrderno()), "d.orderno", detailsParam.getOrderno());
+        queryWrapper.like(StrUtil.isNotBlank(detailsParam.getLicenseno()), "d.licenseno", detailsParam.getLicenseno());
+        List<String> signingTime = detailsParam.getSigningTime();
+        if (CollectionUtil.isNotEmpty(signingTime)) {
+            String startTime = signingTime.size() > 0 ? signingTime.get(0) : null;
+            String endTime = signingTime.size() > 1 ? signingTime.get(1) : null;
+            startTime = formatStartTime(startTime);
+            endTime = formatEndTime(endTime);
+            if (StrUtil.isNotBlank(startTime) && StrUtil.isNotBlank(endTime)) {
                 queryWrapper.between("d.create_time", startTime, endTime);
-            } else if (startTime != null) {
+            } else if (StrUtil.isNotBlank(startTime)) {
                 queryWrapper.ge("d.create_time", startTime);
-            } else if (endTime != null) {
+            } else if (StrUtil.isNotBlank(endTime)) {
                 queryWrapper.le("d.create_time", endTime);
             }
         }
-        queryWrapper.orderByDesc("d.create_time");
         queryWrapper.eq("d.status", 1);
+        queryWrapper.orderByDesc("d.create_time");
         return baseMapper.queryPage(detailsParam.getPage(), queryWrapper);
     }
 
+    /**
+     * 格式化开始时间:没有时分秒则补 00:00:00
+     */
+    private String formatStartTime(String timeStr) {
+        if (StrUtil.isBlank(timeStr)) {
+            return null;
+        }
+        try {
+            Date date = DateUtil.parse(timeStr);
+            return DateUtil.format(date, DatePattern.NORM_DATETIME_PATTERN);
+        } catch (Exception e) {
+            log.warn("开始时间格式异常: {}", timeStr);
+            return null;
+        }
+    }
+
+    /**
+     * 格式化结束时间:没有时分秒则补 23:59:59
+     */
+    private String formatEndTime(String timeStr) {
+        if (StrUtil.isBlank(timeStr)) {
+            return null;
+        }
+        try {
+            Date date = DateUtil.parse(timeStr);
+            if (timeStr.length() <= 10) {
+                date = DateUtil.endOfDay(date);
+            }
+            return DateUtil.format(date, DatePattern.NORM_DATETIME_PATTERN);
+        } catch (Exception e) {
+            log.warn("结束时间格式异常: {}", timeStr);
+            return null;
+        }
+    }
+
     @Override
     public JSONObject queryExpiredLockRecords(PartnerDetailsParam detailsParam) {
         LambdaQueryWrapper<PartnerPremiumDetails> lambdaQueryWrapper = new LambdaQueryWrapper<>();

+ 14 - 1
tenant/organization/src/main/resources/mapper/SysUserJzgInfoMapper.xml

@@ -389,7 +389,7 @@
             leader.`name` AS leaderIdName,
             sa.partner_review_time,
             pa.`name` partner_reviewer,
-            (SELECT GROUP_CONCAT(grade SEPARATOR ',' ) FROM partner_user p WHERE p.user_id = info.id) gradeList
+            pu.gradeList
         FROM
             sys_user_jzg_info info
                 LEFT JOIN sys_user u ON u.id = info.user_id
@@ -398,9 +398,22 @@
                 LEFT JOIN sys_user_jzg_info leader ON leader.id = info.leader_id
                 LEFT JOIN sys_user_jzg_info_salesman sa ON sa.sys_user_jzg_info_id = info.id
                 LEFT JOIN sys_user_jzg_info pa ON pa.user_id = sa.partner_reviewer
+                LEFT JOIN (SELECT user_id, GROUP_CONCAT(grade SEPARATOR ',') AS gradeList FROM partner_user GROUP BY user_id ) pu ON pu.user_id = info.id
         WHERE
             sa.type_attr = 3
           AND sa.partner_status = #{partnerReviewParam.partnerStatus}
+        <if test="partnerReviewParam.name !='' and partnerReviewParam.name != null">
+            AND info.`name` like concat('%',#{partnerReviewParam.name},'%')
+        </if>
+        <if test="partnerReviewParam.leaderId !='' and partnerReviewParam.leaderId != null">
+            AND leader.`name` like concat('%',#{partnerReviewParam.leaderId},'%')
+        </if>
+        <if test="partnerReviewParam.deptId !='' and partnerReviewParam.deptId != null">
+            AND info.`dept_id` = #{partnerReviewParam.deptId}
+        </if>
+        <if test="partnerReviewParam.grade !='' and partnerReviewParam.grade != null">
+            AND FIND_IN_SET(#{partnerReviewParam.grade}, pu.gradeList)
+        </if>
     </select>
 
     <select id="isPartnerPresent" resultType="java.lang.Boolean">