Browse Source

Merge branch 'master' into wrq_dev

wangrq 2 months ago
parent
commit
e06ed889cf
40 changed files with 535 additions and 131 deletions
  1. 0 2
      commons/src/main/java/com/jzg/commons/config/MyBatisPlusConfig.java
  2. 10 1
      commons/src/main/java/com/jzg/commons/entity/account/po/SysUserAccountChangeLog.java
  3. 3 0
      commons/src/main/java/com/jzg/commons/entity/dto/LotteryCounDTO.java
  4. 8 0
      commons/src/main/java/com/jzg/commons/entity/finance/dto/ExportSuperviseSettlementDetailExcelDto.java
  5. 8 0
      commons/src/main/java/com/jzg/commons/entity/finance/dto/ExportSuperviseSettlementExcelDto.java
  6. 4 0
      commons/src/main/java/com/jzg/commons/entity/finance/dto/InsPlyIncomeDto.java
  7. 5 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/InvoiceRecordQueryVo.java
  8. 23 0
      commons/src/main/java/com/jzg/commons/entity/finance/vo/UpdateSettlementStatusVo.java
  9. 4 0
      commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/QuoteEchoVo.java
  10. 2 2
      commons/src/main/java/com/jzg/commons/entity/quote/vo/orders/InsOrdersVo.java
  11. 2 0
      commons/src/main/java/com/jzg/commons/entity/report/dto/ReportUploadExcelTaskDto.java
  12. 2 2
      commons/src/main/java/com/jzg/commons/entity/scheme/vo/PtlSchemeSaveVo.java
  13. 4 0
      commons/src/main/java/com/jzg/commons/entity/scheme/vo/SchemeResultVo.java
  14. 3 0
      commons/src/main/java/com/jzg/commons/entity/vo/SysUserAccountVo.java
  15. 22 0
      commons/src/main/java/com/jzg/commons/util/BigDecimalUtil.java
  16. 4 4
      tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/PremiumCalculationRequest.java
  17. 13 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/build/HuaTaiCrawlerQuoteResultsVoBuild.java
  18. 102 0
      tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/entity/Response/HtCrawlerQuoteResponse.java
  19. 2 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/aspect/QuoteVerificationAspect.java
  20. 1 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/client/LocalLivingClient.java
  21. 13 3
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsFeeOrderController.java
  22. 7 5
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  23. 3 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeOrdersServiceImpl.java
  24. 1 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  25. 1 0
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml
  26. 21 14
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/build/TaiShanCrawlerQuoteResultsVoBuild.java
  27. 36 11
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/component/TaiShanCrawlerRequestComponent.java
  28. 6 9
      tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/impl/TaiShanCrawlerRequestImpl.java
  29. 5 1
      tenant/insurance/quotation-yongcheng/src/main/java/com/jzg/quotation/yongcheng/api/entity/request/AuditRequest.java
  30. 12 0
      tenant/insurance/quotation-yongcheng/src/main/java/com/jzg/quotation/yongcheng/api/service/impl/YongChengApiRequestImpl.java
  31. 9 0
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/entity/Request/ZmCrawlerQuotedPriceRequest.java
  32. 1 1
      tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/service/Impl/ZhongMeiCrawlerRequestImpl.java
  33. 9 3
      tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java
  34. 2 2
      tenant/organization/src/main/java/com/jzg/organization/mapper/SysUserAccountIncomeLogMapper.java
  35. 2 2
      tenant/organization/src/main/java/com/jzg/organization/service/ReceivableService.java
  36. 100 55
      tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java
  37. 21 0
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysAmountAuditingServiceImpl.java
  38. 36 8
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserAccountServiceImpl.java
  39. 17 1
      tenant/organization/src/main/resources/mapper/PtlSchemeMapper.xml
  40. 11 2
      tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

+ 0 - 2
commons/src/main/java/com/jzg/commons/config/MyBatisPlusConfig.java

@@ -1,7 +1,5 @@
 package com.jzg.commons.config;
 
-
-import cn.hutool.json.JSONNull;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
 import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler;

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

@@ -71,7 +71,7 @@ public class SysUserAccountChangeLog extends BaseModel {
     }
 
     /**
-     * 操作类型 1 保单费用 2 保单提成 3. 提现
+     * 操作类型 1 保单费用 2 保单提成 3. 提现 4. 提现驳回
      */
     @ExcelIgnore
     @Schema(description = "操作类型")
@@ -87,6 +87,7 @@ public class SysUserAccountChangeLog extends BaseModel {
         operTypeMap.put(1,"保单费用");
         operTypeMap.put(2,"保单提成");
         operTypeMap.put(3,"提现");
+        operTypeMap.put(4,"提现驳回");
     }
 
     public String getOperTypeName(){
@@ -97,6 +98,14 @@ public class SysUserAccountChangeLog extends BaseModel {
     @Schema(description = "关联订单ID")
     private String relatedOrderId;
 
+    @ExcelIgnore
+    @Schema(description = "状态10有效20无效")
+    private String status;
+
+    @ExcelIgnore
+    @Schema(description = "费用审核关联id(sys_amount_auditing表的id)")
+    private String relatedAmountAuditingId;
+
 
     @ExcelIgnore
     @Schema(description = "转出银行卡的序号")

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

@@ -20,4 +20,7 @@ public class LotteryCounDTO implements Serializable {
 
     @Schema(description = "活动id")
     private String activityId;
+
+    @Schema(description = "本地生活用户手机号")
+    private String phone;
 }

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

@@ -49,6 +49,14 @@ public class ExportSuperviseSettlementDetailExcelDto {
     @ExcelProperty(value = "应收手续费")
     private String receivableSuperviseCosts;
 
+    @Schema(description = "车险手续费")
+    @ExcelProperty(value = "车险手续费")
+    private String superviseCostPremiums4Car;
+
+    @Schema(description = "非车手续费")
+    @ExcelProperty(value = "非车手续费")
+    private String jySuperviseCostsPremiums;
+
     @Schema(description = "交强保单号")
     @ExcelProperty(value = "交强保单号")
     private String jqPolicyNo;

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

@@ -44,6 +44,14 @@ public class ExportSuperviseSettlementExcelDto {
     @ExcelProperty(value = "应收项")
     private String invoiceType;
 
+    @Schema(description = "应收项(10车险20非车险)")
+    @ExcelProperty(value = "应收项(10车险20非车险)")
+    private String invoiceRiskType;
+
+    @Schema(description = "应收项(10车险20非车险)")
+    @ExcelProperty(value = "应收项(10车险20非车险)")
+    private String invoiceRiskTypeName;
+
     // 应收项转义
     @Schema(description = "应收项")
     @ExcelProperty(value = "应收项")

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

@@ -316,6 +316,10 @@ public class InsPlyIncomeDto extends BaseModel {
     @Schema(description = "订单关联的发票信息")
     private String invoiceId;
 
+    @TableField(exist = false)
+    @Schema(description = "1-手续费, 2-跟单费, 3-驾意险手续费, 4-驾意险跟单费, 5-平台应收-车险, 6-平台应收-非车险")
+    private String invoiceType;
+
     @TableField(exist = false)
     @Schema(description = "地区归属")
     private String companyNameSimple;

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

@@ -61,6 +61,11 @@ public class InvoiceRecordQueryVo extends PageRequest {
      */
     private String companyNameSimple;
 
+    /**
+     * 保险公司分支id
+     */
+    private String partnerCompanyId;
+
     /**
      * 租户代码
      */

+ 23 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/UpdateSettlementStatusVo.java

@@ -0,0 +1,23 @@
+package com.jzg.commons.entity.finance.vo;
+
+import com.jzg.commons.core.base.PageRequest;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author quchen
+ * @date 2025/7/31 17:59
+ */
+
+@Data
+public class UpdateSettlementStatusVo extends PageRequest {
+
+    @Schema(description = "开票id")
+    private String invoiceId;
+
+    @Schema(description = "回款原因")
+    private String settlementPaymentReason;
+
+}

+ 4 - 0
commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/QuoteEchoVo.java

@@ -56,6 +56,9 @@ public class QuoteEchoVo extends QuoteVo {
     private static class OrderBaseVo extends OrderBase{
         @Serial
         private static final long serialVersionUID = -9184896455541993138L;
+
+        private Integer entryStatus;
+
         private String orderStatus;
         private String companyName;
         private String productsName;
@@ -341,6 +344,7 @@ public class QuoteEchoVo extends QuoteVo {
         this.getOrder().setQuoteTime(insOrdersVo.getCreateTime());
         this.getOrder().setSigningTime(insOrdersVo.getPayTime());
         this.getOrder().setOrderType(insOrdersVo.getOrderType());
+        this.getOrder().setEntryStatus(insOrdersVo.getEntryStatus());
         this.setCiSpecialInfoVo(insOrdersVo.getSpecialInfoVo().stream().filter(companyClauseVo -> companyClauseVo.getRiskCode().equals("0507")).collect(Collectors.toList()));
         this.setBiSpecialInfoVo(insOrdersVo.getSpecialInfoVo().stream().filter(companyClauseVo -> companyClauseVo.getRiskCode().equals("0510")).collect(Collectors.toList()));
         Salesman salesman = new Salesman();

+ 2 - 2
commons/src/main/java/com/jzg/commons/entity/quote/vo/orders/InsOrdersVo.java

@@ -49,10 +49,10 @@ public class InsOrdersVo extends QuoteVo {
     private String agreementId;
 
     @Schema(description = "审核状态")
-    private byte auditStatus;
+    private Integer auditStatus;
 
     @Schema(description = "录入状态 1 车险录入 2 待客录单 3 外部订单")
-    private byte entryStatus;
+    private Integer entryStatus;
 
 
     @Schema(description = "审核内容")

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

@@ -67,4 +67,6 @@ public class ReportUploadExcelTaskDto implements Serializable {
      */
     @Schema(description = "已读未读状态  0.未读 1.已读")
     private Integer readStatus;
+    @Schema(description = "导出文件路径")
+    private String filePath;
 }

+ 2 - 2
commons/src/main/java/com/jzg/commons/entity/scheme/vo/PtlSchemeSaveVo.java

@@ -1,4 +1,4 @@
-package com.jzg.commons.entity.scheme.vo;
+    package com.jzg.commons.entity.scheme.vo;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.jzg.commons.constants.ProductsType;
@@ -276,7 +276,7 @@ public class PtlSchemeSaveVo {
     public List<PtlSchemeInsuranceDrivingIntention> getPtlSchemeInsuranceDrivingIntentionList(){
         List<PtlSchemeInsuranceDrivingIntention> ptlSchemeInsuranceDrivingIntentionList = new ArrayList<>();
         for (Scheme scheme : schemeList) {
-            scheme.getDrivingList().forEach(drivingIntention -> {
+            scheme.getDrivingIntentionList().forEach(drivingIntention -> {
                 PtlSchemeInsuranceDrivingIntention ptlSchemeInsuranceDrivingIntention = new PtlSchemeInsuranceDrivingIntention();
                 ptlSchemeInsuranceDrivingIntention.setId(IdGenerate.nextId());
                 ptlSchemeInsuranceDrivingIntention.setSchemeInfoId(scheme.getId());

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

@@ -1,5 +1,6 @@
 package com.jzg.commons.entity.scheme.vo;
 
+import com.jzg.commons.entity.po.jyxSetting;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -107,6 +108,7 @@ public class SchemeResultVo {
          * 产品分类编码
          */
         private String productCategoryName;
+        private String premiumSetting;
         private String alias;
         private String coverage;
         private String sumAmount;
@@ -115,5 +117,7 @@ public class SchemeResultVo {
         private String selectedStatus;
         private Integer minSeatCount;
         private Integer maxSeatCount;
+
+        List<jyxSetting> settingList;
     }
 }

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

@@ -43,6 +43,9 @@ public class SysUserAccountVo extends BaseModel {
     @Schema(description = "已付总金额")
     private BigDecimal sumAmountPaid;
 
+    @Schema(description = "支付中金额")
+    private BigDecimal payingAmount;
+
     @Schema(description = "未付总金额")
     private BigDecimal sumAmountUnpaid;
 

+ 22 - 0
commons/src/main/java/com/jzg/commons/util/BigDecimalUtil.java

@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.List;
+import java.util.Objects;
 
 
 /**
@@ -55,6 +56,27 @@ public class BigDecimalUtil {
         return sum;
     }
 
+    /**
+     *
+     * @author lipf
+     * @date 2026/7/1 14:58
+     */
+    public static String add(String ... v1s){
+        if (v1s == null || v1s.length == 0) {
+            return Objects.toString(BigDecimal.ZERO);
+        }
+        BigDecimal sum = BigDecimal.ZERO;
+        BigDecimal temp = BigDecimal.ZERO;
+        for (String v1 : v1s) {
+            if(StrUtil.isNotEmpty(v1)){
+                temp = new BigDecimal(v1);
+            }
+            sum = BigDecimalUtil.add(sum,temp);
+            temp = BigDecimal.ZERO;
+        }
+        return sum.toString();
+    }
+
     /**
      * 提供精确的加法运算
      * @param v1 被加数

+ 4 - 4
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/entity/request/PremiumCalculationRequest.java

@@ -786,11 +786,11 @@ public class PremiumCalculationRequest {
                 }
                 // 绝对免赔
                 else if (kindCode.equals("FA") || kindCode.equals("FB") || kindCode.equals("FD11") || kindCode.equals("FD12")) {
-                    kind.quantity = Integer.valueOf(kindInfoVo.getDeductibleRate());
-                    kind.sumInsured = new BigDecimal(kindInfoVo.getDeductibleRate());
+                    kind.quantity = Integer.valueOf(kindInfoVo.getAmount());
+                    kind.sumInsured = new BigDecimal(kindInfoVo.getAmount());
                 } else if (kindCode.equals("S1") || kindCode.equals("S2") || kindCode.equals("S3") || kindCode.equals("S4")) {
-                    kind.quantity = Integer.valueOf(kindInfoVo.getServiceTimes());
-                    kind.sumInsured = new BigDecimal(kindInfoVo.getServiceTimes());
+                    kind.quantity = Integer.valueOf(kindInfoVo.getAmount());
+                    kind.sumInsured = new BigDecimal(kindInfoVo.getAmount());
                 } else if (KindCodeEnum.KCE_01.getKindCode().equals(kindCode)) {
                     kind.sumInsured = actualValue;
                 } else {

+ 13 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/build/HuaTaiCrawlerQuoteResultsVoBuild.java

@@ -14,6 +14,9 @@ import com.jzg.quotation.commons.constant.enums.quote.RenewalEnum;
 import com.jzg.quotation.huatai.api.constant.enums.ContractEnum;
 import com.jzg.quotation.huatai.crawler.entity.Response.HtCrawlerQuoteResponse;
 
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -24,14 +27,24 @@ import java.util.stream.Collectors;
  * @date: 2025/4/22 11:06
  **/
 public class HuaTaiCrawlerQuoteResultsVoBuild {
+    private static final String DATE_FMT = "yyyy-MM-dd HH:mm:ss";
     public static QuoteResultsVo buildQuoteResultsVo(QuoteVo quoteVo, HtCrawlerQuoteResponse.DataDTO quoteResponseData, String niPremium) {
         OrderBase orderBase = quoteVo.getOrder();
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
         quoteResultsVo.setOrdersNo(orderBase.getOrdersNo());
         // 交强险
         quoteResultsVo.setCiRiskInfoVo(buildCiRiskInfoVo(quoteResponseData, quoteVo));
+        quoteResultsVo.setCiStartDate(quoteResultsVo.getCiRiskInfoVo().getStartDate());
+        quoteResultsVo.setCiEndDate(quoteResultsVo.getCiRiskInfoVo().getEndDate());
         // 商业险
         quoteResultsVo.setBiRiskInfoVo(buildBiRiskInfoVo(quoteResponseData, quoteVo));
+        if(quoteResultsVo.getBiRiskInfoVo() != null) {
+            quoteResultsVo.setBiStartDate(quoteResultsVo.getBiRiskInfoVo().getStartDate());
+            // quoteResultsVo.setBiEndDate(quoteResultsVo.getBiRiskInfoVo().getEndDate());
+            LocalDateTime dt = LocalDateTime.parse(quoteResultsVo.getBiRiskInfoVo().getStartDate(), DateTimeFormatter.ofPattern(DATE_FMT));
+            dt = dt.plusYears(1).minusDays(1).with(LocalTime.MAX);
+            quoteResultsVo.setBiEndDate(dt.format(DateTimeFormatter.ofPattern(DATE_FMT)));
+        }
         // 商业险种的详细保费
         quoteResultsVo.setKindInfoVo(quoteVo.getKindInfoVo());
         // 商业险险种信息

+ 102 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/entity/Response/HtCrawlerQuoteResponse.java

@@ -332,47 +332,149 @@ public class HtCrawlerQuoteResponse implements Serializable {
                 @Serial
                 private static final long serialVersionUID = -2573582333838228647L;
 
+                /**
+                 * 附加费率
+                 */
                 private String additionrate;
+                /**
+                 * 调整系数
+                 */
                 private String adjustrate;
+                /**
+                 * 基准保费
+                 */
                 private String basedpremium;
+                /**
+                 * 基本保费
+                 */
                 private String basicpremium;
+                /**
+                 * 基础风险保费
+                 */
                 private String basicriskpremiums;
+                /**
+                 * 基准保费
+                 */
                 private String benchmarkpremiums;
+                /**
+                 * 计算公式
+                 */
                 private String calculation;
+                /**
+                 * 险别代码(商业险)
+                 */
                 private String comcoveragecode;
+                /**
+                 * 险别代码
+                 */
                 private String coveragecode;
+                /**
+                 * 险别名称
+                 */
                 private String coveragename;
+                /**
+                 * 险别类型
+                 */
                 private String coveragetype;
+                /**
+                 * 币种
+                 */
                 private String currency;
+                /**
+                 * 免赔率
+                 */
                 private String deductiblerate;
+                /**
+                 * 折扣系数
+                 */
                 private String discount;
+                /**
+                 * 终保日期
+                 */
                 private String enddate;
+                /**
+                 * 是否不计免赔
+                 */
                 private String isnondeductible;
+                /**
+                 * 险别保费
+                 */
                 private String kindpremiun;
+                /**
+                 * 上年保单出单日期
+                 */
                 private String lastbilldate;
+                /**
+                 * 上年保单终保日期
+                 */
                 private String lastenddate;
+                /**
+                 * 上年保单起保日期
+                 */
                 private String laststartdate;
                 /**
                  * 保额
                  */
                 private String limitamount;
+                /**
+                 * 其他费率
+                 */
                 private String otherRate;
+                /**
+                 * 不含税保费
+                 */
                 private String premexcludevat;
+                /**
+                 * 利润系数
+                 */
                 private String profitscale;
+                /**
+                 * 数量
+                 */
                 private String quantity;
+                /**
+                 * 费率
+                 */
                 private String rate;
+                /**
+                 * 费率周期
+                 */
                 private String rateperiod;
+                /**
+                 * 重复投保标志
+                 */
                 private String reinsureflag;
+                /**
+                 * 序号
+                 */
                 private String serialno;
+                /**
+                 * 服务编码
+                 */
                 private String serviceCode;
+                /**
+                 * 服务名称
+                 */
                 private String serviceName;
+                /**
+                 * 服务次数
+                 */
                 private String serviceTimes;
+                /**
+                 * 短期费率
+                 */
                 private String shortrate;
                 /**
                  * 实际需要收取的保费
                  */
                 private String standardpremium;
+                /**
+                 * 起保日期
+                 */
                 private String startdate;
+                /**
+                 * 增值税
+                 */
                 private String vat;
             }
         }

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

@@ -479,7 +479,8 @@ public class QuoteVerificationAspect {
             // 如果是代客录单,出口比例减去一个百分比,也就是 0.01 2026年7月11日09:30:09
             exportPercent = BigDecimalUtil.subtract(exportPercent, new BigDecimal("0.01"));
             // 代客录单-1时,出口不够减的情况直接为0 add by lipf 2026年7月14日09:06:50
-            if(BigDecimal.ZERO.compareTo(exportPercent) <0){
+            if(BigDecimal.ZERO.compareTo(exportPercent) >0){
+                log.info("代客录单-1时,出口不够减的情况直接为0。exportPercent=[{}]",exportPercent);
                 exportPercent = new BigDecimal("0");
             }
         }

+ 1 - 1
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/client/LocalLivingClient.java

@@ -114,7 +114,7 @@ public interface LocalLivingClient {
      * @param lotteryCounDTO
      * @return
      */
-    @PostMapping("/localUserLotteryCount/add")
+    @PostMapping("/lottery/lotteryUserLotteryCount/add")
     HttpResult<LotteryCountVO> addLotteryCount(@RequestBody LotteryCounDTO lotteryCounDTO);
 
 

+ 13 - 3
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsFeeOrderController.java

@@ -1,6 +1,6 @@
 package com.jzg.quotation.summary.controller;
 
-import com.alibaba.fastjson.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.InsFeeOrdersParam;
 import com.jzg.commons.entity.po.InsFeeOrders;
@@ -8,6 +8,8 @@ import com.jzg.quotation.summary.entity.dto.RightsAmountUpdateDto;
 import com.jzg.quotation.summary.service.InsFeeOrdersService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -25,6 +27,8 @@ public class InsFeeOrderController {
     @Autowired
     private InsFeeOrdersService insFeeOrdersService;
 
+    private static final Logger log = LoggerFactory.getLogger(InsFeeOrderController.class);
+
     /**
      * 订单列表分页
      * @return
@@ -35,10 +39,16 @@ public class InsFeeOrderController {
         return insFeeOrdersService.getInsFeeOrdersList(param);
     }
 
+    /**
+     * 这个接口目前不能用, 后期可能会被废弃
+     *
+     * @author lipf
+     * @date 2026/7/15 16:08
+     */
     @PostMapping("/getInsFeeOrderByUserId")
     @Operation(summary = "订单费用列表通过用户id查询")
-    public List<InsFeeOrders> getInsFeeOrderByUserId(@RequestBody JSONObject param){
-        InsFeeOrdersParam insFeeOrdersParam = param.toJavaObject(InsFeeOrdersParam.class);
+    public List<InsFeeOrders> getInsFeeOrderByUserId(@RequestBody InsFeeOrdersParam insFeeOrdersParam){
+        log.info("订单费用列表通过用户id查询:insFeeOrdersParam=[{}],createTimeStart=[{}],createTimeEnd=[{}]", JSONUtil.toJsonStr(insFeeOrdersParam), insFeeOrdersParam.getCreateTimeStart(), insFeeOrdersParam.getCreateTimeEnd() );
         return insFeeOrdersService.getInsFeeOrderListByUserId(insFeeOrdersParam);
     }
 

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

@@ -419,6 +419,7 @@ public class UnifyOrderManager {
      * @param quoteVo 报价请求参数
      */
     private void handleQuoteLotteryActivity(QuoteVo quoteVo) {
+        log.info("进入营销活动报价抽奖,参数:{}",JSON.toJSONString(quoteVo));
         try {
             // 远程调用活动列表
             List<LocalLivingLotteryActivityVO> activities = queryLotteryActivities(lotteryScene);
@@ -452,7 +453,7 @@ public class UnifyOrderManager {
 
                     // 查询用户是否在一账通绑定过本地生活
                     HttpResult<UnifiedUserClientVO> bindResult = queryUserBind(userId,quoteUserId, tenantId);
-                    if (bindResult == null || bindResult.getCode() != 200 || bindResult.getData() == null) {
+                    if (bindResult == null || bindResult.getCode() != 0 || bindResult.getData() == null) {
                         // 未绑定:统计报价次数,满足条件则存本地记录
                         handleUnboundQuoteRule(tenantId, quoteUserId, activity, table);
                     } else {
@@ -535,7 +536,7 @@ public class UnifyOrderManager {
 
         MessageAddParam param = new MessageAddParam();
         param.setTitle("抽奖次数下发通知消息");
-        param.setContent("{\"eventId\":\"" + activity.getId() + "\",\"localActivityTableId\":\"" + table.getId() + "\",\"message\":\"抽奖次数奖励下发\"}");
+        param.setContent("{\"eventId\":\"" + activity.getId() + "\",\"localActivityTableId\":\"" + table.getId() + "\",\"message\":\"报价活动:抽奖次数奖励下发\"}");
         param.setTplCode("template_13");
         param.setReceive(List.of(userId));
         orgClient.messageAdd(param);
@@ -615,6 +616,7 @@ public class UnifyOrderManager {
         lotteryCounDTO.setAppUserId(userId);
         lotteryCounDTO.setActivityId(activity.getId());
         lotteryCounDTO.setCount(currentGrantNum);
+        lotteryCounDTO.setPhone(userId);
 
         HttpResult<LotteryCountVO> lotteryResult = null;
         try {
@@ -635,7 +637,7 @@ public class UnifyOrderManager {
             // 发送抽奖次数下发通知消息
             MessageAddParam param = new MessageAddParam();
             param.setTitle("抽奖次数下发通知消息");
-            param.setContent("{\"eventId\":\"" + activity.getId() + "\",\"localActivityTableId\":\"" + table.getId() + "\",\"message\":\"抽奖次数奖励下发\"}");
+            param.setContent("{\"eventId\":\"" + activity.getId() + "\",\"localActivityTableId\":\"" + table.getId() + "\",\"message\":\"报价活动:抽奖次数奖励下发\"}");
             param.setTplCode("template_13");
             param.setReceive(List.of(userId));
             orgClient.messageAdd(param);
@@ -1149,7 +1151,7 @@ public class UnifyOrderManager {
 
                 MessageAddParam param = new MessageAddParam();
                 param.setTitle("抽奖次数下发通知消息");
-                param.setContent("{\"eventId\":\"" + activity.getId() + "\",\"localActivityTableId\":\"" + table.getId() + "\",\"message\":\"抽奖次数奖励下发\"}");
+                param.setContent("{\"eventId\":\"" + activity.getId() + "\",\"localActivityTableId\":\"" + table.getId() + "\",\"message\":\"出单活动:抽奖次数奖励下发\"}");
                 param.setTplCode("template_13");
                 param.setReceive(List.of(userId));
                 orgClient.messageAdd(param);
@@ -1213,7 +1215,7 @@ public class UnifyOrderManager {
         if (lotteryResult != null && lotteryResult.getData().getSuccess()) {
             MessageAddParam param = new MessageAddParam();
             param.setTitle("抽奖次数下发通知消息");
-            param.setContent("{\"eventId\":\"" + activity.getId() + "\",\"localActivityTableId\":\"" + table.getId() + "\",\"message\":\"抽奖次数奖励下发\"}");
+            param.setContent("{\"eventId\":\"" + activity.getId() + "\",\"localActivityTableId\":\"" + table.getId() + "\",\"message\":\"出单活动:抽奖次数奖励下发\"}");
             param.setTplCode("template_13");
             param.setReceive(List.of(userId));
             orgClient.messageAdd(param);

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

@@ -449,7 +449,9 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
 
     @Override
     public List<InsFeeOrders> getInsFeeOrderListByUserId(InsFeeOrdersParam param) {
-        return insFeeOrdersMapper.getInsFeeOrderListByUserId(param);
+        List<InsFeeOrders> insFeeOrders = insFeeOrdersMapper.getInsFeeOrderListByUserId(param);
+        log.debug("查询费用信息:param=[{}]insFeeOrders.size=[{}]", JSONUtil.toJsonStr(param), CollUtil.size(insFeeOrders));
+        return insFeeOrders;
     }
 
     @Override

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

@@ -1329,6 +1329,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         log.info("根据orderNo=[{}]查询到的订单明细[{}]", ordersNo, JSONUtil.toJsonStr(insOrdersVo));
         AssertionUtils.isFail(Objects.isNull(insOrdersVo), "订单不存在");
         QuoteEchoVo resultVo = new QuoteEchoVo(insOrdersVo);
+        resultVo.setEntryStatus(insOrdersVo.getEntryStatus());
         //获取保司信息
         String companyId = insOrdersVo.getInsOrders().getCompanyId();
         HttpResult<EsmInsCompany> esmInsCompanyHttpResult = platformClient.findLogoById(companyId);

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

@@ -764,6 +764,7 @@
 
     <select id="getById" resultMap="InsOrdersVoMap">
         select id,
+        entry_status,
         quote_no,
         agreement_id,
         company_id,

+ 21 - 14
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/build/TaiShanCrawlerQuoteResultsVoBuild.java

@@ -56,7 +56,7 @@ public class TaiShanCrawlerQuoteResultsVoBuild {
             quoteResultsVo.setKindInfoVo(buildKindInfoVo(saveResponse, quoteVo));
         }
         // 交强保费 车船税 商业保费
-        buildPremium(quoteResultsVo, saveResponse);
+        buildPremium(quoteVo, quoteResultsVo, saveResponse);
 
         // 保司评分
         JSONArray scoreJson = new JSONArray();
@@ -193,28 +193,35 @@ public class TaiShanCrawlerQuoteResultsVoBuild {
      * @param quoteResultsVo
      * @param saveResponse
      */
-    private static void buildPremium(QuoteResultsVo quoteResultsVo, TaiShanCrawlerQuotationSaveResponse saveResponse) {
+    private static void buildPremium(QuoteVo quoteVo, QuoteResultsVo quoteResultsVo, TaiShanCrawlerQuotationSaveResponse saveResponse) {
         // 设置商业险保费
         if (Objects.nonNull(saveResponse.getResult().getBusinessInsurance())){
-            quoteResultsVo.getCosts().setBiPremium(String.valueOf(saveResponse.getResult().getBusinessInsurance().getProductInfo().getPremium()));
+            String biPremium = saveResponse.getResult().getBusinessInsurance().getProductInfo().getPremium();
+            quoteResultsVo.getCosts().setBiPremium(StringUtils.hasText(biPremium) ? biPremium : "0");
         }
         // 设置交强险保费
         if (Objects.nonNull(saveResponse.getResult().getCompulsoryInsurance())) {
-            quoteResultsVo.getCosts().setCiPremium(String.valueOf(saveResponse.getResult().getCompulsoryInsurance().getProductInfo().getPremium()));
+            String ciPremium = saveResponse.getResult().getCompulsoryInsurance().getProductInfo().getPremium();
+            quoteResultsVo.getCosts().setCiPremium(StringUtils.hasText(ciPremium) ? ciPremium : "0");
             // 设置车船税
-            quoteResultsVo.getCosts().setVvTax(String.valueOf(saveResponse.getResult().getCompulsoryInsurance().getCarShipTax().getSumTax()));
+            String vvTax = saveResponse.getResult().getCompulsoryInsurance().getCarShipTax().getSumTax();
+            quoteResultsVo.getCosts().setVvTax(StringUtils.hasText(vvTax) ? vvTax : "0");
         }
         //设置非车险(驾意险)保费
-        if (Objects.nonNull(saveResponse.getResult().getDiInsurance())) {//DiInsurance  驾乘人员意外伤害险 UN1 / UN2
-            quoteResultsVo.getCosts().setNiPremium(saveResponse.getResult().getDiInsurance().getPremium());
+        if (!quoteVo.getAccidentalDrivings().isEmpty() && Objects.nonNull(saveResponse.getResult().getDiInsurance())) {//DiInsurance  驾乘人员意外伤害险 UN1 / UN2
+            String diPremium = saveResponse.getResult().getDiInsurance().getPremium();
+            quoteResultsVo.getCosts().setNiPremium(StringUtils.hasText(diPremium) ? diPremium : "0");
         }
-        if (Objects.nonNull(saveResponse.getResult().getOpdInsurance())) {//OpdInsurance  车主门诊保险 0691_A
-            if (StringUtils.isNotBlank(quoteResultsVo.getCosts().getNiPremium())) {
-                BigDecimal diPremium = new BigDecimal(saveResponse.getResult().getDiInsurance().getPremium());
-                BigDecimal add = diPremium.add(new BigDecimal(saveResponse.getResult().getOpdInsurance().getPremium()));
-                quoteResultsVo.getCosts().setNiPremium(String.valueOf(add));
-            } else {
-                quoteResultsVo.getCosts().setNiPremium(saveResponse.getResult().getOpdInsurance().getPremium());
+        if (!quoteVo.getAccidentalDrivings().isEmpty() && Objects.nonNull(saveResponse.getResult().getOpdInsurance())) {//OpdInsurance  车主门诊保险 0691_A
+            String opdPremium = saveResponse.getResult().getOpdInsurance().getPremium();
+            if (StringUtils.hasText(opdPremium)) {
+                if (StringUtils.hasText(quoteResultsVo.getCosts().getNiPremium())) {
+                    BigDecimal diPremium = new BigDecimal(quoteResultsVo.getCosts().getNiPremium());
+                    BigDecimal add = diPremium.add(new BigDecimal(opdPremium));
+                    quoteResultsVo.getCosts().setNiPremium(add.toPlainString());
+                } else {
+                    quoteResultsVo.getCosts().setNiPremium(opdPremium);
+                }
             }
         }
         // 设置总费用

+ 36 - 11
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/component/TaiShanCrawlerRequestComponent.java

@@ -46,7 +46,8 @@ public class TaiShanCrawlerRequestComponent {
             HttpHeaders headers) {
         // 1. 请求体 JSON
         String jsonString = com.alibaba.fastjson.JSON.toJSONString(body);
-        log.info("请求内容 {}", jsonString);
+        log.info("泰山post请求地址 {}", requestUrl.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()));
+        log.info("泰山post请求内容 {}", jsonString);
         // 2. 执行 POST
         ResponseEntity<String> responseEntity =
                 requestComponent.post(
@@ -56,8 +57,7 @@ public class TaiShanCrawlerRequestComponent {
                         headers);
         // 3. 获取响应
         String responseBody = responseEntity.getBody();
-        log.info("post响应请求地址 {}", requestUrl.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()));
-        log.info("post响应内容 {}", responseBody);
+        log.info("泰山post响应内容 {}", responseBody);
         // 4. 反序列化
         Response response = com.alibaba.fastjson.JSON.parseObject(responseBody, responseClass);
 
@@ -75,6 +75,7 @@ public class TaiShanCrawlerRequestComponent {
             HttpHeaders headers) {
         // 1. 请求体 JSON
         String jsonString = com.alibaba.fastjson.JSON.toJSONString(body);
+        log.info("泰山post请求地址 {}", requestUrl.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()));
         log.info("请求内容 {}", jsonString);
         // 2. 执行 POST
         ResponseEntity<String> responseEntity =
@@ -86,7 +87,7 @@ public class TaiShanCrawlerRequestComponent {
         // 3. 获取响应
         String responseBody = responseEntity.getBody();
 
-        log.info("响应内容 {}", responseBody);
+        log.info("泰山post响应内容 {}", responseBody);
         // 4. 反序列化
         Response response = com.alibaba.fastjson.JSON.parseObject(responseBody, responseClass);
 
@@ -104,7 +105,7 @@ public class TaiShanCrawlerRequestComponent {
             HttpHeaders headers) {
         // 1. 请求体 JSON
         String jsonString = com.alibaba.fastjson.JSON.toJSONString(body);
-        log.info("请求内容 {}", jsonString);
+        log.info("泰山postCheck请求内容 {}", jsonString);
         // 2. 执行 POST
         ResponseEntity<String> responseEntity =
                 requestComponent.post(
@@ -115,7 +116,7 @@ public class TaiShanCrawlerRequestComponent {
         // 3. 获取响应
         String responseBody = responseEntity.getBody();
 
-        log.info("响应内容 {}", responseBody);
+        log.info("泰山postCheck响应内容 {}", responseBody);
         // 4. 反序列化
         Response response = com.alibaba.fastjson.JSON.parseObject(responseBody, responseClass);
 
@@ -137,6 +138,7 @@ public class TaiShanCrawlerRequestComponent {
             param = RequestObjectConversion.convertMultiValueStringMap(body);
         }
         // 2. 执行 POST
+        log.info("泰山get请求地址 {}", requestUrl.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()) + path);
         ResponseEntity<String> responseEntity =
                 requestComponent.baseGet(
                         requestUrl.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()) + path,
@@ -146,7 +148,7 @@ public class TaiShanCrawlerRequestComponent {
         // 3. 获取响应
         String responseBody = responseEntity.getBody();
 
-        log.info("响应内容 {}", responseBody);
+        log.info("泰山get响应内容 {}", responseBody);
         // 4. 反序列化
         Response response = com.alibaba.fastjson.JSON.parseObject(responseBody, responseClass);
 
@@ -176,8 +178,8 @@ public class TaiShanCrawlerRequestComponent {
                         headers);
         // 3. 获取响应
         String responseBody = responseEntity.getBody();
-        log.info("get响应请求地址 {}", requestUrl.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()));
-        log.info("get响应内容 {}", responseBody);
+        log.info("泰山get响应请求地址 {}", requestUrl.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()));
+        log.info("泰山get响应内容 {}", responseBody);
         // 4. 反序列化
         Response response = com.alibaba.fastjson.JSON.parseObject(responseBody, responseClass);
 
@@ -243,7 +245,7 @@ public class TaiShanCrawlerRequestComponent {
     public TaiShanCrawlerCarResponse queryCarModelsWithCheck(TaiShanCrawlerCarRequest request, HttpHeaders headers) {
         // 1. 请求体 JSON
         String jsonString = com.alibaba.fastjson.JSON.toJSONString(request);
-        log.info("车型搜索参数:{}", jsonString);
+        log.info("泰山车型搜索参数:{}", jsonString);
         // 2. 执行 POST
         ResponseEntity<String> responseEntity;
         try {
@@ -312,8 +314,10 @@ public class TaiShanCrawlerRequestComponent {
      * @return TaiShanCrawlerQuotationResponse
      */
     public TaiShanCrawlerQuotationResponse quotation(TaiShanCrawlerQuotationRequest request, HttpHeaders headers, int repeatNumber) {
+        log.info("泰山报价请求内容 {}", request);
+        log.info("泰山报价请求地址 {}", RequestUrl.PRICE.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()));
         TaiShanCrawlerQuotationResponse response = post(RequestUrl.PRICE, request, TaiShanCrawlerQuotationResponse.class, headers);
-
+        log.info("泰山报价响应内容 {}", response);
         if (response.getResult() == null) {
             throw new SystemException(response.getMessage() != null ? response.getMessage() : "报价接口返回异常,result为空");
         }
@@ -341,7 +345,10 @@ public class TaiShanCrawlerRequestComponent {
      * @return TaiShanCrawlerQuotationSaveResponse
      */
     public TaiShanCrawlerQuotationSaveResponse saveQuotation(TaiShanCrawlerQuotationRequest request, HttpHeaders headers) {
+        log.info("泰山保存报价请求内容 {}", request);
+        log.info("泰山保存报价请求地址 {}", RequestUrl.SAVE.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()));
         TaiShanCrawlerQuotationSaveResponse response = post(RequestUrl.SAVE, request, TaiShanCrawlerQuotationSaveResponse.class, headers);
+        log.info("泰山保存报价响应内容 {}", response);
         return response;
     }
 
@@ -354,7 +361,10 @@ public class TaiShanCrawlerRequestComponent {
      * @return TaiShanCrawlerUnderwritingResponse
      */
     public TaiShanCrawlerUnderwritingResponse underwriting(TaiShanCrawlerUnderwritingRequest request, HttpHeaders headers) {
+        log.info("泰山核保请求内容 {}", request);
+        log.info("泰山核保请求地址 {}", RequestUrl.UNDERWRITING.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()));
         TaiShanCrawlerUnderwritingResponse response = get(RequestUrl.UNDERWRITING, request, TaiShanCrawlerUnderwritingResponse.class, headers,"");
+        log.info("泰山核保响应内容 {}", response);
         return response;
     }
 
@@ -366,7 +376,10 @@ public class TaiShanCrawlerRequestComponent {
      * @return TaiShanCrawlerImageUploadResponse
      */
     public TaiShanCrawlerImageUploadResponse uploadImage(TaiShanCrawlerImageUploadRequest request, HttpHeaders headers){
+        log.info("泰山上传影像件请求内容 {}", request);
+        log.info("泰山上传影像件请求地址 {}", RequestUrl.UPLOAD_IMAGE.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()));
         TaiShanCrawlerImageUploadResponse response = post(RequestUrl.UPLOAD_IMAGE, request, TaiShanCrawlerImageUploadResponse.class, headers);
+        log.info("泰山上传影像件响应内容 {}", response);
         return response;
     }
 
@@ -379,7 +392,10 @@ public class TaiShanCrawlerRequestComponent {
      * @return TaiShanCrawlerPaymentCardResponse
      */
     public TaiShanCrawlerPaymentCardResponse getPaymentCard(TaiShanCrawlerPaymentCardRequest request, HttpHeaders headers) {
+        log.info("泰山获取支付卡请求内容 {}", request);
+        log.info("泰山获取支付卡请求地址 {}", RequestUrl.PAYMENT_CARD.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()));
         TaiShanCrawlerPaymentCardResponse response = get(RequestUrl.PAYMENT_CARD, request, TaiShanCrawlerPaymentCardResponse.class, headers,"");
+        log.info("泰山获取支付卡响应内容 {}", response);
         return response;
     }
 
@@ -392,7 +408,10 @@ public class TaiShanCrawlerRequestComponent {
      * @return TaiShanCrawlerRiskManagementResponse
      */
     public TaiShanCrawlerRiskManagementResponse getRiskManagement(TaiShanCrawlerRiskManagementRequest request, HttpHeaders headers) {
+        log.info("泰山风险管控请求内容 {}", request);
+        log.info("泰山风险管控请求地址 {}", RequestUrl.RISK_MANAGEMENT.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()));
         TaiShanCrawlerRiskManagementResponse response = get(RequestUrl.RISK_MANAGEMENT, request, TaiShanCrawlerRiskManagementResponse.class, headers,"");
+        log.info("泰山风险管控响应内容 {}", response);
         return response;
     }
 
@@ -404,7 +423,10 @@ public class TaiShanCrawlerRequestComponent {
      * @return TaiShanCrawlerOrderQueryResponse
      */
     public TaiShanCrawlerOrderQueryResponse queryOrderStatus(TaiShanCrawlerOrderQueryRequest request, HttpHeaders headers) {
+        log.info("泰山查询订单状态请求内容 {}", request);
+        log.info("泰山查询订单状态请求地址 {}", RequestUrl.QUERY_ORDER_STATUS.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()));
         TaiShanCrawlerOrderQueryResponse response = post(RequestUrl.QUERY_ORDER_STATUS, request, TaiShanCrawlerOrderQueryResponse.class, headers);
+        log.info("泰山查询订单状态响应内容 {}", response);
         return response;
     }
 
@@ -416,7 +438,10 @@ public class TaiShanCrawlerRequestComponent {
      * @return TaiShanCrawlerDownLoadPolicyResponse
      */
      public TaiShanCrawlerDownLoadPolicyResponse downloadPolicy(TaiShanCrawlerDownLoadPolicyRequest request, HttpHeaders headers) {
+         log.info("泰山下载电子保单请求内容 {}", request);
+         log.info("泰山下载电子保单请求地址 {}", RequestUrl.ELECTRON_POLICY_IO_DOWNLOAD.getRequestUrl(taiShanCrawlerProperties.getBaseUrl()));
          TaiShanCrawlerDownLoadPolicyResponse response = get(RequestUrl.ELECTRON_POLICY_IO_DOWNLOAD, request, TaiShanCrawlerDownLoadPolicyResponse.class, headers,null);
+         log.info("泰山下载电子保单响应内容 {}", response);
          return response;
     }
 

+ 6 - 9
tenant/insurance/quotation-taishan/src/main/java/com/jzg/quotation/taishan/crawler/service/impl/TaiShanCrawlerRequestImpl.java

@@ -2,6 +2,7 @@ package com.jzg.quotation.taishan.crawler.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
@@ -410,21 +411,14 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
 
         UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
         if ("200".equals(taiShanCrawlerUnderwritingResponse.getCode())) {
+            log.info("TaiShan-taiShanCrawlerUnderwritingResponse:{}", JSONObject.toJSONString(taiShanCrawlerUnderwritingResponse));
             String retMsg = "";
             TaiShanCrawlerUnderwritingResponse.Result result = taiShanCrawlerUnderwritingResponse.getResult();
             if(result != null){
                 retMsg = result.getRetMsg();
             }
-            log.info("TaiShan-retMsg:{}", JSON.toJSONString(retMsg));
             if(org.apache.commons.lang3.StringUtils.isNotBlank(retMsg)){
-                if(retMsg.contains("重新提交")){
-                    underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
-//                    StringBuilder sb = new StringBuilder();
-//                    if (null != taiShanCrawlerUnderwritingResponse.getMessage()) {
-//                        sb.append(String.format("错误信息:%s", taiShanCrawlerUnderwritingResponse.getMessage()));
-//                    }
-                    underwritingResultsVo.setUnderwritingResult(retMsg);
-                }else if(retMsg.contains("核保通过")){
+                if(retMsg.contains("核保通过")){
                     //核保成功
                     underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
                     underwritingResultsVo.setJqApplyNo(taiShanCrawlerUnderwritingResponse.getResult().getJqAppNo());
@@ -435,6 +429,9 @@ public class TaiShanCrawlerRequestImpl implements TaiShanCrawlerRequest {
                     paymentLinkVo.setOrder(underwritingVo.getOrder());
                     PaymentLinkResultsVo paymentLinkResultsVo = getPaymentLink(paymentLinkVo);
                     underwritingResultsVo.setPaymentLink(paymentLinkResultsVo.getPaymentLink());
+                }else {
+                    underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
+                    underwritingResultsVo.setUnderwritingResult(retMsg);
                 }
             }
         } else {//核保失败

+ 5 - 1
tenant/insurance/quotation-yongcheng/src/main/java/com/jzg/quotation/yongcheng/api/entity/request/AuditRequest.java

@@ -384,6 +384,10 @@ public class AuditRequest {
                 condition.setSyFlag("1");
             }
         });
+        //设置驾意险标志
+        if(underwritingVo.getInsOrdersAccidentalDriving() != null){
+            condition.setYwFlag("1");
+        }
         condition.setCProdNoSY(condition.getSyFlag().equals("1") ? "0364" : "");
         condition.setCProdNoJQ(condition.getJqFlag().equals("1") ? "0326" : "");
         condition.setQuerySequenceNoSy(underwritingVo.getPolicy().getSyApplyNo());
@@ -399,6 +403,7 @@ public class AuditRequest {
         condition.setCPintubeLicenceNo("110");
         condition.setCPintubeTel("110");
         condition.setMaintenanceStaffCode("110");
+        condition.setYwFlag("1");
         //<condition>
 
         Condition.Customer customer = new Condition.Customer();
@@ -463,7 +468,6 @@ public class AuditRequest {
         r.setAuthorityData(configurationProperties.gainAuthorityDataXml());
         r.setCondition(condition);
 
-
         auditRequest.setRequestLabel(r);
 
 

+ 12 - 0
tenant/insurance/quotation-yongcheng/src/main/java/com/jzg/quotation/yongcheng/api/service/impl/YongChengApiRequestImpl.java

@@ -409,6 +409,17 @@ public class YongChengApiRequestImpl implements YongChengApiRequest {
             String cleanStr = ycRequestApiComponents.payCallback(callbackRequest,url);
             CallBackResponse response = CallBackResponse.buildCallBackParam(cleanStr);
             if (response.getResult().equals("0")) {
+                //判断人工处理和核保退回
+                if(orderStatusVo.getInsOrders().getOrderStatus().equals(InsOrderStatusEnum.STAFF_PROCESS.getCode().toString())){
+                    if(response.getJqstatus().equals("9")){
+                        orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.PAY_PENDING);
+                    }else if(response.getJqstatus().equals("0")){
+                        orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.STAFF_PROCESS);
+                    }else if(response.getJqstatus().equals(3)){
+                        orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.AUDIT_FAIL);
+                        orderStatusResultVo.setErrorMsg(response.getJqmessage());
+                    }
+                }
                 if(orderStatusVo.getInsOrders().getOrderStatus().equals(InsOrderStatusEnum.PAY_PENDING.getCode().toString())){
                     orderStatusResultVo = buildCallBackStatus(orderStatusVo, response.getJqstatus());
                     // 获取商业保单号
@@ -425,6 +436,7 @@ public class YongChengApiRequestImpl implements YongChengApiRequest {
                         orderStatusResultVo.setJyApplyNo(response.getYwPolicyAppNo());
                     }
                 }
+
             } else {
                 //失败原因
                 orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.AUDIT_FAIL);

+ 9 - 0
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/entity/Request/ZmCrawlerQuotedPriceRequest.java

@@ -27,6 +27,7 @@ import java.io.Serial;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 
 /**
@@ -1166,6 +1167,14 @@ public class ZmCrawlerQuotedPriceRequest extends BaseRequest {
                     this.totalAdjustRate = "";
                     this.totalPremium = "";
                     this.validDate = riskInfoVo.getStartDate();
+                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+                    if (!riskInfoVo.isInstantFlag() && riskInfoVo.getEndDate().endsWith("00:00:00")) {
+                        String endDate = riskInfoVo.getEndDate();
+                        LocalDateTime dateTime = LocalDateTime.parse(endDate, formatter);
+                        LocalDateTime minusOneSec = dateTime.minusSeconds(1);
+                        String newEndDate = minusOneSec.format(formatter);
+                        riskInfoVo.setEndDate(newEndDate);
+                    }
                     this.expiryDate = riskInfoVo.getEndDate();
                     this.argueSolution = "1";
                     if (riskInfoVo.isInstantFlag()) {

+ 1 - 1
tenant/insurance/quotation-zhongmei/src/main/java/com/jzg/quotation/zhongmei/crawler/service/Impl/ZhongMeiCrawlerRequestImpl.java

@@ -147,7 +147,7 @@ public class ZhongMeiCrawlerRequestImpl implements ZhongMeiCrawlerRequest {
                 contract.getContractMain().setValidDate(startTime);
                 contract.getContractMain().setExpiryDate(endTime);
                 // 判断是否是即时起保
-                if (!startTime.endsWith("00:00:00")) {
+                if (!endTime.endsWith("23:59:59")) {
                     contract.getContractMain().setReinsuranceFlag("1");
                 }
                 contract.getCoverage().forEach(coverageDTO -> {

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

@@ -641,6 +641,12 @@ public class ReceivableController {
         receivableService.exportPlatformSettlementExcel(page,settlementQueryVo);
     }
 
+    /**
+     * 应收手续费结算明细(车险/非车)
+     *
+     * @author lipf
+     * @date 2026/7/15 14:10
+     */
     @PostMapping("superviseSettlementDetailExcel")
     @Operation(summary = "应收手续费结算明细")
     public HttpResult superviseSettlementDetailExcel(@RequestBody SettlementQueryVo settlementQueryVo) {
@@ -759,13 +765,13 @@ public class ReceivableController {
     /**
      * 设置指定发票为结算完成状态
      *
-     * @param invoiceId 发票序号
+     * @param updateSettlementStatusVo 发票序号
      * @author lipf
      * @date 2026/6/11 9:33
      */
     @PostMapping("updateSettlementStatus")
-    public HttpResult<String> updateSettlementStatus(@RequestParam("id") String invoiceId){
-        int count = receivableService.updateSettlementStatus(invoiceId);
+    public HttpResult<String> updateSettlementStatus(@RequestBody UpdateSettlementStatusVo updateSettlementStatusVo){
+        int count = receivableService.updateSettlementStatus(updateSettlementStatusVo);
         if(count>0){
             return HttpResult.ok("订单被标记为结算完成");
         }else{

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

@@ -33,9 +33,9 @@ public interface SysUserAccountIncomeLogMapper extends BaseMapper<SysUserAccount
         left join ins_orders io
             on a.related_order_id = io.id
         left join sys_amount_auditing saa
-        on saa.user_id = a.user_id
+            on saa.id = a.related_amount_auditing_id
         where
-            a.user_id = #{ywyUserId} and a.create_time >= #{beginDate} and a.create_time < #{endDate} and a.is_delete = 0 order by a.create_time desc
+            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
         """)
     List<SysUserAccountChangeLog> queryYwyIORecs(String ywyUserId, LocalDate beginDate, LocalDate endDate);
 }

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

@@ -492,11 +492,11 @@ public interface ReceivableService extends IService<InsPlyIncome> {
     /**
      * 设置指定发票为结算完成状态
      *
-     * @param invoiceId 发票序号
+     * @param updateSettlementStatusVo 发票序号
      * @author lipf
      * @date 2026/6/11 9:33
      */
-    int updateSettlementStatus(String invoiceId);
+    int updateSettlementStatus(UpdateSettlementStatusVo updateSettlementStatusVo);
 
     /**
      * 平台协议结算

+ 100 - 55
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -768,10 +768,32 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             resultList.addAll(followAggVoList);
         }
 
-        // 3. 查询额外其他费用收入数据,补充到结果集
-        List<InsPlyIncomeDto> incomeDtoList = queryFollowIncomeData(settlementReportQueryVo);
-        if (CollUtil.isEmpty(incomeDtoList)) {
-            return resultList;
+        // 应收项为空时才去补充数据,不为空时不补充数据,补充数据是因为联查了invoice和settlement表,所以没开票和结算的数据会被过滤掉,才需要补充数据
+        List<InsPlyIncomeDto> incomeDtoList = CollUtil.newArrayList();
+        if (StrUtil.isBlank(settlementReportQueryVo.getInvoiceType())){
+            // 3. 查询额外其他费用收入数据,补充到结果集
+            incomeDtoList = queryFollowIncomeData(settlementReportQueryVo);
+            if (CollUtil.isEmpty(incomeDtoList)) {
+                return resultList;
+            }else{
+                // 如果JyPremium不为0,则设置发票类型为4
+                incomeDtoList.stream().forEach(item -> {
+                    if (StrUtil.isNotBlank(item.getJyPremium()) && !NumberUtil.equals(BigDecimal.ZERO, new BigDecimal(item.getJyPremium()))){
+                        item.setInvoiceType(InvoiceTypeEnum.FEE_4.getCode());
+                    }else{
+                        item.setInvoiceType(InvoiceTypeEnum.FEE_2.getCode());
+                    }
+                });
+                List<InsPlyIncomeDto> copyList = CollUtil.newArrayList();
+                // 如果有发票类型为4的,则复制一条4的数据,完全一致,但发票类型为2
+                incomeDtoList.stream().filter(item -> InvoiceTypeEnum.FEE_4.getCode().equals(item.getInvoiceType())).forEach(item -> {
+                    InsPlyIncomeDto incomeDto = new InsPlyIncomeDto();
+                    BeanUtils.copyProperties(item, incomeDto);
+                    incomeDto.setInvoiceType(InvoiceTypeEnum.FEE_2.getCode());
+                    copyList.add(incomeDto);
+                });
+                incomeDtoList.addAll(copyList);
+            }
         }
 
         // 4. 根据筛选条件过滤收入数据(发票、结算时间/状态过滤)
@@ -912,13 +934,6 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         return StrUtil.format("{}_{}_{}_{}", vo.getPartnerCompanyId(), vo.getYear(), vo.getMonth(), vo.getInvoiceType());
     }
 
-    /**
-     * 构建分组Key:partnerCompanyId_year_month
-     */
-    private String buildFillGroupKey(FollowCompanyFeeVO vo) {
-        return StrUtil.format("{}_{}_{}", vo.getPartnerCompanyId(), vo.getYear(), vo.getMonth());
-    }
-
     /**
      * 根据合作公司ID获取公司名称
      */
@@ -943,7 +958,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
      * 根据发票状态、开票时间、结算时间过滤收入数据
      * 优化:嵌套anyMatch改为HashMapID映射匹配,O(n²) -> O(n)
      */
-    private List<InsPlyIncomeDto> filterIncomeByInvoiceAndSettleCondition(List<InsPlyIncomeDto> incomeList, SettlementReportQueryVo queryVo) {
+    private List<InsPlyIncomeDto>  filterIncomeByInvoiceAndSettleCondition(List<InsPlyIncomeDto> incomeList, SettlementReportQueryVo queryVo) {
         String status = queryVo.getStatus();
         String invoiceStartTime = queryVo.getInvoiceStartTime();
         String invoiceEndTime = queryVo.getInvoiceEndTime();
@@ -1032,15 +1047,15 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         // 现有结果集Key缓存
         Map<String, FollowCompanyFeeVO> existVoMap = resultList.stream()
                 .collect(Collectors.toMap(
-                        this::buildFillGroupKey,
+                        this::buildGroupKey,
                         Function.identity(),
                         (oldVal, newVal) -> oldVal
                 ));
 
         // 收入分组
         Map<String, List<InsPlyIncomeDto>> incomeGroupMap = incomeList.stream()
-                .collect(Collectors.groupingBy(dto -> StrUtil.format("{}_{}_{}",
-                        dto.getPartnerCompanyId(), dto.getSignYear(), dto.getSignMonth())));
+                .collect(Collectors.groupingBy(dto -> StrUtil.format("{}_{}_{}_{}",
+                        dto.getPartnerCompanyId(), dto.getSignYear(), dto.getSignMonth(), dto.getInvoiceType())));
 
         for (Map.Entry<String, List<InsPlyIncomeDto>> entry : incomeGroupMap.entrySet()) {
             String groupKey = entry.getKey();
@@ -1049,15 +1064,27 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             String partnerCompanyId = firstDto.getPartnerCompanyId();
             String signYear = firstDto.getSignYear();
             String signMonth = firstDto.getSignMonth();
-
-            // 安全字符串转BigDecimal,兜底0
-            BigDecimal totalOtherReceivable = dtoList.stream()
-                    .map(dto -> {
-                        BigDecimal jq = safeBigDecimal(dto.getJqOtherCostsPremiums());
-                        BigDecimal sy = safeBigDecimal(dto.getSyOtherCostsPremiums());
-                        return jq.add(sy);
-                    })
-                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            String invoiceType = firstDto.getInvoiceType();
+
+            BigDecimal totalOtherReceivable = BigDecimal.ZERO;
+            if (InvoiceTypeEnum.FEE_2.getCode().equals(invoiceType)){
+                // 安全字符串转BigDecimal,兜底0
+                totalOtherReceivable = dtoList.stream()
+                        .map(dto -> {
+                            BigDecimal jq = safeBigDecimal(dto.getJqOtherCostsPremiums());
+                            BigDecimal sy = safeBigDecimal(dto.getSyOtherCostsPremiums());
+                            return jq.add(sy);
+                        })
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+            }else{
+                // 安全字符串转BigDecimal,兜底0
+                totalOtherReceivable = dtoList.stream()
+                        .map(dto -> {
+                            BigDecimal jy = safeBigDecimal(dto.getJyOtherCostsPremiums());
+                            return jy;
+                        })
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
 
             // 已存在直接跳过,不存在新建VO
             if (!existVoMap.containsKey(groupKey)) {
@@ -1066,6 +1093,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                 newVo.setYear(signYear);
                 newVo.setMonth(signMonth);
                 newVo.setTotalReceivable(totalOtherReceivable);
+                newVo.setInvoiceType(invoiceType);
                 newVo.setTotalInvoiced(BigDecimal.ZERO);
                 newVo.setTotalUnInvoiced(BigDecimal.ZERO);
                 newVo.setTotalSettlementAmount(BigDecimal.ZERO);
@@ -4535,16 +4563,19 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                         .map(InsPlyIncomeInvoiceSettlement::getActualReceivedAmount)
                         .filter(Objects::nonNull)
                         .reduce(BigDecimal.ZERO, BigDecimal::add);
-//                BigDecimal settlementPaymentDifference = insPlyIncomeInvoiceSettlements.stream()
-//                        .map(InsPlyIncomeInvoiceSettlement::getSettlementPaymentDifference)
-//                        .filter(Objects::nonNull)
-//                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+                BigDecimal settlementPaymentDifference = insPlyIncomeInvoiceSettlements.stream()
+                        .map(InsPlyIncomeInvoiceSettlement::getSettlementPaymentDifference)
+                        .filter(Objects::nonNull)
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
 
                 BigDecimal receivableSupervisePremium = action.getReceivableSupervisePremium()  != null ? action.getReceivableSupervisePremium(): BigDecimal.ZERO;
 
 //                BigDecimal overinflatedAmount = action.getOverinflatedAmount() != null? action.getOverinflatedAmount(): BigDecimal.ZERO;
                 // 回款差计算逻辑调整 2026年7月14日09:29:08
-                BigDecimal settlementPaymentDifference = BigDecimalUtil.subtract(settlementAmount,receivableSupervisePremium);
+//                BigDecimal settlementPaymentDifference = BigDecimal.ZERO;
+//                if (CollUtil.isNotEmpty(insPlyIncomeInvoiceSettlements) && settlementAmount.compareTo(BigDecimal.ZERO) > 0){
+//                    settlementPaymentDifference = BigDecimalUtil.subtract(settlementAmount,receivableSupervisePremium);
+//                }
                 // 待结算金额 = 开票金额 - 已收金额
                 BigDecimal remainSettlementAmount = receivableSupervisePremium.subtract(BigDecimalUtil.add(settlementAmount, settlementPaymentDifference));
                 // 设置已结算的金额
@@ -4554,7 +4585,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                     // 特殊梳理,当待结算金额计算出来为负数时, 设置为0
                     remainSettlementAmount = BigDecimal.ZERO;
                 }
-                action.setRemainSettlementAmount( remainSettlementAmount);
+                action.setRemainSettlementAmount(remainSettlementAmount);
                 action.setCompanyAllName(allCompanyHierarchyPaths.get(Objects.toString(action.getCompanyId(),"")));
                 action.setSettlementStatus(settlementStatusName);
 
@@ -4798,6 +4829,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                 case "6" -> dto.setInvoiceType("平台协议非车险应收");
             }
             dto.setInvoiceTypeName(Constant.invoiceRiskTypeMap.get(Objects.toString(dto.getInvoiceType())));
+            dto.setInvoiceRiskTypeName(Constant.invoiceRiskTypeMap.get(Objects.toString(dto.getInvoiceRiskType())));
             LambdaQueryWrapper<InsPlyIncomeInvoiceSettlementFile> wrapper = new LambdaQueryWrapper<InsPlyIncomeInvoiceSettlementFile>();
             List<InsPlyIncomeInvoiceSettlementFile> insPlyIncomeInvoiceSettlementFiles = insPlyIncomeInvoiceSettlementFileMapper.selectList(wrapper.eq(InsPlyIncomeInvoiceSettlementFile::getSettlementId, dto.getSettlementId()));
             if(CollUtil.isNotEmpty(insPlyIncomeInvoiceSettlementFiles)){
@@ -5339,30 +5371,29 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         List<CompanySuperviseSettlementReportDto> allCompaniesIncomeDatas = baseMapper.queryCumulativeAccountsReceivable(systemCode, queryVo);
         // 结算状态在上面的sql进行过筛选了,后面就不再筛选了
         queryVo.setStatus(null);
-        if("20".equals(queryVo.getAccountsReceivable())){
-            allCompaniesIncomeDatas = allCompaniesIncomeDatas.stream().peek(action->{
-                // 统计非车的手续费
-                action.setSuperviseFee(action.getSuperviseFee4Other());
-            }).toList();
-        }
-
-        // 车险
-//        if("10".equals(queryVo.getAccountsReceivable())){
-//            // 默认情况下,superviseFee 得到的就是车险的手续费
-//            allCompaniesIncomeDatas = allCompaniesIncomeDatas.stream().toList();
-//        }else if("20".equals(queryVo.getAccountsReceivable())){
+//        if("20".equals(queryVo.getAccountsReceivable())){
 //            allCompaniesIncomeDatas = allCompaniesIncomeDatas.stream().peek(action->{
 //                // 统计非车的手续费
-//              action.setSuperviseFee(action.getSuperviseFee4Other());
+//                action.setSuperviseFee(action.getSuperviseFee4Other());
 //            }).toList();
-//        }else if(StrUtil.isEmpty(queryVo.getAccountsReceivable())){
-//                // 统计总的手续费
-////            allCompaniesIncomeDatas = allCompaniesIncomeDatas.stream().peek(action->{
-////                // 统计非车的手续费
-////                action.setSuperviseFee(action.getTotalReceivable());
-////            }).toList();
 //        }
 
+        // 车险
+        if("10".equals(queryVo.getAccountsReceivable())){
+            // 默认情况下,superviseFee 得到的就是车险的手续费
+            allCompaniesIncomeDatas = allCompaniesIncomeDatas.stream().toList();
+        }else if("20".equals(queryVo.getAccountsReceivable())){
+            allCompaniesIncomeDatas = allCompaniesIncomeDatas.stream().peek(action->{
+                // 统计非车的手续费
+              action.setSuperviseFee(action.getSuperviseFee4Other());
+            }).toList();
+        }else if(StrUtil.isEmpty(queryVo.getAccountsReceivable())){
+                // 统计总的手续费(车险+非车险)
+            allCompaniesIncomeDatas = allCompaniesIncomeDatas.stream().peek(action->{
+                action.setSuperviseFee(BigDecimalUtil.add(action.getSuperviseFee(), action.getSuperviseFee4Other()));
+            }).toList();
+        }
+
         // for test, 查看一家公司的数据,将不可变对象变成 可变对象
 //        allCompaniesIncomeDatas = allCompaniesIncomeDatas.stream().filter(action-> "1738811735599338932".equals(action.getCompanyId())).toList();
 //        allCompaniesIncomeDatas = new ArrayList<>(allCompaniesIncomeDatas);
@@ -6090,11 +6121,14 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
      * 3. 记录更新人和更新时间
      * </p>
      *
-     * @param invoiceId 发票序号,用于定位需要更新的发票记录
+     * @param updateSettlementStatusVo 发票序号,用于定位需要更新的发票记录
      * @return int 返回受影响的记录数,通常为1表示更新成功,0表示更新失败或记录不存在
      */
     @Override
-    public int updateSettlementStatus(String invoiceId) {
+    public int updateSettlementStatus(UpdateSettlementStatusVo updateSettlementStatusVo) {
+        String invoiceId = updateSettlementStatusVo.getInvoiceId();
+        String settlementPaymentReason = updateSettlementStatusVo.getSettlementPaymentReason();
+
         String userName = baseController.getUserName();
         String systemCode = baseController.getSystemCode();
         log.info("租户[{}]下的用户[{}]标识发票[{}]为结算完成", systemCode, userName, invoiceId);
@@ -6106,10 +6140,21 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         BigDecimal settlementAmount =  insPlyIncomeInvoiceSettlements.stream().map(action-> BigDecimalUtil.add(action.getSettlementPaymentDifference(), action.getActualReceivedAmount()))
                 .reduce(BigDecimal.ZERO,BigDecimal::add);
         BigDecimal subtract = BigDecimalUtil.subtract(insPlyIncomeInvoice.getReceivableSupervisePremium(), settlementAmount);
-        if(subtract.compareTo(BigDecimal.ZERO) != 0){
-            InsPlyIncomeInvoiceSettlement insPlyIncomeInvoiceSettlement = insPlyIncomeInvoiceSettlements.get(0);
-            insPlyIncomeInvoiceSettlement.setSettlementPaymentDifference(BigDecimalUtil.add(subtract,insPlyIncomeInvoiceSettlement.getSettlementPaymentDifference()));
-            insPlyIncomeInvoiceSettlementMapper.updateById(insPlyIncomeInvoiceSettlement);
+        if (CollUtil.isNotEmpty(insPlyIncomeInvoiceSettlements)){
+            if(subtract.compareTo(BigDecimal.ZERO) != 0){
+                InsPlyIncomeInvoiceSettlement insPlyIncomeInvoiceSettlement = insPlyIncomeInvoiceSettlements.get(0);
+                insPlyIncomeInvoiceSettlement.setSettlementPaymentDifference(BigDecimalUtil.add(subtract,insPlyIncomeInvoiceSettlement.getSettlementPaymentDifference()));
+                insPlyIncomeInvoiceSettlement.setSettlementPaymentReason(settlementPaymentReason);
+                insPlyIncomeInvoiceSettlementMapper.updateById(insPlyIncomeInvoiceSettlement);
+            }
+        }else{
+            InsPlyIncomeInvoiceSettlement insPlyIncomeInvoiceSettlement = new InsPlyIncomeInvoiceSettlement();
+            insPlyIncomeInvoiceSettlement.setInvoiceId(invoiceId);
+            insPlyIncomeInvoiceSettlement.setReceivePaymentDate(new DateTime());
+            insPlyIncomeInvoiceSettlement.setActualReceivedAmount(BigDecimal.ZERO);
+            insPlyIncomeInvoiceSettlement.setSettlementPaymentDifference(BigDecimal.ZERO.subtract(insPlyIncomeInvoice.getReceivableSupervisePremium()));
+            insPlyIncomeInvoiceSettlement.setSettlementPaymentReason(settlementPaymentReason);
+            insPlyIncomeInvoiceSettlementMapper.insert(insPlyIncomeInvoiceSettlement);
         }
         return insPlyIncomeInvoiceMapper.update(null, new LambdaUpdateWrapper<InsPlyIncomeInvoice>()
                 .set(InsPlyIncomeInvoice::getStatus,"1")

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

@@ -298,6 +298,7 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
         changeLog.setRemark("提现");
         SysAmountAuditing sysAmountAuditing = baseMapper.selectById(param.getId());
         if(sysAmountAuditing != null){
+            changeLog.setRelatedAmountAuditingId(sysAmountAuditing.getId());
             String bankCardNum = sysAmountAuditing.getBankCardNum();
             List<SysUserJzgInfoBankCard> sysUserJzgInfoBankCards =  sysUserJzgInfoBankCardService.queryBankCardBybankCardNum(bankCardNum,systemCode);
             if(CollUtil.isNotEmpty(sysUserJzgInfoBankCards)){
@@ -348,6 +349,25 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
         audit.setRejectPerson(userName);
         audit.setRejectTime(LocalDateTime.now());
         this.updateById(audit);
+        this.saveChangeLog(audit,param);
+    }
+
+    /**
+     * 提现申请不通过的时候,向changeLog表中插入一条状态为90的数据
+     *
+     * @author lipf
+     * @date 2026/7/15 16:48
+     */
+    private void saveChangeLog(SysAmountAuditing audit, AmountAuditRejectParam param) {
+        log.info("提现申请不通过的时候,向changeLog表中插入一条状态为90的数据。audit=[{}],param=[{}]", JSONUtil.toJsonStr(audit), JSONUtil.toJsonStr(param));
+        SysUserAccountChangeLog log = new SysUserAccountChangeLog();
+        log.setRelatedAmountAuditingId(audit.getId());
+        log.setStatus("90");
+        log.setRemark("提现驳回");
+        log.setSystemCode(audit.getSystemCode());
+        log.setUserId(audit.getUserId());
+        log.setOperType(4);
+        sysUserAccountIncomeLogService.save(log);
     }
 
     @Override
@@ -470,6 +490,7 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
     public String exportYwyIORecs(YwyIOParam ywyIOParam) {
         log.info("导出业务员收支明细:ywyIOParam=[{}]", JSONUtil.toJsonStr(ywyIOParam));
         List<SysUserAccountChangeLog> changeLogs = sysUserAccountIncomeLogService.queryYwyIORecs(ywyIOParam);
+        log.info("导出业务员收支明细:ywyIOParam=[{}].导出[{}]条记录", JSONUtil.toJsonStr(ywyIOParam), CollUtil.size(changeLogs));
         String userName=null;
         if(CollUtil.isNotEmpty(changeLogs)){
             SysUserAccountChangeLog sysUserAccountChangeLog = changeLogs.get(0);

+ 36 - 8
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserAccountServiceImpl.java

@@ -1,6 +1,7 @@
 package com.jzg.organization.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -94,7 +95,21 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
     @Override
     public Page<SysUserAccountVo> accountList(SysUserAccountPageParam param) {
         log.info("查询账户列表(应付概览页面):param=[{}]", JSONUtil.toJsonStr(param));
-        return baseMapper.accountList(param.getPage(), param);
+        Page<SysUserAccountVo> sysUserAccountVoPage = baseMapper.accountList(param.getPage(), param);
+        // 填充支付中的金额 add by lipf 2026年7月15日09:47:03
+        List<SysAmountAuditing> sysAmountAuditings = sysAmountAuditingService.list(new LambdaQueryWrapper<SysAmountAuditing>()
+                .eq(SysAmountAuditing::getAuditingStatus, 0));
+        Map<String, List<SysAmountAuditing>> collect = sysAmountAuditings.stream().collect(Collectors.groupingBy(SysAmountAuditing::getUserId));
+        sysUserAccountVoPage.getRecords().stream().peek(action->{
+            String userId = action.getUserId();
+            List<SysAmountAuditing> sysAmountAuditings1 = collect.get(userId);
+            if(CollUtil.isNotEmpty(sysAmountAuditings1)){
+                action.setPayingAmount(sysAmountAuditings1.get(0).getAmount());
+            }else{
+                action.setPayingAmount(BigDecimal.ZERO);
+            }
+        }).toList();
+        return sysUserAccountVoPage;
     }
 
     @Override
@@ -231,6 +246,7 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
 
     @Override
     public List<IncomeAndExpenseVo> getIncomeAndExpense(IncomeAndExpenseParam param) {
+        log.info("查询收支明细记录:param=[{}]", JSONUtil.toJsonStr(param));
         // 获取个人中心信息
         String mobile = baseController.getUserName();
         //String deptId = baseController.getUserDeptId();
@@ -265,25 +281,35 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
         
         // 时间筛选(支出记录)
         if (createTimeStart != null && !createTimeStart.isEmpty()) {
+            log.info("createTimeStart=[{}]", createTimeStart);
+            if(StrUtil.length(createTimeStart) < "2026-07-15 23:59:59".length()){
+                createTimeStart += " 00:00:00";
+            }
             auditingWrapper.ge(SysAmountAuditing::getCreateTime,
                     LocalDateTime.parse(createTimeStart, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
         }
         if (createTimeEnd != null && !createTimeEnd.isEmpty()) {
+            log.info("createTimeEnd=[{}]",createTimeEnd);
+            if(StrUtil.length(createTimeEnd) < "2026-07-15 23:59:59".length()){
+                createTimeEnd += " 23:59:59";
+            }
             auditingWrapper.le(SysAmountAuditing::getCreateTime,
                     LocalDateTime.parse(createTimeEnd, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
         }
-        
         List<SysAmountAuditing> sysAmountAuditingList = sysAmountAuditingService.list(auditingWrapper);
+        log.info("查询出审核记录[{}]条记录",CollUtil.size(sysAmountAuditingList));
 
+        Map<String, SysUser> userMap = new HashMap<>();
         // 批量查询用户信息
         Set<String> collect = sysAmountAuditingList.stream().map(SysAmountAuditing::getUserId).collect(Collectors.toSet());
-        QueryWrapper<SysUser> idSet = new QueryWrapper<SysUser>().in("id", collect);
-        List<SysUser> list = sysUserService.list(idSet);
-        Map<String, SysUser> userMap = new HashMap<>();
-        if (CollUtil.isNotEmpty(list)){
-            userMap = list.stream().collect(Collectors.toMap(SysUser::getId, Function.identity()));
+        log.info("collect=[{}]", JSONUtil.toJsonStr(collect));
+        if(CollUtil.isNotEmpty(collect)){
+            QueryWrapper<SysUser> idSet = new QueryWrapper<SysUser>().in("id", collect);
+            List<SysUser> list = sysUserService.list(idSet);
+            if (CollUtil.isNotEmpty(list)){
+                userMap = list.stream().collect(Collectors.toMap(SysUser::getId, Function.identity()));
+            }
         }
-
         // 构建订单收入查询参数(手动设置时间,避免类型转换问题)
         InsFeeOrdersParam feeOrdersParam = new InsFeeOrdersParam();
         feeOrdersParam.setUserId(sysUserJzgInfo.getUserId());
@@ -294,6 +320,7 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
             feeOrdersParam.setCreateTimeEnd(LocalDateTime.parse(createTimeEnd, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
         }
         List<InsFeeOrders> insFeeOrdersList = quoteClient.getInsFeeOrderByUserId(feeOrdersParam);
+        log.info("查询费用收入明细:feeOrdersParam=[{}],insFeeOrdersList=[{}]", JSONUtil.toJsonStr(feeOrdersParam), CollUtil.size(insFeeOrdersList));
 
         // 构建分销收入查询参数
         InsFeeOrdersParam feeOrdersParam1 = new InsFeeOrdersParam();
@@ -305,6 +332,7 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
             feeOrdersParam1.setCreateTimeEnd(LocalDateTime.parse(createTimeEnd, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
         }
         List<InsFeeOrders> distributionList = quoteClient.getInsFeeOrdersList(feeOrdersParam1);
+        log.info("查询分销记录:feeOrdersParam1=[{}], distributionList=[{}]", JSONUtil.toJsonStr(feeOrdersParam1), CollUtil.size(distributionList));
 
         List<IncomeAndExpenseVo.IncomeAndExpenseList> allRecords = new ArrayList<>();
         // 处理支出记录

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

@@ -49,12 +49,22 @@
                 <result column="parent_product_name" property="parentProductName"/>
                 <result column="product_category_code" property="productCategoryCode"/>
                 <result column="product_category_name" property="productCategoryName"/>
+                <result column="premium_setting" property="premiumSetting"/>
                 <result column="alias" property="alias"/>
                 <result column="premium" property="premium"/>
                 <result column="quantity" property="quantity"/>
                 <result column="selected_status" property="selectedStatus"/>
                 <result column="min_seat_count" property="minSeatCount"/>
                 <result column="max_seat_count" property="maxSeatCount"/>
+                <collection property="settingList" ofType="com.jzg.commons.entity.po.jyxSetting">
+                    <id column="setting_id" property="id"/>
+                    <result column="seats" property="seats"/>
+                    <result column="setting_coverage" property="coverage"/>
+                    <result column="setting_premium" property="premium"/>
+                    <result column="setting_system_code" property="systemCode"/>
+                    <result column="setting_jyx_config_id" property="jyxConfigId"/>
+                    <result column="setting_product_code" property="productCode"/>
+                </collection>
             </collection>
         </collection>
     </resultMap>
@@ -175,16 +185,22 @@
             jc1.product_name as parent_product_name,
             jc1.product_code as product_category_code,
             jc1.product_name as product_category_name,
+            jc.premium_setting,
             psidi.quantity,
             psidi.selected_status,
             psidi.min_seat_count,
-            psidi.max_seat_count
+            psidi.max_seat_count,
+            js.id as setting_id,
+            js.seats,
+            js.premium as setting_premium,
+            js.product_code as setting_product_code
         FROM
             ptl_scheme ps
                 left JOIN ptl_scheme_info psi ON ps.id = psi.scheme_id AND psi.is_delete = 0
                 left JOIN ptl_scheme_insurance_driving_intention psidi ON psidi.scheme_info_id = psi.id AND psidi.is_delete = 0
                 left JOIN jyx_config jc ON psidi.driving_intention_id = jc.id AND jc.is_delete = 0
                 left JOIN jyx_config jc1 on jc.parent_id = jc1.id AND jc1.is_delete = 0
+                left join  jyx_setting js on js.jyx_config_id = jc.id
         WHERE
             ps.company_id = #{companyId}
           AND ps.product_id = #{productId}

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

@@ -738,6 +738,7 @@
         GROUP_CONCAT(DISTINCT ipii.company_id SEPARATOR ',') AS company_id,
         GROUP_CONCAT(DISTINCT eic.name SEPARATOR ',') AS company_name,
         GROUP_CONCAT(DISTINCT ipii.invoice_type SEPARATOR ',') AS invoice_type,
+        GROUP_CONCAT(DISTINCT ipii.invoice_risk_type SEPARATOR ',') AS invoice_risk_type,
         GROUP_CONCAT(DISTINCT ipii.invoice_party SEPARATOR ',') AS invoice_party,
         GROUP_CONCAT(DISTINCT ipii.tax_point SEPARATOR ',') AS tax_point,
         GROUP_CONCAT(DISTINCT ipiis.settlement_payment_reason SEPARATOR ',') AS settlement_payment_reason,
@@ -898,6 +899,8 @@
         ipii.invoice_party as invoiceParty,
         ipii.tax_point as taxPoint,
         (COALESCE(ipi.jq_supervise_costs_premiums,0)  + COALESCE(ipi.sy_supervise_costs_premiums,0)  + COALESCE(ipi.jy_supervise_costs_premiums,0) ) as receivableSuperviseCosts,
+        COALESCE(ipi.jq_supervise_costs_premiums, 0) + COALESCE(ipi.sy_supervise_costs_premiums, 0) as superviseCostPremiums4Car,
+        COALESCE(ipi.jy_supervise_costs_premiums, 0) as jy_supervise_costs_premiums,
         ipi.jq_premium as jqPremium,
         ipi.jq_supervise_costs_proportion as jqSuperviseCostsProportion,
         ipi.jq_policy_no as jqPolicyNo,
@@ -1481,7 +1484,7 @@
         eic.name as company_name,
         eic.name_simple as companyNameSimple,
         sum( ipiis.actual_received_amount ) AS actual_received_amount,
-        GROUP_CONCAT(DISTINCT ipiis.settlement_payment_reason SEPARATOR ',') AS settlement_payment_reason,
+        GROUP_CONCAT(DISTINCT ipiis.settlement_payment_reason SEPARATOR ',') AS paymentReason,
         ipii.status,
         ipii.payment_reason
         FROM
@@ -1514,6 +1517,9 @@
             <if test="invoiceRecordQueryVo.companyNameSimple != null and invoiceRecordQueryVo.companyNameSimple != ''">
                 AND eic.id = #{invoiceRecordQueryVo.companyNameSimple}
             </if>
+            <if test="invoiceRecordQueryVo.partnerCompanyId != null and invoiceRecordQueryVo.partnerCompanyId != ''">
+                AND eic.id = #{invoiceRecordQueryVo.partnerCompanyId}
+            </if>
         </where>
         <if test="invoiceRecordQueryVo.settlementStatus != null and invoiceRecordQueryVo.settlementStatus != ''">
             HAVING CASE
@@ -1552,7 +1558,7 @@
         eic.name_simple as companyNameSimple,
         sum( ipiis.actual_received_amount ) AS actual_received_amount,
         ipii.status,
-        GROUP_CONCAT(DISTINCT iffo.falsely_increased_reason SEPARATOR ',') as paymentReason,
+        GROUP_CONCAT(DISTINCT ipiis.settlement_payment_reason SEPARATOR ',') as paymentReason,
         GROUP_CONCAT(DISTINCT iffo.year SEPARATOR ',') AS year,
         GROUP_CONCAT(DISTINCT iffo.month SEPARATOR ',') AS month,
         iffo.partner_company_id,
@@ -1593,6 +1599,9 @@
             <if test="invoiceRecordQueryVo.companyNameSimple != null and invoiceRecordQueryVo.companyNameSimple != ''">
                 AND eic.id = #{invoiceRecordQueryVo.companyNameSimple}
             </if>
+            <if test="invoiceRecordQueryVo.partnerCompanyId != null and invoiceRecordQueryVo.partnerCompanyId != ''">
+                AND iffo.partner_company_id = #{invoiceRecordQueryVo.partnerCompanyId}
+            </if>
         </where>
         GROUP BY
         ipii.id,