Explorar el Código

Merge branch 'master' into wrq_dev

wangrq hace 1 mes
padre
commit
f6d2af802c
Se han modificado 41 ficheros con 1500 adiciones y 463 borrados
  1. 3 1
      .gitignore
  2. 6 4
      commons/src/main/java/com/jzg/commons/aop/aspect/OperatorTrajectoryAspect.java
  3. 1 0
      commons/src/main/java/com/jzg/commons/entity/account/po/SysUserAccountChangeLog.java
  4. 2 0
      commons/src/main/java/com/jzg/commons/entity/dto/CostManagementVo.java
  5. 4 0
      commons/src/main/java/com/jzg/commons/entity/dto/FeeAuditParam.java
  6. 2 2
      commons/src/main/java/com/jzg/commons/entity/dto/SysUserJzgInfoBankCardDto.java
  7. 14 0
      commons/src/main/java/com/jzg/commons/entity/dto/UpdatePayAccountParam.java
  8. 18 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/UpdateCompanyBatchVo.java
  9. 50 23
      commons/src/main/java/com/jzg/commons/entity/orders/vo/FeeAuditVo.java
  10. 15 0
      commons/src/main/java/com/jzg/commons/entity/vo/ChangeLogDetail.java
  11. 4 0
      commons/src/main/java/com/jzg/commons/entity/vo/InsFeeOrdersVo.java
  12. 3 0
      commons/src/main/java/com/jzg/commons/entity/vo/UserInfoVo.java
  13. 4 3
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsOrdersController.java
  14. 1 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  15. 3 3
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersService.java
  16. 3 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeAuditServiceImpl.java
  17. 845 239
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  18. 3 0
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeAuditMapper.xml
  19. 9 3
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/build/ZhongAnCrawlerQuoteResultsVoBuild.java
  20. 2 2
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerRequestComponent.java
  21. 1 3
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerApplyAccommodationRequest.java
  22. 31 7
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/service/Impl/ZhongAnCrawlerRequestImpl.java
  23. 3 2
      tenant/organization/src/main/java/com/jzg/organization/client/InsOrdersClient.java
  24. 13 0
      tenant/organization/src/main/java/com/jzg/organization/controller/AmountAuditingController.java
  25. 2 2
      tenant/organization/src/main/java/com/jzg/organization/controller/PtlAgreementCostController.java
  26. 8 0
      tenant/organization/src/main/java/com/jzg/organization/mapper/SysAmountAuditingMapper.java
  27. 69 15
      tenant/organization/src/main/java/com/jzg/organization/mapper/SysUserAccountIncomeLogMapper.java
  28. 1 1
      tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementCostService.java
  29. 9 0
      tenant/organization/src/main/java/com/jzg/organization/service/SysAmountAuditingService.java
  30. 9 0
      tenant/organization/src/main/java/com/jzg/organization/service/SysUserAccountIncomeLogService.java
  31. 63 53
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementCostServiceImpl.java
  32. 17 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlSchemeServiceImpl.java
  33. 5 3
      tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java
  34. 47 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysAmountAuditingServiceImpl.java
  35. 36 1
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserAccountIncomeLogServiceImpl.java
  36. 161 80
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserAccountServiceImpl.java
  37. 16 5
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserJzgInfoBankCardServiceImpl.java
  38. 3 0
      tenant/organization/src/main/resources/mapper/PtlAgreementCostMapper.xml
  39. 3 3
      tenant/organization/src/main/resources/mapper/ReceivableMapper.xml
  40. 10 6
      tenant/organization/src/main/resources/mapper/SysAmountAuditingMapper.xml
  41. 1 1
      tenant/organization/src/main/resources/mapper/SysUserJzgAppMapper.xml

+ 3 - 1
.gitignore

@@ -83,4 +83,6 @@ tenant/insurance/quotation-yongcheng/outPath/
 tenant/insurance/quotation-zhongan/outPath/
 tenant/insurance/quotation-zhongmei/outPath/
 tenant/insurance/quotation-zijin/outPath/
-tenant/organization/outPath/
+tenant/organization/outPath/
+
+.reasonix

+ 6 - 4
commons/src/main/java/com/jzg/commons/aop/aspect/OperatorTrajectoryAspect.java

@@ -219,18 +219,20 @@ public class OperatorTrajectoryAspect {
             return;
         }
         com.jzg.commons.entity.po.OperatorTrajectory trajectory = new com.jzg.commons.entity.po.OperatorTrajectory();
+        String userTokenString = baseController.getUserTokenString();
+        JSONObject userInfo = JSONObject.parseObject(userTokenString);
+        String systemCode = userInfo.getString("system");
         String trajectoryId = IdGenerate.nextId();
         trajectory.setId(trajectoryId);
         trajectory.setOperatorType(operatorTrajectory.type());
-        trajectory.setSystemCode(baseController.getUserSystemCode());
+        trajectory.setSystemCode(systemCode);
         String className = point.getTarget().getClass().getName();
         String methodName = point.getSignature().getName();
         trajectory.setServiceTag(className + "." + methodName + "()");
         trajectory.setModuleName(operatorTrajectory.moduleName());
         trajectory.setCreateTime(LocalDateTime.now());
-        String userName = baseController.getUserName();
-        trajectory.setCreateBy(userName);
-        trajectory.setCreateByName(userName);
+        trajectory.setCreateBy(userInfo.getString("username"));
+        trajectory.setCreateByName(userInfo.getString("name"));
         trajectory.setEntityName(Arrays.stream(operatorTrajectory.entityClass())
                 .map(Class::getName).collect(Collectors.joining(",")));
         if(!Objects.isNull(obj)) {

+ 1 - 0
commons/src/main/java/com/jzg/commons/entity/account/po/SysUserAccountChangeLog.java

@@ -92,6 +92,7 @@ public class SysUserAccountChangeLog extends BaseModel {
         operTypeMap.put(2,"保单提成");
         operTypeMap.put(3,"提现");
         operTypeMap.put(4,"提现驳回");
+        operTypeMap.put(5,"提现中");
     }
 
     public String getOperTypeName(){

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

@@ -76,6 +76,8 @@ public class CostManagementVo {
 
     @Schema(description = "保司名称")
     private String companyName;
+    @Schema(description = "保司id")
+    private String companyId;
 
     @Schema(description = "规则条件集合")
     private List<PtlAgreementCostRuleVo> ruleConditions;

+ 4 - 0
commons/src/main/java/com/jzg/commons/entity/dto/FeeAuditParam.java

@@ -67,6 +67,10 @@ public class FeeAuditParam extends PageRequest {
     @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate signingTimeEnd;
 
+    @Schema(description = "签单时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private List<String> signingTime;
+
     @Schema(description = "订单号")
     private String orderNo;
 

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

@@ -1,6 +1,6 @@
 package com.jzg.commons.entity.dto;
 
-import com.jzg.commons.entity.po.SysUserJzgInfoBankCardRecord;
+import com.jzg.commons.entity.vo.ChangeLogDetail;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -91,5 +91,5 @@ public class SysUserJzgInfoBankCardDto implements Serializable {
     private String leaderName;
 
     @Schema(description = "审核记录列表")
-    private List<SysUserJzgInfoBankCardRecord> sysUserJzgInfoBankCardRecordList;
+    private List<ChangeLogDetail> sysUserJzgInfoBankCardRecordList;
 }

+ 14 - 0
commons/src/main/java/com/jzg/commons/entity/dto/UpdatePayAccountParam.java

@@ -0,0 +1,14 @@
+package com.jzg.commons.entity.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class UpdatePayAccountParam {
+
+    @Schema(name = "提现申请表的序号")
+    private String amountAuditingId;
+
+    @Schema(name = "付款账号Id")
+    private String payAccountId;
+}

+ 18 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/UpdateCompanyBatchVo.java

@@ -0,0 +1,18 @@
+package com.jzg.commons.entity.finance.vo;
+
+import com.jzg.commons.entity.vo.AgreementVo;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Builder
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class UpdateCompanyBatchVo {
+
+    private AgreementVo agreementVo;
+
+    private BatchModifyVo batchModifyVo;
+}

+ 50 - 23
commons/src/main/java/com/jzg/commons/entity/orders/vo/FeeAuditVo.java

@@ -18,6 +18,7 @@ public class FeeAuditVo extends BaseModel {
 
     @Serial
     private static final long serialVersionUID = 4631117388822444574L;
+
     @ExcelProperty("订单号")
     @Schema(description = "订单号")
     private String orderNo;
@@ -29,9 +30,7 @@ public class FeeAuditVo extends BaseModel {
     @ExcelIgnore
     @Schema(description = "保险公司ID")
     private String companyId;
-    /**
-     * 保险公司名称及父级的名称,例如
-     */
+
     @ExcelIgnore
     @Schema(description = "保险公司名称及父级的名称")
     private String companyALlName;
@@ -116,8 +115,8 @@ public class FeeAuditVo extends BaseModel {
     @Schema(description = "驾意险保费")
     private BigDecimal jyPremium;
 
-    @ExcelProperty("总保费")
-    @Schema(description = "总保费")
+    @ExcelProperty("险种总保费")
+    @Schema(description = "险种合计总保费")
     private BigDecimal sumPremium;
 
     @ExcelProperty("审核时间")
@@ -133,11 +132,11 @@ public class FeeAuditVo extends BaseModel {
     @Schema(description = "驳回原因")
     private String refuse;
 
-    @ExcelProperty("是否疑问订单 0.否 1.是")
+    @ExcelProperty("是否疑问订单")
     @Schema(description = "是否是疑问订单 0.否 1.是")
     private String isProblem;
 
-    @ExcelProperty("订单来源 0 pc  1 app")
+    @ExcelProperty("订单来源")
     @Schema(description = "订单来源 0 pc  1 app")
     private String orderSource;
 
@@ -149,17 +148,16 @@ public class FeeAuditVo extends BaseModel {
     @Schema(description = "是否是疑问单")
     private int problem;
 
-    @ExcelProperty("设置为疑问单的原因")
+    @ExcelProperty("疑问单设置原因")
     @Schema(description = "设置为疑问单的原因")
     private String problemReason;
 
-    @ExcelProperty("设为疑问单的时间")
-    @Schema(description = "设为疑问单的时间")
+    @ExcelProperty("疑问单设置时间")
+    @Schema(description = "设为疑问单的时间")
     private String problemTime;
 
-
-    @ExcelProperty("总保费")
-    @Schema(description = "总保费")
+    @ExcelProperty("订单总保费")
+    @Schema(description = "订单最终总保费")
     private BigDecimal totalPremium;
 
     @ExcelProperty("交强险应收费用")
@@ -194,14 +192,10 @@ public class FeeAuditVo extends BaseModel {
     @Schema(description = "总应付费用(含分销)")
     private BigDecimal totalPayablePremium;
 
-    /**
-     * 表示不含分销费用的金额
-     */
     @ExcelProperty("总应付费用")
-    @Schema(description = "总应付费用")
+    @Schema(description = "不含分销费用的总应付金额")
     private BigDecimal totalExportPremium;
 
-
     @ExcelProperty("交强险手续费费用")
     @Schema(description = "交强险手续费费用")
     private BigDecimal jqCommissionPremium;
@@ -358,11 +352,10 @@ public class FeeAuditVo extends BaseModel {
     @Schema(description = "驾意出口留点费用")
     private BigDecimal jyExportKeepPointPremium;
 
-    @ExcelProperty("权益相关:可用金额<可用金额=出口费用➖出口人留点费用>")
-    @Schema(description = "权益相关:可用金额<可用金额=出口费用➖出口人留点费用>")
+    @ExcelProperty("可用金额")
+    @Schema(description = "可用金额=出口费用➖出口人留点费用")
     private BigDecimal availableAmount;
 
-
     @Schema(description = "一级分销费")
     @ExcelProperty("一级分销费")
     @TableField(exist = false)
@@ -424,33 +417,67 @@ public class FeeAuditVo extends BaseModel {
     @TableField(exist = false)
     private BigDecimal thirdDistributionRatio;
 
+    @ExcelIgnore
+    @Schema(description = "支付时间")
     private String payingTime;
 
+    @ExcelIgnore
+    @Schema(description = "合作保险公司ID")
     private String partnerCompanyId;
 
+    @ExcelIgnore
     @Schema(description = "保险机构名称")
     private String partnerCompanyName;
-    @Schema(description = "保险机构名称")
+
+    @ExcelIgnore
+    @Schema(description = "保险机构简称")
     private String partnerCompanySimplyName;
 
+    @ExcelIgnore
     @Schema(description = "对接人姓名")
     private String contact;
 
+    @ExcelIgnore
     @Schema(description = "交强保单号")
     private String jqPolicyNo;
+
+    @ExcelIgnore
     @Schema(description = "非车保单号")
     private String jyPolicyNo;
+
+    @ExcelIgnore
     @Schema(description = "商业保单号")
     private String syPolicyNo;
 
-    @Schema(description = "起保时间")
+    @ExcelIgnore
+    @Schema(description = "交强险起保时间")
     private String jqRiskStartDate;
+
+    @ExcelIgnore
+    @Schema(description = "交强险终保时间")
     private String jqRiskEndDate;
+
+    @ExcelIgnore
+    @Schema(description = "商业险起保时间")
     private String syRiskStartDate;
+
+    @ExcelIgnore
+    @Schema(description = "商业险终保时间")
     private String syRiskEndDate;
+
+    @ExcelIgnore
+    @Schema(description = "驾意险起保时间")
     private String jyRiskStartDate;
+
+    @ExcelIgnore
+    @Schema(description = "驾意险终保时间")
     private String jyRiskEndDate;
 
+    @ExcelIgnore
     @Schema(description = "投保人")
     private String policyholder;
+
+    public String getAuditingUserName(){
+        return this.auditUser;
+    }
 }

+ 15 - 0
commons/src/main/java/com/jzg/commons/entity/vo/ChangeLogDetail.java

@@ -26,6 +26,12 @@ public class ChangeLogDetail implements Serializable {
     @Schema(name = "审核说明")
     private String content;
 
+    @Schema(name = "银行卡ID")
+    private String bankCardId;
+
+    @Schema(name = "id")
+    private String id;
+
     public ChangeLogDetail(){
 
     }
@@ -37,4 +43,13 @@ public class ChangeLogDetail implements Serializable {
         this.content = content;
     }
 
+    public ChangeLogDetail(String title, LocalDateTime time, Boolean show, String content, String bankCardId, String id) {
+        this.title = title;
+        this.time = time;
+        this.show = show;
+        this.content = content;
+        this.bankCardId = bankCardId;
+        this.id = id;
+    }
+
 }

+ 4 - 0
commons/src/main/java/com/jzg/commons/entity/vo/InsFeeOrdersVo.java

@@ -237,6 +237,10 @@ public class InsFeeOrdersVo {
         this.syExportPremium = insFeeOrders.getSyExportPremium() != null ? insFeeOrders.getSyExportPremium().toString() : "0.00";
         this.jyExportPremium = insFeeOrders.getJyExportPremium() != null ? insFeeOrders.getJyExportPremium().toString() : "0.00";
 
+        this.jqExportRatio = insFeeOrders.getJqExportRatio() != null ? insFeeOrders.getJqExportRatio() : new BigDecimal(0);
+        this.syExportRatio = insFeeOrders.getSyExportRatio() != null ? insFeeOrders.getSyExportRatio() : new BigDecimal(0);
+        this.jyExportRatio = insFeeOrders.getJyExportRatio() != null ? insFeeOrders.getJyExportRatio() : new BigDecimal(0);
+
         this.jqKeepPointPremium = insFeeOrders.getJqKeepPointPremium() != null ? insFeeOrders.getJqKeepPointPremium().toString() : "0.00";
         this.syKeepPointPremium = insFeeOrders.getSyKeepPointPremium() != null ? insFeeOrders.getSyKeepPointPremium().toString() : "0.00";
         this.jyKeepPointPremium = insFeeOrders.getJyKeepPointPremium() != null ? insFeeOrders.getJyKeepPointPremium().toString() : "0.00";

+ 3 - 0
commons/src/main/java/com/jzg/commons/entity/vo/UserInfoVo.java

@@ -43,6 +43,9 @@ public class UserInfoVo {
     @Schema(description = "推荐人名字")
     private String referrerName;
 
+    @Schema(description = "推荐人手机号")
+    private String referrerMobile;
+
     @Schema(description = "机构id")
     private String deptId;
 

+ 4 - 3
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsOrdersController.java

@@ -14,6 +14,7 @@ import com.jzg.commons.entity.dto.InsOrdersParam;
 import com.jzg.commons.entity.dto.InsOrdersParamVO;
 import com.jzg.commons.entity.dto.UpdateFeeRatioDTO;
 import com.jzg.commons.entity.finance.vo.BatchModifyVo;
+import com.jzg.commons.entity.finance.vo.UpdateCompanyBatchVo;
 import com.jzg.commons.entity.orders.po.InsOrders;
 import com.jzg.commons.entity.orders.po.InsOrdersCarInfo;
 import com.jzg.commons.entity.orders.vo.HistoryQuoteQueryVo;
@@ -260,14 +261,14 @@ public class InsOrdersController extends BaseController {
     /**
      * 批量修改ins_orders和ins_order_adjust的保司信息
      *
-     * @param batchModifyVo 批量修改参数,包含orderNos和companyIds
+     * @param updateCompanyBatchVo 批量修改参数,包含orderNos和companyIds
      * @author lipf
      * @date 2026/8/5
      */
     @PostMapping("/updateCompanyBatch")
     @Operation(summary = "批量修改订单和批改表的保司信息")
-    public HttpResult<String> updateCompanyBatch(@RequestBody BatchModifyVo batchModifyVo){
-        return insOrdersService.updateCompanyBatch(batchModifyVo);
+    public HttpResult<String> updateCompanyBatch(@RequestBody UpdateCompanyBatchVo updateCompanyBatchVo){
+        return insOrdersService.updateCompanyBatch(updateCompanyBatchVo);
     }
 
     @GetMapping("/comparePrice")

+ 1 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java

@@ -874,7 +874,7 @@ public class UnifyOrderManager {
         try {
             quoteService.uploadImage(insuranceUploadImageVo);
         }catch (Exception e){
-            throw new SystemException("影像上传异常,请检查影像");
+            throw new SystemException("影像上传异常,请检查影像是否上传或影像是否清晰");
         }
         return HttpResult.ok();
     }

+ 3 - 3
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersService.java

@@ -8,6 +8,7 @@ import com.jzg.commons.entity.dto.InsOrdersParam;
 import com.jzg.commons.entity.dto.InsOrdersParamVO;
 import com.jzg.commons.entity.enums.MessageCodeEnum;
 import com.jzg.commons.entity.finance.vo.BatchModifyVo;
+import com.jzg.commons.entity.finance.vo.UpdateCompanyBatchVo;
 import com.jzg.commons.entity.orders.po.InsOrders;
 import com.jzg.commons.entity.orders.po.InsOrdersCarInfo;
 
@@ -30,7 +31,6 @@ import com.jzg.commons.entity.quote.vo.orders.InsFeeCalculateRequest;
 import com.jzg.commons.entity.quote.vo.orders.InsFeeCalculateResponse;
 import com.jzg.quotation.summary.entity.vo.*;
 
-import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.List;
@@ -291,11 +291,11 @@ public interface InsOrdersService extends IService<InsOrders> {
     /**
      * 批量修改ins_orders和ins_order_adjust的保司信息
      *
-     * @param batchModifyVo 批量修改参数,包含orderNos和companyIds
+     * @param updateCompanyBatchVo 批量修改参数,包含orderNos和companyIds
      * @author lipf
      * @date 2026/8/5
      */
-    HttpResult<String> updateCompanyBatch(BatchModifyVo batchModifyVo);
+    HttpResult<String> updateCompanyBatch(UpdateCompanyBatchVo updateCompanyBatchVo);
 
     /**
      * 获取订单关联协议的税率

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

@@ -899,6 +899,9 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
         }
         audit.setProblemReason(Objects.toString(problemReason,""));
         audit.setIsProblem(Integer.parseInt(status));
+        audit.setAuditUser(userName);
+        audit.setAuditTime(LocalDateTime.now());
+
         // 设置疑问订单的时间
         if ("1".equals(status)){
             audit.setProblemTime(LocalDateTime.now());

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 845 - 239
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java


+ 3 - 0
tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeAuditMapper.xml

@@ -188,6 +188,9 @@
             <if test="param.signingTimeStart != null and param.signingTimeEnd != null">
                 and DATE_FORMAT(io.signing_time, '%Y-%m-%d') between #{param.signingTimeStart} AND #{param.signingTimeEnd}
             </if>
+            <if test="param.signingTime != null and param.signingTime.size() > 0">
+                and DATE_FORMAT(io.signing_time,'%Y-%m-%d') between #{param.signingTime[0]} AND #{param.signingTime[1]}
+            </if>
             <if test="param.orderNo != null and param.orderNo != ''">
                 and ifa.order_no = #{param.orderNo}
             </if>

+ 9 - 3
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/build/ZhongAnCrawlerQuoteResultsVoBuild.java

@@ -75,7 +75,15 @@ public class ZhongAnCrawlerQuoteResultsVoBuild {
                 .collect(Collectors.toMap(ZhongAnCrawlerQuoteResponse.ValueDTO.DataDTO.VehiclePremiumDTO.VehicleCoverageListDTO::getProductId, x -> x));
         kindInfoVoList.forEach(kind -> {
             ZhongAnCrawlerQuoteResponse.ValueDTO.DataDTO.VehiclePremiumDTO.VehicleCoverageListDTO coverageDTO = collect.get(kind.getKindCode());
-            if (coverageDTO.getProductId().equals(kind.getKindCode())) {
+            // 众安两个特约默认携带
+            if (coverageDTO == null && kind.getKindCode().equals("1510031008")) {
+                kind.setAmount("2");
+                kind.setPremium("0");
+            }
+            if (coverageDTO == null && kind.getKindCode().equals("1510052333")) {
+                kind.setAmount("2");
+                kind.setPremium("0");
+            } else if (coverageDTO != null && coverageDTO.getProductId().equals(kind.getKindCode())) {
                 kind.setAmount(coverageDTO.getAmount());//设置保额
                 kind.setPremium(String.valueOf(coverageDTO.getTotalCoveragePremium()));//设置保费
                 // 服务次数
@@ -83,8 +91,6 @@ public class ZhongAnCrawlerQuoteResultsVoBuild {
                     kind.setServiceTimes(coverageDTO.getDutyAttributeValue());
                     kind.setDeductibleRate(coverageDTO.getDutyAttributeValue());
                 }
-//                kind.setUnitAmount(String.valueOf(coverageDTO.getUnitAmount()));//设置每座保额
-//                kind.setQuantity(String.valueOf(coverageDTO.ge()));//设置份数
             }
         });
         return kindInfoVoList;

+ 2 - 2
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerRequestComponent.java

@@ -273,8 +273,8 @@ public class ZhongAnCrawlerRequestComponent {
 
     public String markCompleted(ZhongAnCrawlerMarkRequest markRequest, HttpHeaders headers) {
         InsuranceLog.infoLog(InsuranceEnum.ZAPA.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
-                "众安爬虫影像提交接口",RequestUrl.MARK_COMPLETED.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), JSON.toJSONString(markRequest));
-        return requestComponent.formDataString(RequestUrl.MARK_COMPLETED.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), markRequest, headers,"影像提交");
+                "众安爬虫核保提交",RequestUrl.MARK_COMPLETED.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), JSON.toJSONString(markRequest));
+        return requestComponent.formDataString(RequestUrl.MARK_COMPLETED.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), markRequest, headers,"核保提交");
     }
 
     public ZhongAnCrawlerPolicyListResponse policyList(ZhongAnCrawlerPolicyListRequest policyListRequest, HttpHeaders headers) {

+ 1 - 3
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerApplyAccommodationRequest.java

@@ -58,7 +58,7 @@ public class ZhongAnCrawlerApplyAccommodationRequest {
     @JsonProperty("flag")
     private String flag;
 
-    public ZhongAnCrawlerApplyAccommodationRequest(Long id, String quoteId, String identityNo, String orderNo, ZhongAnCrawlerConfigureParameters parameters) {
+    public ZhongAnCrawlerApplyAccommodationRequest(Long id, String quoteId, String identityNo, String orderNo, Map<String, String> fileMap,ZhongAnCrawlerConfigureParameters parameters) {
         this.id = id;
         this.quoteId = quoteId;
         this.phoneNo = "";
@@ -66,8 +66,6 @@ public class ZhongAnCrawlerApplyAccommodationRequest {
         this.auditStatus = "1";
         this.identityNo = identityNo;
         this.orderNo = orderNo;
-        Map<String, String> fileMap = new HashMap<>();
-        fileMap.put("version","2");
         this.fileMap = fileMap;
         this.location = "";
         this.flowId = parameters.getFlowId();

+ 31 - 7
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/service/Impl/ZhongAnCrawlerRequestImpl.java

@@ -424,18 +424,29 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
         ZhongAnCrawlerQueryAccommodationRequest queryAccommodationRequest = new ZhongAnCrawlerQueryAccommodationRequest(zhongAnCrawlerOrder.getQuoteId(), parameters);
         ZhongAnCrawlerQueryAccommodationResponse queryAccommodationResponse = zhongAnCrawlerRequestComponent.queryAccommodation(queryAccommodationRequest, headers);
         boolean queryAccommodation = queryAccommodationResponse.getSuccess();
+        Map<String, String> fileMap = new HashMap<>();
         for (InsuranceImageVo insuranceImageVo : insuranceUploadImageVo.getImageVoList()) {
             //C01行驶证正面,C02车主身份证正面,D01行驶证反面 D02 车主身份证反面
             switch (insuranceImageVo.getImageCode()) {
                 case "C01" -> {
                     String imageType = "6";
                     InsuranceImageVo.ImageDTO imageDTO = insuranceImageVo.getImageBase64List().get(0);
-                    extracted(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                    if (!queryAccommodation) {
+                        extracted(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                    } else {
+                       ZhongAnCrawlerAccommodationUploadResponse accommodationUpload = accommodationUpload(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                        fileMap.put("6", accommodationUpload.getValue().getDatas().getAttachment());
+                    }
                 }
                 case "C02" -> {
                     String imageType = "4";
                     InsuranceImageVo.ImageDTO imageDTO = insuranceImageVo.getImageBase64List().get(0);
-                    extracted(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                    if (!queryAccommodation) {
+                        extracted(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                    } else {
+                       ZhongAnCrawlerAccommodationUploadResponse accommodationUploadResponse = accommodationUpload(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                       fileMap.put("4", accommodationUploadResponse.getValue().getDatas().getAttachment());
+                    }
                 }
                 case "D01" -> {
                     String imageType = "7";
@@ -443,7 +454,8 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
                     if (!queryAccommodation) {
                         extracted(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
                     } else {
-                        accommodationUpload(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                        ZhongAnCrawlerAccommodationUploadResponse accommodationUploadResponse = accommodationUpload(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                        fileMap.put("7", accommodationUploadResponse.getValue().getDatas().getAttachment());
                     }
                 }
                 case "D02" -> {
@@ -452,7 +464,8 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
                     if (!queryAccommodation) {
                         extracted(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
                     } else {
-                        accommodationUpload(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                        ZhongAnCrawlerAccommodationUploadResponse accommodationUploadResponse = accommodationUpload(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                        fileMap.put("3", accommodationUploadResponse.getValue().getDatas().getAttachment());
                     }
 
                 }
@@ -460,11 +473,21 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
                     String imageType = "99";
                     List<InsuranceImageVo.ImageDTO> imageBase64List = insuranceImageVo.getImageBase64List();
                     for (InsuranceImageVo.ImageDTO imageDTO : imageBase64List) {
-                        accommodationUpload(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                        ZhongAnCrawlerAccommodationUploadResponse accommodationUploadResponse = accommodationUpload(parameters, headers, zhongAnCrawlerOrder, imageType, imageDTO);
+                        fileMap.put("99", accommodationUploadResponse.getValue().getDatas().getAttachment());
                     }
                 }
             }
-
+        }
+        if (queryAccommodation) {
+            fileMap.put("version","2");
+            Long id = queryAccommodationResponse.getValue().getDatas().getAccommodation().getId();
+            String identityNo = queryAccommodationResponse.getValue().getDatas().getAccommodation().getIdentityNo();
+            ZhongAnCrawlerApplyAccommodationRequest applyAccommodationRequest = new ZhongAnCrawlerApplyAccommodationRequest(id, zhongAnCrawlerOrder.getQuoteId(), identityNo, zhongAnCrawlerOrder.getOrderNo(), fileMap, parameters);
+            ZhongAnCrawlerApplyAccommodationResponse applyAccommodationResponse = zhongAnCrawlerRequestComponent.applyAccommodation(applyAccommodationRequest, headers);
+            if (applyAccommodationResponse.getSuccess()) {
+                log.info("通融提交成功");
+            }
         }
     }
 
@@ -494,12 +517,13 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
         }
     }
 
-    private void accommodationUpload (ZhongAnCrawlerConfigureParameters parameters, HttpHeaders headers, ZhongAnCrawlerOrder zhongAnCrawlerOrder, String imageType, InsuranceImageVo.ImageDTO imageDTO) {
+    private ZhongAnCrawlerAccommodationUploadResponse accommodationUpload (ZhongAnCrawlerConfigureParameters parameters, HttpHeaders headers, ZhongAnCrawlerOrder zhongAnCrawlerOrder, String imageType, InsuranceImageVo.ImageDTO imageDTO) {
         ZhongAnCrawlerAccommodationUploadRequest accommodationUploadRequest = new ZhongAnCrawlerAccommodationUploadRequest(imageType, imageDTO, zhongAnCrawlerOrder.getOrderNo(), parameters);
         ZhongAnCrawlerAccommodationUploadResponse accommodationUploadResponse = zhongAnCrawlerRequestComponent.accommodationUpload(accommodationUploadRequest, headers);
         if (accommodationUploadResponse.getSuccess()) {
             log.info("影像" + imageType + ":上传成功");
         }
+        return accommodationUploadResponse;
     }
 
     public byte[] convert(String filePath) throws IOException {

+ 3 - 2
tenant/organization/src/main/java/com/jzg/organization/client/InsOrdersClient.java

@@ -2,6 +2,7 @@ package com.jzg.organization.client;
 
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.finance.vo.BatchModifyVo;
+import com.jzg.commons.entity.finance.vo.UpdateCompanyBatchVo;
 import com.jzg.commons.entity.orders.po.InsOrders;
 import com.jzg.commons.entity.orders.po.InsOrdersCarInfo;
 import com.jzg.commons.entity.orders.po.InsOrdersTrack;
@@ -77,11 +78,11 @@ public interface InsOrdersClient {
     /**
      * 根据订单号批量修改ins_orders和ins_order_adjust的保司信息
      *
-     * @param batchModifyVo 批量修改参数,包含orderNos和companyIds
+     * @param updateCompanyBatchVo 批量修改参数,包含orderNos和companyIds
      * @author jk
      * @date 2026/8/5
      */
     @PostMapping("/supplementOrder/updateCompanyBatch")
     @Operation(summary = "批量修改订单和批改表的保司信息")
-    HttpResult<String> updateCompanyBatch(@RequestBody BatchModifyVo batchModifyVo);
+    HttpResult<String> updateCompanyBatch(@RequestBody UpdateCompanyBatchVo updateCompanyBatchVo);
 }

+ 13 - 0
tenant/organization/src/main/java/com/jzg/organization/controller/AmountAuditingController.java

@@ -150,6 +150,19 @@ public class AmountAuditingController extends BaseController {
         return HttpResult.ok(b.toString());
     }
 
+    /**
+     * 修改付款账号
+     *
+     * @param param 参数
+     * @author lipf
+     * @date 2026/8/11 15:13
+     */
+    @Operation(summary = "修改付款账号")
+    @PostMapping("/updatePayAccountInfo")
+    public HttpResult<String> updatePayAccountInfo(@RequestBody UpdatePayAccountParam param){
+        return sysAmountAuditingService.updatePayAccountInfo(param);
+    }
+
     /**
      * 业务员提交提现申请
      *

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

@@ -120,8 +120,8 @@ public class PtlAgreementCostController {
     @PostMapping("copyCost")
     public HttpResult copyCost(@RequestBody PtlAgreementCostCopyParam costCopyParam){
         try{
-            List<String> newCostIds = ptlAgreementCostService.costCopy(costCopyParam);
-            return HttpResult.ok(newCostIds);
+             return ptlAgreementCostService.costCopy(costCopyParam);
+
         }catch (Exception e){
             return HttpResult.error("复制费用异常:"+e.getMessage());
         }

+ 8 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/SysAmountAuditingMapper.java

@@ -78,6 +78,14 @@ public interface SysAmountAuditingMapper extends BaseMapper<SysAmountAuditing> {
      * @date 2026/7/20 15:46
      */
     List<IncomeAndExpenseList> getIncomeAndExpense(IncomeAndExpenseParam param);
+
+    /**
+     *
+     * @author lipf
+     * @date 2026/8/11 15:24
+     */
+    void updatePayAccountInfo(@Param("amountAuditingId") String amountAuditingId,
+                              @Param("payAccountId") String payAccountId);
 }
 
 

+ 69 - 15
tenant/organization/src/main/java/com/jzg/organization/mapper/SysUserAccountIncomeLogMapper.java

@@ -21,21 +21,75 @@ public interface SysUserAccountIncomeLogMapper extends BaseMapper<SysUserAccount
      * @date 2026/6/8 17:25
      */
     @Select("""
-        select
-            ioci.license_no ,
-            io.signing_time  as signTime,
-            saa.auditing_time as payTime,
-            a.*
-        from
-            sys_user_account_change_log a
-        left join ins_orders_car_info ioci on
-            a.related_order_id = ioci.order_no
-        left join ins_orders io
-            on a.related_order_id = io.id
-        left join sys_amount_auditing saa
-            on saa.id = a.related_amount_auditing_id
+        
+            select * from(
+        	SELECT
+        		a.system_code ,
+        		ioci.license_no,
+        		io.signing_time AS signTime,
+        		saa.auditing_time AS payTime,
+        		a.user_id,
+        		a.jzg_info_id,
+        		a.user_name,
+        		a.amount,
+        		a.amount_before,
+        		a.amount_after,
+        		a.oper_type,
+        		a.related_order_id,
+        		a.bank_card_id_to,
+        		a.bank_card_no_to,
+        		a.bank_card_id_in,
+        		a.bank_card_no_in,
+        		a.is_delete,
+        		a.create_time,
+        		a.remark,
+        		a.related_amount_auditing_id,
+        		a.status
+        	FROM
+        		sys_user_account_change_log a
+        	LEFT JOIN ins_orders_car_info ioci ON
+        		a.related_order_id = ioci.order_no
+        	LEFT JOIN ins_orders io ON
+        		a.related_order_id = io.id
+        	LEFT JOIN sys_amount_auditing saa
+        	ON
+        		saa.id = a.related_amount_auditing_id
+        		AND saa.system_code = 'G111'
+        union ALL
+        	select
+        		saa.system_code ,
+        		null as license_no,
+        		null as signTime,
+        		null as payTime,
+        		saa.user_id,
+        		null as zg_info_id,
+        		su.username as user_name,
+        		saa.amount,
+        		(saa.amount + saa.balance_amount) as amount_before,
+        		saa.balance_amount as amount_after,
+        		5 as oper_type,
+        		null as related_order_id,
+        		null as bank_card_id_to,
+        		null as bank_card_no_to,
+        		null as bank_card_id_in,
+        		null as bank_card_no_in,
+        		null as is_delete,
+        		saa.create_time,
+        		'提现中' as remark,
+        		null as related_amount_auditing_id,
+        		10 as status
+        	from
+        		sys_amount_auditing saa
+        	    left join sys_user su on saa.user_id = su.id
+        	where
+        		saa.auditing_status = 0
+        ) mm
         where
-            a.user_id = #{ywyUserId} and a.create_time >= #{beginDate} and a.create_time < #{endDate} and a.is_delete = 0 and a.status = 10 order by a.create_time desc
+        	mm.user_id =  #{ywyUserId}
+        	and mm.create_time >= #{beginDate} and mm.create_time < #{endDate} 
+        	AND mm.system_code = #{systemCode}
+        order by
+        	mm.create_time desc
         """)
-    List<SysUserAccountChangeLog> queryYwyIORecs(String ywyUserId, LocalDate beginDate, LocalDate endDate);
+    List<SysUserAccountChangeLog> queryYwyIORecs(String systemCode, String ywyUserId, LocalDate beginDate, LocalDate endDate);
 }

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

@@ -62,7 +62,7 @@ public interface PtlAgreementCostService extends IService<PtlAgreementCost> {
     /**
      * 复制费用
      */
-    List<String> costCopy(PtlAgreementCostCopyParam costCopyParam);
+    HttpResult costCopy(PtlAgreementCostCopyParam costCopyParam);
 
     /**
      * 批量修改协议费用有效期

+ 9 - 0
tenant/organization/src/main/java/com/jzg/organization/service/SysAmountAuditingService.java

@@ -119,4 +119,13 @@ public interface SysAmountAuditingService extends IService<SysAmountAuditing> {
      * @date 2026/7/20 15:40
      */
     List<IncomeAndExpenseList> getIncomeAndExpense(IncomeAndExpenseParam param);
+
+    /**
+     * 修改付款账号
+     *
+     * @param param 付款账号的序号
+     * @author lipf
+     * @date 2026/8/11 15:17
+     */
+    HttpResult<String> updatePayAccountInfo(UpdatePayAccountParam param);
 }

+ 9 - 0
tenant/organization/src/main/java/com/jzg/organization/service/SysUserAccountIncomeLogService.java

@@ -1,6 +1,7 @@
 package com.jzg.organization.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.account.po.SysUserAccountChangeLog;
 import com.jzg.commons.entity.dto.YwyIOParam;
 
@@ -22,4 +23,12 @@ public interface SysUserAccountIncomeLogService extends IService<SysUserAccountC
      * @date 2026/6/8 17:25
      */
     List<SysUserAccountChangeLog> queryYwyIORecs(YwyIOParam ywyIOParam);
+
+    /**
+     * 更新记录的付款账号
+     *
+     * @author lipf
+     * @date 2026/8/11 15:37
+     */
+    HttpResult<String> updatePayAccountInfo(SysUserAccountChangeLog changeLog);
 }

+ 63 - 53
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementCostServiceImpl.java

@@ -393,66 +393,76 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
 
     @GlobalTransactional
     @Override
-    public List<String> costCopy(PtlAgreementCostCopyParam costCopyParam) {
+    public HttpResult costCopy(PtlAgreementCostCopyParam costCopyParam) {
         List<String> newCostId = new ArrayList<>();
         List<String> costIds = costCopyParam.getCostIds();
+        StringBuilder errMsg = new StringBuilder();
         costIds.forEach(oldCostId-> {
             PtlAgreementCost ptlAgreementCost = ptlAgreementCostMapper.selectById(oldCostId);
-            List<PtlAgreementCostType> ptlAgreementCostTypes = ptlAgreementCostTypeMapper.selectList(new LambdaQueryWrapper<PtlAgreementCostType>()
-                    .eq(PtlAgreementCostType::getPtlAgreementCostId, ptlAgreementCost.getId()));
-            List<PtlAgreementCostRule> ptlAgreementCostRules = ptlAgreementCostRuleMapper.selectList(new LambdaQueryWrapper<PtlAgreementCostRule>()
-                    .eq(PtlAgreementCostRule::getPtlAgreementCostId, ptlAgreementCost.getId()));
-
-            // 调整数据 进行copy
-            String costId = IdGenerate.nextId();
-            ptlAgreementCost.setId(costId);
-            ptlAgreementCost.setCoverRuleId(costCopyParam.getCoverRuleId());
-            ptlAgreementCost.setPtlAgreementId(costCopyParam.getAgreementId());
-            ptlAgreementCost.setCostDescribe("复制的费用:" + ptlAgreementCost.getCostDescribe());
-            ptlAgreementCost.setCreateTime(LocalDateTime.now());
-            ptlAgreementCost.setUpdateTime(LocalDateTime.now());
-            ptlAgreementCost.setProductId(costCopyParam.getProductId());
-            ptlAgreementCost.setProductName(costCopyParam.getProductName());
-            // 复制的费用为待审核
-            ptlAgreementCost.setApproved(0);
-
-
-            List<PtlAgreementCostType> newPtlAgreementCostTypes = ptlAgreementCostTypes.stream()
-                    .filter(item -> {
-                        String productId = costCopyParam.getProductId();
-                        // 单交剔除 CostType = 商业险
-                        if ("0330".equals(productId)) {
-                            return !"商业险".equals(item.getCostType());
-                        }
-                        // 单商剔除 CostType = 交强险
-                        if ("034001".equals(productId)) {
-                            return !"交强险".equals(item.getCostType());
-                        }
-                        // 单三剔除 CostType = 交强险
-                        if ("034002".equals(productId)) {
-                            return !"交强险".equals(item.getCostType());
-                        }
-                        return true;
-                    })
-                    .peek(item -> {
-                        // 给留存的元素赋值字段
-                        item.setId(IdGenerate.nextId());
-                        item.setPtlAgreementCostId(costId);
-                    })
-                    .collect(Collectors.toList());
-
-            ptlAgreementCostRules.forEach(item->{
-                item.setId(IdGenerate.nextId());
-                item.setPtlAgreementCostId(costId);
-            });
+            if(ptlAgreementCost != null){
+                List<PtlAgreementCostType> ptlAgreementCostTypes = ptlAgreementCostTypeMapper.selectList(new LambdaQueryWrapper<PtlAgreementCostType>()
+                        .eq(PtlAgreementCostType::getPtlAgreementCostId, ptlAgreementCost.getId()));
+                List<PtlAgreementCostRule> ptlAgreementCostRules = ptlAgreementCostRuleMapper.selectList(new LambdaQueryWrapper<PtlAgreementCostRule>()
+                        .eq(PtlAgreementCostRule::getPtlAgreementCostId, ptlAgreementCost.getId()));
+
+                // 调整数据 进行copy
+                String costId = IdGenerate.nextId();
+                ptlAgreementCost.setId(costId);
+                ptlAgreementCost.setCoverRuleId(costCopyParam.getCoverRuleId());
+                ptlAgreementCost.setPtlAgreementId(costCopyParam.getAgreementId());
+                ptlAgreementCost.setCostDescribe("复制的费用:" + ptlAgreementCost.getCostDescribe());
+                ptlAgreementCost.setCreateTime(LocalDateTime.now());
+                ptlAgreementCost.setUpdateTime(LocalDateTime.now());
+                if(costCopyParam.getProductId() != null && !costCopyParam.getProductId().isEmpty()){
+                    ptlAgreementCost.setProductId(costCopyParam.getProductId());
+                }
+                if(costCopyParam.getProductName() != null && !costCopyParam.getProductName().isEmpty()){
+                    ptlAgreementCost.setProductName(costCopyParam.getProductName());
+                }
+
+                // 复制的费用为待审核
+                ptlAgreementCost.setApproved(0);
+                List<PtlAgreementCostType> newPtlAgreementCostTypes = ptlAgreementCostTypes.stream()
+                        .filter(item -> {
+                            String productId = costCopyParam.getProductId();
+                            // 单交剔除 CostType = 商业险
+                            if ("0330".equals(productId)) {
+                                return !"商业险".equals(item.getCostType());
+                            }
+                            // 单商剔除 CostType = 交强险
+                            if ("034001".equals(productId)) {
+                                return !"交强险".equals(item.getCostType());
+                            }
+                            // 单三剔除 CostType = 交强险
+                            if ("034002".equals(productId)) {
+                                return !"交强险".equals(item.getCostType());
+                            }
+                            return true;
+                        })
+                        .peek(item -> {
+                            // 给留存的元素赋值字段
+                            item.setId(IdGenerate.nextId());
+                            item.setPtlAgreementCostId(costId);
+                        })
+                        .collect(Collectors.toList());
+
+                ptlAgreementCostRules.forEach(item->{
+                    item.setId(IdGenerate.nextId());
+                    item.setPtlAgreementCostId(costId);
+                });
+
+                ptlAgreementCostMapper.insert(ptlAgreementCost);
+                ptlAgreementCostTypeMapper.insert(newPtlAgreementCostTypes);
+                ptlAgreementCostRuleMapper.insert(ptlAgreementCostRules);
+                newCostId.add(ptlAgreementCost.getId());
+
+            }else{
+                errMsg.append("costId为"+oldCostId+"的费用信息已被删除");
+            }
 
-            ptlAgreementCostMapper.insert(ptlAgreementCost);
-            ptlAgreementCostTypeMapper.insert(newPtlAgreementCostTypes);
-            ptlAgreementCostRuleMapper.insert(ptlAgreementCostRules);
-            newCostId.add(ptlAgreementCost.getId());
 
         });
-        return newCostId;
+        return HttpResult.ok(errMsg.toString(),newCostId);
     }
 
     @Override

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

@@ -21,6 +21,7 @@ import com.jzg.commons.entity.agreement.dispatch.vo.ValidateDispatchRuleVo;
 import com.jzg.commons.entity.agreement.po.PtlAgreementAttribution;
 import com.jzg.commons.entity.costs.vo.ValidateSchemeRuleVo;
 import com.jzg.commons.entity.po.*;
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
 import com.jzg.commons.entity.quote.vo.SalespersonInfoVo;
 import com.jzg.commons.entity.scheme.po.*;
@@ -419,6 +420,8 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
      */
     @Override
     public List<PtlAgreementInsCompanyVo> ruleFilterCompany(SchemeRuleFilterVo schemeRuleFilterVo) {
+        // 参数过滤
+        schemeRuleFilterValidateParam(schemeRuleFilterVo);
         String userSystemCode = baseController.getUserSystemCode();
         String systemCode = baseController.getSystemCode();
         log.info("租户匹配保司以及保司下的协议等信息。 schemeRuleFilterVo=[{}],userSystemCode=[{}],systemCode=[{}]", JSONUtil.toJsonStr(schemeRuleFilterVo), userSystemCode, systemCode);
@@ -605,6 +608,20 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
         }
         return resVo;
     }
+    /**
+     *  报价公司过滤入参统一校验
+     * @param schemeRuleFilterVo 请求参数
+     */
+    private void schemeRuleFilterValidateParam(SchemeRuleFilterVo schemeRuleFilterVo) {
+        AssertionUtils.isEmpty(schemeRuleFilterVo, "查询保司过滤规则:入参schemeRuleFilterVo不能为空");
+        AssertionUtils.isEmpty(schemeRuleFilterVo.getProductId(), "产品ID productId不能为空");
+        CarInfoVo carInfo = schemeRuleFilterVo.getCarInfo();
+        AssertionUtils.isEmpty(carInfo, "车辆信息carInfo不能为空");
+        AssertionUtils.isEmpty(carInfo.getEnergyTypeCode(), "车辆能源类型energyTypeCode不能为空");
+        AssertionUtils.isEmpty(carInfo.getCarNatureCode(), "车辆使用性质carNatureCode不能为空");
+        AssertionUtils.isEmpty(carInfo.getCarKindCode(), "车辆种类carKindCode不能为空");
+    }
+
 
     @Override
     public SchemeResultVo getSchemeResult(String companyId, String productId, String seatCount,String energyType,String vehicleType,String carnature) {

+ 5 - 3
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -861,7 +861,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                             || invoiceType.equals(income.getInvoiceType()))
                     .collect(Collectors.toCollection(ArrayList::new));
             List<InsPlyIncomeDto> copyList = CollUtil.newArrayList();
-            if (CollUtil.isNotEmpty(incomeDtoList)){
+            if (CollUtil.isNotEmpty(incomeDtoList) && InvoiceTypeEnum.FEE_2.getCode().equals(invoiceType)){
                 // 如果有发票类型为4的,则复制一条4的数据,完全一致,但发票类型为2
                 incomeDtoList.stream().filter(item -> InvoiceTypeEnum.FEE_4.getCode().equals(item.getInvoiceType())).forEach(item -> {
                     InsPlyIncomeDto incomeDto = new InsPlyIncomeDto();
@@ -3995,13 +3995,15 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                     .set(InsPlyIncome::getPartnerCompanyId, newPartnerCompanyId)
                     .set(InsPlyIncome::getAgreementId, updateAgreementId)
                     .set(InsPlyIncome::getAgreementName, agreementVo.getAgreementName())
+                    .set(InsPlyIncome::getContactPerson, agreementVo.getDockingPerson())
+                    .set(InsPlyIncome::getContactPersonPhone, agreementVo.getDockingPhone())
                     .in(InsPlyIncome::getId, updateIncomeIds);
             baseMapper.update(null, incomeUpdateWrapper);
             log.info("修改ins_ply_income保司信息完成,未对账数据条数: {}", updateIncomeIds.size());
 
             // 2. 修改ins_orders和ins_order_adjust表(通过feignClient调用quotation-summary服务)
-            batchModifyVo.setCompanyIds(CollUtil.newArrayList(newCompanyId));
-            HttpResult<String> updateCompanyRes = insOrdersClient.updateCompanyBatch(batchModifyVo);
+            UpdateCompanyBatchVo updateCompanyBatchVo = UpdateCompanyBatchVo.builder().batchModifyVo(batchModifyVo).agreementVo(agreementVo).build();
+            HttpResult<String> updateCompanyRes = insOrdersClient.updateCompanyBatch(updateCompanyBatchVo);
             log.info("修改ins_orders和ins_order_adjust保司信息的结果:updateCompanyRes=[{}]", JSONUtil.toJsonStr(updateCompanyRes));
         }
 

+ 47 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysAmountAuditingServiceImpl.java

@@ -12,6 +12,7 @@ import com.jzg.commons.core.base.StateResult;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.account.po.InvAccountCard;
 import com.jzg.commons.entity.account.po.SysUserAccountChangeLog;
+import com.jzg.commons.entity.account.vo.AccountCardVo;
 import com.jzg.commons.entity.dto.*;
 import com.jzg.commons.entity.po.SysAmountAuditing;
 import com.jzg.commons.entity.po.SysUserAccount;
@@ -358,13 +359,16 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
      */
     private void saveChangeLog(SysAmountAuditing audit, AmountAuditRejectParam param, String systemCode) {
         log.info("提现申请不通过的时候,向changeLog表中插入一条状态为90的数据。audit=[{}],param=[{}]", JSONUtil.toJsonStr(audit), JSONUtil.toJsonStr(param));
+        String userName = baseController.getUserName();
         SysUserAccountChangeLog log = new SysUserAccountChangeLog();
         log.setRelatedAmountAuditingId(audit.getId());
         log.setStatus("90");
+        log.setAmountBefore(BigDecimalUtil.add(audit.getAmount(), audit.getBalanceAmount()));
         log.setAmount(BigDecimalUtil.negate(BigDecimalUtil.abs(audit.getAmount())));
         log.setRemark("提现驳回");
         log.setSystemCode(audit.getSystemCode());
         log.setUserId(audit.getUserId());
+        log.setUserName(userName);
         log.setOperType(4);
         log.setIsDelete(1);
         SysAmountAuditing sysAmountAuditing = baseMapper.selectById(param.getId());
@@ -536,6 +540,49 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
         log.info("查询收支明细queryIncomeANdExpense:param=[{}],incomeAndExpenseLists.size()=[{}]",JSONUtil.toJsonStr(param), CollUtil.size(incomeAndExpenseLists));
         return incomeAndExpenseLists;
     }
+
+    /**
+     * 修改付款账号
+     *
+     * @param param 付款账号的序号
+     * @author lipf
+     * @date 2026/8/11 15:17
+     */
+    @Override
+    public HttpResult<String> updatePayAccountInfo(UpdatePayAccountParam param) {
+        log.info("修改付款账号。 param=[{}]", JSONUtil.toJsonStr(param));
+        HttpResult<String> validateRes = this.validatePayAccountParam(param);
+        if(validateRes.isFail()){
+            log.info("修改付款账号异常。 validateRes=[{}]", JSONUtil.toJsonStr(validateRes));
+            return validateRes;
+        }
+        baseMapper.updatePayAccountInfo(param.getAmountAuditingId(), param.getPayAccountId());
+        SysUserAccountChangeLog changeLog = new SysUserAccountChangeLog();
+        AccountCardVo accountCardVo = invAccountCardService.queryById(param.getPayAccountId());
+        changeLog.setRelatedAmountAuditingId(param.getAmountAuditingId());
+        changeLog.setBankCardNoTo(accountCardVo.getBankCardNum());
+        changeLog.setBankCardIdTo(param.getPayAccountId());
+        sysUserAccountIncomeLogService.updatePayAccountInfo(changeLog);
+        return HttpResult.ok("更新完成");
+    }
+
+    /**
+     * 校验参数
+     *
+     * @author lipf
+     * @date 2026/8/11 15:51
+     */
+    private HttpResult<String> validatePayAccountParam(UpdatePayAccountParam param) {
+        SysAmountAuditing sysAmountAuditing = baseMapper.selectById(param.getAmountAuditingId());
+        if(sysAmountAuditing == null){
+            return HttpResult.error("要修改的记录不存在");
+        }
+        AccountCardVo accountCardVo = invAccountCardService.queryById(param.getPayAccountId());
+        if(accountCardVo == null){
+            return HttpResult.error("付款账号不存在");
+        }
+        return HttpResult.ok();
+    }
 }
 
 

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

@@ -2,13 +2,17 @@ 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.core.base.BaseController;
+import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.account.po.SysUserAccountChangeLog;
 import com.jzg.commons.entity.dto.YwyIOParam;
 import com.jzg.organization.mapper.*;
 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 java.time.LocalDate;
@@ -23,6 +27,10 @@ public class SysUserAccountIncomeLogServiceImpl extends ServiceImpl<SysUserAccou
 
     private static final Logger log = LoggerFactory.getLogger(SysUserAccountIncomeLogServiceImpl.class);
 
+    @Autowired
+    private BaseController baseController;
+
+
     /**
      * 查询业务员收支明细
      *
@@ -37,10 +45,37 @@ public class SysUserAccountIncomeLogServiceImpl extends ServiceImpl<SysUserAccou
         if(endDate != null){
             ywyIOParam.setEndDate(endDate.plusDays(1));
         }
-        List<SysUserAccountChangeLog> changeLogs =  baseMapper.queryYwyIORecs(ywyIOParam.getYwyUserId(), ywyIOParam.getBeginDate(), ywyIOParam.getEndDate());
+        String systemCode = baseController.getSystemCode();
+        List<SysUserAccountChangeLog> changeLogs =  baseMapper.queryYwyIORecs(systemCode, ywyIOParam.getYwyUserId(), ywyIOParam.getBeginDate(), ywyIOParam.getEndDate());
         log.info("查询业务员收支明细:ywyIOParam=[{}]。 查询出[{}]条记录", JSONUtil.toJsonStr(ywyIOParam), CollUtil.size(changeLogs));
         return changeLogs;
     }
+
+    /**
+     * 更新记录的付款账号
+     *
+     * @param changeLog
+     * @author lipf
+     * @date 2026/8/11 15:37
+     */
+    @Override
+    public HttpResult<String> updatePayAccountInfo(SysUserAccountChangeLog changeLog) {
+        LambdaQueryWrapper<SysUserAccountChangeLog> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SysUserAccountChangeLog::getRelatedAmountAuditingId, changeLog.getRelatedAmountAuditingId());
+        List<SysUserAccountChangeLog> changeLogs = baseMapper.selectList(queryWrapper);
+        if(CollUtil.isEmpty(changeLogs)){
+            String errMsg = String.format("未找到关联费用审核序号为[%s]的记录", changeLog.getRelatedAmountAuditingId());
+            log.error(errMsg);
+            return HttpResult.error(errMsg);
+        }
+        SysUserAccountChangeLog res = new  SysUserAccountChangeLog();
+        res.setBankCardIdTo(changeLog.getBankCardIdTo());
+        res.setBankCardNoTo(changeLog.getBankCardNoTo());
+        res.setId(changeLogs.get(0).getId());
+        res.setOperType(changeLog.getOperType());
+        baseMapper.updateById(res);
+        return HttpResult.ok();
+    }
 }
 
 

+ 161 - 80
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserAccountServiceImpl.java

@@ -18,6 +18,7 @@ import com.jzg.organization.mapper.SysAmountAuditingMapper;
 import com.jzg.organization.mapper.SysUserAccountIncomeLogMapper;
 import com.jzg.organization.mapper.SysUserAccountMapper;
 import com.jzg.organization.service.*;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -25,9 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.YearMonth;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.function.Function;
@@ -279,84 +278,17 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
      */
     @Override
     public List<IncomeAndExpenseVo> getIncomeAndExpense(IncomeAndExpenseParam param){
-
         log.info("查询收支明细记录:param=[{}]", JSONUtil.toJsonStr(param));
         String key = this.populateParam(param);
-        //List<IncomeAndExpenseList> recordsWithOutParam = sysAmountAuditingService.getIncomeAndExpense(new IncomeAndExpenseParam(param.getUserId(),param.getSystemCode()));
         List<IncomeAndExpenseList> allRecords = sysAmountAuditingService.getIncomeAndExpense(param);
-        allRecords = allRecords.stream().peek(action->{
-            if("0".equals(action.getStatus())){
-                action.setRemark("提现审核中");
-            }
-            List<ChangeLogDetail> stepList = new ArrayList<>();
-            if("0".equals(action.getAuditingStatus())){
-                stepList.add(new ChangeLogDetail("提交提现申请",action.getCreateTime(),true, null));
-                stepList.add(new ChangeLogDetail("财务人员审核",null, null,null));
-                stepList.add(new ChangeLogDetail("财务人员打款", null, null, null));
-            }else if(StrUtil.isEmpty(action.getAuditingStatus())){
-                if("1".equals(action.getStatus())){
-                    if("1".equals(action.getIncomeAndExpense())){
-                        stepList.add(new ChangeLogDetail("提交提现申请",action.getCreateTime(),true, null));
-                        stepList.add(new ChangeLogDetail("财务人员审核",action.getPaymentTime(), true,null));
-                        stepList.add(new ChangeLogDetail("财务人员打款", action.getPaymentTime(), true, null));
-                    }
-                    if("0".equals(action.getIncomeAndExpense())){
-                        // 保费收入
-                        stepList.add(new ChangeLogDetail("费用审核通过",action.getCreateTime(),true, null));
-                        stepList.add(new ChangeLogDetail());
-                        stepList.add(new ChangeLogDetail());
-                    }
-                }else if("2".equals(action.getStatus())){
-                    stepList.add(new ChangeLogDetail("提交提现申请",action.getCreateTime(),true, null));
-                    stepList.add(new ChangeLogDetail("财务人员审核",action.getPaymentTime(), true,null));
-                    stepList.add(new ChangeLogDetail("财务审核不通过", action.getRejectTime(), false, null));
-                }
-            }
-            action.setStepList(stepList);
-
-        }).toList();
-        allRecords= new ArrayList<>(allRecords);
+        allRecords= new ArrayList<>(fillProcessDtls(allRecords));
         // 排序
         allRecords.sort((a, b) -> {
             if (a.getCreateTime() == null) return 1;
             if (b.getCreateTime() == null) return -1;
             return b.getCreateTime().compareTo(a.getCreateTime());
         });
-        // 按月份分组统计
-        Map<String, IncomeAndExpenseVo.IncomeAndExpense> monthSummaryMap = new TreeMap<>(Collections.reverseOrder());
-        if(CollUtil.isEmpty(allRecords)){
-            IncomeAndExpenseVo.IncomeAndExpense summary = monthSummaryMap.get(key);
-            summary = new IncomeAndExpenseVo.IncomeAndExpense();
-            summary.setMonth(key);
-            summary.setIncome(BigDecimal.ZERO);
-            summary.setExpense(BigDecimal.ZERO);
-            summary.setBalance(BigDecimal.ZERO);
-            monthSummaryMap.put(key, summary);
-        }
-        for (IncomeAndExpenseList record : allRecords) {
-            if (record.getCreateTime() == null) continue;
-            // 获取或创建月度汇总对象
-            IncomeAndExpenseVo.IncomeAndExpense summary = monthSummaryMap.get(key);
-            if (summary == null) {
-                summary = new IncomeAndExpenseVo.IncomeAndExpense();
-                summary.setMonth(key);
-                summary.setIncome(BigDecimal.ZERO);
-                summary.setExpense(BigDecimal.ZERO);
-                summary.setBalance(BigDecimal.ZERO);
-                monthSummaryMap.put(key, summary);
-            }
-            // 更新收入或支出
-            if ("0".equals(record.getIncomeAndExpense())) {
-                // 收入
-                summary.setIncome(BigDecimalUtil.add(summary.getIncome(),record.getAmount()));
-            } else if("1".equals(record.getIncomeAndExpense()) && !"2".equals(record.getStatus())){
-                // 支出, 并且不是审核驳回的数据
-                summary.setExpense(BigDecimalUtil.add(summary.getExpense(),record.getAmount()));
-            }
-            // 计算余额(收入 - 支出)
-            summary.setBalance(summary.getIncome().subtract(summary.getExpense()));
-        }
-
+        Map<String, IncomeAndExpenseVo.IncomeAndExpense> monthSummaryMap = this.calSummaryData(allRecords, key);
         // 如果指定了月份筛选,只返回该月的数据
         if (param.getMonth() != null && !param.getMonth().isEmpty()) {
             List<IncomeAndExpenseVo> result = new ArrayList<>();
@@ -364,11 +296,20 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
             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"))))
-                        .map(action->{
+                        .filter(action->{
+                            if(StrUtil.isNotEmpty(param.getStatus())){
+                                return param.getStatus().equals(action.getStatus());
+                            }
+                            return true;}
+                        ).filter(action->{
+                            if(StrUtil.isNotEmpty(param.getIncomeAndExpense())){
+                                return param.getIncomeAndExpense().equals(action.getIncomeAndExpense());
+                            }
+                            return true;
+                        }).map(action->{
                             IncomeAndExpenseVo.IncomeAndExpenseList a = new IncomeAndExpenseVo.IncomeAndExpenseList();
                             BeanUtils.copyProperties(action,a);
                             return a;
@@ -385,16 +326,42 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
         for (Map.Entry<String, IncomeAndExpenseVo.IncomeAndExpense> entry : monthSummaryMap.entrySet()) {
             IncomeAndExpenseVo vo = new IncomeAndExpenseVo();
             vo.setIncomeAndExpense(entry.getValue());
-
+            String rangeKey = entry.getKey();
             // 筛选当前月份的明细记录
             List<IncomeAndExpenseVo.IncomeAndExpenseList> monthRecords = allRecords.stream()
                     .filter(record -> {
-                        if(StrUtil.isEmpty(entry.getKey())){
+                        // 空key,返回所有记录
+                        if (StrUtil.isEmpty(rangeKey)) {
                             return true;
                         }
-                        return entry.getKey().equals(record.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM")));
+                        // 将毫秒时间戳转为LocalDateTime
+                        LocalDateTime createDateTime = record.getCreateTime();
+                        String dayStr = createDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+
+                        // 拆分时间区间标识
+                        if (rangeKey.contains("到")) {
+                            String[] arr = rangeKey.split("到");
+                            String startDay = arr[0];
+                            if(arr.length == 1 || StrUtil.isEmpty(arr[1])){
+                                return dayStr.equals(startDay);
+                            }else{
+                                String endDay = arr[1];
+                                return dayStr.compareTo(startDay) >= 0 && dayStr.compareTo(endDay) <= 0;
+                            }
+                        }
+                        return true;
                     })
-                    .map(action->{
+                    .filter(action->{
+                        if(StrUtil.isNotEmpty(param.getStatus())){
+                            return param.getStatus().equals(action.getStatus());
+                        }
+                        return true;}
+                    ).filter(action->{
+                        if(StrUtil.isNotEmpty(param.getIncomeAndExpense())){
+                            return param.getIncomeAndExpense().equals(action.getIncomeAndExpense());
+                        }
+                        return true;
+                    }).map(action->{
                         IncomeAndExpenseVo.IncomeAndExpenseList a = new IncomeAndExpenseVo.IncomeAndExpenseList();
                         BeanUtils.copyProperties(action,a);
                         return a;
@@ -406,6 +373,100 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
         return result;
     }
 
+    /**
+     * 计算汇总数据
+     *
+     * @author lipf
+     * @date 2026/8/11 14:43
+     */
+    @NotNull
+    private Map<String, IncomeAndExpenseVo.IncomeAndExpense> calSummaryData(List<IncomeAndExpenseList> allRecords, String key) {
+        // 按月份分组统计
+        Map<String, IncomeAndExpenseVo.IncomeAndExpense> monthSummaryMap = new TreeMap<>(Collections.reverseOrder());
+        if(CollUtil.isEmpty(allRecords)){
+            IncomeAndExpenseVo.IncomeAndExpense summary = this.initSummary(key);
+            monthSummaryMap.put(key, summary);
+        }
+        for (IncomeAndExpenseList record : allRecords) {
+            if (record.getCreateTime() == null) continue;
+            // 获取或创建月度汇总对象
+            IncomeAndExpenseVo.IncomeAndExpense summary = monthSummaryMap.get(key);
+            if (summary == null) {
+                summary = this.initSummary(key);
+                monthSummaryMap.put(key, summary);
+            }
+            // 更新收入或支出
+            if ("0".equals(record.getIncomeAndExpense())) {
+                // 收入
+                summary.setIncome(BigDecimalUtil.add(summary.getIncome(),record.getAmount()));
+            } else if("1".equals(record.getIncomeAndExpense()) && !"2".equals(record.getStatus())){
+                // 支出, 并且不是审核驳回的数据
+                summary.setExpense(BigDecimalUtil.add(summary.getExpense(),record.getAmount()));
+            }
+            // 计算余额(收入 - 支出)
+            summary.setBalance(summary.getIncome().subtract(summary.getExpense()));
+        }
+        return monthSummaryMap;
+    }
+
+    /**
+     * 初始化汇总数据
+     *
+     * @param key 月份
+     * @author lipf
+     * @date 2026/8/11 14:41
+     */
+    private  IncomeAndExpenseVo.IncomeAndExpense initSummary(String key) {
+        IncomeAndExpenseVo.IncomeAndExpense summary = new IncomeAndExpenseVo.IncomeAndExpense();
+        summary.setMonth(key);
+        summary.setIncome(BigDecimal.ZERO);
+        summary.setExpense(BigDecimal.ZERO);
+        summary.setBalance(BigDecimal.ZERO);
+        return summary;
+    }
+
+    /**
+     * 填充处理进度
+     *
+     * @param allRecords 要处理的数据
+     * @author lipf
+     * @date 2026/8/11 14:37
+     */
+    @NotNull
+    private static List<IncomeAndExpenseList> fillProcessDtls(List<IncomeAndExpenseList> allRecords) {
+        allRecords = allRecords.stream().peek(action->{
+            if("0".equals(action.getStatus())){
+                action.setRemark("提现审核中");
+            }
+            List<ChangeLogDetail> stepList = new ArrayList<>();
+            if("0".equals(action.getAuditingStatus())){
+                stepList.add(new ChangeLogDetail("提交提现申请",action.getCreateTime(),true, null));
+                stepList.add(new ChangeLogDetail("财务人员审核",null, null,null));
+                stepList.add(new ChangeLogDetail("财务人员打款", null, null, null));
+            }else if(StrUtil.isEmpty(action.getAuditingStatus())){
+                if("1".equals(action.getStatus())){
+                    if("1".equals(action.getIncomeAndExpense())){
+                        stepList.add(new ChangeLogDetail("提交提现申请",action.getCreateTime(),true, null));
+                        stepList.add(new ChangeLogDetail("财务人员审核",action.getPaymentTime(), true,null));
+                        stepList.add(new ChangeLogDetail("财务人员打款", action.getPaymentTime(), true, null));
+                    }
+                    if("0".equals(action.getIncomeAndExpense())){
+                        // 保费收入
+                        stepList.add(new ChangeLogDetail("费用审核通过",action.getCreateTime(),true, null));
+                        stepList.add(new ChangeLogDetail());
+                        stepList.add(new ChangeLogDetail());
+                    }
+                }else if("2".equals(action.getStatus())){
+                    stepList.add(new ChangeLogDetail("提交提现申请",action.getCreateTime(),true, null));
+                    stepList.add(new ChangeLogDetail("财务人员审核",action.getPaymentTime(), true,null));
+                    stepList.add(new ChangeLogDetail("财务审核不通过", action.getRejectTime(), false, null));
+                }
+            }
+            action.setStepList(stepList);
+        }).toList();
+        return allRecords;
+    }
+
     /**
      * 对查询参数进行预处理
      *
@@ -653,7 +714,17 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
                 
                 // 筛选当前月份的明细记录
                 List<IncomeAndExpenseVo.IncomeAndExpenseList> monthRecords = allRecords.stream()
-                        .filter(record -> param.getMonth().equals(record.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM"))))
+                        .filter(action->{
+                            if(StrUtil.isNotEmpty(param.getStatus())){
+                                return param.getStatus().equals(action.getStatus());
+                            }
+                            return true;}
+                        ).filter(action->{
+                            if(StrUtil.isNotEmpty(param.getIncomeAndExpense())){
+                                return param.getIncomeAndExpense().equals(action.getIncomeAndExpense());
+                            }
+                            return true;
+                        }).filter(record -> param.getMonth().equals(record.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM"))))
                         .collect(Collectors.toList());
                 vo.setIncomeAndExpenseList(monthRecords);
                 result.add(vo);
@@ -669,7 +740,17 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
 
             // 筛选当前月份的明细记录
             List<IncomeAndExpenseVo.IncomeAndExpenseList> monthRecords = allRecords.stream()
-                    .filter(record -> entry.getKey().equals(record.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM"))))
+                    .filter(action->{
+                        if(StrUtil.isNotEmpty(param.getStatus())){
+                            return param.getStatus().equals(action.getStatus());
+                        }
+                        return true;}
+                    ).filter(action->{
+                        if(StrUtil.isNotEmpty(param.getIncomeAndExpense())){
+                            return param.getIncomeAndExpense().equals(action.getIncomeAndExpense());
+                        }
+                        return true;
+                    }).filter(record -> entry.getKey().equals(record.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM"))))
                     .collect(Collectors.toList());
             vo.setIncomeAndExpenseList(monthRecords);
             result.add(vo);

+ 16 - 5
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserJzgInfoBankCardServiceImpl.java

@@ -13,6 +13,7 @@ import com.jzg.commons.entity.dto.SysUserJzgInfoBankCardDto;
 import com.jzg.commons.entity.po.SysUploadFiles;
 import com.jzg.commons.entity.po.SysUserJzgInfoBankCard;
 import com.jzg.commons.entity.po.SysUserJzgInfoBankCardRecord;
+import com.jzg.commons.entity.vo.ChangeLogDetail;
 import com.jzg.commons.entity.vo.SysUserJzgInfoBankCardVo;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.MinioUtils;
@@ -28,10 +29,7 @@ import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -119,7 +117,15 @@ public class SysUserJzgInfoBankCardServiceImpl extends ServiceImpl<SysUserJzgInf
             List<SysUserJzgInfoBankCardRecord> sysUserJzgInfoBankCardRecordList = sysUserJzgInfoBankCardRecordMapper
                     .selectList(new LambdaQueryWrapper<SysUserJzgInfoBankCardRecord>()
                             .eq(SysUserJzgInfoBankCardRecord::getBankCardId, sysUserJzgInfoBankCardDto.getId()));
-            sysUserJzgInfoBankCardDto.setSysUserJzgInfoBankCardRecordList(sysUserJzgInfoBankCardRecordList);
+            List<ChangeLogDetail> changeLogDetailList = new ArrayList<>();
+            int size = sysUserJzgInfoBankCardRecordList.size();
+            for (int i = 0; i < size; i++) {
+                SysUserJzgInfoBankCardRecord action = sysUserJzgInfoBankCardRecordList.get(i);
+                // 只有最后一条记录按实际状态设置,前面的记录默认展示为成功
+                boolean show = i < size - 1 || action.getStatus().equals("1");
+                changeLogDetailList.add(new ChangeLogDetail(action.getDescription(), action.getCreateTime(), show, action.getRemark(), action.getBankCardId(), action.getId()));
+            }
+            sysUserJzgInfoBankCardDto.setSysUserJzgInfoBankCardRecordList(changeLogDetailList);
             // 填充最新的驳回日期和驳回原因
             if(CollUtil.isNotEmpty(sysUserJzgInfoBankCardRecordList)){
                 // 过滤出状态=2的驳回记录,并按创建时间 倒序排列
@@ -173,6 +179,11 @@ public class SysUserJzgInfoBankCardServiceImpl extends ServiceImpl<SysUserJzgInf
 
     @Override
     public boolean setDefaultCard(SysUserJzgInfoBankCardVo sysUserJzgInfoBankCardVo) {
+        SysUserJzgInfoBankCard bankCard = sysUserJzgInfoBankCardMapper.selectById(sysUserJzgInfoBankCardVo.getId());
+        if (bankCard.getAuditStatus() != 1) {
+            throw new SystemException("该银行卡未审核通过");
+        }
+
         // 1. 将该用户所有银行卡取消默认(批量更新,避免逐条 updateById 受 FieldStrategy 影响)
         LambdaUpdateWrapper<SysUserJzgInfoBankCard> cancelWrapper = new LambdaUpdateWrapper<>();
         cancelWrapper.eq(SysUserJzgInfoBankCard::getUserInfoId, sysUserJzgInfoBankCardVo.getUserId())

+ 3 - 0
tenant/organization/src/main/resources/mapper/PtlAgreementCostMapper.xml

@@ -127,6 +127,8 @@
         <result column="priority_level" property="priorityLevel" jdbcType="INTEGER"/>
         <result column="costId" property="costId" jdbcType="VARCHAR"/>
         <result column="create_time" property="createTime" jdbcType="VARCHAR"/>
+        <result column="company_name" property="companyName" jdbcType="VARCHAR"/>
+        <result column="company_id" property="companyId" jdbcType="VARCHAR"/>
         <result column="create_by" property="createBy" jdbcType="VARCHAR"/>
         <collection property="ruleConditions" column="{costId=costId}" ofType="com.jzg.commons.entity.vo.PtlAgreementCostTypeVo" select="selectCostType" />
     </resultMap>
@@ -382,6 +384,7 @@
                 ELSE pr_raw.rule_description
             END AS rule_description,
             eic.name as company_name,
+            pa.company_id as company_id,
             pa.docking_person,
             pc.update_time,
             CASE

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

@@ -212,7 +212,7 @@
         year(io.signing_time) as sign_year,
         ipi.id,
         io.id as 'orderNo',
-        io.company_name,
+        eic.name_simple as companyName,
         ipi.dept_name,
         ipi.agreement_name,
         ipi.agreement_id,
@@ -346,7 +346,7 @@
         </if>
         <if test="receivableQueryVo.invoiceSettlementStatus != null and receivableQueryVo.invoiceSettlementStatus != ''">
             <!-- 当状态为1时,查询已开票的数据 -->
-            <if test="receivableQueryVo.invoiceSettlementStatus != '2'">
+            <if test="receivableQueryVo.invoiceSettlementStatus != 2">
                 AND ipi.id in (
                 select ipil.income_id from ins_ply_income_invoice_link ipil
                 LEFT JOIN ins_ply_income_invoice ipii ON ipil.invoice_id = ipii.id AND ipii.is_delete = 0
@@ -354,7 +354,7 @@
                 )
             </if>
             <!-- 当状态为2时,查询未开票的数据 -->
-            <if test="receivableQueryVo.invoiceSettlementStatus == '2'">
+            <if test="receivableQueryVo.invoiceSettlementStatus == 2">
                 AND NOT EXISTS (
                 SELECT 1 FROM ins_ply_income_invoice_link link
                 LEFT JOIN ins_ply_income_invoice inv ON link.invoice_id = inv.id AND inv.is_delete = 0

+ 10 - 6
tenant/organization/src/main/resources/mapper/SysAmountAuditingMapper.xml

@@ -40,6 +40,10 @@
         is_delete,create_time,create_by,
         update_time,update_by,system_code
     </sql>
+    <!-- 更新付款账号 lipf 2026年8月11日15:25:58  -->
+    <update id="updatePayAccountInfo">
+        update sys_amount_auditing a set a.account_id = #{payAccountId}  where a.id = #{amountAuditingId}
+    </update>
 
     <select id="queryPage" resultType="com.jzg.commons.entity.vo.AmountAuditVo">
         SELECT
@@ -264,6 +268,12 @@
         select sum(COALESCE(saa.amount, 0)) as payingAmountSum from sys_amount_auditing saa where saa.auditing_status = 0
     </select>
     <!-- 查询收支明细 2026年7月20日15:47:35 -->
+    <!--            <if test="status != null and status != ''">-->
+    <!--                and a.status= #{status}-->
+    <!--            </if>-->
+    <!--            <if test="incomeAndExpense != null and incomeAndExpense != ''">-->
+    <!--                and a.incomeAndExpense = #{incomeAndExpense}-->
+    <!--            </if>-->
     <select id="getIncomeAndExpense"
             resultType="com.jzg.commons.entity.vo.IncomeAndExpenseList">
         select
@@ -336,12 +346,6 @@
         and saa.auditing_status = 0  ) as a
         <where>
             a.user_id = #{userId}
-            <if test="status != null and status != ''">
-                and a.status= #{status}
-            </if>
-            <if test="incomeAndExpense != null and incomeAndExpense != ''">
-                and a.incomeAndExpense = #{incomeAndExpense}
-            </if>
             <if test="createTimeStart != null and createTimeStart != ''">
                 and a.create_time &gt;= #{createTimeStart}
             </if>

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

@@ -28,7 +28,7 @@
         LEFT JOIN sys_dept sd on sd.id = sujz.dept_id AND sd.is_delete = 0
         LEFT JOIN sys_upload_files suf on suf.id = sujz.head_sculpture AND suf.is_delete = 0
         LEFT JOIN sys_system ss on ss.sys_code = sujz.system_code AND ss.is_delete = 0
-        LEFT JOIN sys_user_jzg_app suja ON  suja.id = sujz.referrer_id AND suja.is_delete = 0
+        LEFT JOIN sys_user_jzg_app suja ON suja.id = sujz.referrer_id AND suja.is_delete = 0
         LEFT JOIN sys_user sur on sur.id = suja.user_id AND sur.is_delete = 0
         <where>
             sujz.is_delete = 0 and sujz.is_enable = 0

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio