FeeRuleSchemeServiceNewImpl.java 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900
  1. package com.ydtech.modules.fee.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.ydtech.constants.enums.dict.insurance.EnergyType;
  4. import com.ydtech.exception.SystemException;
  5. import com.ydtech.modules.admin.model.SysDept;
  6. import com.ydtech.modules.admin.model.SysUser;
  7. import com.ydtech.modules.admin.model.po.SysUserAccount;
  8. import com.ydtech.modules.admin.service.SysDeptService;
  9. import com.ydtech.modules.admin.service.SysUserAccountService;
  10. import com.ydtech.modules.admin.service.SysUserService;
  11. import com.ydtech.modules.esm.model.EsmRetail;
  12. import com.ydtech.modules.esm.model.EsmUserReferrer;
  13. import com.ydtech.modules.esm.service.EsmRetailService;
  14. import com.ydtech.modules.esm.service.EsmUserReferrerService;
  15. import com.ydtech.modules.fee.dto.vo.RuleAttrMappingVo;
  16. import com.ydtech.modules.fee.service.FeeRuleSchemeNewService;
  17. import com.ydtech.modules.order.entity.InsAreaCompany;
  18. import com.ydtech.modules.order.entity.InsOrders;
  19. import com.ydtech.modules.order.entity.vo.*;
  20. import com.ydtech.modules.order.service.InsOrdersService;
  21. import com.ydtech.modules.protocol.entity.po.PtlAgreement;
  22. import com.ydtech.modules.protocol.entity.po.PtlNewCarJudgeRules;
  23. import com.ydtech.modules.protocol.service.PtlAgreementService;
  24. import com.ydtech.modules.protocol.service.PtlNewCarJudgeRulesService;
  25. import com.ydtech.modules.protocols.entity.po.*;
  26. import com.ydtech.modules.protocols.entity.vo.AgreementProductCosts;
  27. import com.ydtech.modules.protocols.service.*;
  28. import com.ydtech.utils.idgen.IdGenerate;
  29. import org.slf4j.Logger;
  30. import org.slf4j.LoggerFactory;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.stereotype.Service;
  33. import javax.annotation.Resource;
  34. import java.math.BigDecimal;
  35. import java.math.RoundingMode;
  36. import java.util.*;
  37. import java.util.concurrent.atomic.AtomicBoolean;
  38. /**
  39. *@author: tz
  40. *@description: 费用接口中相关功能的实现类
  41. *@create: 2024-3-1 11:45:33
  42. */
  43. @Service
  44. public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService {
  45. @Resource
  46. private InsOrdersService insOrdersService;
  47. @Resource
  48. private PtlAgreementProductCostsNewService ptlAgreementProductCostsNewService;
  49. @Resource
  50. private PtlAgreementUndwrtRulesAttrService ptlAgreementUndwrtRulesAttrService;
  51. @Resource
  52. private PtlAgreementProductCostsExportService ptlAgreementProductCostsExportService;
  53. @Resource
  54. private PtlAgreementProductCostsAttrLinkService ptlAgreementProductCostsAttrLinkService;
  55. @Resource
  56. private PtlAgreementUndwrtRulesNewService ptlAgreementUndwrtRulesNewService;
  57. @Resource
  58. private SysUserService sysUserService;
  59. @Resource
  60. private EsmRetailService esmRetailService;
  61. @Resource
  62. private InsFeeOrderNewService insFeeOrderNewService;
  63. @Autowired
  64. private EsmUserReferrerService esmUserReferrerService;
  65. @Autowired
  66. private SysUserAccountService sysUserAccountService;
  67. @Autowired
  68. private PtlNewCarJudgeRulesService ptlNewCarJudgeRulesService;
  69. @Autowired
  70. private PtlAgreementService ptlAgreementService;
  71. @Override
  72. public QueryOrderFeeVo queryFeeOrderInfo(String companyId) {
  73. return null;
  74. }
  75. @Override
  76. public List<QueryOrderFeeResultVo> convertOrderFeeVoData(QueryOrderFeeVo orderFeeVo) {
  77. return null;
  78. }
  79. @Override
  80. public void compareAndUpdateFeeOrderInfo(String insOrderNo, String jqCostsProportionStr, String syCostsProportionStr, String dealUser) {
  81. }
  82. private static final Logger log = LoggerFactory.getLogger("FeeRules");
  83. /**
  84. * 校验费用因子
  85. */
  86. @Override
  87. public void verificationCostFactor(InsAreaCompany insAreaCompany,InsOrders insOrders){
  88. List<AgreementProductCosts> agreementProductCosts = ptlAgreementProductCostsNewService.costsGetList(insAreaCompany.getAgreementId(),insOrders.getProductid());
  89. // if(agreementProductCosts == null || agreementProductCosts.size() == 0){
  90. // throw new SystemException("协议费用因子为空");
  91. // }
  92. for(int i=0;i<agreementProductCosts.size();i++)
  93. {
  94. if(agreementProductCosts.get(i).getPriorityLevel()==null){
  95. agreementProductCosts.get(i).setPriorityLevel(1);
  96. }
  97. }
  98. if(agreementProductCosts.size() > 0) {
  99. //按优先级进行排序
  100. Collections.sort(agreementProductCosts, Comparator.comparingInt(AgreementProductCosts::getPriorityLevel).reversed());
  101. //遍历费用因子
  102. String costsId = verificationCosts(agreementProductCosts, insAreaCompany, insOrders);
  103. if(costsId != null) {
  104. calcCosts(costsId, insAreaCompany);
  105. System.out.printf("费用因子校验通过,子订单id:" + insAreaCompany.getId() + ",费用id:" + costsId);
  106. }
  107. }
  108. }
  109. /**
  110. * 校验承保规则
  111. * @param insAreaCompany
  112. * @param insOrders
  113. */
  114. @Override
  115. public void verificationRuleFactor(InsAreaCompany insAreaCompany, InsOrders insOrders) {
  116. List<PtlAgreementUndwrtRulesNew> ptlAgreementUndwrtRules = ptlAgreementUndwrtRulesNewService.rulesList(insAreaCompany.getAgreementId());
  117. verificationRules(ptlAgreementUndwrtRules, insAreaCompany,insOrders);
  118. }
  119. /**
  120. * 计算费用
  121. * @param costsId
  122. * @param insAreaCompany
  123. */
  124. @Override
  125. public void calcCosts(String costsId,InsAreaCompany insAreaCompany) {
  126. //获取协议信息
  127. PtlAgreement ptlAgreement = ptlAgreementService.getById(insAreaCompany.getAgreementId());
  128. BigDecimal taxRadio = new BigDecimal("1.00");
  129. if(ptlAgreement.getWithTax().equals("是")){
  130. taxRadio = new BigDecimal("1.06");
  131. }
  132. //税比例 固定1.06
  133. //查找入口与出口费用比例
  134. //入口配置
  135. PtlAgreementProductCostsNew ptlAgreementProductCostsNew = ptlAgreementProductCostsNewService.getById(costsId);
  136. //出口配置
  137. PtlAgreementProductCostsExport ptlAgreementProductCostsExport = ptlAgreementProductCostsExportService.getOne(new LambdaQueryWrapper<PtlAgreementProductCostsExport>().eq(PtlAgreementProductCostsExport::getCostsId, costsId));
  138. InsFeeOrderNew insFeeOrderNew = new InsFeeOrderNew();
  139. insFeeOrderNew.setId(IdGenerate.nextId());
  140. insFeeOrderNew.setCostsId(costsId);
  141. insFeeOrderNew.setAgreementId(ptlAgreementProductCostsNew.getAgreementId());
  142. //存储部门id与用户id
  143. InsOrders order = insOrdersService.getById(insAreaCompany.getOrderno());
  144. InsFeeOrderNew insFeeOrderNewByCompanyId = insFeeOrderNewService.getInsFeeOrderNewByCompanyId(insAreaCompany.getId());
  145. if(insFeeOrderNewByCompanyId != null){
  146. insFeeOrderNew.setId(insFeeOrderNewByCompanyId.getId());
  147. }
  148. insFeeOrderNew.setDeptId(order.getDeptid());
  149. insFeeOrderNew.setUserId(order.getUserid());
  150. insFeeOrderNew.setInsOrderNo(insAreaCompany.getId());
  151. insFeeOrderNew.setJqPremium(insAreaCompany.getJqpremium());
  152. insFeeOrderNew.setSyPremium(insAreaCompany.getSypremium());
  153. insFeeOrderNew.setNoPremium(insAreaCompany.getJypremium());
  154. //不含税
  155. insFeeOrderNew.setJqNoTaxPremium(insAreaCompany.getJqpremium().divide(taxRadio,2));
  156. insFeeOrderNew.setSyNoTaxPremium(insAreaCompany.getSypremium().divide(taxRadio,2));
  157. insFeeOrderNew.setNoNoTaxPremium(insAreaCompany.getJypremium().divide(taxRadio,2));
  158. //计算入口费用
  159. //交强险总费用比例 + 加投比例
  160. insFeeOrderNew.setJqCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getJqCostsProportion()));
  161. BigDecimal jqCostsProportion = new BigDecimal(ptlAgreementProductCostsNew.getJqCostsProportion());
  162. jqCostsProportion = isContainNonCar(insAreaCompany) ?
  163. jqCostsProportion.add(new BigDecimal(ptlAgreementProductCostsNew.getJqCostsProportionAddInvsestment())).divide(new BigDecimal("100")) :
  164. jqCostsProportion.divide(new BigDecimal("100"));
  165. insFeeOrderNew.setJqCostsPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(jqCostsProportion));
  166. //商业险总费用比例 + 加投比例
  167. insFeeOrderNew.setSyCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getSyCostsProportion()));
  168. BigDecimal syCostsProportion = new BigDecimal(ptlAgreementProductCostsNew.getSyCostsProportion());
  169. syCostsProportion = isContainNonCar(insAreaCompany) ?
  170. syCostsProportion.add(new BigDecimal(ptlAgreementProductCostsNew.getSyCostsProportionAddInvsestment())).divide(new BigDecimal("100")) :
  171. syCostsProportion.divide(new BigDecimal("100"));
  172. insFeeOrderNew.setSyCostsPremiums(insFeeOrderNew.getSyNoTaxPremium().multiply(syCostsProportion));
  173. //非车险总费用比例
  174. insFeeOrderNew.setNoCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getNoCostsProportion()));
  175. insFeeOrderNew.setNoCostsPremiums(insFeeOrderNew.getNoNoTaxPremium().multiply
  176. (new BigDecimal(ptlAgreementProductCostsNew.getNoCostsProportion()).divide(new BigDecimal("100"))));
  177. //交强监管费比例
  178. insFeeOrderNew.setJqSuperviseCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getJqCarCostsProportion()));
  179. insFeeOrderNew.setJqSuperviseCostsPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(
  180. new BigDecimal(ptlAgreementProductCostsNew.getJqCarCostsProportion()).divide(new BigDecimal("100"))
  181. ));
  182. //商业监管费比例
  183. insFeeOrderNew.setSySuperviseCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getSyCarCostsProportion()));
  184. insFeeOrderNew.setSySuperviseCostsPremiums(insFeeOrderNew.getSyNoTaxPremium().multiply(
  185. new BigDecimal(ptlAgreementProductCostsNew.getSyCarCostsProportion()).divide(new BigDecimal("100"))
  186. ));
  187. //非车监管费比例
  188. insFeeOrderNew.setNoSuperviseCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getNoCarCostsProportion()));
  189. insFeeOrderNew.setNoSuperviseCostsPremiums(insFeeOrderNew.getNoNoTaxPremium().multiply(
  190. new BigDecimal(ptlAgreementProductCostsNew.getNoCarCostsProportion()).divide(new BigDecimal("100"))
  191. ));
  192. //交强其他费用比例
  193. insFeeOrderNew.setJqOtherCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getJqCarOtherCostsProportion()));
  194. insFeeOrderNew.setJqOtherCostsPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(
  195. new BigDecimal(ptlAgreementProductCostsNew.getJqCarOtherCostsProportion()).divide(new BigDecimal("100"))
  196. ));
  197. //商业其他费用比例
  198. insFeeOrderNew.setSyOtherCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getSyCarOtherCostsProportion()));
  199. insFeeOrderNew.setSyOtherCostsPremiums(insFeeOrderNew.getSyNoTaxPremium().multiply(
  200. new BigDecimal(ptlAgreementProductCostsNew.getSyCarOtherCostsProportion()).divide(new BigDecimal("100"))
  201. ));
  202. //非车其他费用比例
  203. insFeeOrderNew.setNoOtherCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getNoCarOtherCostsProportion()));
  204. insFeeOrderNew.setNoOtherCostsPremiums(insFeeOrderNew.getNoNoTaxPremium().multiply(
  205. new BigDecimal(ptlAgreementProductCostsNew.getNoCarOtherCostsProportion()).divide(new BigDecimal("100"))
  206. ));
  207. //交强加投比例
  208. insFeeOrderNew.setJqInvestmentCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getJqCostsProportionAddInvsestment()));
  209. insFeeOrderNew.setJqInvestmentCostsPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(
  210. new BigDecimal(ptlAgreementProductCostsNew.getJqCostsProportionAddInvsestment()).divide(new BigDecimal("100"))
  211. ));
  212. //商业加投比例
  213. insFeeOrderNew.setSyInvestmentCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getSyCostsProportionAddInvsestment()));
  214. insFeeOrderNew.setSyInvestmentCostsPremiums(insFeeOrderNew.getSyNoTaxPremium().multiply(
  215. new BigDecimal(ptlAgreementProductCostsNew.getSyCostsProportionAddInvsestment()).divide(new BigDecimal("100"))
  216. ));
  217. //设置出口费用
  218. //设置出口费用
  219. //每级的加投费用为 计算出每级管理费的占比 * 加投费用
  220. //(一级管理费比例 / 总费用比例) * 加投费用
  221. BigDecimal jqInvestmentCostsLevel1 = new BigDecimal(0);
  222. BigDecimal jqInvestmentCostsLevel2 = new BigDecimal(0);
  223. BigDecimal jqInvestmentCostsLevel3 = new BigDecimal(0);
  224. BigDecimal jqInvestmentCostsLevel4 = new BigDecimal(0);
  225. BigDecimal jqInvestmentCostsLevel5 = new BigDecimal(0);
  226. BigDecimal syInvestmentCostsLevel1 = new BigDecimal(0);
  227. BigDecimal syInvestmentCostsLevel2 = new BigDecimal(0);
  228. BigDecimal syInvestmentCostsLevel3 = new BigDecimal(0);
  229. BigDecimal syInvestmentCostsLevel4 = new BigDecimal(0);
  230. BigDecimal syInvestmentCostsLevel5 = new BigDecimal(0);
  231. if(insFeeOrderNew.getJqInvestmentCostsProportion().compareTo(BigDecimal.ZERO) != 0)
  232. {
  233. jqInvestmentCostsLevel1 = ptlAgreementProductCostsExport.getJqExportRadioLevel1().divide(insFeeOrderNew.getJqCostsProportion()).multiply(insFeeOrderNew.getJqInvestmentCostsPremiums());
  234. jqInvestmentCostsLevel2 = ptlAgreementProductCostsExport.getJqExportRadioLevel2().divide(insFeeOrderNew.getJqCostsProportion()).multiply(insFeeOrderNew.getJqInvestmentCostsPremiums());
  235. jqInvestmentCostsLevel3 = ptlAgreementProductCostsExport.getJqExportRadioLevel3().divide(insFeeOrderNew.getJqCostsProportion()).multiply(insFeeOrderNew.getJqInvestmentCostsPremiums());
  236. jqInvestmentCostsLevel4 = ptlAgreementProductCostsExport.getJqExportRadioLevel4().divide(insFeeOrderNew.getJqCostsProportion()).multiply(insFeeOrderNew.getJqInvestmentCostsPremiums());
  237. jqInvestmentCostsLevel5 = ptlAgreementProductCostsExport.getJqExportRadioLevel5().divide(insFeeOrderNew.getJqCostsProportion()).multiply(insFeeOrderNew.getJqInvestmentCostsPremiums());
  238. }
  239. if(insFeeOrderNew.getSyInvestmentCostsProportion().compareTo(BigDecimal.ZERO) != 0)
  240. {
  241. syInvestmentCostsLevel1 = ptlAgreementProductCostsExport.getSyExportRadioLevel1().divide(insFeeOrderNew.getSyCostsProportion()).multiply(insFeeOrderNew.getSyInvestmentCostsPremiums());
  242. syInvestmentCostsLevel2 = ptlAgreementProductCostsExport.getSyExportRadioLevel2().divide(insFeeOrderNew.getSyCostsProportion()).multiply(insFeeOrderNew.getSyInvestmentCostsPremiums());
  243. syInvestmentCostsLevel3 = ptlAgreementProductCostsExport.getSyExportRadioLevel3().divide(insFeeOrderNew.getSyCostsProportion()).multiply(insFeeOrderNew.getSyInvestmentCostsPremiums());
  244. syInvestmentCostsLevel4 = ptlAgreementProductCostsExport.getSyExportRadioLevel4().divide(insFeeOrderNew.getSyCostsProportion()).multiply(insFeeOrderNew.getSyInvestmentCostsPremiums());
  245. syInvestmentCostsLevel5 = ptlAgreementProductCostsExport.getSyExportRadioLevel5().divide(insFeeOrderNew.getSyCostsProportion()).multiply(insFeeOrderNew.getSyInvestmentCostsPremiums());
  246. }
  247. //交强管理比例
  248. insFeeOrderNew.setJqDeptProportionLevel1(ptlAgreementProductCostsExport.getJqExportRadioLevel1());
  249. insFeeOrderNew.setJqDeptPremiumsLevel1(
  250. insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel1()).divide(new BigDecimal("100")).add(jqInvestmentCostsLevel1)
  251. );
  252. insFeeOrderNew.setJqDeptProportionLevel2(ptlAgreementProductCostsExport.getJqExportRadioLevel2());
  253. insFeeOrderNew.setJqDeptPremiumsLevel2(
  254. insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel2()).divide(new BigDecimal("100")).add(jqInvestmentCostsLevel2)
  255. );
  256. insFeeOrderNew.setJqDeptProportionLevel3(ptlAgreementProductCostsExport.getJqExportRadioLevel3());
  257. insFeeOrderNew.setJqDeptPremiumsLevel3(
  258. insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel3()).divide(new BigDecimal("100")).add(jqInvestmentCostsLevel3)
  259. );
  260. insFeeOrderNew.setJqDeptProportionLevel4(ptlAgreementProductCostsExport.getJqExportRadioLevel4());
  261. insFeeOrderNew.setJqDeptPremiumsLevel4(
  262. insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel4()).divide(new BigDecimal("100")).add(jqInvestmentCostsLevel4)
  263. );
  264. insFeeOrderNew.setJqDeptProportionLevel5(ptlAgreementProductCostsExport.getJqExportRadioLevel5());
  265. insFeeOrderNew.setJqDeptPremiumsLevel5(
  266. insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel5()).divide(new BigDecimal("100")).add(jqInvestmentCostsLevel5)
  267. );
  268. insFeeOrderNew.setJqExportInvestmentProportion(ptlAgreementProductCostsExport.getJqExportInvestmentRadio());
  269. insFeeOrderNew.setJqExportInvestmentPremiums(
  270. insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqExportInvestmentProportion()).divide(new BigDecimal("100"))
  271. );
  272. //商业管理比例
  273. insFeeOrderNew.setSyDeptProportionLevel1(ptlAgreementProductCostsExport.getSyExportRadioLevel1());
  274. insFeeOrderNew.setSyDeptPremiumsLevel1(
  275. insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel1()).divide(new BigDecimal("100")).add(syInvestmentCostsLevel1)
  276. );
  277. insFeeOrderNew.setSyDeptProportionLevel2(ptlAgreementProductCostsExport.getSyExportRadioLevel2());
  278. insFeeOrderNew.setSyDeptPremiumsLevel2(
  279. insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel2()).divide(new BigDecimal("100")).add(syInvestmentCostsLevel2)
  280. );
  281. insFeeOrderNew.setSyDeptProportionLevel3(ptlAgreementProductCostsExport.getSyExportRadioLevel3());
  282. insFeeOrderNew.setSyDeptPremiumsLevel3(
  283. insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel3()).divide(new BigDecimal("100")).add(syInvestmentCostsLevel3)
  284. );
  285. insFeeOrderNew.setSyDeptProportionLevel4(ptlAgreementProductCostsExport.getSyExportRadioLevel4());
  286. insFeeOrderNew.setSyDeptPremiumsLevel4(
  287. insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel4()).divide(new BigDecimal("100")).add(syInvestmentCostsLevel4)
  288. );
  289. insFeeOrderNew.setSyDeptProportionLevel5(ptlAgreementProductCostsExport.getSyExportRadioLevel5());
  290. insFeeOrderNew.setSyDeptPremiumsLevel5(
  291. insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel5()).divide(new BigDecimal("100")).add(syInvestmentCostsLevel5)
  292. );
  293. insFeeOrderNew.setSyExportInvestmentProportion(ptlAgreementProductCostsExport.getSyExportInvestmentRadio());
  294. insFeeOrderNew.setSyExportInvestmentPremiums(
  295. insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyExportInvestmentProportion()).divide(new BigDecimal("100"))
  296. );
  297. //非车管理比例
  298. insFeeOrderNew.setNoDeptProportionLevel1(ptlAgreementProductCostsExport.getNoCarExportRadioLevel1());
  299. insFeeOrderNew.setNoDeptPremiumsLevel1(
  300. insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel1()).divide(new BigDecimal("100"))
  301. );
  302. insFeeOrderNew.setNoDeptProportionLevel2(ptlAgreementProductCostsExport.getNoCarExportRadioLevel2());
  303. insFeeOrderNew.setNoDeptPremiumsLevel2(
  304. insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel2()).divide(new BigDecimal("100"))
  305. );
  306. insFeeOrderNew.setNoDeptProportionLevel3(ptlAgreementProductCostsExport.getNoCarExportRadioLevel3());
  307. insFeeOrderNew.setNoDeptPremiumsLevel3(
  308. insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel3()).divide(new BigDecimal("100"))
  309. );
  310. insFeeOrderNew.setNoDeptProportionLevel4(ptlAgreementProductCostsExport.getNoCarExportRadioLevel4());
  311. insFeeOrderNew.setNoDeptPremiumsLevel4(
  312. insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel4()).divide(new BigDecimal("100"))
  313. );
  314. insFeeOrderNew.setNoDeptProportionLevel5(ptlAgreementProductCostsExport.getNoCarExportRadioLevel5());
  315. insFeeOrderNew.setNoDeptPremiumsLevel5(
  316. insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel5()).divide(new BigDecimal("100"))
  317. );
  318. //计算分销费用
  319. InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
  320. SysUser sysUser = sysUserService.findByUserId(insOrders.getUserid());
  321. //获取分销比例
  322. List<EsmRetail> esmRetailList = esmRetailService.selectList(" where t.deptid=? and t.status = '1' ",
  323. new Object[]{sysUser.getDeptId()});
  324. if (esmRetailList != null && !esmRetailList.isEmpty()) {
  325. EsmRetail esmRetail = esmRetailList.get(0);
  326. //分销等级
  327. insFeeOrderNew.setDistributionStatus(esmRetailList.get(0).getRetailtype());
  328. //用户分销人员id
  329. List<EsmUserReferrer> parents = esmUserReferrerService.findParents(sysUser.getId());
  330. if (esmRetail != null) {
  331. if(Integer.parseInt(esmRetail.getRetailtype()) >= 3){
  332. insFeeOrderNew.setFirstDetailProportion(new BigDecimal(esmRetail.getDisrate1()));
  333. insFeeOrderNew.setFirstDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate1())).divide(new BigDecimal("100")));
  334. if(parents != null && parents.size() > 2){
  335. insFeeOrderNew.setThreeLevelUserId(parents.get(2).getId());
  336. }
  337. }
  338. if(Integer.parseInt(esmRetail.getRetailtype()) >= 2){
  339. insFeeOrderNew.setSecondDetailProportion(new BigDecimal(esmRetail.getDisrate2()));
  340. insFeeOrderNew.setSecondDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate2())).divide(new BigDecimal("100")));
  341. if(parents != null && parents.size() > 1){
  342. insFeeOrderNew.setTwoLevelUserId(parents.get(1).getId());
  343. }
  344. }
  345. if(Integer.parseInt(esmRetail.getRetailtype()) >= 1){
  346. insFeeOrderNew.setThirdDetailProportion(new BigDecimal(esmRetail.getDisrate3()));
  347. insFeeOrderNew.setThirdDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate3())).divide(new BigDecimal("100")));
  348. if(parents != null && parents.size() > 0) {
  349. insFeeOrderNew.setFirstLevelUserId(parents.get(0).getId());
  350. }
  351. }
  352. }
  353. }
  354. insFeeOrderNewService.saveOrUpdate(insFeeOrderNew);
  355. }
  356. /**
  357. * 判断是否包含非车险
  358. * @param insAreaCompany
  359. * @return
  360. */
  361. private boolean isContainNonCar(InsAreaCompany insAreaCompany){
  362. if(insAreaCompany.getCrossInsurance() != null && insAreaCompany.getJypremium().equals(BigDecimal.ZERO)){
  363. return false;
  364. }
  365. return true;
  366. }
  367. /**
  368. * 匹配费用因子
  369. * @param agreementProductCosts
  370. * @param insAreaCompany
  371. * @param insOrders
  372. * @return
  373. */
  374. private String verificationCosts(List<AgreementProductCosts> agreementProductCosts,InsAreaCompany insAreaCompany,InsOrders insOrders){
  375. //匹配费用因子
  376. //获取所有费用属性
  377. List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
  378. //获取新旧车信息
  379. PtlNewCarJudgeRules carJudgeRule = getCarJudgeRule(insAreaCompany.getCompanyId());
  380. //获取所有费用属性关联
  381. List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insAreaCompany, insOrders, undwrtRulesAttrList, carJudgeRule);
  382. // List<AgreementProductCosts> filterAgreementProductCosts = new ArrayList<>();
  383. // boolean isNoCar = false;
  384. // //查找是否有强制非车因子
  385. // for(int i=0;i<agreementProductCosts.size();i++) {
  386. // PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink =
  387. // agreementProductCosts.get(i).getCostsAttrLinks().stream().filter(x -> x.getAttrCode().equals("IsNonMotorInsurance")).findFirst().orElse(null);
  388. //
  389. // if(!Objects.isNull(ptlAgreementProductCostsAttrLink)){
  390. // if(ptlAgreementProductCostsAttrLink.getMin().equals("1")){
  391. // //只走强制非车的费用因子
  392. // AgreementProductCosts productCosts = agreementProductCosts.get(i);
  393. // filterAgreementProductCosts.add(productCosts);
  394. // isNoCar = true;
  395. // }
  396. //
  397. // }
  398. // }
  399. // if(filterAgreementProductCosts.isEmpty()){
  400. // filterAgreementProductCosts = agreementProductCosts;
  401. // }
  402. //是否强制走非车
  403. // if(isNoCar) {
  404. // for(int i=0;i<filterAgreementProductCosts.size();i++) {
  405. // if (judgementsIsNoCar(filterAgreementProductCosts.get(i).getCostsAttrLinks(), undwrtRulesAttrList, ruleAttrMappingVoList)) {
  406. // return filterAgreementProductCosts.get(i).getId();
  407. // }
  408. // }
  409. // }else{
  410. // for (int i = 0; i < filterAgreementProductCosts.size(); i++) {
  411. // //判断是否匹配
  412. // if (judgements(filterAgreementProductCosts.get(i).getCostsAttrLinks(), undwrtRulesAttrList, ruleAttrMappingVoList)) {
  413. // //返回 费用id 如果需要匹配非车的情况 将返回值返回list 后赛选
  414. // return filterAgreementProductCosts.get(i).getId();
  415. // }
  416. // }
  417. // }
  418. for (int i = 0; i < agreementProductCosts.size(); i++) {
  419. //判断是否匹配
  420. System.out.printf("费用因子匹配开始:" + agreementProductCosts.get(i).getId() + "\n");
  421. System.out.println("费用因子备注:" + agreementProductCosts.get(i).getCostsDescription() + "\n");
  422. if (judgements(agreementProductCosts.get(i).getCostsAttrLinks(), undwrtRulesAttrList, ruleAttrMappingVoList)) {
  423. //返回 费用id 如果需要匹配非车的情况 将返回值返回list 后赛选
  424. return agreementProductCosts.get(i).getId();
  425. }
  426. }
  427. return null;
  428. // throw new SystemException("费用因子匹配失败");
  429. }
  430. private boolean verificationRules(List<PtlAgreementUndwrtRulesNew> ptlAgreementUndwrtRulesNews,InsAreaCompany insAreaCompany,InsOrders insOrders){
  431. //匹配承保规则
  432. //获取所有承保规则属性
  433. List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
  434. //获取所有费用属性关联
  435. List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insAreaCompany, insOrders, undwrtRulesAttrList,getCarJudgeRule(insAreaCompany.getCompanyId()));
  436. for (int i = 0; i < ptlAgreementUndwrtRulesNews.size(); i++) {
  437. //判断是否匹配
  438. if (judgementsRules(ptlAgreementUndwrtRulesNews.get(i).getRulesAttrList(), undwrtRulesAttrList, ruleAttrMappingVoList)) {
  439. //返回 费用id 如果需要匹配非车的情况 将返回值返回list 后赛选
  440. return true;
  441. }
  442. }
  443. throw new SystemException("承保规则校验失败");
  444. }
  445. /**
  446. * 费用因子的对比
  447. * @param ptlAgreementProductCostsAttrLinks 费用因子范围规则
  448. * @param rulesAttrs 费用因子属性
  449. * @param ruleAttrMappingVoList 表单提交的值
  450. * @return
  451. */
  452. private boolean judgements(List<PtlAgreementProductCostsAttrLink> ptlAgreementProductCostsAttrLinks,
  453. List<PtlAgreementUndwrtRulesAttr> rulesAttrs, List<RuleAttrMappingVo> ruleAttrMappingVoList){
  454. boolean useFlag = true;
  455. for(int i=0;i<ptlAgreementProductCostsAttrLinks.size();i++){
  456. int finalI = i;
  457. //查找规则中的 传值属性
  458. RuleAttrMappingVo ruleAttrMappingVo = ruleAttrMappingVoList.stream().filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode())).findFirst().orElse(null);
  459. //先跳过强制非车的检测
  460. if(ptlAgreementProductCostsAttrLinks.get(i).getAttrCode().equals("IsNonMotorInsurance"))
  461. continue;
  462. //如果查找不到 传值属性 直接费用对比失败
  463. if(ruleAttrMappingVo == null){
  464. System.out.printf("规则匹配失败:" + ptlAgreementProductCostsAttrLinks.get(i).getAttrCode() + "\n");
  465. System.out.printf("传入的值找不到该属性:" + ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode() + "\n");
  466. return false;
  467. }
  468. //查找 费用因子规则
  469. PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = rulesAttrs.stream().filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode())).findFirst().get();
  470. useFlag = attrEqual(ptlAgreementProductCostsAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue());
  471. if(!useFlag){
  472. System.out.printf("规则匹配失败:" + ptlAgreementProductCostsAttrLinks.get(i).getAttrCode() + "\n");
  473. System.out.printf("检验的值:" + ptlAgreementProductCostsAttrLinks.get(i).getMin() + "\n");
  474. System.out.printf("传入的值:" + ruleAttrMappingVo.getValue() + "\n");
  475. return false;
  476. }
  477. }
  478. return useFlag;
  479. }
  480. /**
  481. * 承保规则因子的对比
  482. * @param ptlAgreementUndwrtRulesAttrLinks
  483. * @param rulesAttrs
  484. * @param ruleAttrMappingVoList
  485. * @return
  486. */
  487. private boolean judgementsRules(List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesAttrLinks,
  488. List<PtlAgreementUndwrtRulesAttr> rulesAttrs, List<RuleAttrMappingVo> ruleAttrMappingVoList){
  489. boolean useFlag = true;
  490. for(int i=0;i<ptlAgreementUndwrtRulesAttrLinks.size();i++){
  491. int finalI = i;
  492. //查找规则中的 传值属性
  493. RuleAttrMappingVo ruleAttrMappingVo = ruleAttrMappingVoList.stream().filter(x ->
  494. x.getAttrCode().equals(ptlAgreementUndwrtRulesAttrLinks.get(finalI).getAttrCode())).findFirst().orElse(null);
  495. //如果查找不到 传值属性 直接费用对比失败
  496. if(ruleAttrMappingVo == null)
  497. continue;
  498. //查找 费用因子规则
  499. PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = rulesAttrs.stream().filter(x -> x.getAttrCode().equals(ptlAgreementUndwrtRulesAttrLinks.get(finalI).getAttrCode())).findFirst().get();
  500. //如果是多选 对value进行转换
  501. if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")) {
  502. PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x ->
  503. x.getCode().equals(ruleAttrMappingVo.getValue())).findFirst().orElse(null);
  504. ruleAttrMappingVo.setValue(ptlAgreementUndwrtRulesDictLabal.getName());
  505. }
  506. //如果是单选 并且是 性别的话 转换为code
  507. if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio"))
  508. {
  509. if("CarOwnersSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode()) || "ApplicantSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode()) ||
  510. "InsuredSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode())){
  511. PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x ->
  512. x.getName().equals(ruleAttrMappingVo.getValue())).findFirst().orElse(null);
  513. ruleAttrMappingVo.setValue(ptlAgreementUndwrtRulesDictLabal.getCode());
  514. }
  515. }
  516. useFlag = attrEqual(ptlAgreementUndwrtRulesAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue());
  517. if(!useFlag)
  518. return false;
  519. }
  520. return useFlag;
  521. }
  522. /**
  523. * 费用因子的对比 强制非车险
  524. * @param ptlAgreementProductCostsAttrLinks 费用因子范围规则
  525. * @param rulesAttrs 费用因子属性
  526. * @param ruleAttrMappingVoList 表单提交的值
  527. * @return
  528. */
  529. private boolean judgementsIsNoCar(List<PtlAgreementProductCostsAttrLink> ptlAgreementProductCostsAttrLinks,
  530. List<PtlAgreementUndwrtRulesAttr> rulesAttrs, List<RuleAttrMappingVo> ruleAttrMappingVoList){
  531. boolean useFlag = true;
  532. for(int i=0;i<ptlAgreementProductCostsAttrLinks.size();i++){
  533. int finalI = i;
  534. //查找规则中的 传值属性
  535. RuleAttrMappingVo ruleAttrMappingVo = ruleAttrMappingVoList.stream().filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode())).findFirst().orElse(null);
  536. //如果是强制非车险
  537. if(ptlAgreementProductCostsAttrLinks.get(i).getAttrCode().equals("IsNonMotorInsurance"))
  538. continue;
  539. //如果查找不到 传值属性 直接费用对比失败
  540. if(ruleAttrMappingVo == null)
  541. return false;
  542. //查找 费用因子规则
  543. PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = rulesAttrs.stream().filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode())).findFirst().get();
  544. //如果是多选 对value进行转换
  545. if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")) {
  546. PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x ->
  547. x.getCode().equals(ruleAttrMappingVo.getValue())).findFirst().orElse(null);
  548. ruleAttrMappingVo.setValue(ptlAgreementUndwrtRulesDictLabal.getName());
  549. }
  550. //如果是单选 并且是 性别的话 转换为code
  551. if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio"))
  552. {
  553. if("CarOwnersSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode()) || "ApplicantSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode()) ||
  554. "InsuredSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode())){
  555. PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x ->
  556. x.getName().equals(ruleAttrMappingVo.getValue())).findFirst().orElse(null);
  557. ruleAttrMappingVo.setValue(ptlAgreementUndwrtRulesDictLabal.getCode());
  558. }
  559. }
  560. useFlag = attrEqual(ptlAgreementProductCostsAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue());
  561. if(!useFlag) {
  562. System.out.printf("规则匹配失败:" + ptlAgreementProductCostsAttrLinks.get(i).getAttrCode());
  563. return false;
  564. }
  565. }
  566. return useFlag;
  567. }
  568. /**
  569. * 属性比较 返回 是否匹配
  570. * @param ptlAgreementProductCostsAttrLink
  571. * @param ptlAgreementUndwrtRulesAttr
  572. * @param value
  573. * @return
  574. */
  575. private boolean attrEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink,PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, String value){
  576. if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")){
  577. return checkBoxEqual(ptlAgreementProductCostsAttrLink,value);
  578. }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("inputNumber")){
  579. return inputNumberEqual(ptlAgreementProductCostsAttrLink,value);
  580. }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("input")){
  581. return inputTextEqual(ptlAgreementProductCostsAttrLink,value);
  582. }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("select")){
  583. //截取车牌
  584. if(ptlAgreementUndwrtRulesAttr.getAttrCode().equals("LicenseNo")){
  585. value = value.substring(0,2);
  586. }
  587. return selectEqual(ptlAgreementProductCostsAttrLink,value);
  588. }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio")){
  589. return radioEqual(ptlAgreementProductCostsAttrLink,value);
  590. }
  591. return false;
  592. }
  593. private boolean attrEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink,PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, String value){
  594. if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")){
  595. return checkBoxEqual(ptlAgreementUndwrtRulesAttrLink,value);
  596. }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("inputNumber")){
  597. return inputNumberEqual(ptlAgreementUndwrtRulesAttrLink,value);
  598. }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("input")){
  599. return inputTextEqual(ptlAgreementUndwrtRulesAttrLink,value);
  600. }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("select")){
  601. return selectEqual(ptlAgreementUndwrtRulesAttrLink,value);
  602. }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio")){
  603. return radioEqual(ptlAgreementUndwrtRulesAttrLink,value);
  604. }
  605. return false;
  606. }
  607. /**
  608. * 属性为多选判断
  609. * @param ptlAgreementProductCostsAttrLink
  610. * @param value
  611. * @return
  612. */
  613. private boolean checkBoxEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){
  614. if(ptlAgreementProductCostsAttrLink.getMin().contains(value)){
  615. return true;
  616. }
  617. return false;
  618. }
  619. private boolean checkBoxEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){
  620. if(!ptlAgreementUndwrtRulesAttrLink.getMin().contains(value)){
  621. return true;
  622. }
  623. return false;
  624. }
  625. /**
  626. * 属性为数值型判断
  627. * @param ptlAgreementProductCostsAttrLink
  628. * @param value
  629. * @return
  630. */
  631. private boolean inputNumberEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){
  632. double v = Double.parseDouble(value);
  633. //统一处理数值
  634. if("1".equals(ptlAgreementProductCostsAttrLink.getOperator())){
  635. if(Integer.parseInt(ptlAgreementProductCostsAttrLink.getMin()) <= v &&
  636. Double.parseDouble(ptlAgreementProductCostsAttrLink.getMax()) >= v){
  637. return true;
  638. }
  639. }else if("2".equals(ptlAgreementProductCostsAttrLink.getOperator())){
  640. if(Double.parseDouble(ptlAgreementProductCostsAttrLink.getMin()) > v){
  641. return true;
  642. }
  643. }else if("3".equals(ptlAgreementProductCostsAttrLink.getOperator())){
  644. if(Double.parseDouble(ptlAgreementProductCostsAttrLink.getMin()) >= v){
  645. return true;
  646. }
  647. }else if("4".equals(ptlAgreementProductCostsAttrLink.getOperator())){
  648. if(Double.parseDouble(ptlAgreementProductCostsAttrLink.getMax()) < v){
  649. return true;
  650. }
  651. }else if("5".equals(ptlAgreementProductCostsAttrLink.getOperator())){
  652. if(Double.parseDouble(ptlAgreementProductCostsAttrLink.getMax()) <= v){
  653. return true;
  654. }
  655. }
  656. return false;
  657. }
  658. private boolean inputNumberEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){
  659. double v = Double.parseDouble(value);
  660. //统一处理数值
  661. if("1".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())){
  662. if(Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMin()) <= v &&
  663. Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMax()) >= v){
  664. return false;
  665. }
  666. }else if("2".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())){
  667. if(Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMin()) > v){
  668. return false;
  669. }
  670. }else if("3".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())){
  671. if(Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMin()) >= v){
  672. return false;
  673. }
  674. }else if("4".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())){
  675. if(Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMax()) < v){
  676. return false;
  677. }
  678. }else if("5".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())){
  679. if(Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMax()) <= v){
  680. return false;
  681. }
  682. }
  683. return true;
  684. }
  685. /**
  686. * 属性为输入框判断
  687. * @param ptlAgreementProductCostsAttrLink
  688. * @param value
  689. * @return
  690. */
  691. private boolean inputTextEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){
  692. //将值进行分割
  693. String[] split = ptlAgreementProductCostsAttrLink.getMin().split(",");
  694. AtomicBoolean returnBool = new AtomicBoolean(false);
  695. Arrays.stream(split).forEach(x -> {
  696. if(value.contains(x)){
  697. returnBool.set(true);
  698. }
  699. });
  700. return returnBool.get();
  701. }
  702. private boolean inputTextEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){
  703. //将值进行分割
  704. String[] split = ptlAgreementUndwrtRulesAttrLink.getMin().split(",");
  705. AtomicBoolean returnBool = new AtomicBoolean(true);
  706. Arrays.stream(split).forEach(x -> {
  707. if(!x.equals("") && value.contains(x)){
  708. returnBool.set(false);
  709. }
  710. });
  711. return returnBool.get();
  712. }
  713. /**
  714. * 属性为下拉框判断
  715. * @param ptlAgreementProductCostsAttrLink
  716. * @param value
  717. * @return
  718. */
  719. private boolean selectEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){
  720. if(ptlAgreementProductCostsAttrLink.getMin() != null && ptlAgreementProductCostsAttrLink.getMin().contains(value)){
  721. return true;
  722. }
  723. return false;
  724. }
  725. /**
  726. * 属性为选择框判断
  727. * @param ptlAgreementUndwrtRulesAttrLink
  728. * @param value
  729. * @return
  730. */
  731. private boolean selectEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){
  732. if(ptlAgreementUndwrtRulesAttrLink.getMin() != null && ptlAgreementUndwrtRulesAttrLink.getMin().contains(value)){
  733. return false;
  734. }
  735. return true;
  736. }
  737. /**
  738. * 属性为单选框判断
  739. * @param ptlAgreementProductCostsAttrLink
  740. * @param value
  741. * @return
  742. */
  743. private boolean radioEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){
  744. //新能源判断
  745. if("NewEnergy".equals(ptlAgreementProductCostsAttrLink.getAttrCode())){
  746. // 是否是新能源车
  747. boolean newEnergy = EnergyType.isNewEnergy(value);
  748. if(newEnergy && ptlAgreementProductCostsAttrLink.getMin().equals("1")){
  749. return true;
  750. }else if(!newEnergy && ptlAgreementProductCostsAttrLink.getMin().equals("0"))
  751. {
  752. return true;
  753. }
  754. }else
  755. if(ptlAgreementProductCostsAttrLink.getMin().contains(value)){
  756. return true;
  757. }
  758. return false;
  759. }
  760. private boolean radioEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){
  761. //新能源判断
  762. if("NewEnergy".equals(ptlAgreementUndwrtRulesAttrLink.getAttrCode())){
  763. // 是否是新能源车
  764. boolean newEnergy = EnergyType.isNewEnergy(value);
  765. if(newEnergy && ptlAgreementUndwrtRulesAttrLink.getMin().equals("1")){
  766. return false;
  767. }else if(!newEnergy && ptlAgreementUndwrtRulesAttrLink.getMin().equals("0"))
  768. {
  769. return false;
  770. }
  771. }else if(ptlAgreementUndwrtRulesAttrLink.getMin().contains(value)){
  772. return false;
  773. }
  774. return true;
  775. }
  776. /**
  777. * 获取车辆新旧车信息
  778. * @param companyId
  779. * @return
  780. */
  781. private PtlNewCarJudgeRules getCarJudgeRule(String companyId){
  782. //获取车辆新旧车信息
  783. List<PtlNewCarJudgeRules> list = ptlNewCarJudgeRulesService.list(new LambdaQueryWrapper<PtlNewCarJudgeRules>().eq(PtlNewCarJudgeRules::getCompanyId, companyId));
  784. if(list.size()>0){
  785. return list.get(0);
  786. }
  787. return null;
  788. }
  789. }