فهرست منبع

外部订单添加 bug修改 永诚接口调整 非车调整

785834757 2 سال پیش
والد
کامیت
c9019b7201
40فایلهای تغییر یافته به همراه1232 افزوده شده و 192 حذف شده
  1. 9 1
      src/main/java/com/ydtech/modules/fee/service/FeeRuleSchemeNewService.java
  2. 304 54
      src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceNewImpl.java
  3. 2 0
      src/main/java/com/ydtech/modules/ins/model/yc/audit/Audit.java
  4. 2 2
      src/main/java/com/ydtech/modules/ins/model/yc/ruote/Ruote.java
  5. 4 1
      src/main/java/com/ydtech/modules/ins/model/yc/ruote/Vhl.java
  6. 47 0
      src/main/java/com/ydtech/modules/order/controller/ExternalOrderController.java
  7. 31 0
      src/main/java/com/ydtech/modules/order/dao/InsAreaCompanyExternalFeeMapper.java
  8. 20 0
      src/main/java/com/ydtech/modules/order/dao/InsAreaCompanyExternalPolicyMapper.java
  9. 65 0
      src/main/java/com/ydtech/modules/order/entity/InsAreaCompanyExternalFee.java
  10. 48 0
      src/main/java/com/ydtech/modules/order/entity/InsAreaCompanyExternalPolicy.java
  11. 0 1
      src/main/java/com/ydtech/modules/order/entity/InsDrivingIntentionInsurance.java
  12. 4 0
      src/main/java/com/ydtech/modules/order/entity/InsOrders.java
  13. 7 0
      src/main/java/com/ydtech/modules/order/entity/PtlAgreementNonCarProductRule.java
  14. 5 0
      src/main/java/com/ydtech/modules/order/entity/dto/InsAreaCompanyQueryDto.java
  15. 3 0
      src/main/java/com/ydtech/modules/order/entity/vo/BaseQuoteInfoVo.java
  16. 57 0
      src/main/java/com/ydtech/modules/order/entity/vo/BaseQuoteVo.java
  17. 11 0
      src/main/java/com/ydtech/modules/order/entity/vo/InsDrivingIntentionInsuranceVo.java
  18. 10 0
      src/main/java/com/ydtech/modules/order/entity/vo/NoCarInsuranceQueryVo.java
  19. 3 0
      src/main/java/com/ydtech/modules/order/entity/vo/OrderVo.java
  20. 24 0
      src/main/java/com/ydtech/modules/order/service/InsAreaCompanyExternalFeeService.java
  21. 16 0
      src/main/java/com/ydtech/modules/order/service/InsAreaCompanyExternalPolicyService.java
  22. 7 2
      src/main/java/com/ydtech/modules/order/service/InsAreaCompanyService.java
  23. 60 0
      src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyExternalFeeServiceImpl.java
  24. 33 0
      src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyExternalPolicyServiceImpl.java
  25. 167 12
      src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyServiceImpl.java
  26. 4 0
      src/main/java/com/ydtech/modules/order/service/impl/InsDrivingIntentionInsuranceServiceImpl.java
  27. 5 3
      src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
  28. 5 1
      src/main/java/com/ydtech/modules/order/service/impl/PtlAgreementNonCarProductRuleServiceImpl.java
  29. 48 10
      src/main/java/com/ydtech/modules/order/service/impl/YongchengOrderApiServiceImpl.java
  30. 10 0
      src/main/java/com/ydtech/modules/protocol/controller/TaxSourceController.java
  31. 3 0
      src/main/java/com/ydtech/modules/protocol/dao/PtlAgreementMapper.java
  32. 3 0
      src/main/java/com/ydtech/modules/protocol/entity/dto/PtlAgreementSaveDto.java
  33. 6 0
      src/main/java/com/ydtech/modules/protocol/entity/po/PtlAgreement.java
  34. 10 0
      src/main/java/com/ydtech/modules/protocol/service/PtlAgreementService.java
  35. 64 1
      src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java
  36. 3 0
      src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductQueryVo.java
  37. 104 101
      src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java
  38. 4 2
      src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml
  39. 5 1
      src/main/resources/mapper/modules/order/InsOrdersMapper.xml
  40. 19 0
      src/main/resources/mapper/modules/protocol/PtlAgreementMapper.xml

+ 9 - 1
src/main/java/com/ydtech/modules/fee/service/FeeRuleSchemeNewService.java

@@ -7,6 +7,7 @@ import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.QueryOrderFeeResultVo;
 import com.ydtech.modules.order.entity.vo.QueryOrderFeeVo;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
 
 import java.util.List;
 
@@ -62,5 +63,12 @@ public interface FeeRuleSchemeNewService {
      * 计算费用因子
      * @param costsId
      */
-    void calcCosts(String costsId,InsAreaCompany insAreaCOmpany);
+    void calcCosts(String costsId,InsAreaCompany insAreaCompany);
+
+    /**
+     * 计算费用因子  外部订单录入使用
+     * @param costsNew
+     * @param insAreaCompany
+     */
+    void calcCostsExternal(PtlAgreementProductCostsNew costsNew,InsAreaCompany insAreaCompany);
 }

+ 304 - 54
src/main/java/com/ydtech/modules/fee/service/impl/FeeRuleSchemeServiceNewImpl.java

@@ -166,7 +166,8 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         //获取协议信息
         PtlAgreement ptlAgreement = ptlAgreementService.getById(insAreaCompany.getAgreementId());
         BigDecimal taxRadio = new BigDecimal("1.00");
-        if (ptlAgreement.getWithTax().equals("否")) {
+        //如果是外部订单则 不含税
+        if (ptlAgreement.getWithTax().equals("否") && ptlAgreement.getIsExternal() == 0) {
             taxRadio = new BigDecimal("1.06");
         }
         //税比例 固定1.06
@@ -459,6 +460,303 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         insFeeOrderNewService.saveOrUpdate(insFeeOrderNew);
     }
 
+    @Override
+    public void calcCostsExternal(PtlAgreementProductCostsNew ptlAgreementProductCostsNew, InsAreaCompany insAreaCompany) {
+        //获取协议信息
+        PtlAgreement ptlAgreement = ptlAgreementService.getById(insAreaCompany.getAgreementId());
+        BigDecimal taxRadio = new BigDecimal("1.00");
+        //如果是外部订单则 不含税
+        if (ptlAgreement.getWithTax().equals("否") && ptlAgreement.getIsExternal() == 0) {
+            taxRadio = new BigDecimal("1.06");
+        }
+        //税比例 固定1.06
+        //查找入口与出口费用比例
+
+        //出口配置
+        PtlAgreementProductCostsExport ptlAgreementProductCostsExport =
+                ptlAgreementProductCostsExportService.getOne(new LambdaQueryWrapper<PtlAgreementProductCostsExport>().eq(PtlAgreementProductCostsExport::getCostsId, ptlAgreementProductCostsNew.getId()));
+        InsFeeOrderNew insFeeOrderNew = new InsFeeOrderNew();
+        insFeeOrderNew.setId(IdGenerate.nextId());
+        insFeeOrderNew.setCostsId(ptlAgreementProductCostsNew.getId());
+        insFeeOrderNew.setAgreementId(insAreaCompany.getAgreementId());
+
+        //存储部门id与用户id
+        InsOrders order = insOrdersService.getById(insAreaCompany.getOrderno());
+        InsFeeOrderNew insFeeOrderNewByCompanyId = insFeeOrderNewService.getInsFeeOrderNewByCompanyId(insAreaCompany.getId());
+        if (insFeeOrderNewByCompanyId != null) {
+            insFeeOrderNew.setId(insFeeOrderNewByCompanyId.getId());
+        }
+        insFeeOrderNew.setDeptId(order.getDeptid());
+        insFeeOrderNew.setUserId(order.getUserid());
+        insFeeOrderNew.setInsOrderNo(insAreaCompany.getId());
+        insFeeOrderNew.setJqPremium(insAreaCompany.getJqpremium());
+        insFeeOrderNew.setSyPremium(insAreaCompany.getSypremium());
+        insFeeOrderNew.setNoPremium(insAreaCompany.getJypremium());
+        //不含税
+        BigDecimal bigDecimal = new BigDecimal("1.06");
+        insFeeOrderNew.setJqNoTaxPremium(insAreaCompany.getJqpremium().divide(bigDecimal, 2));
+        insFeeOrderNew.setSyNoTaxPremium(insAreaCompany.getSypremium().divide(bigDecimal, 2));
+        insFeeOrderNew.setNoNoTaxPremium(insAreaCompany.getJypremium().divide(bigDecimal, 2));
+
+        //region 计算入口费用
+
+        //交强入口信息
+        FeeOrderNewVo.EntranceFee jqEntranceFee = feeRuleSchemeService.calcEntranceFee(insFeeOrderNew.getJqPremium(),
+                new BigDecimal(ptlAgreementProductCostsNew.getJqCarCostsProportion()),
+                new BigDecimal(ptlAgreementProductCostsNew.getJqCarOtherCostsProportion()), taxRadio);
+        insFeeOrderNew.setJqCostsProportion(jqEntranceFee.getTotalProportion());
+        insFeeOrderNew.setJqSuperviseCostsProportion(jqEntranceFee.getSuperviseCosts());
+        insFeeOrderNew.setJqSuperviseCostsPremiums(jqEntranceFee.getSuperviseCostsPremiums());
+        insFeeOrderNew.setJqOtherCostsProportion(jqEntranceFee.getOtherCostsProportion());
+        insFeeOrderNew.setJqOtherCostsPremiums(jqEntranceFee.getOtherCostsPremiums());
+        insFeeOrderNew.setJqCostsPremiums(insFeeOrderNew.getJqSuperviseCostsPremiums().add(insFeeOrderNew.getJqOtherCostsPremiums()));
+
+        //商业入口信息
+        FeeOrderNewVo.EntranceFee syEntranceFee = feeRuleSchemeService.calcEntranceFee(insFeeOrderNew.getSyPremium(),
+                new BigDecimal(ptlAgreementProductCostsNew.getSyCarCostsProportion()),
+                new BigDecimal(ptlAgreementProductCostsNew.getSyCarOtherCostsProportion()), taxRadio);
+        insFeeOrderNew.setSyCostsProportion(syEntranceFee.getTotalProportion());
+        insFeeOrderNew.setSySuperviseCostsProportion(syEntranceFee.getSuperviseCosts());
+        insFeeOrderNew.setSySuperviseCostsPremiums(syEntranceFee.getSuperviseCostsPremiums());
+        insFeeOrderNew.setSyOtherCostsProportion(syEntranceFee.getOtherCostsProportion());
+        insFeeOrderNew.setSyOtherCostsPremiums(syEntranceFee.getOtherCostsPremiums());
+        insFeeOrderNew.setSyCostsPremiums(insFeeOrderNew.getSySuperviseCostsPremiums().add(insFeeOrderNew.getSyOtherCostsPremiums()));
+
+        //非车入口信息
+        FeeOrderNewVo.EntranceFee noEntranceFee = feeRuleSchemeService.calcEntranceFee(insFeeOrderNew.getNoPremium(),
+                new BigDecimal(ptlAgreementProductCostsNew.getNoCarCostsProportion()),
+                new BigDecimal(ptlAgreementProductCostsNew.getNoCarOtherCostsProportion()), taxRadio);
+        insFeeOrderNew.setNoCostsProportion(noEntranceFee.getTotalProportion());
+        insFeeOrderNew.setNoSuperviseCostsProportion(noEntranceFee.getSuperviseCosts());
+        insFeeOrderNew.setNoSuperviseCostsPremiums(noEntranceFee.getSuperviseCostsPremiums());
+        insFeeOrderNew.setNoOtherCostsProportion(noEntranceFee.getOtherCostsProportion());
+        insFeeOrderNew.setNoOtherCostsPremiums(noEntranceFee.getOtherCostsPremiums());
+        insFeeOrderNew.setNoCostsPremiums(insFeeOrderNew.getNoSuperviseCostsPremiums().add(insFeeOrderNew.getNoOtherCostsPremiums()));
+        //endregion
+
+        //region 计算分销费用
+        InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
+        SysUser sysUser = sysUserService.findByUserId(insOrders.getUserid());
+
+        //获取分销比例
+        List<EsmRetail> esmRetailList = esmRetailService.selectList(" where t.deptid=? and t.status = '1' ",
+                new Object[]{sysUser.getDeptId()});
+
+        //分销总比例
+        BigDecimal retailRadio = new BigDecimal("0");
+        if (esmRetailList != null && !esmRetailList.isEmpty()) {
+            EsmRetail esmRetail = esmRetailList.get(0);
+            //分销等级
+            insFeeOrderNew.setDistributionStatus(esmRetailList.get(0).getRetailtype());
+            //用户分销人员id
+            List<EsmUserReferrer> parents = esmUserReferrerService.findParents(sysUser.getId());
+
+            if (esmRetail != null) {
+                BigDecimal sumPremium = insFeeOrderNew.getJqPremium().add(insFeeOrderNew.getSyPremium()).add(insFeeOrderNew.getNoPremium());
+                if (Integer.parseInt(esmRetail.getRetailtype()) >= 3) {
+                    insFeeOrderNew.setThirdDetailProportion(new BigDecimal(esmRetail.getDisrate3()));
+                    retailRadio = retailRadio.add(insFeeOrderNew.getThirdDetailProportion()).setScale(2, BigDecimal.ROUND_DOWN);
+                    BigDecimal thirdDetailPremiums = feeRuleSchemeService.calcRetail(insFeeOrderNew.getJqPremium(), insFeeOrderNew.getSyPremium(), insFeeOrderNew.getNoPremium(), insFeeOrderNew.getThirdDetailProportion());
+                    insFeeOrderNew.setThirdDetailPremiums(thirdDetailPremiums);
+                    if (parents != null && parents.size() > 2) {
+                        insFeeOrderNew.setThreeLevelUserId(parents.get(2).getId());
+                    }
+                }else{
+                    insFeeOrderNew.setThirdDetailProportion(new BigDecimal(0));
+                }
+                if (Integer.parseInt(esmRetail.getRetailtype()) >= 2) {
+                    insFeeOrderNew.setSecondDetailProportion(new BigDecimal(esmRetail.getDisrate2()));
+                    retailRadio = retailRadio.add(insFeeOrderNew.getSecondDetailProportion()).setScale(2, BigDecimal.ROUND_DOWN);
+                    BigDecimal secondDetailPremiums = feeRuleSchemeService.calcRetail(insFeeOrderNew.getJqPremium(), insFeeOrderNew.getSyPremium(), insFeeOrderNew.getNoPremium(), insFeeOrderNew.getSecondDetailProportion());
+                    insFeeOrderNew.setSecondDetailPremiums(secondDetailPremiums);
+                    if (parents != null && parents.size() > 1) {
+                        insFeeOrderNew.setTwoLevelUserId(parents.get(1).getId());
+                    }
+                }else{
+                    insFeeOrderNew.setSecondDetailProportion(new BigDecimal(0));
+                }
+                if (Integer.parseInt(esmRetail.getRetailtype()) >= 1) {
+                    insFeeOrderNew.setFirstDetailProportion(new BigDecimal(esmRetail.getDisrate1()));
+                    retailRadio = retailRadio.add(insFeeOrderNew.getFirstDetailProportion()).setScale(2, BigDecimal.ROUND_DOWN);
+                    BigDecimal firstDetailPremiums = feeRuleSchemeService.calcRetail(insFeeOrderNew.getJqPremium(), insFeeOrderNew.getSyPremium(), insFeeOrderNew.getNoPremium(), insFeeOrderNew.getFirstDetailProportion());
+                    insFeeOrderNew.setFirstDetailPremiums(firstDetailPremiums);
+                    if (parents != null && parents.size() > 0) {
+                        insFeeOrderNew.setFirstLevelUserId(parents.get(0).getId());
+                    }
+                }else{
+                    insFeeOrderNew.setFirstDetailProportion(new BigDecimal(0));
+                }
+            }else{
+                insFeeOrderNew.setFirstDetailPremiums(new BigDecimal(0));
+                insFeeOrderNew.setSecondDetailPremiums(new BigDecimal(0));
+                insFeeOrderNew.setThirdDetailPremiums(new BigDecimal(0));
+            }
+        }else{
+            insFeeOrderNew.setFirstDetailProportion(new BigDecimal(0));
+            insFeeOrderNew.setSecondDetailProportion(new BigDecimal(0));
+            insFeeOrderNew.setThirdDetailProportion(new BigDecimal(0));
+        }
+
+
+        //endregion
+
+        //region 设置机构管理费
+
+        //交强机构管理费
+        BigDecimal jqDeptRadio =
+                ptlAgreementProductCostsExport.getJqExportRadioLevel1().add(ptlAgreementProductCostsExport.getJqExportRadioLevel2()).add(ptlAgreementProductCostsExport.getJqExportRadioLevel3()).add(ptlAgreementProductCostsExport.getJqExportRadioLevel4()).add(ptlAgreementProductCostsExport.getJqExportRadioLevel5());
+        FeeOrderNewVo.DeptManagerFee jqDeptManagerFee = feeRuleSchemeService.calcDeptManagerFee(insFeeOrderNew.getJqPremium(),
+                ptlAgreementProductCostsExport.getJqExportRadioLevel1(), ptlAgreementProductCostsExport.getJqExportRadioLevel2(),
+                ptlAgreementProductCostsExport.getJqExportRadioLevel3(), ptlAgreementProductCostsExport.getJqExportRadioLevel4(),
+                ptlAgreementProductCostsExport.getJqExportRadioLevel5());
+        insFeeOrderNew.setJqDeptProportionLevel1(jqDeptManagerFee.getDeptProportionLevelOne());
+        insFeeOrderNew.setJqDeptPremiumsLevel1(twoPeople(jqDeptManagerFee.getDeptPremiumsLevelOne()));
+        insFeeOrderNew.setJqDeptProportionLevel2(jqDeptManagerFee.getDeptProportionLevelTwo());
+        insFeeOrderNew.setJqDeptPremiumsLevel2(twoPeople(jqDeptManagerFee.getDeptPremiumsLevelTwo()));
+        insFeeOrderNew.setJqDeptProportionLevel3(jqDeptManagerFee.getDeptProportionLevelThree());
+        insFeeOrderNew.setJqDeptPremiumsLevel3(twoPeople(jqDeptManagerFee.getDeptPremiumsLevelThree()));
+        insFeeOrderNew.setJqDeptProportionLevel4(jqDeptManagerFee.getDeptProportionLevelFoure());
+        insFeeOrderNew.setJqDeptPremiumsLevel4(twoPeople(jqDeptManagerFee.getDeptPremiumsLevelFoure()));
+        insFeeOrderNew.setJqDeptProportionLevel5(jqDeptManagerFee.getDeptProportionLevelFive());
+        insFeeOrderNew.setJqDeptPremiumsLevel5(twoPeople(jqDeptManagerFee.getDeptPremiumsLevelFive()));
+
+        BigDecimal syDeptRadio =
+                ptlAgreementProductCostsExport.getSyExportRadioLevel1().add(ptlAgreementProductCostsExport.getSyExportRadioLevel2()).add(ptlAgreementProductCostsExport.getSyExportRadioLevel3()).add(ptlAgreementProductCostsExport.getSyExportRadioLevel4()).add(ptlAgreementProductCostsExport.getSyExportRadioLevel5());
+        FeeOrderNewVo.DeptManagerFee syDeptManagerFee = feeRuleSchemeService.calcDeptManagerFee(insFeeOrderNew.getSyPremium(),
+                ptlAgreementProductCostsExport.getSyExportRadioLevel1(), ptlAgreementProductCostsExport.getSyExportRadioLevel2(),
+                ptlAgreementProductCostsExport.getSyExportRadioLevel3(), ptlAgreementProductCostsExport.getSyExportRadioLevel4(),
+                ptlAgreementProductCostsExport.getSyExportRadioLevel5());
+        insFeeOrderNew.setSyDeptProportionLevel1(syDeptManagerFee.getDeptProportionLevelOne());
+        insFeeOrderNew.setSyDeptPremiumsLevel1(twoPeople(syDeptManagerFee.getDeptPremiumsLevelOne()));
+        insFeeOrderNew.setSyDeptProportionLevel2(syDeptManagerFee.getDeptProportionLevelTwo());
+        insFeeOrderNew.setSyDeptPremiumsLevel2(twoPeople(syDeptManagerFee.getDeptPremiumsLevelTwo()));
+        insFeeOrderNew.setSyDeptProportionLevel3(syDeptManagerFee.getDeptProportionLevelThree());
+        insFeeOrderNew.setSyDeptPremiumsLevel3(twoPeople(syDeptManagerFee.getDeptPremiumsLevelThree()));
+        insFeeOrderNew.setSyDeptProportionLevel4(syDeptManagerFee.getDeptProportionLevelFoure());
+        insFeeOrderNew.setSyDeptPremiumsLevel4(twoPeople(syDeptManagerFee.getDeptPremiumsLevelFoure()));
+        insFeeOrderNew.setSyDeptProportionLevel5(syDeptManagerFee.getDeptProportionLevelFive());
+        insFeeOrderNew.setSyDeptPremiumsLevel5(twoPeople(syDeptManagerFee.getDeptPremiumsLevelFive()));
+
+        BigDecimal noDeptRadio =
+                ptlAgreementProductCostsExport.getNoCarExportRadioLevel1().add(ptlAgreementProductCostsExport.getNoCarExportRadioLevel2()).add(ptlAgreementProductCostsExport.getNoCarExportRadioLevel3()).add(ptlAgreementProductCostsExport.getNoCarExportRadioLevel4()).add(ptlAgreementProductCostsExport.getNoCarExportRadioLevel5());
+        FeeOrderNewVo.DeptManagerFee noDeptManagerFee = feeRuleSchemeService.calcDeptManagerFee(insFeeOrderNew.getNoPremium(),
+                ptlAgreementProductCostsExport.getNoCarExportRadioLevel1(), ptlAgreementProductCostsExport.getNoCarExportRadioLevel2(),
+                ptlAgreementProductCostsExport.getNoCarExportRadioLevel3(), ptlAgreementProductCostsExport.getNoCarExportRadioLevel4(),
+                ptlAgreementProductCostsExport.getNoCarExportRadioLevel5());
+        insFeeOrderNew.setNoDeptProportionLevel1(noDeptManagerFee.getDeptProportionLevelOne());
+        insFeeOrderNew.setNoDeptPremiumsLevel1(twoPeople(noDeptManagerFee.getDeptPremiumsLevelOne()));
+        insFeeOrderNew.setNoDeptProportionLevel2(noDeptManagerFee.getDeptProportionLevelTwo());
+        insFeeOrderNew.setNoDeptPremiumsLevel2(twoPeople(noDeptManagerFee.getDeptPremiumsLevelTwo()));
+        insFeeOrderNew.setNoDeptProportionLevel3(noDeptManagerFee.getDeptProportionLevelThree());
+        insFeeOrderNew.setNoDeptPremiumsLevel3(twoPeople(noDeptManagerFee.getDeptPremiumsLevelThree()));
+        insFeeOrderNew.setNoDeptProportionLevel4(noDeptManagerFee.getDeptProportionLevelFoure());
+        insFeeOrderNew.setNoDeptPremiumsLevel4(twoPeople(noDeptManagerFee.getDeptPremiumsLevelFoure()));
+        insFeeOrderNew.setNoDeptProportionLevel5(noDeptManagerFee.getDeptProportionLevelFive());
+        insFeeOrderNew.setNoDeptPremiumsLevel5(twoPeople(noDeptManagerFee.getDeptPremiumsLevelFive()));
+
+        //endregion
+
+        //region 出口费用
+
+        //交强出口手续费比例
+        FeeOrderNewVo.ExportFee jqExportFee = feeRuleSchemeService.calcExportFee(insFeeOrderNew.getJqPremium(), new BigDecimal(ptlAgreementProductCostsNew.getJqCostsExportProportion()),
+                insFeeOrderNew.getJqCostsProportion(), jqDeptRadio, retailRadio, taxRadio);
+
+        //商业出口手续费比例
+        FeeOrderNewVo.ExportFee syExportFee = feeRuleSchemeService.calcExportFee(insFeeOrderNew.getSyPremium(), new BigDecimal(ptlAgreementProductCostsNew.getSyCostsExportProportion()),
+                insFeeOrderNew.getSyCostsProportion(), syDeptRadio, retailRadio, taxRadio);
+
+        //非车出口手续费比例
+        FeeOrderNewVo.ExportFee noExportFee = feeRuleSchemeService.calcExportFee(insFeeOrderNew.getNoPremium(), new BigDecimal(ptlAgreementProductCostsNew.getNoCostsExportProportion()),
+                insFeeOrderNew.getNoCostsProportion(), noDeptRadio, retailRadio, taxRadio);
+
+        //出口手续费用
+        insFeeOrderNew.setJqExportSuperviseCostsPremiums(twoPeople(jqExportFee.getSuperviseCostsPremiums()));
+        insFeeOrderNew.setSyExportSuperviseCostsPremiums(twoPeople(syExportFee.getSuperviseCostsPremiums()));
+        insFeeOrderNew.setNoExportSuperviseCostsPremiums(twoPeople(noExportFee.getSuperviseCostsPremiums()));
+
+        //出口其他费用比例
+        insFeeOrderNew.setJqExportOtherCostsProportion(twoPeople(jqExportFee.getOtherCostsProportion()));
+        insFeeOrderNew.setSyExportOtherCostsProportion(twoPeople(syExportFee.getOtherCostsProportion()));
+        insFeeOrderNew.setNoExportOtherCostsProportion(twoPeople(noExportFee.getOtherCostsProportion()));
+
+        //出口其他费用
+        insFeeOrderNew.setJqExportOtherCostsPremiums(twoPeople(jqExportFee.getOtherCostsPremiums()));
+        insFeeOrderNew.setSyExportOtherCostsPremiums(twoPeople(syExportFee.getOtherCostsPremiums()));
+        insFeeOrderNew.setNoExportOtherCostsPremiums(twoPeople(noExportFee.getOtherCostsPremiums()));
+
+        //设置出口手续费比例
+        insFeeOrderNew.setJqCostsExportProportion(twoPeople(jqExportFee.getSuperviseCosts()));
+        insFeeOrderNew.setSyCostsExportProportion(twoPeople(syExportFee.getSuperviseCosts()));
+        insFeeOrderNew.setNoCostsExportProportion(twoPeople(noExportFee.getSuperviseCosts()));
+
+        //endregion
+
+        //region 计算利润差值
+        //入口 - 出口 - 机构管理费 1-5级 - 分销费  = 差值
+
+        //分销交强费用
+        //分开算  1  2 3 级
+        BigDecimal jqFirst = insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getFirstDetailProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+        BigDecimal jqSecond = insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getSecondDetailProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+        BigDecimal jqThird = insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getThirdDetailProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+        BigDecimal jqFenXiao = jqFirst.add(jqSecond).add(jqThird);
+        //分销商业费用
+        BigDecimal syFirst = insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getFirstDetailProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+        BigDecimal sySecond = insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSecondDetailProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+        BigDecimal syThird = insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getThirdDetailProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+        BigDecimal syFenXiao = syFirst.add(sySecond).add(syThird);
+        //分销非车费用
+        BigDecimal noFirst = insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getFirstDetailProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+        BigDecimal noSecond = insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getSecondDetailProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+        BigDecimal noThird = insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getThirdDetailProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
+        BigDecimal noFenXiao = noFirst.add(noSecond).add(noThird);
+
+
+        BigDecimal jqDifference = jqEntranceFee.getTotalAmount().subtract(
+                        (jqExportFee.getSuperviseCostsPremiums().add(jqExportFee.getOtherCostsPremiums())))
+                .subtract(
+                        (jqDeptManagerFee.getDeptPremiumsLevelOne().add(jqDeptManagerFee.getDeptPremiumsLevelTwo().add(jqDeptManagerFee.getDeptPremiumsLevelThree()).add(jqDeptManagerFee.getDeptPremiumsLevelFoure()).add(jqDeptManagerFee.getDeptPremiumsLevelFive())))
+                )
+                .subtract(jqFenXiao).setScale(5, BigDecimal.ROUND_HALF_DOWN);
+        insFeeOrderNew.setJqProfitMarginPremiums(jqDifference);
+
+        BigDecimal syDifference = syEntranceFee.getTotalAmount().subtract(
+                        (syExportFee.getSuperviseCostsPremiums().add(syExportFee.getOtherCostsPremiums())))
+                .subtract(
+                        (syDeptManagerFee.getDeptPremiumsLevelOne().add(syDeptManagerFee.getDeptPremiumsLevelTwo().add(syDeptManagerFee.getDeptPremiumsLevelThree()).add(syDeptManagerFee.getDeptPremiumsLevelFoure()).add(syDeptManagerFee.getDeptPremiumsLevelFive())))
+                )
+                .subtract(syFenXiao).setScale(5, BigDecimal.ROUND_HALF_DOWN);
+        insFeeOrderNew.setSyProfitMarginPremiums(syDifference);
+
+
+        BigDecimal noDifference = noEntranceFee.getTotalAmount().subtract(
+                        (noExportFee.getSuperviseCostsPremiums().add(noExportFee.getOtherCostsPremiums())))
+                .subtract(
+                        (noDeptManagerFee.getDeptPremiumsLevelOne().add(noDeptManagerFee.getDeptPremiumsLevelTwo().add(noDeptManagerFee.getDeptPremiumsLevelThree()).add(noDeptManagerFee.getDeptPremiumsLevelFoure()).add(noDeptManagerFee.getDeptPremiumsLevelFive())))
+                )
+                .subtract(noFenXiao).setScale(5, BigDecimal.ROUND_HALF_DOWN);
+
+        insFeeOrderNew.setNoProfitMarginPremiums(noDifference);
+
+        //endregion
+
+        //region 比例逆推是否等于0
+
+        if(!feeRuleSchemeService.calculateProportion(jqEntranceFee,jqDeptManagerFee,jqExportFee,retailRadio,taxRadio,insFeeOrderNew.getJqPremium()))
+            throw new SystemException("交强比例异常");
+
+        if(!feeRuleSchemeService.calculateProportion(syEntranceFee,syDeptManagerFee,syExportFee,retailRadio,taxRadio,insFeeOrderNew.getSyPremium()))
+            throw new SystemException("商业比例异常");
+
+        if(!feeRuleSchemeService.calculateProportion(noEntranceFee,noDeptManagerFee,noExportFee,retailRadio,taxRadio,insFeeOrderNew.getNoPremium()))
+            throw new SystemException("非车比例异常");
+
+        //endregion
+
+        insFeeOrderNewService.saveOrUpdate(insFeeOrderNew);
+    }
+
 
     /**
      * 判断是否包含非车险
@@ -493,45 +791,6 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insAreaCompany, insOrders,
                 undwrtRulesAttrList, carJudgeRule);
 
-//        List<AgreementProductCosts> filterAgreementProductCosts = new ArrayList<>();
-
-//        boolean isNoCar = false;
-//        //查找是否有强制非车因子
-//        for(int i=0;i<agreementProductCosts.size();i++) {
-//            PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink =
-//                    agreementProductCosts.get(i).getCostsAttrLinks().stream().filter(x -> x.getAttrCode().equals("IsNonMotorInsurance")
-//                    ).findFirst().orElse(null);
-//
-//            if(!Objects.isNull(ptlAgreementProductCostsAttrLink)){
-//                if(ptlAgreementProductCostsAttrLink.getMin().equals("1")){
-//                    //只走强制非车的费用因子
-//                    AgreementProductCosts productCosts = agreementProductCosts.get(i);
-//                    filterAgreementProductCosts.add(productCosts);
-//                    isNoCar = true;
-//                }
-//
-//            }
-//        }
-//        if(filterAgreementProductCosts.isEmpty()){
-//            filterAgreementProductCosts = agreementProductCosts;
-//        }
-        //是否强制走非车
-//        if(isNoCar) {
-//            for(int i=0;i<filterAgreementProductCosts.size();i++) {
-//                if (judgementsIsNoCar(filterAgreementProductCosts.get(i).getCostsAttrLinks(), undwrtRulesAttrList,
-//                ruleAttrMappingVoList)) {
-//                    return filterAgreementProductCosts.get(i).getId();
-//                }
-//            }
-//        }else{
-//            for (int i = 0; i < filterAgreementProductCosts.size(); i++) {
-//                //判断是否匹配
-//                if (judgements(filterAgreementProductCosts.get(i).getCostsAttrLinks(), undwrtRulesAttrList, ruleAttrMappingVoList)) {
-//                    //返回 费用id   如果需要匹配非车的情况  将返回值返回list 后赛选
-//                    return filterAgreementProductCosts.get(i).getId();
-//                }
-//            }
-//        }
         for (int i = 0; i < agreementProductCosts.size(); i++) {
             //判断是否匹配
             log.debug("费用因子匹配开始:" + agreementProductCosts.get(i).getId());
@@ -909,20 +1168,11 @@ public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
         //将值进行分割
         String[] split = ptlAgreementProductCostsAttrLink.getMin().split(",");
         AtomicBoolean returnBool = new AtomicBoolean(false);
-        if(ptlAgreementProductCostsAttrLink.getAttrCode().equals("NatureOfUse")){
-            Arrays.stream(split).forEach(x -> {
-                if (value.equals(x)) {
-                    returnBool.set(true);
-                }
-            });
-        }else{
-            Arrays.stream(split).forEach(x -> {
-                if (value.contains(x)) {
-                    returnBool.set(true);
-                }
-            });
-        }
-
+        Arrays.stream(split).forEach(x -> {
+            if (value.equals(x)) {
+                returnBool.set(true);
+            }
+        });
         return returnBool.get();
     }
 

+ 2 - 0
src/main/java/com/ydtech/modules/ins/model/yc/audit/Audit.java

@@ -8,6 +8,7 @@ import com.ydtech.modules.ins.model.yc.YcBuildData;
 import com.ydtech.modules.ins.model.vo.CustomerInfoVo;
 import com.ydtech.modules.ins.model.yc.YcConfigureParameters;
 import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.utils.IDCardUtils;
 import lombok.Data;
 
@@ -250,6 +251,7 @@ public class Audit {
 
         condition.setCProdNoSY(condition.getSyFlag().equals("1") ? "0364" : "");
         condition.setCProdNoJQ(condition.getJqFlag().equals("1") ? "0326" : "");
+
         condition.setQuerySequenceNoSy(iac.getSyapplyno());
         condition.setQuerySequenceNoJq(iac.getJqapplyno());
 

+ 2 - 2
src/main/java/com/ydtech/modules/ins/model/yc/ruote/Ruote.java

@@ -156,7 +156,7 @@ public class Ruote {
      * @date: 2023年02月08日 0008
      */
     public static Ruote buildQuoteParam(YaQuoteInfoVo yaQuoteInfoVo, YcConfigureParameters ycConfigureParameters,
-                                        AccidentalDrivingVo adVo) {
+                                        AccidentalDrivingVo adVo,String cQryCdeJQ,String cQryCdeSY) {
 
         Ruote m = new Ruote();
         Ruote.RequestLabel requestLabel = new Ruote.RequestLabel();
@@ -181,7 +181,7 @@ public class Ruote {
          * 车辆信息
          * 代码:vhl
          */
-        Vhl vhl = Vhl.buildVhl(carInfo, ownerInfo);
+        Vhl vhl = Vhl.buildVhl(carInfo, ownerInfo,cQryCdeJQ,cQryCdeSY);
 
         String startTime = StringUtils.isNotEmpty(base.getTInsrncBgnTmJQ()) ? base.getTInsrncBgnTmJQ() : base.getTInsrncBgnTmSY();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

+ 4 - 1
src/main/java/com/ydtech/modules/ins/model/yc/ruote/Vhl.java

@@ -330,7 +330,7 @@ public class Vhl {
     /**
      * @description: 车辆信息
      */
-    public static Vhl buildVhl(CarInfoVo carInfo, CustomerInfoVo ownerInfo) {
+    public static Vhl buildVhl(CarInfoVo carInfo, CustomerInfoVo ownerInfo,String cQryCdeJQ,String cQryCdeSY) {
         Vhl vhl = new Vhl();
 
         //        //3 车辆信息
@@ -419,6 +419,9 @@ public class Vhl {
         vhl.setCNewMrk("1");
         //轿车
         vhl.setCRegVhlTyp(carInfo.getCartype());
+
+        vhl.setCQryCdeJQ(cQryCdeJQ);
+        vhl.setCQryCdeSY(cQryCdeSY);
         return vhl;
     }
 

+ 47 - 0
src/main/java/com/ydtech/modules/order/controller/ExternalOrderController.java

@@ -0,0 +1,47 @@
+package com.ydtech.modules.order.controller;
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.ins.model.vo.QuoteRespVo;
+import com.ydtech.modules.order.aop.QuoteVerification;
+import com.ydtech.modules.order.components.InsOrdersComponents;
+import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
+import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
+import com.ydtech.modules.order.service.InsAreaCompanyExternalPolicyService;
+import com.ydtech.modules.order.service.InsAreaCompanyService;
+import com.ydtech.modules.order.service.InsOrdersService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "外部订单 api")
+@RestController
+@RequestMapping("/api/externalOrder")
+@RequiredArgsConstructor
+public class ExternalOrderController {
+
+    @Autowired
+    private InsAreaCompanyService insAreaCompanyService;
+
+    @Autowired
+    private InsOrdersComponents insOrdersComponents;
+
+    @Autowired
+    private InsAreaCompanyExternalPolicyService insAreaCompanyExternalPolicyService;
+
+    @PostMapping("/saveSubOrder")
+    @ApiOperation("保存子订单")
+    public HttpResult<QuoteRespVo> saveSubOrder(@RequestBody BaseQuoteVo<AccidentalDrivingVo> quoteVo) {
+        BaseQuoteInfoVo quoteInfo = this.insOrdersComponents.getQuoteInfo(quoteVo.getOrderNo(), quoteVo.getAgreementId());
+        boolean result = this.insAreaCompanyService.saveSubOrder(quoteInfo, quoteVo);
+        return result ? HttpResult.ok("添加订单成功") : HttpResult.error("添加订单失败");
+    }
+
+    @GetMapping("/getPolicyPrint")
+    @ApiOperation("获取保单信息")
+    public HttpResult getPolicyPrint(@RequestParam String subOrderNo) {
+        return HttpResult.ok(this.insAreaCompanyExternalPolicyService.getPolicyByCompanyId(subOrderNo));
+    }
+}

+ 31 - 0
src/main/java/com/ydtech/modules/order/dao/InsAreaCompanyExternalFeeMapper.java

@@ -0,0 +1,31 @@
+package com.ydtech.modules.order.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydtech.modules.admin.model.dto.AllpremiumDto;
+import com.ydtech.modules.admin.model.dto.PremiumReportDto;
+import com.ydtech.modules.admin.model.vo.SubOrder;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsAreaCompanyExternalFee;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.dto.InsAreaCompanyQueryDto;
+import com.ydtech.modules.order.entity.vo.OrderQueryVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * @author Administrator
+ * @description 针对表【ins_area_company(报价渠道)】的数据库操作Mapper
+ * @createDate 2023-01-31 15:51:19
+ * @Entity generator.domain.InsAreaCompany
+ */
+public interface InsAreaCompanyExternalFeeMapper extends BaseMapper<InsAreaCompanyExternalFee> {
+
+
+}
+
+
+
+

+ 20 - 0
src/main/java/com/ydtech/modules/order/dao/InsAreaCompanyExternalPolicyMapper.java

@@ -0,0 +1,20 @@
+package com.ydtech.modules.order.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.order.entity.InsAreaCompanyExternalFee;
+import com.ydtech.modules.order.entity.InsAreaCompanyExternalPolicy;
+
+/**
+ * @author Administrator
+ * @description 针对表【ins_area_company(报价渠道)】的数据库操作Mapper
+ * @createDate 2023-01-31 15:51:19
+ * @Entity generator.domain.InsAreaCompany
+ */
+public interface InsAreaCompanyExternalPolicyMapper extends BaseMapper<InsAreaCompanyExternalPolicy> {
+
+
+}
+
+
+
+

+ 65 - 0
src/main/java/com/ydtech/modules/order/entity/InsAreaCompanyExternalFee.java

@@ -0,0 +1,65 @@
+package com.ydtech.modules.order.entity;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+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.QuoteRespVo;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
+import com.ydtech.utils.StringUtils;
+import com.ydtech.utils.idgen.IdGenerate;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 报价渠道
+ *
+ * @TableName ins_area_company
+ */
+@TableName(value = "ins_area_company_external_fee", autoResultMap = true)
+@Data
+@ApiModel(value = "外部订单费用表")
+@NoArgsConstructor
+@AllArgsConstructor
+public class InsAreaCompanyExternalFee implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = -6827009009645748787L;
+    /**
+     * 主键
+     */
+    @TableId(value = "sub_order_no")
+    private String subOrderNo;
+
+    @TableField(value = "jq_supervise_costs_proportion")
+    private BigDecimal jqSuperviseCostsProportion;
+
+    @TableField(value = "jq_other_costs_proportion")
+    private BigDecimal jqOtherCostsProportion;
+
+    @TableField(value = "sy_supervise_costs_proportion")
+    private BigDecimal sySuperviseCostsProportion;
+
+    @TableField(value = "sy_other_costs_proportion")
+    private BigDecimal syOtherCostsProportion;
+
+    @TableField(value = "no_supervise_costs_proportion")
+    private BigDecimal noSuperviseCostsProportion;
+
+    @TableField(value = "no_other_costs_proportion")
+    private BigDecimal noOtherCostsProportion;
+
+}
+

+ 48 - 0
src/main/java/com/ydtech/modules/order/entity/InsAreaCompanyExternalPolicy.java

@@ -0,0 +1,48 @@
+package com.ydtech.modules.order.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 报价渠道
+ *
+ * @TableName ins_area_company
+ */
+@TableName(value = "ins_area_company_external_policy", autoResultMap = true)
+@Data
+@ApiModel(value = "外部订单保单表")
+@NoArgsConstructor
+@AllArgsConstructor
+public class InsAreaCompanyExternalPolicy implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = -6827009009645748787L;
+    /**
+     * 主键
+     */
+    @TableId(value = "sub_order_no")
+    private String subOrderNo;
+
+    @TableField(value = "jq_policy")
+    private String jqPolicy;
+
+    @TableField(value = "sy_policy")
+    private String syPolicy;
+
+    @TableField(value = "no_policy")
+    private String noPolicy;
+
+    @TableField(value = "jq_sign")
+    private String jqSign;
+
+
+}
+

+ 0 - 1
src/main/java/com/ydtech/modules/order/entity/InsDrivingIntentionInsurance.java

@@ -73,5 +73,4 @@ public class InsDrivingIntentionInsurance implements Serializable {
     @TableField(value = "request_data")
     private String requestData;
 
-
 }

+ 4 - 0
src/main/java/com/ydtech/modules/order/entity/InsOrders.java

@@ -207,6 +207,9 @@ public class InsOrders implements Serializable {
     @TableField(value = "vehicle_and_vessel_tax", typeHandler = FastjsonTypeHandler.class)
     private JSONObject vehicleAndVesselTax;
 
+    @TableField(value = "is_external")
+    private Integer isExternal;
+
     @TableField(exist = false)
     private List<InsAreaCompany> insAreaCompanyList; //子级集合
 
@@ -261,6 +264,7 @@ public class InsOrders implements Serializable {
         this.setOrderstatus(InsOrderStatusEnum.QUOTE_ING.getCode());  // 0 报价 1 待核保 2 已核保待缴费 3 核保退回 4 核保不通过
         this.setFrameno(quoteInfoVo.getCarInfo().getFrameNo());
         this.setLicenseno(quoteInfoVo.getCarInfo().getLicenseNo());
+        this.setIsExternal(quoteInfoVo.getIsExternal() != null ? quoteInfoVo.getIsExternal() : 0);
 
         // 2.1 车辆信息
         this.setCarinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getCarInfo())));

+ 7 - 0
src/main/java/com/ydtech/modules/order/entity/PtlAgreementNonCarProductRule.java

@@ -110,6 +110,13 @@ public class PtlAgreementNonCarProductRule implements Serializable {
     @TableField(value = "third_party_lnsurance_max")
     private String thirdPartyLnsuranceMax;
 
+    /**
+     * 产品code
+     */
+    @ApiModelProperty(value = "产品code")
+    @TableField(value = "product_code")
+    private String productCode;
+
     /**
      * 排序
      */

+ 5 - 0
src/main/java/com/ydtech/modules/order/entity/dto/InsAreaCompanyQueryDto.java

@@ -12,4 +12,9 @@ public class InsAreaCompanyQueryDto extends InsAreaCompany {
 
     private String agreementName;
 
+    /**
+     * 是否外部订单
+     */
+    private Integer isExternal;
+
 }

+ 3 - 0
src/main/java/com/ydtech/modules/order/entity/vo/BaseQuoteInfoVo.java

@@ -24,6 +24,9 @@ public class BaseQuoteInfoVo extends YaQuoteInfoVo {
     @ApiModelProperty("代客录单用-实际业务归属人")
     private String userId;
 
+    @ApiModelProperty("是否外部订单")
+    private Integer isExternal;
+
     public BaseQuoteInfoVo() {
     }
 

+ 57 - 0
src/main/java/com/ydtech/modules/order/entity/vo/BaseQuoteVo.java

@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 @Data
 @ApiModel(value = "报价实体")
 public class BaseQuoteVo<T> {
@@ -52,4 +54,59 @@ public class BaseQuoteVo<T> {
     @ApiModelProperty("协议是否默认1.为是,其他为否")
     private String isTaxSource;
 
+
+    // 24-06-12 新增 外部订单录入字段
+
+    @ApiModelProperty("交强保单号")
+    private String jqpolicyno;
+
+    @ApiModelProperty("交强保单")
+    private String jqPolicy;
+
+    @ApiModelProperty("商业保单")
+    private String syPolicy;
+
+    @ApiModelProperty("非车保单")
+    private String noPolicy;
+
+    @ApiModelProperty("交强电子标志")
+    private String jqSign;
+
+
+    @ApiModelProperty("商业保单号")
+    private String sypolicyno;
+
+    @ApiModelProperty("驾意保单号")
+    private String jypolicyno;
+
+    @ApiModelProperty("交强险费用")
+    private BigDecimal jqpremium;
+
+    @ApiModelProperty("商业险费用")
+    private BigDecimal sypremium;
+
+    @ApiModelProperty("驾意险费用")
+    private BigDecimal jypremium;
+
+    @ApiModelProperty("车船税")
+    private BigDecimal taxamount;
+
+    @ApiModelProperty("交强险手续费比例")
+    private BigDecimal jqSuperviseCostsProportion;
+
+    @ApiModelProperty("商业险手续费比例")
+    private BigDecimal sySuperviseCostsProportion;
+
+    @ApiModelProperty("非车手续费比例")
+    private BigDecimal noSuperviseCostsProportion;
+
+    @ApiModelProperty("交强险其他费用比例")
+    private BigDecimal jqOtherCostsProportion;
+
+    @ApiModelProperty("商业险其他费用比例")
+    private BigDecimal syOtherCostsProportion;
+
+    @ApiModelProperty("非车其他费用比例")
+    private BigDecimal noOtherCostsProportion;
+
 }

+ 11 - 0
src/main/java/com/ydtech/modules/order/entity/vo/InsDrivingIntentionInsuranceVo.java

@@ -3,6 +3,8 @@ package com.ydtech.modules.order.entity.vo;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.ydtech.modules.ins.model.vo.KindInfoVo;
+import com.ydtech.modules.ins.model.vo.RiskInfoVo;
 import com.ydtech.modules.order.entity.InsDrivingIntentionInsurance;
 import com.ydtech.modules.order.entity.InsDrivingIntentionInsuranceSon;
 import io.swagger.annotations.ApiModelProperty;
@@ -68,6 +70,15 @@ public class InsDrivingIntentionInsuranceVo {
     @ApiModelProperty(value = "份数")
     private Integer quantity;
 
+    /**
+     * risk  king
+     */
+    @ApiModelProperty(value = "risks")
+    private List<RiskInfoVo> risks;
+
+    @ApiModelProperty(value = "kinds")
+    private List<KindInfoVo> kinds;
+
     /**
      * children对象
      */

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

@@ -1,8 +1,12 @@
 package com.ydtech.modules.order.entity.vo;
 
+import com.ydtech.modules.ins.model.vo.KindInfoVo;
+import com.ydtech.modules.ins.model.vo.RiskInfoVo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * 驾意险的查询VO
  */
@@ -29,4 +33,10 @@ public class NoCarInsuranceQueryVo {
 
     @ApiModelProperty(value = "规则三者保额")
     private String ruleThirdPartyInsurance;
+
+    @ApiModelProperty(value = "risk")
+    private List<RiskInfoVo> risk;
+
+    @ApiModelProperty(value = "kind")
+    private List<KindInfoVo> kind;
 }

+ 3 - 0
src/main/java/com/ydtech/modules/order/entity/vo/OrderVo.java

@@ -498,4 +498,7 @@ public class OrderVo implements Serializable {
     @ApiModelProperty(value = "api类型")
     private int apiType;
 
+    @ApiModelProperty(value = "是否是外部订单")
+    private Integer isExternal;
+
 }

+ 24 - 0
src/main/java/com/ydtech/modules/order/service/InsAreaCompanyExternalFeeService.java

@@ -0,0 +1,24 @@
+package com.ydtech.modules.order.service;
+
+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.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsAreaCompanyAccidentalDriving;
+import com.ydtech.modules.order.entity.InsAreaCompanyExternalFee;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.dto.InsAreaCompanyQueryDto;
+import com.ydtech.modules.order.entity.vo.*;
+import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
+
+import java.util.List;
+
+/**
+ * @author Administrator
+ * @description 针对表【ins_area_company_external_fee】的数据库操作Service
+ * @createDate 2023-01-31 15:51:19
+ */
+public interface InsAreaCompanyExternalFeeService extends IService<InsAreaCompanyExternalFee> {
+
+
+}

+ 16 - 0
src/main/java/com/ydtech/modules/order/service/InsAreaCompanyExternalPolicyService.java

@@ -0,0 +1,16 @@
+package com.ydtech.modules.order.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.order.entity.InsAreaCompanyExternalFee;
+import com.ydtech.modules.order.entity.InsAreaCompanyExternalPolicy;
+
+/**
+ * @author Administrator
+ * @description 针对表【ins_area_company_external_fee】的数据库操作Service
+ * @createDate 2023-01-31 15:51:19
+ */
+public interface InsAreaCompanyExternalPolicyService extends IService<InsAreaCompanyExternalPolicy> {
+
+    InsAreaCompanyExternalPolicy getPolicyByCompanyId(String companyId);
+
+}

+ 7 - 2
src/main/java/com/ydtech/modules/order/service/InsAreaCompanyService.java

@@ -8,8 +8,7 @@ import com.ydtech.modules.order.entity.InsAreaCompanyAccidentalDriving;
 import com.ydtech.modules.order.entity.InsAreaCompanyPosition;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.dto.InsAreaCompanyQueryDto;
-import com.ydtech.modules.order.entity.vo.OrderQueryVo;
-import com.ydtech.modules.order.entity.vo.OrderVo;
+import com.ydtech.modules.order.entity.vo.*;
 import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
 
 import java.util.List;
@@ -128,4 +127,10 @@ public interface InsAreaCompanyService extends IService<InsAreaCompany> {
      *  @Description:  通过类型查询数据
      */
     InsOrders selectByInFeeOrderNewByType(InsFeeOrderNew insFeeOrderNew, String type);
+
+    /**
+     * 保存子订单信息
+     * @return
+     */
+    boolean saveSubOrder(BaseQuoteInfoVo quoteInfo, BaseQuoteVo<AccidentalDrivingVo> quoteVo);
 }

+ 60 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyExternalFeeServiceImpl.java

@@ -0,0 +1,60 @@
+package com.ydtech.modules.order.service.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.constants.enums.dict.FeeAuditAuditstatus;
+import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.fee.service.FeeRuleSchemeNewService;
+import com.ydtech.modules.fnc.service.InsFeeAuditService;
+import com.ydtech.modules.ins.model.vo.KindInfoVo;
+import com.ydtech.modules.ins.model.vo.RiskInfoVo;
+import com.ydtech.modules.message.constants.MessageTypeConstants;
+import com.ydtech.modules.message.service.MessageSecretaryService;
+import com.ydtech.modules.order.dao.InsAreaCompanyExternalFeeMapper;
+import com.ydtech.modules.order.dao.InsAreaCompanyMapper;
+import com.ydtech.modules.order.dao.InsOrdersMapper;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsAreaCompanyAccidentalDriving;
+import com.ydtech.modules.order.entity.InsAreaCompanyExternalFee;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.dto.InsAreaCompanyQueryDto;
+import com.ydtech.modules.order.entity.vo.*;
+import com.ydtech.modules.order.service.*;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+import com.ydtech.modules.protocol.service.PtlAgreementService;
+import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+import com.ydtech.modules.protocols.entity.vo.AgreementProductQueryVo;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsNewService;
+import com.ydtech.utils.idgen.IdGenerate;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
+
+import java.time.LocalDate;
+import java.time.YearMonth;
+import java.util.*;
+
+/**
+ * @author Administrator
+ * @description 针对表【InsAreaCompanyExternalFee(报价渠道)】的数据库操作Service实现
+ * @createDate 2023-01-31 15:51:19
+ */
+@Service
+public class InsAreaCompanyExternalFeeServiceImpl extends ServiceImpl<InsAreaCompanyExternalFeeMapper, InsAreaCompanyExternalFee>
+        implements InsAreaCompanyExternalFeeService {
+
+
+}
+
+
+
+

+ 33 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyExternalPolicyServiceImpl.java

@@ -0,0 +1,33 @@
+package com.ydtech.modules.order.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.order.dao.InsAreaCompanyExternalFeeMapper;
+import com.ydtech.modules.order.dao.InsAreaCompanyExternalPolicyMapper;
+import com.ydtech.modules.order.entity.InsAreaCompanyExternalFee;
+import com.ydtech.modules.order.entity.InsAreaCompanyExternalPolicy;
+import com.ydtech.modules.order.service.InsAreaCompanyExternalFeeService;
+import com.ydtech.modules.order.service.InsAreaCompanyExternalPolicyService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Administrator
+ * @description 针对表【InsAreaCompanyExternalFee(报价渠道)】的数据库操作Service实现
+ * @createDate 2023-01-31 15:51:19
+ */
+@Service
+public class InsAreaCompanyExternalPolicyServiceImpl extends ServiceImpl<InsAreaCompanyExternalPolicyMapper, InsAreaCompanyExternalPolicy>
+        implements InsAreaCompanyExternalPolicyService {
+
+
+    @Override
+    public InsAreaCompanyExternalPolicy getPolicyByCompanyId(String companyId) {
+        InsAreaCompanyExternalPolicy insAreaCompanyExternalPolicy = baseMapper.selectOne(new LambdaQueryWrapper<InsAreaCompanyExternalPolicy>()
+                .eq(InsAreaCompanyExternalPolicy::getSubOrderNo, companyId));
+        return insAreaCompanyExternalPolicy;
+    }
+}
+
+
+
+

+ 167 - 12
src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.order.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -9,6 +10,7 @@ import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.base.controller.BaseController;
+import com.ydtech.modules.fee.service.FeeRuleSchemeNewService;
 import com.ydtech.modules.fnc.service.InsFeeAuditService;
 import com.ydtech.modules.ins.model.vo.KindInfoVo;
 import com.ydtech.modules.ins.model.vo.RiskInfoVo;
@@ -16,19 +18,16 @@ import com.ydtech.modules.message.constants.MessageTypeConstants;
 import com.ydtech.modules.message.service.MessageSecretaryService;
 import com.ydtech.modules.order.dao.InsAreaCompanyMapper;
 import com.ydtech.modules.order.dao.InsOrdersMapper;
-import com.ydtech.modules.order.entity.InsAreaCompany;
-import com.ydtech.modules.order.entity.InsAreaCompanyAccidentalDriving;
-import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.*;
 import com.ydtech.modules.order.entity.dto.InsAreaCompanyQueryDto;
-import com.ydtech.modules.order.entity.vo.OrderQueryVo;
-import com.ydtech.modules.order.entity.vo.OrderVo;
-import com.ydtech.modules.order.service.InsAreaCompanyAccidentalDrivingService;
-import com.ydtech.modules.order.service.InsAreaCompanyService;
-import com.ydtech.modules.order.service.InsOrdersService;
-import com.ydtech.modules.order.service.InsOrdersTrackService;
+import com.ydtech.modules.order.entity.vo.*;
+import com.ydtech.modules.order.service.*;
 import com.ydtech.modules.protocol.entity.po.PtlAgreement;
 import com.ydtech.modules.protocol.service.PtlAgreementService;
 import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
+import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
+import com.ydtech.modules.protocols.entity.vo.AgreementProductQueryVo;
+import com.ydtech.modules.protocols.service.PtlAgreementProductCostsNewService;
 import com.ydtech.utils.idgen.IdGenerate;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -37,11 +36,11 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.time.YearMonth;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 
 /**
  * @author Administrator
@@ -71,6 +70,18 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
     @Autowired
     private MessageSecretaryService messageSecretaryService;
 
+    @Autowired
+    private FeeRuleSchemeNewService feeRuleSchemeNewService;
+
+    @Autowired
+    private PtlAgreementProductCostsNewService ptlAgreementProductCostsNewService;
+
+    @Autowired
+    private InsAreaCompanyExternalFeeService insAreaCompanyExternalFeeService;
+
+    @Autowired
+    private InsAreaCompanyExternalPolicyService insAreaCompanyExternalPolicyService;
+
     public InsAreaCompanyServiceImpl(@Lazy InsOrdersService insOrdersService, InsOrdersTrackService insOrdersTrackService) {
         this.insOrdersService = insOrdersService;
         this.insOrdersTrackService = insOrdersTrackService;
@@ -372,6 +383,150 @@ public class InsAreaCompanyServiceImpl extends ServiceImpl<InsAreaCompanyMapper,
         params.put("type", type);
         return baseMapper.selectSecondPromotionByNew(params);
     }
+
+    private BaseQuoteVo<AccidentalDrivingVo> checkQuoteVo(BaseQuoteVo<AccidentalDrivingVo> quoteVo){
+        if(quoteVo.getJqpremium() == null){
+            quoteVo.setJqpremium(new BigDecimal(0));
+        }
+        if(quoteVo.getSypremium() == null){
+            quoteVo.setSypremium(new BigDecimal(0));
+        }
+        if(quoteVo.getJypremium() == null){
+            quoteVo.setJypremium(new BigDecimal(0));
+        }
+        if(quoteVo.getTaxamount() == null){
+            quoteVo.setTaxamount(new BigDecimal(0));
+        }
+        if(quoteVo.getJqSuperviseCostsProportion() == null){
+            quoteVo.setJqSuperviseCostsProportion(new BigDecimal(0));
+        }
+        if(quoteVo.getJqOtherCostsProportion() == null){
+            quoteVo.setJqOtherCostsProportion(new BigDecimal(0));
+        }
+        if(quoteVo.getSySuperviseCostsProportion() == null){
+            quoteVo.setSySuperviseCostsProportion(new BigDecimal(0));
+        }
+        if(quoteVo.getSyOtherCostsProportion() == null){
+            quoteVo.setSyOtherCostsProportion(new BigDecimal(0));
+        }
+        if(quoteVo.getNoSuperviseCostsProportion() == null){
+            quoteVo.setNoSuperviseCostsProportion(new BigDecimal(0));
+        }
+        if(quoteVo.getNoOtherCostsProportion() == null){
+            quoteVo.setNoOtherCostsProportion(new BigDecimal(0));
+        }
+        return quoteVo;
+    }
+
+    @Override
+    @Transactional
+    public boolean saveSubOrder(BaseQuoteInfoVo quoteInfo, BaseQuoteVo<AccidentalDrivingVo> quoteVo) {
+        InsOrders insOrders = insOrdersService.getById(quoteInfo.getOrderNo());
+        PtlAgreement byAgreementIdNew = ptlAgreementService.getByAgreementIdNew(quoteVo.getAgreementId());
+        quoteVo = checkQuoteVo(quoteVo);
+
+        //通过协议id 查询费用
+        PtlAgreement ptlAgreement = ptlAgreementService.getById(quoteVo.getAgreementId());
+
+        //查找协议的费用
+        AgreementProductQueryVo agreementProductQueryVo = new AgreementProductQueryVo();
+        List<String> productId = new ArrayList<>();
+        productId.add(insOrders.getProductid());
+        agreementProductQueryVo.setProductCode(productId);
+        agreementProductQueryVo.setIsAudit("1");
+        agreementProductQueryVo.setAgreementId(ptlAgreement.getId());
+
+        List<PtlAgreementProductCostsNew> costsNews = ptlAgreementProductCostsNewService.getByAgreementId(agreementProductQueryVo);
+
+        if(costsNews.isEmpty())
+        {
+            throw new SystemException("没有找到费用信息");
+        }
+
+        InsAreaCompany insAreaCompany = new InsAreaCompany();
+        String subOrderNo = IdGenerate.nextId();
+        insAreaCompany.setId(subOrderNo);
+        insAreaCompany.setOrderno(quoteVo.getOrderNo());
+        insAreaCompany.setAgreementId(quoteVo.getAgreementId());
+        //设置时间
+        insAreaCompany.setJqStartDate(insOrders.getJqstartdate());
+        insAreaCompany.setJqEndDate(insOrders.getJqenddate());
+        insAreaCompany.setSyStartDate(insOrders.getSystartdate());
+        insAreaCompany.setSyEndDate(insOrders.getSyenddate());
+
+        //设置为已承保状态
+        insAreaCompany.setOrderstatus(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode());
+        insAreaCompany.setCompanyId(byAgreementIdNew.getInsuranceCompanyId());
+        insAreaCompany.setInscompany(byAgreementIdNew.getInsuranceCompany());
+        //保单号
+        insAreaCompany.setJqpolicyno(quoteVo.getJqpolicyno());
+        insAreaCompany.setSypolicyno(quoteVo.getSypolicyno());
+        JSONArray noPolicyno = new JSONArray();
+        JSONObject noPolicy = new JSONObject();
+        noPolicy.put("application", quoteVo.getNoPolicy());
+        noPolicyno.add(noPolicyno);
+        insAreaCompany.setCrossInsurance(noPolicyno);
+
+        insAreaCompany.setRiskinfo(insOrders.getRisk());
+        insAreaCompany.setKindinfo(insOrders.getKing());
+
+        //设置保费
+        insAreaCompany.setJqpremium(quoteVo.getJqpremium());
+        insAreaCompany.setSypremium(quoteVo.getSypremium());
+        insAreaCompany.setJypremium(quoteVo.getJypremium());
+        insAreaCompany.setTaxamount(quoteVo.getTaxamount());
+        insAreaCompany.setSumpremium(insAreaCompany.getJqpremium()
+                        .add(insAreaCompany.getSypremium())
+                        .add(insAreaCompany.getJypremium())
+                        .add(insAreaCompany.getTaxamount()));
+
+        insAreaCompany.setOperatorId(BaseController.getUser().getId());
+        insAreaCompany.setOperatorName(BaseController.getUser().getName());
+        insAreaCompany.setOperatorTime(new Date());
+
+        insAreaCompany.setCreatetime(LocalDateTime.now());
+
+        //保存子订单
+        this.insertCompanyAndOrders(insAreaCompany);
+
+        //保存费用比例
+        InsAreaCompanyExternalFee insAreaCompanyExternalFee = new InsAreaCompanyExternalFee();
+        insAreaCompanyExternalFee.setSubOrderNo(subOrderNo);
+        insAreaCompanyExternalFee.setJqSuperviseCostsProportion(quoteVo.getJqSuperviseCostsProportion());
+        insAreaCompanyExternalFee.setJqOtherCostsProportion(quoteVo.getJqOtherCostsProportion());
+        insAreaCompanyExternalFee.setSySuperviseCostsProportion(quoteVo.getSySuperviseCostsProportion());
+        insAreaCompanyExternalFee.setSyOtherCostsProportion(quoteVo.getSyOtherCostsProportion());
+        insAreaCompanyExternalFee.setNoSuperviseCostsProportion(quoteVo.getNoSuperviseCostsProportion());
+        insAreaCompanyExternalFee.setNoOtherCostsProportion(quoteVo.getNoOtherCostsProportion());
+        this.insAreaCompanyExternalFeeService.save(insAreaCompanyExternalFee);
+
+
+        //保存保单
+        InsAreaCompanyExternalPolicy insAreaCompanyExternalPolicy = new InsAreaCompanyExternalPolicy();
+        insAreaCompanyExternalPolicy.setSubOrderNo(subOrderNo);
+        insAreaCompanyExternalPolicy.setJqPolicy(quoteVo.getJqPolicy());
+        insAreaCompanyExternalPolicy.setSyPolicy(quoteVo.getSyPolicy());
+        insAreaCompanyExternalPolicy.setNoPolicy(quoteVo.getNoPolicy());
+        insAreaCompanyExternalPolicy.setJqSign(quoteVo.getJqSign());
+        this.insAreaCompanyExternalPolicyService.save(insAreaCompanyExternalPolicy);
+
+
+
+        costsNews.get(0).setJqCarCostsProportion(quoteVo.getJqSuperviseCostsProportion().toString());
+        costsNews.get(0).setJqCarOtherCostsProportion(quoteVo.getJqOtherCostsProportion().toString());
+        costsNews.get(0).setSyCarCostsProportion(quoteVo.getSySuperviseCostsProportion().toString());
+        costsNews.get(0).setSyCarOtherCostsProportion(quoteVo.getSyOtherCostsProportion().toString());
+        costsNews.get(0).setNoCarCostsProportion(quoteVo.getNoSuperviseCostsProportion().toString());
+        costsNews.get(0).setNoCarOtherCostsProportion(quoteVo.getNoOtherCostsProportion().toString());
+
+        //计算费用
+        feeRuleSchemeNewService.calcCostsExternal(costsNews.get(0),insAreaCompany);
+
+        //审核表数据插入
+        insFeeAuditService.saveDefaultInsFeeAuditAndHistory(insAreaCompany.getOrderno(), insAreaCompany.getId(), FeeAuditAuditstatus.UNREVICEWED.getCode());
+
+        return true;
+    }
 }
 
 

+ 4 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsDrivingIntentionInsuranceServiceImpl.java

@@ -2,6 +2,8 @@ package com.ydtech.modules.order.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.constants.enums.InsuranceRisk;
+import com.ydtech.constants.enums.dict.agreement.ProductsType;
 import com.ydtech.modules.order.dao.InsAreaCompanyMapper;
 import com.ydtech.modules.order.dao.InsDrivingIntentionInsuranceMapper;
 import com.ydtech.modules.order.dao.InsDrivingIntentionInsuranceSonMapper;
@@ -98,6 +100,7 @@ public class InsDrivingIntentionInsuranceServiceImpl extends ServiceImpl<InsDriv
     @Override
     public List<InsDrivingIntentionInsuranceVo> getInsDrivingIntentionInsuranceRule(NoCarInsuranceQueryVo insuranceVo) {
         LambdaQueryWrapper<PtlAgreementNonCarProductRule> query = new LambdaQueryWrapper<PtlAgreementNonCarProductRule>();
+        ProductsType productType = InsuranceRisk.determineInsuranceInformation(insuranceVo.getKind(), insuranceVo.getRisk());
         if(insuranceVo.getCompanyCode() != null){
             List<PtlAgreement> byCompanyCode = ptlAgreementService.getByCompanyCode(insuranceVo.getCompanyCode());
             List<String> collect = byCompanyCode.stream().map(x -> x.getId()).collect(Collectors.toList());
@@ -111,6 +114,7 @@ public class InsDrivingIntentionInsuranceServiceImpl extends ServiceImpl<InsDriv
         query.le(PtlAgreementNonCarProductRule::getSeatNumMin, insuranceVo.getRuleSeatNum());
         query.ge(PtlAgreementNonCarProductRule::getSeatNumMax, insuranceVo.getRuleSeatNum());
         query.eq(PtlAgreementNonCarProductRule::getUseNature, insuranceVo.getRuleUseNature());
+        query.eq(PtlAgreementNonCarProductRule::getProductCode, productType.getCode());
         if(insuranceVo.getRuleThirdPartyInsurance() != null) {
             query.ge(PtlAgreementNonCarProductRule::getThirdPartyLnsuranceMin, insuranceVo.getRuleThirdPartyInsurance());
             query.le(PtlAgreementNonCarProductRule::getThirdPartyLnsuranceMax, insuranceVo.getRuleThirdPartyInsurance());

+ 5 - 3
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -285,9 +285,11 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                 daikeFlag = true;
             }
         }
-        //添加后线人员不能报价的验证
-        if(!"admin".equals(realUserId) && !realUserId.contains("M")){
-            throw new SystemException("后线人员不允许报价!!");
+        if(quoteInfoVo.getIsExternal() == null) {
+            //添加后线人员不能报价的验证
+            if (!"admin".equals(realUserId) && !realUserId.contains("M")) {
+                throw new SystemException("后线人员不允许报价!!");
+            }
         }
         // 1. 验证订单参数
         orderComponents.checkEmpty(quoteInfoVo);

+ 5 - 1
src/main/java/com/ydtech/modules/order/service/impl/PtlAgreementNonCarProductRuleServiceImpl.java

@@ -43,7 +43,11 @@ public class PtlAgreementNonCarProductRuleServiceImpl extends ServiceImpl<PtlAgr
             wrapper.eq(PtlAgreementNonCarProductRule::getId, drivingInsuranceQueryVo.getId());
         }
         if(drivingInsuranceQueryVo.getAgreementId() != null){
-            wrapper.eq(PtlAgreementNonCarProductRule::getAgreementId, drivingInsuranceQueryVo.getAgreementId());
+            //查找保险公司所有的协议非车信息
+            PtlAgreement byAgreementIdNew = ptlAgreementService.getByAgreementIdNew(drivingInsuranceQueryVo.getAgreementId());
+            List<PtlAgreement> byCompanyCode = ptlAgreementService.getByCompanyCode(byAgreementIdNew.getInsuranceCompanyId());
+            List<String> agreementIds = byCompanyCode.stream().map(PtlAgreement::getId).collect(Collectors.toList());
+            wrapper.in(PtlAgreementNonCarProductRule::getAgreementId, agreementIds);
         }
         if(drivingInsuranceQueryVo.getRuleStartTime() != null && drivingInsuranceQueryVo.getRuleEndTime() != null){
             wrapper.ge(PtlAgreementNonCarProductRule::getRuleStartDate, drivingInsuranceQueryVo.getRuleStartTime());

+ 48 - 10
src/main/java/com/ydtech/modules/order/service/impl/YongchengOrderApiServiceImpl.java

@@ -102,6 +102,12 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
 
     private static final Logger log = LoggerFactory.getLogger("alltrust");
 
+    private String REDIS_YONGCHENG_QUERY_CODE_JQ = "REDIS_YONGCHENG_QUERY_CODE_JQ:";
+
+    private String REDIS_YONGCHENG_QUERY_CODE_SY = "REDIS_YONGCHENG_QUERY_CODE_SY:";
+
+    private Integer REDIS_YONGCHENG_QUERY_CODE_EXPIRE = 7;
+
     @Value("${upload.file.path}")
     private String uploadFilePath;
 
@@ -228,8 +234,12 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
         gainVehicleModel(ycConfigureParameters, carInfo, coreModelsVo);
         AccidentalDrivingVo adVo = quoteVo.getAccidentalDrivingVo();
 
+        //获取查询码
+        String cQryCdeJQ = redisTemplate.opsForValue().get(REDIS_YONGCHENG_QUERY_CODE_JQ + carInfo.getVinNo() + carInfo.getLicenseNo());
+        String cQryCdeSY = redisTemplate.opsForValue().get(REDIS_YONGCHENG_QUERY_CODE_SY + carInfo.getVinNo() + carInfo.getLicenseNo());
+
         //组装参数
-        Ruote m = Ruote.buildQuoteParam(yaQuoteInfoVo, ycConfigureParameters, adVo);
+        Ruote m = Ruote.buildQuoteParam(yaQuoteInfoVo, ycConfigureParameters, adVo,cQryCdeJQ,cQryCdeSY);
         //构造地区
         buildRegion(m, yaQuoteInfoVo);
         return m;
@@ -243,15 +253,27 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
      * @return
      * @throws JsonProcessingException
      */
-    private RuoteResponse getResponse(Ruote m, String vinNo, List<String> requestInfoList) throws JsonProcessingException {
+    private RuoteResponse getResponse(Ruote m, String vinNo, List<String> requestInfoList,BaseQuoteInfoVo yaQuoteInfoVo) throws JsonProcessingException {
         boolean boo;
         RuoteResponse rr = yongchengRequestApiComponents.newPremiumXnyCalculation(m);
+        //存储 报价返回的查询码  交强和商业
+        if(rr.getVhl() != null) {
+            redisTemplate.opsForValue().set(REDIS_YONGCHENG_QUERY_CODE_JQ + yaQuoteInfoVo.getCarInfo().getVinNo() + yaQuoteInfoVo.getCarInfo().getLicenseNo(),
+                    rr.getVhl().getCQryCdeJQ(), REDIS_YONGCHENG_QUERY_CODE_EXPIRE, TimeUnit.DAYS);
+            redisTemplate.opsForValue().set(REDIS_YONGCHENG_QUERY_CODE_SY + yaQuoteInfoVo.getCarInfo().getVinNo() + yaQuoteInfoVo.getCarInfo().getLicenseNo(),
+                    rr.getVhl().getCQryCdeSY(), REDIS_YONGCHENG_QUERY_CODE_EXPIRE, TimeUnit.DAYS);
+        }
+
+        //重新设置 请求的查询码
+        //读取缓存的查询码
+        String cQryCdeJQ = redisTemplate.opsForValue().get(REDIS_YONGCHENG_QUERY_CODE_JQ + yaQuoteInfoVo.getCarInfo().getVinNo() + yaQuoteInfoVo.getCarInfo().getLicenseNo());
+        String cQryCdeSY = redisTemplate.opsForValue().get(REDIS_YONGCHENG_QUERY_CODE_SY + yaQuoteInfoVo.getCarInfo().getVinNo() + yaQuoteInfoVo.getCarInfo().getLicenseNo());
         //交强
         m.getRequestLabel().getCondition().getVhl().setCCheckCodeJQ("");
-        m.getRequestLabel().getCondition().getVhl().setCQryCdeJQ("");
+        m.getRequestLabel().getCondition().getVhl().setCQryCdeJQ(cQryCdeJQ);
         //商业
         m.getRequestLabel().getCondition().getVhl().setCCheckCodeSY("");
-        m.getRequestLabel().getCondition().getVhl().setCQryCdeSY("");
+        m.getRequestLabel().getCondition().getVhl().setCQryCdeSY(cQryCdeSY);
 
         if ("009999".equals(rr.getHead().getErrorCode()) && (rr.getHead().getErrorMessage().contains("车主") || rr.getHead().getErrorMessage().contains("投保人") || rr.getHead().getErrorMessage().contains("被保人"))) {
             return rr;
@@ -264,8 +286,16 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
         if (rr.getHead().getErrorCode().equals("009999") && errorMsg.contains("重复投保")) {
             // 商业险
             boolean appSYFlag = "Y".equals(m.getRequestLabel().getCondition().getBase().getAppSYFlag());
+
             // 交强险
             boolean cAppJqFlag = "Y".equals(m.getRequestLabel().getCondition().getBase().getCAppJqFlag());
+            if(rr.getVhl() != null) {
+                m.getRequestLabel().getCondition().getVhl().setCQryCdeJQ(rr.getVhl().getCQryCdeJQ());
+                m.getRequestLabel().getCondition().getVhl().setCQryCdeSY(rr.getVhl().getCQryCdeSY());
+            }else{
+                m.getRequestLabel().getCondition().getVhl().setCQryCdeJQ("");
+                m.getRequestLabel().getCondition().getVhl().setCQryCdeSY("");
+            }
 
             if (errorMsg.contains("机动车综合商业保险")) {
                 cAppJqFlag = false;
@@ -280,14 +310,14 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
             boo = ciRepetitionInsure(rr, m, requestInfoList, cAppJqFlag);
             if (!boo) {
                 InsuranceLog.infoLog(InsuranceEnum.AICS.getPinyin(), "\n\n---------> {} - 交强险重复投保处理", vinNo);
-                return this.getResponse(m, vinNo, requestInfoList);
+                return this.getResponse(m, vinNo, requestInfoList,yaQuoteInfoVo);
             }
 
             //1、商业险重复投保处理
             boo = commerceRepetitionInsure(rr, m, requestInfoList, appSYFlag);
             if (!boo) {
                 InsuranceLog.infoLog(InsuranceEnum.AICS.getPinyin(), "\n\n---------> {} - 商业险重复投保处理", vinNo);
-                return this.getResponse(m, vinNo, requestInfoList);
+                return this.getResponse(m, vinNo, requestInfoList,yaQuoteInfoVo);
             }
 
         }
@@ -296,21 +326,21 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
         boo = reinsurance(rr, m);
         if (!boo) {
             InsuranceLog.infoLog(InsuranceEnum.AICS.getPinyin(), "\n\n---------> {} - 转保处理", vinNo);
-            return this.getResponse(m, vinNo, requestInfoList);
+            return this.getResponse(m, vinNo, requestInfoList,yaQuoteInfoVo);
         }
 
         //3、商业险日期处理
         boo = biRepetitionInsure(rr, m, requestInfoList);
         if (!boo) {
             InsuranceLog.infoLog(InsuranceEnum.AICS.getPinyin(), "\n\n---------> {} - 商业险日期处理", vinNo);
-            return this.getResponse(m, vinNo, requestInfoList);
+            return this.getResponse(m, vinNo, requestInfoList,yaQuoteInfoVo);
         }
 
         // 转保验证码
         boo = reinsuranceCodeError(rr, m);
         if (!boo) {
             InsuranceLog.infoLog(InsuranceEnum.AICS.getPinyin(), "\n\n---------> {} - 转保处理", vinNo);
-            return this.getResponse(m, vinNo, requestInfoList);
+            return this.getResponse(m, vinNo, requestInfoList,yaQuoteInfoVo);
         }
         return rr;
     }
@@ -360,7 +390,7 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
         Ruote m = this.builderParams(quoteVo, yaQuoteInfoVo, coreModelsVo);
 
         //递归报价
-        RuoteResponse rr = this.getResponse(m, yaQuoteInfoVo.getCarInfo().getVinNo(), requestInfoList);
+        RuoteResponse rr = this.getResponse(m, yaQuoteInfoVo.getCarInfo().getVinNo(), requestInfoList, yaQuoteInfoVo);
 
         //错误信息
         StringBuilder errorInfo = this.getErrorInfo(rr);
@@ -391,6 +421,14 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
         //添加调用费用匹配功能
 //        feeRuleSchemeService.dealFeeOrderInfo(yaQuoteInfoVo, quoteRespVo, quoteVo.getAgreementId(), iac.getId());
 
+        //存储 报价返回的查询码  交强和商业
+        if(rr.getVhl() != null) {
+            redisTemplate.opsForValue().set(REDIS_YONGCHENG_QUERY_CODE_JQ + yaQuoteInfoVo.getCarInfo().getVinNo() + yaQuoteInfoVo.getCarInfo().getLicenseNo(),
+                    rr.getVhl().getCQryCdeJQ(), REDIS_YONGCHENG_QUERY_CODE_EXPIRE, TimeUnit.DAYS);
+            redisTemplate.opsForValue().set(REDIS_YONGCHENG_QUERY_CODE_SY + yaQuoteInfoVo.getCarInfo().getVinNo() + yaQuoteInfoVo.getCarInfo().getLicenseNo(),
+                    rr.getVhl().getCQryCdeSY(), REDIS_YONGCHENG_QUERY_CODE_EXPIRE, TimeUnit.DAYS);
+        }
+
         return HttpResult.ok("报价成功", quoteRespVo);
 
     }

+ 10 - 0
src/main/java/com/ydtech/modules/protocol/controller/TaxSourceController.java

@@ -9,6 +9,7 @@ import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.esm.model.EsmInsCompany;
 import com.ydtech.modules.protocol.entity.vo.TaxSourceVo;
 import com.ydtech.modules.protocol.service.ITaxSourceService;
+import com.ydtech.modules.protocol.service.PtlAgreementService;
 import com.ydtech.modules.protocol.service.PtlAreaLicenseService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -25,6 +26,9 @@ public class TaxSourceController extends BaseController {
     @Autowired
     private ITaxSourceService taxSourceService;
 
+    @Autowired
+    private PtlAgreementService ptlAgreementService;
+
 
     @GetMapping("/license")
     @ApiOperation("车牌信息")
@@ -68,6 +72,12 @@ public class TaxSourceController extends BaseController {
         return HttpResult.ok(taxSourceService.getAllAgreement(deptId,userId));
     }
 
+    @GetMapping("/getExternalAgreement")
+    @ApiOperation("获取外部协议")
+    public HttpResult getExternalAgreement(){
+        return HttpResult.ok(ptlAgreementService.getExternalAgreement());
+    }
+
     @PostMapping("/saveTaxSource")
     @ApiOperation("保存税源")
     public HttpResult saveTaxSource(@RequestBody TaxSourceVo taxSourceVo) {

+ 3 - 0
src/main/java/com/ydtech/modules/protocol/dao/PtlAgreementMapper.java

@@ -19,6 +19,9 @@ public interface PtlAgreementMapper extends BaseMapper<PtlAgreement> {
 
     List<PtlAgreementInsCompanyDto> getAgreementCompany(@Param("localDate") LocalDate localDate, @Param("deptId") String deptId);
 
+    List<PtlAgreementInsCompanyDto> getAgreementCompanyExternal(@Param("localDate") LocalDate localDate, @Param("deptId") String deptId);
+
+
     PtlAgreementInsCompanyDto getAgreementCompanyByCompanyId(@Param("localDate") LocalDate localDate, @Param("deptId") String deptId,@Param("companyId") String companyId);
 
     PtlAgreement getByAgreementIdNew(String agreementId);

+ 3 - 0
src/main/java/com/ydtech/modules/protocol/entity/dto/PtlAgreementSaveDto.java

@@ -76,4 +76,7 @@ public class PtlAgreementSaveDto implements Serializable {
 
     @ApiModelProperty("内部机构id")
     private String deptId;
+
+    @ApiModelProperty("外部订单协议")
+    private Integer isExternal;
 }

+ 6 - 0
src/main/java/com/ydtech/modules/protocol/entity/po/PtlAgreement.java

@@ -215,6 +215,12 @@ public class PtlAgreement implements Serializable {
     @TableField(value = "update_time")
     private LocalDateTime updateTime;
 
+    /**
+     * 是否是外部订单费用
+     */
+    @TableField(value = "is_external")
+    private Integer isExternal;
+
     /**
      * 审核类型
      */

+ 10 - 0
src/main/java/com/ydtech/modules/protocol/service/PtlAgreementService.java

@@ -30,6 +30,13 @@ public interface PtlAgreementService extends IService<PtlAgreement> {
      */
     List<PtlAgreementInsCompanyDto> getAgreementCompany(String deptId);
 
+    /**
+     * 获取可以报价的 可录入外部订单的协议
+     * @param deptId
+     * @return
+     */
+    List<PtlAgreementInsCompanyDto> getAgreementCompanyExternal(String deptId);
+
     PtlAgreementInsCompanyDto getAgreementCompany(String deptId,String companyId);
 
 
@@ -229,4 +236,7 @@ public interface PtlAgreementService extends IService<PtlAgreement> {
 
     PtlAgreement selectAgreeId(HashMap<String, Object> params);
 
+
+    List<PtlAgreementInsCompanyDto> getExternalAgreement();
+
 }

+ 64 - 1
src/main/java/com/ydtech/modules/protocol/service/impl/PtlAgreementServiceImpl.java

@@ -140,6 +140,35 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         return agreementCompany;
     }
 
+    @Override
+    public List<PtlAgreementInsCompanyDto> getAgreementCompanyExternal(String deptId) {
+        LocalDate localDate = LocalDate.now();
+        List<PtlAgreementInsCompanyDto> agreementCompany = baseMapper.getAgreementCompanyExternal(localDate, deptId);
+
+        for (PtlAgreementInsCompanyDto ptlAgreementInsCompanyDto : agreementCompany) {
+            List<PtlAgreementDto> agreement = ptlAgreementInsCompanyDto.getAgreement();
+            for (PtlAgreementDto ptlAgreementDto : agreement) {
+                if (ptlAgreementDto.getProductsCode() != null && !ptlAgreementDto.getProductsCode().equals("")) {
+                    String[] split = ptlAgreementDto.getProductsCode().split(",");
+                    ptlAgreementDto.setProductsCodes(split);
+                }
+            }
+        }
+
+        List<String> agreementIdList = agreementCompany.stream()
+                .flatMap(x -> x.getAgreement().stream().map(PtlAgreementDto::getId))
+                .collect(Collectors.toList());
+
+        /*Map<String, List<String>> licenseNoList = ptlAgreementUndwrtRulesService.getByLicenseNo(agreementIdList);
+
+        agreementCompany.forEach(
+                x -> x.getAgreement().forEach(a -> a.setLicenseNo(licenseNoList.get(a.getId())))
+        );*/
+
+        return agreementCompany;
+    }
+
+
     @Override
     public PtlAgreementInsCompanyDto getAgreementCompany(String deptId, String companyId) {
         LocalDate localDate = LocalDate.now();
@@ -559,7 +588,7 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         BeanUtils.copyProperties(agreementSaveDto, ptlAgreement);
         EsmInsCompany esmInsCompany = proxyObject.verifyLogin(ptlAgreement, agreementSaveDto, attribution,
                 "1".equals(ptlAgreement.getValidStatus()));
-
+        ptlAgreement.setIsExternal(agreementSaveDto.getIsExternal());
         ptlAgreement.setProductsCode(agreementSaveDto.getProductsCode());
         ptlAgreement.setModifiedBy(userName);
         ptlAgreement.setModifiedName(BaseController.getUser().getName());
@@ -786,5 +815,39 @@ public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, Ptl
         return baseMapper.selectAgreeId(params);
     }
 
+    @Override
+    public List<PtlAgreementInsCompanyDto> getExternalAgreement() {
+        LocalDate localDate = LocalDate.now();
+        List<PtlAgreement> list = this.list(new LambdaQueryWrapper<PtlAgreement>()
+                .eq(PtlAgreement::getIsExternal, "1")
+                .eq(PtlAgreement::getValidStatus, "1"));
+
+        List<String> agreementCompanys = list.stream().map(PtlAgreement::getInsuranceCompanyId).collect(Collectors.toList());
+
+        List<EsmInsCompany> companyList = esmInsCompanyService.list(new LambdaQueryWrapper<EsmInsCompany>().in(EsmInsCompany::getId, agreementCompanys));
+
+        List<PtlAgreementInsCompanyDto> result = new ArrayList<>();
+
+
+        companyList.forEach(item->{
+            PtlAgreementInsCompanyDto ptlAgreementInsCompanyDto = new PtlAgreementInsCompanyDto();
+            ptlAgreementInsCompanyDto.setId(item.getId());
+            ptlAgreementInsCompanyDto.setCnName(item.getCnName());
+            ptlAgreementInsCompanyDto.setLogo(item.getLogo());
+            ptlAgreementInsCompanyDto.setName(item.getName());
+            ptlAgreementInsCompanyDto.setNamesimple(item.getNamesimple());
+            List<PtlAgreement> collect = list.stream().filter(x -> x.getInsuranceCompanyId().equals(item.getId())).collect(Collectors.toList());
+            List<PtlAgreementDto> agreementDtos = new ArrayList<>();
+            collect.forEach(x->{
+                PtlAgreementDto ptlAgreementDto = new PtlAgreementDto();
+                BeanUtils.copyProperties(x,ptlAgreementDto);
+                agreementDtos.add(ptlAgreementDto);
+            });
+            ptlAgreementInsCompanyDto.setAgreement(agreementDtos);
+            result.add(ptlAgreementInsCompanyDto);
+        });
+        return result;
+    }
+
 
 }

+ 3 - 0
src/main/java/com/ydtech/modules/protocols/entity/vo/AgreementProductQueryVo.java

@@ -46,6 +46,9 @@ public class AgreementProductQueryVo extends PageRequest {
     @ApiModelProperty(value = "费用描述")
     private String costsDescription;
 
+    @ApiModelProperty(value = "是否是外部协议")
+    private Integer isExternal;
+
     @ApiModelProperty("操作人")
     private String operator;
 

+ 104 - 101
src/main/java/com/ydtech/modules/protocols/service/impl/PtlAgreementProductCostsNewServiceImpl.java

@@ -198,7 +198,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
 
         //产品code
         if (agreementProductQueryVo.getProductCode() != null && !agreementProductQueryVo.getProductCode().isEmpty()) {
-            ptlAgreementProductCostsNewLambdaQueryWrapper.eq(PtlAgreementProductCostsNew::getProductId, agreementProductQueryVo.getProductCode());
+            ptlAgreementProductCostsNewLambdaQueryWrapper.in(PtlAgreementProductCostsNew::getProductId, agreementProductQueryVo.getProductCode());
         }
 
         //费用时间
@@ -465,105 +465,108 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
 //                }
 //            }
 //        }
-        try {
-            for (int i = 0; i < agreementProductCosts.getProductId().size(); i++) {
-                PtlAgreementProductCostsNew ptlAgreementProductCostsNew = new PtlAgreementProductCostsNew();
-                BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsNew);
-                ptlAgreementProductCostsNew.setId(null);
-                //设置默认优先级为1
-                if (ptlAgreementProductCostsNew.getPriorityLevel() == null) {
-                    ptlAgreementProductCostsNew.setPriorityLevel(1);
+        for (int i = 0; i < agreementProductCosts.getProductId().size(); i++) {
+            // 外部订单的检测  每个产品只可有一个费用
+            List<PtlAgreementProductCostsNew> list = ptlAgreementProductCostsNewService.list(new LambdaQueryWrapper<PtlAgreementProductCostsNew>()
+                    .eq(PtlAgreementProductCostsNew::getProductId, agreementProductCosts.getProductId().get(i))
+                    .eq(PtlAgreementProductCostsNew::getAgreementId, agreementProductCosts.getAgreementId())
+                    .eq(PtlAgreementProductCostsNew::getIsAudit, 1));
+            if (list.size() > 0) {
+                throw new SystemException(agreementProductCosts.getProductName().get(i) + "产品费用已存在,请勿重复添加!");
+            }
+            PtlAgreementProductCostsNew ptlAgreementProductCostsNew = new PtlAgreementProductCostsNew();
+            BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsNew);
+            ptlAgreementProductCostsNew.setId(null);
+            //设置默认优先级为1
+            if (ptlAgreementProductCostsNew.getPriorityLevel() == null) {
+                ptlAgreementProductCostsNew.setPriorityLevel(1);
+            }
+            ptlAgreementProductCostsNew.setIsAudit(0);
+            ptlAgreementProductCostsNew.setProductId(agreementProductCosts.getProductId().get(i));
+            ptlAgreementProductCostsNew.setProductName(agreementProductCosts.getProductName().get(i));
+            ptlAgreementProductCostsNew.setCreateTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            ptlAgreementProductCostsNew.setCreateBy(BaseController.getUser().getId());
+            ptlAgreementProductCostsNew.blank();
+            int insert = baseMapper.insert(ptlAgreementProductCostsNew);
+
+            //添加费用出口信息
+            PtlAgreementProductCostsExport ptlAgreementProductCostsExport = new PtlAgreementProductCostsExport();
+            BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsExport);
+            ptlAgreementProductCostsExport.setCostsId(ptlAgreementProductCostsNew.getId());
+            ptlAgreementProductCostsExport.setId(null);
+            ptlAgreementProductCostsExport.blank();
+            ptlAgreementProductCostsExportService.save(ptlAgreementProductCostsExport);
+            //保存产品费用历史记录
+            PtlAgreementProductCostsNewHistory ptlAgreementProductCostsNewHistory = new PtlAgreementProductCostsNewHistory();
+            BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsNewHistory);
+            //添加费用ID
+            ptlAgreementProductCostsNewHistory.setId(IdGenerate.nextId());
+            ptlAgreementProductCostsNewHistory.setCostsId(ptlAgreementProductCostsNew.getId());
+            //生成批次ID
+            String uuid = IdGenerate.nextId();
+            ptlAgreementProductCostsNewHistory.setPriorityLevel(ptlAgreementProductCostsNew.getPriorityLevel());
+            ptlAgreementProductCostsNewHistory.setBatch(uuid);
+            ptlAgreementProductCostsNewHistory.setOperatorType("add");
+            ptlAgreementProductCostsNewHistory.setProductId(agreementProductCosts.getProductId().get(i));
+            ptlAgreementProductCostsNewHistory.setProductName(agreementProductCosts.getProductName().get(i));
+            ptlAgreementProductCostsNewHistory.setModifier(BaseController.getUser().getId());
+            ptlAgreementProductCostsNewHistory.setOperatorTime(LocalDateTime.now());
+            ptlAgreementProductCostsNewHistoryService.save(ptlAgreementProductCostsNewHistory);
+            //创建产品费用因子历史记录容器
+            List<PtlAgreementProductCostsAttrLinkHistory> costsAttrLinkHistories = new ArrayList<>();
+            //遍历费用属性
+            List<PtlAgreementProductCostsAttrLink> costsAttrLinks = agreementProductCosts.getCostsAttrLinks();
+            List<PtlAgreementProductCostsAttrLink> costsAttrLink = new ArrayList<>();
+            List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
+            costsAttrLinks.forEach(x -> {
+                PtlAgreementProductCostsAttrLinkHistory costsAttrLinkHistory = new PtlAgreementProductCostsAttrLinkHistory();
+                //处理中文逗号
+                if (x.getMin() != null && x.getMin().contains(",")) {
+                    x.setMin(x.getMin().replace(",", ","));
                 }
-                ptlAgreementProductCostsNew.setIsAudit(0);
-                ptlAgreementProductCostsNew.setProductId(agreementProductCosts.getProductId().get(i));
-                ptlAgreementProductCostsNew.setProductName(agreementProductCosts.getProductName().get(i));
-                ptlAgreementProductCostsNew.setCreateTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-                ptlAgreementProductCostsNew.setCreateBy(BaseController.getUser().getId());
-                ptlAgreementProductCostsNew.blank();
-                int insert = baseMapper.insert(ptlAgreementProductCostsNew);
-
-                //添加费用出口信息
-                PtlAgreementProductCostsExport ptlAgreementProductCostsExport = new PtlAgreementProductCostsExport();
-                BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsExport);
-                ptlAgreementProductCostsExport.setCostsId(ptlAgreementProductCostsNew.getId());
-                ptlAgreementProductCostsExport.setId(null);
-                ptlAgreementProductCostsExport.blank();
-                ptlAgreementProductCostsExportService.save(ptlAgreementProductCostsExport);
-                //保存产品费用历史记录
-                PtlAgreementProductCostsNewHistory ptlAgreementProductCostsNewHistory = new PtlAgreementProductCostsNewHistory();
-                BeanUtils.copyProperties(agreementProductCosts, ptlAgreementProductCostsNewHistory);
-                //添加费用ID
-                ptlAgreementProductCostsNewHistory.setId(IdGenerate.nextId());
-                ptlAgreementProductCostsNewHistory.setCostsId(ptlAgreementProductCostsNew.getId());
-                //生成批次ID
-                String uuid = IdGenerate.nextId();
-                ptlAgreementProductCostsNewHistory.setPriorityLevel(ptlAgreementProductCostsNew.getPriorityLevel());
-                ptlAgreementProductCostsNewHistory.setBatch(uuid);
-                ptlAgreementProductCostsNewHistory.setOperatorType("add");
-                ptlAgreementProductCostsNewHistory.setProductId(agreementProductCosts.getProductId().get(i));
-                ptlAgreementProductCostsNewHistory.setProductName(agreementProductCosts.getProductName().get(i));
-                ptlAgreementProductCostsNewHistory.setModifier(BaseController.getUser().getId());
-                ptlAgreementProductCostsNewHistory.setOperatorTime(LocalDateTime.now());
-                ptlAgreementProductCostsNewHistoryService.save(ptlAgreementProductCostsNewHistory);
-                //创建产品费用因子历史记录容器
-                List<PtlAgreementProductCostsAttrLinkHistory> costsAttrLinkHistories = new ArrayList<>();
-                //遍历费用属性
-                List<PtlAgreementProductCostsAttrLink> costsAttrLinks = agreementProductCosts.getCostsAttrLinks();
-                List<PtlAgreementProductCostsAttrLink> costsAttrLink = new ArrayList<>();
-                List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
-                costsAttrLinks.forEach(x -> {
-                    PtlAgreementProductCostsAttrLinkHistory costsAttrLinkHistory = new PtlAgreementProductCostsAttrLinkHistory();
-                    //处理中文逗号
-                    if (x.getMin() != null && x.getMin().contains(",")) {
-                        x.setMin(x.getMin().replace(",", ","));
-                    }
-                    PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream().filter(y -> y.getAttrCode().equals(x.getAttrCode())).findFirst().get();
+                PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = undwrtRulesAttrList.stream().filter(y -> y.getAttrCode().equals(x.getAttrCode())).findFirst().get();
 
-                    //单独处理车牌号
-                    if ("LicenseNo".equals(x.getAttrCode()) && (x.getMin() != null && !x.getMin().equals(""))) {
+                //单独处理车牌号
+                if ("LicenseNo".equals(x.getAttrCode()) && (x.getMin() != null && !x.getMin().equals(""))) {
 //                x.setOperator(x.getDictLabal().getJSONObject(0).getString("parentNumber"));
-                        x.setOperator("0");
-                        x.setCostsId(ptlAgreementProductCostsNew.getId());
-                        x.setId("0");
-                        costsAttrLink.add(x);
-                        BeanUtils.copyProperties(x, costsAttrLinkHistory);
-                        //设置产品费用因子历史记录
-                        costsAttrLinkHistory.setId(null);
-                        costsAttrLinkHistory.setBatch(uuid);
-                        costsAttrLinkHistory.setOperatorType("add");
-                        costsAttrLinkHistory.setModifier(BaseController.getUser().getId());
-                        costsAttrLinkHistory.setOperatorTime(LocalDateTime.now());
-                        costsAttrLinkHistories.add(costsAttrLinkHistory);
-                    } else {
-                        if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio") || (!"0".equals(x.getMin()) && null != x.getMin()) || (!"0".equals(x.getMax()) && null != x.getMax())) {
-                            if (x.getMin() != null || x.getMax() != null) {
-                                x.setCostsId(ptlAgreementProductCostsNew.getId());
-                                x.setId("0");
-                                costsAttrLink.add(x);
-                                BeanUtils.copyProperties(x, costsAttrLinkHistory);
-                                //设置产品费用因子历史记录
-                                costsAttrLinkHistory.setId(null);
-                                costsAttrLinkHistory.setBatch(uuid);
-
-                                costsAttrLinkHistory.setOperatorType("add");
-                                costsAttrLinkHistory.setModifier(BaseController.getUser().getId());
-                                costsAttrLinkHistory.setOperatorTime(LocalDateTime.now());
-                                costsAttrLinkHistories.add(costsAttrLinkHistory);
-                            }
+                    x.setOperator("0");
+                    x.setCostsId(ptlAgreementProductCostsNew.getId());
+                    x.setId("0");
+                    costsAttrLink.add(x);
+                    BeanUtils.copyProperties(x, costsAttrLinkHistory);
+                    //设置产品费用因子历史记录
+                    costsAttrLinkHistory.setId(null);
+                    costsAttrLinkHistory.setBatch(uuid);
+                    costsAttrLinkHistory.setOperatorType("add");
+                    costsAttrLinkHistory.setModifier(BaseController.getUser().getId());
+                    costsAttrLinkHistory.setOperatorTime(LocalDateTime.now());
+                    costsAttrLinkHistories.add(costsAttrLinkHistory);
+                } else {
+                    if (ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio") || (!"0".equals(x.getMin()) && null != x.getMin()) || (!"0".equals(x.getMax()) && null != x.getMax())) {
+                        if (x.getMin() != null || x.getMax() != null) {
+                            x.setCostsId(ptlAgreementProductCostsNew.getId());
+                            x.setId("0");
+                            costsAttrLink.add(x);
+                            BeanUtils.copyProperties(x, costsAttrLinkHistory);
+                            //设置产品费用因子历史记录
+                            costsAttrLinkHistory.setId(null);
+                            costsAttrLinkHistory.setBatch(uuid);
+
+                            costsAttrLinkHistory.setOperatorType("add");
+                            costsAttrLinkHistory.setModifier(BaseController.getUser().getId());
+                            costsAttrLinkHistory.setOperatorTime(LocalDateTime.now());
+                            costsAttrLinkHistories.add(costsAttrLinkHistory);
                         }
                     }
-                });
-                //保存产品费用因子历史记录
-                ptlAgreementProductCostsAttrLinkHistoryService.saveBatch(costsAttrLinkHistories);
-                ptlAgreementProductCostsAttrLinkService.saveBatch(costsAttrLink);
-                //添加费用因子轨迹
-                ptlAgreementProductCostsTrajectoryService.addCostsTrajectory(ptlAgreementProductCostsNew.getId(), "新增费用因子", BaseController.getUser().getId());
-            }
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
+                }
+            });
+            //保存产品费用因子历史记录
+            ptlAgreementProductCostsAttrLinkHistoryService.saveBatch(costsAttrLinkHistories);
+            ptlAgreementProductCostsAttrLinkService.saveBatch(costsAttrLink);
+            //添加费用因子轨迹
+            ptlAgreementProductCostsTrajectoryService.addCostsTrajectory(ptlAgreementProductCostsNew.getId(), "新增费用因子", BaseController.getUser().getId());
         }
+        return true;
     }
 
 
@@ -1219,14 +1222,14 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         //商业出口费用
         FeeOrderNewVo.ExportFee syExportFee = feeRuleSchemeService.calcExportFee(insFeeOrderNew.getSyPremium(), feeOrderNewVo.getExportFee().get(1).getSuperviseCosts(),
                 feeOrderNewVo.getEntranceFee().get(1).getTotalProportion(), syDeptManagerTotalProportion, retailStoreFee.getRetailStoreRadio(), taxRadio);
-        jqExportFee.setInsuranceType("商业险");
+        syExportFee.setInsuranceType("商业险");
         exportFeeList.add(syExportFee);
 
 
         //非车出口费用
         FeeOrderNewVo.ExportFee noExportFee = feeRuleSchemeService.calcExportFee(insFeeOrderNew.getNoPremium(), feeOrderNewVo.getExportFee().get(2).getSuperviseCosts(),
                 feeOrderNewVo.getEntranceFee().get(2).getTotalProportion(), noDeptManagerTotalProportion, retailStoreFee.getRetailStoreRadio(), taxRadio);
-        jqExportFee.setInsuranceType("非车险");
+        noExportFee.setInsuranceType("非车险");
         exportFeeList.add(noExportFee);
 
         //endregion
@@ -1237,7 +1240,6 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
 
         FeeOrderNewVo resultFeeOrderNewVo = new FeeOrderNewVo();
         resultFeeOrderNewVo.setEntranceFee(entranceFeeList);
-        resultFeeOrderNewVo.setDeptManagerFee(deptManagerFeeList);
         resultFeeOrderNewVo.setExportFee(exportFeeList);
 
 
@@ -1315,7 +1317,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
         insFeeOrderNew.setNoExportOtherCostsProportion(exportFeeList.get(2).getOtherCostsProportion());
         insFeeOrderNew.setNoExportOtherCostsPremiums(exportFeeList.get(2).getOtherCostsPremiums());
 
-        //region 重新计算一级机构管理费
+        //region 计算差值
         //入口 - 出口 - 机构管理费 5级 - 分销费  = 差值
 
         //分销交强费用
@@ -1343,6 +1345,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
                 )
                 .subtract(jqFenXiao).setScale(5, BigDecimal.ROUND_HALF_DOWN);
         insFeeOrderNew.setJqProfitMarginPremiums(jqDifference);
+        deptManagerFeeList.get(0).setProfitMarginPremiums(jqDifference);
 
         BigDecimal syDifference = syEntranceFee.getTotalAmount().subtract(
                         (syExportFee.getSuperviseCostsPremiums().add(syExportFee.getOtherCostsPremiums())))
@@ -1351,7 +1354,7 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
                 )
                 .subtract(syFenXiao).setScale(5, BigDecimal.ROUND_HALF_DOWN);
         insFeeOrderNew.setSyProfitMarginPremiums(syDifference);
-
+        deptManagerFeeList.get(1).setProfitMarginPremiums(syDifference);
 
         BigDecimal noDifference = noEntranceFee.getTotalAmount().subtract(
                         (noExportFee.getSuperviseCostsPremiums().add(noExportFee.getOtherCostsPremiums())))
@@ -1361,9 +1364,9 @@ public class PtlAgreementProductCostsNewServiceImpl extends ServiceImpl<PtlAgree
                 .subtract(noFenXiao).setScale(5, BigDecimal.ROUND_HALF_DOWN);
 
         insFeeOrderNew.setNoProfitMarginPremiums(noDifference);
-        deptManagerFeeList.get(2).setDeptPremiumsLevelOne(noDifference);
+        deptManagerFeeList.get(2).setProfitMarginPremiums(noDifference);
         //endregion
-
+        resultFeeOrderNewVo.setDeptManagerFee(deptManagerFeeList);
 
         //保存新的比例
         insFeeOrderNewService.updateById(insFeeOrderNew);

+ 4 - 2
src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml

@@ -104,11 +104,12 @@
     </select>
 
     <select id="selectAcceptInsurance" resultMap="InsAreaCompanyQueryDto">
-        SELECT iac.*, pa.agreement_name
+        SELECT iac.*, pa.agreement_name,io.is_external
         FROM ins_area_company as iac
                  left join ptl_agreement as pa on pa.id = iac.agreement_id
+                left join ins_orders io on iac.orderno=io.orderno
         WHERE iac.orderstatus = 3
-          and orderno = #{orderNo};
+          and iac.orderno = #{orderNo};
     </select>
 
 
@@ -153,6 +154,7 @@
         io.frameno,
         io.licenseno,
         io.insuredname,
+        io.is_external,
         iac.jq_start_date as jqstartdate,
         iac.jq_end_date as jqenddate,
         iac.sy_start_date as systartdate,

+ 5 - 1
src/main/resources/mapper/modules/order/InsOrdersMapper.xml

@@ -191,6 +191,7 @@
                o.licenseno,
                o.insuredname,
                o.vehicle_and_vessel_tax,
+               o.is_external,
                iac.jq_start_date as jqstartdate,
                iac.jq_end_date   as jqenddate,
                iac.sy_start_date as systartdate,
@@ -832,6 +833,7 @@
         agree.agreement_name as agreementName,
         company.namesimple as partnerCompaniesName,
         iac.api_type,
+        io.is_external,
         CASE dept.management_source
         WHEN '1' THEN '渠道'
         WHEN '2' THEN '个代'
@@ -1295,7 +1297,9 @@
         <if test="param != null and param != ''">
         AND (a.licenseno = #{param} or a.ins_company = #{param})
         </if>
-
+        <if test="userId != null and userId != ''">
+            AND a.userid = #{userId}
+        </if>
         ORDER BY
             difference DESC
     </select>

+ 19 - 0
src/main/resources/mapper/modules/protocol/PtlAgreementMapper.xml

@@ -84,6 +84,25 @@
           order by pa.serial_number
     </select>
 
+
+    <select id="getAgreementCompanyExternal" resultMap="AgreementCompanyResultMap">
+        select eic.*, pa.id as agreement_id, pa.agreement_name,pa.products_code, paa.api_type, pa.underwriting_description
+        from esm_ins_company as eic
+        left join ptl_agreement as pa on pa.insurance_company_id = eic.id
+        left join ptl_agreement_attribution as paa on paa.id = pa.id
+        where (#{localDate} between start_date and end_date)
+        and (paa.template_id is not null)
+        and pa.valid_status = 1
+        and pa.is_external = 1
+        and pa.id in (select distinct agreement_id
+        from ptl_agreement_dept
+        <if test="deptId != null and deptId != ''">
+            where dept_id = #{deptId}
+        </if>
+        )
+        order by pa.serial_number
+    </select>
+
     <select id="getAgreementCompanyByCompanyId" resultMap="AgreementCompanyResultMap">
         select eic.*, pa.id as agreement_id, pa.agreement_name, paa.api_type, pa.underwriting_description
         from esm_ins_company as eic