Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

lixiaolong 1 месяц назад
Родитель
Сommit
5cf06bb6d9
22 измененных файлов с 201 добавлено и 65 удалено
  1. 1 1
      commons/src/main/java/com/jzg/commons/entity/finance/vo/IncomeDataVO.java
  2. 15 0
      commons/src/main/java/com/jzg/commons/entity/vo/QuestionOrder.java
  3. 1 0
      commons/src/main/java/com/jzg/quotation/summary/constants/QuoteNumberConstant.java
  4. 38 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/OrderOperationLogAspect.java
  5. 14 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsFeeAuditController.java
  6. 2 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsOrdersController.java
  7. 8 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsFeeAuditMapper.java
  8. 2 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsFeeOrdersService.java
  9. 6 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeAuditServiceImpl.java
  10. 19 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsFeeOrdersServiceImpl.java
  11. 1 1
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  12. 7 1
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeAuditMapper.xml
  13. 5 0
      tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/ConvertUtil.java
  14. 1 1
      tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/model/entity/TKCiKindsVo.java
  15. 20 7
      tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/TKSimpleService.java
  16. 36 32
      tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/impl/TKQuotationBaseServiceImpl.java
  17. 3 2
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerRequestComponent.java
  18. 1 0
      tenant/organization/src/main/java/com/jzg/organization/controller/ReceivableController.java
  19. 2 1
      tenant/organization/src/main/java/com/jzg/organization/mapper/ReceivableMapper.java
  20. 11 7
      tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java
  21. 1 1
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysAmountAuditingServiceImpl.java
  22. 7 3
      tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

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

@@ -65,7 +65,7 @@ public class IncomeDataVO implements Serializable {
         public static final String licenseNo = "licenseNo";
         public static final String jqPolicyNo = "jqPolicyNo";
         public static final String syPolicyNo = "syPolicyNo";
-        public static final String contactPerson = "contactPersonPhone";
+        public static final String contactPerson = "contactPerson";
 
         /**
          * 查询条件

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

@@ -0,0 +1,15 @@
+package com.jzg.commons.entity.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "疑问订单")
+@Data
+public class QuestionOrder {
+
+    // 订单号
+    private String orderNo;
+
+    // 疑问订单
+    private String problemReason;
+}

+ 1 - 0
commons/src/main/java/com/jzg/quotation/summary/constants/QuoteNumberConstant.java

@@ -95,6 +95,7 @@ public class QuoteNumberConstant {
         OPT_TYPE_14(14,"订单审核"),
         OPT_TYPE_15(15,"费用调整"),
         OPT_TYPE_16(16,"批量修改比例"),
+        OPT_TYPE_17(17,"设置为疑问订单"),
         ;
         private Integer code;
         private String desc;

+ 38 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/aop/OrderOperationLogAspect.java

@@ -15,6 +15,7 @@ import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.vo.AdjustAllRefundVo;
 import com.jzg.commons.entity.vo.PtlAgreementCostRatioVo;
+import com.jzg.commons.entity.vo.QuestionOrder;
 import com.jzg.quotation.commons.constant.SpElMapping;
 import com.jzg.quotation.commons.utils.SpElFieldExtractor;
 import com.jzg.quotation.summary.aop.aspect.OrderOperationLog;
@@ -171,10 +172,47 @@ public class OrderOperationLogAspect {
                 result = joinPoint.proceed();
                 this.batchModify(result,log, batchModifyVo);
                 break;
+            // 设为疑问订单
+            case 17:
+                logger.info("设置为疑问订单.log.orderSpEl()=[{}]",log.orderSpEl());
+                QuestionOrder questionOrder = parser.parseExpression(log.orderSpEl()).getValue(context, QuestionOrder.class);
+                result = joinPoint.proceed();
+                this.updateToQuestionOrder(result,log, questionOrder);
+                break;
         }
         return result;
     }
 
+    /**
+     * 设置为疑问订单
+     *
+     * @author lipf
+     * @date 2026/7/16 16:35
+     */
+    private void updateToQuestionOrder(Object result, OrderOperationLog log, QuestionOrder questionOrder) {
+        logger.info("设置为疑问订单。questionOrder=[{}]", JSONUtil.toJsonStr(questionOrder));
+        InsOrdersTrack track = new InsOrdersTrack();
+        track.setModule(log.module());
+        track.setSubModule(log.subModule());
+        track.setOptType(log.optType().getCode());
+        track.setOptContent(log.description());
+        track.setChangeAfter(JSONUtil.toJsonStr(questionOrder));
+        track.setResult(JSONUtil.toJsonStr(result));
+        InsOrders insOrders = orderService.getById(questionOrder.getOrderNo());
+        if(insOrders != null){
+            InsOrdersCarInfo carInfo = carInfoService.getByOrderId(insOrders.getId());
+            track.setLicenseNo(carInfo.getLicenseNo());
+            track.setCompanyId(insOrders.getCompanyId());
+            // track.setResult(result.getMsg());
+        }else{
+            track.setResult("要设置位疑问订单的订单不存在");
+        }
+        track.setStatus(1);
+        track.setOrderNo(questionOrder.getOrderNo());
+        traceService.save(track);
+
+    }
+
     /**
      * 批量修改比例
      *

+ 14 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/InsFeeAuditController.java

@@ -12,6 +12,7 @@ import com.jzg.commons.entity.orders.vo.AuditCostInfoVo;
 import com.jzg.commons.entity.orders.vo.FeeAuditVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteEchoVo;
 import com.jzg.commons.entity.vo.PtlAgreementCostRatioVo;
+import com.jzg.commons.entity.vo.QuestionOrder;
 import com.jzg.quotation.summary.aop.aspect.OrderOperationLog;
 import com.jzg.quotation.summary.constants.QuoteNumberConstant;
 import com.jzg.quotation.summary.service.InsFeeAuditService;
@@ -150,9 +151,19 @@ public class InsFeeAuditController {
      *
      * @return HttpResult<String> 设为疑问单的处理结果
      */
+    @OrderOperationLog(
+            module = "订单审核",
+            subModule = "设为疑问订单",
+            optType = QuoteNumberConstant.QuoteOptType.OPT_TYPE_17,
+            description = "设置为疑问订单",
+            orderSpEl = "#questionOrder",
+            feedbackSpEl = "#ret.code + ' - ' + #ret.msg+ ' - ' + #ret.data"
+    )
     @PostMapping("/updateToQuestionOrder")
     @Operation(summary = "设置为疑问订单")
-    public HttpResult<String> updateToQuestionOrder(@RequestParam("orderNo") String orderNo,@RequestParam(value = "problemReason",required = false) String problemReason){
+    public HttpResult<String> updateToQuestionOrder(@RequestBody QuestionOrder questionOrder){
+        String orderNo = questionOrder.getOrderNo();
+        String problemReason = questionOrder.getProblemReason();
         insFeeAuditService.updateToQuestionOrder(orderNo,"1", problemReason);
         return HttpResult.ok("已设为疑问订单,可前往疑问订单列表查看");
     }
@@ -186,7 +197,7 @@ public class InsFeeAuditController {
      */
     @OrderOperationLog(
             module = "订单审核",
-            subModule = "我的审核",
+            subModule = "费用调整",
             optType = QuoteNumberConstant.QuoteOptType.OPT_TYPE_15,
             description = "费用调整",
             orderSpEl = "#param",
@@ -195,6 +206,7 @@ public class InsFeeAuditController {
     @PostMapping("/saveCostInfo")
     @Operation(summary = "保存调整的费用")
     public HttpResult<String> saveCostInfo(@RequestBody PtlAgreementCostRatioVo param){
+        log.info("保存调整的费用.param =[{}]", JSONUtil.toJsonStr(param));
         return insFeeAuditService.saveCostInfo(param);
     }
 

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

@@ -221,7 +221,8 @@ public class InsOrdersController extends BaseController {
     @Operation(summary = "费用调整并计算保存")
     @PostMapping("/adjustmentCostAndSave")
     public HttpResult<InsFeeOrders> adjustmentCostAndSave(@RequestBody PtlAgreementCostRatioVo ptlAgreementCostRatioVo) throws ReflectiveOperationException {
-        return HttpResult.ok(insFeeOrdersService.calcCosts(ptlAgreementCostRatioVo));
+        log.info("费用调整并计算保存。ptlAgreementCostRatioVo=[{}]",JSONUtil.toJsonStr(ptlAgreementCostRatioVo));
+        return insFeeOrdersService.calcCosts(ptlAgreementCostRatioVo);
     }
 
     @GetMapping("/changePerson")

+ 8 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsFeeAuditMapper.java

@@ -26,6 +26,14 @@ public interface InsFeeAuditMapper extends BaseMapper<InsFeeAudit> {
     Page<FeeAuditVo> queryPage(Page page, @Param("param") FeeAuditParam param);
 
     List<FeeAuditVo> queryList(Page page, @Param("param") FeeAuditParam param);
+
+    /**
+     * 根据订单号查询订单的审核记录
+     *
+     * @author lipf
+     * @date 2026/7/16 14:33
+     */
+    InsFeeAudit selectFeeAuditByOrderNo(@Param("orderNo") String orderNo);
 }
 
 

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

@@ -11,7 +11,8 @@ import java.math.BigDecimal;
 import java.util.List;
 
 public interface InsFeeOrdersService extends IService<InsFeeOrders> {
-    InsFeeOrders calcCosts(PtlAgreementCostRatioVo ptlAgreementCostRatioVo) throws ReflectiveOperationException;
+
+    HttpResult<InsFeeOrders> calcCosts(PtlAgreementCostRatioVo ptlAgreementCostRatioVo) throws ReflectiveOperationException;
 
     List<InsFeeOrders> getInsFeeOrdersList(InsFeeOrdersParam param);
 

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

@@ -933,7 +933,7 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
     public HttpResult<String> saveCostInfo(PtlAgreementCostRatioVo param) {
         String systemCode = baseController.getSystemCode();
         String userName = baseController.getUserName();
-        log.info("保存调整后的费用:systemCode=[{}], userName=[{}],param=[{}]", systemCode, userName, JSONUtil.toJsonStr(param));
+        log.info("保存调整后的费用比例:systemCode=[{}], userName=[{}],param=[{}]", systemCode, userName, JSONUtil.toJsonStr(param));
         // add by lipf, 2026年6月22日10:15:51 已经审核通过的订单不能在让调整费用,否则会造成费用不一致。 会影响很多地方. 实际业务场景存在审核通过后,调整费用的情况
 //        String orderNo = param.getOrderNo();
 //        HttpResult<String> validateRes = this.validateOrderCheck(orderNo);
@@ -941,7 +941,11 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
 //            return validateRes;
 //        }
         try {
-            feeOrdersService.calcCosts(param);
+            HttpResult<InsFeeOrders> result = feeOrdersService.calcCosts(param);
+            if(result.isFail()){
+                log.error("计算费用比例异常.result=[{}]", JSONUtil.toJsonStr(result));
+                return HttpResult.error(result.getMsg());
+            }
         } catch (ReflectiveOperationException e) {
             log.error("调整订单费用时,计算异常",e);
             throw new SystemException("费用计算异常:"+ e.getMessage());

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

@@ -9,6 +9,7 @@ import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.dto.CostCalculateRespVO;
 import com.jzg.commons.entity.dto.InsFeeOrdersParam;
+import com.jzg.commons.entity.orders.po.InsFeeAudit;
 import com.jzg.commons.entity.orders.po.InsOrders;
 import com.jzg.commons.entity.orders.po.InsOrdersCosts;
 import com.jzg.commons.entity.po.InsFeeOrders;
@@ -19,6 +20,7 @@ import com.jzg.commons.util.AssertionUtils;
 import com.jzg.commons.util.BigDecimalUtil;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.commons.client.OrgClient;
+import com.jzg.quotation.summary.mapper.InsFeeAuditMapper;
 import com.jzg.quotation.summary.mapper.InsFeeOrdersMapper;
 import com.jzg.quotation.summary.service.InsFeeOrdersService;
 import com.jzg.quotation.summary.service.InsOrdersCostsService;
@@ -26,12 +28,14 @@ import com.jzg.quotation.summary.service.InsOrdersService;
 import jakarta.annotation.Resource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.lang.reflect.Method;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author quchen
@@ -56,6 +60,8 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
 
     @Resource
     private InsFeeOrdersMapper insFeeOrdersMapper;
+    @Autowired
+    private InsFeeAuditMapper insFeeAuditMapper;
 
 
     /**
@@ -83,13 +89,24 @@ public class InsFeeOrdersServiceImpl extends ServiceImpl<InsFeeOrdersMapper, Ins
      * @date 2026/6/24 9:46
      */
     @Override
-    public InsFeeOrders calcCosts(PtlAgreementCostRatioVo ptlAgreementCostRatioVo) {
+    public HttpResult<InsFeeOrders> calcCosts(PtlAgreementCostRatioVo ptlAgreementCostRatioVo) {
         log.info("调整费用。不同费用的比例信息是:[{}]", JSONUtil.toJsonStr(ptlAgreementCostRatioVo));
+        InsFeeAudit insFeeAudit = insFeeAuditMapper.selectFeeAuditByOrderNo(ptlAgreementCostRatioVo.getOrderNo());
+        if(insFeeAudit == null){
+            String msg = String.format("根据订单号[%s]未找到费用审核记录",ptlAgreementCostRatioVo.getOrderNo());
+            log.error("根据订单号[{}]未找到费用审核记录",ptlAgreementCostRatioVo.getOrderNo());
+            return HttpResult.error(msg);
+        }
+        if("1".equals(Objects.toString(insFeeAudit.getAuditStatus(),"")) ){
+            String msg =String.format("订单号为[%s]的订单已经审核通过,无法进行费用调整", ptlAgreementCostRatioVo.getOrderNo());
+            log.error(msg);
+            return HttpResult.error(msg);
+        }
         InsFeeOrders insFeeOrders = getInsFeeOrders(ptlAgreementCostRatioVo);
         log.info("调整后费用.参数[{}]真实结果是[{}]", JSONUtil.toJsonStr(ptlAgreementCostRatioVo), JSONUtil.toJsonStr(insFeeOrders));
         // 保存比例
         this.updateById(insFeeOrders);
-        return insFeeOrders;
+        return HttpResult.ok(insFeeOrders);
     }
 
     /**

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

@@ -467,7 +467,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
      */
     @Override
     public InsOrdersVo selectById(Long id) {
-        log.info("根据id查询订单信息。订单的序号(不是订单号)id=[{}]", id);
+        log.info("根据id查询订单信息。订单的序号(订单号)id=[{}]", id);
         // 1. 查询订单信息
         InsOrdersVo insOrdersVo = insOrdersMapper.getById(id);
         if (insOrdersVo == null) {

+ 7 - 1
tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeAuditMapper.xml

@@ -25,6 +25,12 @@
         is_delete,create_time,create_by,
         update_time,update_by,is_problem
     </sql>
+
+    <!-- 根据订单号查询订单的审核记录 lipf 2026年7月16日14:33:10 -->
+    <select id="selectFeeAuditByOrderNo" resultMap="BaseResultMap">
+        select * from ins_fee_audit ifa where ifa.order_no = #{orderNo}
+    </select>
+
     <select id="queryPage" resultType="com.jzg.commons.entity.orders.vo.FeeAuditVo">
         SELECT
         qsu.username ,    -- 业务员登录账号
@@ -53,7 +59,7 @@
         ELSE ''
         END AS attrType,
         io.signing_time as signingTime,
-        io.create_time as quotationTime, sua.username as dockingPerson,
+        io.create_time as quotationTime, io.docking_person as dockingPerson,
         pa.agreement_abbreviation as agreementName,io.product_name as productName,
         ioc.jq_premium as jqPremium, ioc.sy_premium as syPremium, ioc.jy_premium as jyPremium,
         ioc.sum_premium as sumPremium,sd.name as deptName,ifa.create_time as createTime,

+ 5 - 0
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/ConvertUtil.java

@@ -43,6 +43,11 @@ public class ConvertUtil {
         if (num.compareTo(new BigDecimal("10000")) < 0) {
             return quoteAmount;
         }
+        // 如果num是整数,直接返回不带小数拼接万
+        if (num.remainder(new BigDecimal("10000")).compareTo(BigDecimal.ZERO) == 0) {
+            BigDecimal wanNum = num.divide(new BigDecimal("10000"));
+            return wanNum + "万";
+        }
         BigDecimal res = num.divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP);
         return res + "万";
     }

+ 1 - 1
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/model/entity/TKCiKindsVo.java

@@ -106,7 +106,7 @@ public class TKCiKindsVo extends UnknownFieldEntity {
      *
      * 当不投保时,这个字段的值好像是无意义的,有些传的是10000、有的传0、有的传2。
      */
-    private String quoteAmount;
+    private BigDecimal quoteAmount;
 
     /**
      * 报价金额中文

+ 20 - 7
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/TKSimpleService.java

@@ -41,6 +41,12 @@ public class TKSimpleService {
             "4", "P"
     );
 
+    /**
+     * 机动车损失险险种代码(车辆损失保险)
+     * 该险种的金额由保司系统返回,前端传的值不准确,需要使用保司的金额
+     */
+    private static final String KIND_CODE_VEHICLE_DAMAGE = "101";
+
     /**
      * 通用空值检查与初始化方法
      * <p>
@@ -1041,17 +1047,24 @@ public class TKSimpleService {
                 .forEach(commonBiKindInfoVo -> {
                     TKCiKindsVo tkCiKindVo = tkCiKindsVoMap.get(commonBiKindInfoVo.getKindCode());
                     tkCiKindVo.setIsSelect("1");
-                    tkCiKindVo.setQuoteAmount(commonBiKindInfoVo.getAmount());
-                    tkCiKindVo.setQuoteAmountCN(ConvertUtil.simpleConvert(commonBiKindInfoVo.getAmount()));
-
-                    if (StringUtils.isNotBlank(commonBiKindInfoVo.getUnitAmount())) {
-                        tkCiKindVo.setUnitAmount(new BigDecimal(commonBiKindInfoVo.getUnitAmount()));
-                        tkCiKindVo.setUnitAmountCN(commonBiKindInfoVo.getUnitAmount());
-                    }
                     String quantity = commonBiKindInfoVo.getQuantity();
                     if (StringUtils.isNotBlank(quantity)) {
                         tkCiKindVo.setQuantity(Integer.parseInt(quantity));
                     }
+                    // 机动车损失险(101)的金额由保司系统返回,前端传的值不准确,使用保司已有的金额,无需覆盖
+                    if (KIND_CODE_VEHICLE_DAMAGE.equals(commonBiKindInfoVo.getKindCode())) {
+                        return;
+                    }
+                    String amount = commonBiKindInfoVo.getAmount();
+                    if (StringUtils.isBlank(amount)) {
+                        log.warn("商业险险种[{}]金额为空,跳过金额设置", commonBiKindInfoVo.getKindCode());
+                        return;
+                    }
+                    BigDecimal amountBigDecimal = new BigDecimal(amount);
+                    tkCiKindVo.setQuoteAmount(amountBigDecimal);
+                    tkCiKindVo.setQuoteAmountCN(ConvertUtil.simpleConvert(amount));
+                    tkCiKindVo.setUnitAmount(amountBigDecimal);
+                    tkCiKindVo.setUnitAmountCN(ConvertUtil.simpleConvert(amount));
                 });
 
         // ========== 6. 驾意险信息同步 ==========

+ 36 - 32
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/impl/TKQuotationBaseServiceImpl.java

@@ -188,34 +188,38 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
         // # 车险投保单报价下单
         TKEntranceFor000038Result tkEntranceFor000038Result = tkSimpleService.orderSubmit(session, preciseInitResult.getMainOrderId(), insureInfo);
         UnderwritingResultsVo underwritingResultsVo = new UnderwritingResultsVo();
-        if (tkEntranceFor000038Result != null) {  // 核保通过
-            TKOrderData tkOrderData = tkEntranceFor000038Result.getData();
-            // 核保成功,保单编号缓存
-            redisCacheUtil.setCache(tkOrderData.getProposalNo(), underwritingVo.getOrder().getOrdersNo(), "HB");
-            // 保司订单号
-            underwritingResultsVo.setCompanyOrderNo(tkOrderData.getProposalNo());
-            // 交强险投保单号
-            underwritingResultsVo.setJqApplyNo(tkOrderData.getProposalNoCI());
-            // 商业险投保单号
-            underwritingResultsVo.setSyApplyNo(tkOrderData.getProposalNoBI());
-            // 驾意险投保单号
-            underwritingResultsVo.setJyApplyNo(tkOrderData.getCarAccident() != null ? tkOrderData.getCarAccident().getProposalNo() : null);
-            // 核保结果
-            underwritingResultsVo.setUnderwritingResult("核保成功");
-            // 核保状态
-            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
-            // 验车标志,需要验车,需要上传影像
-            if ("1".equals(tkEntranceFor000038Result.getCheckCarFlag()) && "9".equals(tkEntranceFor000038Result.getData().getUnderWriteFlag())) {
-                buildCheckCar(tkEntranceFor000038Result, underwritingVo, preciseInitResult, underwritingResultsVo);
-            }
-            tkCrawlerOrderService.save(underwritingVo, underwritingResultsVo, preciseInitResult.getMainOrderId(), true);
-        } else {
-            // 核保失败
+        if (tkEntranceFor000038Result == null) {
             underwritingResultsVo.setUnderwritingResult("核保失败");
             underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
             tkCrawlerOrderService.save(underwritingVo, underwritingResultsVo, preciseInitResult.getMainOrderId(), false);
+            return underwritingResultsVo;
         }
-
+        // 核保通过
+        TKOrderData tkOrderData = tkEntranceFor000038Result.getData();
+        // 核保成功,保单编号缓存
+        redisCacheUtil.setCache(tkOrderData.getProposalNo(), underwritingVo.getOrder().getOrdersNo(), "HB");
+        // 保司订单号
+        underwritingResultsVo.setCompanyOrderNo(tkOrderData.getProposalNo());
+        // 交强险投保单号
+        underwritingResultsVo.setJqApplyNo(tkOrderData.getProposalNoCI());
+        // 商业险投保单号
+        underwritingResultsVo.setSyApplyNo(tkOrderData.getProposalNoBI());
+        // 驾意险投保单号
+        underwritingResultsVo.setJyApplyNo(tkOrderData.getCarAccident() != null ? tkOrderData.getCarAccident().getProposalNo() : null);
+        // 核保结果
+        underwritingResultsVo.setUnderwritingResult("核保成功");
+        // 核保状态
+        underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
+        // 验车标志,需要验车,需要上传影像
+        if ("1".equals(tkEntranceFor000038Result.getCheckCarFlag()) && "9".equals(tkEntranceFor000038Result.getData().getUnderWriteFlag())) {
+            buildCheckCar(tkEntranceFor000038Result, underwritingVo, preciseInitResult, underwritingResultsVo);
+        }
+        // 人工核保
+        if ("2".equals(tkOrderData.getCarCheckStatus())) {
+            underwritingResultsVo.setUnderwritingResult("人工审核返回:" + tkOrderData.getSpResMsg());
+            underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
+        }
+        tkCrawlerOrderService.save(underwritingVo, underwritingResultsVo, preciseInitResult.getMainOrderId(), true);
         return underwritingResultsVo;
     }
 
@@ -233,31 +237,31 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
      * @param preciseInitResult         精准报价结果
      * @param underwritingResultsVo     核保结果返回
      */
-    private void buildCheckCar(TKEntranceFor000038Result tkEntranceFor000038Result, 
-                               UnderwritingVo underwritingVo, 
-                               PreciseInitResult preciseInitResult, 
+    private void buildCheckCar(TKEntranceFor000038Result tkEntranceFor000038Result,
+                               UnderwritingVo underwritingVo,
+                               PreciseInitResult preciseInitResult,
                                UnderwritingResultsVo underwritingResultsVo) {
         log.info("========== 开始处理验车上传影像流程 ==========");
 
         try {
             // 1. 获取核保返回的保司订单号
             String proposalNo = extractProposalNo(tkEntranceFor000038Result, underwritingVo);
-            
+
             // 2. 从 Redis 获取缓存的影像上传参数(前端提前上传的)
             String ordersNo = underwritingVo.getOrder().getOrdersNo();
             InsuranceUploadImageVo insuranceUploadImageVo = redisCacheUtil.getImageUploadParam(ordersNo);
 
             // 3. 如果有缓存的影像参数,设置保司订单号并清除缓存
             if (insuranceUploadImageVo != null) {
-                log.info("从 Redis 获取到缓存的影像上传参数,影像数量: {}", 
+                log.info("从 Redis 获取到缓存的影像上传参数,影像数量: {}",
                         insuranceUploadImageVo.getImageVoList() != null ? insuranceUploadImageVo.getImageVoList().size() : 0);
-                
+
                 // 设置保司订单号(核保成功后已返回)
                 if (proposalNo != null) {
                     insuranceUploadImageVo.getOrder().setCompanyOrderNo(proposalNo);
                     log.info("已为缓存的影像上传参数设置保司订单号: {}", proposalNo);
                 }
-                
+
                 // 删除 Redis 中的缓存(已使用,不再需要)
                 redisCacheUtil.deleteImageUploadParam(ordersNo);
             }
@@ -304,7 +308,7 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
         if (tkOrderData == null || tkOrderData.getProposalNo() == null) {
             return null;
         }
-        
+
         String proposalNo = tkOrderData.getProposalNo();
         underwritingVo.getOrder().setCompanyOrderNo(proposalNo);
         log.info("核保返回保司订单号: {}", proposalNo);

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

@@ -97,8 +97,9 @@ public class ZhongAnCrawlerRequestComponent {
                 "众安爬虫车辆查询接口",RequestUrl.CAR_QUERY.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), JSON.toJSONString(carQueryRequest));
         ZhongAnCrawlerCarQueryResponse carQueryResponse = requestComponent.formDataZhongAn(RequestUrl.CAR_QUERY.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), carQueryRequest, ZhongAnCrawlerCarQueryResponse.class, headers,"车辆查询").getBody();
         List<ZhongAnCrawlerCarQueryResponse.ValueDTO.DataDTO.ResultDTO.VehicleDTO> vehicleList = carQueryResponse.getValue().getDatas().getResult().getVehicleList();
-        vehicleDTOList.addAll(vehicleList);
-
+        if (vehicleList != null && vehicleList.size() > 0) {
+            vehicleDTOList.addAll(vehicleList);
+        }
         return vehicleDTOList;
     }
 

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

@@ -86,6 +86,7 @@ public class ReceivableController {
     @PostMapping("getCommissionReceivableList")
     @Operation(summary = "获取私有协议手续费列表")
     public HttpResult<InsPlyIncomeVO> getCommissionReceivableList(@RequestBody ReceivableQueryVo receivableQueryVo){
+        log.info("获取私有协议手续费列表:receivableQueryVo=[{}]", JSONUtil.toJsonStr(receivableQueryVo));
         if (StrUtil.isBlank(receivableQueryVo.getQueryType())){
             receivableQueryVo.setQueryType("2");
         }

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

@@ -66,7 +66,8 @@ public interface ReceivableMapper extends BaseMapper<InsPlyIncome> {
      * @date 2026/5/12 14:50
      */
     List<InsPlyIncome> queryIncomeDatasByOrderIds(@Param("orderNos") List<String> orderNos,
-                                                  @Param("companyId") String companyId);
+                                                  @Param("companyId") String companyId,
+                                                  @Param("invoiceType") String invoiceType);
 
     /**
      * 查询应收总额

+ 11 - 7
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -268,7 +268,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
             return HttpResult.error("请勾选未结算的订单数据");
         }
         List<InsPlyIncome> insPlyIncomes = baseMapper.queryIncomeByIds(invoicingVo);
-        List<ContractVO> contractVOS = insPlyIncomes.stream().map(action -> new ContractVO(action.getContactPerson(), action.getContactPersonPhone())).distinct().toList();
+        List<ContractVO> contractVOS = insPlyIncomes.stream().map(action -> new ContractVO(action.getContactPerson(),null)).distinct().toList();
         log.info("根据订单编号查询得到的对接人信息[{}]个", CollUtil.size(contractVOS));
         return HttpResult.ok(contractVOS);
     }
@@ -396,9 +396,10 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
     @Override
     public HttpResult<List<InsPlyIncome>> queryIncomeDatas(IncomeDataVO incomeDataVO) {
         log.info("应收数据的二次过滤:incomeDataVO=[{}]", JSONUtil.toJsonStr(incomeDataVO));
+        // add by lipf ,二次过滤查询可开票订单的时候,应该查询未开票的订单
         List<String> orderNos = incomeDataVO.getOrderNos();
         String companyId = incomeDataVO.getCompanyId();
-        List<InsPlyIncome> incomes =  baseMapper.queryIncomeDatasByOrderIds(orderNos,companyId);
+        List<InsPlyIncome> incomes =  baseMapper.queryIncomeDatasByOrderIds(orderNos,companyId,incomeDataVO.getInvoiceType());
         log.info("根据订单号和保司id查询出[{}]条记录。 orderNos =[{}],companyId=[{}]",CollUtil.size(incomes), JSONUtil.toJsonStr(orderNos), companyId);
         // 需要查询未结算的数据 modify by lipf 2026年6月4日11:06:50
         incomes = incomes.stream().filter(action->{
@@ -426,9 +427,9 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                         return true;
                     }
                     if("等于".equals(type)){
-                        return search.equals(insPlyIncome.getContactPersonPhone());
+                        return search.equals(insPlyIncome.getContactPerson());
                     }else if("不等于".equals(type)){
-                        return !search.equals(insPlyIncome.getContactPersonPhone());
+                        return !search.equals(insPlyIncome.getContactPerson());
                     }
                     return true;
                 };
@@ -1881,8 +1882,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
         InvoicingVo invoicingVo = platformSettlementVo.getInvoicingVo();
         log.info("平台结算:platformSettlement=[{}]", JSONUtil.toJsonStr(platformSettlementVo));
 
-        if (StrUtil.isBlank(platformSettlementVo.getInvoicingVo().getContactPerson())
-                || StrUtil.isBlank(platformSettlementVo.getInvoicingVo().getContactPersonPhone())){
+        if (StrUtil.isBlank(platformSettlementVo.getInvoicingVo().getContactPerson())){
             throw new SystemException("对接人信息不能为空");
         }
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@@ -4586,7 +4586,11 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                     remainSettlementAmount = BigDecimal.ZERO;
                 }
                 action.setRemainSettlementAmount(remainSettlementAmount);
-                action.setCompanyAllName(allCompanyHierarchyPaths.get(Objects.toString(action.getCompanyId(),"")));
+                String companyAllName = allCompanyHierarchyPaths.get(Objects.toString(action.getCompanyId(), ""));
+                if(StrUtil.isEmpty(companyAllName)){
+                    log.error("根据保险公司序号[{}]没有找到保险公司",action.getCompanyId());
+                }
+                action.setCompanyAllName(companyAllName);
                 action.setSettlementStatus(settlementStatusName);
 
                 // 回款差额

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

@@ -214,7 +214,7 @@ public class SysAmountAuditingServiceImpl extends ServiceImpl<SysAmountAuditingM
                 // 更新用户账户
                 SysUserAccount userAccount = userAccountService.queryByUserId(audit.getUserId(),systemCode);
                 AssertionUtils.isFail(Objects.isNull(userAccount), "用户账户数据异常!");
-                AssertionUtils.isFail(audit.getAmount().compareTo(audit.getBalanceAmount()) > 0, "提现金额大于账户余额!");
+                AssertionUtils.isFail(audit.getAmount().compareTo(userAccount.getSumAmountUnpaid()) > 0, "提现金额大于账户余额!");
                 if(userAccount.getSumAmountUnpaid().compareTo(audit.getAmount()) < 0){
                     log.info("账户金额少于提现金额,请审核账户。 userId=[{}}], userAccount.getSumAmount()=[{}],audit.getAmount()=[{}]",userAccount.getUserId(), userAccount.getSumAmount(), audit.getAmount());
                     throw new SystemException("账户金额少于提现金额,请审核账户");

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

@@ -310,6 +310,11 @@
         <if test="companyId != null and companyId != ''">
             AND io.company_id = #{companyId}
         </if>
+        <if test="invoiceType != null and invoiceType != ''">
+            AND ipi.id not in (
+            select ipiil.income_id from   ins_ply_income_invoice_link	ipiil where  ipiil.invoice_type = #{invoiceType} and ipiil.is_delete  = 0
+            )
+        </if>
         <if test="orderNos != null and orderNos.size() > 0">
             AND io.id in
             <foreach collection="orderNos" item="id" open="(" separator="," close=")">
@@ -1485,8 +1490,7 @@
         eic.name_simple as companyNameSimple,
         sum( ipiis.actual_received_amount ) AS actual_received_amount,
         GROUP_CONCAT(DISTINCT ipiis.settlement_payment_reason SEPARATOR ',') AS paymentReason,
-        ipii.status,
-        ipii.payment_reason
+        ipii.status
         FROM
         ins_ply_income_invoice ipii
         LEFT JOIN ins_ply_income_invoice_settlement ipiis ON ipii.id = ipiis.invoice_id AND ipiis.is_delete = 0
@@ -2087,7 +2091,7 @@
                 AND a.system_code = #{query.systemCode}
             </if>
             <if test="query.companyId != null and query.companyId != ''">
-                AND a.company_id = #{query.companyId}
+                AND b.partner_company_id = #{query.companyId}
             </if>
             <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
                 AND a.create_time between #{query.startTime} and #{query.endTime}