Browse Source

Merge remote-tracking branch 'origin/dev_jzg_lipf_v20260622' into test

jiakai 2 weeks ago
parent
commit
df4c484c44
16 changed files with 620 additions and 245 deletions
  1. 3 0
      authentication/src/main/java/com/jzg/config/JzgAuthenticationProvider.java
  2. 7 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoiceRecordQueryVo.java
  3. 21 1
      commons/src/main/java/com/jzg/commons/entity/finance/vo/ReceivableQueryVo.java
  4. 27 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/SettlementQueryVo.java
  5. 6 9
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java
  6. 173 97
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  7. 16 12
      tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java
  8. 1 1
      tenant/organization/src/main/java/com/jzg/organization/controller/UserController.java
  9. 9 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/SysUserJzgInfoMapper.java
  10. 1 0
      tenant/organization/src/main/java/com/jzg/organization/service/SysUserService.java
  11. 1 1
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlSchemeServiceImpl.java
  12. 111 61
      tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java
  13. 72 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java
  14. 2 2
      tenant/organization/src/main/resources/application.yml
  15. 102 61
      tenant/organization/src/main/resources/mapper/ReceivableMapper.xml
  16. 68 0
      tenant/organization/src/main/resources/mapper/SysUserJzgInfoMapper.xml

+ 3 - 0
authentication/src/main/java/com/jzg/config/JzgAuthenticationProvider.java

@@ -419,6 +419,9 @@ public class JzgAuthenticationProvider implements AuthenticationProvider {
                     .filter(x -> Objects.equals(x.getSystemCode(), system))
                     .findFirst()
                     .orElse(null);
+            if(sysUserJzgInfo == null){
+                throw new SystemException("该用户信息不存在,请重新输入");
+            }
             // 租户系统才会校验这个, 后台管理系统,没有租户的概念
             if(this.isTenantLogin(system)){
                 if (sysUserJzgInfo.cannotLogin()) {

+ 7 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoiceRecordQueryVo.java

@@ -4,6 +4,7 @@ import com.jzg.commons.core.base.PageRequest;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -88,4 +89,10 @@ public class InvoiceRecordQueryVo extends PageRequest {
      */
     @Schema(description = "签署月份")
     private String signMonth;
+
+    @Schema(description = "开票金额")
+    private BigDecimal receivableSupervisePremium;
+
+    @Schema(description = "开票金额(参数接收)")
+    private String amount;
 }

+ 21 - 1
commons/src/main/java/com/jzg/commons/entity/finance/vo/ReceivableQueryVo.java

@@ -113,6 +113,9 @@ public class ReceivableQueryVo extends PageRequest {
     @Schema(description = "结算状态")
     private String settlementStatus;
 
+//    @Schema(description = "结算人(姓名/手机号)")
+//    private String settlementPerson;
+
     @Schema(description = "开票和结算状态")
     private String invoiceSettlementStatus;
 
@@ -125,6 +128,12 @@ public class ReceivableQueryVo extends PageRequest {
     @Schema(description = "租户代码")
     private String systemCode;
 
+    @Schema(description = "业务员姓名")
+    private String salesmanName;
+
+    @Schema(description = "业务员手机号")
+    private String salemanPhone;
+
     /**
      * 类型:1:手续费 2:跟单费 3:驾意手续费 4:驾意跟单费
      */
@@ -139,15 +148,26 @@ public class ReceivableQueryVo extends PageRequest {
     @Schema(description = "报价开始时间")
     private String reportTimeBegin;
 
+    // 后期调整成 quotationTimeBegin 字段
     @Schema(description = "报价结束时间")
     private String reportTimeEnd;
 
+    @Schema(description = "报价开始时间")
+    private String quotationTimeBegin;
+
+    @Schema(description = "报价结束时间")
+    private String quotationTimeEnd;
+
     @Schema(description = "保险机构")
     private String partnerCompanyId;
 
-    @Schema(description = "修改人")
+    @Schema(description = "应收修改人")
     private String updateBy;
 
+    @Schema(description = "投保人")
+    private String policyholder;
 
+    @Schema(description = "被保人")
+    private String insurName;
 
 }

+ 27 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/SettlementQueryVo.java

@@ -100,4 +100,31 @@ public class SettlementQueryVo extends PageRequest {
 
     @Schema(description = "发票号")
     private String invoiceNo;
+
+    @Schema(description = "交强险保单号")
+    private String jqPolicyNo;
+    @Schema(description = "商业险保单号")
+    private String syPolicyNo;
+    @Schema(description = "驾意险保单号")
+    private String jyPolicyNo;
+
+    @Schema(description = "车牌号")
+    private String licenseNo;
+
+    @Schema(description = "被保人")
+    private String insurName;
+
+    @Schema(description = "订单号")
+    private String orderNo;
+
+    @Schema(description = "签单时间-起")
+    private String signingTimeBegin;
+
+    @Schema(description = "签单时间-止")
+    private String signingTimeEnd;
+
+    @Schema(description = "签单时间(如退保、批加,下拉点选)")
+    private String orderStatus;
+
+
 }

+ 6 - 9
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java

@@ -784,17 +784,14 @@ public class QuoteVerificationAspect {
                 String level = sysDistributionSetting.getDistributionMode();
                 BigDecimal diffAmount = BigDecimal.ZERO;
 
-                // 标识是否需要继续计算下一级
-                boolean continueNextLevel = true;
-
                 switch (level) {
-                    case "1":
+                    case "1" -> {
                         Map<String, Object> level1Result = calculateLevel1Distribution(insFeeOrders, totalPremium, currentUser.getUserId(), sysDistributionSetting);
                         if (Objects.nonNull(level1Result)) {
                             diffAmount = diffAmount.add(new BigDecimal(level1Result.get("diffAmount").toString()));
                         }
-                        break;
-                    case "2":
+                    }
+                    case "2" -> {
                         // 计算一级分销
                         Map<String, Object> firstDistributor = calculateLevel1Distribution(insFeeOrders, totalPremium, currentUser.getUserId(), sysDistributionSetting);
                         if (firstDistributor != null) {
@@ -809,8 +806,8 @@ public class QuoteVerificationAspect {
                             }
                             // 如果一级是团队长,二级分销费用已经在calculateLevel1Distribution中设置为0
                         }
-                        break;
-                    case "3":
+                    }
+                    case "3" -> {
                         // 计算一级分销
                         Map<String, Object> level1 = calculateLevel1Distribution(insFeeOrders, totalPremium, currentUser.getId(), sysDistributionSetting);
                         if (level1 != null) {
@@ -831,7 +828,7 @@ public class QuoteVerificationAspect {
                                 }
                             }
                         }
-                        break;
+                    }
                 }
                 return diffAmount;
             }

+ 173 - 97
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java

@@ -2205,63 +2205,99 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     }
 
     private Map<String, Object> calcDistLevel1(InsFeeOrders o, BigDecimal totalPremium, String userId, SysDistributionSetting setting) {
-        HttpResult<EsmUserReferrer> ref = orgClient.getReferrer(userId);
-        if (ref == null || ref.getData() == null) return null;
-        EsmUserReferrer referrer = ref.getData();
-        HttpResult<SysUserJzgInfo> info = orgClient.getUserInfo(referrer.getReferrerId());
-        if (info == null || info.getData() == null || !"1".equals(info.getData().getIsDistribution())) {
-            o.setFirstDistributionFee(BigDecimal.ZERO);
-            o.setFirstDistributionRatio(BigDecimal.ZERO);
-            return null;
-        }
-        BigDecimal commissionRatio1 = setting.getCommissionRatioLevel1().divide(new BigDecimal(100)).setScale(5, RoundingMode.DOWN);
-        o.setFirstDistributorId(referrer.getReferrerId());
-        BigDecimal fee5 = totalPremium.multiply(commissionRatio1.setScale(5, RoundingMode.DOWN));
-        o.setFirstDistributionFee(totalPremium.multiply(commissionRatio1.setScale(2, RoundingMode.DOWN)));
-        o.setFirstDistributionRatio(commissionRatio1);
-        Map<String, Object> map = new HashMap<>();
-        map.put("id", referrer.getReferrerId());
-        map.put("diffAmount", fee5.subtract(o.getFirstDistributionFee()));
-        return map;
+        HttpResult<EsmUserReferrer> referrerResult = orgClient.getReferrer(userId);
+        if (referrerResult.getData() != null) {
+            EsmUserReferrer referrer = referrerResult.getData();
+            HttpResult<SysUserJzgInfo> referrerInfoResult = orgClient.getUserInfo(referrer.getReferrerId());
+            if (referrerInfoResult.getData() != null && "1".equals(referrerInfoResult.getData().getIsDistribution())) {
+                String distributorId = referrer.getReferrerId();
+
+                BigDecimal commissionRatio1 = setting.getCommissionRatioLevel1().divide(new BigDecimal(100)).setScale(5, RoundingMode.DOWN);
+                o.setFirstDistributorId(distributorId);
+                BigDecimal fee_5 = (totalPremium.multiply(commissionRatio1).setScale(5, RoundingMode.DOWN));
+                o.setFirstDistributionFee(totalPremium.multiply(commissionRatio1).setScale(2, RoundingMode.DOWN));
+                o.setFirstDistributionRatio(commissionRatio1.multiply(new BigDecimal(100)));
+                BigDecimal diffAmount = fee_5.subtract(o.getFirstDistributionFee());
+
+                // 如果一级分销是团队长,清空后续分销费用(二级、三级)
+                if (isTeamLeader(distributorId)) {
+                    o.setSecondDistributionFee(BigDecimal.ZERO);
+                    o.setSecondDistributionRatio(BigDecimal.ZERO);
+                    o.setThirdDistributionFee(BigDecimal.ZERO);
+                    o.setThirdDistributionRatio(BigDecimal.ZERO);
+                    // 清空后续分销人ID
+                    o.setSecondDistributorId(null);
+                    o.setThirdDistributorId(null);
+                }
+
+                Map<String, Object> map = new HashMap<>();
+                map.put("id", distributorId);
+                map.put("diffAmount", diffAmount);
+                return map;
+            } else {
+                o.setFirstDistributionFee(BigDecimal.ZERO);
+                o.setFirstDistributionRatio(BigDecimal.ZERO);
+            }
+        }
+        return null;
     }
 
     private Map<String, Object> calcDistLevel2(InsFeeOrders o, BigDecimal totalPremium, String upperId, SysDistributionSetting setting) {
-        HttpResult<EsmUserReferrer> ref = orgClient.getReferrer(upperId);
-        if (ref == null || ref.getData() == null) return null;
-        EsmUserReferrer referrer = ref.getData();
-        HttpResult<SysUserJzgInfo> info = orgClient.getUserInfo(referrer.getReferrerId());
-        if (info == null || info.getData() == null || !"1".equals(info.getData().getIsDistribution())) {
-            o.setSecondDistributionFee(BigDecimal.ZERO);
-            o.setSecondDistributionRatio(BigDecimal.ZERO);
-            return null;
-        }
-        BigDecimal commissionRatio2 = setting.getCommissionRatioLevel2().divide(new BigDecimal(100)).setScale(5, RoundingMode.DOWN);
-        o.setSecondDistributorId(referrer.getReferrerId());
-        BigDecimal fee5 = totalPremium.multiply(commissionRatio2).setScale(5, RoundingMode.DOWN);
-        o.setSecondDistributionFee(totalPremium.multiply(commissionRatio2).setScale(2, RoundingMode.DOWN));
-        o.setSecondDistributionRatio(commissionRatio2);
-        Map<String, Object> map = new HashMap<>();
-        map.put("id", referrer.getReferrerId());
-        map.put("diffAmount", fee5.subtract(o.getSecondDistributionFee()));
-        return map;
+        HttpResult<EsmUserReferrer> referrerResult = orgClient.getReferrer(upperId);
+        if (referrerResult.getData() != null) {
+            EsmUserReferrer referrer = referrerResult.getData();
+            HttpResult<SysUserJzgInfo> referrerInfoResult = orgClient.getUserInfo(referrer.getReferrerId());
+            if (referrerInfoResult.getData() != null && "1".equals(referrerInfoResult.getData().getIsDistribution())) {
+                String distributorId = referrer.getReferrerId();
+
+                BigDecimal commissionRatio2 = setting.getCommissionRatioLevel2().divide(new BigDecimal(100)).setScale(5, RoundingMode.DOWN);
+                o.setSecondDistributorId(distributorId);
+                BigDecimal fee_5 = (totalPremium.multiply(commissionRatio2).setScale(5, RoundingMode.DOWN));
+                o.setSecondDistributionFee(totalPremium.multiply(commissionRatio2).setScale(2, RoundingMode.DOWN));
+                o.setSecondDistributionRatio(commissionRatio2.multiply(new BigDecimal(100)));
+                BigDecimal diffAmount = fee_5.subtract(o.getSecondDistributionFee());
+
+                // 如果二级分销是团队长,清空后续分销费用(三级)
+                if (isTeamLeader(distributorId)) {
+                    o.setThirdDistributionFee(BigDecimal.ZERO);
+                    o.setThirdDistributionRatio(BigDecimal.ZERO);
+                    o.setThirdDistributorId(null);
+                }
+
+                Map<String, Object> map = new HashMap<>();
+                map.put("id", distributorId);
+                map.put("diffAmount", diffAmount);
+                return map;
+            } else {
+                o.setSecondDistributionFee(BigDecimal.ZERO);
+                o.setSecondDistributionRatio(BigDecimal.ZERO);
+            }
+        }
+        return null;
     }
 
     private BigDecimal calcDistLevel3(InsFeeOrders o, BigDecimal totalPremium, String upperId, SysDistributionSetting setting) {
-        HttpResult<EsmUserReferrer> ref = orgClient.getReferrer(upperId);
-        if (ref == null || ref.getData() == null) return BigDecimal.ZERO;
-        EsmUserReferrer referrer = ref.getData();
-        HttpResult<SysUserJzgInfo> info = orgClient.getUserInfo(referrer.getReferrerId());
-        if (info == null || info.getData() == null || !"1".equals(info.getData().getIsDistribution())) {
-            o.setThirdDistributionFee(BigDecimal.ZERO);
-            o.setThirdDistributionRatio(BigDecimal.ZERO);
-            return BigDecimal.ZERO;
-        }
-        BigDecimal commissionRatio3 = setting.getCommissionRatioLevel3().divide(new BigDecimal(100)).setScale(5, RoundingMode.DOWN);
-        o.setThirdDistributorId(referrer.getReferrerId());
-        BigDecimal fee5 = totalPremium.multiply(commissionRatio3).setScale(5, RoundingMode.DOWN);
-        o.setThirdDistributionFee(totalPremium.multiply(commissionRatio3).setScale(2, RoundingMode.DOWN));
-        o.setThirdDistributionRatio(commissionRatio3);
-        return fee5.subtract(o.getThirdDistributionFee());
+        HttpResult<EsmUserReferrer> referrerResult = orgClient.getReferrer(upperId);
+        if (referrerResult.getData() != null) {
+            EsmUserReferrer referrer = referrerResult.getData();
+            HttpResult<SysUserJzgInfo> referrerInfoResult = orgClient.getUserInfo(referrer.getReferrerId());
+            if (referrerInfoResult.getData() != null && "1".equals(referrerInfoResult.getData().getIsDistribution())) {
+                String distributorId = referrer.getReferrerId();
+                o.setThirdDistributorId(distributorId);
+                BigDecimal commissionRatio3 = setting.getCommissionRatioLevel3().divide(new BigDecimal(100)).setScale(5, RoundingMode.DOWN);
+                BigDecimal fee_5 = (totalPremium.multiply(commissionRatio3).setScale(5, RoundingMode.DOWN));
+                o.setThirdDistributionFee(totalPremium.multiply(commissionRatio3).setScale(2, RoundingMode.DOWN));
+                o.setThirdDistributionRatio(commissionRatio3.multiply(new BigDecimal(100)));
+                BigDecimal diffAmount = fee_5.subtract(o.getThirdDistributionFee());
+
+                // 三级分销如果是团队长,无需清空后续(已经是最后一级)
+                return diffAmount;
+            } else {
+                o.setThirdDistributionFee(BigDecimal.ZERO);
+                o.setThirdDistributionRatio(BigDecimal.ZERO);
+            }
+        }
+        return BigDecimal.ZERO;
     }
 
     // ===== 费用计算辅助方法 =====
@@ -2491,59 +2527,99 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
      * 区别:userId 取自当前登录用户 baseController.getUserId(),而非订单。
      *
      * @param totalPremium 总保费
-     * @param feeOrders    费用订单对象(用于设置分销字段)
+     * @param insFeeOrders    费用订单对象(用于设置分销字段)
      * @param mobile       业务员手机号
      * @return 分销精度差值(scale=5 - scale=2)
      */
-    private BigDecimal calcDistributionFee(BigDecimal totalPremium, InsFeeOrders feeOrders, String mobile) {
-
-        HttpResult<SysUserJzgInfo> userResult = orgClient.getUserInfoByMobile(mobile);
-        if (userResult == null || userResult.getData() == null) {
-            return BigDecimal.ZERO;
-        }
-        String userId = userResult.getData().getUserId();
+    private BigDecimal calcDistributionFee(BigDecimal totalPremium, InsFeeOrders insFeeOrders, String mobile) {
+        // 获取当前租户信息
+        HttpResult<SysUserJzgInfo> sysUserJzgInfoResult = orgClient.getUserInfoByMobile(mobile);
+        SysUserJzgInfo currentUser = sysUserJzgInfoResult.getData();
 
         // 获取租户分销设置
-        HttpResult<SysDistributionSetting> settingResult = orgClient.getSettingBySystemCode();
-        if (settingResult == null || settingResult.getData() == null) {
-            return BigDecimal.ZERO;
-        }
-        SysDistributionSetting sysDistributionSetting = settingResult.getData();
-        // 判断业务员所属机构是否开启分销
-        String deptId = userResult.getData().getDeptId();
-        HttpResult<SysDeptVo> deptResult = orgClient.deptGet(deptId);
-        if (deptResult == null || deptResult.getData() == null || !"1".equals(deptResult.getData().getIsDistribution())) {
-            return BigDecimal.ZERO;
-        }
-        String level = sysDistributionSetting.getDistributionMode();
-        BigDecimal diffAmount = BigDecimal.ZERO;
-        switch (level) {
-            case "1":
-                Map<String, Object> lv1 = calcDistLevel1(feeOrders, totalPremium, userId, sysDistributionSetting);
-                if (lv1 != null) diffAmount = new BigDecimal(lv1.get("diffAmount").toString());
-                break;
-            case "2":
-                Map<String, Object> first = calcDistLevel1(feeOrders, totalPremium, userId, sysDistributionSetting);
-                if (first != null) {
-                    Map<String, Object> second = calcDistLevel2(feeOrders, totalPremium, first.get("id").toString(), sysDistributionSetting);
-                    if (second != null) diffAmount = new BigDecimal(second.get("diffAmount").toString());
-                    diffAmount = diffAmount.add(new BigDecimal(first.get("diffAmount").toString()));
-                }
-                break;
-            case "3":
-                Map<String, Object> l1 = calcDistLevel1(feeOrders, totalPremium, userId, sysDistributionSetting);
-                if (l1 != null) {
-                    Map<String, Object> l2 = calcDistLevel2(feeOrders, totalPremium, l1.get("id").toString(), sysDistributionSetting);
-                    if (l2 != null) {
-                        BigDecimal l3Diff = calcDistLevel3(feeOrders, totalPremium, l2.get("id").toString(), sysDistributionSetting);
-                        diffAmount = diffAmount.add(l3Diff);
-                        diffAmount = diffAmount.add(new BigDecimal(l2.get("diffAmount").toString()));
-                    }
-                    diffAmount = diffAmount.add(new BigDecimal(l1.get("diffAmount").toString()));
+        HttpResult<SysDistributionSetting> setting = orgClient.getSettingBySystemCode();
+        SysDistributionSetting sysDistributionSetting = setting.getData();
+
+        if (sysDistributionSetting != null) {
+            // 判断业务员所属机构是否被排除
+            String deptId = sysUserJzgInfoResult.getData().getDeptId();
+            HttpResult<SysDeptVo> sysDept = orgClient.deptGet(deptId);
+
+            if (sysDept.getData() != null && sysDept.getData().getIsDistribution().equals("1")) {
+                String level = sysDistributionSetting.getDistributionMode();
+                BigDecimal diffAmount = BigDecimal.ZERO;
+
+                switch (level) {
+                    case "1":
+                        Map<String, Object> level1Result = calcDistLevel1(insFeeOrders, totalPremium, currentUser.getUserId(), sysDistributionSetting);
+                        if (Objects.nonNull(level1Result)) {
+                            diffAmount = diffAmount.add(new BigDecimal(level1Result.get("diffAmount").toString()));
+                        }
+                        break;
+
+                    case "2":
+                        // 计算一级分销
+                        Map<String, Object> firstDistributor = calcDistLevel1(insFeeOrders, totalPremium, currentUser.getUserId(), sysDistributionSetting);
+                        if (firstDistributor != null) {
+                            diffAmount = diffAmount.add(new BigDecimal(firstDistributor.get("diffAmount").toString()));
+
+                            // 判断一级分销用户是否为团队长,如果不是则继续计算二级
+                            if (!isTeamLeader(firstDistributor.get("id").toString())) {
+                                Map<String, Object> level2Result = calcDistLevel2(insFeeOrders, totalPremium, firstDistributor.get("id").toString(), sysDistributionSetting);
+                                if (Objects.nonNull(level2Result)) {
+                                    diffAmount = diffAmount.add(new BigDecimal(level2Result.get("diffAmount").toString()));
+                                }
+                            }
+                            // 如果一级是团队长,二级分销费用已经在calculateLevel1Distribution中设置为0
+                        }
+                        break;
+
+                    case "3":
+                        // 计算一级分销
+                        Map<String, Object> level1 = calcDistLevel1(insFeeOrders, totalPremium, currentUser.getId(), sysDistributionSetting);
+                        if (level1 != null) {
+                            diffAmount = diffAmount.add(new BigDecimal(level1.get("diffAmount").toString()));
+
+                            // 判断一级分销用户是否为团队长
+                            if (!isTeamLeader(level1.get("id").toString())) {
+                                // 计算二级分销
+                                Map<String, Object> level2 = calcDistLevel2(insFeeOrders, totalPremium, level1.get("id").toString(), sysDistributionSetting);
+                                if (level2 != null) {
+                                    diffAmount = diffAmount.add(new BigDecimal(level2.get("diffAmount").toString()));
+
+                                    // 判断二级分销用户是否为团队长
+                                    if (!isTeamLeader(level2.get("id").toString())) {
+                                        // 计算三级分销
+                                        BigDecimal level3Diff = calcDistLevel3(insFeeOrders, totalPremium, level2.get("id").toString(), sysDistributionSetting);
+                                        diffAmount = diffAmount.add(level3Diff);
+                                    }
+                                    // 如果二级是团队长,三级分销费用已经在calculateLevel2Distribution中设置为0
+                                }
+                            }
+                            // 如果一级是团队长,二级和三级分销费用已经在calculateLevel1Distribution中设置为0
+                        }
+                        break;
                 }
-                break;
+                return diffAmount;
+            }
+        }
+        return BigDecimal.ZERO;
+    }
+
+    /**
+     * 判断用户是否为团队长
+     */
+    /**
+     * 判断用户是否为团队长
+     */
+    private boolean isTeamLeader(String userId) {
+        try {
+            HttpResult<List<SysOrganization>> organizations = orgClient.queryOrganizationByManagerId(userId);
+            return organizations.getData() != null && !organizations.getData().isEmpty();
+        } catch (Exception e) {
+            // 异常处理,默认不是团队长
+            return false;
         }
-        return diffAmount;
     }
 
     /**

+ 16 - 12
tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java

@@ -17,6 +17,7 @@ import com.jzg.commons.entity.orders.po.InsOrderAdjust;
 import com.jzg.commons.entity.po.EsmInsCompany;
 import com.jzg.commons.request.RequestSingleParam;
 import com.jzg.commons.util.AssertionUtils;
+import com.jzg.commons.util.DateTimeUtils;
 import com.jzg.organization.client.EsmInsCompanyClient;
 import com.jzg.organization.service.ReceivableService;
 import com.jzg.quotation.summary.aop.aspect.OrderOperationLog;
@@ -846,28 +847,31 @@ public class ReceivableController {
         Page page = vo.getPage();
         vo.setSettlementStartTime(vo.getStartTime());
         vo.setSettlementEndTime(vo.getEndTime());
-        if(StrUtil.isEmpty(vo.getSettlementEndTime()) && StrUtil.isEmpty(vo.getSettlementStartTime()) && StrUtil.isEmpty(vo.getReceivePaymentDateBegin()) && StrUtil.isEmpty(vo.getReceivePaymentDateEnd()))  {
+        if(StrUtil.isEmpty(vo.getSettlementEndTime()) && StrUtil.isEmpty(vo.getSettlementStartTime())
+                && StrUtil.isEmpty(vo.getReceivePaymentDateBegin()) && StrUtil.isEmpty(vo.getReceivePaymentDateEnd())
+                && StrUtil.isEmpty(vo.getSigningStartTime()) && StrUtil.isEmpty(vo.getSigningEndTime())
+        )  {
             return HttpResult.ok(receivableService.receiverSettlementReport(page,vo));
         }else{
             if(StrUtil.isNotEmpty(vo.getSettlementStartTime())){
-                LocalDateTime localDateTime = LocalDate.parse(vo.getSettlementStartTime()).atStartOfDay();
-                vo.setSettlementStartTime(DateUtil.formatLocalDateTime(localDateTime));
+                vo.setSettlementStartTime(DateTimeUtils.obtainStartTime(vo.getSettlementStartTime()));
             }
             if(StrUtil.isNotEmpty(vo.getSettlementEndTime())){
-                LocalDateTime localDateTime = LocalDate.parse(vo.getSettlementEndTime()).plusDays(1).atStartOfDay();
-                vo.setSettlementEndTime(DateUtil.formatLocalDateTime(localDateTime));
+                vo.setSettlementEndTime(DateTimeUtils.obtainNextDayStartTime(vo.getSettlementEndTime()));
             }
-
-
             if(StrUtil.isNotEmpty(vo.getReceivePaymentDateBegin())){
-                LocalDateTime localDateTime = LocalDate.parse(vo.getReceivePaymentDateBegin()).atStartOfDay();
-                vo.setReceivePaymentDateBegin(DateUtil.formatLocalDateTime(localDateTime));
+                vo.setReceivePaymentDateBegin(DateTimeUtils.obtainStartTime(vo.getReceivePaymentDateBegin()));
             }
             if(StrUtil.isNotEmpty(vo.getReceivePaymentDateEnd())){
-                LocalDateTime localDateTime = LocalDate.parse(vo.getReceivePaymentDateEnd()).plusDays(1).atStartOfDay();
-                vo.setReceivePaymentDateEnd(DateUtil.formatLocalDateTime(localDateTime));
+                vo.setReceivePaymentDateEnd(DateTimeUtils.obtainNextDayStartTime(vo.getReceivePaymentDateEnd()));
+            }
+            // 签单时间和王文琦沟通过了,先添加上,然后, 后期再想办法,看看能不能添加让其生效
+            if(StrUtil.isNotEmpty(vo.getSigningStartTime())){
+                vo.setSigningStartTime(DateTimeUtils.obtainStartTime(vo.getSigningStartTime()));
+            }
+            if(StrUtil.isNotEmpty(vo.getSigningEndTime())){
+                vo.setSigningEndTime(DateTimeUtils.obtainNextDayStartTime(vo.getSigningEndTime()));
             }
-
             vo.setStartTime(null);
             vo.setEndTime(null);
             // 备注一下: 对于结算时间不为空的时候,查询出来的结算状态都是已结算的数据

+ 1 - 1
tenant/organization/src/main/java/com/jzg/organization/controller/UserController.java

@@ -62,7 +62,7 @@ public class UserController extends BaseController {
     @PostMapping(value = "/getBaojiaUserInfoList")
     public HttpResult<Page<SysUserJzgInfoDto>> getBaojiaUserInfoList(@RequestBody SysUserInfoListVo sysUserInfoListVo) {
         Page page = sysUserInfoListVo.getPage();
-        Page<SysUserJzgInfoDto> userInfoList = sysUserService.getUserInfoList(page, sysUserInfoListVo);
+        Page<SysUserJzgInfoDto> userInfoList = sysUserService.getBaojiaUserInfoList(page, sysUserInfoListVo);
         return HttpResult.ok(userInfoList);
     }
 

+ 9 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/SysUserJzgInfoMapper.java

@@ -37,6 +37,15 @@ public interface SysUserJzgInfoMapper extends BaseMapper<SysUserJzgInfo> {
     Page<SysUserJzgInfoDto> queryYwy(Page page, @Param("sysUserInfoListVo") SysUserInfoListVo sysUserInfoListVo,
                                      @Param("systemCode") String systemCode,@Param("leaderId") String leaderId);
 
+    /**
+     * 查询报价业务员
+     *
+     * @author lipf
+     * @date 2026/4/24 11:08
+     */
+    Page<SysUserJzgInfoDto> queryBJYwy(Page page, @Param("sysUserInfoListVo") SysUserInfoListVo sysUserInfoListVo,
+                                     @Param("systemCode") String systemCode,@Param("leaderId") String leaderId);
+
     /**
      * 查询成员
      *

+ 1 - 0
tenant/organization/src/main/java/com/jzg/organization/service/SysUserService.java

@@ -96,6 +96,7 @@ public interface SysUserService extends IService<SysUser> {
      * @date 2026/4/10 10:01
      */
     Page<SysUserJzgInfoDto> getUserInfoList(Page page, SysUserInfoListVo sysUserInfoListVo);
+    Page<SysUserJzgInfoDto> getBaojiaUserInfoList(Page page, SysUserInfoListVo sysUserInfoListVo);
 
     /**
      * 获取成员转移资源信息

+ 1 - 1
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlSchemeServiceImpl.java

@@ -995,7 +995,7 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
     @Autowired
     PtlSchemeService ptlSchemeService;
 
-    @GlobalTransactional
+    @Transactional
     @Override
     public Boolean copyScheme(String schemeInfoId, String productCode) {
 

+ 111 - 61
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -305,23 +305,32 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
      * 3. 将完整数据设置回分页对象并返回
      * </p>
      *
-     * @param receivableQueryVo 列表查询条件,包含订单号、保险公司ID、结算状态、时间范围等筛选条件,以及分页参数
+     * @param vo 列表查询条件,包含订单号、保险公司ID、结算状态、时间范围等筛选条件,以及分页参数
      * @return Page<InsPlyIncome> 返回分页后的应收订单列表,包含完整的订单信息及关联数据
      */
     @Override
-    public Page<InsPlyIncome> getReceivablePage(ReceivableQueryVo receivableQueryVo) {
-        log.info("获取私有协议手续费应收列表。receivableQueryVo=[{}]", JSONUtil.toJsonStr(receivableQueryVo));
-
-//        if(StrUtil.isNotEmpty(receivableQueryVo.getUpdateBy())){
-//            insFeeOrdersClient.getUserNameByMobile();
-//        }
+    public Page<InsPlyIncome> getReceivablePage(ReceivableQueryVo vo) {
+        log.info("获取私有协议手续费应收列表。vo=[{}]", JSONUtil.toJsonStr(vo));
 
+        // 完善支付时间的查询条件
+        if(StrUtil.isNotEmpty(vo.getPayTimeBegin())){
+            vo.setPayTimeBegin(DateTimeUtils.obtainStartTime(vo.getPayTimeBegin()));
+        }
+        if(StrUtil.isNotEmpty(vo.getPayTimeEnd())){
+            vo.setPayTimeEnd(DateTimeUtils.obtainNextDayStartTime(vo.getPayTimeEnd()));
+        }
+        if(StrUtil.isNotEmpty(vo.getSigningTimeStart())){
+            vo.setSigningTimeStart(DateTimeUtils.obtainStartTime(vo.getSigningTimeStart()));
+        }
+        if(StrUtil.isNotEmpty(vo.getSigningTimeEnd())){
+            vo.setSigningTimeEnd(DateTimeUtils.obtainNextDayStartTime(vo.getSigningTimeEnd()));
+        }
 
-        Page<InsPlyIncome> page = baseMapper.getReceivablePage(receivableQueryVo.getPage(), receivableQueryVo);
+        Page<InsPlyIncome> page = baseMapper.getReceivablePage(vo.getPage(), vo);
         List<InsPlyIncome> records = page.getRecords();
         records = records.stream().filter(action->{
             // add by lipf 2026年7月3日09:55:17 只有私有的非车,才需要走下面的逻辑。 将非车保费为0的记录不显示
-            if(StrUtil.isEmpty(receivableQueryVo.getQueryType()) || !"3".equals(receivableQueryVo.getQueryType())){
+            if(StrUtil.isEmpty(vo.getQueryType()) || !"3".equals(vo.getQueryType())){
                 return true;
             }
             if(StrUtil.isEmpty(action.getJyPremium())){
@@ -330,7 +339,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             BigDecimal JyPremium = new BigDecimal(action.getJyPremium());
             return BigDecimal.ZERO.compareTo(JyPremium) != 0;
         }).toList();
-        records = this.fillOtherInfo(records,receivableQueryVo.getInvoiceType());
+        records = this.fillOtherInfo(records,vo.getInvoiceType());
         page.setRecords(records);
         return page;
     }
@@ -844,7 +853,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
      * 5. 补充收入表中的其他费用应收数据(驾意险相关费用)
      * </p>
      *
-     * @param settlementReportQueryVo 结算报表查询条件对象,包含查询所需的过滤参数(如时间范围、公司ID等)
+     * @param vo 结算报表查询条件对象,包含查询所需的过滤参数(如时间范围、公司ID等)
      * @return List<FollowCompanyFeeVO> 返回跟单公司费用视图对象列表,每个对象包含:
      *         - partnerCompanyId: 合作公司ID
      *         - companyName: 合作公司名称
@@ -857,10 +866,17 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
      *         - totalUnSettlementAmount: 未结算总金额
      */
     @Override
-    public List<FollowCompanyFeeVO> followCompanySuperviseSettlementReport(SettlementReportQueryVo settlementReportQueryVo) {
-        log.info("私有协议-跟单结算记录-结算报表: settlementReportQueryVo=[{}]", JSONUtil.toJsonStr(settlementReportQueryVo));
+    public List<FollowCompanyFeeVO> followCompanySuperviseSettlementReport(SettlementReportQueryVo vo) {
+        log.info("私有协议-跟单结算记录-结算报表: vo=[{}]", JSONUtil.toJsonStr(vo));
+
+        if(StrUtil.isNotEmpty(vo.getReceivePaymentDateBegin())){
+            vo.setReceivePaymentDateBegin(DateTimeUtils.obtainStartTime(vo.getReceivePaymentDateBegin()));
+        }
+        if(StrUtil.isNotEmpty(vo.getReceivePaymentDateEnd())){
+            vo.setReceivePaymentDateEnd(DateTimeUtils.obtainNextDayStartTime(vo.getReceivePaymentDateEnd()));
+        }
         List<FollowCompanyFeeVO> resultList = new ArrayList<>();
-        String invoiceType = settlementReportQueryVo.getInvoiceType();
+        String invoiceType = vo.getInvoiceType();
 
         // 1. 获取保险公司全量Map
         Map<String, EsmInsCompany> companyMap = getAllInsCompanyMap();
@@ -869,17 +885,17 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         }
 
         // 处理公司ID,递归收集子公司ID
-        fillCompanyChildIds(settlementReportQueryVo, companyMap);
+        fillCompanyChildIds(vo, companyMap);
 
         // 2. 查询跟单主数据并聚合
-        List<FollowCompanyFeeVO> originalFollowList = insFeeFollowOrderMapper.selectFollowCompanySettlementReport(settlementReportQueryVo);
+        List<FollowCompanyFeeVO> originalFollowList = insFeeFollowOrderMapper.selectFollowCompanySettlementReport(vo);
         if (CollUtil.isNotEmpty(originalFollowList)) {
             List<FollowCompanyFeeVO> followAggVoList = aggregateFollowData(originalFollowList, companyMap);
             resultList.addAll(followAggVoList);
         }
 
         // 3. 查询补充应收收入数据并合并
-        fillOtherReceivableData(settlementReportQueryVo, resultList, companyMap, invoiceType);
+        fillOtherReceivableData(vo, resultList, companyMap, invoiceType);
 
         if (CollUtil.isEmpty(resultList)) {
             return resultList;
@@ -5113,17 +5129,32 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
      * 3. 将完整数据设置回分页对象并返回
      * </p>
      *
-     * @param receivableQueryVo 列表查询条件,包含订单号、保险公司ID、结算状态、时间范围等筛选条件,以及分页参数
+     * @param vo 列表查询条件,包含订单号、保险公司ID、结算状态、时间范围等筛选条件,以及分页参数
      * @return Page<InsPlyIncome> 返回分页后的平台协议应收订单列表,包含完整的订单信息及关联数据
      */
     @Override
-    public Page<InsPlyIncome> getPlatFormReceivableList(ReceivableQueryVo receivableQueryVo) {
-        log.info("获取平台协议列表. receivableQueryVo=[{}]", JSONUtil.toJsonStr(receivableQueryVo));
-        Page<InsPlyIncome> page = baseMapper.getReceivablePage(receivableQueryVo.getPage(), receivableQueryVo);
+    public Page<InsPlyIncome> getPlatFormReceivableList(ReceivableQueryVo vo) {
+        log.info("获取平台协议列表. vo=[{}]", JSONUtil.toJsonStr(vo));
+
+        // 对支付时间进行增强适配, 在日期后面添加上时分秒
+        if(StrUtil.isNotEmpty(vo.getPayTimeBegin())){
+            vo.setPayTimeBegin(DateTimeUtils.obtainStartTime(vo.getPayTimeBegin()));
+        }
+        if(StrUtil.isNotEmpty(vo.getPayTimeEnd())){
+            vo.setPayTimeEnd(DateTimeUtils.obtainNextDayStartTime(vo.getPayTimeEnd()));
+        }
+        // 对报价时间进行增强适配
+        if(StrUtil.isNotEmpty(vo.getQuotationTimeBegin())){
+            vo.setQuotationTimeBegin(DateTimeUtils.obtainStartTime(vo.getQuotationTimeBegin()));
+        }
+        if(StrUtil.isNotEmpty(vo.getQuotationTimeEnd())){
+            vo.setQuotationTimeEnd(DateTimeUtils.obtainNextDayStartTime(vo.getQuotationTimeEnd()));
+        }
+        Page<InsPlyIncome> page = baseMapper.getReceivablePage(vo.getPage(), vo);
         List<InsPlyIncome> records = page.getRecords();
         records = this.fillOtherInfo(records,null);
         // 过滤业务来源
-        records = records.stream().filter(income -> StrUtil.isBlank(receivableQueryVo.getTypeAttr()) || receivableQueryVo.getTypeAttr().equals(income.getTypeAttr())).collect(Collectors.toList());
+        records = records.stream().filter(income -> StrUtil.isBlank(vo.getTypeAttr()) || vo.getTypeAttr().equals(income.getTypeAttr())).collect(Collectors.toList());
         page.setRecords(records);
         return page;
     }
@@ -5428,26 +5459,32 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     /**
      * 平台协议结算记录
      *
-     * @param settlementQueryVo 查询条件
+     * @param vo 查询条件
      * @return Page<ExportSuperviseSettlementExcelDto>
      */
     @Override
-    public Page<ExportSuperviseSettlementExcelDto> platformSettlementExcel(Page page, SettlementQueryVo settlementQueryVo) {
-        log.info("查询平台结算记录:settlementQueryVo=[{}]", JSONUtil.toJsonStr(settlementQueryVo));
+    public Page<ExportSuperviseSettlementExcelDto> platformSettlementExcel(Page page, SettlementQueryVo vo) {
+        log.info("查询平台结算记录:vo=[{}]", JSONUtil.toJsonStr(vo));
 
-        if(StrUtil.isEmpty(settlementQueryVo.getSettlementDateStart())
-            && StrUtil.isEmpty(settlementQueryVo.getSettlementDateEnd())
-            && settlementQueryVo.getSettlementTime() != null &&
-                settlementQueryVo.getSettlementTime().length ==2){
-            DateUtil.parse(settlementQueryVo.getSettlementDateStart());
-            settlementQueryVo.setSettlementDateStart(DateUtil.format(LocalDate.parse(settlementQueryVo.getSettlementTime()[0], DateTimeFormatter.ISO_DATE).atStartOfDay(), "yyyy-MM-dd HH:mm:ss"));
-            settlementQueryVo.setSettlementDateEnd(DateUtil.format(LocalDate.parse(settlementQueryVo.getSettlementTime()[1], DateTimeFormatter.ISO_DATE).plusDays(1).atStartOfDay(), "yyyy-MM-dd HH:mm:ss"));
+        if(StrUtil.isEmpty(vo.getSettlementDateStart())
+            && StrUtil.isEmpty(vo.getSettlementDateEnd())
+            && vo.getSettlementTime() != null &&
+                vo.getSettlementTime().length ==2){
+            DateUtil.parse(vo.getSettlementDateStart());
+            vo.setSettlementDateStart(DateUtil.format(LocalDate.parse(vo.getSettlementTime()[0], DateTimeFormatter.ISO_DATE).atStartOfDay(), "yyyy-MM-dd HH:mm:ss"));
+            vo.setSettlementDateEnd(DateUtil.format(LocalDate.parse(vo.getSettlementTime()[1], DateTimeFormatter.ISO_DATE).plusDays(1).atStartOfDay(), "yyyy-MM-dd HH:mm:ss"));
+        }
+        // 完善回款时间 receivePaymentDateBegin
+        if(StrUtil.isNotEmpty(vo.getReceivePaymentDateBegin())){
+            vo.setReceivePaymentDateBegin(DateTimeUtils.obtainStartTime(vo.getReceivePaymentDateBegin()));
+        }
+        if(StrUtil.isNotEmpty(vo.getReceivePaymentDateEnd())){
+            vo.setReceivePaymentDateEnd(DateTimeUtils.obtainNextDayStartTime(vo.getReceivePaymentDateEnd()));
         }
-
         // 设置空条件
-        setNoneCondition(settlementQueryVo);
-        settlementQueryVo.setSystemCode(baseController.getSystemCode());
-        Page<ExportSuperviseSettlementExcelDto> exportSuperviseSettlementExcelDtos = baseMapper.platformSettlementExcelDtos(page, settlementQueryVo);
+        setNoneCondition(vo);
+        vo.setSystemCode(baseController.getSystemCode());
+        Page<ExportSuperviseSettlementExcelDto> exportSuperviseSettlementExcelDtos = baseMapper.platformSettlementExcelDtos(page, vo);
         // 补充、转换列表的数据
         supplementaryListData(exportSuperviseSettlementExcelDtos);
         return exportSuperviseSettlementExcelDtos;
@@ -5456,16 +5493,24 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     /**
      * 跟单协议结算记录
      *
-     * @param settlementQueryVo 查询条件
+     * @param vo 查询条件
      * @return Page<ExportSuperviseSettlementExcelDto>
      */
     @Override
-    public Page<ExportSuperviseSettlementExcelDto> followSettlementExcel(Page page, SettlementQueryVo settlementQueryVo) {
-        log.info("查询平台结算记录:settlementQueryVo=[{}]", JSONUtil.toJsonStr(settlementQueryVo));
+    public Page<ExportSuperviseSettlementExcelDto> followSettlementExcel(Page page, SettlementQueryVo vo) {
+        log.info("查询平台结算记录:vo=[{}]", JSONUtil.toJsonStr(vo));
         // 设置空条件
-        setNoneCondition(settlementQueryVo);
-        settlementQueryVo.setSystemCode(baseController.getSystemCode());
-        Page<ExportSuperviseSettlementExcelDto> exportSuperviseSettlementExcelDtos = baseMapper.followSettlementExcelDtos(page, settlementQueryVo);
+        setNoneCondition(vo);
+        if(StrUtil.isNotEmpty(vo.getReceivePaymentDateBegin())){
+            vo.setReceivePaymentDateBegin(DateTimeUtils.obtainStartTime(vo.getReceivePaymentDateBegin()));
+        }
+        if(StrUtil.isNotEmpty(vo.getReceivePaymentDateEnd())){
+            vo.setReceivePaymentDateEnd(DateTimeUtils.obtainNextDayStartTime(vo.getReceivePaymentDateEnd()));
+        }
+
+
+        vo.setSystemCode(baseController.getSystemCode());
+        Page<ExportSuperviseSettlementExcelDto> exportSuperviseSettlementExcelDtos = baseMapper.followSettlementExcelDtos(page, vo);
         // 补充、转换列表的数据
         supplementaryListData(exportSuperviseSettlementExcelDtos);
         return exportSuperviseSettlementExcelDtos;
@@ -5636,7 +5681,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
      * </p>
      *
      * @param page 分页对象,包含页码、每页数量等分页参数
-     * @param settlementQueryVo 结算查询条件,包含订单号、保险公司ID、结算状态、时间范围等筛选条件,主要参数:
+     * @param vo 结算查询条件,包含订单号、保险公司ID、结算状态、时间范围等筛选条件,主要参数:
      *                          - invoiceTypes: 开票类型列表,用于区分平台协议和普通协议
      *                          - systemCode: 租户代码(方法内自动设置)
      * @return Page<ExportSuperviseSettlementDetailExcelDto> 返回分页后的手续费结算明细数据,每个对象包含:
@@ -5645,9 +5690,9 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
      *         - 其他结算明细字段
      */
     @Override
-    public Page<ExportSuperviseSettlementDetailExcelDto> superviseSettlementDetailExcel(Page page, SettlementQueryVo settlementQueryVo) {
-        log.info("superviseSettlementDetailExcel:settlementQueryVo=[{}]", JSONUtil.toJsonStr(settlementQueryVo));
-        settlementQueryVo.setSystemCode(baseController.getSystemCode());
+    public Page<ExportSuperviseSettlementDetailExcelDto> superviseSettlementDetailExcel(Page page, SettlementQueryVo vo) {
+        log.info("superviseSettlementDetailExcel:vo=[{}]", JSONUtil.toJsonStr(vo));
+        vo.setSystemCode(baseController.getSystemCode());
         Page<ExportSuperviseSettlementDetailExcelDto> exportSuperviseSettlementDetailExcelDtos = null;
 
         // 1. 一次性获取保险公司全量Map,全局复用
@@ -5657,41 +5702,46 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         }
 
         // 查询当前公司下所有的子公司
-        if (StrUtil.isNotBlank(settlementQueryVo.getCompanyId())){
+        if (StrUtil.isNotBlank(vo.getCompanyId())){
             // 将全量数据按照 parentId 进行分组,key 是 parentId,value 是该 parentId 下的所有公司列表
             Map<String, List<EsmInsCompany>> parentGroupMap = companyMap.values().stream()
                     .filter(c -> c.getParentId() != null)
                     .collect(Collectors.groupingBy(EsmInsCompany::getParentId));
-            List<String> allChildIdspOtimized = getAllChildIdsOptimized(settlementQueryVo.getCompanyId(), parentGroupMap);
-            allChildIdspOtimized.add(settlementQueryVo.getCompanyId());
-            settlementQueryVo.setCompanyIdList(allChildIdspOtimized);
+            List<String> allChildIdspOtimized = getAllChildIdsOptimized(vo.getCompanyId(), parentGroupMap);
+            allChildIdspOtimized.add(vo.getCompanyId());
+            vo.setCompanyIdList(allChildIdspOtimized);
         }
-
-        if (settlementQueryVo.getInvoiceTypes().contains("5") && settlementQueryVo.getInvoiceTypes().contains("6")) {
-            exportSuperviseSettlementDetailExcelDtos = baseMapper.getPlatFormSettlementDetailExcelDtos(page, settlementQueryVo);
+        if(StrUtil.isNotEmpty(vo.getSigningTimeBegin())){
+            vo.setSigningTimeBegin(DateTimeUtils.obtainStartTime(vo.getSigningTimeBegin()));
+        }
+        if(StrUtil.isNotEmpty(vo.getSigningTimeEnd())){
+            vo.setSigningTimeEnd(DateTimeUtils.obtainNextDayStartTime(vo.getSigningTimeEnd()));
+        }
+        if (vo.getInvoiceTypes().contains("5") && vo.getInvoiceTypes().contains("6")) {
+            exportSuperviseSettlementDetailExcelDtos = baseMapper.getPlatFormSettlementDetailExcelDtos(page, vo);
         }else{
-            exportSuperviseSettlementDetailExcelDtos = baseMapper.getSuperviseSettlementDetailExcelDtos(page, settlementQueryVo);
+            exportSuperviseSettlementDetailExcelDtos = baseMapper.getSuperviseSettlementDetailExcelDtos(page, vo);
         }
         if (CollUtil.isNotEmpty(exportSuperviseSettlementDetailExcelDtos.getRecords())){
             Map<String, InsPlyIncomeInvoiceSettlement> settlementMap = new HashMap<>();
-            if (!(settlementQueryVo.getInvoiceTypes().contains("5") && settlementQueryVo.getInvoiceTypes().contains("6"))) {
+            if (!(vo.getInvoiceTypes().contains("5") && vo.getInvoiceTypes().contains("6"))) {
                 // 根据invoiceId关联查询ins_ply_income_invoice_settlement表
                 LambdaQueryWrapper<InsPlyIncomeInvoiceSettlement> insPlyIncomeInvoiceSettlementLambdaQueryWrapper = new LambdaQueryWrapper<>();
                 insPlyIncomeInvoiceSettlementLambdaQueryWrapper.in(InsPlyIncomeInvoiceSettlement::getInvoiceId, exportSuperviseSettlementDetailExcelDtos.getRecords().stream().map(ExportSuperviseSettlementDetailExcelDto::getInvoiceId).toList());
                 insPlyIncomeInvoiceSettlementLambdaQueryWrapper.eq(InsPlyIncomeInvoiceSettlement::getIsDelete, 0);
-                if (StrUtil.isNotBlank(settlementQueryVo.getSettlementPerson())) {
+                if (StrUtil.isNotBlank(vo.getSettlementPerson())) {
                     // 结算人
-                    insPlyIncomeInvoiceSettlementLambdaQueryWrapper.eq(InsPlyIncomeInvoiceSettlement::getCreateBy, settlementQueryVo.getSettlementPerson());
+                    insPlyIncomeInvoiceSettlementLambdaQueryWrapper.eq(InsPlyIncomeInvoiceSettlement::getCreateBy, vo.getSettlementPerson());
                 }
-                if (StrUtil.isNotBlank(settlementQueryVo.getSettlementTimeStart()) && StrUtil.isNotBlank(settlementQueryVo.getSettlementTimeEnd())) {
+                if (StrUtil.isNotBlank(vo.getSettlementTimeStart()) && StrUtil.isNotBlank(vo.getSettlementTimeEnd())) {
                     // 结算时间
-                    insPlyIncomeInvoiceSettlementLambdaQueryWrapper.between(StrUtil.isNotBlank(settlementQueryVo.getSettlementTimeStart()) && StrUtil.isNotBlank(settlementQueryVo.getSettlementTimeEnd()),
-                            InsPlyIncomeInvoiceSettlement::getCreateTime, settlementQueryVo.getSettlementTimeStart(), settlementQueryVo.getSettlementTimeEnd());
+                    insPlyIncomeInvoiceSettlementLambdaQueryWrapper.between(StrUtil.isNotBlank(vo.getSettlementTimeStart()) && StrUtil.isNotBlank(vo.getSettlementTimeEnd()),
+                            InsPlyIncomeInvoiceSettlement::getCreateTime, vo.getSettlementTimeStart(), vo.getSettlementTimeEnd());
                 }
                 List<InsPlyIncomeInvoiceSettlement> insPlyIncomeInvoiceSettlements = insPlyIncomeInvoiceSettlementMapper.selectList(insPlyIncomeInvoiceSettlementLambdaQueryWrapper);
                 // 如果结算记录不为空,且结算人、结算时间不为空,则根据结算记录的invoiceId过滤列表
                 if (CollUtil.isNotEmpty(insPlyIncomeInvoiceSettlements)) {
-                    if (StrUtil.isNotBlank(settlementQueryVo.getSettlementPerson()) || (StrUtil.isNotBlank(settlementQueryVo.getSettlementTimeStart()) && StrUtil.isNotBlank(settlementQueryVo.getSettlementTimeEnd()))) {
+                    if (StrUtil.isNotBlank(vo.getSettlementPerson()) || (StrUtil.isNotBlank(vo.getSettlementTimeStart()) && StrUtil.isNotBlank(vo.getSettlementTimeEnd()))) {
                         List<String> invoiceList = insPlyIncomeInvoiceSettlements.stream().map(InsPlyIncomeInvoiceSettlement::getInvoiceId).toList();
                         // filter:lambda 返回 true 的元素留下,false 的剔除
                         exportSuperviseSettlementDetailExcelDtos.setRecords(exportSuperviseSettlementDetailExcelDtos.getRecords().stream().filter(detail -> invoiceList.contains(detail.getInvoiceId())).toList());

+ 72 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java

@@ -265,6 +265,78 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         log.info("获取业务员/成员列表:查询出[{}]个业务员。 查询参数: sysUserInfoListVo=[{}]", CollUtil.size(userInfoList.getRecords()),JSONUtil.toJsonStr(sysUserInfoListVo));
         return userInfoList;
     }
+    @Override
+    public Page<SysUserJzgInfoDto> getBaojiaUserInfoList(Page page, SysUserInfoListVo sysUserInfoListVo) {
+        log.info("获取业务员列表:查询参数: sysUserInfoListVo=[{}]", JSONUtil.toJsonStr(sysUserInfoListVo));
+        if(Objects.nonNull(sysUserInfoListVo.getStatus()) && sysUserInfoListVo.getStatus() == 0){
+            List<Integer> typeStatus = new ArrayList<>();
+            sysUserInfoListVo.setStatus(null);
+            typeStatus.add(UserState.UserStateEnum.COMPANY_REVIEW_ING.getValue());
+            typeStatus.add(UserState.UserStateEnum.RESIGN_ING.getValue());
+            typeStatus.add(UserState.UserStateEnum.NOT_CERT.getValue());
+            sysUserInfoListVo.setTypeStatus(typeStatus);
+        }
+        // 前端 查询成员和查询业务员的接口,都使用的是这个接口,但是他们区分的时候,差异很大,因此这里将查询成员和查询业务员的接口拆分开来
+        Page<SysUserJzgInfoDto> userInfoList;
+        String systemCode = baseController.getUserSystemCode();
+
+        String loginUserId = baseController.getUserId();
+        // 查询业务员
+        if("2".equals(sysUserInfoListVo.getIsMember())){
+            String jzgInfoId = null;
+            if("10".equals(sysUserInfoListVo.getFromPage())){
+                long startTime = System.currentTimeMillis();
+                SysUserJzgInfo userInfoJzgInfo = sysUserJzgInfoService.getUserByUserId(loginUserId);
+                log.info("查询耗时:[{}]", System.currentTimeMillis() - startTime);
+                jzgInfoId = userInfoJzgInfo.getId();
+            }
+            log.info("查看成员下的业务员信息:成员的序号:jzgInfoId=[{}]", jzgInfoId);
+            // modify by lipf 查询成员下业务员的时候,不进行分页
+//            page.setSize(Long.MAX_VALUE);
+            userInfoList = sysUserJzgInfoMapper.queryBJYwy(page, sysUserInfoListVo, systemCode, jzgInfoId
+            );
+        }else if("1".equals(sysUserInfoListVo.getIsMember())){
+            // 查询成员
+            log.info("查询成员信息:sysUserInfoListVo=[{}]",JSONUtil.toJsonStr(sysUserInfoListVo)  );
+            userInfoList = sysUserJzgInfoMapper.queryMember(page, sysUserInfoListVo);
+        }else{
+            // 其他场景先使用原来的逻辑
+            userInfoList = sysUserJzgInfoMapper.getUserInfoList(page, sysUserInfoListVo);
+        }
+        List<SysUserJzgInfoDto> records = userInfoList.getRecords();
+        if(CollectionUtil.isNotEmpty(records)){
+            // 填充岗位信息
+            Map<String, String> attrTypeMap = sysUserJzgInfoSalesmanService.queryAllTypeAttrMap();
+            Map<String, SysOrganizationVO> stringSysOrganizationVOMap = sysOrganizationService.queryUserBindOrganization(baseController.getSystemCode());
+            records = records.stream().peek(action->{
+                if(loginUserId.equals(action.getUserId())){
+                    action.setDefaultSelected(true);
+                }
+                String typeAttr = attrTypeMap.getOrDefault(action.getId(),null);
+                // 在【业务员管理页面】 要求类型中,不展示1,2,3,4 对应的类型
+                if(StrUtil.isNotEmpty(typeAttr)){
+                    Set<String> set = Set.of("1","2","3");
+                    typeAttr = Arrays.stream(typeAttr.split(",")).filter(action1-> !set.contains(action1)).collect(Collectors.joining(","));
+                    action.setTypeAttr(typeAttr);
+                }
+                List<SysRole> userRole = sysUserRoleService.getUserRole(action.getUserId());
+                if(CollectionUtil.isNotEmpty(userRole)){
+                    String roleNames = userRole.stream().map(SysRole::getName).distinct().collect(Collectors.joining(","));
+                    action.setRoleName(roleNames);
+                }
+                SysOrganizationVO sysOrganizationVO = stringSysOrganizationVOMap.get(action.getUserId());
+                if(sysOrganizationVO != null){
+                    action.setOrganizationId(sysOrganizationVO.getOrganizationId());
+                    action.setOrganizationName(sysOrganizationVO.getName());
+                }
+
+            }).toList();
+            userInfoList.setRecords(records);
+        }
+        //Page<SysUserJzgInfoDto> userInfoList = sysUserJzgInfoMapper.getUserInfoList(page, sysUserInfoListVo);
+        log.info("获取业务员/成员列表:查询出[{}]个业务员。 查询参数: sysUserInfoListVo=[{}]", CollUtil.size(userInfoList.getRecords()),JSONUtil.toJsonStr(sysUserInfoListVo));
+        return userInfoList;
+    }
 
     @Override
     public UserTransferInfoVo getTransferInfo(String userId) {

+ 2 - 2
tenant/organization/src/main/resources/application.yml

@@ -103,7 +103,7 @@ tenant:
 
   ignoreLoginNames:
   ignoreFunction:
-
+# 过滤部门数据权限(下面的方法名是Mapper中的方法名)
 data-scope:
   tables:
     - sys_user_jzg_info
@@ -116,7 +116,7 @@ data-scope:
     - getTeamUserPage
     - getOrganizationUser
     - deleteOrganizationUser
-    - getBaojiaUserInfoList
+    - queryBJYwy
 
 
 

+ 102 - 61
tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

@@ -356,12 +356,33 @@
     <select id="getReceivablePage" resultType="com.jzg.commons.entity.finance.po.InsPlyIncome">
         <include refid="query"/>
         and ipi.system_code = #{receivableQueryVo.systemCode}
+        <if test="receivableQueryVo.policyholder != null and receivableQueryVo.policyholder != ''">
+            and  iocui.name = #{receivableQueryVo.policyholder}
+        </if>
+        <if test="receivableQueryVo.insurName != null and receivableQueryVo.insurName != ''">
+            and iocui2.name = #{receivableQueryVo.insurName}
+        </if>
+        <if test="receivableQueryVo.jqPolicyNo != null and receivableQueryVo.jqPolicyNo != '' ">
+            and iop.jq_policy_no  = #{receivableQueryVo.jqPolicyNo}
+        </if>
+        <if test="receivableQueryVo.syPolicyNo != null and receivableQueryVo.syPolicyNo != '' ">
+            and iop.sy_policy_no = #{receivableQueryVo.syPolicyNo}
+        </if>
+        <if test="receivableQueryVo.jyPolicyNo != null and receivableQueryVo.jyPolicyNo != '' ">
+            and iop.jy_policy_no = #{receivableQueryVo.jyPolicyNo}
+        </if>
+        <if test="receivableQueryVo.agreementId != null and receivableQueryVo.agreementId != ''">
+            and ipi.agreement_id = #{receivableQueryVo.agreementId}
+        </if>
         <if test="receivableQueryVo.payTimeBegin != null and receivableQueryVo.payTimeEnd != null">
             and io.pay_time between #{receivableQueryVo.payTimeBegin} and #{receivableQueryVo.payTimeEnd}
         </if>
         <if test="receivableQueryVo.reportTimeBegin != null and receivableQueryVo.reportTimeEnd != null">
             and io.create_time between #{receivableQueryVo.reportTimeBegin} and #{receivableQueryVo.reportTimeEnd}
         </if>
+        <if test="receivableQueryVo.quotationTimeBegin != null and receivableQueryVo.quotationTimeEnd != null">
+            and io.create_time between #{receivableQueryVo.quotationTimeBegin} and #{receivableQueryVo.quotationTimeEnd}
+        </if>
         <if test="receivableQueryVo.updateBy != null and receivableQueryVo.updateBy !='' ">
             and ipi.update_by = #{receivableQueryVo.updateBy}
         </if>
@@ -382,6 +403,9 @@
             left join sys_user su on su.id = suji.user_id and su.is_delete = 0
             where sujis.type_attr =#{receivableQueryVo.typeAttr})
         </if>
+        <if test="receivableQueryVo.salemanPhone != null and receivableQueryVo.salemanPhone != ''">
+            and io.real_quote_user_id = #{receivableQueryVo.salemanPhone}
+        </if>
         <if test="receivableQueryVo.invoiceSettlementStatus != null and receivableQueryVo.invoiceSettlementStatus != ''">
             <!-- 当状态为1时,查询已开票的数据 -->
             <if test="receivableQueryVo.invoiceSettlementStatus != 2">
@@ -770,6 +794,9 @@
         <where>
             ipiis.is_delete = 0
             AND ipiis.system_code = #{settlementQueryVo.systemCode}
+            <if test="settlementQueryVo.receivePaymentDateBegin != null and settlementQueryVo.receivePaymentDateEnd != ''">
+                and  ipiis.receive_payment_date between #{settlementQueryVo.receivePaymentDateBegin} and #{settlementQueryVo.receivePaymentDateEnd}
+            </if>
             <if test="settlementQueryVo.settlementIds != null and settlementQueryVo.settlementIds != ''">
                 AND ipiis.id IN
                 <foreach collection="settlementQueryVo.settlementIds" item="settlementId" open="(" separator="," close=")">
@@ -827,6 +854,7 @@
         SELECT
         ipiis.id AS settlementId,
         GROUP_CONCAT(DISTINCT ipiis.invoice_id SEPARATOR ',') AS invoiceId,
+        GROUP_CONCAT(DISTINCT ipii.invoice_no SEPARATOR ',') AS invoiceNos,
         GROUP_CONCAT(DISTINCT ipii.company_id SEPARATOR ',') AS company_id,
         GROUP_CONCAT(DISTINCT eic.name SEPARATOR ',') AS company_name,
         GROUP_CONCAT(DISTINCT ipii.invoice_type SEPARATOR ',') AS invoice_type,
@@ -847,6 +875,12 @@
         <where>
             ipiis.is_delete = 0
             AND ipiis.system_code = #{settlementQueryVo.systemCode}
+            <if test="settlementQueryVo.invoiceNo != null and settlementQueryVo.invoiceNo != ''">
+                and ipii.invoice_no  = #{settlementQueryVo.invoiceNo}
+            </if>
+            <if test="settlementQueryVo.receivePaymentDateBegin != null and settlementQueryVo.receivePaymentDateEnd != null">
+                and ipiis.receive_payment_date between #{settlementQueryVo.receivePaymentDateBegin} and #{settlementQueryVo.receivePaymentDateEnd}
+            </if>
             <if test="settlementQueryVo.settlementIds != null and settlementQueryVo.settlementIds != ''">
                 AND ipiis.id IN
                 <foreach collection="settlementQueryVo.settlementIds" item="settlementId" open="(" separator="," close=")">
@@ -984,35 +1018,28 @@
 
 
     <select id="getSuperviseSettlementDetailExcelDtos" resultType="com.jzg.commons.entity.finance.dto.ExportSuperviseSettlementDetailExcelDto">
-        select ipi.contact_person, ipi.contact_person_phone,
-        io.company_name as companyName,
-        io.signing_time as signingTime,
-        ipii.id as invoiceId,
-        ipii.status as status,
-        ipi.license_no as licenseNo,
-        io.product_name as productName,
-        ipii.invoice_type as invoiceType,
-        ipii.invoice_party as invoiceParty,
-        ipii.tax_point as taxPoint,
-        (COALESCE(ipi.jq_supervise_costs_premiums,0)  + COALESCE(ipi.sy_supervise_costs_premiums,0)  + COALESCE(ipi.jy_supervise_costs_premiums,0) ) as receivableSuperviseCosts,
-        COALESCE(ipi.jq_supervise_costs_premiums, 0) + COALESCE(ipi.sy_supervise_costs_premiums, 0) as superviseCostPremiums4Car,
-        COALESCE(ipi.jy_supervise_costs_premiums, 0) as jy_supervise_costs_premiums,
-        ipi.jq_premium as jqPremium,
-        ipi.jq_supervise_costs_proportion as jqSuperviseCostsProportion,
-        ipi.jq_policy_no as jqPolicyNo,
-        ipi.sy_premium as syPremium,
-        ipi.sy_supervise_costs_proportion as sySuperviseCostsProportion,
-        ipi.sy_policy_no as syPolicyNo,
-        ipi.jy_premium as jyPremium,
-        ipi.jy_supervise_costs_proportion as jySuperviseCostsProportion,
-        ipi.jy_policy_no as jyPolicyNo,
-        ipi.tax_premium as taxPremium,
-        (SELECT U.USERNAME FROM sys_user U WHERE U.mobile = ipii.create_by) as invoicePerson,
-        ipii.invoice_time
+        SELECT ipii.invoice_no , iop.jq_policy_no ,iop.sy_policy_no , iop.jy_policy_no , io.id as order_no, ipi.contact_person, ipi.contact_person_phone, io.company_name AS companyName, io.signing_time AS signingTime, ipii.id AS invoiceId
+        , ipii.status AS status, ipi.license_no AS licenseNo, io.product_name AS productName, ipii.invoice_type AS invoiceType, ipii.invoice_party AS invoiceParty
+        , ipii.tax_point AS taxPoint
+        , COALESCE(ipi.jq_supervise_costs_premiums, 0) + COALESCE(ipi.sy_supervise_costs_premiums, 0) + COALESCE(ipi.jy_supervise_costs_premiums, 0) AS receivableSuperviseCosts
+        , COALESCE(ipi.jq_supervise_costs_premiums, 0) + COALESCE(ipi.sy_supervise_costs_premiums, 0) AS superviseCostPremiums4Car
+        , COALESCE(ipi.jy_supervise_costs_premiums, 0) AS jy_supervise_costs_premiums, ipi.jq_premium AS jqPremium
+        , ipi.jq_supervise_costs_proportion AS jqSuperviseCostsProportion, ipi.jq_policy_no AS jqPolicyNo, ipi.sy_premium AS syPremium, ipi.sy_supervise_costs_proportion AS sySuperviseCostsProportion, ipi.sy_policy_no AS syPolicyNo
+        , ipi.jy_premium AS jyPremium, ipi.jy_supervise_costs_proportion AS jySuperviseCostsProportion, ipi.jy_policy_no AS jyPolicyNo, ipi.tax_premium AS taxPremium
+        , (  SELECT U.USERNAME FROM sys_user U WHERE U.mobile = ipii.create_by ) AS invoicePerson, ipii.invoice_time
         FROM ins_ply_income_invoice ipii
-        LEFT JOIN ins_ply_income_invoice_link ipil ON ipii.id = ipil.invoice_id AND ipil.is_delete = 0
-        LEFT JOIN ins_ply_income ipi ON ipi.id = ipil.income_id  AND ipi.is_delete = 0
-        LEFT JOIN ins_orders io  ON ipi.order_no = io.id  AND io.is_delete = 0
+        LEFT JOIN ins_ply_income_invoice_link ipil
+        ON ipii.id = ipil.invoice_id
+        AND ipil.is_delete = 0
+        LEFT JOIN ins_ply_income ipi
+        ON ipi.id = ipil.income_id
+        AND ipi.is_delete = 0
+        AND ipi.system_code = 'G111'
+        LEFT JOIN ins_orders io
+        ON ipi.order_no = io.id
+        AND io.is_delete = 0
+        left join ins_orders_policy iop
+        on io.id = iop.order_no and iop.is_delete = 0
         <where>
             ipii.is_delete = 0
             AND ipii.system_code = #{settlementQueryVo.systemCode}
@@ -1037,49 +1064,60 @@
             <if test="settlementQueryVo.agreementType != null and settlementQueryVo.agreementType != ''">
                 AND ipi.agreement_type = #{settlementQueryVo.agreementType}
             </if>
+            <if test="settlementQueryVo.invoiceNo != null and settlementQueryVo.invoiceNo != ''">
+                and ipii.invoice_no  = #{settlementQueryVo.invoiceNo}
+            </if>
+            <if test="settlementQueryVo.jqPolicyNo != null and settlementQueryVo.jqPolicyNo != '' ">
+                and iop.jq_policy_no  = #{settlementQueryVo.jqPolicyNo}
+            </if>
+            <if test="settlementQueryVo.syPolicyNo != null and settlementQueryVo.syPolicyNo != ''">
+                and iop.sy_policy_no  = #{settlementQueryVo.syPolicyNo}
+            </if>
+            <if test="settlementQueryVo.jyPolicyNo != null and settlementQueryVo.jyPolicyNo != ''">
+                and iop.jy_policy_no = #{settlementQueryVo.jyPolicyNo}
+            </if>
         </where>
     </select>
     <select id="getPlatFormSettlementDetailExcelDtos" resultType="com.jzg.commons.entity.finance.dto.ExportSuperviseSettlementDetailExcelDto">
-        select ipi.contact_person, ipi.contact_person_phone,
-        ipiis.id as settlementId,
-        ipiis.invoice_id as invoiceId,
-        io.company_name as companyName,
-        io.signing_time as signingTime,
-        ipii.status as status,
-        ipi.license_no as licenseNo,
-        io.product_name as productName,
-        ipii.invoice_type as invoiceType,
-        ipii.invoice_party as invoiceParty,
-        ipii.tax_point as taxPoint,
-        COALESCE(ipi.jq_supervise_costs_premiums, 0) + COALESCE(ipi.sy_supervise_costs_premiums, 0) + COALESCE(ipi.jy_supervise_costs_premiums, 0) + COALESCE(ipi.jq_other_costs_premiums, 0) + COALESCE(ipi.sy_other_costs_premiums, 0) + COALESCE(ipi.jy_other_costs_premiums, 0) AS receivableSuperviseCosts,
-        ipi.jq_premium as jqPremium,
-        ipi.jq_supervise_costs_proportion as jqSuperviseCostsProportion,
-        ipi.jq_other_costs_proportion,
-        ipi.jq_policy_no as jqPolicyNo,
-        ipi.sy_premium as syPremium,
-        ipi.sy_supervise_costs_proportion as sySuperviseCostsProportion,
-        ipi.sy_other_costs_proportion,
-        ipi.sy_policy_no as syPolicyNo,
-        ipi.jy_premium as jyPremium,
-        ipi.jy_supervise_costs_proportion as jySuperviseCostsProportion,
-        ipi.jy_other_costs_proportion,
-        ipi.jy_policy_no as jyPolicyNo,
-        ipi.tax_premium as taxPremium,
-        ipii.create_by as invoicePerson,
-        ipii.create_time as invoiceTime,
-        ipiis.create_by as settlementPerson,
-        ipiis.create_time as settlementTime,
-        (SELECT U.USERNAME FROM sys_user U WHERE U.mobile = ipii.create_by) as invoicePerson,
-        ipii.invoice_time
-        FROM
-        ins_ply_income_invoice ipii
+        SELECT ioci.license_no ,iocui.name as insurName, iop.jq_policy_no , iop.sy_policy_no , iop.jy_policy_no, ipi.contact_person, ipi.contact_person_phone, ipiis.id AS settlementId, ipiis.invoice_id AS invoiceId, io.company_name AS companyName
+        , io.signing_time AS signingTime, ipii.status AS status, ipi.license_no AS licenseNo, io.product_name AS productName, ipii.invoice_type AS invoiceType
+        , ipii.invoice_party AS invoiceParty, ipii.tax_point AS taxPoint
+        , COALESCE(ipi.jq_supervise_costs_premiums, 0) + COALESCE(ipi.sy_supervise_costs_premiums, 0) + COALESCE(ipi.jy_supervise_costs_premiums, 0) + COALESCE(ipi.jq_other_costs_premiums, 0) + COALESCE(ipi.sy_other_costs_premiums, 0) + COALESCE(ipi.jy_other_costs_premiums, 0) AS receivableSuperviseCosts
+        , ipi.jq_premium AS jqPremium, ipi.jq_supervise_costs_proportion AS jqSuperviseCostsProportion, ipi.jq_other_costs_proportion, ipi.jq_policy_no AS jqPolicyNo, ipi.sy_premium AS syPremium
+        , ipi.sy_supervise_costs_proportion AS sySuperviseCostsProportion, ipi.sy_other_costs_proportion, ipi.sy_policy_no AS syPolicyNo, ipi.jy_premium AS jyPremium, ipi.jy_supervise_costs_proportion AS jySuperviseCostsProportion
+        , ipi.jy_other_costs_proportion, ipi.jy_policy_no AS jyPolicyNo, ipi.tax_premium AS taxPremium, ipii.create_by AS invoicePerson, ipii.create_time AS invoiceTime
+        , ipiis.create_by AS settlementPerson, ipiis.create_time AS settlementTime ,
+        (
+        SELECT U.USERNAME FROM sys_user U WHERE U.mobile = ipii.create_by) AS invoicePerson, ipii.invoice_time
+        FROM ins_ply_income_invoice ipii
         LEFT JOIN ins_ply_income_invoice_settlement ipiis ON ipiis.invoice_id = ipii.id AND ipiis.is_delete = 0
         LEFT JOIN ins_ply_income_invoice_link ipil ON ipil.invoice_id = ipiis.invoice_id AND ipil.is_delete = 0
         LEFT JOIN ins_ply_income ipi ON ipi.id = ipil.income_id AND ipi.is_delete = 0
         LEFT JOIN ins_orders io ON ipi.order_no = io.id AND io.is_delete = 0
+        left join ins_orders_car_info ioci on ioci.order_no  = io.id and ioci.is_delete = 0
+        left join ins_orders_car_user_info iocui on iocui.order_no = io.id and iocui.is_delete = 0 and iocui.policy_person_type = 3
+        left join ins_orders_policy iop on io.id = iop.order_no and iop.is_delete = 0
         <where>
             ipii.is_delete = 0
             AND ipii.system_code = #{settlementQueryVo.systemCode}
+            <if test="settlementQueryVo.signingTimeBegin != null and settlementQueryVo.signingTimeEnd != null">
+                and io.signing_time between #{settlementQueryVo.signingTimeBegin} and #{settlementQueryVo.signingTimeEnd}
+            </if>
+            <if test="settlementQueryVo.licenseNo != null and settlementQueryVo.licenseNo != ''">
+                and ioci.license_no  = #{settlementQueryVo.licenseNo}
+            </if>
+            <if test="settlementQueryVo.insurName != null and settlementQueryVo.insurName != ''">
+                and iocui.name = #{settlementQueryVo.insurName}
+            </if>
+            <if test="settlementQueryVo.jqPolicyNo != null and settlementQueryVo.jqPolicyNo != '' ">
+                and iop.jq_policy_no = #{settlementQueryVo.jqPolicyNo}
+            </if>
+            <if test="settlementQueryVo.syPolicyNo != null and settlementQueryVo.syPolicyNo != ''">
+                and iop.sy_policy_no = #{settlementQueryVo.syPolicyNo}
+            </if>
+            <if test="settlementQueryVo.jyPolicyNo != null and settlementQueryVo.jyPolicyNo != ''">
+                and iop.jy_policy_no = #{settlementQueryVo.jyPolicyNo}
+            </if>
             <if test="settlementQueryVo.settlementId != null and settlementQueryVo.settlementId != ''">
                 AND ipiis.id = #{settlementQueryVo.settlementId}
             </if>
@@ -1692,6 +1730,9 @@
         <where>
             ipii.is_delete = 0
             AND ipii.system_code = #{invoiceRecordQueryVo.systemCode}
+            <if test="invoiceRecordQueryVo.amount != null and invoiceRecordQueryVo.amount != ''">
+                and ipii.receivable_supervise_premium = #{invoiceRecordQueryVo.amount}
+            </if>
             <if test="invoiceRecordQueryVo.invoiceType != null and invoiceRecordQueryVo.invoiceType != ''">
                 AND ipii.invoice_type = #{invoiceRecordQueryVo.invoiceType}
             </if>

+ 68 - 0
tenant/organization/src/main/resources/mapper/SysUserJzgInfoMapper.xml

@@ -125,6 +125,74 @@
         </where>
         order by suji.create_time desc
     </select>
+    <select id="queryBJYwy" resultMap="BaseResultMap">
+        select
+        suji.id,
+        suji.user_id,
+        suji.work_number,
+        su.username,
+        su.mobile ,
+        suji.name,
+        suji.dept_id,
+        sd.name AS dept_name,
+        suji.status,
+        suji.is_enable,
+        lsu.name AS leader_name,
+        ( select  aa.mobile from sys_user aa
+        where aa.id = lsu.user_id AND aa.is_delete = 0 ) AS leader_id,
+        (select re.name from sys_user_jzg_info re where re.id = suji.referrer_id) referrer_name,
+        suji.referrer_id,
+        suji.create_time AS createTime,
+        suji.create_by AS createBy
+        from
+        sys_user_jzg_info suji
+        left join sys_user su on su.id = suji.user_id AND su.is_delete = 0
+        LEFT JOIN sys_user_jzg_info lsu on lsu.id = suji.leader_id AND lsu.is_delete = 0
+        left join sys_dept sd on sd.id = suji.dept_id AND sd.is_delete = 0
+        LEFT JOIN sys_dept d ON suji.dept_id = d.id AND d.is_delete = 0
+        <where>
+            suji.is_delete = 0
+            and suji.id  in (
+            select sujis.sys_user_jzg_info_id  from sys_user_jzg_info_salesman sujis  where  sujis.type_attr != 2 AND sujis.type_attr != 3
+            )
+            <if test="leaderId != null and leaderId != ''">
+                and suji.leader_id = #{leaderId}
+            </if>
+            <if test="sysUserInfoListVo.deptId != null and sysUserInfoListVo.deptId != ''">
+                and d.route LIKE CONCAT('%', #{sysUserInfoListVo.deptId}, '%')
+            </if>
+            <if test="sysUserInfoListVo.typeAttr != null and sysUserInfoListVo.typeAttr != ''">
+                and suji.type_attr = #{sysUserInfoListVo.typeAttr}
+            </if>
+            <if test="sysUserInfoListVo.status != null and sysUserInfoListVo.status != '-1'">
+                and suji.status = #{sysUserInfoListVo.status}
+            </if>
+            <if test="sysUserInfoListVo.typeStatus != null and sysUserInfoListVo.typeStatus.size() > 0">
+                AND suji.status IN
+                <foreach item="status" collection="sysUserInfoListVo.typeStatus"
+                         open="(" separator="," close=")">
+                    #{status}
+                </foreach>
+            </if>
+            <if test="sysUserInfoListVo.isEnable != null and sysUserInfoListVo.isEnable != ''">
+                and suji.is_enable = #{sysUserInfoListVo.isEnable}
+            </if>
+            <if test="sysUserInfoListVo.sysOrganizationId != null and sysUserInfoListVo.sysOrganizationId != ''">
+                and so.id = #{sysUserInfoListVo.sysOrganizationId}
+            </if>
+            <if test="sysUserInfoListVo.leaderId != null and sysUserInfoListVo.leaderId != ''">
+                and (suji.leader_id = #{sysUserInfoListVo.leaderId}
+                or  lsu.name = #{sysUserInfoListVo.leaderId})
+            </if>
+            <if test="sysUserInfoListVo.salesman != null and sysUserInfoListVo.salesman != ''">
+                and (suji.name like concat('%',#{sysUserInfoListVo.salesman},'%')
+                or  su.mobile = #{sysUserInfoListVo.salesman}
+                or  suji.work_number = #{sysUserInfoListVo.salesman}
+                or  su.id = #{sysUserInfoListVo.salesman})
+            </if>
+        </where>
+        order by suji.create_time desc
+    </select>
 
     <!-- 查询成员 lipf 2026年4月24日11:10:15 -->
     <select id="queryMember" resultMap="BaseResultMap">