소스 검색

Merge branch 'test' into test-dx

dongxin 1 년 전
부모
커밋
a98bd166f3
52개의 변경된 파일1208개의 추가작업 그리고 269개의 파일을 삭제
  1. 9 0
      sql/Online.sql
  2. 1 1
      src/main/java/com/ydtech/constants/InsuranceEnum.java
  3. 6 1
      src/main/java/com/ydtech/constants/enums/dict/InsOrderStatusAllEnum.java
  4. 7 0
      src/main/java/com/ydtech/constants/enums/dict/InsOrderStatusEnum.java
  5. 18 0
      src/main/java/com/ydtech/modules/admin/controller/SysUserController.java
  6. 3 0
      src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java
  7. 4 0
      src/main/java/com/ydtech/modules/admin/model/dto/TaskStatisticsDto.java
  8. 1 1
      src/main/java/com/ydtech/modules/admin/model/report/company/CompanyQutationCountDataDto.java
  9. 9 0
      src/main/java/com/ydtech/modules/admin/service/SysUserService.java
  10. 19 19
      src/main/java/com/ydtech/modules/admin/service/impl/CompanyDataReportServiceImpl.java
  11. 36 0
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java
  12. 21 0
      src/main/java/com/ydtech/modules/admin/service/impl/TaskStatisticsServiceImpl.java
  13. 11 2
      src/main/java/com/ydtech/modules/admin/service/impl/UserReportServiceImpl.java
  14. 8 0
      src/main/java/com/ydtech/modules/esm/service/EsmInsCompanyService.java
  15. 18 0
      src/main/java/com/ydtech/modules/esm/service/impl/EsmInsCompanyServiceImpl.java
  16. 3 3
      src/main/java/com/ydtech/modules/fee/dao/InsFeeTelemarketingMapper.java
  17. 73 23
      src/main/java/com/ydtech/modules/fee/entity/po/InsFeeTelemarketing.java
  18. 12 2
      src/main/java/com/ydtech/modules/fee/service/InsFeeTelemarketingService.java
  19. 2 2
      src/main/java/com/ydtech/modules/fee/service/impl/InsFeeTelemarketingServiceImpl.java
  20. 1 0
      src/main/java/com/ydtech/modules/ins/model/vo/CarInfoVo.java
  21. 51 9
      src/main/java/com/ydtech/modules/inv/utils/CheckInsPlyComeUtils.java
  22. 3 0
      src/main/java/com/ydtech/modules/order/aop/aspect/QuoteVerificationAspect.java
  23. 1 1
      src/main/java/com/ydtech/modules/order/components/InsOrdersComponents.java
  24. 3 1
      src/main/java/com/ydtech/modules/order/components/zijin/ZijinDuplicateInsuranceComponents.java
  25. 14 0
      src/main/java/com/ydtech/modules/order/controller/InsAreaCompanyController.java
  26. 2 5
      src/main/java/com/ydtech/modules/order/dao/InsAreaCompanyMapper.java
  27. 10 0
      src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java
  28. 13 0
      src/main/java/com/ydtech/modules/order/entity/vo/InsOrdersEditingVo.java
  29. 43 0
      src/main/java/com/ydtech/modules/order/entity/vo/SubmitExportFeesVo.java
  30. 94 18
      src/main/java/com/ydtech/modules/order/entity/vo/telemarketing/TelemarketingAuditOrderEditVo.java
  31. 10 1
      src/main/java/com/ydtech/modules/order/service/InsAreaCompanyService.java
  32. 8 0
      src/main/java/com/ydtech/modules/order/service/InsOrdersService.java
  33. 15 3
      src/main/java/com/ydtech/modules/order/service/InsuranceCompanyPolymerizationService.java
  34. 6 0
      src/main/java/com/ydtech/modules/order/service/impl/BoHaiOrderApiServiceImpl.java
  35. 8 0
      src/main/java/com/ydtech/modules/order/service/impl/DaJiaOrderServiceImpl.java
  36. 39 26
      src/main/java/com/ydtech/modules/order/service/impl/GuorenOrderApiServiceImpl.java
  37. 20 3
      src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyServiceImpl.java
  38. 7 0
      src/main/java/com/ydtech/modules/order/service/impl/InsCrawlerOrderServiceImpl.java
  39. 54 7
      src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
  40. 27 19
      src/main/java/com/ydtech/modules/order/service/impl/InsTelemarketingOrderServiceImpl.java
  41. 88 10
      src/main/java/com/ydtech/modules/order/service/impl/InsuranceCompanyPolymerizationServiceImpl.java
  42. 17 6
      src/main/java/com/ydtech/modules/order/service/impl/YongchengOrderApiServiceImpl.java
  43. 13 0
      src/main/java/com/ydtech/modules/order/service/impl/ZijinOrderApiServiceImpl.java
  44. 4 2
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementDeptServiceImpl.java
  45. 21 18
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java
  46. 267 32
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java
  47. 3 3
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesNewServiceImpl.java
  48. 3 1
      src/main/java/com/ydtech/modules/scheme/service/impl/PtlOptionalSchemeServiceImpl.java
  49. 46 25
      src/main/resources/mapper/modules/admin/SysUserMapper.xml
  50. 9 1
      src/main/resources/mapper/modules/ins/InsFeeTelemarketingMapper.xml
  51. 41 24
      src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml
  52. 6 0
      src/main/resources/mapper/modules/protocols/PtlAgreementProductCostsNewMapper.xml

+ 9 - 0
sql/Online.sql

@@ -0,0 +1,9 @@
+--  2024-10-15 BY dongxin statr
+ALTER TABLE `agent`.`ins_fee_telemarketing`
+ADD COLUMN `jq_total_proportion` decimal(10, 2) NULL DEFAULT NULL COMMENT '交强优惠比例' AFTER `create_time`,
+ADD COLUMN `sy_total_proportion` decimal(10, 2) NULL DEFAULT NULL COMMENT '商业优惠比例' AFTER `jq_total_proportion`,
+ADD COLUMN `no_total_proportion` decimal(10, 2) NULL DEFAULT NULL COMMENT '非车优惠比例' AFTER `sy_total_proportion`,
+ADD COLUMN `first_jq_total_proportion` decimal(10, 2) NULL DEFAULT NULL COMMENT '初始交强优惠比例' AFTER `no_total_proportion`,
+ADD COLUMN `first_sy_total_proportion` decimal(10, 2) NULL DEFAULT NULL COMMENT '初始商业优惠比例' AFTER `first_jq_total_proportion`,
+ADD COLUMN `first_no_total_proportion` decimal(10, 2) NULL DEFAULT NULL COMMENT '初始非车优惠比例' AFTER `first_sy_total_proportion`;
+--  2024-10-15 BY dongxin end

+ 1 - 1
src/main/java/com/ydtech/constants/InsuranceEnum.java

@@ -65,7 +65,7 @@ public enum InsuranceEnum {
     TAIC("TAIC", "天安财产保险股份有限公司", ""),
     TKIC("TKIC", "泰康在线财产保险股份有限公司", ""),
     TMNF("TMNF", "东京海上日动火灾保险(中国)有限公司", ""),
-    TPBX("TPBX", "安盛天平财产保险股份有限公司", "ansheng"),
+    TPBX("TPBX", "安盛天平财产保险股份有限公司", ""),
     TPIC("TPIC", "太平财产保险有限公司", ""),
     TSBX("TSBX", "泰山财产保险股份有限公司", ""),
     ULIC("ULIC", "合众财产保险股份有限公司", ""),

+ 6 - 1
src/main/java/com/ydtech/constants/enums/dict/InsOrderStatusAllEnum.java

@@ -30,7 +30,12 @@ public enum InsOrderStatusAllEnum implements IBaseEnum {
     UPDATE_BACK("状态更新", "状态更新", 7, 0),
 
     WAIT_RG("人工核保", "人工核保", 8, 0),
-    WAIT_ZD("自动核保", "自动核保", 9, 0)
+    WAIT_ZD("自动核保", "自动核保", 9, 0),
+
+    QUOTE_FAILED("10","报价失败",10,0),
+
+    //重复投保
+    REPEAT_INSURE("11","重复投保",11,0)
 
     //撤回二维码
 //    BACK_QR_CODE("5", "撤销二维码", 7, 0),

+ 7 - 0
src/main/java/com/ydtech/constants/enums/dict/InsOrderStatusEnum.java

@@ -26,6 +26,13 @@ public enum InsOrderStatusEnum implements IBaseEnum {
 
     //人工核保退回状态,直至再次提交核保,状态修改为待核保
     TO_BACK("4", "核保退回", 6, 0),
+
+    //报价失败
+    QUOTE_FAILED("10","报价失败",8,0),
+
+    //重复投保
+    REPEAT_INSURE("11","重复投保",9,0)
+
     //撤回二维码
 //    BACK_QR_CODE("5", "撤销二维码", 7, 0),
     ;

+ 18 - 0
src/main/java/com/ydtech/modules/admin/controller/SysUserController.java

@@ -936,6 +936,24 @@ public class SysUserController extends BaseController {
         }
 
     }
+    /**
+     * @version
+     * @author: whp
+     * @Date: 2024/10/12 16:12
+     * @Description: 机构人员树
+     */
+    @ApiOperation(value = "获取机构人员树")
+    @PostMapping(value = "/getTreeDeptUser")
+    public HttpResult getTreeDeptUser() {
+        try {
+            List<SysDeptTreeVo> userList = sysUserService.getTreeDeptUser();
+            return HttpResult.ok(userList);
+        } catch (Exception e) {
+            return HttpResult.error("查询失败" + e.getMessage());
+        }
+
+    }
+
 
     /**
      * @version

+ 3 - 0
src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java

@@ -516,6 +516,9 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
 
     List<QxFrontlineAgentDto> getQxFrontlineAgentList(@Param("vo") QxFrontlineAgentVo qxFrontlineAgentVo);
 
+    List<SysUser> findHxUserListNew();
+
+
 }
 
 

+ 4 - 0
src/main/java/com/ydtech/modules/admin/model/dto/TaskStatisticsDto.java

@@ -170,4 +170,8 @@ public class TaskStatisticsDto {
     @ApiModelProperty(value = "时间差")
     private String timeDifference;
 
+
+    @ApiModelProperty(value = "总保司")
+    private String insuranceCompanyNumber;
+
 }

+ 1 - 1
src/main/java/com/ydtech/modules/admin/model/report/company/CompanyQutationCountDataDto.java

@@ -78,7 +78,7 @@ public class CompanyQutationCountDataDto {
     private BigDecimal contributionRate;
 
     /***
-     *  承保数/核保书=缴费率
+     *  失败数
      */
     @ApiModelProperty("失败数")
     private BigDecimal areaCompanyErrNumber;

+ 9 - 0
src/main/java/com/ydtech/modules/admin/service/SysUserService.java

@@ -276,6 +276,15 @@ public interface SysUserService extends BaseIService<SysUser> {
      *  @Description: 查询用户管理的电销组员
      */
     List<String> getGroupByUserId(String userId);
+    /**
+     * @version
+     * @author: whp
+     * @Date: 2024/10/12 16:12
+     * @Description: 机构人员树
+     */
+    List<SysDeptTreeVo> getTreeDeptUser();
+
+
 }
 
 

+ 19 - 19
src/main/java/com/ydtech/modules/admin/service/impl/CompanyDataReportServiceImpl.java

@@ -86,25 +86,25 @@ public class CompanyDataReportServiceImpl implements CompanyDataReportService {
         Page<CompanyQutationCountDataDto> resultSubOrder = insAreaCompanyMapper.queryCompanyQutationCountDataPage(companyQutationCountDataQueryDto, page);
         Long total = this.insAreaCompanyMapper.queryCompanyQutationCountDataPageTotal(companyQutationCountDataQueryDto);
 
-        List<CompanyQutationCountDataDto> records = resultSubOrder.getRecords();
-        for (CompanyQutationCountDataDto  item :records){
-            String companyId = item.getCompanyId();
-            String parterCompanyId = item.getParterCompanyId();
-
-            companyQutationCountDataQueryDto.setCompanyId(companyId);
-            companyQutationCountDataQueryDto.setParterCompanyId(parterCompanyId);
-            CompanyQutationCountDataDto   errItem=  insAreaCompanyMapper.getInsAreaCompanyError(companyQutationCountDataQueryDto);
-            if(ObjectUtils.isNotEmpty(errItem)){
-                BigDecimal areaCompanyErrNumber = errItem.getAreaCompanyErrNumber();  //失败报价数
-                BigDecimal orderSuccessNumber = item.getOrderSuccessNumber();//成功报价数
-                BigDecimal allNumber = this.calculateTotal(areaCompanyErrNumber, orderSuccessNumber, null);
-                item.setAllNumber(allNumber);
-                item.setAreaCompanyErrNumber(areaCompanyErrNumber);
-                int scale = 2;
-                RoundingMode roundingMode = RoundingMode.HALF_UP; // 四舍五入
-                item.setOrderSuccessNumberRate(item.getOrderSuccessNumber().divide(allNumber, scale, roundingMode));
-            }
-        }
+//        List<CompanyQutationCountDataDto> records = resultSubOrder.getRecords();
+//        for (CompanyQutationCountDataDto  item :records){
+//            String companyId = item.getCompanyId();
+//            String parterCompanyId = item.getParterCompanyId();
+//
+//            companyQutationCountDataQueryDto.setCompanyId(companyId);
+//            companyQutationCountDataQueryDto.setParterCompanyId(parterCompanyId);
+//            CompanyQutationCountDataDto   errItem=  insAreaCompanyMapper.getInsAreaCompanyError(companyQutationCountDataQueryDto);
+//            if(ObjectUtils.isNotEmpty(errItem)){
+//                BigDecimal areaCompanyErrNumber = errItem.getAreaCompanyErrNumber();  //失败报价数
+//                BigDecimal orderSuccessNumber = item.getOrderSuccessNumber();//成功报价数
+//                BigDecimal allNumber = this.calculateTotal(areaCompanyErrNumber, orderSuccessNumber, null);
+//                item.setAllNumber(allNumber);
+//                item.setAreaCompanyErrNumber(areaCompanyErrNumber);
+//                int scale = 2;
+//                RoundingMode roundingMode = RoundingMode.HALF_UP; // 四舍五入
+//                item.setOrderSuccessNumberRate(item.getOrderSuccessNumber().divide(allNumber, scale, roundingMode));
+//            }
+//        }
         resultSubOrder.setTotal(total);
         return new BasePageResult<>(companyQutationCountDataQueryDto.getPageNum(), page.getSize(), resultSubOrder.getTotal(), page.getPages(),
                 resultSubOrder.getRecords());

+ 36 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.admin.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -16,6 +17,7 @@ import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.constants.QuMarks;
 import com.ydtech.modules.admin.constants.RoleConstants;
 import com.ydtech.modules.admin.constants.UserWorkStatus;
+import com.ydtech.modules.admin.dao.SysDeptMapper;
 import com.ydtech.modules.admin.dao.SysUserLinkAreaMapper;
 import com.ydtech.modules.admin.dao.SysUserMapper;
 import com.ydtech.modules.admin.model.*;
@@ -90,6 +92,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
     @Autowired
     private SysUserLinkAreaMapper sysUserLinkAreaMapper;
+    @Autowired
+    private SysDeptMapper sysDeptMapper;
 
     @Override
     public IPage<SysUserBaseVO> findUserList(PageDto<SysUserDto> pageDto) {
@@ -1731,4 +1735,36 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     public List<String> getGroupByUserId(String userId) {
         return sysUserMapper.getGroupByUserId(userId);
     }
+
+
+    @Override
+    public List<SysDeptTreeVo> getTreeDeptUser() {
+        List<SysUser> hxUserList = sysUserMapper.findHxUserListNew();
+        Map<String, List<SysUser>> groupedByDeptId = hxUserList.stream()
+                .collect(Collectors.groupingBy(SysUser::getDeptId, Collectors.toList()));
+
+
+        SysDept sysDept = this.sysDeptService.getById("9");
+        LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>();
+        lqw.eq(SysDept::getDelFlag, 0);
+//        lqw.isNull(SysDept::getComlevel);
+        lqw.likeRight(SysDept::getId, "9");
+        lqw.orderByAsc(SysDept::getOrderNum);
+        List<SysDept> sysDeptList = sysDeptMapper.selectList(lqw);
+        List<SysDeptTreeVo> sysDeptTreeVos = BeanUtil.copyToList(sysDeptList, SysDeptTreeVo.class);
+        Map<String, List<SysDeptTreeVo>> map = sysDeptTreeVos.stream().sorted(Comparator.comparing(SysDeptTreeVo::getId)).collect(Collectors.groupingBy(SysDeptTreeVo::getParentId));
+        sysDeptTreeVos.forEach(i -> {
+            if(map.get(i.getId()) ==null ){
+                List<SysUser> orDefault = groupedByDeptId.getOrDefault(i.getId(), new ArrayList<>());
+                List<SysDeptTreeVo> sysDeptTreeVos1 = BeanUtil.copyToList(orDefault, SysDeptTreeVo.class);
+                i.setChildren(sysDeptTreeVos1);
+            }else {
+                i.setChildren(map.getOrDefault(i.getId(), new ArrayList<>()));
+                i.setDeptCount(i.getChildren().size());
+            }
+        });
+        sysDeptTreeVos = map.get(sysDept.getParentId());
+
+        return sysDeptTreeVos;
+    }
 }

+ 21 - 0
src/main/java/com/ydtech/modules/admin/service/impl/TaskStatisticsServiceImpl.java

@@ -752,6 +752,27 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
      **/
     @Override
     public HttpResult insuranceCompanyExcel(TaskStatisticsVo taskStatisticsVo) {
+        if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getProvinceId())){
+            String provinceId =   this.removeTrailingZeros(taskStatisticsVo.getProvinceId());
+            taskStatisticsVo.setProvinceId(provinceId);
+
+        }
+        if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCityId())){
+            String cityId =   this.removeTrailingZeros(taskStatisticsVo.getCityId());
+            taskStatisticsVo.setCityId(cityId);
+        }
+        if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCountyId())){
+            String countyId =   this.removeTrailingZeros(taskStatisticsVo.getCountyId());
+            taskStatisticsVo.setCountyId(countyId);
+        }
+
+        if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
+            if("7".equals(taskStatisticsVo.getDays())){
+                taskStatisticsVo.setDays("2");
+            } else if ("30".equals(taskStatisticsVo.getDays())) {
+                taskStatisticsVo.setDays("3");
+            }
+        }
         List<InsuranceCompanyExcel> list = this.insAreaCompanyMapper.insuranceCompanyExcel(taskStatisticsVo);
         String uploadPath = this.uploadPath + "/excel/";
         Path path = Paths.get(uploadPath);

+ 11 - 2
src/main/java/com/ydtech/modules/admin/service/impl/UserReportServiceImpl.java

@@ -476,6 +476,9 @@ public class UserReportServiceImpl implements UserReportService {
             String countyId =   this.removeTrailingZeros(qxFrontlineAgentVo.getCountyId());
             qxFrontlineAgentVo.setCountyId(countyId);
         }
+        HashMap<String, String> map = getDateMapByType(qxFrontlineAgentVo.getDays(), qxFrontlineAgentVo.getCreatetimeStart(), qxFrontlineAgentVo.getCreatetimeEnd());
+        qxFrontlineAgentVo.setCreatetimeStart(map.get("startDate"));
+        qxFrontlineAgentVo.setCreatetimeEnd(map.get("endDate"));
         //按照条件重新查询数据
         List<QxFrontlineAgentDto> list = sysUserMapper.queryQxFrontlineAgentList(qxFrontlineAgentVo);
         List<QxFrontlineAgentDto> listNew =new ArrayList<>();
@@ -508,8 +511,11 @@ public class UserReportServiceImpl implements UserReportService {
                         .collect(Collectors.toList());
                 if(limitList!=null &&  limitList.size()>0){
                     for(QxFrontlineAgentDto  dto : limitList){
+                        List<String> ids = dto.getIds();
+                        qxFrontlineAgentVo.setIds(ids);
+
                         //查询出单人力
-                        Double  sumAmount  = insAreaCompanyService.getOrderPremiumByUserIds(dto.getIds());
+                        Double  sumAmount  = insAreaCompanyService.getOrderPremiumByUserIds(qxFrontlineAgentVo);
                         dto.setTotalPremium(sumAmount.toString());
                         listNew.add(dto);
                     }
@@ -526,7 +532,10 @@ public class UserReportServiceImpl implements UserReportService {
                     userIds.add(dto.getUserId());
                     dto.setIds(userIds);
                     dto.setTotalManpower(userIds.size()+"");
-                    Double  sumAmount  = insAreaCompanyService.getOrderPremiumByUserIds(dto.getIds());
+                    List<String> ids = dto.getIds();
+                    qxFrontlineAgentVo.setIds(ids);
+
+                    Double  sumAmount  = insAreaCompanyService.getOrderPremiumByUserIds(qxFrontlineAgentVo);
                     dto.setTotalPremium(sumAmount.toString());
                     dto.setTotalPremiumNum(sumAmount);
                     listNews.add(dto);

+ 8 - 0
src/main/java/com/ydtech/modules/esm/service/EsmInsCompanyService.java

@@ -76,6 +76,14 @@ public interface EsmInsCompanyService extends IService<EsmInsCompany> {
      *  @Description:  查询子订单中的保险公司列表
      */
     List<EsmInsCompanyResVo> findOrderCompanyList();
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/12 15:46
+     *  @Description:  通过保险公司名称或简称查询
+     */
+    public EsmInsCompany findInsCompanyByNameOrNamesimple(String companyName);
 }
 
 

+ 18 - 0
src/main/java/com/ydtech/modules/esm/service/impl/EsmInsCompanyServiceImpl.java

@@ -182,6 +182,24 @@ public class EsmInsCompanyServiceImpl extends ServiceImpl<EsmInsCompanyMapper, E
     public List<EsmInsCompanyResVo> findOrderCompanyList() {
         return baseMapper.findOrderCompanyList();
     }
+
+
+   /**
+    *  @version
+    *  @author: hxl
+    *  @Date: 2024/10/12 15:42
+    *  @Description: 通过名称或简称查询
+    */
+    @Override
+    public EsmInsCompany findInsCompanyByNameOrNamesimple(String companyName) {
+        LambdaQueryWrapper<EsmInsCompany> lqw = new LambdaQueryWrapper<>();
+        lqw.eq(EsmInsCompany::getName, companyName).or().eq(EsmInsCompany::getNamesimple, companyName);
+        List<EsmInsCompany> list = list(lqw);
+        if (null != list && !list.isEmpty()) {
+            return list.get(0);
+        }
+        return null;
+    }
 }
 
 

+ 3 - 3
src/main/java/com/ydtech/modules/fee/dao/InsFeeTelemarketingMapper.java

@@ -4,10 +4,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ydtech.modules.fee.entity.po.InsFeeTelemarketing;
 
 /**
-* @author Administrator
+* @author dongxin
 * @description 针对表【ins_fee_telemarketing(电销费用扣减比例)】的数据库操作Mapper
-* @createDate 2024-08-28 19:13:00
-* @Entity com.ydtech.modules.fee.entity.po.InsFeeTelemarketing
+* @createDate 2024-10-15 11:02:51
+* @Entity generator.domain.InsFeeTelemarketing
 */
 public interface InsFeeTelemarketingMapper extends BaseMapper<InsFeeTelemarketing> {
 

+ 73 - 23
src/main/java/com/ydtech/modules/fee/entity/po/InsFeeTelemarketing.java

@@ -4,74 +4,106 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.Date;
-
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.order.entity.vo.SubmitExportFeesVo;
 import lombok.Data;
 
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
 /**
  * 电销费用扣减比例
- *
  * @TableName ins_fee_telemarketing
  */
-@TableName(value = "ins_fee_telemarketing")
+@TableName(value ="ins_fee_telemarketing")
 @Data
 public class InsFeeTelemarketing implements Serializable {
     /**
      * 主键
      */
-    @TableId(value = "id", type = IdType.AUTO)
+    @TableId(type = IdType.AUTO)
     private Integer id;
 
     /**
      * 子订单id
      */
-    @TableField(value = "sub_order_no")
     private String subOrderNo;
 
     /**
      * 交强扣减比例
      */
-    @TableField(value = "jq_export_proportion")
     private BigDecimal jqExportProportion;
 
     /**
      * 商业扣减比例
      */
-    @TableField(value = "sy_export_proportion")
     private BigDecimal syExportProportion;
 
     /**
      * 非车扣减比例
      */
-    @TableField(value = "no_car_export_proportion")
     private BigDecimal noCarExportProportion;
 
     /**
      * 创建用户
      */
-    @TableField(value = "create_user")
     private String createUser;
 
     /**
      * 创建时间
      */
-    @TableField(value = "create_time")
-    private Date createTime;
+    private LocalDateTime createTime;
+
+    /**
+     * 交强优惠比例
+     */
+    private BigDecimal jqTotalProportion;
+
+    /**
+     * 商业优惠比例
+     */
+    private BigDecimal syTotalProportion;
+
+    /**
+     * 非车优惠比例
+     */
+    private BigDecimal noTotalProportion;
+
+    /**
+     * 初始交强优惠比例
+     */
+    private BigDecimal firstJqTotalProportion;
+
+    /**
+     * 初始商业优惠比例
+     */
+    private BigDecimal firstSyTotalProportion;
+
+    /**
+     * 初始非车优惠比例
+     */
+    private BigDecimal firstNoTotalProportion;
 
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 
+    public InsFeeTelemarketing() {
+        super();
+    }
+
     public InsFeeTelemarketing(SubmitExportFeesVo submitExportFeesVo) {
         this.subOrderNo = submitExportFeesVo.getSubOrderNo();
         this.jqExportProportion = submitExportFeesVo.getJqExportProportion();
         this.syExportProportion = submitExportFeesVo.getSyExportProportion();
         this.noCarExportProportion = submitExportFeesVo.getNoCarExportProportion();
-        this.createTime = new Date();
+        this.jqTotalProportion = submitExportFeesVo.getJqdiscountrate();
+        this.syTotalProportion = submitExportFeesVo.getSydiscountrate();
+        this.noTotalProportion = submitExportFeesVo.getNodiscountrate();
+        this.firstJqTotalProportion = submitExportFeesVo.getFirstjqdiscountrate();
+        this.firstSyTotalProportion = submitExportFeesVo.getFirstsydiscountrate();
+        this.firstNoTotalProportion = submitExportFeesVo.getFirstnodiscountrate();
+        this.createTime = LocalDateTime.now();
         this.createUser = BaseController.getUserId();
     }
 
@@ -88,12 +120,18 @@ public class InsFeeTelemarketing implements Serializable {
         }
         InsFeeTelemarketing other = (InsFeeTelemarketing) that;
         return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
-                && (this.getSubOrderNo() == null ? other.getSubOrderNo() == null : this.getSubOrderNo().equals(other.getSubOrderNo()))
-                && (this.getJqExportProportion() == null ? other.getJqExportProportion() == null : this.getJqExportProportion().equals(other.getJqExportProportion()))
-                && (this.getSyExportProportion() == null ? other.getSyExportProportion() == null : this.getSyExportProportion().equals(other.getSyExportProportion()))
-                && (this.getNoCarExportProportion() == null ? other.getNoCarExportProportion() == null : this.getNoCarExportProportion().equals(other.getNoCarExportProportion()))
-                && (this.getCreateUser() == null ? other.getCreateUser() == null : this.getCreateUser().equals(other.getCreateUser()))
-                && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()));
+            && (this.getSubOrderNo() == null ? other.getSubOrderNo() == null : this.getSubOrderNo().equals(other.getSubOrderNo()))
+            && (this.getJqExportProportion() == null ? other.getJqExportProportion() == null : this.getJqExportProportion().equals(other.getJqExportProportion()))
+            && (this.getSyExportProportion() == null ? other.getSyExportProportion() == null : this.getSyExportProportion().equals(other.getSyExportProportion()))
+            && (this.getNoCarExportProportion() == null ? other.getNoCarExportProportion() == null : this.getNoCarExportProportion().equals(other.getNoCarExportProportion()))
+            && (this.getCreateUser() == null ? other.getCreateUser() == null : this.getCreateUser().equals(other.getCreateUser()))
+            && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()))
+            && (this.getJqTotalProportion() == null ? other.getJqTotalProportion() == null : this.getJqTotalProportion().equals(other.getJqTotalProportion()))
+            && (this.getSyTotalProportion() == null ? other.getSyTotalProportion() == null : this.getSyTotalProportion().equals(other.getSyTotalProportion()))
+            && (this.getNoTotalProportion() == null ? other.getNoTotalProportion() == null : this.getNoTotalProportion().equals(other.getNoTotalProportion()))
+            && (this.getFirstJqTotalProportion() == null ? other.getFirstJqTotalProportion() == null : this.getFirstJqTotalProportion().equals(other.getFirstJqTotalProportion()))
+            && (this.getFirstSyTotalProportion() == null ? other.getFirstSyTotalProportion() == null : this.getFirstSyTotalProportion().equals(other.getFirstSyTotalProportion()))
+            && (this.getFirstNoTotalProportion() == null ? other.getFirstNoTotalProportion() == null : this.getFirstNoTotalProportion().equals(other.getFirstNoTotalProportion()));
     }
 
     @Override
@@ -107,6 +145,12 @@ public class InsFeeTelemarketing implements Serializable {
         result = prime * result + ((getNoCarExportProportion() == null) ? 0 : getNoCarExportProportion().hashCode());
         result = prime * result + ((getCreateUser() == null) ? 0 : getCreateUser().hashCode());
         result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
+        result = prime * result + ((getJqTotalProportion() == null) ? 0 : getJqTotalProportion().hashCode());
+        result = prime * result + ((getSyTotalProportion() == null) ? 0 : getSyTotalProportion().hashCode());
+        result = prime * result + ((getNoTotalProportion() == null) ? 0 : getNoTotalProportion().hashCode());
+        result = prime * result + ((getFirstJqTotalProportion() == null) ? 0 : getFirstJqTotalProportion().hashCode());
+        result = prime * result + ((getFirstSyTotalProportion() == null) ? 0 : getFirstSyTotalProportion().hashCode());
+        result = prime * result + ((getFirstNoTotalProportion() == null) ? 0 : getFirstNoTotalProportion().hashCode());
         return result;
     }
 
@@ -123,8 +167,14 @@ public class InsFeeTelemarketing implements Serializable {
         sb.append(", noCarExportProportion=").append(noCarExportProportion);
         sb.append(", createUser=").append(createUser);
         sb.append(", createTime=").append(createTime);
+        sb.append(", jqTotalProportion=").append(jqTotalProportion);
+        sb.append(", syTotalProportion=").append(syTotalProportion);
+        sb.append(", noTotalProportion=").append(noTotalProportion);
+        sb.append(", firstJqTotalProportion=").append(firstJqTotalProportion);
+        sb.append(", firstSyTotalProportion=").append(firstSyTotalProportion);
+        sb.append(", firstNoTotalProportion=").append(firstNoTotalProportion);
         sb.append(", serialVersionUID=").append(serialVersionUID);
         sb.append("]");
         return sb.toString();
     }
-}
+}

+ 12 - 2
src/main/java/com/ydtech/modules/fee/service/InsFeeTelemarketingService.java

@@ -1,13 +1,23 @@
 package com.ydtech.modules.fee.service;
 
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.modules.fee.entity.po.InsFeeTelemarketing;
 
+import java.util.List;
+
 /**
-* @author Administrator
+* @author dongxin
 * @description 针对表【ins_fee_telemarketing(电销费用扣减比例)】的数据库操作Service
-* @createDate 2024-08-28 19:13:00
+* @createDate 2024-10-15 11:02:51
 */
 public interface InsFeeTelemarketingService extends IService<InsFeeTelemarketing> {
 
+    default InsFeeTelemarketing getByInsOrderNo(String id){
+        List<InsFeeTelemarketing> insFeeTelemarketingList = lambdaQuery()
+                .eq(InsFeeTelemarketing::getSubOrderNo,id)
+                .list();
+
+        return CollUtil.isNotEmpty(insFeeTelemarketingList)? insFeeTelemarketingList.get(0):null;
+    }
 }

+ 2 - 2
src/main/java/com/ydtech/modules/fee/service/impl/InsFeeTelemarketingServiceImpl.java

@@ -7,9 +7,9 @@ import com.ydtech.modules.fee.service.InsFeeTelemarketingService;
 import org.springframework.stereotype.Service;
 
 /**
-* @author Administrator
+* @author dongxin
 * @description 针对表【ins_fee_telemarketing(电销费用扣减比例)】的数据库操作Service实现
-* @createDate 2024-08-28 19:13:00
+* @createDate 2024-10-15 11:02:51
 */
 @Service
 public class InsFeeTelemarketingServiceImpl extends ServiceImpl<InsFeeTelemarketingMapper, InsFeeTelemarketing>

+ 1 - 0
src/main/java/com/ydtech/modules/ins/model/vo/CarInfoVo.java

@@ -150,6 +150,7 @@ public class CarInfoVo {
         this.transferFlag = transferFlag;
     }
 
+    // 华农,太平,泰康,华泰
     @ApiModelProperty(value = "商业是否过户")
     private boolean transferFlagBi;
 

+ 51 - 9
src/main/java/com/ydtech/modules/inv/utils/CheckInsPlyComeUtils.java

@@ -38,7 +38,7 @@ public class CheckInsPlyComeUtils {
      */
     public static String  checkSignDate(String data,String msg){
         String errorMsg =null;
-        if(StringUtils.isBlank(data)  ||  isValidDate("yyyy-MM-dd HH:mm:ss", data) ){
+        if(StringUtils.isBlank(data)  ||  !isValidDate(data,"yyyy-MM-dd HH:mm:ss") ){
             errorMsg = msg+"不能为空或格式错误,格式为yyyy-MM-dd HH:mm:ss";
         }
         return errorMsg;
@@ -95,7 +95,7 @@ public class CheckInsPlyComeUtils {
     public static  Map<String,String>  checkCompanyName(String data,String msg) {
         ApplicationContext applicationContext = SpringContextUtil.getApplicationContext();
         EsmInsCompanyService esmInsCompanyService = applicationContext.getBean(EsmInsCompanyService.class);
-        EsmInsCompany insCompany = esmInsCompanyService.findInsCompanyByName(data);
+        EsmInsCompany insCompany = esmInsCompanyService.findInsCompanyByNameOrNamesimple(data);
         String errorMsg =null;
         String id ="";
         if(StringUtils.isBlank(data) || insCompany==null ){
@@ -117,10 +117,12 @@ public class CheckInsPlyComeUtils {
     public static Map<String,Object> checkAgreeName(String data, String msg,String type) {
         ApplicationContext applicationContext = SpringContextUtil.getApplicationContext();
         PtlAgreementService ptlAgreementService = applicationContext.getBean(PtlAgreementService.class);
-        PtlAgreement ptlAgreement = ptlAgreementService.getByAgreementTitle(data);
+        //由于协议名称确定不了唯一,通过协议编号确认唯一  add  by  hxl  2024-10-12 14:36
+        PtlAgreement ptlAgreement = ptlAgreementService.getById(data);
+        //PtlAgreement ptlAgreement = ptlAgreementService.getByAgreementTitle(data);
         String errorMsg =null;
         if(StringUtils.isBlank(data) || ptlAgreement==null ){
-            errorMsg=msg+"不能为空或者格式错误,未查询到"+msg+"名称,请填写协议名称";
+            errorMsg=msg+"不能为空或者格式错误,未查询到"+msg+"名称,请填写协议编号";
         }else {
             // 2 私有  1 平台
             if(!type.equals(ptlAgreement.getAgreementType())){
@@ -189,7 +191,7 @@ public class CheckInsPlyComeUtils {
             companyId = companyMap.get("id").toString();
         }
         String partnerCompaniesId =null;
-        Map<String, String> companySubMap = checkCompanyName(dto.getCompanyName(), "保司机构");
+        Map<String, String> companySubMap = checkCompanyName(dto.getPartnerCompaniesName(), "保司机构");
         if(companySubMap!=null && companySubMap.get("msg")!=null){
             errorMsg+=companySubMap+"; ";
         }else if( companySubMap.get("msg")==null){
@@ -200,10 +202,12 @@ public class CheckInsPlyComeUtils {
         }
         String agreeId=null;
         String agreeDeptId =null;
+        PtlAgreement ptl= null;
         Map<String, Object> agreeMap = checkAgreeName(dto.getAgreementName(), "协议选择", "2");
         if(agreeMap!=null && agreeMap.get("msg")!=null){
             errorMsg+=agreeMap.get("msg").toString()+"; ";
         }else if(agreeMap.get("msg")==null){
+            ptl =((PtlAgreement)agreeMap.get("id"));
             agreeId = ((PtlAgreement)agreeMap.get("id")).getId().toString();
             agreeDeptId = ((PtlAgreement)agreeMap.get("id")).getDeptId().toString();
         }
@@ -241,6 +245,12 @@ public class CheckInsPlyComeUtils {
         }else if(addTypeMap.get("msg")==null){
             addTypeId = addTypeMap.get("id").toString();
         }
+        //添加验证协议id 和保险公司id和保司机构id匹配  add  by  hxl  2024-10-12
+        if(companyId!=null  &&  partnerCompaniesId !=null && ptl!=null ){
+            if(!ptl.getInsuranceCompanyId().equals(companyId) || !ptl.getPartnerCompaniesId().equals(partnerCompaniesId)){
+                errorMsg+="协议选择和保险公司和保司机构名称不一致,请确认;";
+            }
+        }
         map.put("msg",errorMsg);
         if(StringUtils.isBlank(errorMsg)){
             InsPlyIncome  insPlyIncome =new InsPlyIncome(dto.getSignDate(),dto.getLicenseno(),companyId,dto.getCompanyName(),partnerCompaniesId,dto.getPartnerCompaniesName(),
@@ -275,7 +285,7 @@ public class CheckInsPlyComeUtils {
             companyId = companyMap.get("id").toString();
         }
         String partnerCompaniesId =null;
-        Map<String, String> companySubMap = checkCompanyName(dto.getCompanyName(), "保司机构");
+        Map<String, String> companySubMap = checkCompanyName(dto.getPartnerCompaniesName(), "保司机构");
         if(companySubMap!=null && companySubMap.get("msg")!=null){
             errorMsg+=companySubMap+"; ";
         }else if( companySubMap.get("msg")==null){
@@ -286,10 +296,12 @@ public class CheckInsPlyComeUtils {
         }
         String agreeId=null;
         String agreeDeptId =null;
+        PtlAgreement ptl= null;
         Map<String, Object> agreeMap = checkAgreeName(dto.getAgreementName(), "协议选择", "2");
         if(agreeMap!=null && agreeMap.get("msg")!=null){
             errorMsg+=agreeMap.get("msg").toString()+"; ";
         }else if(agreeMap.get("msg")==null){
+            ptl =((PtlAgreement)agreeMap.get("id"));
             agreeId = ((PtlAgreement)agreeMap.get("id")).getId().toString();
             agreeDeptId = ((PtlAgreement)agreeMap.get("id")).getDeptId().toString();
         }
@@ -327,6 +339,12 @@ public class CheckInsPlyComeUtils {
         }else if(addTypeMap.get("msg")==null){
             addTypeId = addTypeMap.get("id").toString();
         }
+        //添加验证协议id 和保险公司id和保司机构id匹配  add  by  hxl  2024-10-12
+        if(companyId!=null  &&  partnerCompaniesId !=null && ptl!=null ){
+            if(!ptl.getInsuranceCompanyId().equals(companyId) || !ptl.getPartnerCompaniesId().equals(partnerCompaniesId)){
+                errorMsg+="协议选择和保险公司和保司机构名称不一致,请确认;";
+            }
+        }
         map.put("msg",errorMsg);
         if(StringUtils.isBlank(errorMsg)){
             InsPlyIncome  insPlyIncome =new InsPlyIncome(dto.getSignDate(),dto.getLicenseno(),companyId,dto.getCompanyName(),partnerCompaniesId,dto.getPartnerCompaniesName(),
@@ -360,7 +378,7 @@ public class CheckInsPlyComeUtils {
             companyId = companyMap.get("id").toString();
         }
         String partnerCompaniesId =null;
-        Map<String, String> companySubMap = checkCompanyName(dto.getCompanyName(), "保司机构");
+        Map<String, String> companySubMap = checkCompanyName(dto.getPartnerCompaniesName(), "保司机构");
         if(companySubMap!=null && companySubMap.get("msg")!=null){
             errorMsg+=companySubMap+"; ";
         }else if( companySubMap.get("msg")==null){
@@ -371,10 +389,12 @@ public class CheckInsPlyComeUtils {
         }
         String agreeId=null;
         String agreeDeptId =null;
+        PtlAgreement ptl= null;
         Map<String, Object> agreeMap = checkAgreeName(dto.getAgreementName(), "协议选择", "2");
         if(agreeMap!=null && agreeMap.get("msg")!=null){
             errorMsg+=agreeMap.get("msg").toString()+"; ";
         }else if(agreeMap.get("msg")==null){
+            ptl =((PtlAgreement)agreeMap.get("id"));
             agreeId = ((PtlAgreement)agreeMap.get("id")).getId().toString();
             agreeDeptId = ((PtlAgreement)agreeMap.get("id")).getDeptId().toString();
         }
@@ -400,6 +420,12 @@ public class CheckInsPlyComeUtils {
         }else if(addTypeMap.get("msg")==null){
             addTypeId = addTypeMap.get("id").toString();
         }
+        //添加验证协议id 和保险公司id和保司机构id匹配  add  by  hxl  2024-10-12
+        if(companyId!=null  &&  partnerCompaniesId !=null && ptl!=null ){
+            if(!ptl.getInsuranceCompanyId().equals(companyId) || !ptl.getPartnerCompaniesId().equals(partnerCompaniesId)){
+                errorMsg+="协议选择和保险公司和保司机构名称不一致,请确认;";
+            }
+        }
         map.put("msg",errorMsg);
         if(StringUtils.isBlank(errorMsg)){
             InsPlyIncome  insPlyIncome =new InsPlyIncome(dto.getSignDate(),dto.getLicenseno(),companyId,dto.getCompanyName(),partnerCompaniesId,dto.getPartnerCompaniesName(),
@@ -432,7 +458,7 @@ public class CheckInsPlyComeUtils {
             companyId = companyMap.get("id").toString();
         }
         String partnerCompaniesId =null;
-        Map<String, String> companySubMap = checkCompanyName(dto.getCompanyName(), "保司机构");
+        Map<String, String> companySubMap = checkCompanyName(dto.getPartnerCompaniesName(), "保司机构");
         if(companySubMap!=null && companySubMap.get("msg")!=null){
             errorMsg+=companySubMap+"; ";
         }else if( companySubMap.get("msg")==null){
@@ -443,10 +469,12 @@ public class CheckInsPlyComeUtils {
         }
         String agreeId=null;
         String agreeDeptId =null;
+        PtlAgreement ptl= null;
         Map<String, Object> agreeMap = checkAgreeName(dto.getAgreementName(), "协议选择", "2");
         if(agreeMap!=null && agreeMap.get("msg")!=null){
             errorMsg+=agreeMap.get("msg").toString()+"; ";
         }else if(agreeMap.get("msg")==null){
+            ptl =((PtlAgreement)agreeMap.get("id"));
             agreeId = ((PtlAgreement)agreeMap.get("id")).getId().toString();
             agreeDeptId = ((PtlAgreement)agreeMap.get("id")).getDeptId().toString();
         }
@@ -472,6 +500,12 @@ public class CheckInsPlyComeUtils {
         }else if(addTypeMap.get("msg")==null){
             addTypeId = addTypeMap.get("id").toString();
         }
+        //添加验证协议id 和保险公司id和保司机构id匹配  add  by  hxl  2024-10-12
+        if(companyId!=null  &&  partnerCompaniesId !=null && ptl!=null ){
+            if(!ptl.getInsuranceCompanyId().equals(companyId) || !ptl.getPartnerCompaniesId().equals(partnerCompaniesId)){
+                errorMsg+="协议选择和保险公司和保司机构名称不一致,请确认;";
+            }
+        }
         map.put("msg",errorMsg);
         if(StringUtils.isBlank(errorMsg)){
             InsPlyIncome  insPlyIncome =new InsPlyIncome(dto.getSignDate(),dto.getLicenseno(),companyId,dto.getCompanyName(),partnerCompaniesId,dto.getPartnerCompaniesName(),
@@ -504,7 +538,7 @@ public class CheckInsPlyComeUtils {
             companyId = companyMap.get("id").toString();
         }
         String partnerCompaniesId =null;
-        Map<String, String> companySubMap = checkCompanyName(dto.getCompanyName(), "保司机构");
+        Map<String, String> companySubMap = checkCompanyName(dto.getPartnerCompaniesName(), "保司机构");
         if(companySubMap!=null && companySubMap.get("msg")!=null){
             errorMsg+=companySubMap+"; ";
         }else if( companySubMap.get("msg")==null){
@@ -515,10 +549,12 @@ public class CheckInsPlyComeUtils {
         }
         String agreeId=null;
         String agreeDeptId =null;
+        PtlAgreement ptl= null;
         Map<String, Object> agreeMap = checkAgreeName(dto.getAgreementName(), "协议选择", "1");
         if(agreeMap!=null && agreeMap.get("msg")!=null){
             errorMsg+=agreeMap.get("msg").toString()+"; ";
         }else if(agreeMap.get("msg")==null){
+            ptl =((PtlAgreement)agreeMap.get("id"));
             agreeId = ((PtlAgreement)agreeMap.get("id")).getId().toString();
             agreeDeptId = ((PtlAgreement)agreeMap.get("id")).getDeptId().toString();
         }
@@ -567,6 +603,12 @@ public class CheckInsPlyComeUtils {
         }else if(addTypeMap.get("msg")==null){
             addTypeId = addTypeMap.get("id").toString();
         }
+        //添加验证协议id 和保险公司id和保司机构id匹配  add  by  hxl  2024-10-12
+        if(companyId!=null  &&  partnerCompaniesId !=null && ptl!=null ){
+            if(!ptl.getInsuranceCompanyId().equals(companyId) || !ptl.getPartnerCompaniesId().equals(partnerCompaniesId)){
+                errorMsg+="协议选择和保险公司和保司机构名称不一致,请确认;";
+            }
+        }
         map.put("msg",errorMsg);
         if(StringUtils.isBlank(errorMsg)){
             InsPlyIncome  insPlyIncome =new InsPlyIncome(dto.getSignDate(),dto.getLicenseno(),companyId,dto.getCompanyName(),partnerCompaniesId,dto.getPartnerCompaniesName(),

+ 3 - 0
src/main/java/com/ydtech/modules/order/aop/aspect/QuoteVerificationAspect.java

@@ -135,6 +135,9 @@ public class QuoteVerificationAspect {
                     }
 
                 }else{
+                    //将匹配失败的费用日志存储
+                    insAreaCompanyService.updateFeeMatchErrMsg(result.getData().getCompanyId(),logs.toString());
+
                     //输出费用匹配失败日志
                     result.getData().setFeeNoDescription(logs.toString());
                 }

+ 1 - 1
src/main/java/com/ydtech/modules/order/components/InsOrdersComponents.java

@@ -85,7 +85,7 @@ public class InsOrdersComponents {
         //替换商业险信息
         quoteInfoVo.setKindList(kindInfoVoList);
         //赋值 userid
-        if(Objects.isNull(quoteInfoVo.getUserid()) && quoteInfoVo.getUserid().equals("")) {
+        if(Objects.isNull(quoteInfoVo.getUserid()) || quoteInfoVo.getUserid().equals("")) {
             quoteInfoVo.setUserid(quoteInfoVo.getUserId());
         }
         return quoteInfoVo;

+ 3 - 1
src/main/java/com/ydtech/modules/order/components/zijin/ZijinDuplicateInsuranceComponents.java

@@ -103,7 +103,9 @@ public class ZijinDuplicateInsuranceComponents extends ResponseMessageAbstractHa
         }
 
         if (jqEndDate.isEmpty() && syEndDate.isEmpty()) {
-            throw new SystemException(rtnMsg);
+            // 修改 需要在外部获取异常信息
+            return calculatePremiumResponse;
+//            throw new SystemException(rtnMsg);
         }
         repeatNumber -= 1;
         baseInfo.setTrafficTime(jqEndDate);

+ 14 - 0
src/main/java/com/ydtech/modules/order/controller/InsAreaCompanyController.java

@@ -98,4 +98,18 @@ public class InsAreaCompanyController {
         throw new SystemException("订单状态无法恢复");
     }
 
+    @PostMapping("/batchUpdatePendingUnderwritingOrder")
+    @ApiOperation("批量更新订单(待核保状态下)")
+    public HttpResult<String> batchUpdateOrders(@RequestBody List<String> subOrders) {
+        insuranceCompanyPolymerizationService.updatePendingUnderwritingOrder(subOrders);
+        return HttpResult.ok("订单正在更新中,请稍后刷新列表");
+    }
+
+    @PostMapping("/batchUpdateUnderwrittenForPaymentOrder")
+    @ApiOperation("批量更新订单(已核保待缴费下)")
+    public HttpResult<String> updateUnderwrittenForPaymentOrder(@RequestBody List<String> subOrders) {
+        insuranceCompanyPolymerizationService.updateUnderwrittenForPaymentOrder(subOrders);
+        return HttpResult.ok("订单正在更新中,请稍后刷新列表");
+    }
+
 }

+ 2 - 5
src/main/java/com/ydtech/modules/order/dao/InsAreaCompanyMapper.java

@@ -10,10 +10,7 @@ import com.ydtech.modules.admin.model.report.opetationData.BusinessDataDto;
 import com.ydtech.modules.admin.model.report.opetationData.BusinessDataQueryDto;
 import com.ydtech.modules.admin.model.report.opetationData.QuotationCountDataDto;
 import com.ydtech.modules.admin.model.report.opetationData.QuotationCountQueryDto;
-import com.ydtech.modules.admin.model.vo.AgencyUserInsAreaVo;
-import com.ydtech.modules.admin.model.vo.OrdersDataVo;
-import com.ydtech.modules.admin.model.vo.SubOrder;
-import com.ydtech.modules.admin.model.vo.TaskStatisticsVo;
+import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.dto.InsAreaCompanyQueryDto;
@@ -245,7 +242,7 @@ public interface InsAreaCompanyMapper extends BaseMapper<InsAreaCompany> {
      *  @Date: 2024/8/30 10:22
      *  @Description:  通过用户id查询金额数据
      */
-    Double  getOrderPremiumByUserIds(@Param("ids") List<String>  ids);
+    Double  getOrderPremiumByUserIds(@Param("vo") QxFrontlineAgentVo qxFrontlineAgentVo);
     /**
      *  @version
      *  @author: whp

+ 10 - 0
src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java

@@ -513,6 +513,16 @@ public class InsAreaCompany implements Serializable {
     @TableField("order_source")
     private Integer orderSource;
 
+    //费用匹配信息
+    @TableField("fee_match_err_msg")
+//    @TableField(exist = false)
+    private String feeMatchErrMsg;
+
+    //报价错误信息
+    @TableField("quote_err_msg")
+//    @TableField(exist = false)
+    private String quoteErrMsg;
+
     /**
      * 0 删除 1 正常
      * 删除订单

+ 13 - 0
src/main/java/com/ydtech/modules/order/entity/vo/InsOrdersEditingVo.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.modules.ins.model.vo.AccidentResponseVo;
 import com.ydtech.modules.ins.model.vo.QuoteKindRespVo;
 import com.ydtech.modules.ins.model.vo.QuoteRiskRespVo;
@@ -252,6 +253,15 @@ public class InsOrdersEditingVo extends InsOrders implements Serializable {
         @ApiModelProperty("驾意险名称")
         private String jyName;
 
+        @ApiModelProperty("费用匹配信息")
+        private String feeMatchErrMsg;
+
+        @ApiModelProperty("报价错误信息")
+        private String quoteErrMsg;
+
+        @ApiModelProperty("状态信息")
+        private String orderStatusInfo;
+
         public void feeVacant() {
             this.jqExportFee = null;
             this.syExportFee = null;
@@ -295,6 +305,9 @@ public class InsOrdersEditingVo extends InsOrders implements Serializable {
             this.jqLossRation = insAreaCompany.getJqLossRation();
             this.syLossRation = insAreaCompany.getSyLossRation();
             this.ubiPredictedInfoScore = insAreaCompany.getUbiPredictedInfoScore();
+            this.feeMatchErrMsg = insAreaCompany.getFeeMatchErrMsg();
+            this.quoteErrMsg = insAreaCompany.getQuoteErrMsg();
+            this.orderStatusInfo = InsOrderStatusEnum.matchKey(insAreaCompany.getOrderstatus()).getDesc();
         }
     }
 

+ 43 - 0
src/main/java/com/ydtech/modules/order/entity/vo/SubmitExportFeesVo.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.order.entity.vo;
 
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.ydtech.utils.ObjectUtil;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -27,6 +28,24 @@ public class SubmitExportFeesVo {
     @ApiModelProperty("非车出口比例")
     private BigDecimal noCarExportProportion;
 
+    @ApiModelProperty("交强优惠比例")
+    private BigDecimal jqdiscountrate;
+
+    @ApiModelProperty("商业优惠比例")
+    private BigDecimal sydiscountrate;
+
+    @ApiModelProperty("非车优惠比例")
+    private BigDecimal nodiscountrate;
+
+    @ApiModelProperty("初始交强优惠比例")
+    private BigDecimal firstjqdiscountrate;
+
+    @ApiModelProperty("初始商业优惠比例")
+    private BigDecimal firstsydiscountrate;
+
+    @ApiModelProperty("初始非车优惠比例")
+    private BigDecimal firstnodiscountrate;
+
     @ApiModelProperty("子订单号")
     private String subOrderNo;
 
@@ -44,4 +63,28 @@ public class SubmitExportFeesVo {
     public BigDecimal getNoCarExportProportion() {
         return ObjectUtils.isEmpty(noCarExportProportion)  ? BigDecimal.ZERO : noCarExportProportion;
     }
+
+    public BigDecimal getNodiscountrate() {
+        return ObjectUtils.isEmpty(nodiscountrate)  ? BigDecimal.ZERO : nodiscountrate;
+    }
+
+    public BigDecimal getSydiscountrate() {
+        return ObjectUtils.isEmpty(sydiscountrate)  ? BigDecimal.ZERO : sydiscountrate;
+    }
+
+    public BigDecimal getJqdiscountrate() {
+        return ObjectUtils.isEmpty(jqdiscountrate)  ? BigDecimal.ZERO : jqdiscountrate;
+    }
+
+    public BigDecimal getFirstjqdiscountrate() {
+        return ObjectUtils.isEmpty(firstjqdiscountrate)  ? BigDecimal.ZERO : firstjqdiscountrate;
+    }
+
+    public BigDecimal getFirstsydiscountrate() {
+        return ObjectUtils.isEmpty(firstsydiscountrate)  ? BigDecimal.ZERO : firstsydiscountrate;
+    }
+
+    public BigDecimal getFirstnodiscountrate() {
+        return ObjectUtils.isEmpty(firstnodiscountrate)  ? BigDecimal.ZERO : firstnodiscountrate;
+    }
 }

+ 94 - 18
src/main/java/com/ydtech/modules/order/entity/vo/telemarketing/TelemarketingAuditOrderEditVo.java

@@ -2,7 +2,7 @@ package com.ydtech.modules.order.entity.vo.telemarketing;
 
 
 import com.ydtech.modules.fee.entity.po.InsFeeOrderNewHistory;
-import com.ydtech.modules.order.entity.vo.FeeOrderNewVo;
+import com.ydtech.modules.fee.entity.po.InsFeeTelemarketing;
 import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -13,6 +13,7 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 @Data
 @AllArgsConstructor
@@ -24,23 +25,88 @@ public class TelemarketingAuditOrderEditVo implements Serializable {
     @ApiModelProperty("出口费用")
     private List<ExportFeeDTO> exportFee;
 
-    public TelemarketingAuditOrderEditVo(InsFeeOrderNew insFeeOrderNew) {
+    public TelemarketingAuditOrderEditVo(InsFeeOrderNew insFeeOrderNew, InsFeeOrderNewHistory insFeeOrderNewHistory, InsFeeTelemarketing insFeeTelemarketing) {
         List<ExportFeeDTO> exportFeeDTOS = new ArrayList<>();
-        ExportFeeDTO jqExportFee = new ExportFeeDTO("交强险", insFeeOrderNew.getJqPremium(), insFeeOrderNew.getJqCostsExportProportion(),
-                insFeeOrderNew.getJqExportOtherCostsProportion(),
-                insFeeOrderNew.getJqExportSuperviseCostsPremiums(), insFeeOrderNew.getJqExportOtherCostsPremiums());
-        exportFeeDTOS.add(jqExportFee);
-        ExportFeeDTO syExportFee = new ExportFeeDTO("商业险",
-                insFeeOrderNew.getSyPremium(), insFeeOrderNew.getSyCostsExportProportion(),
-                insFeeOrderNew.getSyExportOtherCostsProportion(),
-                insFeeOrderNew.getSyExportSuperviseCostsPremiums(), insFeeOrderNew.getSyExportOtherCostsPremiums()
-        );
-        exportFeeDTOS.add(syExportFee);
-        ExportFeeDTO noExportFee = new ExportFeeDTO("非车险",
-                insFeeOrderNew.getNoPremium(), insFeeOrderNew.getNoCostsExportProportion(),
-                insFeeOrderNew.getNoExportOtherCostsProportion(),
-                insFeeOrderNew.getNoExportSuperviseCostsPremiums(), insFeeOrderNew.getNoExportOtherCostsPremiums());
-        exportFeeDTOS.add(noExportFee);
+
+        if(!Objects.isNull(insFeeTelemarketing) && !Objects.isNull(insFeeTelemarketing.getFirstJqTotalProportion())){
+            ExportFeeDTO jqExportFee = new ExportFeeDTO("交强险", insFeeOrderNew.getJqPremium(), insFeeOrderNew.getJqCostsExportProportion(),
+                    insFeeOrderNew.getJqExportOtherCostsProportion(),
+                    insFeeOrderNew.getJqExportSuperviseCostsPremiums(),
+                    insFeeOrderNew.getJqExportOtherCostsPremiums(),
+                    insFeeTelemarketing.getFirstJqTotalProportion(),
+                    BigDecimal.ZERO
+            );
+            exportFeeDTOS.add(jqExportFee);
+            ExportFeeDTO syExportFee = new ExportFeeDTO("商业险",
+                    insFeeOrderNew.getSyPremium(), insFeeOrderNew.getSyCostsExportProportion(),
+                    insFeeOrderNew.getSyExportOtherCostsProportion(),
+                    insFeeOrderNew.getSyExportSuperviseCostsPremiums(), insFeeOrderNew.getSyExportOtherCostsPremiums(),
+                    insFeeTelemarketing.getFirstSyTotalProportion(),
+                    BigDecimal.ZERO
+            );
+            exportFeeDTOS.add(syExportFee);
+            ExportFeeDTO noExportFee = new ExportFeeDTO("非车险",
+                    insFeeOrderNew.getNoPremium(), insFeeOrderNew.getNoCostsExportProportion(),
+                    insFeeOrderNew.getNoExportOtherCostsProportion(),
+                    insFeeOrderNew.getNoExportSuperviseCostsPremiums(),
+                    insFeeOrderNew.getNoExportOtherCostsPremiums(),
+                    insFeeTelemarketing.getFirstNoTotalProportion(),
+                    BigDecimal.ZERO
+            );
+            exportFeeDTOS.add(noExportFee);
+        } else if (!Objects.isNull(insFeeOrderNewHistory)) {
+            ExportFeeDTO jqExportFee = new ExportFeeDTO("交强险", insFeeOrderNew.getJqPremium(), insFeeOrderNew.getJqCostsExportProportion(),
+                    insFeeOrderNew.getJqExportOtherCostsProportion(),
+                    insFeeOrderNew.getJqExportSuperviseCostsPremiums(),
+                    insFeeOrderNew.getJqExportOtherCostsPremiums(),
+                    insFeeOrderNewHistory.getJqCostsExportProportion(),
+                    insFeeOrderNewHistory.getJqExportOtherCostsProportion()
+            );
+            exportFeeDTOS.add(jqExportFee);
+            ExportFeeDTO syExportFee = new ExportFeeDTO("商业险",
+                    insFeeOrderNew.getSyPremium(), insFeeOrderNew.getSyCostsExportProportion(),
+                    insFeeOrderNew.getSyExportOtherCostsProportion(),
+                    insFeeOrderNew.getSyExportSuperviseCostsPremiums(), insFeeOrderNew.getSyExportOtherCostsPremiums(),
+                    insFeeOrderNewHistory.getSyCostsExportProportion(),
+                    insFeeOrderNewHistory.getSyExportOtherCostsProportion()
+            );
+            exportFeeDTOS.add(syExportFee);
+            ExportFeeDTO noExportFee = new ExportFeeDTO("非车险",
+                    insFeeOrderNew.getNoPremium(), insFeeOrderNew.getNoCostsExportProportion(),
+                    insFeeOrderNew.getNoExportOtherCostsProportion(),
+                    insFeeOrderNew.getNoExportSuperviseCostsPremiums(),
+                    insFeeOrderNew.getNoExportOtherCostsPremiums(),
+                    insFeeOrderNewHistory.getNoCostsExportProportion(),
+                    insFeeOrderNewHistory.getNoExportOtherCostsProportion()
+            );
+            exportFeeDTOS.add(noExportFee);
+        }else{
+            ExportFeeDTO jqExportFee = new ExportFeeDTO("交强险", insFeeOrderNew.getJqPremium(), insFeeOrderNew.getJqCostsExportProportion(),
+                    insFeeOrderNew.getJqExportOtherCostsProportion(),
+                    insFeeOrderNew.getJqExportSuperviseCostsPremiums(),
+                    insFeeOrderNew.getJqExportOtherCostsPremiums(),
+                    insFeeOrderNew.getJqCostsExportProportion(),
+                    insFeeOrderNew.getJqExportOtherCostsProportion()
+            );
+            exportFeeDTOS.add(jqExportFee);
+            ExportFeeDTO syExportFee = new ExportFeeDTO("商业险",
+                    insFeeOrderNew.getSyPremium(), insFeeOrderNew.getSyCostsExportProportion(),
+                    insFeeOrderNew.getSyExportOtherCostsProportion(),
+                    insFeeOrderNew.getSyExportSuperviseCostsPremiums(), insFeeOrderNew.getSyExportOtherCostsPremiums(),
+                    insFeeOrderNew.getSyCostsExportProportion(),
+                    insFeeOrderNew.getSyExportOtherCostsProportion()
+            );
+            exportFeeDTOS.add(syExportFee);
+            ExportFeeDTO noExportFee = new ExportFeeDTO("非车险",
+                    insFeeOrderNew.getNoPremium(), insFeeOrderNew.getNoCostsExportProportion(),
+                    insFeeOrderNew.getNoExportOtherCostsProportion(),
+                    insFeeOrderNew.getNoExportSuperviseCostsPremiums(),
+                    insFeeOrderNew.getNoExportOtherCostsPremiums(),
+                    insFeeOrderNew.getNoCostsExportProportion(),
+                    insFeeOrderNew.getNoExportOtherCostsProportion()
+            );
+            exportFeeDTOS.add(noExportFee);
+        }
         this.exportFee = exportFeeDTOS;
     }
 
@@ -55,23 +121,33 @@ public class TelemarketingAuditOrderEditVo implements Serializable {
         @ApiModelProperty("保费")
         private BigDecimal premium;
 
+        @ApiModelProperty("初始总比例")
+        private BigDecimal firstTotalProportion;
+
         @ApiModelProperty("总比例")
         private BigDecimal totalProportion;
 
         @ApiModelProperty("总费用")
         private BigDecimal totalAmount;
 
+        @ApiModelProperty("扣减比例")
+        private BigDecimal subProportion;
+
         public ExportFeeDTO(String title,
                             BigDecimal premium,
                             BigDecimal superviseCostsProportion,
                             BigDecimal otherCostsProportion,
                             BigDecimal superviseCostsPremiums,
-                            BigDecimal otherCostsPremiums) {
+                            BigDecimal otherCostsPremiums,
+                            BigDecimal firstSuperviseCostsProportion,
+                            BigDecimal firstOtherCostsProportion) {
 
             this.insuranceType = title;
             //保费
             this.premium = premium;
             //总比例
+            this.firstTotalProportion = firstSuperviseCostsProportion.add(firstOtherCostsProportion);
+            //总比例
             this.totalProportion = superviseCostsProportion.add(otherCostsProportion);
             //总费用
             this.totalAmount = superviseCostsPremiums.add(otherCostsPremiums);

+ 10 - 1
src/main/java/com/ydtech/modules/order/service/InsAreaCompanyService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.admin.model.dto.QxFrontlineAgentDto;
+import com.ydtech.modules.admin.model.vo.QxFrontlineAgentVo;
 import com.ydtech.modules.fnc.entity.vo.ProblemOrderQueryVo;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsAreaCompanyAccidentalDriving;
@@ -216,7 +217,7 @@ public interface InsAreaCompanyService extends IService<InsAreaCompany> {
      * @Date: 2024/8/30 10:23
      * @Description: 通过用户id查询到导出的数据
      */
-    Double getOrderPremiumByUserIds(List<String> ids);
+    Double getOrderPremiumByUserIds(QxFrontlineAgentVo qxFrontlineAgentVo);
 
 
     /**
@@ -258,4 +259,12 @@ public interface InsAreaCompanyService extends IService<InsAreaCompany> {
      *  @Description: 财务查询所有的驳回订单数据
      */
     Page<InsAreaCompany> getAllRejectOrders(Page page, RejectPageQueryVo rejectPageQueryVo);
+
+    /**
+     * 更新费用匹配失败的日志
+     * @param companyId
+     * @param feeMatchErrMsg
+     * @return
+     */
+    boolean updateFeeMatchErrMsg(String companyId,String feeMatchErrMsg);
 }

+ 8 - 0
src/main/java/com/ydtech/modules/order/service/InsOrdersService.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.order.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.ins.model.InsOrdersExcelVo;
@@ -17,6 +18,7 @@ import com.ydtech.modules.order.entity.vo.*;
 import com.ydtech.modules.order.entity.vo.telemarketing.TelemarketingAuditOrderQueryVo;
 import com.ydtech.modules.order.entity.vo.zj.ZjQuoteAccidentVo;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
 
 import java.util.List;
 
@@ -273,4 +275,10 @@ public interface InsOrdersService extends IService<InsOrders> {
      */
     List<String> queryInsuredInOrder(QueryLicenseInOrderVo queryInsuredInOrderVo);
 
+    /**
+     * 生成失败订单数据
+     * @return
+     */
+    boolean responseFailedOrder(BaseQuoteVo quoteVo, PtlAgreementAttribution ptlAgreementAttribution, InsOrders insOrder, String errorMessage, InsOrderStatusEnum statusEnum);
+
 }

+ 15 - 3
src/main/java/com/ydtech/modules/order/service/InsuranceCompanyPolymerizationService.java

@@ -2,6 +2,9 @@ package com.ydtech.modules.order.service;
 
 
 import com.ydtech.modules.order.entity.InsAreaCompany;
+import org.springframework.scheduling.annotation.Async;
+
+import java.util.List;
 
 /**
  * 保险公司聚合
@@ -18,10 +21,19 @@ public interface InsuranceCompanyPolymerizationService {
     boolean cancelOrder(InsAreaCompany insAreaCompany);
 
     /**
-     * 更新订单状态
-     * @param insAreaCompany 子订单信息
+     * 更新订单状态(待核保状态)
+     * @param subOrderNo 子订单列表
+     * @return 是否成功
+     */
+    @Async
+    void updatePendingUnderwritingOrder(List<String> subOrderNo);
+
+    /**
+     * 更新订单状态(已核保待缴费)
+     * @param subOrderNo 子订单列表
      * @return 是否成功
      */
-    boolean updateOrder(InsAreaCompany insAreaCompany);
+    @Async
+    void updateUnderwrittenForPaymentOrder(List<String> subOrderNo);
 
 }

+ 6 - 0
src/main/java/com/ydtech/modules/order/service/impl/BoHaiOrderApiServiceImpl.java

@@ -192,6 +192,12 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
                         throw new SystemException(response.getResponseMsg());
                     }
                 } else {
+                    InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
+                    InsOrders byId = insOrdersService.getById(quoteVo.getOrderNo());
+                    if(responseMsg.contains("重复投保")){
+                        insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
+                    }
+                    insOrdersService.responseFailedOrder(quoteVo,ptlAgreementAttribution,byId,responseMsg,insOrderStatusEnum);
                     throw new SystemException(responseMsg);
                 }
                 // add by hxl  2024-04-07  报价接口报错  算费微服务返回报错信息_保信返回错误信息:录入的校验码有误

+ 8 - 0
src/main/java/com/ydtech/modules/order/service/impl/DaJiaOrderServiceImpl.java

@@ -262,6 +262,14 @@ public class DaJiaOrderServiceImpl implements DaJiaOrderService {
                 HttpResult<QuoteRespVo> quoteRespVoHttpResult = responseOrder(odr1009Response, quoteRespVo, ptlAgreementAttribution, orderNo, quoteInfoVo, busiId, nvhlodr1001Response, insAreaCompanyAccidentalDriving);
                 return quoteRespVoHttpResult;
             } else {
+                String errorMessage = odr1009Response.getResult().getJqAppStatusMessage().toString() + odr1009Response.getResult().getSyAppStatusMessage().toString();
+                //如果错误信息中存在重复投保则订单状态置为重复投保
+                InsOrderStatusEnum orderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
+                if(odr1009Response.getResult().getJqAppStatusMessage().toString().contains("重复投保")) {
+                    orderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
+                }
+                insOrdersService.responseFailedOrder(t,ptlAgreementAttribution, insOrders, errorMessage, orderStatusEnum);
+
                 if (Message.M0003.getCode().equals(odr1009Response.getStatus())) {
                     return HttpResult.error("报价失败,原因:" + odr1009Response.getMessage());
                 }

+ 39 - 26
src/main/java/com/ydtech/modules/order/service/impl/GuorenOrderApiServiceImpl.java

@@ -233,7 +233,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
         log.debug("--------报价开始,订单号:{},协议号:{}--------------", quoteVo.getOrderNo(), quoteVo.getAgreementId());
         // 获取协议配置信息
         ChannelInfoDto channelInfo = gainChannelConfigInfo(quoteVo.getAgreementId());
-        BaseQuoteInfoVo yaQuoteInfoVo = insOrdersComponents.getQuoteInfo(quoteVo.getOrderNo(),quoteVo.getKinds());
+        BaseQuoteInfoVo yaQuoteInfoVo = insOrdersComponents.getQuoteInfo(quoteVo.getOrderNo(), quoteVo.getKinds());
         InsOrders order = insOrdersService.getById(yaQuoteInfoVo.getOrderNo());
         CarInfoVo carInfo = yaQuoteInfoVo.getCarInfo();
 
@@ -271,8 +271,21 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
         // 特别约定
         List<GuoRenSpecialAgreementVo> specialAgreementVo = quoteVo.getGuoRenSpecialAgreementVo();
         // 4、保费计算
-        PremiumResp.DataDTO premiumResult = premiumQuery(yaQuoteInfoVo, carPriceResult, vinQ, isNoCar,
+        PremiumResp resp = premiumQuery(yaQuoteInfoVo, carPriceResult, vinQ, isNoCar,
                 specialAgreementVo, noCarPremium, goodsCode);
+
+        if (resp.getResultCode() == 1) {
+            InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
+            if(resp.getResultMsg().contains("重复投保"))
+            {
+                insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
+            }
+            PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(quoteVo.getAgreementId());
+            insOrdersService.responseFailedOrder(quoteVo,ptlAgreementAttribution, order,resp.getResultMsg(),insOrderStatusEnum);
+            throw new SystemException(resp.getResultMsg() == null ? "保费计算失败,请联系管理员" : resp.getResultMsg());
+        }
+
+        PremiumResp.DataDTO premiumResult = resp.getData();
         AssertionUtils.isEmpty(premiumResult, "保费计算失败");
 
         // 5、 生成订单
@@ -297,12 +310,12 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
 
 
         InsAreaCompanyAccidentalDriving insAreaCompanyAccidentalDriving = new InsAreaCompanyAccidentalDriving();
-        if(accidentalDrivingVo != null) {
+        if (accidentalDrivingVo != null) {
             insAreaCompanyAccidentalDriving.setRideRiskCode(quoteVo.getAccidentalDrivingVo().getProdCode());
             insAreaCompanyAccidentalDriving.setRideRiskName(quoteVo.getAccidentalDrivingVo().getGoodsName());
             insAreaCompanyAccidentalDriving.setQuantity(quoteVo.getAccidentalDrivingVo().getQuantity());
         }
-        insAreaCompanyService.insertCompanyAndOrders(iac,insAreaCompanyAccidentalDriving);
+        insAreaCompanyService.insertCompanyAndOrders(iac, insAreaCompanyAccidentalDriving);
         quoteRespVo.setCompanyId(iac.getId());
         // 返回核心车型
         quoteRespVo.setCoreModels(vinQ.toCoreModelsVo());
@@ -327,7 +340,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
         //子订单
         InsAreaCompany iac = insAreaCompanyService.getByIdIsExist(quoteOrderNo);
 
-        String oldStatus =iac.getOrderstatus();
+        String oldStatus = iac.getOrderstatus();
         // 获取协议配置信息
         ChannelInfoDto channelInfo = gainChannelConfigInfo(iac.getAgreementId());
 
@@ -345,7 +358,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
         String statusJq = auditResp.getData().get(0).getUnderWriteFlagCI();
         String statusSy = auditResp.getData().get(0).getUnderWriteFlagBI();
         String message = auditResp.getData().get(0).getMessage();
-        if (StringUtils.isEmpty(statusJq) && StringUtils.isEmpty(statusSy)){
+        if (StringUtils.isEmpty(statusJq) && StringUtils.isEmpty(statusSy)) {
             return HttpResult.error("核保失败:" + message);
         }
         //单交  核保状态 0初始值/1通过/2不通过/3 无需核保 9待核保
@@ -384,7 +397,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
         if (iac.getOrderstatus().equals(InsOrderStatusEnum.WAIT_AUDIT.getCode())) {
             iac.setUnderwritingStatus(UnderwritingStatus.US_2.getCode());
             //  add  by  hxl  添加自动更新状态
-            insSubOrderUpdateDetailService.insertData(iac,oldStatus,iac.getOrderstatus(),"1");
+            insSubOrderUpdateDetailService.insertData(iac, oldStatus, iac.getOrderstatus(), "1");
             insAreaCompanyService.updateCompanyAndOrdersMessage(iac, message);
             return HttpResult.error(message);
         }
@@ -396,7 +409,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
             return HttpResult.error(message);
         }
         //  add  by  hxl  添加自动更新状态
-        insSubOrderUpdateDetailService.insertData(iac,oldStatus,iac.getOrderstatus(),"1");
+        insSubOrderUpdateDetailService.insertData(iac, oldStatus, iac.getOrderstatus(), "1");
         InsUtils.buildOrderStatus(order, iac);
         if (iac.getOrderstatus().equals(InsOrderStatusEnum.WAIT_PAY.getCode())) {
             //获取签名地址
@@ -449,7 +462,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
                 if (jqBoo || syBoo || jqSyBoo) {
 
                     //  add  by  hxl  添加自动更新状态
-                    insSubOrderUpdateDetailService.insertData(iac,iac.getOrderstatus(),InsOrderStatusEnum.WAIT_PAY.getCode(),"1");
+                    insSubOrderUpdateDetailService.insertData(iac, iac.getOrderstatus(), InsOrderStatusEnum.WAIT_PAY.getCode(), "1");
                     iac.setOrderstatus(InsOrderStatusEnum.WAIT_PAY.getCode());
                     //更新支付链接
                     SignatureResponse signature = guorenRequestApiComponent.signature(iac);
@@ -476,7 +489,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
             // 支付
             if (updateFlag) {
                 //  add  by  hxl  添加自动更新状态
-                insSubOrderUpdateDetailService.insertData(iac,iac.getOrderstatus(),InsOrderStatusEnum.ACCEPT_INSURANCE.getCode(),"1");
+                insSubOrderUpdateDetailService.insertData(iac, iac.getOrderstatus(), InsOrderStatusEnum.ACCEPT_INSURANCE.getCode(), "1");
                 iac.setOrderstatus(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode());
                 guorenRequestApiComponent.queryNoCarPolicyNo(iac);
                 insAreaCompanyService.updateCompanyAndOrders(iac);
@@ -628,9 +641,6 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
     }
 
 
-
-
-
     @Override
     @Transactional
     public HttpResult callBackApi(HttpServletRequest request) {
@@ -655,7 +665,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
             InsAreaCompany iac = insAreaCompanyService.getByInsOrderNo(orderId);
             if (null != iac) {
                 //  add  by  hxl  添加自动更新状态
-                insSubOrderUpdateDetailService.insertData(iac,iac.getOrderstatus(),InsOrderStatusEnum.ACCEPT_INSURANCE.getCode(),"1");
+                insSubOrderUpdateDetailService.insertData(iac, iac.getOrderstatus(), InsOrderStatusEnum.ACCEPT_INSURANCE.getCode(), "1");
                 iac.setOrderstatus(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode());
                 InsOrders order = insOrdersService.getById(iac.getOrderno());
                 if (StringUtils.toInt(order.getOrderstatus()) < StringUtils.toInt(iac.getOrderstatus())) {
@@ -826,7 +836,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
         for (PremiumResp.DataDTO.CiInsureDemandDTO ciInsureDemandDTO : ciInsureDemandDTOS) {
             if (GuoRenRiskCode.R_0507.getCode().equals(ciInsureDemandDTO.getRiskCode())) {
                 quoteRespVo.setJqClaims(ciInsureDemandDTO.getClaimTimes());
-            }else if(GuoRenRiskCode.R_0518.getCode().equals(ciInsureDemandDTO.getRiskCode())){
+            } else if (GuoRenRiskCode.R_0518.getCode().equals(ciInsureDemandDTO.getRiskCode())) {
                 quoteRespVo.setSyClaims(ciInsureDemandDTO.getClaimTimes());
             }
         }
@@ -1067,7 +1077,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
     /**
      * 保费计算
      */
-    public PremiumResp.DataDTO premiumQuery(BaseQuoteInfoVo yaQuoteInfoVo,
+    public PremiumResp premiumQuery(BaseQuoteInfoVo yaQuoteInfoVo,
                                             CarPriceResp.DataDTO carPriceResult,
                                             VinQueryResp.DataDTO vinQ,
                                             boolean isNoCar,
@@ -1081,7 +1091,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
         //构造请求参数
         PremiumReq req = PremiumReq.buildQuoteParam(yaQuoteInfoVo, carPriceResult, vinQ, isNoCar, specialAgreementVo, noCarPremium, goodsCode);
         PremiumResp resp;
-
+        int a = 0;
         for (; ; ) {
             resp = guorenRequestApiComponent.request(req, PlatformInterfaceCode.API_IIRBT00004, PremiumResp.class);
             req.getCi().getPrpTmain().setAnswer(null);
@@ -1089,19 +1099,26 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
             //1、 交强险重复投保 替换时间
             boo = GuorenDuplicateInsuranceComponent.processor(resp, requestInfoList, req);
             if (boo) {
+                a++;
                 continue;
             }
 
             boo = GuorenDuplicateInsuranceComponent.theCheckCodeIsWrong(resp);
             if (boo) {
+                a++;
                 continue;
             }
             //2、 转保
             boo = GuorenDuplicateInsuranceComponent.buildCheckCodeParam(resp, requestInfoList, req);
             if (boo) {
+                a++;
                 continue;
             }
 
+            if (a > 6) {
+                break;
+            }
+
             break;
         }
 
@@ -1110,11 +1127,7 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
         resp.getData().setBiStartDate(req.getBi().getPrpTmain().getStartDate());
         resp.getData().setBiEndDate(req.getBi().getPrpTmain().getEndDate());
 
-        if (resp.getResultCode() == 1) {
-            throw new SystemException(resp.getResultMsg() == null ? "保费计算失败,请联系管理员" : resp.getResultMsg());
-        }
-        return resp.getData();
-
+        return resp;
     }
 
 
@@ -1215,11 +1228,11 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
             // 支付
             if (updateFlag) {
                 //设置支付时间
-                if(iac.getPayDate()==null){
+                if (iac.getPayDate() == null) {
                     iac.setPayDate(LocalDateTime.now());
                 }
                 //  add  by  hxl  添加自动更新状态
-                insSubOrderUpdateDetailService.insertData(iac,iac.getOrderstatus(),InsOrderStatusEnum.ACCEPT_INSURANCE.getCode(),"1");
+                insSubOrderUpdateDetailService.insertData(iac, iac.getOrderstatus(), InsOrderStatusEnum.ACCEPT_INSURANCE.getCode(), "1");
                 iac.setOrderstatus(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode());
                 guorenRequestApiComponent.queryNoCarPolicyNo(iac);
                 insAreaCompanyService.updateCompanyAndOrdersNew(iac);
@@ -1232,11 +1245,11 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
     public boolean cancelOrder(InsAreaCompany insAreaCompany) {
         String jqapplyno = insAreaCompany.getJqapplyno();
         List<String> list = new ArrayList<>();
-        if(StringUtils.isNotEmpty(jqapplyno)){
+        if (StringUtils.isNotEmpty(jqapplyno)) {
             list.add(jqapplyno);
         }
         String syapplyno = insAreaCompany.getSyapplyno();
-        if(StringUtils.isNotEmpty(syapplyno)){
+        if (StringUtils.isNotEmpty(syapplyno)) {
             list.add(syapplyno);
         }
 

+ 20 - 3
src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyServiceImpl.java

@@ -12,6 +12,7 @@ import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.constants.ManagementSource;
 import com.ydtech.modules.admin.model.dto.QxFrontlineAgentDto;
+import com.ydtech.modules.admin.model.vo.QxFrontlineAgentVo;
 import com.ydtech.modules.admin.service.SysDeptService;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.fee.service.FeeRuleSchemeNewService;
@@ -573,7 +574,7 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
 
         List<PtlAgreementProductCostsNew> costsNews = ptlAgreementProductCostsNewService.getByAgreementId(agreementProductQueryVo);
 
-        if (costsNews.isEmpty()) {
+        if (costsNews.isEmpty() && !Objects.isNull(quoteVo.getNowCostsId())) {
             throw new SystemException("没有找到费用信息");
         }
         PtlAgreementProductCostsNew ptlAgreementProductCostsNew = costsNews.get(0);
@@ -1034,8 +1035,8 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
      * @Description: 通过用户id查询总保费
      */
     @Override
-    public Double getOrderPremiumByUserIds(List<String> ids) {
-        return baseMapper.getOrderPremiumByUserIds(ids);
+    public Double getOrderPremiumByUserIds(QxFrontlineAgentVo qxFrontlineAgentVo) {
+        return baseMapper.getOrderPremiumByUserIds(qxFrontlineAgentVo);
     }
 
     @Override
@@ -1087,6 +1088,22 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
         return baseMapper.getAllRejectOrders(page, rejectPageQueryVo);
     }
 
+    /**
+     * 更新费用匹配失败的日志
+     * @param companyId
+     * @param feeMatchErrMsg
+     * @return
+     */
+    @Override
+    public boolean updateFeeMatchErrMsg(String companyId, String feeMatchErrMsg) {
+        InsAreaCompany insAreaCompany = baseMapper.selectOne(new LambdaQueryWrapper<InsAreaCompany>()
+                .eq(InsAreaCompany::getId, companyId));
+        if(Objects.isNull(insAreaCompany))
+            return false;
+        insAreaCompany.setFeeMatchErrMsg(feeMatchErrMsg);
+        return baseMapper.updateById(insAreaCompany) > 0;
+    }
+
 }
 
 

+ 7 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsCrawlerOrderServiceImpl.java

@@ -135,6 +135,13 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
         CrawlerQuoteResponse response = insCrawlerOrderComponents.request(apiUrl, ptlAgreementAttribution.getInsCompanyId(),
                 PtlCrawlerApiType.API_2.getDesc(), crawlerQuoteRequest, CrawlerQuoteResponse.class);
         if (response.getCode() != 200) {
+            InsOrders order = insOrdersService.getById(t.getOrderNo());
+            //判断错误订单是否是重复投保
+            InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
+            if(response.getMessage().contains("重复投保")){
+                insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
+            }
+            insOrdersService.responseFailedOrder(t,ptlAgreementAttribution,order,response.getMessage(),insOrderStatusEnum);
             throw new SystemException(response.getMessage());
         }
 

+ 54 - 7
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.order.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -31,6 +32,7 @@ import com.ydtech.modules.admin.model.dto.SysUserLinkPtlAgreementDto;
 import com.ydtech.modules.admin.model.po.SysUserIsDial;
 import com.ydtech.modules.admin.service.*;
 import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.esm.model.EsmInsCompany;
 import com.ydtech.modules.esm.model.EsmUserReferrer;
 import com.ydtech.modules.esm.service.EsmUserReferrerService;
 import com.ydtech.modules.fee.service.CostsCalcService;
@@ -66,6 +68,7 @@ import com.ydtech.modules.order.service.*;
 import com.ydtech.modules.protocol.entity.constants.PtlApiType;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
 import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
 import com.ydtech.modules.protocol.service.PtlAgreementService;
 import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
@@ -1387,13 +1390,19 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         // 永安财险
         if (InsuranceEnum.YAIC.getCode().equals(orderAndAreaCompany.getCompanyId().substring(0, 4))) {
             JSONObject reptxt = orderAndAreaCompany.getReptxt();
-            ResponseDataC2 responseDataC2 = JSON.toJavaObject(reptxt, ResponseDataC2.class);
-            List<ExtendInfoDto> extendInfoDtos = responseDataC2.getResponseBody().getExtendInfo();
-            Map<String, String> stringStringMap = extendInfoDtos.stream().collect(LinkedHashMap::new,
-                    (m, v) -> m.put(v.getKey(),
-                            v.getValue()), LinkedHashMap::putAll);
-            yaExtendInfoDto = new YaExtendInfoDto(stringStringMap);
-            orderAndAreaCompany.setExtendInfo(yaExtendInfoDto);
+            // add by  hxl  2024-10-14   处理永安财险查询报错
+            if(reptxt!=null){
+                ResponseDataC2 responseDataC2 = JSON.toJavaObject(reptxt, ResponseDataC2.class);
+                List<ExtendInfoDto> extendInfoDtos = responseDataC2.getResponseBody().getExtendInfo();
+                Map<String, String> stringStringMap = extendInfoDtos.stream().collect(LinkedHashMap::new,
+                        (m, v) -> m.put(v.getKey(),
+                                v.getValue()), LinkedHashMap::putAll);
+                yaExtendInfoDto = new YaExtendInfoDto(stringStringMap);
+                orderAndAreaCompany.setExtendInfo(yaExtendInfoDto);
+            }else{
+                orderAndAreaCompany.setExtendInfo(new HashMap<String, String>());
+            }
+
         }
         InsAreaCompany iac = insAreaCompanyService.getById(companyId);
         yaExtendInfoDto.setInsAreaCompany(iac);
@@ -2024,6 +2033,44 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         return baseMapper.queryInsured(queryInsuredInOrderVo, userId);
     }
 
+    @Override
+    public boolean responseFailedOrder(BaseQuoteVo quoteVo, PtlAgreementAttribution ptlAgreementAttribution, InsOrders insOrder, String errorMessage, InsOrderStatusEnum statusEnum) {
+
+        //保存订单信息
+        InsAreaCompany insAreaCompany = new InsAreaCompany();
+        insAreaCompany.setEntryStatus(insOrder.getEntryStatus());
+        insAreaCompany.setOrderno(insOrder.getOrderno());
+        insAreaCompany.setApiType(PtlApiType.PTL_API_1.getCode());
+        insAreaCompany.setOrderstatus(statusEnum.getCode());
+        insAreaCompany.setCreatetime(LocalDateTime.now());
+        insAreaCompany.setCompanyId(quoteVo.getCompanyId());
+        insAreaCompany.setInscompany(ptlAgreementAttribution.getInsCompanyName());
+        insAreaCompany.setAgreementId(quoteVo.getAgreementId());
+
+        insAreaCompany.setJqStartDate(insOrder.getJqstartdate());
+        insAreaCompany.setJqEndDate(insOrder.getJqenddate());
+        insAreaCompany.setSyStartDate(insOrder.getSystartdate());
+        insAreaCompany.setSyEndDate(insOrder.getSyenddate());
+
+        if (CollUtil.isEmpty(quoteVo.getRisks())) {
+            insAreaCompany.setRiskinfo(new JSONArray());
+        } else {
+            insAreaCompany.setRiskinfo(JSON.parseArray(JSON.toJSONString(quoteVo.getRisks())));
+        }
+
+        if (CollUtil.isEmpty(quoteVo.getKinds())) {
+            insAreaCompany.setKindinfo(new JSONArray());
+        } else {
+            insAreaCompany.setKindinfo(JSON.parseArray(JSON.toJSONString(quoteVo.getKinds())));
+        }
+
+        insAreaCompany.setQuoteErrMsg(errorMessage);
+
+        InsAreaCompanyAccidentalDriving insAreaCompanyAccidentalDriving = new InsAreaCompanyAccidentalDriving();
+        insAreaCompanyService.insertCompanyAndOrders(insAreaCompany, insAreaCompanyAccidentalDriving);
+        return true;
+    }
+
     /**
      * 更新订单的起保与终保时间
      */

+ 27 - 19
src/main/java/com/ydtech/modules/order/service/impl/InsTelemarketingOrderServiceImpl.java

@@ -1,6 +1,9 @@
 package com.ydtech.modules.order.service.impl;
 
 
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.ydtech.constants.enums.dict.FeeAuditAuditstatus;
 import com.ydtech.modules.fee.entity.po.InsFeeOrderNewHistory;
 import com.ydtech.modules.fee.entity.po.InsFeeTelemarketing;
@@ -10,7 +13,6 @@ import com.ydtech.modules.fee.service.InsFeeTelemarketingService;
 import com.ydtech.modules.fnc.service.InsFeeAuditService;
 import com.ydtech.modules.order.entity.BasePageResult;
 import com.ydtech.modules.order.entity.InsAreaCompany;
-import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.dto.TelemarketingAuditOrderDTO;
 import com.ydtech.modules.order.entity.vo.SubmitExportFeesVo;
 import com.ydtech.modules.order.entity.vo.telemarketing.TelemarketingAuditOrderEditVo;
@@ -19,12 +21,11 @@ import com.ydtech.modules.order.entity.vo.telemarketing.TelemarketingQueryExpens
 import com.ydtech.modules.order.service.InsAreaCompanyService;
 import com.ydtech.modules.order.service.InsOrdersService;
 import com.ydtech.modules.order.service.InsTelemarketingOrderService;
+import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
 import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsExport;
-import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
 import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
 import com.ydtech.modules.protocols.service.PtlAgreementProductCostsExportService;
-import com.ydtech.modules.protocols.service.PtlAgreementProductCostsNewService;
 import com.ydtech.utils.BigDecimalUtils;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
@@ -33,6 +34,8 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 
 import java.math.BigDecimal;
+import java.util.List;
+import java.util.Objects;
 
 
 @Service
@@ -68,6 +71,23 @@ public class InsTelemarketingOrderServiceImpl implements InsTelemarketingOrderSe
         // 费用信息
         InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getByInsOrderNo(insAreaCompany.getId());
 
+        // 校验不能大于之前的优惠比例
+        AssertionUtils.isFail(submitExportFeesVo.getJqdiscountrate().compareTo(submitExportFeesVo.getFirstjqdiscountrate()) == 1, "交强优惠比例不能大于初始比例");
+        AssertionUtils.isFail(submitExportFeesVo.getSydiscountrate().compareTo(submitExportFeesVo.getFirstsydiscountrate()) == 1, "商业优惠比例不能大于初始比例");
+        AssertionUtils.isFail(submitExportFeesVo.getNodiscountrate().compareTo(submitExportFeesVo.getFirstnodiscountrate()) == 1, "非车优惠比例不能大于初始比例");
+
+        // 获取未保存前的优惠比例
+        BigDecimal jqDiscount = insFeeOrderNew.getJqCostsExportProportion().add(insFeeOrderNew.getJqExportOtherCostsProportion());
+        BigDecimal syDiscount = insFeeOrderNew.getSyCostsExportProportion().add(insFeeOrderNew.getSyExportOtherCostsProportion());
+        BigDecimal noDiscount = insFeeOrderNew.getNoCostsExportProportion().add(insFeeOrderNew.getNoExportOtherCostsProportion());
+        // 计算扣减比例
+        BigDecimal jqSub = jqDiscount.subtract(submitExportFeesVo.getJqdiscountrate());
+        BigDecimal sySub = syDiscount.subtract(submitExportFeesVo.getSydiscountrate());
+        BigDecimal noSub = noDiscount.subtract(submitExportFeesVo.getNodiscountrate());
+        submitExportFeesVo.setJqExportProportion(jqSub);
+        submitExportFeesVo.setSyExportProportion(sySub);
+        submitExportFeesVo.setNoCarExportProportion(noSub);
+
         // 出口费用
         PtlAgreementProductCostsExport ptlAgreementProductCostsExport = ptlAgreementProductCostsExportService.lambdaQuery().eq(PtlAgreementProductCostsExport::getCostsId, insFeeOrderNew.getCostsId()).one();
 
@@ -115,22 +135,10 @@ public class InsTelemarketingOrderServiceImpl implements InsTelemarketingOrderSe
 
     @Override
     public TelemarketingAuditOrderEditVo queryExpenses(TelemarketingQueryExpensesVo telemarketingQueryExpensesVo) {
-        String state = telemarketingQueryExpensesVo.getState();
         InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(telemarketingQueryExpensesVo.getSubOrderId());
-        InsFeeOrderNew insFeeOrderNew = new InsFeeOrderNew();
-        if ("2".equals(state)) {
-            // 费用信息
-            insFeeOrderNew = insFeeOrderNewService.getByInsOrderNo(insAreaCompany.getId());
-            return new TelemarketingAuditOrderEditVo(insFeeOrderNew);
-        } else {
-            InsFeeOrderNewHistory insFeeOrderNewHistory = insFeeOrderNewHistoryService.getByInsOrderNo(insAreaCompany.getId());
-            if (ObjectUtils.isEmpty(insFeeOrderNewHistory)) {
-                insFeeOrderNew = insFeeOrderNewService.getByInsOrderNo(insAreaCompany.getId());
-            } else {
-                BeanUtils.copyProperties(insFeeOrderNewHistory, insFeeOrderNew);
-            }
-        }
-        return new TelemarketingAuditOrderEditVo(insFeeOrderNew);
+        InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getByInsOrderNo(insAreaCompany.getId());
+        InsFeeOrderNewHistory insFeeOrderNewHistory = insFeeOrderNewHistoryService.getByInsOrderNo(insAreaCompany.getId());
+        InsFeeTelemarketing insFeeTelemarketing = insFeeTelemarketingService.getByInsOrderNo(insAreaCompany.getId());
+        return new TelemarketingAuditOrderEditVo(insFeeOrderNew,insFeeOrderNewHistory,insFeeTelemarketing);
     }
-
 }

+ 88 - 10
src/main/java/com/ydtech/modules/order/service/impl/InsuranceCompanyPolymerizationServiceImpl.java

@@ -7,11 +7,15 @@ import com.ydtech.modules.protocol.entity.constants.PtlApiType;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 
 @Service
 @RequiredArgsConstructor
 public class InsuranceCompanyPolymerizationServiceImpl implements InsuranceCompanyPolymerizationService {
 
+    private final InsAreaCompanyService insAreaCompanyService;
+
     private final InsCrawlerOrderService insCrawlerOrderService;
 
     private final ZijinOrderApiService zijinOrderApiService;
@@ -32,39 +36,113 @@ public class InsuranceCompanyPolymerizationServiceImpl implements InsuranceCompa
     public boolean cancelOrder(InsAreaCompany insAreaCompany) {
         Integer apiType = insAreaCompany.getApiType();
 
-        if(PtlApiType.PTL_API_2.getCode() == apiType){
+        if (PtlApiType.PTL_API_2.getCode() == apiType) {
             return insCrawlerOrderService.cancelOrder(insAreaCompany);
         }
 
         String companyId = insAreaCompany.getCompanyId();
         String code = companyId.substring(0, 4);
         // 紫金财险
-        if (InsuranceEnum.ZKIC.getCode().equals(code)){
+        if (InsuranceEnum.ZKIC.getCode().equals(code)) {
             return zijinOrderApiService.cancelOrder(insAreaCompany);
             // 渤海财险
-        }else if (InsuranceEnum.BPIC.getCode().equals(code)){
+        } else if (InsuranceEnum.BPIC.getCode().equals(code)) {
             return boHaiOrderApiService.cancelOrder(insAreaCompany);
             // 大家财险
-        }else if (InsuranceEnum.DJPC.getCode().equals(code)){
+        } else if (InsuranceEnum.DJPC.getCode().equals(code)) {
             return daJiaOrderService.cancelOrder(insAreaCompany);
             // 国任财险
-        }else if(InsuranceEnum.XDCX.getCode().equals(code)){
+        } else if (InsuranceEnum.XDCX.getCode().equals(code)) {
             return guorenOrderApiService.cancelOrder(insAreaCompany);
             // 华泰财险
-        }else if(InsuranceEnum.HTIC.getCode().equals(code)){
+        } else if (InsuranceEnum.HTIC.getCode().equals(code)) {
             return huaTaiOrderApiService.cancelOrder(insAreaCompany);
             // 永诚财险
-        }else if(InsuranceEnum.AICS.getCode().equals(code)){
+        } else if (InsuranceEnum.AICS.getCode().equals(code)) {
             return yongchengOrderApiService.cancelOrder(insAreaCompany);
             // 中煤财险
-        }else if(InsuranceEnum.ZMBX.getCode().equals(code)){
+        } else if (InsuranceEnum.ZMBX.getCode().equals(code)) {
             return zhongMeiOrderApiService.cancelOrder(insAreaCompany);
         }
         return false;
     }
 
     @Override
-    public boolean updateOrder(InsAreaCompany insAreaCompany) {
-        return false;
+    public void updatePendingUnderwritingOrder(List<String> subOrderNo) {
+        subOrderNo.forEach(x -> {
+            InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(x);
+            Integer apiType = insAreaCompany.getApiType();
+            if (PtlApiType.PTL_API_2.getCode() == apiType) {
+                insCrawlerOrderService.auditStatusQuery(insAreaCompany.getId());
+            }
+            String companyId = insAreaCompany.getCompanyId();
+            String code = companyId.substring(0, 4);
+            // 紫金财险
+            if (InsuranceEnum.ZKIC.getCode().equals(code)) {
+                zijinOrderApiService.auditStatusQuery(insAreaCompany.getId());
+                // 渤海财险
+            } else if (InsuranceEnum.BPIC.getCode().equals(code)) {
+                try {
+                    boHaiOrderApiService.auditStatusQuery(insAreaCompany.getId());
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+                // 大家财险
+            } else if (InsuranceEnum.DJPC.getCode().equals(code)) {
+                daJiaOrderService.verifyPayment(insAreaCompany.getId());
+                // 国任财险
+            } else if (InsuranceEnum.XDCX.getCode().equals(code)) {
+                guorenOrderApiService.insOrderInfo(insAreaCompany.getId());
+                // 华泰财险
+            } else if (InsuranceEnum.HTIC.getCode().equals(code)) {
+                huaTaiOrderApiService.auditStatusQuery(insAreaCompany.getId());
+                // 永诚财险
+            } else if (InsuranceEnum.AICS.getCode().equals(code)) {
+                yongchengOrderApiService.callbackAnOrder(insAreaCompany.getId());
+                // 中煤财险
+            } else if (InsuranceEnum.ZMBX.getCode().equals(code)) {
+                zhongMeiOrderApiService.auditStatusQuery(insAreaCompany.getId());
+            }
+        });
+    }
+
+
+    @Override
+    public void updateUnderwrittenForPaymentOrder(List<String> subOrderNo) {
+        subOrderNo.forEach(x -> {
+            InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(x);
+            Integer apiType = insAreaCompany.getApiType();
+            if (PtlApiType.PTL_API_2.getCode() == apiType) {
+                insCrawlerOrderService.verifyPayment(insAreaCompany.getId());
+            }
+            String companyId = insAreaCompany.getCompanyId();
+            String code = companyId.substring(0, 4);
+            // 紫金财险
+            if (InsuranceEnum.ZKIC.getCode().equals(code)) {
+                zijinOrderApiService.getOrderDetail(insAreaCompany.getId());
+                // 渤海财险
+            } else if (InsuranceEnum.BPIC.getCode().equals(code)) {
+                try {
+                    boHaiOrderApiService.getOrderDetail(insAreaCompany.getId());
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+                // 大家财险
+            } else if (InsuranceEnum.DJPC.getCode().equals(code)) {
+                daJiaOrderService.verifyPayment(insAreaCompany.getId());
+                // 国任财险
+            } else if (InsuranceEnum.XDCX.getCode().equals(code)) {
+                guorenOrderApiService.insOrderInfo(insAreaCompany.getId());
+                // 华泰财险
+            } else if (InsuranceEnum.HTIC.getCode().equals(code)) {
+                huaTaiOrderApiService.paymentEnquiry(insAreaCompany.getId());
+                // 永诚财险
+            } else if (InsuranceEnum.AICS.getCode().equals(code)) {
+                yongchengOrderApiService.callbackAnOrder(insAreaCompany.getId());
+                // 中煤财险
+            } else if (InsuranceEnum.ZMBX.getCode().equals(code)) {
+                zhongMeiOrderApiService.paymentEnquiry(insAreaCompany.getId());
+            }
+        });
     }
 }

+ 17 - 6
src/main/java/com/ydtech/modules/order/service/impl/YongchengOrderApiServiceImpl.java

@@ -71,6 +71,8 @@ import com.ydtech.modules.order.entity.vo.*;
 import com.ydtech.modules.order.service.*;
 import com.ydtech.modules.order.utils.InsuranceLog;
 import com.ydtech.modules.protocol.entity.constants.PtlApiType;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
+import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.utils.DateTimeUtil;
 import com.ydtech.utils.StringUtils;
@@ -166,6 +168,9 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
     @Autowired
     private InsSubOrderUpdateDetailService insSubOrderUpdateDetailService;
 
+    @Autowired
+    private PtlAgreementAttributionService ptlAgreementAttributionService;
+
     public void gainVehicleModel(YcConfigureParameters ycConfigureParameters, CarInfoVo carInfo, CoreModelsVo coreModelsVo) {
         CarModel_Req carModelReq = new CarModel_Req();
         carModelReq.setFrameNo(carInfo.getFrameNo());
@@ -318,9 +323,7 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
             //1、商业险重复投保处理
             String sy = commerceRepetitionInsure(rr, m, requestInfoList, appSYFlag);
 
-            if (jq.isEmpty() && sy.isEmpty()) {
-                throw new SystemException(errorMsg);
-            } else {
+            if (!jq.isEmpty() || !sy.isEmpty()) {
                 InsuranceLog.infoLog(InsuranceEnum.AICS.getPinyin(), "\n\n---------> {} - 重复投保处理", vinNo);
                 return this.getResponse(m, vinNo, requestInfoList, yaQuoteInfoVo);
             }
@@ -403,14 +406,22 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
             throw new SystemException(errorInfo.toString());
         }
 
+        //查询订单信息
+        InsOrders order = insOrdersService.getById(yaQuoteInfoVo.getOrderNo());
+
         //报价失败
         if (!"000000".equals(rr.getHead().getErrorCode())) {
+            //保存报价失败的子订单
+            InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
+            if(rr.getHead().getErrorMessage().contains("重复投保"))
+            {
+                insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
+            }
+            PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(quoteVo.getAgreementId());
+            insOrdersService.responseFailedOrder(quoteVo,ptlAgreementAttribution, order,rr.getHead().getErrorMessage(),insOrderStatusEnum);
             return HttpResult.error(rr.getHead().getErrorMessage());
         }
 
-        //查询订单信息
-        InsOrders order = insOrdersService.getById(yaQuoteInfoVo.getOrderNo());
-
         QuoteRespVo quoteRespVo = YcBuildData.buildQuoteRespVo(order, rr, yaQuoteInfoVo);
         //8 生成订单
         InsAreaCompany iac = responseOrder(order, quoteRespVo, rr, quoteVo);

+ 13 - 0
src/main/java/com/ydtech/modules/order/service/impl/ZijinOrderApiServiceImpl.java

@@ -151,6 +151,19 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
         String message = "";
         CalculatePremiumResponse calculatePremiumResponse = zijinRequestApiComponents.calculatePremium(calculatePremiumRequest,
                 httpHeaders, modelQueryRequest, message, queryActualValueRequest, REPEAT_NUMBER, RETRY_NUMBER);
+
+        if(!calculatePremiumResponse.getRtnCode().equals(ResultEnum.C_0000)){
+            QuoteRespVo resp  = new QuoteRespVo();
+            InsOrders order = insOrdersService.getById(quoteVo.getOrderNo());
+            InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
+            if(calculatePremiumResponse.getRtnMsg().contains("重复投保"))
+            {
+                insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
+            }
+            insOrdersService.responseFailedOrder(quoteVo,ptlAgreementAttribution, order,calculatePremiumResponse.getRtnMsg(),insOrderStatusEnum);
+            throw new SystemException(calculatePremiumResponse.getRtnMsg());
+        }
+
         // 警告信息
         QuoteRespVo quoteRespVo = getQuoteRespVo(calculatePremiumResponse, quoteInfoVo, quoteVo.getAccidentalDrivingVo(), isEnergy);
         if (!StringUtils.isEmpty(message)) {

+ 4 - 2
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementDeptServiceImpl.java

@@ -42,8 +42,10 @@ public class PtlAgreementDeptServiceImpl extends ServiceImpl<PtlAgreementDeptMap
 
     @Override
     public void deleteByAgreementId(String agreementId) {
-        boolean remove = remove(byAgreementId(agreementId));
-        AssertionUtils.isSucceed(remove, "协议机构删除失败");
+        //修改BUG  如果这张表没有数据则断言了 无法修改
+        remove(byAgreementId(agreementId));
+//        boolean remove = remove(byAgreementId(agreementId));
+//        AssertionUtils.isSucceed(remove, "协议机构删除失败");
     }
 
     @Override

+ 21 - 18
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java

@@ -1019,6 +1019,7 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
                 .eq(PtlAgreement::getInsuranceCompanyId, ptlAgreement.getInsuranceCompanyId()));
     }
 
+    @Transactional
     @Override
     public HttpResult getAgreementCopy(PtlAgreementVo ptlAgreementVo) {
         PtlAgreement ptlAgreement = baseMapper.selectById(ptlAgreementVo.getId());
@@ -1028,25 +1029,27 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         newPtlAgreement.generateTheProtocolCode();
         save(newPtlAgreement);
         PtlAgreementAttribution ptlAgreementAttributionOld = ptlAgreementAttributionService.getById(ptlAgreementVo.getId());
-        // 复制账号配置
-        PtlAgreementAttribution ptlAgreementAttributionNew = new PtlAgreementAttribution();
-        BeanUtils.copyProperties(ptlAgreementAttributionOld, ptlAgreementAttributionNew, "id");
-        ptlAgreementAttributionNew.setId(newPtlAgreement.getId());
-        ptlAgreementAttributionService.save(ptlAgreementAttributionNew);
-        EsmInsCompany esmInsCompany = esmInsCompanyService.getById(newPtlAgreement.getInsuranceCompanyId());
-        // 添加账号配置记录
+        // 复制账号归属信息
         String batchNo = IdGenerate.nextId();
-        PtlAgreementAttributionHistory ptlAgreementAttributionHistory = new PtlAgreementAttributionHistory();
-        ptlAgreementAttributionHistory.setId(IdGenerate.nextId());
-        ptlAgreementAttributionHistory.setBatch(batchNo);
-        ptlAgreementAttributionHistory.setInsCompanyId(newPtlAgreement.getInsuranceCompanyId());
-        ptlAgreementAttributionHistory.setInsCompanyName(esmInsCompany.getName());
-        ptlAgreementAttributionHistory.setFields(ptlAgreementAttributionNew.getFields());
-        ptlAgreementAttributionHistory.setTemplateId(ptlAgreementAttributionNew.getTemplateId());
-        ptlAgreementAttributionHistory.setApiType(ptlAgreementAttributionNew.getApiType());
-        ptlAgreementAttributionHistory.setUsername(ptlAgreementAttributionNew.getUsername());
-        ptlAgreementAttributionHistory.setPassword(ptlAgreementAttributionNew.getPassword());
-        ptlAgreementAttributionHistoryService.save(ptlAgreementAttributionHistory);
+        if (ptlAgreement.getIsExternal() == 0) {
+            PtlAgreementAttribution ptlAgreementAttributionNew = new PtlAgreementAttribution();
+            BeanUtils.copyProperties(ptlAgreementAttributionOld, ptlAgreementAttributionNew, "id");
+            ptlAgreementAttributionNew.setId(newPtlAgreement.getId());
+            ptlAgreementAttributionService.save(ptlAgreementAttributionNew);
+            EsmInsCompany esmInsCompany = esmInsCompanyService.getById(newPtlAgreement.getInsuranceCompanyId());
+            // 添加账号配置记录
+            PtlAgreementAttributionHistory ptlAgreementAttributionHistory = new PtlAgreementAttributionHistory();
+            ptlAgreementAttributionHistory.setId(IdGenerate.nextId());
+            ptlAgreementAttributionHistory.setBatch(batchNo);
+            ptlAgreementAttributionHistory.setInsCompanyId(newPtlAgreement.getInsuranceCompanyId());
+            ptlAgreementAttributionHistory.setInsCompanyName(esmInsCompany.getName());
+            ptlAgreementAttributionHistory.setFields(ptlAgreementAttributionNew.getFields());
+            ptlAgreementAttributionHistory.setTemplateId(ptlAgreementAttributionNew.getTemplateId());
+            ptlAgreementAttributionHistory.setApiType(ptlAgreementAttributionNew.getApiType());
+            ptlAgreementAttributionHistory.setUsername(ptlAgreementAttributionNew.getUsername());
+            ptlAgreementAttributionHistory.setPassword(ptlAgreementAttributionNew.getPassword());
+            ptlAgreementAttributionHistoryService.save(ptlAgreementAttributionHistory);
+        }
         // 复制授权部门
         List<PtlAgreementDept> ptlAgreementDept = ptlAgreementDeptService.list(new LambdaQueryWrapper<PtlAgreementDept>().eq(PtlAgreementDept::getAgreementId, ptlAgreement.getId()));
         List<String> deptIds = ptlAgreementDept.stream().map(PtlAgreementDept::getDeptId).collect(Collectors.toList());

+ 267 - 32
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java

@@ -356,7 +356,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
                 }
                 if ("input".equals(ptlAgreementUndwrtRulesAttr.getAttrType())) {
                     if(ptlAgreementUndwrtRulesAttr.getAttrCode().equals("BrandandModel")){
-                        String operatorDesc = !Objects.isNull(ptlAgreementUndwrtRulesAttr.getOperator()) && ptlAgreementUndwrtRulesAttr.getOperator().equals("1") ? "包含" : "不包含";
+                        String operatorDesc = !Objects.isNull(v.get(i).getOperator()) && v.get(i).getOperator().equals("1") ? "包含" : "不包含";
                         desc += ptlAgreementUndwrtRulesAttr.getAttrName() + operatorDesc + v.get(i).getMin() + "\n";
                     }else {
                         desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "为" + v.get(i).getMin() + "\n";
@@ -1084,6 +1084,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
            if (agreementProductCostsVo.getCostsStartDate() != null) {
                ptlAgreementProductCostsNew.setCostsStartDate(agreementProductCostsVo.getCostsStartDate());
            }
+           ptlAgreementProductCostsNew.setIsAudit(0);
         String desc = "修改费用因子";
         //添加费用因子轨迹
         ptlAgreementProductCostsTrajectoryService.addCostsTrajectory(ptlAgreementProductCostsNew.getId(), desc, BaseController.getUser().getId());
@@ -1136,8 +1137,9 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
             validateItems(costsItem, exportItem);
 
             // 更新费用总比例、1-5级比例
-            updateCostsItem(agreementProductCostsVo, costsItem);
-            updateExportItem(agreementProductCostsVo, exportItem);
+            updateCostsItem(agreementProductCostsVo, costsItem, exportItem);
+            updateExportItem(agreementProductCostsVo, exportItem, costsItem);
+            costsItem.setIsAudit(0);
 
             //添加费用轨迹 费用历史记录
             addCostsTrajectory(costsItem);
@@ -1155,10 +1157,10 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         }
     }
 
-    private void updateCostsItem(AgreementProductCostsVo vo, PtlAgreementProductCostsNew item) {
-        updateProportion(item, vo.getJqCostsProportion(), item::getJqCostsProportion, item::setJqCostsProportion, "交强险总费用");
-        updateProportion(item, vo.getSyCostsProportion(), item::getSyCostsProportion, item::setSyCostsProportion, "商业险总费用");
-        updateProportion(item, vo.getNoCostsProportion(), item::getNoCostsProportion, item::setNoCostsProportion, "非车险总费用");
+    private void updateCostsItem(AgreementProductCostsVo vo, PtlAgreementProductCostsNew item, PtlAgreementProductCostsExport export) {
+        updateProportion(item, vo.getJqCostsProportion(), item::getJqCostsProportion, item::setJqCostsProportion, "交强险总费用", export);
+        updateProportion(item, vo.getSyCostsProportion(), item::getSyCostsProportion, item::setSyCostsProportion, "商业险总费用", export);
+        updateProportion(item, vo.getNoCostsProportion(), item::getNoCostsProportion, item::setNoCostsProportion, "非车险总费用", export);
         //更新其他费用比例
         updateOtherCostsProportion(item, vo.getJqCostsProportion(), item::getJqCarOtherCostsProportion, item::setJqCarOtherCostsProportion, "交强险其他费用");
         updateOtherCostsProportion(item, vo.getSyCostsProportion(), item::getSyCarOtherCostsProportion, item::setSyCarOtherCostsProportion, "商业险其他费用");
@@ -1166,7 +1168,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
     }
 
     //更新总比费用
-    private void updateProportion(PtlAgreementProductCostsNew item, String proportionToAdd, Supplier<String> getter, Consumer<String> setter, String desc) {
+    private void updateProportion(PtlAgreementProductCostsNew item, String proportionToAdd, Supplier<String> getter, Consumer<String> setter, String desc, PtlAgreementProductCostsExport export) {
         if (proportionToAdd != null) {
             try {
                 BigDecimal current = new BigDecimal(getter.get());
@@ -1176,6 +1178,38 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
                 if (updatedValue.compareTo(BigDecimal.ZERO) < 0) {
                     throw new SystemException("id为"+ item.getId() + desc + "比例值不能小于零");
                 }
+                switch(desc) {
+                    case "交强险总费用":
+                        BigDecimal totalJqExportRadio = export.getJqExportRadioLevel1()
+                                                    .add(export.getJqExportRadioLevel2())
+                                                    .add(export.getJqExportRadioLevel3())
+                                                    .add(export.getJqExportRadioLevel4())
+                                                    .add(export.getJqExportRadioLevel5());
+                        if (updatedValue.compareTo(totalJqExportRadio) < 0) {
+                            throw new SystemException("id为"+ item.getId() + desc + "比例值不能小于交强险管理比例1-5级的总和");
+                        }
+                        break;
+                    case "商业险总费用":
+                        BigDecimal totalSyExportRadio = export.getSyExportRadioLevel1()
+                                                        .add(export.getSyExportRadioLevel2())
+                                                        .add(export.getSyExportRadioLevel3())
+                                                        .add(export.getSyExportRadioLevel4())
+                                                        .add(export.getSyExportRadioLevel5());
+                        if (updatedValue.compareTo(totalSyExportRadio) < 0) {
+                            throw new SystemException("id为"+ item.getId() + desc + "比例值不能小于商业险管理比例1-5级的总和");
+                        }
+                        break;
+                    case "非车险总费用":
+                        BigDecimal totalNoCarExportRadio = export.getNoCarExportRadioLevel1()
+                                                        .add(export.getNoCarExportRadioLevel2())
+                                                        .add(export.getNoCarExportRadioLevel3())
+                                                        .add(export.getNoCarExportRadioLevel4())
+                                                        .add(export.getNoCarExportRadioLevel5());
+                        if (updatedValue.compareTo(totalNoCarExportRadio) < 0) {
+                            throw new SystemException("id为"+ item.getId() + desc + "比例值不能小于非车险管理比例1-5级的总和");
+                        }
+                        break;
+                }
                 setter.accept(updatedValue.toString());
             } catch (NumberFormatException e) {
                 throw new SystemException("比例值格式错误");
@@ -1183,54 +1217,255 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         }
     }
 
-    //更新其他费用比例
+    // 更新其他费用比例
     private void updateOtherCostsProportion(PtlAgreementProductCostsNew item, String otherProportionToAdd, Supplier<String> getter, Consumer<String> setter, String desc) {
         if (otherProportionToAdd != null) {
             try {
                 BigDecimal currentOther = new BigDecimal(getter.get());
                 BigDecimal addOther = new BigDecimal(otherProportionToAdd);
-                BigDecimal updatedValue = currentOther.add(addOther);
-
-                // 检查更新后的值是否小于零
+                BigDecimal updatedValue = currentOther.add(addOther); // 保持加法不变
+                // 如果更新后的值小于零,则设置其他费用比例为0,并调整总费用比例
                 if (updatedValue.compareTo(BigDecimal.ZERO) < 0) {
-                    throw new SystemException("id为"+ item.getId() + desc + "比例值不能小于零");
+                    updatedValue = BigDecimal.ZERO;
+                    setter.accept(updatedValue.toString()); // 设置其他费用比例为0
+                    // 计算费用比例需要减少的值
+                    BigDecimal subtractValue = addOther.abs().subtract(currentOther); // 取绝对值,因为是负数
+                    // 根据描述符更新对应的总费用比例
+                    switch(desc) {
+                        case "交强险其他费用":
+                            // 获得现在费用比例的值
+                            BigDecimal jqCarCostsProportion = new BigDecimal(item.getJqCarCostsProportion());
+                            BigDecimal currentJqCarCostsProportion = jqCarCostsProportion.subtract(subtractValue);
+                            if (currentJqCarCostsProportion.compareTo(BigDecimal.ZERO) < 0) {
+                                throw new SystemException("id为"+ item.getId() + desc + "比例值不能小于零");
+                            }
+                            item.setJqCarCostsProportion(currentJqCarCostsProportion.toString());
+                            break;
+                        case "商业险其他费用":
+                            BigDecimal syCarCostsProportion = new BigDecimal(item.getSyCarCostsProportion());
+                            BigDecimal currentSyCarCostsProportion = syCarCostsProportion.subtract(subtractValue);
+                            if (currentSyCarCostsProportion.compareTo(BigDecimal.ZERO) < 0) {
+                                throw new SystemException("id为"+ item.getId() + desc + "比例值不能小于零");
+                            }
+                            item.setSyCostsProportion(currentSyCarCostsProportion.toString());
+                            break;
+                        case "非车险其他费用":
+                            BigDecimal noCarCostsProportion = new BigDecimal(item.getNoCarCostsProportion());
+                            BigDecimal currentNoCarCostsProportion = noCarCostsProportion.subtract(subtractValue);
+                            if (currentNoCarCostsProportion.compareTo(BigDecimal.ZERO) < 0) {
+                                throw new SystemException("id为"+ item.getId() + desc + "比例值不能小于零");
+                            }
+                            item.setNoCarCostsProportion(currentNoCarCostsProportion.toString());
+                            break;
+                        default:
+                            throw new IllegalArgumentException("未知的费用类型: " + desc);
+                    }
+                } else {
+                    // 如果更新后的值大于等于零,则正常更新
+                    setter.accept(updatedValue.toString());
                 }
-                setter.accept(updatedValue.toString());
             } catch (NumberFormatException e) {
                 throw new SystemException("其他费用比例值格式错误");
             }
         }
     }
+    //更新其他费用比例
+//    private void updateOtherCostsProportion(PtlAgreementProductCostsNew item, String otherProportionToAdd, Supplier<String> getter, Consumer<String> setter, String desc) {
+//        if (otherProportionToAdd != null) {
+//            try {
+//                BigDecimal currentOther = new BigDecimal(getter.get());
+//                BigDecimal addOther = new BigDecimal(otherProportionToAdd);
+//                BigDecimal updatedValue = currentOther.add(addOther);
+//
+//                // 检查更新后的值是否小于零
+//                if (updatedValue.compareTo(BigDecimal.ZERO) < 0) {
+//                    throw new SystemException("id为"+ item.getId() + desc + "比例值不能小于零");
+//                }
+//                setter.accept(updatedValue.toString());
+//            } catch (NumberFormatException e) {
+//                throw new SystemException("其他费用比例值格式错误");
+//            }
+//        }
+//    }
 
     //更新1-5级比例
-    private void updateExportItem(AgreementProductCostsVo vo, PtlAgreementProductCostsExport item) {
-        updateExportRadios(item, vo.getJqExportRadioLevel1(), item::getJqExportRadioLevel1, item::setJqExportRadioLevel1, "交强险一级比例");
-        updateExportRadios(item, vo.getJqExportRadioLevel2(), item::getJqExportRadioLevel2, item::setJqExportRadioLevel2, "交强险二级比例");
-        updateExportRadios(item, vo.getJqExportRadioLevel3(), item::getJqExportRadioLevel3, item::setJqExportRadioLevel3, "交强险三级比例");
-        updateExportRadios(item, vo.getJqExportRadioLevel4(), item::getJqExportRadioLevel4, item::setJqExportRadioLevel4, "交强险四级比例");
-        updateExportRadios(item, vo.getJqExportRadioLevel5(), item::getJqExportRadioLevel5, item::setJqExportRadioLevel5, "交强险五级比例");
-        updateExportRadios(item, vo.getSyExportRadioLevel1(), item::getSyExportRadioLevel1, item::setSyExportRadioLevel1, "商业险一级比例");
-        updateExportRadios(item, vo.getSyExportRadioLevel2(), item::getSyExportRadioLevel2, item::setSyExportRadioLevel2, "商业险二级比例");
-        updateExportRadios(item, vo.getSyExportRadioLevel3(), item::getSyExportRadioLevel3, item::setSyExportRadioLevel3, "商业险三级比例");
-        updateExportRadios(item, vo.getSyExportRadioLevel4(), item::getSyExportRadioLevel4, item::setSyExportRadioLevel4, "商业险四级比例");
-        updateExportRadios(item, vo.getSyExportRadioLevel5(), item::getSyExportRadioLevel5, item::setSyExportRadioLevel5, "商业险五级比例");
-        updateExportRadios(item, vo.getNoCarExportRadioLevel1(), item::getNoCarExportRadioLevel1, item::setNoCarExportRadioLevel1, "非车险一级比例");
-        updateExportRadios(item, vo.getNoCarExportRadioLevel2(), item::getNoCarExportRadioLevel2, item::setNoCarExportRadioLevel2, "非车险二级比例");
-        updateExportRadios(item, vo.getNoCarExportRadioLevel3(), item::getNoCarExportRadioLevel3, item::setNoCarExportRadioLevel3, "非车险三级比例");
-        updateExportRadios(item, vo.getNoCarExportRadioLevel4(), item::getNoCarExportRadioLevel4, item::setNoCarExportRadioLevel4, "非车险四级比例");
-        updateExportRadios(item, vo.getNoCarExportRadioLevel5(), item::getNoCarExportRadioLevel5, item::setNoCarExportRadioLevel5, "非车险五级比例");
+    private void updateExportItem(AgreementProductCostsVo vo, PtlAgreementProductCostsExport item,PtlAgreementProductCostsNew costsItem) {
+        updateExportRadios(item, vo.getJqExportRadioLevel1(), item::getJqExportRadioLevel1, item::setJqExportRadioLevel1, "交强险一级比例", costsItem);
+        updateExportRadios(item, vo.getJqExportRadioLevel2(), item::getJqExportRadioLevel2, item::setJqExportRadioLevel2, "交强险二级比例", costsItem);
+        updateExportRadios(item, vo.getJqExportRadioLevel3(), item::getJqExportRadioLevel3, item::setJqExportRadioLevel3, "交强险三级比例", costsItem);
+        updateExportRadios(item, vo.getJqExportRadioLevel4(), item::getJqExportRadioLevel4, item::setJqExportRadioLevel4, "交强险四级比例", costsItem);
+        updateExportRadios(item, vo.getJqExportRadioLevel5(), item::getJqExportRadioLevel5, item::setJqExportRadioLevel5, "交强险五级比例", costsItem);
+        updateExportRadios(item, vo.getSyExportRadioLevel1(), item::getSyExportRadioLevel1, item::setSyExportRadioLevel1, "商业险一级比例", costsItem);
+        updateExportRadios(item, vo.getSyExportRadioLevel2(), item::getSyExportRadioLevel2, item::setSyExportRadioLevel2, "商业险二级比例", costsItem);
+        updateExportRadios(item, vo.getSyExportRadioLevel3(), item::getSyExportRadioLevel3, item::setSyExportRadioLevel3, "商业险三级比例", costsItem);
+        updateExportRadios(item, vo.getSyExportRadioLevel4(), item::getSyExportRadioLevel4, item::setSyExportRadioLevel4, "商业险四级比例", costsItem);
+        updateExportRadios(item, vo.getSyExportRadioLevel5(), item::getSyExportRadioLevel5, item::setSyExportRadioLevel5, "商业险五级比例", costsItem);
+        updateExportRadios(item, vo.getNoCarExportRadioLevel1(), item::getNoCarExportRadioLevel1, item::setNoCarExportRadioLevel1, "非车险一级比例", costsItem);
+        updateExportRadios(item, vo.getNoCarExportRadioLevel2(), item::getNoCarExportRadioLevel2, item::setNoCarExportRadioLevel2, "非车险二级比例", costsItem);
+        updateExportRadios(item, vo.getNoCarExportRadioLevel3(), item::getNoCarExportRadioLevel3, item::setNoCarExportRadioLevel3, "非车险三级比例", costsItem);
+        updateExportRadios(item, vo.getNoCarExportRadioLevel4(), item::getNoCarExportRadioLevel4, item::setNoCarExportRadioLevel4, "非车险四级比例", costsItem);
+        updateExportRadios(item, vo.getNoCarExportRadioLevel5(), item::getNoCarExportRadioLevel5, item::setNoCarExportRadioLevel5, "非车险五级比例", costsItem);
     }
 
     //更新1-5级比例
-    private void updateExportRadios(PtlAgreementProductCostsExport item, BigDecimal valueToAdd, Supplier<BigDecimal> getter, Consumer<BigDecimal> setter,String desc) {
+    private void updateExportRadios(PtlAgreementProductCostsExport item, BigDecimal valueToAdd, Supplier<BigDecimal> getter, Consumer<BigDecimal> setter,String desc,PtlAgreementProductCostsNew costsItem) {
         if (valueToAdd != null) {
             BigDecimal currentValue = getter.get();
             BigDecimal updatedValue = currentValue.add(valueToAdd);
-
+            BigDecimal jqCostsProportion = BigDecimal.ZERO;
+            BigDecimal syCostsProportion = BigDecimal.ZERO;
+            BigDecimal noCarCostsProportion = BigDecimal.ZERO;
+            if (costsItem.getJqCostsProportion() != null && !costsItem.getJqCostsProportion().equals("")) {
+                jqCostsProportion = new BigDecimal(costsItem.getJqCostsProportion());
+            }
+            if (costsItem.getSyCostsProportion() != null && !costsItem.getSyCostsProportion().equals("")) {
+                syCostsProportion = new BigDecimal(costsItem.getSyCostsProportion());
+            }
+            if (costsItem.getNoCostsProportion() != null && !costsItem.getNoCostsProportion().equals("")) {
+                noCarCostsProportion = new BigDecimal(costsItem.getNoCostsProportion());
+            }
             // 检查更新后的值是否小于零
             if (updatedValue.compareTo(BigDecimal.ZERO) < 0) {
                 throw new SystemException("id为"+ item.getCostsId() + desc + "比例值不能小于零");
             }
+            switch(desc) {
+                case "交强险一级比例":
+                    BigDecimal totalJqCostsExportRadio1 = updatedValue.add(item.getJqExportRadioLevel2())
+                            .add(item.getJqExportRadioLevel3())
+                            .add(item.getJqExportRadioLevel4())
+                            .add(item.getJqExportRadioLevel5());
+
+                    if (totalJqCostsExportRadio1.compareTo(jqCostsProportion) > 0) {
+                        throw new SystemException("交强险一级比例与二级、三级、四级、五级之和不能大于交强险总比例");
+                    }
+                    break;
+                case "交强险二级比例":
+                    BigDecimal totalJqCostsExportRadio2 = updatedValue.add(item.getJqExportRadioLevel1())
+                            .add(item.getJqExportRadioLevel3())
+                            .add(item.getJqExportRadioLevel4())
+                            .add(item.getJqExportRadioLevel5());
+                    if (totalJqCostsExportRadio2.compareTo(jqCostsProportion) > 0) {
+                        throw new SystemException("交强险一级比例与二级、三级、四级、五级之和不能大于交强险总比例");
+                    }
+                    break;
+                case "交强险三级比例":
+                    BigDecimal totalJqCostsExportRadio3 = updatedValue.add(item.getJqExportRadioLevel1())
+                            .add(item.getJqExportRadioLevel2())
+                            .add(item.getJqExportRadioLevel4())
+                            .add(item.getJqExportRadioLevel5());
+                    if (totalJqCostsExportRadio3.compareTo(jqCostsProportion) > 0) {
+                        throw new SystemException("交强险一级比例与二级、三级、四级、五级之和不能大于交强险总比例");
+                    }
+                    break;
+                case "交强险四级比例":
+                    BigDecimal totalJqCostsExportRadio4 = updatedValue.add(item.getJqExportRadioLevel1())
+                            .add(item.getJqExportRadioLevel2())
+                            .add(item.getJqExportRadioLevel3())
+                            .add(item.getJqExportRadioLevel5());
+                    if (totalJqCostsExportRadio4.compareTo(jqCostsProportion) > 0) {
+                        throw new SystemException("交强险一级比例与二级、三级、四级、五级之和不能大于交强险总比例");
+                    }
+                    break;
+                case "交强险五级比例":
+                    BigDecimal totalJqCostsExportRadio5 = updatedValue.add(item.getJqExportRadioLevel1())
+                            .add(item.getJqExportRadioLevel2())
+                            .add(item.getJqExportRadioLevel3())
+                            .add(item.getJqExportRadioLevel4());
+                    if (totalJqCostsExportRadio5.compareTo(jqCostsProportion) > 0) {
+                        throw new SystemException("交强险一级比例与二级、三级、四级、五级之和不能大于交强险总比例");
+                    }
+                    break;
+                case "商业险一级比例":
+                    BigDecimal totalSyCostsExportRadio1 = updatedValue.add(item.getSyExportRadioLevel2())
+                            .add(item.getSyExportRadioLevel3())
+                            .add(item.getSyExportRadioLevel4())
+                            .add(item.getSyExportRadioLevel5());
+                    if (totalSyCostsExportRadio1.compareTo(syCostsProportion) > 0) {
+                        throw new SystemException("商业险一级比例与二级、三级、四级、五级之和不能大于商业总比例");
+                    }
+                    break;
+                case "商业险二级比例":
+                    BigDecimal totalSyCostsExportRadio2 = updatedValue.add(item.getSyExportRadioLevel1())
+                            .add(item.getSyExportRadioLevel3())
+                            .add(item.getSyExportRadioLevel4())
+                            .add(item.getSyExportRadioLevel5());
+                    if (totalSyCostsExportRadio2.compareTo(syCostsProportion) > 0) {
+                        throw new SystemException("商业险一级比例与二级、三级、四级、五级之和不能大于商业总比例");
+                    }
+                    break;
+                case "商业险三级比例":
+                    BigDecimal totalSyCostsExportRadio3 = updatedValue.add(item.getSyExportRadioLevel1())
+                            .add(item.getSyExportRadioLevel2())
+                            .add(item.getSyExportRadioLevel4())
+                            .add(item.getSyExportRadioLevel5());
+                    if (totalSyCostsExportRadio3.compareTo(syCostsProportion) > 0) {
+                        throw new SystemException("商业险一级比例与二级、三级、四级、五级之和不能大于商业总比例");
+                    }
+                    break;
+                case "商业险四级比例":
+                    BigDecimal totalSyCostsExportRadio4 = updatedValue.add(item.getSyExportRadioLevel1())
+                            .add(item.getSyExportRadioLevel2())
+                            .add(item.getSyExportRadioLevel3())
+                            .add(item.getSyExportRadioLevel5());
+                    if (totalSyCostsExportRadio4.compareTo(syCostsProportion) > 0) {
+                        throw new SystemException("商业险一级比例与二级、三级、四级、五级之和不能大于商业总比例");
+                    }
+                    break;
+                case "商业险五级比例":
+                    BigDecimal totalSyCostsExportRadio5 = updatedValue.add(item.getSyExportRadioLevel1())
+                            .add(item.getSyExportRadioLevel2())
+                            .add(item.getSyExportRadioLevel3())
+                            .add(item.getSyExportRadioLevel4());
+                    if (totalSyCostsExportRadio5.compareTo(syCostsProportion) > 0) {
+                        throw new SystemException("商业险一级比例与二级、三级、四级、五级之和不能大于商业总比例");
+                    }
+                    break;
+                case "非车险一级比例":
+                    BigDecimal totalNoCarCostsExportRadio1 = updatedValue.add(item.getNoCarExportRadioLevel2())
+                            .add(item.getNoCarExportRadioLevel3())
+                            .add(item.getNoCarExportRadioLevel4())
+                            .add(item.getNoCarExportRadioLevel5());
+                    if (totalNoCarCostsExportRadio1.compareTo(noCarCostsProportion) > 0) {
+                        throw new SystemException("非车险一级比例与二级、三级、四级、五级之和不能大于非车总比例");
+                    }
+                    break;
+                case "非车险二级比例":
+                    BigDecimal totalNoCarCostsExportRadio2 = updatedValue.add(item.getNoCarExportRadioLevel1())
+                            .add(item.getNoCarExportRadioLevel3())
+                            .add(item.getNoCarExportRadioLevel4())
+                            .add(item.getNoCarExportRadioLevel5());
+                    if (totalNoCarCostsExportRadio2.compareTo(noCarCostsProportion) > 0) {
+                        throw new SystemException("非车险一级比例与二级、三级、四级、五级之和不能大于非车总比例");
+                    }
+                    break;
+                case "非车险三级比例":
+                    BigDecimal totalNoCarCostsExportRadio3 = updatedValue.add(item.getNoCarExportRadioLevel1())
+                            .add(item.getNoCarExportRadioLevel2())
+                            .add(item.getNoCarExportRadioLevel4())
+                            .add(item.getNoCarExportRadioLevel5());
+                    if (totalNoCarCostsExportRadio3.compareTo(noCarCostsProportion) > 0) {
+                        throw new SystemException("非车险一级比例与二级、三级、四级、五级之和不能大于非车总比例");
+                    }
+                    break;
+                case "非车险四级比例":
+                    BigDecimal totalNoCarCostsExportRadio4 = updatedValue.add(item.getNoCarExportRadioLevel1())
+                            .add(item.getNoCarExportRadioLevel2())
+                            .add(item.getNoCarExportRadioLevel3())
+                            .add(item.getNoCarExportRadioLevel5());
+                    if (totalNoCarCostsExportRadio4.compareTo(noCarCostsProportion) > 0) {
+                        throw new SystemException("非车险一级比例与二级、三级、四级、五级之和不能大于非车总比例");
+                    }
+                    break;
+                case "非车险五级比例":
+                    BigDecimal totalNoCarCostsExportRadio5 = updatedValue.add(item.getNoCarExportRadioLevel1())
+                            .add(item.getNoCarExportRadioLevel2())
+                            .add(item.getNoCarExportRadioLevel3())
+                            .add(item.getNoCarExportRadioLevel4());
+                    if (totalNoCarCostsExportRadio5.compareTo(noCarCostsProportion) > 0) {
+                        throw new SystemException("非车险一级比例与二级、三级、四级、五级之和不能大于非车总比例");
+                    }
+                    break;
+            }
             setter.accept(updatedValue);
         }
     }

+ 3 - 3
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementUndwrtRulesNewServiceImpl.java

@@ -175,10 +175,10 @@ public class PtlAgreementUndwrtRulesNewServiceImpl extends ServiceImpl<PtlAgreem
                 desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "包含" + v.get(i).getMin() + "\n";
             }
             if ("input".equals(ptlAgreementUndwrtRulesAttr.getAttrType())){
-                if(v.get(i).getOperator().equals("2")) {
-                    desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "不包含" + v.get(i).getMin() + "\n";
-                }else{
+                if(v.get(i).getOperator() != null && v.get(i).getOperator().equals("1")) {
                     desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "包含" + v.get(i).getMin() + "\n";
+                }else{
+                    desc += ptlAgreementUndwrtRulesAttr.getAttrName() + "不包含" + v.get(i).getMin() + "\n";
                 }
             }
         }

+ 3 - 1
src/main/java/com/ydtech/modules/scheme/service/impl/PtlOptionalSchemeServiceImpl.java

@@ -257,13 +257,15 @@ public class PtlOptionalSchemeServiceImpl extends ServiceImpl<PtlOptionalSchemeM
     @Override
     public CompanyOptionalSchemeVo getPcSchemeInsuranceInfo(SchemeQueryVo schemeQueryVo) {
         CompanyOptionalSchemeVo companyOptionalSchemeVo = new CompanyOptionalSchemeVo();
+        //处理新能源
+        schemeQueryVo.setEnergyType(EnergyType.isNewEnergy(schemeQueryVo.getEnergyType()) ? "1" : "0");
         List<SchemeKindInfoVo> schemeInsuranceInfo = ptlOptionalSchemeInsuranceService.getSchemeInsuranceInfo(schemeQueryVo);
         schemeInsuranceInfo.sort((o1, o2) -> Integer.compare(Integer.parseInt(o1.getId()), Integer.parseInt(o2.getId())));
         PtlOptionalScheme optionalScheme = this.getOne(new LambdaQueryWrapper<PtlOptionalScheme>()
                 .eq(PtlOptionalScheme::getCompanyId,schemeQueryVo.getCompanyId())
                 .eq(PtlOptionalScheme::getProductId,schemeQueryVo.getProductId())
                 .eq(PtlOptionalScheme::getVehicleType, schemeQueryVo.getVehicleType())
-                .eq(PtlOptionalScheme::getEnergyType, EnergyType.isNewEnergy(schemeQueryVo.getEnergyType()) ? "1" : "0")
+                .eq(PtlOptionalScheme::getEnergyType, schemeQueryVo.getEnergyType())
                 .eq(PtlOptionalScheme::getCarnature, schemeQueryVo.getCarnature()));
 
         //险种信息

+ 46 - 25
src/main/resources/mapper/modules/admin/SysUserMapper.xml

@@ -1304,6 +1304,26 @@
         AND t1.id NOT LIKE '%M%'
     </select>
 
+    <select id="findHxUserListNew" resultType="com.ydtech.modules.admin.model.SysUser">
+        SELECT
+        t1.id AS id,
+        t1.NAME AS NAME,
+        t1.mobile AS mobile,
+        t1.`status` AS `status`,
+        t2.id AS deptId,
+        t2.id AS parentId,
+        t2.`name` AS deptName,
+        sd2.id AS pDeptId,
+        sd2.`name` AS pDeptName
+        FROM
+        sys_user t1
+        LEFT JOIN sys_dept t2 ON t1.dept_id = t2.id
+        LEFT JOIN sys_dept sd2 ON sd2.id = t2.parent_id
+        WHERE
+        t1.`status` = 1
+        AND t1.id NOT LIKE '%M%'
+    </select>
+
     <select id="queryHXReportDataNew" resultType="java.util.HashMap">
         SELECT
             IFNULL(sum(info.salary),0) as  "salary",
@@ -1751,34 +1771,35 @@
     </select>
 
     <select id="selectHxUserList" resultType="java.util.Map">
+        SELECT * FROM
+        (
         SELECT
-            t1.id AS id,
-            t1.name AS name,
-            t1.mobile AS mobile,
-            (
-                SELECT
-                    COUNT(1)
-                FROM
-                    sys_user su
-                        LEFT JOIN sys_dept sd ON su.dept_id = sd.id
-                        LEFT JOIN sys_user_role t3 ON su.id = t3.user_id
-                        AND sd.del_flag = '0'
-                WHERE 1 = 1
-                <if test='sysUserDto.roleId !=null and sysUserDto.roleId!=""  '>
-                    and t3.role_id in (${sysUserDto.roleId})
-                </if>
-                <if test="sysUserDto.agentFlag !=null and sysUserDto.agentFlag != 0 ">
-                    and sd.management_source = #{sysUserDto.agentFlag}
-                </if>
-                <if test="sysUserDto.agentFlag != null and sysUserDto.agentFlag == 0">
-                    and sd.management_source is null
-                </if>
-                  AND su.leader_id = t1.id
-            ) totalNum
+        t1.id AS id,
+        t1.name AS name,
+        t1.mobile AS mobile,
+        (
+        SELECT
+        COUNT(1)
         FROM
-            sys_user t1
+        sys_user su
+        LEFT JOIN sys_dept sd ON su.dept_id = sd.id
+        LEFT JOIN sys_user_role t3 ON su.id = t3.user_id
+        AND sd.del_flag = '0'
+        WHERE 1 = 1
+        <if test='sysUserDto.roleId !=null and sysUserDto.roleId!=""  '>and t3.role_id in (${sysUserDto.roleId})
+            and sd.management_source = #{sysUserDto.agentFlag}</if>
+        <if test="
+            sysUserDto.agentFlag !=null and sysUserDto.agentFlag != 0 "></if>
+        <if test="sysUserDto.agentFlag != null and sysUserDto.agentFlag == 0">
+            and sd.management_source is null
+        </if>
+        AND su.leader_id = t1.id
+        ) totalNum
+        FROM
+        sys_user t1
         WHERE
-            t1.`status` = 1 AND t1.id NOT LIKE '%M%'
+        t1.`status` = 1 AND t1.id NOT LIKE '%M%'
+        ) AS t order by t.totalNum desc
     </select>
 
     <update id="cancelManagementPersonnel">

+ 9 - 1
src/main/resources/mapper/modules/ins/InsFeeTelemarketingMapper.xml

@@ -12,11 +12,19 @@
             <result property="noCarExportProportion" column="no_car_export_proportion" jdbcType="DECIMAL"/>
             <result property="createUser" column="create_user" jdbcType="VARCHAR"/>
             <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="jqTotalProportion" column="jq_total_proportion" jdbcType="DECIMAL"/>
+            <result property="syTotalProportion" column="sy_total_proportion" jdbcType="DECIMAL"/>
+            <result property="noTotalProportion" column="no_total_proportion" jdbcType="DECIMAL"/>
+            <result property="firstJqTotalProportion" column="first_jq_total_proportion" jdbcType="DECIMAL"/>
+            <result property="firstSyTotalProportion" column="first_sy_total_proportion" jdbcType="DECIMAL"/>
+            <result property="firstNoTotalProportion" column="first_no_total_proportion" jdbcType="DECIMAL"/>
     </resultMap>
 
     <sql id="Base_Column_List">
         id,sub_order_no,jq_export_proportion,
         sy_export_proportion,no_car_export_proportion,create_user,
-        create_time
+        create_time,jq_total_proportion,sy_total_proportion,
+        no_total_proportion,first_jq_total_proportion,first_sy_total_proportion,
+        first_no_total_proportion
     </sql>
 </mapper>

+ 41 - 24
src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml

@@ -71,6 +71,8 @@
         <result property="syRenewal" column="sy_renewal" jdbcType="VARCHAR"/>
         <result property="jqClaims" column="jq_claims" jdbcType="VARCHAR"/>
         <result property="syClaims" column="sy_claims" jdbcType="VARCHAR"/>
+        <result property="feeMatchErrMsg" column="fee_match_err_msg" jdbcType="VARCHAR"/>
+        <result property="quoteErrMsg" column="quote_err_msg" jdbcType="VARCHAR"/>
 
     </resultMap>
 
@@ -869,18 +871,20 @@
         FROM
         (
         SELECT
-        count(agree.partner_companies_id) as "orderSuccessNumber",
         agree.insurance_company AS companyName,
         agree.partner_companies_id AS parterCompanyId,
         iac.company_id as "companyId",
         count( iac.orderstatus ) AS qutationCount,
-        count( iac.id ) AS orderSuccessNumberRate,
-        COUNT( CASE WHEN iac.orderstatus = 2 THEN 1 END ) +  COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END )  AS underwritingCount,
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) AS qutationInsureCount,
-        (COUNT( CASE WHEN iac.orderstatus = 2 THEN 1 END ) +  COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END )) / count( iac.orderstatus ) AS passRate,
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) /   (COUNT( CASE WHEN iac.orderstatus = 2 THEN 1 END ) +  COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END )) AS closeRate,
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END )/ count( iac.orderstatus ) AS contributionRate,
-        COUNT(CASE WHEN  agree.audit_type =1 and ifa.auditstatus =1 and iac.orderstatus =3 THEN 1 END) as "numberManual"
+        count( iac.id ) AS allNumber,
+        count( CASE WHEN iac.orderstatus != '10' THEN 1 END ) AS orderSuccessNumber,
+        count( CASE WHEN iac.orderstatus != '10' THEN 1 END )  / count( iac.id ) as "orderSuccessNumberRate",
+        count( CASE WHEN iac.orderstatus = '10' THEN 1 END ) AS areaCompanyErrNumber,
+        COUNT( CASE WHEN iac.orderstatus = '2' THEN 1 END ) +  COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END )  AS underwritingCount,
+        COUNT( CASE WHEN iac.orderstatus = '3' THEN 1 END ) AS qutationInsureCount,
+        (COUNT( CASE WHEN iac.orderstatus = '2' THEN 1 END ) +  COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END )) / count( iac.orderstatus ) AS passRate,
+        COUNT( CASE WHEN iac.orderstatus = '3' THEN 1 END ) /   (COUNT( CASE WHEN iac.orderstatus = 2 THEN 1 END ) +  COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END )) AS closeRate,
+        COUNT( CASE WHEN iac.orderstatus = '3' THEN 1 END ) / count( iac.orderstatus ) AS contributionRate,
+        COUNT(CASE WHEN  agree.audit_type ='1' and ifa.auditstatus =1 and iac.orderstatus =3 THEN 1 END) as "numberManual"
         FROM
         ins_area_company iac
         LEFT JOIN ptl_agreement agree ON iac.agreement_id = agree.id
@@ -954,6 +958,11 @@
                     #{item}
                 </foreach>
             </if>
+
+            <if test="vo.deptId  != null  and vo.deptId !=''">
+                AND  iace.dept_id  like concat('%',#{vo.deptId},'%')
+            </if>
+
             <if test="vo.userIds != null and vo.userIds != '' and vo.userIds.size() > 0">
                 AND iace.user_id  in
                 <foreach collection="taskStatisticsVo.userIds" item="item" open="(" separator="," close=")">
@@ -1444,10 +1453,10 @@
                 and io.deptid like concat('%', #{taskStatisticsVo.houseId}, '%')
             </if>
             <if test="taskStatisticsVo.createtimeStart !=null and taskStatisticsVo.createtimeStart != '' and taskStatisticsVo.createtimeEnd !=null and taskStatisticsVo.createtimeEnd != ''">
-                AND   DATE_FORMAT( io.createtime, '%Y-%m-%d')   BETWEEN #{taskStatisticsVo.createtimeStart} AND #{taskStatisticsVo.createtimeEnd}
+                AND   DATE_FORMAT( iac.createtime, '%Y-%m-%d')   BETWEEN DATE_FORMAT(#{taskStatisticsVo.createtimeStart},'%Y-%m-%d') AND DATE_FORMAT( #{taskStatisticsVo.createtimeEnd}, '%Y-%m-%d')
             </if>
             <if test="taskStatisticsVo.beginDate !=null and taskStatisticsVo.beginDate != '' and taskStatisticsVo.endDate !=null and taskStatisticsVo.endDate != ''">
-                AND   DATE_FORMAT( iac.signing_time, '%Y-%m-%d')   BETWEEN DATE_FORMAT( #{taskStatisticsVo.beginDate}, '%Y-%m-%d')  AND DATE_FORMAT( #{taskStatisticsVo.endDate}, '%Y-%m-%d')
+                AND   DATE_FORMAT( iac.createtime, '%Y-%m-%d')   BETWEEN DATE_FORMAT( #{taskStatisticsVo.beginDate}, '%Y-%m-%d')  AND DATE_FORMAT( #{taskStatisticsVo.endDate}, '%Y-%m-%d')
             </if>
 
             <if test="taskStatisticsVo.companyId !=null and taskStatisticsVo.companyId != ''">
@@ -1505,10 +1514,10 @@
                 and io.deptid like concat('%', #{taskStatisticsVo.houseId}, '%')
             </if>
             <if test="taskStatisticsVo.createtimeStart !=null and taskStatisticsVo.createtimeStart != '' and taskStatisticsVo.createtimeEnd !=null and taskStatisticsVo.createtimeEnd != ''">
-                AND   DATE_FORMAT( io.createtime, '%Y-%m-%d')   BETWEEN #{taskStatisticsVo.createtimeStart} AND #{taskStatisticsVo.createtimeEnd}
+                AND   DATE_FORMAT( iac.createtime, '%Y-%m-%d')   BETWEEN DATE_FORMAT(#{taskStatisticsVo.createtimeStart},'%Y-%m-%d') AND DATE_FORMAT( #{taskStatisticsVo.createtimeEnd}, '%Y-%m-%d')
             </if>
             <if test="taskStatisticsVo.beginDate !=null and taskStatisticsVo.beginDate != '' and taskStatisticsVo.endDate !=null and taskStatisticsVo.endDate != ''">
-                AND   iac.signing_time   BETWEEN #{taskStatisticsVo.beginDate} AND #{taskStatisticsVo.endDate}
+                AND   DATE_FORMAT( iac.createtime, '%Y-%m-%d')   BETWEEN DATE_FORMAT( #{taskStatisticsVo.beginDate}, '%Y-%m-%d')  AND DATE_FORMAT( #{taskStatisticsVo.endDate}, '%Y-%m-%d')
             </if>
 
             <if test="taskStatisticsVo.deptIds != null and taskStatisticsVo.deptIds != '' and taskStatisticsVo.deptIds.size() > 0">
@@ -1728,7 +1737,7 @@
             </if>
 
             <if test="taskStatisticsVo.createtimeStart !=null and taskStatisticsVo.createtimeStart != '' and taskStatisticsVo.createtimeEnd !=null and taskStatisticsVo.createtimeEnd != ''">
-                AND   DATE_FORMAT( ifa.audittime, '%Y-%m-%d')  BETWEEN  DATE_FORMAT( #{taskStatisticsVo.createtimeStart}, '%Y-%m-%d')   AND  DATE_FORMAT( #{taskStatisticsVo.createtimeEnd}, '%Y-%m-%d')
+                AND   DATE_FORMAT( iac.signing_time, '%Y-%m-%d')  BETWEEN  DATE_FORMAT( #{taskStatisticsVo.createtimeStart}, '%Y-%m-%d')   AND  DATE_FORMAT( #{taskStatisticsVo.createtimeEnd}, '%Y-%m-%d')
             </if>
 
             <if test="taskStatisticsVo.beginDate !=null and taskStatisticsVo.beginDate != '' and taskStatisticsVo.endDate !=null and taskStatisticsVo.endDate != ''">
@@ -1967,7 +1976,7 @@
         SELECT
         IFNULL(count(io.licenseno),0) as "orderNumber",
         IFNULL(sum(TIMESTAMPDIFF(SECOND, iac.createtime, iac.audittime)),0) as "sumSecond",
-        IFNULL(sum(TIMESTAMPDIFF(SECOND, iac.createtime, iac.audittime)),0) / count(io.licenseno)  as "averageSecond"
+        ROUND(IFNULL(sum(TIMESTAMPDIFF(SECOND, iac.createtime, iac.audittime)),0) / count(io.licenseno),2)  as "averageSecond"
         FROM
             ins_fee_audit ifa
             LEFT JOIN ins_orders io ON io.orderno = ifa.orderno
@@ -2340,13 +2349,15 @@
 
     <select id="getCountBusinessData" resultType="com.ydtech.modules.admin.model.dto.TaskStatisticsDto">
         select
-            a.totalPremium as "totalPremium",
-            a.qutationInsureCount as "qutationInsureCount",
-            ROUND(a.averagePremium, 2)  as "averagePremium",
-            a.userNumber as "userNumber",
-            ROUND(a.perCapitaAmount, 2) as "perCapitaAmount"
+            sum(a.totalPremium) as "totalPremium",
+            sum(a.qutationInsureCount) as "qutationInsureCount",
+            sum(ROUND(a.averagePremium, 2))  as "averagePremium",
+            sum(a.userNumber) as "userNumber",
+            count(DISTINCT a.insuranceCompanyName) as "insuranceCompanyNumber",
+            sum(ROUND(a.perCapitaAmount, 2)) as "perCapitaAmount"
         from  (
         SELECT
+        agree.insurance_company AS "insuranceCompanyName",
         IFNULL(sum(iac.jqpremium),0) + IFNULL(sum(iac.sypremium),0) +IFNULL(sum(iac.jypremium),0) as "totalPremium",
         COUNT(0 ) AS "qutationInsureCount",
         (IFNULL(sum(iac.jqpremium),0) + IFNULL(sum(iac.sypremium),0) +IFNULL(sum(iac.jypremium),0)) / COUNT(0 )  AS "averagePremium",
@@ -2393,6 +2404,8 @@
                 #{item}
             </foreach>
         </if>
+        group  by
+        agree.insurance_company
         )  a
 
     </select>
@@ -2477,12 +2490,16 @@
         LEFT JOIN ins_orders io ON io.orderno = iac.orderno
         <where>
             iac.orderstatus = '3'
-            <if test="ids  != null  and  ids.size()>0 ">
+            <if test="vo.ids  != null  and  vo.ids.size()>0 ">
                 AND io.userid IN
-                <foreach item="item"  collection="ids" open="(" separator="," close=")">
+                <foreach item="item"  collection="vo.ids" open="(" separator="," close=")">
                     #{item}
                 </foreach>
             </if>
+
+            <if test="vo.createtimeStart  != null  and  vo.createtimeStart!=''  and vo.createtimeEnd  != null  and  vo.createtimeEnd!=''">
+                AND iac.signing_time BETWEEN #{vo.createtimeStart} AND #{vo.createtimeEnd}
+            </if>
         </where>
     </select>
     <select id="querOrdersDataPage"  resultType="com.ydtech.modules.admin.model.report.company.OrdersDataDto">
@@ -2820,7 +2837,7 @@
         COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) / COUNT( CASE WHEN iac.orderstatus = 0 THEN 1 END ) AS "closeRate",
         COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) / COUNT( iac.orderstatus ) AS "contributionRate",
         COUNT( CASE WHEN iac.orderstatus = 0 THEN 1 END ) / COUNT( iac.orderstatus ) AS "quotationRate",
-        COUNT( CASE WHEN ifa.auditstatus = 1 THEN 1 END ) AS "auditOrder"
+        COUNT( CASE WHEN iac.orderstatus = 1 THEN 1 END ) AS "auditOrder"
         FROM
         ins_area_company iac
         LEFT JOIN ins_fee_audit ifa ON ifa.ins_order_no = iac.id
@@ -2840,7 +2857,7 @@
                 and io.deptid like "${taskStatisticsVo.houseId}%"
             </if>
             <if test="taskStatisticsVo.createtimeStart !=null and taskStatisticsVo.createtimeStart != '' and taskStatisticsVo.createtimeEnd !=null and taskStatisticsVo.createtimeEnd != ''">
-                AND   DATE_FORMAT( io.createtime, '%Y-%m-%d')   BETWEEN #{taskStatisticsVo.createtimeStart} AND #{taskStatisticsVo.createtimeEnd}
+                AND   DATE_FORMAT( iac.createtime, '%Y-%m-%d')   BETWEEN DATE_FORMAT(#{taskStatisticsVo.createtimeStart},'%Y-%m-%d') AND DATE_FORMAT( #{taskStatisticsVo.createtimeEnd}, '%Y-%m-%d')
             </if>
             <if test="taskStatisticsVo.beginDate !=null and taskStatisticsVo.beginDate != '' and taskStatisticsVo.endDate !=null and taskStatisticsVo.endDate != ''">
                 AND   DATE_FORMAT( iac.createtime, '%Y-%m-%d')   BETWEEN DATE_FORMAT( #{taskStatisticsVo.beginDate}, '%Y-%m-%d')  AND DATE_FORMAT( #{taskStatisticsVo.endDate}, '%Y-%m-%d')
@@ -3055,7 +3072,7 @@
             </if>
 
             <if test="taskStatisticsVo.createtimeStart !=null and taskStatisticsVo.createtimeStart != '' and taskStatisticsVo.createtimeEnd !=null and taskStatisticsVo.createtimeEnd != ''">
-                AND   DATE_FORMAT( ifa.audittime, '%Y-%m-%d')  BETWEEN  DATE_FORMAT( #{taskStatisticsVo.createtimeStart}, '%Y-%m-%d')   AND  DATE_FORMAT( #{taskStatisticsVo.createtimeEnd}, '%Y-%m-%d')
+                AND   DATE_FORMAT( iac.signing_time, '%Y-%m-%d')  BETWEEN  DATE_FORMAT( #{taskStatisticsVo.createtimeStart}, '%Y-%m-%d')   AND  DATE_FORMAT( #{taskStatisticsVo.createtimeEnd}, '%Y-%m-%d')
             </if>
 
             <if test="taskStatisticsVo.beginDate !=null and taskStatisticsVo.beginDate != '' and taskStatisticsVo.endDate !=null and taskStatisticsVo.endDate != ''">

+ 6 - 0
src/main/resources/mapper/modules/protocols/PtlAgreementProductCostsNewMapper.xml

@@ -44,6 +44,12 @@
         <if test="params.createStartTime != null and params.createStartTime != ''">
             and DATE(papcn.create_time) BETWEEN #{params.createStartTime} and #{params.createEndTime}
         </if>
+        <if test="params.costStartDate != null and params.costStartDate != ''">
+            AND papcn.costs_start_date &gt;= #{params.costStartDate}
+        </if>
+        <if test="params.costsEndDate != null and params.costsEndDate != ''">
+            and papcn.costs_end_date &lt;= #{params.costsEndDate}
+        </if>
 
     </select>