Bladeren bron

Merge remote-tracking branch 'origin/master'

Qchen 4 maanden geleden
bovenliggende
commit
a3d6d6eb69
30 gewijzigde bestanden met toevoegingen van 310 en 85 verwijderingen
  1. 2 0
      commons/src/main/java/com/jzg/commons/entity/dto/IncomeAndExpenseParam.java
  2. 33 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/ImportUpdateExcelResultVo.java
  3. 1 0
      gateway/src/main/java/com/jzg/config/CorsConfig.java
  4. 10 1
      platform/src/main/java/com/jzg/service/impl/SysMenuServiceImpl.java
  5. 1 1
      tenant/costsorrule/src/main/java/com/jzg/costsorrule/client/QuoteClient.java
  6. 1 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsFeeAuditService.java
  7. 2 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeAuditServiceImpl.java
  8. 1 1
      tenant/insurance/quotation-summary/src/main/resources/application-dev.yaml
  9. 1 1
      tenant/organization/src/main/java/com/jzg/organization/client/QuoteClient.java
  10. 3 2
      tenant/organization/src/main/java/com/jzg/organization/controller/AgreementController.java
  11. 7 1
      tenant/organization/src/main/java/com/jzg/organization/controller/AgreementRulesController.java
  12. 1 1
      tenant/organization/src/main/java/com/jzg/organization/controller/MessageController.java
  13. 1 1
      tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java
  14. 2 2
      tenant/organization/src/main/java/com/jzg/organization/mapper/PtlAgreementMapper.java
  15. 6 4
      tenant/organization/src/main/java/com/jzg/organization/mapper/PtlAgreementUndwrtRulesMapper.java
  16. 6 0
      tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementCostService.java
  17. 3 3
      tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementService.java
  18. 6 0
      tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementUndwrtRulesAttrService.java
  19. 4 6
      tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementUndwrtRulesDictService.java
  20. 3 2
      tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementUndwrtRulesService.java
  21. 1 1
      tenant/organization/src/main/java/com/jzg/organization/service/ReceivableService.java
  22. 9 3
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementCostServiceImpl.java
  23. 10 4
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementDispatchServiceImpl.java
  24. 19 10
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementServiceImpl.java
  25. 11 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementUndwrtRulesAttrServiceImpl.java
  26. 14 1
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementUndwrtRulesServiceImpl.java
  27. 66 30
      tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java
  28. 81 6
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserAccountServiceImpl.java
  29. 1 1
      tenant/organization/src/main/resources/application-dev.yml
  30. 4 2
      tenant/organization/src/main/resources/mapper/SysUserJzgInfoBankCardMapper.xml

+ 2 - 0
commons/src/main/java/com/jzg/commons/entity/dto/IncomeAndExpenseParam.java

@@ -22,5 +22,7 @@ public class IncomeAndExpenseParam {
     @Schema(description = "收支状态 0-收入 1-支出")
     private String incomeAndExpense;
 
+    @Schema(description = "月份筛选 格式:yyyy-MM,例如:2026-03")
+    private String month;
 
 }

+ 33 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/ImportUpdateExcelResultVo.java

@@ -0,0 +1,33 @@
+package com.jzg.commons.entity.finance.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * excel 导入结果的Vo-只修改已存在的数据,不新增
+ * 修改失败的数据会生成一个Excel的下载链接,返回给页面,页面可以下载
+ */
+@Data
+public class ImportUpdateExcelResultVo {
+
+    /**
+     * 成功数量
+     */
+    private Integer successNumber;
+
+    /**
+     * 失败数量
+     */
+    private Integer failedNumber;
+
+    /**
+     * 失败数据  修复这里!
+     */
+    private List<ReceivableExportExcelVo> failedData;
+
+    /**
+     * 新增:失败文件下载链接
+     */
+    private String failFileUrl;
+}

+ 1 - 0
gateway/src/main/java/com/jzg/config/CorsConfig.java

@@ -17,6 +17,7 @@ public class CorsConfig {
         corsConfiguration.addAllowedOrigin("http://localhost:8082");
         corsConfiguration.addAllowedOrigin("http://localhost:9000");
         corsConfiguration.addAllowedOrigin("http://localhost:9001");
+        corsConfiguration.addAllowedOrigin("http://localhost:9002");
         corsConfiguration.addAllowedOrigin("http://127.0.0.1:9000");
         corsConfiguration.addAllowedOrigin("http://192.168.0.149:9000");
         corsConfiguration.addAllowedOrigin("http://192.168.0.253:9000");

+ 10 - 1
platform/src/main/java/com/jzg/service/impl/SysMenuServiceImpl.java

@@ -1,5 +1,7 @@
 package com.jzg.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.core.base.BaseController;
@@ -113,11 +115,12 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu>
 
     @Override
     public List<String> getAllButtons(String userId,String systemCode) {
+        log.info("获取所有的按钮。 userId=[{}],systemCode=[{}]", userId, systemCode);
         LambdaQueryWrapper<SysMenu> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.eq(SysMenu::getType,"2");
         List<SysMenu> sysMenus = baseMapper.selectList(lambdaQueryWrapper);
         List<SysUserRole> sysUserRole = sysUserRoleMapper.selectByUserIdAndSysCodeOne(userId,systemCode);
-        List<SysMenu> menus = this.getMenuByRoleId(sysUserRole.stream().map(x->x.getRoleId()).toList());
+        List<SysMenu> menus = this.getMenuByRoleId(sysUserRole.stream().map(SysUserRole::getRoleId).toList());
 
         List<String> perms = new ArrayList<>();
         sysMenus.forEach(item->{
@@ -125,6 +128,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu>
                 perms.add(item.getPerms());
             }
         });
+        log.debug("获取所有的按钮。 userId=[{}],systemCode=[{}]. 获取到的权限包括:[{}]", userId, systemCode, JSONUtil.toJsonStr(perms));
         return perms;
     }
 
@@ -176,6 +180,11 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu>
 
     @Override
     public List<SysMenu> getMenuByRoleId(List<String> roleIds) {
+        log.info("根据角色序号查询有权限的菜单: roleIds=[{}]", JSONUtil.toJsonStr(roleIds));
+        if(CollUtil.isEmpty(roleIds)){
+            log.info("角色序号为空");
+            return Collections.emptyList();
+        }
         List<SysMenu> menuByRoleId = sysMenuMapper.getMenuByRoleId(roleIds);
         List<SysMenu> distinctMenuList = menuByRoleId.stream()
                 .collect(Collectors.toMap(

+ 1 - 1
tenant/costsorrule/src/main/java/com/jzg/costsorrule/client/QuoteClient.java

@@ -5,7 +5,7 @@ import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
-@FeignClient(name = "jzg-insurance")
+@FeignClient(name = "quotation-summary")
 public interface QuoteClient {
 
     /**

+ 1 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsFeeAuditService.java

@@ -16,7 +16,7 @@ import java.util.List;
 /**
 * @author dongxin
 * @description 针对表【ins_fee_audit(费用审核表)】的数据库操作Service
-* @createDate 2025-07-02 14:35:50
+* @date 2025-07-02 14:35:50
 */
 public interface InsFeeAuditService extends IService<InsFeeAudit> {
 

+ 2 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeAuditServiceImpl.java

@@ -178,7 +178,9 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
 
     @Override
     public QuoteEchoVo auditInfo(String orderNo) {
+        log.info("查看订单审核详情:orderNo=[{}]",JSONUtil.toJsonStr(orderNo));
         QuoteEchoVo detailVo = insOrdersService.getOrderDetail(orderNo);
+        log.debug("查看订单审核详情:orderNo=[{}], detailVo=[{}]",orderNo, JSONUtil.toJsonStr(detailVo));
         InsFeeAudit audit = this.getById(orderNo);
         detailVo.setAuditStatus(audit.getAuditStatus());
         return detailVo;

+ 1 - 1
tenant/insurance/quotation-summary/src/main/resources/application-dev.yaml

@@ -246,7 +246,7 @@ zhongAn:
 
 feign:
   client:
-    jzg-insurance:
+    quotation-summary:
       url: http://localhost:9898/
     jzg-org:
       url: http://localhost:8084/

+ 1 - 1
tenant/organization/src/main/java/com/jzg/organization/client/QuoteClient.java

@@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
-@FeignClient(name = "jzg-insurance")
+@FeignClient(name = "quotation-summary")
 public interface QuoteClient {
 
     @GetMapping(value = "/supplementOrder/selectById")

+ 3 - 2
tenant/organization/src/main/java/com/jzg/organization/controller/AgreementController.java

@@ -47,11 +47,12 @@ public class AgreementController extends BaseController {
 
     /**
      * 协议列表分页
-     * @return
+     *
+     * @return HttpResult<Page<AgreementVo>> 协议列表
      */
     @PostMapping("/agreementList")
     @Operation(summary = "协议列表分页")
-    public HttpResult agreementList(@RequestBody AgreementParam param){
+    public HttpResult<Page<AgreementVo>> agreementList(@RequestBody AgreementParam param){
         Page<AgreementVo> result = agreementService.queryPage(param);
         return HttpResult.ok(result);
     }

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

@@ -41,9 +41,15 @@ public class AgreementRulesController extends BaseController {
 
     }
 
+    /**
+     * 添加承保规则
+     *
+     * @author lipf
+     * @date 2026/4/13 11:32
+     */
     @Operation(summary = "添加承保规则")
     @PostMapping("/rulesAdd")
-    public HttpResult rulesAdd(@Validated @RequestBody AgreementRulesAddParam param) {
+    public HttpResult<String> rulesAdd(@Validated @RequestBody AgreementRulesAddParam param) {
         return agreementRulesService.rulesAdd(param) ?
                 HttpResult.ok("添加承保规则成功") : HttpResult.error("添加承保规则失败");
     }

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

@@ -59,7 +59,7 @@ public class MessageController extends BaseController {
         String userName = getUserName();
         SysUser sysUser = userService.getOne(new LambdaQueryWrapper<SysUser>()
                 .eq(SysUser::getMobile, userName));
-        param.setUserId(sysUser.getId());
+        param.setUserId(sysUser.getMobile());
         Page<MessageVo> result = messageService.queryPage(param);
         return HttpResult.ok(result);
     }

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

@@ -230,7 +230,7 @@ public class ReceivableController {
     @PostMapping("/importPlatFormReceivable")
     @Operation(summary = "导入平台协议")
     public HttpResult importPlatFormReceivable(@RequestParam("file") MultipartFile file){
-        ImportExcelResultVo importExcelResultVo = receivableService.importPlatFormReceivable(file);
+        ImportUpdateExcelResultVo importExcelResultVo = receivableService.importPlatFormReceivable(file);
         return HttpResult.ok(importExcelResultVo);
     }
 

+ 2 - 2
tenant/organization/src/main/java/com/jzg/organization/mapper/PtlAgreementMapper.java

@@ -13,7 +13,7 @@ import java.util.List;
 /**
 * @author dongxin
 * @description 针对表【ptl_agreement(协议信息表)】的数据库操作Mapper
-* @createDate 2025-02-18 10:49:25
+* @date 2025-02-18 10:49:25
 * @Entity generator.domain.PtlAgreement
 */
 @Mapper
@@ -23,7 +23,7 @@ public interface PtlAgreementMapper extends BaseMapper<PtlAgreement> {
      * 协议分页查询
      * @param page
      * @param param
-     * @return
+     * @return Page<AgreementVo> 协议列表
      */
     Page<AgreementVo> queryPage( Page page, @Param("param") AgreementParam param);
 

+ 6 - 4
tenant/organization/src/main/java/com/jzg/organization/mapper/PtlAgreementUndwrtRulesMapper.java

@@ -8,16 +8,18 @@ import org.apache.ibatis.annotations.Param;
 import java.util.List;
 
 /**
+ * 针对表【ptl_agreement_undwrt_rules(协议承保规则)】的数据库操作Mapper
+ *   generator.domain.PtlAgreementUndwrtRules
+ *
 * @author dongxin
-* @description 针对表【ptl_agreement_undwrt_rules(协议承保规则)】的数据库操作Mapper
-* @createDate 2025-02-20 09:32:09
-* @Entity generator.domain.PtlAgreementUndwrtRules
+* @date 2025-02-20 09:32:09
 */
 public interface PtlAgreementUndwrtRulesMapper extends BaseMapper<PtlAgreementUndwrtRules> {
 
     /**
      * 协议规则列表
-     * @return
+     *
+     * @return List<AgreementRulesVo>
      */
     List<AgreementRulesVo> queryList(@Param("agreementId") String agreementId);
 }

+ 6 - 0
tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementCostService.java

@@ -11,6 +11,12 @@ import java.util.List;
 
 public interface PtlAgreementCostService extends IService<PtlAgreementCost> {
 
+    /**
+     * 报价配置/费用管理/新增费用
+     *
+     * @author lipf
+     * @date 2026/4/13 14:16
+     */
     HttpResult save(PtlAgreemenCostAdd ptlAgreemenCostAdd);
 
 

+ 3 - 3
tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementService.java

@@ -17,14 +17,14 @@ import java.util.Map;
 /**
 * @author dongxin
 * @description 针对表【ptl_agreement(协议信息表)】的数据库操作Service
-* @createDate 2025-02-18 10:49:25
+* @date 2025-02-18 10:49:25
 */
 public interface PtlAgreementService extends IService<PtlAgreement> {
 
     /**
      * 协议分页查询
-     * @param param
-     * @return
+     * @param param 协议相关信息,页面查询条件
+     * @return Page<AgreementVo> 协议列表
      */
     Page<AgreementVo> queryPage(AgreementParam param);
 

+ 6 - 0
tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementUndwrtRulesAttrService.java

@@ -16,6 +16,12 @@ public interface PtlAgreementUndwrtRulesAttrService extends IService<PtlAgreemen
      */
     List<PtlAgreementUndwrtRulesAttr> getUndwrtRulesAttrList(PtlAgreementUndwrtRulesAttrQueryVo ptlAgreementUndwrtRulesAttrQueryVo);
 
+    /**
+     * 获取承保规则明细
+     *
+     * @author lipf
+     * @date 2026/4/13 11:36
+     */
     List<PtlAgreementUndwrtRulesAttr> getUndwrtRulesAttrList();
 
     /**

+ 4 - 6
tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementUndwrtRulesDictService.java

@@ -7,20 +7,18 @@ import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesDictLabal;
 import java.util.List;
 
 /**
- *@author: tz
- *@description: 协议承保规则字典 service
- *@create: 2024-2-22 15:44:29
+ * @author tz
+ * @description 协议承保规则字典 service
+ * @date 2024-2-22 15:44:29
  */
 public interface PtlAgreementUndwrtRulesDictService extends IService<PtlAgreementUndwrtRulesDict> {
 
 
     /**
      *
-     * @return
+     * @return List<PtlAgreementUndwrtRulesDictLabal>
      */
     List<PtlAgreementUndwrtRulesDictLabal> getUndwrtRulesDictList();
 
-
-
 }
 

+ 3 - 2
tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementUndwrtRulesService.java

@@ -23,8 +23,9 @@ public interface PtlAgreementUndwrtRulesService extends IService<PtlAgreementUnd
 
     /**
      * 承保规则新增
-     * @param param
-     * @return
+     *
+     * @param param 要添加的承保规则
+     * @return boolean 添加是否成功
      */
     boolean rulesAdd(AgreementRulesAddParam param);
 

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

@@ -154,7 +154,7 @@ public interface ReceivableService extends IService<InsPlyIncome> {
      * @param file
      * @return
      */
-    ImportExcelResultVo importPlatFormReceivable(MultipartFile file);
+    ImportUpdateExcelResultVo importPlatFormReceivable(MultipartFile file);
 
     /**
      * 批量修改

+ 9 - 3
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementCostServiceImpl.java

@@ -2,6 +2,7 @@ package com.jzg.organization.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -79,11 +80,19 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
 
     private static final String[] COST_TYPE_DICT_KEY = new String[]{"checkbox", "select", "inputTag"};
 
+    /**
+     * 报价配置/费用管理/新增费用
+     *
+     * @author lipf
+     * @date 2026/4/13 14:16
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResult save(PtlAgreemenCostAdd ptlAgreemenCostAdd) {
+        log.info("报价配置/费用管理/新增费用. ptlAgreemenCostAdd=[{}]", JSONUtil.toJsonStr(ptlAgreemenCostAdd));
         List<CostAdd> costAddList = ptlAgreemenCostAdd.getCostAddList();
         if (costAddList.isEmpty()) {
+            log.info("费用管理:保存数据不能为空");
             return HttpResult.error("保存数据不能为空");
         }
         for (CostAdd costAdd : costAddList) {
@@ -130,11 +139,8 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
                 if (ptlAgreementCostTypeDto.getExportKeepPointRatio().compareTo(ptlAgreementCostTypeDto.getExport()) > 0) {
                     return HttpResult.error("出口留点比例不能大于出口比例");
                 }
-
             }
         }
-
-
         PtlAgreementCost ptlAgreementCost = BeanUtil.copyProperties(ptlAgreementCostEnd, PtlAgreementCost.class);
         ptlAgreementCost.setCostRules(buildDescString(ptlAgreementCostEnd.getRuleConditions()));
         if (baseMapper.updateById(ptlAgreementCost) <= 0) {

+ 10 - 4
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementDispatchServiceImpl.java

@@ -1,5 +1,6 @@
 package com.jzg.organization.service.impl;
 
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.core.base.BaseController;
@@ -22,6 +23,8 @@ import com.jzg.organization.mapper.PtlAgreementDispatchAfterActionMapper;
 import com.jzg.organization.mapper.PtlAgreementDispatchMapper;
 import com.jzg.organization.mapper.PtlAgreementDispatchRulesAttrLinkMapper;
 import com.jzg.organization.service.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -35,12 +38,14 @@ import java.util.stream.Collectors;
 /**
 * @author dongxin
 * @description 针对表【ptl_agreement_dept(协议授权部门表)】的数据库操作Service实现
-* @createDate 2025-02-18 17:58:58
+* @date 2025-02-18 17:58:58
 */
 @Service
 public class PtlAgreementDispatchServiceImpl extends ServiceImpl<PtlAgreementDispatchMapper, PtlAgreementDispatch>
     implements PtlAgreementDispatchService {
 
+    private static final Logger log = LoggerFactory.getLogger(PtlAgreementDispatchServiceImpl.class);
+
     @Autowired
     PtlAgreementDispatchRulesAttrLinkMapper rulesAttrLinkMapper;
 
@@ -118,11 +123,12 @@ public class PtlAgreementDispatchServiceImpl extends ServiceImpl<PtlAgreementDis
 
     @Override
     public PtlAgreementDispatchVo getAgreementDispatch(PtlAgreementDispatchQuery ptlAgreementDispatchQuery) {
+        log.info("获取协议调度. ptlAgreementDispatchQuery=[{}]", JSONUtil.toJsonStr(ptlAgreementDispatchQuery));
         List<PtlAgreementDispatch> ptlAgreementDispatches = baseMapper.selectList(new LambdaQueryWrapper<PtlAgreementDispatch>()
                 .eq(PtlAgreementDispatch::getCompanyId, ptlAgreementDispatchQuery.getCompanyId()));
         PtlAgreementDispatchVo dispatchVos = new PtlAgreementDispatchVo();
-        List<String> dispatchIds = ptlAgreementDispatches.stream().map(x -> x.getId()).collect(Collectors.toList());
-        if (dispatchIds.size() > 0) {
+        List<String> dispatchIds = ptlAgreementDispatches.stream().map(PtlAgreementDispatch::getId).collect(Collectors.toList());
+        if (!dispatchIds.isEmpty()) {
             List<SysDict> dispatchBeforeActionDict = sysDictService.getByTypeCode("dispatch_before_action");
             List<SysDict> dispatchAfterActionDict = sysDictService.getByTypeCode("dispatch_after_action");
 
@@ -137,7 +143,7 @@ public class PtlAgreementDispatchServiceImpl extends ServiceImpl<PtlAgreementDis
             List<PtlAgreementDispatchAfterAction> ptlAgreementDispatchAfterActions = afterActionMapper.getAfterActions(ptlAgreementDispatchQuery.getCompanyId());
             int index = 1;
             for(PtlAgreementDispatch dispatch : ptlAgreementDispatches){
-                if(dispatch.getDispatchName().equals("")){
+                if(dispatch.getDispatchName().isEmpty()){
                     dispatch.setDispatchName("规则" + index);
                     index++;
                 }

+ 19 - 10
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementServiceImpl.java

@@ -2,6 +2,7 @@ package com.jzg.organization.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.convert.Convert;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -22,6 +23,8 @@ import com.jzg.organization.mapper.SysUserMapper;
 import com.jzg.organization.service.*;
 import io.seata.spring.annotation.GlobalTransactional;
 import org.apache.commons.lang3.ObjectUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -35,12 +38,13 @@ import java.util.stream.Collectors;
 /**
 * @author dongxin
 * @description 针对表【ptl_agreement(协议信息表)】的数据库操作Service实现
-* @createDate 2025-02-18 10:49:25
+* @date 2025-02-18 10:49:25
 */
 @Service
 public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, PtlAgreement>
     implements PtlAgreementService {
 
+    private static final Logger log = LoggerFactory.getLogger(PtlAgreementServiceImpl.class);
     @Value("${minio.bucket-name}")
     private String bucketName;
 
@@ -79,8 +83,14 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
     @Autowired
     private PtlAgreementCostExternalService ptlAgreementCostExternalService;
 
+    /**
+     * 协议分页查询
+     * @param param 协议相关信息,页面查询条件
+     * @return Page<AgreementVo> 协议列表
+     */
     @Override
     public Page<AgreementVo> queryPage(AgreementParam param) {
+        log.info("查询协议列表: AgreementParam=[{}]", JSONUtil.toJsonStr(param));
         param.setSystemCode(baseController.getUserSystemCode());
         Page<AgreementVo> page = baseMapper.queryPage(param.getPage(), param);
         List<AgreementVo> agreementVos = page.getRecords();
@@ -159,7 +169,8 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
     public AgreementVo isExistById(String id) {
         AgreementVo agreementVo = baseMapper.queryById(id);
         if (ObjectUtils.isEmpty(agreementVo)) {
-            throw new SystemException("协议id不存在!");
+            log.info("协议id不存在:id=[{}]",id);
+            throw new SystemException("协议id不存在!id=" + id);
         }
         return agreementVo;
     }
@@ -187,7 +198,7 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
 
         // 获取保险公司信息
         HttpResult<EsmInsCompany> result = companyClient.findById(param.getCompanyId());
-        String companyCode = "";
+        String companyCode;
         if(result.getCode() == 200 && Objects.nonNull(result.getData())){
             companyCode = result.getData().getCompanyCode();
         }else{
@@ -278,7 +289,7 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         agreementCostService.removeByIds(costIds);
 
         // 删除费用关联的规则
-        if(costIds.size() > 0) {
+        if(!costIds.isEmpty()) {
             agreementCostRuleService.remove(new LambdaQueryWrapper<PtlAgreementCostRule>()
                     .in(PtlAgreementCostRule::getPtlAgreementCostId, costIds));
         }
@@ -354,8 +365,7 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
                 costGroup.put(ptlAgreementCost.getCoverRuleId(), costGroupList);
             }
         }
-
-        /** 复制承保规则和费用 **/
+        // 复制承保规则和费用
         this.copyRuleAndCost(costGroup,costIds,costList,newAgreement);
 
     }
@@ -394,8 +404,7 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
                 Collectors.groupingBy(PtlAgreementCostType::getPtlAgreementCostId));
 
         costGroup.forEach((key, value) -> {
-
-            /** 1-承保规则复制 **/
+            //1-承保规则复制
             PtlAgreementUndwrtRules agreementUndwrtRules = rulesMap.get(key);
             PtlAgreementUndwrtRules newAgreementUndwrtRules = new PtlAgreementUndwrtRules();
             BeanUtils.copyProperties(agreementUndwrtRules,newAgreementUndwrtRules);
@@ -421,7 +430,7 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
                 agreementUndwrtRulesAttrLinkService.saveBatch(links);
             }
 
-            /** 2-费用复制 **/
+            // 2-费用复制
             List<PtlAgreementCost> agreementCostList = costGroup.get(key);
             if(CollUtil.isNotEmpty(agreementCostList)) {
                 agreementCostList.forEach(agreementCost -> {
@@ -459,7 +468,7 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
 
         // 获取保险公司信息
         HttpResult<EsmInsCompany> result = companyClient.findById(param.getCompanyId());
-        String companyCode = "";
+        String companyCode;
         if(result.getCode() == 200 && Objects.nonNull(result.getData())){
             companyCode = result.getData().getCompanyCode();
         }else{

+ 11 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementUndwrtRulesAttrServiceImpl.java

@@ -16,6 +16,8 @@ import com.jzg.organization.service.PtlAgreementUndwrtRulesAttrService;
 import com.jzg.organization.service.PtlAgreementUndwrtRulesDictService;
 import org.redisson.api.RList;
 import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -29,6 +31,8 @@ import static com.jzg.commons.constants.RedisKeyConstants.DICT_REDIS_KEY;
 public class PtlAgreementUndwrtRulesAttrServiceImpl extends ServiceImpl<PtlAgreementUndwrtRulesAttrMapper, PtlAgreementUndwrtRulesAttr>
         implements PtlAgreementUndwrtRulesAttrService {
 
+    private static final Logger log = LoggerFactory.getLogger(PtlAgreementUndwrtRulesAttrServiceImpl.class);
+
     @Autowired
     PtlAgreementUndwrtRulesDictService ptlAgreementUndwrtRulesDictService;
     @Autowired
@@ -38,8 +42,15 @@ public class PtlAgreementUndwrtRulesAttrServiceImpl extends ServiceImpl<PtlAgree
     @Autowired
     EsmInsCompanyClient esmInsCompanyClient;
 
+    /**
+     * 获取承保规则明细
+     *
+     * @author lipf
+     * @date 2026/4/13 11:36
+     */
     @Override
     public List<PtlAgreementUndwrtRulesAttr> getUndwrtRulesAttrList() {
+        log.info("获取协议明细");
         this.ptlAgreementUndwrtRulesAttrQueryVo = ptlAgreementUndwrtRulesAttrQueryVo;
         try {
             // 获取属性列表

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

@@ -1,6 +1,7 @@
 package com.jzg.organization.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.entity.dto.AgreementRulesAddParam;
@@ -20,6 +21,8 @@ import com.jzg.organization.service.PtlAgreementCostService;
 import com.jzg.organization.service.PtlAgreementUndwrtRulesAttrLinkService;
 import com.jzg.organization.service.PtlAgreementUndwrtRulesAttrService;
 import com.jzg.organization.service.PtlAgreementUndwrtRulesService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -36,12 +39,14 @@ import java.util.stream.Collectors;
 /**
 * @author dongxin
 * @description 针对表【ptl_agreement_undwrt_rules(协议承保规则)】的数据库操作Service实现
-* @createDate 2025-02-20 09:32:09
+* @date 2025-02-20 09:32:09
 */
 @Service
 public class PtlAgreementUndwrtRulesServiceImpl extends ServiceImpl<PtlAgreementUndwrtRulesMapper, PtlAgreementUndwrtRules>
     implements PtlAgreementUndwrtRulesService {
 
+    private static final Logger log = LoggerFactory.getLogger(PtlAgreementUndwrtRulesServiceImpl.class);;
+
     @Autowired
     private PtlAgreementUndwrtRulesAttrLinkMapper agreementUndwrtRulesAttrLinkMapper;
 
@@ -56,6 +61,7 @@ public class PtlAgreementUndwrtRulesServiceImpl extends ServiceImpl<PtlAgreement
 
     @Override
     public List<AgreementRulesVo> queryList(String agreementId) {
+        log.info("查询协议承保规则列表。 agreementId=[]", JSONUtil.toJsonStr(agreementId));
         List<AgreementRulesVo> rulesVos = baseMapper.queryList(agreementId);
         LocalDateTime now = LocalDateTime.now();
         if(CollUtil.isNotEmpty(rulesVos)){
@@ -88,9 +94,16 @@ public class PtlAgreementUndwrtRulesServiceImpl extends ServiceImpl<PtlAgreement
         return rulesVos;
     }
 
+    /**
+     * 承保规则新增
+     *
+     * @param param 要添加的承保规则
+     * @return boolean 添加是否成功
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean rulesAdd(AgreementRulesAddParam param) {
+        log.info("添加承保规则:承保明细param=[{}]", JSONUtil.toJsonStr(param));
         // 根据协议id获取最大的序号
         LambdaQueryWrapper<PtlAgreementUndwrtRules> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(PtlAgreementUndwrtRules::getAgreementId, param.getAgreementId())

+ 66 - 30
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -1,5 +1,6 @@
 package com.jzg.organization.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.ObjectUtil;
@@ -639,8 +640,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     }
 
     @Override
-    public ImportExcelResultVo importPlatFormReceivable(MultipartFile file) {
-        ImportExcelResultVo importExcelResultVo = new ImportExcelResultVo();
+    public ImportUpdateExcelResultVo importPlatFormReceivable(MultipartFile file) {
+        ImportUpdateExcelResultVo importExcelResultVo = new ImportUpdateExcelResultVo();
 
         List<ReceivableExportExcelVo> receivableExportExcelVos = importReceivableExcel(file);
         AssertionUtils.isEmpty(receivableExportExcelVos, "数据处理失败,导入失败");
@@ -650,11 +651,26 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         AssertionUtils.isFail(listHttpResult.getCode() != 200, listHttpResult.getMsg());
 
         int failedNumber = 0;
-        List<Object> failedExcel = new ArrayList<>();
-        List<InsPlyIncome> successExcel = new ArrayList<>();
+        List<ReceivableExportExcelVo> failedExcel = new ArrayList<>();
+        // 只存储需要【修改】的数据
+        List<InsPlyIncome> updateExcel = new ArrayList<>();
+
+        // ===================== 第一步:校验Excel内部保单号重复 =====================
+        Set<String> existPolicyNoSet = new HashSet<>();
+        Set<String> repeatPolicyNoSet = new HashSet<>();
+
+        for (ReceivableExportExcelVo vo : receivableExportExcelVos) {
+            String policyNo = vo.getJqPolicyNo();
+            if (existPolicyNoSet.contains(policyNo)) {
+                repeatPolicyNoSet.add(policyNo);
+            } else {
+                existPolicyNoSet.add(policyNo);
+            }
+        }
+
         // 处理数据
         for (ReceivableExportExcelVo vo : receivableExportExcelVos) {
-            // 出现空数据则失败
+            // 1. 空数据校验
             ImportResultVo resultVo = vo.checkEmpty();
             if (!resultVo.isSuccess()) {
                 failedNumber++;
@@ -663,35 +679,39 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                 continue;
             }
 
-            // 检测是否有重复的保单号
-            InsPlyIncome checkInsPlyIncome = baseMapper.selectOne(new LambdaQueryWrapper<InsPlyIncome>()
-                    .eq(InsPlyIncome::getJqPolicyNo, vo.getJqPolicyNo()));
-            if (!Objects.isNull(checkInsPlyIncome)) {
+            // 2. Excel内部保单号重复
+            if (repeatPolicyNoSet.contains(vo.getJqPolicyNo())) {
                 failedNumber++;
-                vo.setErrorMessage("车险保单号重复");
+                vo.setErrorMessage("保单号重复");
                 failedExcel.add(vo);
                 continue;
             }
 
-            // 判断应收数据是否已开票 / 已结算
-            InsPlyIncome checkInsPlyIncomeByOrderNo = baseMapper.selectOne(new LambdaQueryWrapper<InsPlyIncome>()
-                    .eq(InsPlyIncome::getOrderNo, vo.getOrderNo()));
-            if (ObjectUtil.isNotNull(checkInsPlyIncomeByOrderNo)){
-                if ("1".equals(checkInsPlyIncomeByOrderNo.getSuperviseSettlement()) || "1".equals(checkInsPlyIncomeByOrderNo.getOtherSettlement())
-                        || "1".equals(checkInsPlyIncomeByOrderNo.getJySuperviseSettlement()) || "1".equals(checkInsPlyIncomeByOrderNo.getJyOtherSettlement())){
-                    failedNumber++;
-                    vo.setErrorMessage("应收数据已结算");
-                    failedExcel.add(vo);
-                    continue;
-                }
-            }
+            // 3. 查询数据库中是否已存在该保单号
+            InsPlyIncome existIncome = baseMapper.selectOne(new LambdaQueryWrapper<InsPlyIncome>()
+                    .eq(InsPlyIncome::getJqPolicyNo, vo.getJqPolicyNo()));
 
-            // 判断应收数据是否已锁定,暂无逻辑
+            // ===================== 【关键修改】数据库不存在 → 直接失败 =====================
+            if (Objects.isNull(existIncome)) {
+                failedNumber++;
+                vo.setErrorMessage("保单号不存在,不允许新增");
+                failedExcel.add(vo);
+                continue;
+            }
 
+            // ===================== 数据库已存在 → 继续后续校验(需求3顺序) =====================
+            // 判断已开票 / 已结算
+            if ("1".equals(existIncome.getSuperviseSettlement()) || "1".equals(existIncome.getOtherSettlement())
+                    || "1".equals(existIncome.getJySuperviseSettlement()) || "1".equals(existIncome.getJyOtherSettlement())) {
+                failedNumber++;
+                vo.setErrorMessage("应收数据已结算");
+                failedExcel.add(vo);
+                continue;
+            }
 
-            // 处理数据
+            // 封装修改数据
             InsPlyIncome insPlyIncome = new InsPlyIncome();
-            insPlyIncome.setId(IdGenerate.nextId());
+            insPlyIncome.setId(existIncome.getId()); // 必须带ID才能修改
             insPlyIncome.setLicenseNo(vo.getLicenseNo());
             insPlyIncome.setJqPolicyNo(vo.getJqPolicyNo());
             insPlyIncome.setJqSuperviseCostsProportion(vo.getJqSuperviseCostsProportion());
@@ -703,16 +723,32 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             insPlyIncome.setJySuperviseCostsProportion(vo.getJySuperviseCostsProportion());
             insPlyIncome.setJyOtherCostsProportion(vo.getJyOtherCostsProportion());
             insPlyIncome.setContactPerson(vo.getDockingPerson());
-            successExcel.add(insPlyIncome);
+
+            // 加入修改列表
+            updateExcel.add(insPlyIncome);
+        }
+
+        // 执行批量更新(只更新,不新增)
+        if (CollUtil.isNotEmpty(updateExcel)) {
+            baseMapper.updateById(updateExcel);
+        }
+
+        // ===================== 生成失败数据下载链接 =====================
+        String failFileUrl = "";
+        if (CollUtil.isNotEmpty(failedExcel)) {
+            failFileUrl = exportBaseService.upLoadFile(
+                    ReceivableExportExcelVo.class,
+                    failedExcel,
+                    "平台协议应收-导入失败-" + Instant.now()
+            );
         }
 
+        // 返回结果
         importExcelResultVo.setFailedData(failedExcel);
-        importExcelResultVo.setSuccessNumber(successExcel.size());
+        importExcelResultVo.setFailFileUrl(failFileUrl);
+        importExcelResultVo.setSuccessNumber(updateExcel.size());
         importExcelResultVo.setFailedNumber(failedNumber);
 
-        // 批量插入数据
-        baseMapper.insert(successExcel);
-
         return importExcelResultVo;
     }
 

+ 81 - 6
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserAccountServiceImpl.java

@@ -20,6 +20,7 @@ import org.springframework.stereotype.Service;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.YearMonth;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -206,18 +207,66 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
         String systemCode = baseController.getAppSystemCode();
         SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getMobile, mobile));
         SysUserJzgInfo sysUserJzgInfo = sysUserJzgInfoService.getOne(new LambdaQueryWrapper<SysUserJzgInfo>().eq(SysUserJzgInfo::getUserId, sysUser.getId()).eq(SysUserJzgInfo::getSystemCode, systemCode));
-        List<SysAmountAuditing> sysAmountAuditingList = sysAmountAuditingService
-                .list(new LambdaQueryWrapper<SysAmountAuditing>()
-                        .eq(SysAmountAuditing::getUserId, sysUser.getId())
-                        .eq(SysAmountAuditing::getAuditingStatus, param.getStatus()));
+
+        // 处理月份筛选参数
+        String createTimeStart = param.getCreateTimeStart();
+        String createTimeEnd = param.getCreateTimeEnd();
+        if (param.getMonth() != null && !param.getMonth().isEmpty()) {
+            // 如果传入了月份参数,计算该月的开始和结束时间
+            String monthStr = param.getMonth();
+            DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("yyyy-MM");
+            YearMonth yearMonth = YearMonth.parse(monthStr, monthFormatter);
+            LocalDateTime monthStart = yearMonth.atDay(1).atStartOfDay();
+            LocalDateTime monthEnd = yearMonth.atEndOfMonth().atTime(23, 59, 59, 999999999);
+            
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+            createTimeStart = monthStart.format(formatter);
+            createTimeEnd = monthEnd.format(formatter);
+        }
+
+        // 构建查询条件(支持时间范围筛选)
+        LambdaQueryWrapper<SysAmountAuditing> auditingWrapper = new LambdaQueryWrapper<SysAmountAuditing>()
+                .eq(SysAmountAuditing::getUserId, sysUser.getId());
+        
+        // 支出状态筛选
+        if (param.getStatus() != null && !param.getStatus().isEmpty()) {
+            auditingWrapper.eq(SysAmountAuditing::getAuditingStatus, param.getStatus());
+        }
+        
+        // 时间筛选(支出记录)
+        if (createTimeStart != null && !createTimeStart.isEmpty()) {
+            auditingWrapper.ge(SysAmountAuditing::getCreateTime,
+                    LocalDateTime.parse(createTimeStart, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        }
+        if (createTimeEnd != null && !createTimeEnd.isEmpty()) {
+            auditingWrapper.le(SysAmountAuditing::getCreateTime,
+                    LocalDateTime.parse(createTimeEnd, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        }
+        
+        List<SysAmountAuditing> sysAmountAuditingList = sysAmountAuditingService.list(auditingWrapper);
+
+        // 构建订单收入查询参数(手动设置时间,避免类型转换问题)
         InsFeeOrdersParam feeOrdersParam = new InsFeeOrdersParam();
-        BeanUtils.copyProperties(param, feeOrdersParam);
         feeOrdersParam.setUserId(sysUserJzgInfo.getUserId());
+        if (createTimeStart != null && !createTimeStart.isEmpty()) {
+            feeOrdersParam.setCreateTimeStart(LocalDateTime.parse(createTimeStart, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        }
+        if (createTimeEnd != null && !createTimeEnd.isEmpty()) {
+            feeOrdersParam.setCreateTimeEnd(LocalDateTime.parse(createTimeEnd, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        }
         List<InsFeeOrders> insFeeOrdersList = quoteClient.getInsFeeOrderByUserId(feeOrdersParam);
+
+        // 构建分销收入查询参数
         InsFeeOrdersParam feeOrdersParam1 = new InsFeeOrdersParam();
-        BeanUtils.copyProperties(param, feeOrdersParam1);
         feeOrdersParam1.setDistributorId(sysUserJzgInfo.getId());
+        if (createTimeStart != null && !createTimeStart.isEmpty()) {
+            feeOrdersParam1.setCreateTimeStart(LocalDateTime.parse(createTimeStart, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        }
+        if (createTimeEnd != null && !createTimeEnd.isEmpty()) {
+            feeOrdersParam1.setCreateTimeEnd(LocalDateTime.parse(createTimeEnd, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        }
         List<InsFeeOrders> distributionList = quoteClient.getInsFeeOrdersList(feeOrdersParam1);
+
         List<IncomeAndExpenseVo.IncomeAndExpenseList> allRecords = new ArrayList<>();
         // 处理支出记录
         for (SysAmountAuditing auditing : sysAmountAuditingList) {
@@ -263,6 +312,14 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
             if (b.getCreateTime() == null) return -1;
             return b.getCreateTime().compareTo(a.getCreateTime());
         });
+
+        // 收支状态筛选(在排序后、分组前进行)
+        if (param.getIncomeAndExpense() != null && !param.getIncomeAndExpense().isEmpty()) {
+            allRecords = allRecords.stream()
+                    .filter(record -> param.getIncomeAndExpense().equals(record.getIncomeAndExpense()))
+                    .collect(Collectors.toList());
+        }
+
         // 按月份分组统计
         Map<String, IncomeAndExpenseVo.IncomeAndExpense> monthSummaryMap = new TreeMap<>(Collections.reverseOrder());
         for (IncomeAndExpenseVo.IncomeAndExpenseList record : allRecords) {
@@ -294,6 +351,24 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
             summary.setBalance(summary.getIncome().subtract(summary.getExpense()));
         }
 
+        // 如果指定了月份筛选,只返回该月的数据
+        if (param.getMonth() != null && !param.getMonth().isEmpty()) {
+            List<IncomeAndExpenseVo> result = new ArrayList<>();
+            IncomeAndExpenseVo vo = new IncomeAndExpenseVo();
+            IncomeAndExpenseVo.IncomeAndExpense summary = monthSummaryMap.get(param.getMonth());
+            if (summary != null) {
+                vo.setIncomeAndExpense(summary);
+                
+                // 筛选当前月份的明细记录
+                List<IncomeAndExpenseVo.IncomeAndExpenseList> monthRecords = allRecords.stream()
+                        .filter(record -> param.getMonth().equals(record.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM"))))
+                        .collect(Collectors.toList());
+                vo.setIncomeAndExpenseList(monthRecords);
+                result.add(vo);
+            }
+            return result;
+        }
+
         // 构建返回结果
         List<IncomeAndExpenseVo> result = new ArrayList<>();
         for (Map.Entry<String, IncomeAndExpenseVo.IncomeAndExpense> entry : monthSummaryMap.entrySet()) {

+ 1 - 1
tenant/organization/src/main/resources/application-dev.yml

@@ -22,7 +22,7 @@ config:
 
 feign:
   client:
-    jzg-insurance:
+    quotation-summary:
       url: http://localhost:9898/
     jzg-org:
       url: http://localhost:8084/

+ 4 - 2
tenant/organization/src/main/resources/mapper/SysUserJzgInfoBankCardMapper.xml

@@ -3,7 +3,7 @@
 <mapper namespace="com.jzg.organization.mapper.SysUserJzgInfoBankCardMapper">
     <resultMap id="BaseResultMap" type="com.jzg.commons.entity.dto.SysUserJzgInfoBankCardDto">
         <id column="id" jdbcType="VARCHAR" property="id"/>
-        <result column="userId" jdbcType="VARCHAR" property="userId"/>
+        <result column="userInfoId" jdbcType="VARCHAR" property="userInfoId"/>
         <result column="name" jdbcType="VARCHAR" property="name"/>
         <result column="bankName" jdbcType="VARCHAR" property="bankName"/>
         <result column="bankAddress" jdbcType="VARCHAR" property="bankAddress"/>
@@ -21,14 +21,16 @@
             sujibc.bank_name as bankName,
             sujibc.bank_address as bankAddress,
             sujibc.bank_card_number as bankCardNumber,
+            sujibc.card_holder_mobile as cardHolderMobile,
             sujibc.audit_status as auditStatus,
             sujif.file_url as cardFileUrl
         from
             sys_user_jzg_info_bank_card sujibc
-        left join sys_user_jzg_info suji on suji.user_id = sujibc.user_info_id and suji.system_code = #{systemCode}
+        left join sys_user_jzg_info suji on suji.id = sujibc.user_info_id and suji.system_code = #{systemCode}
         left join sys_user_jzg_info_file sujif on sujif.id = sujibc.file_id
         where
             1=1
+            and sujibc.is_delete = '0'
             and sujibc.user_info_id = #{userInfoId}
     </select>