Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

Qchen 1 bulan lalu
induk
melakukan
e56c472e59
31 mengubah file dengan 356 tambahan dan 110 penghapusan
  1. 3 0
      commons/src/main/java/com/jzg/commons/entity/dto/FeeAuditParam.java
  2. 5 0
      commons/src/main/java/com/jzg/commons/entity/dto/PtlAgreementCostParam.java
  3. 8 0
      commons/src/main/java/com/jzg/commons/entity/finance/dto/ExportSuperviseSettlementExcelDto.java
  4. 3 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/BatchModifyVo.java
  5. 1 1
      commons/src/main/java/com/jzg/commons/entity/finance/vo/SettlementQueryVo.java
  6. 2 0
      commons/src/main/java/com/jzg/commons/entity/orders/vo/FeeAuditVo.java
  7. 5 1
      commons/src/main/java/com/jzg/commons/entity/vo/IncomeAndExpenseList.java
  8. 6 0
      commons/src/main/java/com/jzg/commons/entity/vo/IncomeAndExpenseVo.java
  9. 9 1
      commons/src/main/java/com/jzg/commons/util/OrderComponents.java
  10. 5 0
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/build/AnShengCrawlerApplyApplicationRequestBuild.java
  11. 40 15
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/build/AnShengCrawlerQuoteResultsVoBuild.java
  12. 15 1
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/request/AnShengCrawlerApplyApplicationRequest.java
  13. 18 1
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerCalculatePremiumApplyResponse.java
  14. 2 1
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerRequestImpl.java
  15. 97 18
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/service/Impl/HuaTaiCrawlerRequestImpl.java
  16. 3 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeAuditServiceImpl.java
  17. 8 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  18. 11 2
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeAuditMapper.xml
  19. 3 1
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml
  20. 6 0
      tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/model/api/TKEntranceFor000086Result.java
  21. 6 1
      tenant/organization/src/main/java/com/jzg/organization/controller/PtlAgreementCostController.java
  22. 1 1
      tenant/organization/src/main/java/com/jzg/organization/service/PtlAgreementCostService.java
  23. 5 3
      tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementCostServiceImpl.java
  24. 26 5
      tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java
  25. 7 4
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysAmountAuditingServiceImpl.java
  26. 9 10
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserAccountServiceImpl.java
  27. 13 10
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserJzgInfoBankCardServiceImpl.java
  28. 11 22
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java
  29. 5 0
      tenant/organization/src/main/resources/mapper/PtlAgreementCostMapper.xml
  30. 17 2
      tenant/organization/src/main/resources/mapper/ReceivableMapper.xml
  31. 6 6
      tenant/organization/src/main/resources/mapper/SysAmountAuditingMapper.xml

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

@@ -167,4 +167,7 @@ public class FeeAuditParam extends PageRequest {
     @Schema(description = "非车起保时间-止")
     private String jyRiskStartDateEnd;
 
+    @Schema(description = "投保人")
+    private String policyholder;
+
 }

+ 5 - 0
commons/src/main/java/com/jzg/commons/entity/dto/PtlAgreementCostParam.java

@@ -61,5 +61,10 @@ public class PtlAgreementCostParam extends PageRequest {
     private String agreementId;
     @Schema(description = "承包规则id")
     private String coverRuleId;
+    /**
+     * 这个参数是批量复制之后需要在费用管理页面展示最新复制的集合
+     */
+    @Schema(description = "复制的新的ids")
+    private List<String> newCostIds;
 
 }

+ 8 - 0
commons/src/main/java/com/jzg/commons/entity/finance/dto/ExportSuperviseSettlementExcelDto.java

@@ -113,4 +113,12 @@ public class ExportSuperviseSettlementExcelDto {
     @ExcelProperty(value = "对接人手机号")
     private String contactPersonPhone;
 
+    @Schema(description = "分支机构id")
+    @ExcelIgnore
+    private String partnerCompanyId;
+
+    @Schema(description = "分支机构名称")
+    @ExcelProperty(value = "分支机构名称")
+    private String partnerCompanyName;
+
 }

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

@@ -60,6 +60,9 @@ public class BatchModifyVo {
     @Schema(description = "修改标识 1-手续费 2-跟单费 3-驾意险 4-所有都改")
     private String updateFlag;
 
+    @Schema(description = "要重新绑定的协议id")
+    private String updateAgreementId;
+
     @Schema(description = "公司id")
     private List<String> companyIds;
 

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

@@ -25,7 +25,7 @@ public class SettlementQueryVo extends PageRequest {
     @Schema(description = "保险公司Id")
     private String companyId;
 
-    @Schema(description = "保险公司Id")
+    @Schema(description = "分支保险公司Id")
     private String partnerCompanyId;
 
     @Schema(description = "应收项")

+ 2 - 0
commons/src/main/java/com/jzg/commons/entity/orders/vo/FeeAuditVo.java

@@ -451,4 +451,6 @@ public class FeeAuditVo extends BaseModel {
     private String jyRiskStartDate;
     private String jyRiskEndDate;
 
+    @Schema(description = "投保人")
+    private String policyholder;
 }

+ 5 - 1
commons/src/main/java/com/jzg/commons/entity/vo/IncomeAndExpenseList.java

@@ -55,6 +55,10 @@ public class IncomeAndExpenseList {
     @Schema(description = "处理进度")
     private List<ChangeLogDetail> stepList;
 
+    @Schema(description = "支付凭证")
+    private String paymentVoucher;
 
-
+    private String bucketName;
+    @Schema(description = "支付凭证的id")
+    private String picId;
 }

+ 6 - 0
commons/src/main/java/com/jzg/commons/entity/vo/IncomeAndExpenseVo.java

@@ -68,5 +68,11 @@ public class IncomeAndExpenseVo {
 
         @Schema(description = "处理进度")
         private List<ChangeLogDetail> stepList;
+
+        @Schema(description = "支付凭证")
+        private String paymentVoucher;
+
+        @Schema(description = "支付凭证的id")
+        private String picId;
     }
 }

+ 9 - 1
commons/src/main/java/com/jzg/commons/util/OrderComponents.java

@@ -64,7 +64,15 @@ public class OrderComponents {
         nameMap.put("order.dockingPerson","对接人姓名");
         nameMap.put("order.dockingPersonPhone","对接人手机号");
 
-
+        nameMap.put("insCompanyVo[0].companyCode","保司编码");
+        nameMap.put("insCompanyVo[0].nameSimple","保司简称");
+        nameMap.put("insCompanyVo[0].code","保司代码");
+        nameMap.put("insCompanyVo[0].cnName","保司代码");
+        nameMap.put("insCompanyVo[0].name","保司全称");
+        nameMap.put("insCompanyVo[0].logo","保司logo");
+        nameMap.put("insCompanyVo[0].id","保司ID");
+        nameMap.put("order.companyName","保司名称");
+        nameMap.put("order.insuranceCompanyCode","保司ID");
 
         return nameMap;
     }

+ 5 - 0
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/build/AnShengCrawlerApplyApplicationRequestBuild.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.ansheng.crawler.build;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.google.common.collect.Lists;
 import com.jzg.quotation.ansheng.crawler.entity.request.AnShengCrawlerApplyApplicationRequest;
@@ -18,6 +19,7 @@ import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 public final class AnShengCrawlerApplyApplicationRequestBuild {
@@ -413,6 +415,9 @@ public final class AnShengCrawlerApplyApplicationRequestBuild {
         policyCoveragesDTO.setNoFaultDieAmount(policyCoveragesDTORequest.getNoFaultDieAmount());
         policyCoveragesDTO.setNoFaultMedicalAmount(policyCoveragesDTORequest.getNoFaultMedicalAmount());
         policyCoveragesDTO.setNoFaultPropertyAmount(policyCoveragesDTORequest.getNoFaultPropertyAmount());
+        if (Set.of("AOD", "NEAOD").contains(policyCoveragesResponse.getDutyCode())){
+            policyCoveragesDTO.setPureRiskPremiumItemList(BeanUtil.copyToList(policyCoveragesResponse.getPureRiskPremiumItemList(), AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyCoveragesDTO.RiskPremiumItem.class));
+        }
         return policyCoveragesDTO;
     }
 

+ 40 - 15
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/build/AnShengCrawlerQuoteResultsVoBuild.java

@@ -50,9 +50,15 @@ public final class AnShengCrawlerQuoteResultsVoBuild {
             String message = calculatePremiumApply.getMessage();
             quoteResultsVo.setErrorMessage(message.contains("。") ? message.substring(0, message.indexOf("。")) : message);
             return quoteResultsVo;
+        }else {
+            String repeatFlag = calculatePremiumApply.getData().getContracts().stream().map(c -> c.getPolicyBase().getRepeatFlag()).filter(StringUtils::isNotEmpty).findFirst().orElse(null);
+            if (StringUtils.isNotEmpty(repeatFlag)) {
+                quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.QUOTE_FAIL);
+                quoteResultsVo.setErrorMessage("重复投保!此次投保与投保单号:" + repeatFlag + "相同,请去核心处理!");
+                return quoteResultsVo;
+            }
         }
-        List<AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO> contracts = calculatePremiumApply.getData()
-                .getContracts();
+        List<AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO> contracts = calculatePremiumApply.getData().getContracts();
 
         contracts.forEach(contract -> {
             // 交强险
@@ -148,20 +154,39 @@ public final class AnShengCrawlerQuoteResultsVoBuild {
                 "scoreKey", "bussinessLevel",
                 "score", data.getBussinessLevel()
         );
-        for (AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO contract : data.getContracts()) {
-            JSONObject jsonObject = new JSONObject();
-            if (StringUtils.equals("105",contract.getPlanDefine().getPlanCode())){
-                jsonObject.put("scoreName","交强存在费用");
-                jsonObject.put("scoreKey","compulsoryInsure");
-                jsonObject.put("score",contract.getPlanDefine().getCompulsoryInsure() ? "是" : "否");
-            }else if (StringUtils.equals("109",contract.getPlanDefine().getPlanCode())){
-                jsonObject.put("scoreName","商业存在费用");
-                jsonObject.put("scoreKey","businessInsure");
-                jsonObject.put("score",contract.getPlanDefine().getBusinessInsure() ? "是" : "否");
-            }
 
-            scoreArray.add(jsonObject);
-        }
+
+        AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO contractsDTO =
+                data.getContracts().stream()
+                        .filter(c -> c.getPlanDefine() != null)
+                        .filter(c -> "105".equals(c.getPlanDefine().getPlanCode()))
+                        .findAny()
+                        .orElseThrow(() -> new IllegalStateException("未找到 planCode=105 的合约"));
+        JSONObject compulsoryInsure = new JSONObject();
+        compulsoryInsure.put("scoreName","交强存在费用");
+        compulsoryInsure.put("scoreKey","compulsoryInsure");
+        compulsoryInsure.put("score",contractsDTO.getPlanDefine().getCompulsoryInsure() ? "是" : "否");
+        scoreArray.add(compulsoryInsure);
+
+        JSONObject businessInsure = new JSONObject();
+        businessInsure.put("scoreName","商业存在费用");
+        businessInsure.put("scoreKey","businessInsure");
+        businessInsure.put("score",contractsDTO.getPlanDefine().getBusinessInsure() ? "是" : "否");
+        scoreArray.add(businessInsure);
+//        for (AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO contract : data.getContracts()) {
+//            JSONObject jsonObject = new JSONObject();
+//            if (StringUtils.equals("105",contract.getPlanDefine().getPlanCode())){
+//                jsonObject.put("scoreName","交强存在费用");
+//                jsonObject.put("scoreKey","compulsoryInsure");
+//                jsonObject.put("score",contract.getPlanDefine().getCompulsoryInsure() ? "是" : "否");
+//            }else if (StringUtils.equals("109",contract.getPlanDefine().getPlanCode())){
+//                jsonObject.put("scoreName","商业存在费用");
+//                jsonObject.put("scoreKey","businessInsure");
+//                jsonObject.put("score",contract.getPlanDefine().getBusinessInsure() ? "是" : "否");
+//            }
+//
+//            scoreArray.add(jsonObject);
+//        }
         scoreArray.add(bussinessLevel);
         scoreVo.setScoreJson(scoreArray);
         return scoreVo;

+ 15 - 1
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/request/AnShengCrawlerApplyApplicationRequest.java

@@ -662,7 +662,7 @@ public class AnShengCrawlerApplyApplicationRequest {
             @JsonProperty("dutyChineseName")
             private String dutyChineseName;
             @JsonProperty("insuredAmount")
-            private Integer insuredAmount;
+            private Double insuredAmount;
             @JsonProperty("equipmentInsureAmount")
             private String equipmentInsureAmount;
             @JsonProperty("premiumRate")
@@ -715,6 +715,20 @@ public class AnShengCrawlerApplyApplicationRequest {
             private String noFaultMedicalAmount;
             @JsonProperty("noFaultPropertyAmount")
             private String noFaultPropertyAmount;
+            @JsonProperty("pureRiskPremiumItemList")
+            private List<PolicyCoveragesDTO.RiskPremiumItem> pureRiskPremiumItemList;
+
+
+            @NoArgsConstructor
+            @AllArgsConstructor
+            @Data
+            public static class RiskPremiumItem{
+                private String modelCode;
+                private String pureRiskPremium;
+                private String pureRiskPremiumFlag;
+            }
+
+
         }
 
         @NoArgsConstructor

+ 18 - 1
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerCalculatePremiumApplyResponse.java

@@ -1,6 +1,7 @@
 package com.jzg.quotation.ansheng.crawler.entity.response;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -235,6 +236,8 @@ public class AnShengCrawlerCalculatePremiumApplyResponse  implements Serializabl
                 private String factorScale;
                 @JsonProperty("minRatioMode")
                 private String minRatioMode;
+                @JsonProperty("repeatFlag")
+                private String repeatFlag;
             }
 
             @NoArgsConstructor
@@ -1346,7 +1349,7 @@ public class AnShengCrawlerCalculatePremiumApplyResponse  implements Serializabl
                 @JsonProperty("allAmount")
                 private Double allAmount;
                 @JsonProperty("insuredAmount")
-                private Integer insuredAmount;
+                private Double insuredAmount;
                 @JsonProperty("totalStandardPremium")
                 private Double totalStandardPremium;
                 @JsonProperty("totalAgreePremium")
@@ -1391,6 +1394,20 @@ public class AnShengCrawlerCalculatePremiumApplyResponse  implements Serializabl
                 private String priority;
                 @JsonProperty("ariExpense")
                 private Integer ariExpense;
+                @JsonProperty("pureRiskPremiumItemList")
+                private List<PolicyCoveragesDTO.RiskPremiumItem> pureRiskPremiumItemList;
+
+
+                @NoArgsConstructor
+                @AllArgsConstructor
+                @Data
+                public static class RiskPremiumItem{
+                    private String modelCode;
+                    private String pureRiskPremium;
+                    private String pureRiskPremiumFlag;
+                }
+
+
             }
 
             @NoArgsConstructor

+ 2 - 1
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerRequestImpl.java

@@ -411,7 +411,8 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
         AnShengCrawlerOrder anShengCrawlerOrder = anShengCrawlerOrderService.getById(ordersNo);
         PaymentLinkResultsVo paymentLinkResultsVo;
         if (!applyApplicationResponse.getCode().equals(200)) {
-            underwritingResultsVo.setUnderwritingResult(applyApplicationResponse.getMessage());
+            String errMsg = StringUtils.isNotEmpty(applyApplicationResponse.getMessage()) ? applyApplicationResponse.getMessage() : StringUtils.isNotEmpty(applyApplicationResponse.getSimpleMessage()) ? applyApplicationResponse.getSimpleMessage() : "申请核保错误";
+            underwritingResultsVo.setUnderwritingResult(errMsg);
             underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
             return underwritingResultsVo;
         }

+ 97 - 18
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/service/Impl/HuaTaiCrawlerRequestImpl.java

@@ -1,6 +1,7 @@
 package com.jzg.quotation.huatai.crawler.service.Impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.json.JsonReadFeature;
@@ -46,6 +47,7 @@ import com.jzg.quotation.huatai.crawler.service.HtCrawlerOrderService;
 import com.jzg.quotation.huatai.crawler.service.HuaTaiCrawlerRequest;
 import com.jzg.quotation.huatai.crawler.util.CookieUtils;
 import com.jzg.quotation.huatai.crawler.util.CryptoUtil;
+import com.jzg.quotation.huatai.crawler.util.HuaTaiCryptUtil;
 import com.jzg.quotation.huatai.crawler.util.UploadUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -201,7 +203,7 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
         m.put("engineno", "");
         m.put("liceenseplatetype", "02 小型汽车号牌");//
         m.put("ecdemicvehicleflag", "0");
-        fillVehicleTypeCodes(car, m);
+        fillVehicleTypeCodes(car, m, "motortypecode", "motorusagetypecode");
         m.put("xbcomcode", XBCOM_CODE);
         m.put("quotationNo", quotationNo);
         m.put("riskCode", RISK_CODE);
@@ -244,7 +246,7 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
         // 报价前预处理-保存车辆信息、过滤车型等处理
         PreResult pre = null;
         try {
-            pre = prepareQuote(attr, mmap, car, modelcodexh, cache.getCookie(), quotationNo, xbResult);
+            pre = prepareQuote(attr, mmap, car, modelcodexh, cache.getCookie(), quotationNo, xbResult, "");
         } catch (Exception e) {
             log.error("报价失败:保存车辆信息、过滤车型异常,{}",e.getMessage());
             throw new SystemException(e.getMessage());
@@ -317,14 +319,57 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
 
     // ====================== 报价预处理 ======================
     private PreResult prepareQuote(AttributionInformationVo attr, Map<String, Object> mmap,
-                                   CarInfoVo car, String modelcodexh, String cookie, String quotationNo, Map<String, Object> xbResult) throws Exception {
+                                   CarInfoVo car, String modelcodexh, String cookie, String quotationNo, Map<String, Object> xbResult, String carChange) throws Exception {
         HtCrawlerConfigureParameters params = ConfigureParametersConversion.conversionEntity(
                 HtCrawlerConfigureParameters.class, attr.getConfigInfo());
         params.setFullComCode(params.getComCode());
         //参数格式保持一致--方便过滤
         car.setPurchasePrice(car.getPurchasePrice().replace(".00", ""));
+        HtCrawlerCarQueryResponse.DataDTO dataDTO = null;
         //车辆查询
-        HtCrawlerCarQueryResponse.DataDTO dataDTO = req.carQuery(new HtCrawlerCarQueryRequest(car, modelcodexh, xbResult), req.getHeaders1(), car);
+        if (StringUtils.isBlank(carChange)) {
+            dataDTO = req.carQuery(new HtCrawlerCarQueryRequest(car, modelcodexh, xbResult), req.getHeaders1(), car);
+        } else {
+            HttpHeaders headers = buildReCarQueryHeaders(req.getCookie());
+            Map<String, Object> dataDTOMap = new HashMap<>();
+            dataDTOMap.put("vehiclemodel", car.getBrandName());
+            fillVehicleTypeCodes(car, dataDTOMap, "motortypecode", "motorusagetypecode");
+            dataDTOMap.put("EACSP_MODEL_CODE_QUERY_new", System.currentTimeMillis() + "");
+            dataDTOMap.put("EACSP_MODEL_CODE_QUERY_old", "");
+            dataDTOMap.put("pageno", "1");
+            dataDTOMap.put("rowsperpage", "10");
+            dataDTOMap.put("reformRisk", "1251");
+            dataDTOMap.put("vin", car.getVinNo());
+            dataDTOMap.put("licenseplateno", car.getLicenseNo());
+            dataDTOMap.put("engineno", car.getEngineNo());
+            dataDTOMap.put("vehicleregisterdate", car.getRegisterDate());
+            dataDTOMap.put("fueltype", "0");
+            dataDTOMap.put("purerange", "");
+            dataDTOMap.put("modelcodexh", modelcodexh);
+
+            String rawData = JSON.toJSONString(dataDTOMap);
+            String key = HuaTaiCryptUtil.generateKey(16);         // 生成16位AES密钥
+            String accessToken = HuaTaiCryptUtil.RSAEncrypt(key);  // RSA 加密密钥
+            String encryptData = HuaTaiCryptUtil.AESEncrypt(rawData, key);  // AES 加密数据
+
+            MultiValueMap<String, String> requestBody = new LinkedMultiValueMap<>();
+            requestBody.add("sourceCode", "8");
+            requestBody.add("accessToken", accessToken);
+            requestBody.add("data", encryptData);
+            requestBody.add("cmd", "carquery");
+
+            String url = "https://cspxp.pc.ehuatai.com/htcsp/VehicleInfoEntryAction.do";
+            String response = cookieUtils.getRestTemplate().postForEntity(url, new HttpEntity<>(requestBody, headers), String.class).getBody();
+            log.info("carChange车辆查询,response,{}",response);
+
+            HtCrawlerCarQueryResponse encryptedResponse =
+                    JSON.parseObject(response, HtCrawlerCarQueryResponse.class);
+            String decryptKey = CryptoUtil.rsaDecrypt(encryptedResponse.getAccessToken());
+            String decryptData = CryptoUtil.aesDecrypt(encryptedResponse.getData(), decryptKey);
+
+            dataDTO = JSON.parseObject(decryptData, HtCrawlerCarQueryResponse.DataDTO.class);
+
+        }
         //过滤车辆
         HtCrawlerCarQueryResponse.DataDTO.DataListDTO carDTO = null;
         if(dataDTO.getDatalist() != null && !dataDTO.getDatalist().isEmpty()) {
@@ -341,9 +386,9 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
             log.info("未匹配则第二次车辆查询,carDTO,{}",JSONObject.toJSONString(carDTO));
         }
         log.info("过滤后的车型carDTO: {}", JSONObject.toJSONString(carDTO));
-        //保存车辆信息
+        //保存车辆信息 -- renewCarInfo
         executeSaveCarQuery(carDTO, dataDTO, car, cookie);
-        //车型查询 -- renewCarInfo
+        //车型查询 -- get_peopleinfo
         String carData = executeCarModelCodexhQuery(carDTO, car, cookie, quotationNo);
         // 核心:关闭「未知字段抛出异常」,优先级 > 类注解
         //MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
@@ -399,11 +444,12 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
         MultiValueMap<String, String> fd = new LinkedMultiValueMap<>();
         fd.add("modelCode", carDTO.getModelcode());
         fd.add("licenseNo", car.getLicenseNo());
-        fd.add("licenseKindCode", "02 小型汽车号牌");
+        fd.add("licenseKindCode", car.getLicenseKindCode() + " " + car.getLicenseKindName()); // "02 小型汽车号牌"
         fd.add("engineNo", car.getEngineNo());
         fd.add("frameNo", car.getVinNo());
-        fd.add("useNatureCode", "8A 家庭自用");
-        fd.add("carKindCode", "A0 客车");
+        // fd.add("useNatureCode", "8A 家庭自用");
+        // fd.add("carKindCode", "A0 客车");
+        fillVehicleTypeCodes2(car, fd, "carKindCode", "useNatureCode");
         fd.add("enrollDate", car.getRegisterDate());
         fd.add("completeKerbMass", "1250");
         fd.add("seatCount", carDTO.getLimitloadperson());
@@ -557,7 +603,7 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
             AttributionInformationVo attr = q.getOrder().getAttributionInformationVo();
             log.info(map.get("unMatchVehicleFrameMessage") + "已重新执行prepareQuote,新modelcodexh:{}", newModelCodexh);
             return prepareQuote(attr, gsInfo, q.getCarInfoVo(),
-                    newModelCodexh, cookie, quotationNo, map);
+                    newModelCodexh, cookie, quotationNo, map, "carChange");
         } catch (Exception e) {
             log.error("重新构建PreResult失败", e);
             throw new SystemException("重新获取车型信息失败", e.getMessage());
@@ -1303,6 +1349,22 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
         });
     }
 
+    private HttpHeaders buildReCarQueryHeaders(String cookie) {
+        return header(h -> {
+            h.add(HtRequestConstant.COOKIE, cookie);
+            h.add("Accept", ACCEPT_JSON);
+            h.add("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8");
+            h.add("Cache-Control", "no-cache");
+            h.add("Connection", "keep-alive");
+            h.add("Content-Type", CONTENT_TYPE_FORM);
+            h.add("Origin", ORIGIN);
+            h.add("Pragma", "no-cache");
+            h.add("Referer", ORIGIN + "/htcsp/VehicleInfoEntryAction.do?cmd=startProcess");
+            h.add("User-Agent", UA);
+            h.add("X-Requested-With", XHR);
+        });
+    }
+
     private HttpHeaders buildCarModelCodexhHeaders(String cookie) {
         return header(h -> {
             h.add("Accept", ACCEPT_JSON);
@@ -1404,20 +1466,37 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
         return m;
     }
 
-    private static void fillVehicleTypeCodes(CarInfoVo car, Map<String, Object> data) {
+    private static void fillVehicleTypeCodes(CarInfoVo car, Map<String, Object> data, String motorTypeKey, String motorUsageKey) {
+        String use = car.getVehicleUseCode(), kind = car.getCarKindCode();
+        switch (use) {
+            case "04" -> data.putAll(Map.of(motorTypeKey, "H0", motorUsageKey, "9D"));
+            case "05" -> data.putAll(Map.of(motorTypeKey, "A0", motorUsageKey, "8A"));
+            case "06" -> {
+                if ("A0".equals(kind)) data.putAll(Map.of(motorTypeKey, "A0", motorUsageKey, "8C"));
+                else if ("A1".equals(kind)) data.putAll(Map.of(motorTypeKey, "H0", motorUsageKey, "8D"));
+            }
+            case "07" -> {
+                if ("A0".equals(kind)) data.putAll(Map.of(motorTypeKey, "A0", motorUsageKey, "8B"));
+                else if ("A1".equals(kind)) data.putAll(Map.of(motorTypeKey, "H0", motorUsageKey, "8D"));
+            }
+            case "08" -> data.putAll(Map.of(motorTypeKey, "H0", motorUsageKey, "8D"));
+        }
+    }
+
+    private static void fillVehicleTypeCodes2(CarInfoVo car, MultiValueMap<String, String> data, String motorTypeKey, String motorUsageKey) {
         String use = car.getVehicleUseCode(), kind = car.getCarKindCode();
         switch (use) {
-            case "04" -> data.putAll(Map.of("motortypecode", "H0", "motorusagetypecode", "9D"));
-            case "05" -> data.putAll(Map.of("motortypecode", "A0", "motorusagetypecode", "8A"));
+            case "04" -> { data.add(motorTypeKey, "H0"); data.add(motorUsageKey, "9D"); }
+            case "05" -> { data.add(motorTypeKey, "A0"); data.add(motorUsageKey, "8A"); }
             case "06" -> {
-                if ("A0".equals(kind)) data.putAll(Map.of("motortypecode", "A0", "motorusagetypecode", "8C"));
-                else if ("A1".equals(kind)) data.putAll(Map.of("motortypecode", "H0", "motorusagetypecode", "8D"));
+                if ("A0".equals(kind)) { data.add(motorTypeKey, "A0"); data.add(motorUsageKey, "8C"); }
+                else if ("A1".equals(kind)) { data.add(motorTypeKey, "H0"); data.add(motorUsageKey, "8D"); }
             }
             case "07" -> {
-                if ("A0".equals(kind)) data.putAll(Map.of("motortypecode", "A0", "motorusagetypecode", "8B"));
-                else if ("A1".equals(kind)) data.putAll(Map.of("motortypecode", "H0", "motorusagetypecode", "8D"));
+                if ("A0".equals(kind)) { data.add(motorTypeKey, "A0"); data.add(motorUsageKey, "8B"); }
+                else if ("A1".equals(kind)) { data.add(motorTypeKey, "H0"); data.add(motorUsageKey, "8D"); }
             }
-            case "08" -> data.putAll(Map.of("motortypecode", "H0", "motorusagetypecode", "8D"));
+            case "08" -> { data.add(motorTypeKey, "H0"); data.add(motorUsageKey, "8D"); }
         }
     }
 

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

@@ -172,8 +172,9 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
         for (FeeAuditVo feeAuditVo : page.getRecords()) {
             String allCompany =  allCompanyHierarchyPaths.get(Objects.toString(feeAuditVo.getCompanyId(),""));
             feeAuditVo.setCompanyALlName(allCompany);
-            feeAuditVo.setPartnerCompanyName(allCompanyHierarchyPaths.get(Objects.toString(feeAuditVo.getPartnerCompanyId(),"")));
-            feeAuditVo.setPartnerCompanySimplyName(allCompanyHierarchyPaths.get(Objects.toString(feeAuditVo.getPartnerCompanyId(),"")));
+//            feeAuditVo.setPartnerCompanyName(allCompanyHierarchyPaths.get(Objects.toString(feeAuditVo.getPartnerCompanyId(),"")));
+//            feeAuditVo.setPartnerCompanySimplyName(allCompanyHierarchyPaths.get(Objects.toString(feeAuditVo.getPartnerCompanyId(),"")));
+            feeAuditVo.setPartnerCompanySimplyName(feeAuditVo.getPartnerCompanyName());
             // 循环每条数据,查询 ins_fee_orders 并计算权益金额
             // 查询订单的 ins_fee_orders 数据
             InsFeeOrders insFeeOrders = feeOrdersService.getById(feeAuditVo.getOrderNo());

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

@@ -2349,6 +2349,11 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                 log.info("根据订单号[{}]没有找到车险订单信息和订单的费用信息",orderNo);
                 continue;
             }
+            if(StrUtil.isNotBlank(batchModifyVo.getUpdateAgreementId())){
+                insFeeOrdersMapper.update(null, new LambdaUpdateWrapper<InsFeeOrders>()
+                        .set(InsFeeOrders::getAgreementId, batchModifyVo.getUpdateAgreementId())
+                        .eq(InsFeeOrders::getOrderNo,orderNo));
+            }
             // add by lipf, 进行费用的修改
             if(this.rationIsNotAllNull(batchModifyVo)){
                 log.info("费用比例不为空,同步调整费用。batchModifyVo=[{}]", JSONUtil.toJsonStr(batchModifyVo));
@@ -2366,12 +2371,12 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                         .set(InsFeeOrders::getSigningTime,batchModifyVo.getSigningTime())
                         .eq(InsFeeOrders::getOrderNo,orderNo));
             }
-            if(StrUtil.isNotEmpty(batchModifyVo.getContractUserName())){
+            if(StrUtil.isNotBlank(batchModifyVo.getContractUserName())){
                 baseMapper.update(null, new LambdaUpdateWrapper<InsOrders>()
                         .set(InsOrders::getDockingPerson, batchModifyVo.getContractUserName())
                         .eq(InsOrders::getId,orderNo));
             }
-            if(StrUtil.isNotEmpty(batchModifyVo.getContractPhone())){
+            if(StrUtil.isNotBlank(batchModifyVo.getContractPhone())){
                 baseMapper.update(null, new LambdaUpdateWrapper<InsOrders>()
                         .set(InsOrders::getDockingPersonPhone, batchModifyVo.getContractPhone())
                         .eq(InsOrders::getId,orderNo));
@@ -2420,6 +2425,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         int orderCount = baseMapper.update(null, new LambdaUpdateWrapper<InsOrders>()
                 .set(InsOrders::getCompanyId, companyId)
                 .set(InsOrders::getCompanyName, companyName)
+                .set(InsOrders::getAgreementId, batchModifyVo.getUpdateAgreementId())
                 .in(InsOrders::getId, orderNos));
         log.info("修改ins_orders保司信息完成,影响行数: {}", orderCount);
 

+ 11 - 2
tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeAuditMapper.xml

@@ -76,17 +76,23 @@
         io.order_source,
         ioci.vin_no,
         ifo.*,
-        pa.partner_company_id,iop.jq_policy_no , iop.sy_policy_no , iop.jy_policy_no,
+        pa.partner_company_id,
+        (SELECT COM.NAME FROM esm_ins_company COM WHERE COM.ID = pa.partner_company_id) as partnerCompanyName,
+        iop.jq_policy_no ,
+        iop.sy_policy_no ,
+        iop.jy_policy_no,
         (select ior.start_date  from ins_orders_risk ior where ior.order_no = io.id and ior.risk_name = '交强险' )  as jq_risk_start_date,
         (select ior.end_date from ins_orders_risk ior where ior.order_no = io.id and ior.risk_name = '交强险' )  as jq_risk_end_date,
         (select ior.start_date  from ins_orders_risk ior where ior.order_no = io.id and ior.risk_name = '商业险' )  as sy_risk_start_date,
         (select ior.end_date from ins_orders_risk ior where ior.order_no = io.id and ior.risk_name = '商业险' )  as sy_risk_end_date,
         (select ior.start_date  from ins_orders_risk ior where ior.order_no = io.id and ior.risk_name = '驾意险' )  as jy_risk_start_date,
-        (select ior.end_date from ins_orders_risk ior where ior.order_no = io.id and ior.risk_name = '驾意险' )  as jy_risk_end_date
+        (select ior.end_date from ins_orders_risk ior where ior.order_no = io.id and ior.risk_name = '驾意险' )  as jy_risk_end_date,
+        iocui2.name as policyholder
         FROM ins_fee_audit ifa
         LEFT JOIN ins_orders io on ifa.order_no = io.id AND io.is_delete=0
         LEFT JOIN ins_orders_car_info ioci on io.id = ioci.order_no AND ioci.is_delete=0
         LEFT JOIN ins_orders_car_user_info iocui on io.id = iocui.order_no and iocui.policy_person_type = 3 AND iocui.is_delete=0
+        LEFT JOIN ins_orders_car_user_info iocui2 ON io.id = iocui2.order_no AND iocui2.policy_person_type = 2 AND iocui2.is_delete = 0
         LEFT JOIN sys_user qsu on qsu.mobile = io.real_quote_user_id AND qsu.is_delete=0
         LEFT JOIN sys_user_jzg_info suji ON suji.user_id = qsu.id and suji.system_code = #{param.systemCode} AND suji.is_delete=0
         LEFT JOIN sys_dept sd on suji.dept_id = sd.id AND sd.is_delete=0
@@ -98,6 +104,9 @@
         LEFT JOIN ins_orders_policy iop on iop.order_no = io.id and iop.is_delete = 0
         <where>
             and ifa.is_delete=0 and ifa.system_code = #{param.systemCode}
+            <if test="param.policyholder != null and param.policyholder !=''">
+                and iocui2.name  = #{param.policyholder}
+            </if>
             <if test="param.vinNo != null and param.vinNo !=''">
                 and ioci.vin_no = #{param.vinNo}
             </if>

+ 3 - 1
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml

@@ -933,7 +933,9 @@
         <where>
             and io.is_delete = 0  and io.parent_id != '0'
             <if test="insOrdersParam.jzgInfoId != null and insOrdersParam.jzgInfoId != ''">
-                and io.real_quote_user_id in (select username from  sys_user bbb where bbb.id in ( select ss.user_id from sys_user_jzg_info ss where 1 =1 and  (ss.leader_id = #{insOrdersParam.jzgInfoId} or ss.id =#{insOrdersParam.jzgInfoId}) and ss.is_delete = 0 ) and bbb.is_delete = 0 )
+                and io.real_quote_user_id in (select bbb.mobile from sys_user bbb where bbb.id in ( select ss.user_id
+                from sys_user_jzg_info ss where 1 =1 and (ss.leader_id = #{insOrdersParam.jzgInfoId} or ss.id
+                =#{insOrdersParam.jzgInfoId}) and ss.is_delete = 0 ) and bbb.is_delete = 0 )
             </if>
             <if test="insOrdersParam.orderNo != null and insOrdersParam.orderNo != ''">
                 AND io.id = #{insOrdersParam.orderNo}

+ 6 - 0
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/model/api/TKEntranceFor000086Result.java

@@ -225,6 +225,11 @@ public class TKEntranceFor000086Result extends UnknownFieldEntity {
      */
     private List<TKPricePlans> pricePlans;
 
+    /**
+     * 非车辆支付主扩展列表
+     */
+    private List<Object> nonVehiclePaymentMainExtList;
+
     @Override
     protected void addChildUnknownFields() {
         addChildUnknownField("car", car);
@@ -239,5 +244,6 @@ public class TKEntranceFor000086Result extends UnknownFieldEntity {
         addChildUnknownField("orderInfoVoBZ", orderInfoVoBZ);
         addChildUnknownField("nonCarPolicyVoList", nonCarPolicyVoList);
         addChildUnknownField("pricePlans", pricePlans);
+        addChildUnknownField("nonVehiclePaymentMainExtList", nonVehiclePaymentMainExtList);
     }
 }

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

@@ -119,6 +119,11 @@ public class PtlAgreementCostController {
     @Operation(summary = "复制费用")
     @PostMapping("copyCost")
     public HttpResult copyCost(@RequestBody PtlAgreementCostCopyParam costCopyParam){
-        return ptlAgreementCostService.costCopy(costCopyParam) ? HttpResult.ok("复制费用成功") : HttpResult.error("复制费用失败");
+        try{
+            List<String> newCostIds = ptlAgreementCostService.costCopy(costCopyParam);
+            return HttpResult.ok(newCostIds);
+        }catch (Exception e){
+            return HttpResult.error("复制费用异常:"+e.getMessage());
+        }
     }
 }

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

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

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

@@ -393,7 +393,8 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
 
     @GlobalTransactional
     @Override
-    public Boolean costCopy(PtlAgreementCostCopyParam costCopyParam) {
+    public List<String> costCopy(PtlAgreementCostCopyParam costCopyParam) {
+        List<String> newCostId = new ArrayList<>();
         List<String> costIds = costCopyParam.getCostIds();
         costIds.forEach(oldCostId-> {
             PtlAgreementCost ptlAgreementCost = ptlAgreementCostMapper.selectById(oldCostId);
@@ -409,6 +410,7 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
             ptlAgreementCost.setPtlAgreementId(costCopyParam.getAgreementId());
             ptlAgreementCost.setCostDescribe("复制的费用:" + ptlAgreementCost.getCostDescribe());
             ptlAgreementCost.setCreateTime(LocalDateTime.now());
+            ptlAgreementCost.setUpdateTime(LocalDateTime.now());
             ptlAgreementCost.setProductId(costCopyParam.getProductId());
             ptlAgreementCost.setProductName(costCopyParam.getProductName());
             // 复制的费用为待审核
@@ -447,10 +449,10 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
             ptlAgreementCostMapper.insert(ptlAgreementCost);
             ptlAgreementCostTypeMapper.insert(newPtlAgreementCostTypes);
             ptlAgreementCostRuleMapper.insert(ptlAgreementCostRules);
+            newCostId.add(ptlAgreementCost.getId());
 
         });
-
-        return true;
+        return newCostId;
     }
 
     @Override

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

@@ -31,6 +31,7 @@ import com.jzg.commons.entity.finance.vo.importimcome.*;
 import com.jzg.commons.entity.orders.po.InsOrderAdjust;
 import com.jzg.commons.entity.po.*;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
+import com.jzg.commons.entity.vo.AgreementVo;
 import com.jzg.commons.entity.vo.PtlAgreementCostRatioVo;
 import com.jzg.commons.exception.ServiceException;
 import com.jzg.commons.exception.SystemException;
@@ -3930,13 +3931,19 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         HttpResult<String> updateOrdersRes = insFeeOrdersClient.updateOrdersBatch(batchModifyVo);
         log.info("更新车险订单的结果:updateOrdersRes=[{}]", JSONUtil.toJsonStr(updateOrdersRes));
 
-        // 如果companyIds不为空,则执行保司信息修改逻辑
+        // 如果updateAgreementId不为空,则执行保司信息修改逻辑
         // 涉及表:ins_ply_income(未对账的才改)、ins_orders、ins_order_adjust
-        if (CollUtil.isNotEmpty(batchModifyVo.getCompanyIds())) {
-            List<String> companyIds = batchModifyVo.getCompanyIds();
+        String updateAgreementId = batchModifyVo.getUpdateAgreementId();
+        if (StrUtil.isNotBlank(updateAgreementId)) {
+            // 根据协议查询公司和子公司
+            AgreementVo agreementVo = ptlAgreementMapper.queryById(updateAgreementId);
+            if (null == agreementVo){
+                throw new ServiceException("未找到对应协议,请检查协议配置");
+            }
+
             // 获取新的保司ID(companyIds第一个元素)和合作保险公司ID(companyIds第二个元素,若不存在则使用保司ID)
-            String newCompanyId = CollUtil.getFirst(companyIds);
-            String newPartnerCompanyId = CollUtil.size(companyIds) > 1 ? CollUtil.getLast(companyIds) : newCompanyId;
+            String newCompanyId = agreementVo.getCompanyId();
+            String newPartnerCompanyId = agreementVo.getPartnerCompanyId();
 
             // 1. 修改ins_ply_income表(仅修改未对账的数据)
             // 调用setDisableFlagForOtherReceivable设置disableFlag:1-已对账(已开票),0-未对账(未开票)
@@ -3979,15 +3986,21 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                 log.info("没有未对账的应收订单需要修改保司信息");
             }
 
+            // 修改ins_fee_orders、ins_orders和ins_ply_income的agreement_id
+            insFeeOrdersClient.updateOrdersBatch(batchModifyVo);
+
             // 修改ins_ply_income表
             LambdaUpdateWrapper<InsPlyIncome> incomeUpdateWrapper = new LambdaUpdateWrapper<>();
             incomeUpdateWrapper.set(InsPlyIncome::getCompanyId, newCompanyId)
                     .set(InsPlyIncome::getPartnerCompanyId, newPartnerCompanyId)
+                    .set(InsPlyIncome::getAgreementId, updateAgreementId)
+                    .set(InsPlyIncome::getAgreementName, agreementVo.getAgreementName())
                     .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);
             log.info("修改ins_orders和ins_order_adjust保司信息的结果:updateCompanyRes=[{}]", JSONUtil.toJsonStr(updateCompanyRes));
         }
@@ -5214,7 +5227,15 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
      * @param exportSuperviseSettlementExcelDtos
      */
     private void supplementaryListData(Page<ExportSuperviseSettlementExcelDto> exportSuperviseSettlementExcelDtos) {
+        HttpResult<Map<String, EsmInsCompany>> mapHttpResult = esmInsCompanyClient.queryAllCompanyMap();
+        Map<String, EsmInsCompany> data = mapHttpResult.getData();
+
         exportSuperviseSettlementExcelDtos.getRecords().forEach(dto -> {
+            if (StrUtil.isNotBlank(dto.getPartnerCompanyId())){
+                EsmInsCompany esmInsCompany = data.getOrDefault(dto.getPartnerCompanyId(), new EsmInsCompany());
+                dto.setPartnerCompanyName(esmInsCompany.getName());
+            }
+
             if ("1".equals(dto.getInvoiceParty())) {
                 dto.setInvoiceParty("我方开票");
             } else if ("2".equals(dto.getInvoiceParty())) {

+ 7 - 4
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysAmountAuditingServiceImpl.java

@@ -20,10 +20,7 @@ import com.jzg.commons.entity.po.SysUserJzgInfoBankCard;
 import com.jzg.commons.entity.vo.AmountAuditVo;
 import com.jzg.commons.entity.vo.IncomeAndExpenseList;
 import com.jzg.commons.exception.SystemException;
-import com.jzg.commons.util.AssertionUtils;
-import com.jzg.commons.util.BigDecimalUtil;
-import com.jzg.commons.util.DateTimeUtils;
-import com.jzg.commons.util.StringUtils;
+import com.jzg.commons.util.*;
 import com.jzg.organization.mapper.SysAmountAuditingMapper;
 import com.jzg.organization.service.*;
 import com.jzg.organization.state.AuditState;
@@ -530,6 +527,12 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
     public List<IncomeAndExpenseList> getIncomeAndExpense(IncomeAndExpenseParam param) {
         log.info("查询收支明细queryIncomeANdExpense:param=[{}]", JSONUtil.toJsonStr(param));
         List<IncomeAndExpenseList>  incomeAndExpenseLists =  baseMapper.getIncomeAndExpense(param);
+        incomeAndExpenseLists = incomeAndExpenseLists.stream().peek(action->{
+            if(StrUtil.isNotEmpty(action.getPaymentVoucher())){
+                var res = MinioUtils.getPresignedObjectUrl("jzg", action.getPaymentVoucher());
+                action.setPaymentVoucher(res);
+            }
+        }).toList();
         log.info("查询收支明细queryIncomeANdExpense:param=[{}],incomeAndExpenseLists.size()=[{}]",JSONUtil.toJsonStr(param), CollUtil.size(incomeAndExpenseLists));
         return incomeAndExpenseLists;
     }

+ 9 - 10
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserAccountServiceImpl.java

@@ -322,16 +322,17 @@ 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());
+        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;
             // 获取或创建月度汇总对象
@@ -344,7 +345,6 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
                 summary.setBalance(BigDecimal.ZERO);
                 monthSummaryMap.put(key, summary);
             }
-
             // 更新收入或支出
             if ("0".equals(record.getIncomeAndExpense())) {
                 // 收入
@@ -353,7 +353,6 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
                 // 支出, 并且不是审核驳回的数据
                 summary.setExpense(BigDecimalUtil.add(summary.getExpense(),record.getAmount()));
             }
-
             // 计算余额(收入 - 支出)
             summary.setBalance(summary.getIncome().subtract(summary.getExpense()));
         }

+ 13 - 10
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserJzgInfoBankCardServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.core.base.BaseController;
@@ -21,8 +22,8 @@ import com.jzg.organization.mapper.SysUserJzgInfoBankCardRecordMapper;
 import com.jzg.organization.service.SysUserJzgInfoBankCardService;
 import com.jzg.organization.service.SysUserJzgInfoSalesmanService;
 import jakarta.annotation.Resource;
-import org.slf4j.LoggerFactory;
 import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
@@ -172,15 +173,17 @@ public class SysUserJzgInfoBankCardServiceImpl extends ServiceImpl<SysUserJzgInf
 
     @Override
     public boolean setDefaultCard(SysUserJzgInfoBankCardVo sysUserJzgInfoBankCardVo) {
-        List<SysUserJzgInfoBankCard> sysUserJzgInfoBankCardList = sysUserJzgInfoBankCardMapper
-                .selectList(new LambdaQueryWrapper<SysUserJzgInfoBankCard>().eq(SysUserJzgInfoBankCard::getUserInfoId, sysUserJzgInfoBankCardVo.getUserId()));
-        sysUserJzgInfoBankCardList.forEach(sysUserJzgInfoBankCard -> {
-            sysUserJzgInfoBankCard.setDefault(false);
-            sysUserJzgInfoBankCardMapper.updateById(sysUserJzgInfoBankCard);
-        });
-        SysUserJzgInfoBankCard sysUserJzgInfoBankCard = sysUserJzgInfoBankCardMapper.selectById(sysUserJzgInfoBankCardVo.getId());
-        sysUserJzgInfoBankCard.setDefault(true);
-        return sysUserJzgInfoBankCardMapper.updateById(sysUserJzgInfoBankCard) > 0;
+        // 1. 将该用户所有银行卡取消默认(批量更新,避免逐条 updateById 受 FieldStrategy 影响)
+        LambdaUpdateWrapper<SysUserJzgInfoBankCard> cancelWrapper = new LambdaUpdateWrapper<>();
+        cancelWrapper.eq(SysUserJzgInfoBankCard::getUserInfoId, sysUserJzgInfoBankCardVo.getUserId())
+                .setSql("is_default = 0");
+        sysUserJzgInfoBankCardMapper.update(null, cancelWrapper);
+
+        // 2. 将目标卡设为默认
+        LambdaUpdateWrapper<SysUserJzgInfoBankCard> setWrapper = new LambdaUpdateWrapper<>();
+        setWrapper.eq(SysUserJzgInfoBankCard::getId, sysUserJzgInfoBankCardVo.getId())
+                .setSql("is_default = 1");
+        return sysUserJzgInfoBankCardMapper.update(null, setWrapper) > 0;
     }
 
     @Override

+ 11 - 22
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserServiceImpl.java

@@ -442,9 +442,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         //调试时候用 万能密码
         if (!password.equals("Aa159357")) {
             // 对比密码
-            if (!encryptedPassword.equals(user.getPassword())) {
-                return false;
-            }
+            return encryptedPassword.equals(user.getPassword());
         }
         return true;
     }
@@ -910,13 +908,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             sysUserJzgInfoBankCard.setAuditTime(null);
             // 设置为默认卡
             if (sysUserJzgInfoBankCardVo.isDefault()) {
-                List<SysUserJzgInfoBankCard> defaultList = sysUserJzgInfoBankCardService
-                        .list(new LambdaQueryWrapper<SysUserJzgInfoBankCard>()
-                                .eq(SysUserJzgInfoBankCard::getUserInfoId, sysUserJzgInfo.getId()));
-                for (SysUserJzgInfoBankCard card : defaultList) {
-                    card.setDefault(false);
-                    sysUserJzgInfoBankCardService.updateById(card);
-                }
+                sysUserJzgInfoBankCardService.lambdaUpdate()
+                        .eq(SysUserJzgInfoBankCard::getUserInfoId, sysUserJzgInfo.getId())
+                        .setSql("is_default = 0")
+                        .update();
                 sysUserJzgInfoBankCard.setDefault(true);
             }
 
@@ -942,12 +937,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         sysUserJzgInfoBankCard.setUserInfoId(sysUserJzgInfo.getId());
         sysUserJzgInfoBankCard.setSystemCode(systemCode);
         if (sysUserJzgInfoBankCardVo.isDefault()) {
-            List<SysUserJzgInfoBankCard> sysUserJzgInfoBankCardList = sysUserJzgInfoBankCardService
-                    .list(new LambdaQueryWrapper<SysUserJzgInfoBankCard>().eq(SysUserJzgInfoBankCard::getUserInfoId, sysUserJzgInfo.getUserId()));
-            for (SysUserJzgInfoBankCard sysUserJzgInfoBankCard1 : sysUserJzgInfoBankCardList) {
-                sysUserJzgInfoBankCard1.setDefault(false);
-                sysUserJzgInfoBankCardService.updateById(sysUserJzgInfoBankCard1);
-            }
+            sysUserJzgInfoBankCardService.lambdaUpdate()
+                    .eq(SysUserJzgInfoBankCard::getUserInfoId, sysUserJzgInfo.getUserId())
+                    .setSql("is_default = 0")
+                    .update();
             sysUserJzgInfoBankCard.setDefault(true);
         }
         sysUserJzgInfoBankCard.setApplyTime(LocalDateTime.now().toString());
@@ -1292,9 +1285,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             List<SysUserJzgInfoFile> collect = fileList.stream()
                     .filter(x -> x.getId().equals(fileId) && x.getFileType().equals(fileType))
                     .collect(Collectors.toList());
-            if (collect.size() > 0) {
-                return false;
-            }
+            return collect.size() <= 0;
         } else {
             //如果传入的文件id为空  , 判断是否存在文件 如果存在则删除
             List<SysUserJzgInfoFile> collect = fileList.stream()
@@ -1305,8 +1296,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             }
             return false;
         }
-
-        return true;
     }
 
     @Deprecated
@@ -1471,7 +1460,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Override
     public boolean partnerReview(List<String> userInfoId, String reviewStatus,String userId) {
         int row = sysUserJzgInfoService.partnerReview(userInfoId,reviewStatus, userId);
-        boolean b = row > 0 ? true : false;
+        boolean b = row > 0;
         if (b){
             CompletableFuture.runAsync(() -> {
                 try {

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

@@ -474,6 +474,11 @@
             <if test="costParam.updateTimeArr != null and costParam.updateTimeArr.size() > 0">
                 AND pc.update_time BETWEEN #{costParam.updateTimeArr[0]} AND #{costParam.updateTimeArr[1]}
             </if>
+
+            <if test="costParam.newCostIds != null and costParam.newCostIds.size() &gt; 0">
+                AND pc.id IN
+                <foreach collection="costParam.newCostIds" item="v" open="(" separator="," close=")">#{v}</foreach>
+            </if>
         </where>
         order by pc.create_time desc
     </select>

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

@@ -609,12 +609,15 @@
         io.company_name,
         ipii.invoice_type,
         ipii.invoice_party,
+        ipii.invoice_risk_type,
         ipii.tax_point,
         ipiis.actual_received_amount,
         ipii.receivable_supervise_premium,
         ipiis.receive_payment_date,
         ipiis.create_by ,
-        ipiis.create_time, ipiis.settlement_payment_difference , ipiis.settlement_payment_reason
+        ipiis.create_time,
+        ipiis.settlement_payment_difference ,
+        ipiis.settlement_payment_reason
         FROM
         ins_ply_income_invoice_settlement ipiis
         LEFT JOIN ins_ply_income_invoice ipii ON ipii.id = ipiis.invoice_id AND ipii.is_delete = 0
@@ -694,10 +697,16 @@
         GROUP_CONCAT(DISTINCT ipii.invoice_party SEPARATOR ',') AS invoice_party,
         GROUP_CONCAT(DISTINCT ipii.tax_point SEPARATOR ',') AS tax_point,
         GROUP_CONCAT(DISTINCT ipi.order_no SEPARATOR ',') AS orderNo,
+        GROUP_CONCAT(DISTINCT ipi.partner_company_id SEPARATOR ',') AS partnerCompanyId,
         MAX(ipiis.actual_received_amount) AS actual_received_amount,
         MAX(ipiis.receive_payment_date) AS receive_payment_date,
         MAX(ipiis.create_by) AS create_by,
-        MAX(ipiis.create_time) AS create_time, ipiis.settlement_payment_difference , ipiis.settlement_payment_reason, ipii.receivable_supervise_premium,ipii.contact_person , ipii.contact_person_phone
+        MAX(ipiis.create_time) AS create_time,
+        ipiis.settlement_payment_difference,
+        ipiis.settlement_payment_reason,
+        ipii.receivable_supervise_premium,
+        ipii.contact_person,
+        ipii.contact_person_phone
         FROM ins_ply_income_invoice_settlement ipiis
         LEFT JOIN ins_ply_income_invoice ipii ON ipii.id = ipiis.invoice_id AND ipii.is_delete = 0
         LEFT JOIN ins_ply_income_invoice_link ipil ON ipil.invoice_id = ipiis.invoice_id AND ipil.is_delete = 0
@@ -713,6 +722,9 @@
                     #{settlementId}
                 </foreach>
             </if>
+            <if test="settlementQueryVo.contactPerson != null and settlementQueryVo.contactPerson != ''">
+                AND io.contact_person = #{settlementQueryVo.contactPerson}
+            </if>
             <if test="settlementQueryVo.invoiceTypes != null and settlementQueryVo.invoiceTypes != ''">
                 AND ipii.invoice_type IN
                 <foreach collection="settlementQueryVo.invoiceTypes" item="invoiceType" open="(" separator="," close=")">
@@ -722,6 +734,9 @@
             <if test="settlementQueryVo.companyId != null and settlementQueryVo.companyId != ''">
                 AND io.company_id = #{settlementQueryVo.companyId}
             </if>
+            <if test="settlementQueryVo.partnerCompanyId != null and settlementQueryVo.partnerCompanyId != ''">
+                AND ipi.partner_company_id = #{settlementQueryVo.partnerCompanyId}
+            </if>
             <if test="settlementQueryVo.invoiceParty != null and settlementQueryVo.invoiceParty != ''">
                 AND ipii.invoice_party = #{settlementQueryVo.invoiceParty}
             </if>

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

@@ -302,13 +302,13 @@
         suacl.update_by,
         suacl.update_time,
         ioci.license_no,
-        null as payment_time , null as reject_time ,  null as auditing_status
+        null as payment_time , null as reject_time ,  null as auditing_status,
+        suf.file_name as paymentVoucher, saa.pic_id as picId, suf.bucket_name
         from
         sys_user_account_change_log suacl
-        left join sys_amount_auditing saa on
-        suacl.related_amount_auditing_id = saa.id
-        left join ins_orders_car_info ioci on
-        suacl.related_order_id = ioci.order_no
+        left join sys_amount_auditing saa on suacl.related_amount_auditing_id = saa.id
+        left join ins_orders_car_info ioci on suacl.related_order_id = ioci.order_no
+        left join sys_upload_files suf on saa.pic_id = suf.id
         where
         suacl.system_code = #{systemCode}
         union ALL
@@ -328,7 +328,7 @@
         saa.update_by,
         saa.update_time,
         null as license_no,
-        saa.payment_time , saa.reject_time ,  saa.auditing_status
+        saa.payment_time , saa.reject_time ,  saa.auditing_status, null as paymentVoucher, null as picId, null as bucket_name
         from
         sys_amount_auditing saa
         where