FeeRuleSchemeServiceImpl.java 148 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542
  1. package com.ydtech.modules.fee.service.impl;
  2. import com.ydtech.exception.SystemException;
  3. import com.ydtech.modules.admin.model.SysDept;
  4. import com.ydtech.modules.admin.model.SysUser;
  5. import com.ydtech.modules.admin.service.SysDeptService;
  6. import com.ydtech.modules.admin.service.SysUserService;
  7. import com.ydtech.modules.esm.model.EsmRetail;
  8. import com.ydtech.modules.esm.model.EsmUserReferrer;
  9. import com.ydtech.modules.esm.service.EsmRetailService;
  10. import com.ydtech.modules.esm.service.EsmUserReferrerService;
  11. import com.ydtech.modules.fee.dto.FeeFactorInfoDto;
  12. import com.ydtech.modules.fee.dto.FeeSchemeReqDto;
  13. import com.ydtech.modules.fee.dto.FeeSchemeResDto;
  14. import com.ydtech.modules.fee.service.FeeRuleSchemeService;
  15. import com.ydtech.modules.ins.model.vo.AccidentResponseVo;
  16. import com.ydtech.modules.ins.model.vo.CarInfoVo;
  17. import com.ydtech.modules.ins.model.vo.KindInfoVo;
  18. import com.ydtech.modules.ins.model.vo.QuoteRespVo;
  19. import com.ydtech.modules.order.entity.InsAreaCompany;
  20. import com.ydtech.modules.order.entity.InsCopyFeeOrder;
  21. import com.ydtech.modules.order.entity.InsFeeOrder;
  22. import com.ydtech.modules.order.entity.InsOrders;
  23. import com.ydtech.modules.order.entity.vo.*;
  24. import com.ydtech.modules.order.service.InsAreaCompanyService;
  25. import com.ydtech.modules.order.service.InsCopyFeeOrderService;
  26. import com.ydtech.modules.order.service.InsFeeOrderService;
  27. import com.ydtech.modules.order.service.InsOrdersService;
  28. import com.ydtech.modules.protocol.entity.po.*;
  29. import com.ydtech.modules.protocol.service.*;
  30. import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
  31. import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
  32. import org.apache.commons.lang3.StringUtils;
  33. import org.apache.commons.lang3.math.NumberUtils;
  34. import org.springframework.beans.factory.annotation.Autowired;
  35. import org.springframework.stereotype.Service;
  36. import javax.annotation.Resource;
  37. import java.math.BigDecimal;
  38. import java.math.RoundingMode;
  39. import java.text.SimpleDateFormat;
  40. import java.time.LocalDate;
  41. import java.time.format.DateTimeFormatter;
  42. import java.util.*;
  43. import java.util.stream.Collectors;
  44. /**
  45. * 费用接口中相关功能的实现类
  46. */
  47. @Service
  48. public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
  49. @Resource
  50. private PtlAgreementProductCostsService ptlAgreementProductCostsService;
  51. @Resource
  52. private InsOrdersService insOrdersService;
  53. @Resource
  54. private InsFeeOrderService insFeeOrderService;
  55. @Resource
  56. private InsCopyFeeOrderService insCopyFeeOrderService;
  57. @Resource
  58. private SysUserService sysUserService;
  59. @Resource
  60. private SysDeptService sysDeptService;
  61. @Resource
  62. private EsmRetailService esmRetailService;
  63. @Resource
  64. private EsmUserReferrerService esmUserReferrerService;
  65. @Resource
  66. private InsAreaCompanyService insAreaCompanyService;
  67. @Resource
  68. private PtlAgreementService ptlAgreementService;
  69. @Resource
  70. private PtlNewCarJudgeRulesService ptlNewCarJudgeRulesService;
  71. @Resource
  72. private PtlAgreementAttributionService ptlAgreementAttributionService;
  73. @Resource
  74. private PtlAgreementUndwrtRulesService ptlAgreementUndwrtRulesService;
  75. @Autowired
  76. private InsFeeOrderNewService insFeeOrderNewService;
  77. /**
  78. * 根据跟单信息,以及配置的费用因子,获取合适的跟单费用
  79. *
  80. * @param feeSchemeReqDto
  81. * @return
  82. */
  83. public FeeSchemeResDto matchTheAppropriateFees(FeeSchemeReqDto feeSchemeReqDto) {
  84. FeeSchemeResDto feeSchemeResDto = new FeeSchemeResDto();
  85. //先根据业务类别、有效期、协议编码、历史标志代码字段 获取对应费用方案列表
  86. List<PtlAgreementProductCosts> ptlAgreementProductCosts =
  87. ptlAgreementProductCostsService.selectVliadFeeFactor(feeSchemeReqDto.getBusType(), feeSchemeReqDto.getAgreementId());
  88. if (ptlAgreementProductCosts.isEmpty()) {
  89. //如果查询不到费用方案信息,则阻断算费流程,进行提示
  90. throw new SystemException("未查询到费用配置,请先配置该协议的费用方案!");
  91. } else {
  92. //符合跟单信息的方案列表
  93. List<PtlAgreementProductCosts> validSchemeList = new ArrayList();
  94. //循环符合的方案列表,再进行细化的因子匹配,获取最终可以匹配到的方案
  95. for (int i = 0; i < ptlAgreementProductCosts.size(); i++) {
  96. PtlAgreementProductCosts factorCost = ptlAgreementProductCosts.get(i);
  97. //获取处理后的待校验因子
  98. Map<Integer, FeeFactorInfoDto> factorToBeVerified = getFactorToBeVerified(factorCost);
  99. //按规则拼接跟单信息
  100. String matchKeyStr = getMatchKeyWithInsuranceInfo(feeSchemeReqDto);
  101. //循环进行各项因子校验
  102. boolean checkFlag = checkFactorValidWithInsuranceInfo(matchKeyStr, factorToBeVerified, factorCost.getProductId());
  103. //如果该方案所有因子都校验通过,则放入符合校验方案列表
  104. if (checkFlag) {
  105. validSchemeList.add(factorCost);
  106. }
  107. }
  108. if (validSchemeList.size() > 0) {
  109. //先判断匹配到的是不是只有兜底类型,如果不是则过滤掉兜底类型的费用,优先以跟单的为准,如果只有兜底类型,则按同样逻辑进行筛选
  110. //根据ProductId去重后的结果集
  111. List tempList =
  112. validSchemeList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(PtlAgreementProductCosts::getProductId))), ArrayList::new));
  113. if (tempList.size() > 1) {//如果有多种类型,则过滤掉兜底类型的
  114. validSchemeList = validSchemeList.stream().filter(x -> !"039999".equals(x.getProductId())).collect(Collectors.toList());
  115. }
  116. //匹配到唯一一条费用方案,直接用这条
  117. if (validSchemeList.size() == 1) {
  118. //进行费用比例赋值,给返回对象
  119. feeSchemeResDto = generateSchemeResDto((PtlAgreementProductCosts) validSchemeList.get(0));
  120. } else {
  121. /* //如果最终符合的有多条,则按特殊规则选择其中一条 (原来使用保费多少判断优先的停用)
  122. PtlAgreementProductCosts finalSchemeCost=changeSchemeWithSpecialRule(validSchemeList,feeSchemeReqDto);*/
  123. PtlAgreementProductCosts finalSchemeCost = null;
  124. //调整为使用协议方案中优先级字段判断优先方案(循环找出对应优先级最高的)
  125. for (int i = 0; i < validSchemeList.size(); i++) {
  126. PtlAgreementProductCosts tempCostDto = validSchemeList.get(i);
  127. int currentLevel = tempCostDto.getPriorityLevel() == null ? 0 : tempCostDto.getPriorityLevel();
  128. if (finalSchemeCost != null) {
  129. int oldLevel = finalSchemeCost.getPriorityLevel() == null ? 0 : finalSchemeCost.getPriorityLevel();
  130. if (oldLevel > currentLevel) {
  131. finalSchemeCost = tempCostDto;
  132. }
  133. } else {
  134. finalSchemeCost = tempCostDto;
  135. }
  136. }
  137. //进行费用比例赋值,给返回对象
  138. feeSchemeResDto = generateSchemeResDto(finalSchemeCost);
  139. }
  140. } else {
  141. throw new SystemException("未匹配到合适的费用方案,请先配置该协议的费用方案!");
  142. }
  143. }
  144. return feeSchemeResDto;
  145. }
  146. /**
  147. * 特殊处理选择费用方案
  148. * 如果最终符合的有多条,则先看交强、商业谁的保费多,然后根据保费多得在匹配到的方案中找费用比例大的那一条
  149. *
  150. * @param validSchemeList
  151. * @param feeSchemeReqDto
  152. * @return
  153. */
  154. private PtlAgreementProductCosts changeSchemeWithSpecialRule(List<PtlAgreementProductCosts> validSchemeList,
  155. FeeSchemeReqDto feeSchemeReqDto) {
  156. PtlAgreementProductCosts finalScheme = null;
  157. //险种标志,最终取哪个险种费用比例 1取交强 2取商业
  158. String riskFlag = "";
  159. //判断险种标志
  160. if ("0330".equals(feeSchemeReqDto.getBusType())) {//单交
  161. riskFlag = "1";
  162. } else if ("034001".equals(feeSchemeReqDto.getBusType())) {//单商
  163. riskFlag = "2";
  164. } else if ("034002".equals(feeSchemeReqDto.getBusType())) {//单三
  165. riskFlag = "2";
  166. } else if ("0330034002".equals(feeSchemeReqDto.getBusType())) {//交三
  167. if (Double.parseDouble(feeSchemeReqDto.getJqPremium()) <= Double.parseDouble(feeSchemeReqDto.getSyPremium())) {
  168. riskFlag = "2";
  169. } else {
  170. riskFlag = "1";
  171. }
  172. } else if ("0330034001".equals(feeSchemeReqDto.getBusType())) {//交商
  173. if (Double.parseDouble(feeSchemeReqDto.getJqPremium()) <= Double.parseDouble(feeSchemeReqDto.getSyPremium())) {
  174. riskFlag = "2";
  175. } else {
  176. riskFlag = "1";
  177. }
  178. }
  179. //循环找出对应比例最大的
  180. for (int i = 0; i < validSchemeList.size(); i++) {
  181. PtlAgreementProductCosts tempCostDto = validSchemeList.get(i);
  182. if (finalScheme != null) {
  183. if ("1".equals(riskFlag)) {//按交强比例排序,找比例最大的
  184. if (Double.parseDouble(finalScheme.getJqCostsProportion()) < Double.parseDouble(tempCostDto.getJqCostsProportion())) {
  185. finalScheme = tempCostDto;
  186. }
  187. } else if ("2".equals(riskFlag)) {//按商业比例排序,找比例最大的
  188. if (Double.parseDouble(finalScheme.getSyCostsProportion()) < Double.parseDouble(tempCostDto.getSyCostsProportion())) {
  189. finalScheme = tempCostDto;
  190. }
  191. }
  192. } else {
  193. finalScheme = tempCostDto;
  194. }
  195. }
  196. return finalScheme;
  197. }
  198. /**
  199. * 组装费用接口反参对象
  200. *
  201. * @param agreementProductCost
  202. * @return
  203. */
  204. private FeeSchemeResDto generateSchemeResDto(PtlAgreementProductCosts agreementProductCost) {
  205. FeeSchemeResDto resDto = new FeeSchemeResDto();
  206. resDto.setAgreementId(agreementProductCost.getAgreementId());
  207. resDto.setSchemeId(agreementProductCost.getId());
  208. resDto.setJqSpilloverPremiums(agreementProductCost.getJqSpilloverPremiums());
  209. resDto.setJqSpilloverProportion(agreementProductCost.getJqSpilloverProportion());
  210. resDto.setJqNewCarCostsProportion(agreementProductCost.getJqNewCarCostsProportion());
  211. resDto.setJqOldCarCostsProportion(agreementProductCost.getJqOldCarCostsProportion());
  212. resDto.setJqCostsProportion(agreementProductCost.getJqCostsProportion());
  213. resDto.setJqNewCarOtherCostsProportion(agreementProductCost.getJqNewCarOtherCostsProportion());
  214. resDto.setJqOldCarOtherCostsProportion(agreementProductCost.getJqOldCarOtherCostsProportion());
  215. resDto.setSySpilloverPremiums(agreementProductCost.getSySpilloverPremiums());
  216. resDto.setSySpilloverProportion(agreementProductCost.getSySpilloverProportion());
  217. resDto.setSyNewCarCostsProportion(agreementProductCost.getSyNewCarCostsProportion());
  218. resDto.setSyOldCarCostsProportion(agreementProductCost.getSyOldCarCostsProportion());
  219. resDto.setSyCostsProportion(agreementProductCost.getSyCostsProportion());
  220. resDto.setSyNewCarOtherCostsProportion(agreementProductCost.getSyNewCarOtherCostsProportion());
  221. resDto.setSyOldCarOtherCostsProportion(agreementProductCost.getSyOldCarOtherCostsProportion());
  222. return resDto;
  223. }
  224. /**
  225. * 根据跟单信息,循环各项因子 校验该方案的匹配情况
  226. *
  227. * @param matchKeyStr
  228. * @param factorToBeVerified
  229. * @return
  230. */
  231. private boolean checkFactorValidWithInsuranceInfo(String matchKeyStr, Map<Integer, FeeFactorInfoDto> factorToBeVerified,
  232. String productId) {
  233. boolean result = false; //默认没有匹配到
  234. boolean isConfigFactor = false;//是否配置了因子校验项 默认否
  235. String[] matchKeys = matchKeyStr.split(",");
  236. //循环待校验因子列表
  237. for (Map.Entry<Integer, FeeFactorInfoDto> entry : factorToBeVerified.entrySet()) {
  238. Integer key = entry.getKey();
  239. FeeFactorInfoDto checkFactorInfo = entry.getValue();
  240. //特殊处理,如果跟单是客车时,不关注配置的核定载质量字段
  241. if ("客车".equals(matchKeys[4])) {
  242. if (checkFactorInfo.getMatchSequence() == 8) {
  243. continue;
  244. }
  245. }
  246. //先看该方案是否需要匹配该因子,不需要则跳过本条因子
  247. if (!checkFactorInfo.isNeedMatch()) {
  248. continue;
  249. } else {
  250. isConfigFactor = true;//不跳过因子时,则有配置的因子项
  251. }
  252. //下面处理需要进行匹配的因子
  253. if ("1".equals(checkFactorInfo.getMatchType())) {//1.单字符串匹配(相等)
  254. if (matchKeys[key] != null && !"".equals(matchKeys[key])) {
  255. if (checkFactorInfo.getSingleSelectVal().equals(matchKeys[key])) {
  256. result = true;
  257. continue;
  258. } else {
  259. //如果需要匹配且没有匹配到,则直接跳出本次循环,该方案不符合
  260. result = false;
  261. break;
  262. }
  263. } else {
  264. //判断跟单信息是否为空,如果为空,则直接没有匹配到,该方案不符合
  265. result = false;
  266. break;
  267. }
  268. } else if ("2".equals(checkFactorInfo.getMatchType())) {//2.多字符串匹配(包含)
  269. //如果匹配的是业务类型,需要全字符匹配
  270. //业务类型:单交0330、单商034001、单三034002、交三0330034002、交商0330034001
  271. //034002,0330
  272. if ("业务类型".equals(checkFactorInfo.getFactorName())) {
  273. if (matchKeys[key] != null && !"".equals(matchKeys[key])) {
  274. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  275. if (checkFactorInfo.getMultipleSelectVal().indexOf(matchKeys[key] + ",") > -1) {
  276. result = true;
  277. continue;
  278. } else {
  279. //如果需要匹配且没有匹配到,则直接跳出循环,该方案不符合
  280. result = false;
  281. break;
  282. }
  283. } else {
  284. //判断跟单信息是否为空,如果为空,则直接没有匹配到,该方案不符合
  285. result = false;
  286. break;
  287. }
  288. } else {
  289. if (matchKeys[key] != null && !"".equals(matchKeys[key])) {
  290. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  291. if (checkFactorInfo.getMultipleSelectVal().indexOf(matchKeys[key]) > -1) {
  292. result = true;
  293. continue;
  294. } else {
  295. //如果需要匹配且没有匹配到,则直接跳出循环,该方案不符合
  296. result = false;
  297. break;
  298. }
  299. } else {
  300. //判断跟单信息是否为空,如果为空,则直接没有匹配到,该方案不符合
  301. result = false;
  302. break;
  303. }
  304. }
  305. } else if ("3".equals(checkFactorInfo.getMatchType())) {//3.区间范围比较(左闭右闭)
  306. if (matchKeys[key] != null && NumberUtils.isCreatable(matchKeys[key])) {
  307. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  308. if (Double.parseDouble(matchKeys[key]) >= checkFactorInfo.getMinRangeVal() && Double.parseDouble(matchKeys[key]) <= checkFactorInfo.getMaxRangeVal()) {
  309. result = true;
  310. continue;
  311. } else {
  312. //如果需要匹配且没有匹配到,则直接跳出循环,该方案不符合
  313. result = false;
  314. break;
  315. }
  316. } else {
  317. //判断跟单信息是否为空和可转整型,如果不符,则直接没有匹配到,该方案不符合
  318. result = false;
  319. break;
  320. }
  321. } else if ("4".equals(checkFactorInfo.getMatchType())) {//4.特殊规则,司乘险校验,存在关联关系需要单独判断
  322. if (matchKeys[key] != null) {
  323. //先获取跟单司机、乘客保额
  324. String[] kindAmountStr = matchKeys[key].split("-");
  325. String driverAmount = "NULL".equals(kindAmountStr[0]) ? "0" : kindAmountStr[0];
  326. String passengerAmount = "NULL".equals(kindAmountStr[1]) ? "0" : kindAmountStr[1];
  327. if ("0".equals(checkFactorInfo.getDriverPassengerRelation())) {//无关系,则各自校验各自,有一个不符合,则方案不符合
  328. if (NumberUtils.isCreatable(driverAmount)) {//如果司机保额是数字,则可以进行校验
  329. if (checkFactorInfo.isDriverIsNeedMatch()) {
  330. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  331. if (Double.parseDouble(driverAmount) >= checkFactorInfo.getDriverMinRangeVal() && Double.parseDouble(driverAmount) <= checkFactorInfo.getDriverMaxRangeVal()) {
  332. result = true;
  333. continue;
  334. } else {
  335. //如果需要匹配且没有匹配到,则直接跳出循环,该方案不符合
  336. result = false;
  337. break;
  338. }
  339. }
  340. }
  341. if (NumberUtils.isCreatable(passengerAmount)) {//如果司机保额是数字,则可以进行校验
  342. if (checkFactorInfo.isPassengerIsNeedMatch()) {
  343. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  344. if (Double.parseDouble(passengerAmount) >= checkFactorInfo.getPassengerMinRangeVal() && Double.parseDouble(passengerAmount) <= checkFactorInfo.getPassengerMaxRangeVal()) {
  345. result = true;
  346. continue;
  347. } else {
  348. //如果需要匹配且没有匹配到,则直接跳出循环,该方案不符合
  349. result = false;
  350. break;
  351. }
  352. }
  353. }
  354. } else if ("1".equals(checkFactorInfo.getDriverPassengerRelation())) {//或的关系 2个里面有一个通过则通过
  355. boolean isDriverPass = false;
  356. boolean isPassengerPass = false;
  357. if (NumberUtils.isCreatable(driverAmount)) {//如果司机保额是数字,则可以进行校验
  358. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  359. if (Double.parseDouble(driverAmount) >= checkFactorInfo.getDriverMinRangeVal() && Double.parseDouble(driverAmount) <= checkFactorInfo.getDriverMaxRangeVal()) {
  360. isDriverPass = true;
  361. }
  362. }
  363. if (NumberUtils.isCreatable(passengerAmount)) {//如果司机保额是数字,则可以进行校验
  364. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  365. if (Double.parseDouble(passengerAmount) >= checkFactorInfo.getPassengerMinRangeVal() && Double.parseDouble(passengerAmount) <= checkFactorInfo.getPassengerMaxRangeVal()) {
  366. isPassengerPass = true;
  367. }
  368. }
  369. if (!isDriverPass && !isPassengerPass) {//两项都不通过的时候,才不符合
  370. result = false;
  371. break;
  372. } else {
  373. result = true;
  374. continue;
  375. }
  376. } else if ("2".equals(checkFactorInfo.getDriverPassengerRelation())) {//且的关系 2个全部通过才算通过
  377. boolean isDriverPass = false;
  378. boolean isPassengerPass = false;
  379. if (NumberUtils.isCreatable(driverAmount)) {//如果司机保额是数字,则可以进行校验
  380. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  381. if (Double.parseDouble(driverAmount) >= checkFactorInfo.getDriverMinRangeVal() && Double.parseDouble(driverAmount) <= checkFactorInfo.getDriverMaxRangeVal()) {
  382. isDriverPass = true;
  383. }
  384. }
  385. if (NumberUtils.isCreatable(passengerAmount)) {//如果司机保额是数字,则可以进行校验
  386. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  387. if (Double.parseDouble(passengerAmount) >= checkFactorInfo.getPassengerMinRangeVal() && Double.parseDouble(passengerAmount) <= checkFactorInfo.getPassengerMaxRangeVal()) {
  388. isPassengerPass = true;
  389. }
  390. }
  391. if (isDriverPass && isPassengerPass) {//两项都通过的时候,才符合
  392. result = true;
  393. continue;
  394. } else {
  395. result = false;
  396. break;
  397. }
  398. }
  399. }
  400. } else if ("5".equals(checkFactorInfo.getMatchType())) {//5.特殊规则,医保外用校验,存在互斥关系需要单独判断
  401. if (matchKeys[key] != null) {
  402. //先获取跟单医保外用保额 三者-司机-乘客
  403. String[] kindAmountStr = matchKeys[key].split("-");
  404. String thirdMedicalAmount = "NULL".equals(kindAmountStr[0]) ? "0" : kindAmountStr[0];
  405. String driverMedicalAmount = "NULL".equals(kindAmountStr[1]) ? "0" : kindAmountStr[1];
  406. String passengerMedicalAmount = "NULL".equals(kindAmountStr[2]) ? "0" : kindAmountStr[2];
  407. if (checkFactorInfo.getAnyMedicalAmountVal() != null) {//不为空时,为任意险别符合即可 三者 司机 乘客 三者为 或的关系
  408. boolean isThirdPass = false;
  409. boolean isDriverPass = false;
  410. boolean isPassengerPass = false;
  411. if (NumberUtils.isCreatable(thirdMedicalAmount)) {//如果医保外用三者保额是数字,则可以进行校验
  412. if (Double.parseDouble(thirdMedicalAmount) >= checkFactorInfo.getAnyMedicalAmountVal()) {
  413. isThirdPass = true;
  414. }
  415. }
  416. if (NumberUtils.isCreatable(driverMedicalAmount)) {//如果医保外用保额是数字,则可以进行校验
  417. if (Double.parseDouble(driverMedicalAmount) >= checkFactorInfo.getAnyMedicalAmountVal()) {
  418. isDriverPass = true;
  419. }
  420. }
  421. if (NumberUtils.isCreatable(passengerMedicalAmount)) {//如果医保外用乘客保额是数字,则可以进行校验
  422. if (Double.parseDouble(passengerMedicalAmount) >= checkFactorInfo.getAnyMedicalAmountVal()) {
  423. isPassengerPass = true;
  424. }
  425. }
  426. if (!isThirdPass && !isDriverPass && !isPassengerPass) {//三项都不通过的时候,才不符合
  427. result = false;
  428. break;
  429. } else {
  430. result = true;
  431. continue;
  432. }
  433. } else {//看指定险别的判断 三者 司机 乘客 三者为 且的关系
  434. boolean isThirdPass = false;
  435. boolean isDriverPass = false;
  436. boolean isPassengerPass = false;
  437. if (NumberUtils.isCreatable(thirdMedicalAmount)) {//如果医保外用三者保额是数字,则可以进行校验
  438. if (checkFactorInfo.getThirdMedicalAmountVal() != null) {
  439. if (Double.parseDouble(thirdMedicalAmount) >= checkFactorInfo.getThirdMedicalAmountVal()) {
  440. isThirdPass = true;
  441. }
  442. } else {
  443. isThirdPass = true;
  444. }
  445. }
  446. if (NumberUtils.isCreatable(driverMedicalAmount)) {//如果医保外用保额是数字,则可以进行校验
  447. if (checkFactorInfo.getDriverMedicalAmountVal() != null) {
  448. if (Double.parseDouble(driverMedicalAmount) >= checkFactorInfo.getDriverMedicalAmountVal()) {
  449. isDriverPass = true;
  450. }
  451. } else {
  452. isDriverPass = true;
  453. }
  454. }
  455. if (NumberUtils.isCreatable(passengerMedicalAmount)) {//如果医保外用乘客保额是数字,则可以进行校验
  456. if (checkFactorInfo.getPassengerMedicalAmountVal() != null) {
  457. if (Double.parseDouble(passengerMedicalAmount) >= checkFactorInfo.getPassengerMedicalAmountVal()) {
  458. isPassengerPass = true;
  459. }
  460. } else {
  461. isPassengerPass = true;
  462. }
  463. }
  464. if (isThirdPass && isDriverPass && isPassengerPass) {//三项都通过的时候,才符合
  465. result = true;
  466. continue;
  467. } else {
  468. result = false;
  469. break;
  470. }
  471. }
  472. }
  473. }
  474. }
  475. if (productId != null && "039999".equals(productId)) {
  476. if (!isConfigFactor) {//如果是兜底配置 且 没有配置因子项时,则认为匹配到
  477. result = true;
  478. }
  479. }
  480. return result;
  481. }
  482. /**
  483. * 根据跟单信息,按照约定顺序进行拼接匹配串
  484. * 新增因子时,顺序需要与getFactorToBeVerified()方法放入待校验因子一致
  485. *
  486. * @param feeSchemeReqDto
  487. * @return
  488. */
  489. private String getMatchKeyWithInsuranceInfo(FeeSchemeReqDto feeSchemeReqDto) {
  490. StringBuffer result = new StringBuffer();
  491. result.append(feeSchemeReqDto.getIsTransfer()).append(",");
  492. result.append(feeSchemeReqDto.getIsNewCar()).append(",");
  493. result.append(feeSchemeReqDto.getIsNewEnergy()).append(",");
  494. result.append(feeSchemeReqDto.getIsRenewal()).append(",");
  495. result.append(feeSchemeReqDto.getVehicleCategory()).append(",");
  496. result.append(feeSchemeReqDto.getUseNature()).append(",");
  497. result.append(feeSchemeReqDto.getSeatNum()).append(",");
  498. result.append(feeSchemeReqDto.getPurchasePrice()).append(",");
  499. result.append(feeSchemeReqDto.getApprovedLoadCapacity()).append(",");
  500. result.append(feeSchemeReqDto.getJqPremium()).append(",");
  501. result.append(feeSchemeReqDto.getSumPayTax()).append(",");
  502. result.append(feeSchemeReqDto.getThirdPartyInsurance()).append(",");
  503. result.append(feeSchemeReqDto.getNoCarPremium()).append(",");
  504. result.append(feeSchemeReqDto.getSyDiscount()).append(",");
  505. result.append(feeSchemeReqDto.getJqDiscount()).append(",");
  506. result.append(feeSchemeReqDto.getInsuranceScore()).append(",");
  507. result.append(feeSchemeReqDto.getExpectedLossRate()).append(",");
  508. result.append(feeSchemeReqDto.getLicenseNo()).append(",");
  509. //司乘险保额因子,特殊处理(司机保额-乘客保额)
  510. result.append(StringUtils.isNotEmpty(feeSchemeReqDto.getDriverAmount()) ? feeSchemeReqDto.getDriverAmount() : "NULL").append("-").append(StringUtils.isNotEmpty(feeSchemeReqDto.getPassengerAmount()) ? feeSchemeReqDto.getPassengerAmount() : "NULL").append(",");
  511. result.append(feeSchemeReqDto.getInsureAge()).append(",");
  512. result.append(feeSchemeReqDto.getCarOwnerAge()).append(",");
  513. //医保外用险保额因子,特殊处理(三者保额-司机保额-乘客保额)
  514. result.append(StringUtils.isNotEmpty(feeSchemeReqDto.getThirdMedicalAmount()) ? feeSchemeReqDto.getThirdMedicalAmount() : "NULL").append("-").append(StringUtils.isNotEmpty(feeSchemeReqDto.getDriverMedicalAmount()) ? feeSchemeReqDto.getDriverMedicalAmount() : "NULL").append("-").append(StringUtils.isNotEmpty(feeSchemeReqDto.getPassengerMedicalAmount()) ? feeSchemeReqDto.getPassengerMedicalAmount() : "NULL");
  515. return result.toString();
  516. }
  517. /**
  518. * 根据配置的因子表数据,组装标准的待校验因子列表
  519. * 新增因子时,顺序需要与getMatchKeyWithInsuranceInfo()方法放入跟单信息一致
  520. *
  521. * @param factorCost
  522. * @return
  523. */
  524. private Map<Integer, FeeFactorInfoDto> getFactorToBeVerified(PtlAgreementProductCosts factorCost) {
  525. Map<Integer, FeeFactorInfoDto> resultMqp = new HashMap<>();
  526. //以下各项因子必须按顺序放入MAP,以便校验时关联
  527. //--------------------因子处理分割线----------------------------------
  528. FeeFactorInfoDto factor0 = new FeeFactorInfoDto();
  529. factor0.setFactorName("是否过户");
  530. factor0.setMatchType("1");
  531. factor0.setMatchSequence(0);
  532. if (factorCost.getTransfer() != null && factorCost.getTransfer() != 9) {
  533. factor0.setNeedMatch(true);
  534. factor0.setSingleSelectVal(String.valueOf(factorCost.getTransfer()));
  535. } else {
  536. //如果方案中未录入(是空或为9时),则不校验该项因子
  537. factor0.setNeedMatch(false);
  538. }
  539. resultMqp.put(0, factor0);
  540. //--------------------因子处理分割线----------------------------------
  541. FeeFactorInfoDto factor1 = new FeeFactorInfoDto();
  542. factor1.setFactorName("新旧车");
  543. factor1.setMatchType("1");
  544. factor1.setMatchSequence(1);
  545. if (factorCost.getOldAndNew() != null && factorCost.getOldAndNew() != 9) {
  546. factor1.setNeedMatch(true);
  547. factor1.setSingleSelectVal(String.valueOf(factorCost.getOldAndNew()));
  548. } else {
  549. //如果方案中未录入(是空或为9时),则不校验该项因子
  550. factor1.setNeedMatch(false);
  551. }
  552. resultMqp.put(1, factor1);
  553. //--------------------因子处理分割线----------------------------------
  554. FeeFactorInfoDto factor2 = new FeeFactorInfoDto();
  555. factor2.setFactorName("是否新能源");
  556. factor2.setMatchType("1");
  557. factor2.setMatchSequence(2);
  558. if (factorCost.getNewEnergy() != null && factorCost.getNewEnergy() != 9) {
  559. factor2.setNeedMatch(true);
  560. factor2.setSingleSelectVal(String.valueOf(factorCost.getNewEnergy()));
  561. } else {
  562. //如果方案中未录入(是空或为9时),则不校验该项因子
  563. factor2.setNeedMatch(false);
  564. }
  565. resultMqp.put(2, factor2);
  566. //--------------------因子处理分割线----------------------------------
  567. FeeFactorInfoDto factor3 = new FeeFactorInfoDto();
  568. factor3.setFactorName("是否续保");
  569. factor3.setMatchType("1");
  570. factor3.setMatchSequence(3);
  571. if (factorCost.getRenewal() != null && factorCost.getRenewal() != 9) {
  572. factor3.setNeedMatch(true);
  573. factor3.setSingleSelectVal(String.valueOf(factorCost.getRenewal()));
  574. } else {
  575. //如果方案中未录入(是空或为9时),则不校验该项因子
  576. factor3.setNeedMatch(false);
  577. }
  578. resultMqp.put(3, factor3);
  579. //--------------------因子处理分割线----------------------------------
  580. FeeFactorInfoDto factor4 = new FeeFactorInfoDto();
  581. factor4.setFactorName("车辆大类");
  582. factor4.setMatchType("2");
  583. factor4.setMatchSequence(4);
  584. if (factorCost.getVehicleCategory() != null && !"".equals(factorCost.getVehicleCategory())) {
  585. factor4.setNeedMatch(true);
  586. factor4.setMultipleSelectVal(String.valueOf(factorCost.getVehicleCategory()));
  587. } else {
  588. //如果方案中未录入,则不校验该项因子
  589. factor4.setNeedMatch(false);
  590. }
  591. resultMqp.put(4, factor4);
  592. //--------------------因子处理分割线----------------------------------
  593. FeeFactorInfoDto factor5 = new FeeFactorInfoDto();
  594. factor5.setFactorName("使用性质");
  595. factor5.setMatchType("2");
  596. factor5.setMatchSequence(5);
  597. if (factorCost.getNatureOfUse() != null && !"".equals(factorCost.getNatureOfUse())) {
  598. factor5.setNeedMatch(true);
  599. factor5.setMultipleSelectVal(String.valueOf(factorCost.getNatureOfUse()));
  600. } else {
  601. //如果方案中未录入,则不校验该项因子
  602. factor5.setNeedMatch(false);
  603. }
  604. resultMqp.put(5, factor5);
  605. //--------------------因子处理分割线----------------------------------
  606. FeeFactorInfoDto factor6 = new FeeFactorInfoDto();
  607. factor6.setFactorName("客车座位数区间");
  608. factor6.setMatchType("3");
  609. factor6.setMatchSequence(6);
  610. if (checkFactorConfigWithArea(factorCost.getMinSeats(), factorCost.getMaxSeats(), factor6, factorCost)) {
  611. factor6.setNeedMatch(true);
  612. factor6.setMinRangeVal((double) factorCost.getMinSeats());
  613. factor6.setMaxRangeVal((double) factorCost.getMaxSeats());
  614. } else {
  615. //如果方案中未录入,则不校验该项因子
  616. factor6.setNeedMatch(false);
  617. }
  618. resultMqp.put(6, factor6);
  619. //--------------------因子处理分割线----------------------------------
  620. FeeFactorInfoDto factor7 = new FeeFactorInfoDto();
  621. factor7.setFactorName("新车购置价区间");
  622. factor7.setMatchType("3");
  623. factor7.setMatchSequence(7);
  624. if (checkFactorConfigWithArea(factorCost.getMinPurchasePrice(), factorCost.getMaxPurchasePrice(), factor7, factorCost)) {
  625. factor7.setNeedMatch(true);
  626. factor7.setMinRangeVal((double) factorCost.getMinPurchasePrice());
  627. factor7.setMaxRangeVal((double) factorCost.getMaxPurchasePrice());
  628. } else {
  629. //如果方案中未录入,则不校验该项因子
  630. factor7.setNeedMatch(false);
  631. }
  632. resultMqp.put(7, factor7);
  633. //--------------------因子处理分割线----------------------------------
  634. FeeFactorInfoDto factor8 = new FeeFactorInfoDto();
  635. factor8.setFactorName("核定载质量区间");
  636. factor8.setMatchType("3");
  637. factor8.setMatchSequence(8);
  638. if (checkFactorConfigWithArea(factorCost.getMinApprovedLoadCapacity(), factorCost.getMaxApprovedLoadCapacity(), factor8,
  639. factorCost)) {
  640. factor8.setNeedMatch(true);
  641. factor8.setMinRangeVal((double) factorCost.getMinApprovedLoadCapacity());
  642. factor8.setMaxRangeVal((double) factorCost.getMaxApprovedLoadCapacity());
  643. } else {
  644. //如果方案中未录入,则不校验该项因子
  645. factor8.setNeedMatch(false);
  646. }
  647. resultMqp.put(8, factor8);
  648. //--------------------因子处理分割线----------------------------------
  649. FeeFactorInfoDto factor9 = new FeeFactorInfoDto();
  650. factor9.setFactorName("交强险保费区间");
  651. factor9.setMatchType("3");
  652. factor9.setMatchSequence(9);
  653. if (checkFactorConfigWithArea(factorCost.getMinCompulsoryInsurancePremium(), factorCost.getMaxCompulsoryInsurancePremium(),
  654. factor9, factorCost)) {
  655. factor9.setNeedMatch(true);
  656. factor9.setMinRangeVal((double) factorCost.getMinCompulsoryInsurancePremium());
  657. factor9.setMaxRangeVal((double) factorCost.getMaxCompulsoryInsurancePremium());
  658. } else {
  659. //如果方案中未录入,则不校验该项因子
  660. factor9.setNeedMatch(false);
  661. }
  662. resultMqp.put(9, factor9);
  663. //--------------------因子处理分割线----------------------------------
  664. FeeFactorInfoDto factor10 = new FeeFactorInfoDto();
  665. factor10.setFactorName("车船税金额区间");
  666. factor10.setMatchType("3");
  667. factor10.setMatchSequence(10);
  668. if (checkFactorConfigWithArea(factorCost.getMinTaxAmount(), factorCost.getMaxTaxAmount(), factor10, factorCost)) {
  669. factor10.setNeedMatch(true);
  670. factor10.setMinRangeVal((double) factorCost.getMinTaxAmount());
  671. factor10.setMaxRangeVal((double) factorCost.getMaxTaxAmount());
  672. } else {
  673. //如果方案中未录入,则不校验该项因子
  674. factor10.setNeedMatch(false);
  675. }
  676. resultMqp.put(10, factor10);
  677. //--------------------因子处理分割线----------------------------------
  678. FeeFactorInfoDto factor11 = new FeeFactorInfoDto();
  679. factor11.setFactorName("三者保额区间");
  680. factor11.setMatchType("3");
  681. factor11.setMatchSequence(11);
  682. if (checkFactorConfigWithArea(factorCost.getMinTheThreePremium(), factorCost.getMaxTheThreePremium(), factor11, factorCost)) {
  683. factor11.setNeedMatch(true);
  684. factor11.setMinRangeVal((double) factorCost.getMinTheThreePremium() * 10000);
  685. factor11.setMaxRangeVal((double) factorCost.getMaxTheThreePremium() * 10000);
  686. } else {
  687. //如果方案中未录入,则不校验该项因子
  688. factor11.setNeedMatch(false);
  689. }
  690. resultMqp.put(11, factor11);
  691. //--------------------因子处理分割线----------------------------------
  692. FeeFactorInfoDto factor12 = new FeeFactorInfoDto();
  693. factor12.setFactorName("随车产品保费区间");
  694. factor12.setMatchType("3");
  695. factor12.setMatchSequence(12);
  696. if (checkFactorConfigWithArea(factorCost.getMinOnboardProductsPremium(), factorCost.getMaxOnboardProductsPremium(), factor12,
  697. factorCost)) {
  698. factor12.setNeedMatch(true);
  699. factor12.setMinRangeVal((double) factorCost.getMinOnboardProductsPremium());
  700. factor12.setMaxRangeVal((double) factorCost.getMaxOnboardProductsPremium());
  701. } else {
  702. //如果方案中未录入,则不校验该项因子
  703. factor12.setNeedMatch(false);
  704. }
  705. resultMqp.put(12, factor12);
  706. //--------------------因子处理分割线----------------------------------
  707. FeeFactorInfoDto factor13 = new FeeFactorInfoDto();
  708. factor13.setFactorName("商业险折扣区间");
  709. factor13.setMatchType("3");
  710. factor13.setMatchSequence(13);
  711. if (checkFactorConfigWithArea(factorCost.getMinCommercialInsuranceDiscount(), factorCost.getMaxCommercialInsuranceDiscount(),
  712. factor13, factorCost)) {
  713. factor13.setNeedMatch(true);
  714. factor13.setMinRangeVal((double) factorCost.getMinCommercialInsuranceDiscount());
  715. factor13.setMaxRangeVal((double) factorCost.getMaxCommercialInsuranceDiscount());
  716. } else {
  717. //如果方案中未录入,则不校验该项因子
  718. factor13.setNeedMatch(false);
  719. }
  720. resultMqp.put(13, factor13);
  721. //--------------------因子处理分割线----------------------------------
  722. FeeFactorInfoDto factor14 = new FeeFactorInfoDto();
  723. factor14.setFactorName("交强险折扣区间");
  724. factor14.setMatchType("3");
  725. factor14.setMatchSequence(14);
  726. if (checkFactorConfigWithArea(factorCost.getMinCompulsoryInsuranceDiscount(), factorCost.getMaxCompulsoryInsuranceDiscount(),
  727. factor14, factorCost)) {
  728. factor14.setNeedMatch(true);
  729. factor14.setMinRangeVal(factorCost.getMinCompulsoryInsuranceDiscount());
  730. factor14.setMaxRangeVal(factorCost.getMaxCompulsoryInsuranceDiscount());
  731. } else {
  732. //如果方案中未录入,则不校验该项因子
  733. factor14.setNeedMatch(false);
  734. }
  735. resultMqp.put(14, factor14);
  736. //--------------------因子处理分割线----------------------------------
  737. FeeFactorInfoDto factor15 = new FeeFactorInfoDto();
  738. factor15.setFactorName("保司评分区间");
  739. factor15.setMatchType("3");
  740. factor15.setMatchSequence(15);
  741. if (checkFactorConfigWithArea(factorCost.getMinScore(), factorCost.getMaxScore(), factor15, factorCost)) {
  742. factor15.setNeedMatch(true);
  743. factor15.setMinRangeVal((double) factorCost.getMinScore());
  744. factor15.setMaxRangeVal((double) factorCost.getMaxScore());
  745. } else {
  746. //如果方案中未录入,则不校验该项因子
  747. factor15.setNeedMatch(false);
  748. }
  749. resultMqp.put(15, factor15);
  750. //--------------------因子处理分割线----------------------------------
  751. FeeFactorInfoDto factor16 = new FeeFactorInfoDto();
  752. factor16.setFactorName("预期赔付率区间");
  753. factor16.setMatchType("3");
  754. factor16.setMatchSequence(16);
  755. if (checkFactorConfigWithArea(factorCost.getMinLossRation(), factorCost.getMaxLossRation(), factor16, factorCost)) {
  756. factor16.setNeedMatch(true);
  757. factor16.setMinRangeVal((double) factorCost.getMinLossRation());
  758. factor16.setMaxRangeVal((double) factorCost.getMaxLossRation());
  759. } else {
  760. //如果方案中未录入,则不校验该项因子
  761. factor16.setNeedMatch(false);
  762. }
  763. resultMqp.put(16, factor16);
  764. //--------------------因子处理分割线----------------------------------
  765. FeeFactorInfoDto factor17 = new FeeFactorInfoDto();
  766. factor17.setFactorName("车牌号地区");
  767. factor17.setMatchType("2");
  768. factor17.setMatchSequence(17);
  769. if (factorCost.getLicenseNumber() != null && !"".equals(factorCost.getLicenseNumber())) {
  770. factor17.setNeedMatch(true);
  771. String matchStr = factorCost.getLicenseNumber();
  772. //考虑是否含暂未上牌标志
  773. if (factorCost.getContainNoLicense() != null && "1".equals(factorCost.getContainNoLicense())) {
  774. matchStr = matchStr + ",暂未上牌";
  775. }
  776. factor17.setMultipleSelectVal(matchStr);
  777. } else {
  778. //如果方案中未录入,则不校验该项因子
  779. factor17.setNeedMatch(false);
  780. }
  781. resultMqp.put(17, factor17);
  782. //--------------------因子处理分割线----------------------------------
  783. FeeFactorInfoDto factor18 = new FeeFactorInfoDto();
  784. factor18.setMatchType("4");
  785. factor18.setMatchSequence(18);
  786. boolean driverCheckFlag = true;//司机保额是否需要校验
  787. boolean passengerCheckFlag = true;//乘客保额是否需要校验
  788. //临时赋值,下面方法中使用需要区分
  789. factor18.setFactorName("人员司机险保额");
  790. if (checkFactorConfigWithArea(factorCost.getMinDriverAmount(), factorCost.getMaxDriverAmount(), factor18, factorCost)) {
  791. factor18.setDriverMinRangeVal(factorCost.getMinDriverAmount() * 10000);
  792. factor18.setDriverMaxRangeVal(factorCost.getMaxDriverAmount() * 10000);
  793. } else {
  794. driverCheckFlag = false;
  795. }
  796. //临时赋值,下面方法中使用需要区分
  797. factor18.setFactorName("人员乘客险保额");
  798. if (checkFactorConfigWithArea(factorCost.getMinPassengerAmount(), factorCost.getMaxPassengerAmount(), factor18, factorCost)) {
  799. factor18.setPassengerMinRangeVal(factorCost.getMinPassengerAmount() * 10000);
  800. factor18.setPassengerMaxRangeVal(factorCost.getMaxPassengerAmount() * 10000);
  801. } else {
  802. passengerCheckFlag = false;
  803. }
  804. //最终给因子赋值
  805. factor18.setFactorName("司乘险保额");
  806. factor18.setDriverIsNeedMatch(driverCheckFlag);
  807. factor18.setPassengerIsNeedMatch(passengerCheckFlag);
  808. //司机、乘客都不需要校验时,不校验该因子
  809. if (!driverCheckFlag && !passengerCheckFlag) {
  810. factor18.setNeedMatch(false);
  811. } else {//需要校验时,需要考虑俩者关联关系
  812. if (factorCost.getDriverPassengerRelation() != null && !"".equals(factorCost.getDriverPassengerRelation())) {
  813. //赋值该因子参数关联关系
  814. factor18.setDriverPassengerRelation(factorCost.getDriverPassengerRelation());
  815. factor18.setNeedMatch(true);
  816. } else {
  817. throw new SystemException("协议ID:" + factorCost.getAgreementId() + " 方案序号:" + factorCost.getId() + " 费用因子:" + factor18.getFactorName() + "关联关系配置有问题,请检查!");
  818. }
  819. }
  820. resultMqp.put(18, factor18);
  821. //--------------------因子处理分割线----------------------------------
  822. FeeFactorInfoDto factor19 = new FeeFactorInfoDto();
  823. factor19.setFactorName("被保人年龄");
  824. factor19.setMatchType("3");
  825. factor19.setMatchSequence(19);
  826. if (checkFactorConfigWithArea(factorCost.getMinInsureAge(), factorCost.getMaxInsureAge(), factor19, factorCost)) {
  827. factor19.setNeedMatch(true);
  828. factor19.setMinRangeVal((double) factorCost.getMinInsureAge());
  829. factor19.setMaxRangeVal((double) factorCost.getMaxInsureAge());
  830. } else {
  831. //如果方案中未录入,则不校验该项因子
  832. factor19.setNeedMatch(false);
  833. }
  834. resultMqp.put(19, factor19);
  835. //--------------------因子处理分割线----------------------------------
  836. FeeFactorInfoDto factor20 = new FeeFactorInfoDto();
  837. factor20.setFactorName("车主年龄");
  838. factor20.setMatchType("3");
  839. factor20.setMatchSequence(20);
  840. if (checkFactorConfigWithArea(factorCost.getMinCarOwnerAge(), factorCost.getMaxCarOwnerAge(), factor20, factorCost)) {
  841. factor20.setNeedMatch(true);
  842. factor20.setMinRangeVal((double) factorCost.getMinCarOwnerAge());
  843. factor20.setMaxRangeVal((double) factorCost.getMaxCarOwnerAge());
  844. } else {
  845. //如果方案中未录入,则不校验该项因子
  846. factor20.setNeedMatch(false);
  847. }
  848. resultMqp.put(20, factor20);
  849. //--------------------因子处理分割线----------------------------------
  850. FeeFactorInfoDto factor21 = new FeeFactorInfoDto();
  851. boolean thirdMCheckFlag = true;//三者医保外用保额是否需要校验
  852. boolean driverMCheckFlag = true;//司机医保外用保额是否需要校验
  853. boolean passengerMCheckFlag = true;//乘客医保外用保额是否需要校验
  854. boolean anyMCheckFlag = true;//任意医保外用保额是否需要校验
  855. factor21.setMatchType("5");
  856. factor21.setMatchSequence(21);
  857. //三者
  858. if (factorCost.getThirdMedicalAmount() != null && factorCost.getThirdMedicalAmount() != 0) {
  859. factor21.setThirdMedicalAmountVal(factorCost.getThirdMedicalAmount() * 10000);
  860. } else {
  861. factor21.setThirdMedicalAmountVal(null);
  862. thirdMCheckFlag = false;
  863. }
  864. //司机
  865. if (factorCost.getDriverMedicalAmount() != null && factorCost.getDriverMedicalAmount() != 0) {
  866. factor21.setDriverMedicalAmountVal(factorCost.getDriverMedicalAmount() * 10000);
  867. } else {
  868. factor21.setDriverMedicalAmountVal(null);
  869. driverMCheckFlag = false;
  870. }
  871. //乘客
  872. if (factorCost.getPassengerMedicalAmount() != null && factorCost.getPassengerMedicalAmount() != 0) {
  873. factor21.setPassengerMedicalAmountVal(factorCost.getPassengerMedicalAmount() * 10000);
  874. } else {
  875. factor21.setPassengerMedicalAmountVal(null);
  876. passengerMCheckFlag = false;
  877. }
  878. //任意
  879. if (factorCost.getAnyMedicalAmount() != null && factorCost.getAnyMedicalAmount() != 0) {
  880. factor21.setAnyMedicalAmountVal(factorCost.getAnyMedicalAmount() * 10000);
  881. } else {
  882. factor21.setAnyMedicalAmountVal(null);
  883. anyMCheckFlag = false;
  884. }
  885. //最终给因子赋值
  886. factor21.setFactorName("医保外用保额");
  887. if (!thirdMCheckFlag && !driverMCheckFlag && !passengerMCheckFlag && !anyMCheckFlag) {//如果四项都没有配置时,不需要校验
  888. factor21.setNeedMatch(false);
  889. } else {
  890. factor21.setNeedMatch(true);
  891. }
  892. resultMqp.put(21, factor21);
  893. //--------------------因子处理分割线----------------------------------
  894. return resultMqp;
  895. }
  896. /**
  897. * 判断区间类因子是否需要匹配
  898. *
  899. * @param minVal
  900. * @param maxVal
  901. * @param factorInfoDto
  902. * @param productCosts
  903. * @return
  904. */
  905. private boolean checkFactorConfigWithArea(Integer minVal, Integer maxVal, FeeFactorInfoDto factorInfoDto,
  906. PtlAgreementProductCosts productCosts) {
  907. boolean result = false; //默认不需要匹配
  908. if (minVal != null && maxVal != null) {
  909. if (minVal == 0 && maxVal == 0) {//初始化没有配置的时候,全部默认的0,这种不需要匹配
  910. result = false;
  911. } else {
  912. if (minVal <= maxVal) {
  913. result = true;
  914. } else {
  915. throw new SystemException("协议ID:" + productCosts.getAgreementId() + " 方案序号:" + productCosts.getId() + " 费用因子:" + factorInfoDto.getFactorName() + "配置有问题,请检查!");
  916. }
  917. }
  918. } else if (minVal != null && maxVal == null) {
  919. throw new SystemException("协议ID:" + productCosts.getAgreementId() + " 方案序号:" + productCosts.getId() + " 费用因子:" + factorInfoDto.getFactorName() + "配置有问题,请检查!");
  920. } else if (minVal == null && maxVal != null) {
  921. throw new SystemException("协议ID:" + productCosts.getAgreementId() + " 方案序号:" + productCosts.getId() + " 费用因子:" + factorInfoDto.getFactorName() + "配置有问题,请检查!");
  922. }
  923. return result;
  924. }
  925. /**
  926. * 判断区间类因子是否需要匹配
  927. *
  928. * @param minVal
  929. * @param maxVal
  930. * @param factorInfoDto
  931. * @param productCosts
  932. * @return
  933. */
  934. private boolean checkFactorConfigWithArea(Double minVal, Double maxVal, FeeFactorInfoDto factorInfoDto,
  935. PtlAgreementProductCosts productCosts) {
  936. boolean result = false; //默认不需要匹配
  937. if (minVal != null && maxVal != null) {
  938. if (minVal == 0 && maxVal == 0) {//初始化没有配置的时候,全部默认的0,这种不需要匹配
  939. result = false;
  940. } else {
  941. if (minVal <= maxVal) {
  942. result = true;
  943. } else {
  944. throw new SystemException("协议ID:" + productCosts.getAgreementId() + " 方案序号:" + productCosts.getId() + " 费用因子:" + factorInfoDto.getFactorName() + "配置有问题,请检查!");
  945. }
  946. }
  947. } else if (minVal != null && maxVal == null) {
  948. throw new SystemException("协议ID:" + productCosts.getAgreementId() + " 方案序号:" + productCosts.getId() + " 费用因子:" + factorInfoDto.getFactorName() + "配置有问题,请检查!");
  949. } else if (minVal == null && maxVal != null) {
  950. throw new SystemException("协议ID:" + productCosts.getAgreementId() + " 方案序号:" + productCosts.getId() + " 费用因子:" + factorInfoDto.getFactorName() + "配置有问题,请检查!");
  951. }
  952. return result;
  953. }
  954. //----------------------------------------------分割线
  955. public FeeSchemeReqDto getFeeSchemeInfo(BaseQuoteInfoVo quoteInfoVo, QuoteRespVo quoteRespVo, String agreementId, String productId) {
  956. PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
  957. CarInfoVo carInfoVo = quoteInfoVo.getCarInfo();
  958. List<KindInfoVo> kindList = quoteInfoVo.getKindList();
  959. String thirdPartyInsurance = "";
  960. String driverAmount = "";
  961. String passengerAmount = "";
  962. String thirdMedicalAmount = "";
  963. String driverMedicalAmount = "";
  964. String passengerMedicalAmount = "";
  965. if (kindList != null && kindList.size() > 0) {
  966. for (KindInfoVo kindInfoVo : kindList) {
  967. //三者保额
  968. if ("B".equals(kindInfoVo.getKindCode())) {
  969. thirdPartyInsurance = String.valueOf(kindInfoVo.getAmount());
  970. }
  971. //司机保额
  972. if ("D3".equals(kindInfoVo.getKindCode())) {
  973. driverAmount = String.valueOf(kindInfoVo.getAmount());
  974. }
  975. //乘客保额
  976. if ("D4".equals(kindInfoVo.getKindCode())) {
  977. int quantity = Integer.parseInt(carInfoVo.getSeatCount()) - 1;
  978. passengerAmount = String.valueOf(kindInfoVo.getUnitAmount() * quantity);
  979. }
  980. //三者医保外用
  981. if ("SY_FJ_YBW1".equals(kindInfoVo.getKindCode())) {
  982. thirdMedicalAmount = String.valueOf(kindInfoVo.getAmount());
  983. }
  984. //司机医保外用
  985. if ("SY_FJ_YBW3".equals(kindInfoVo.getKindCode())) {
  986. driverMedicalAmount = String.valueOf(kindInfoVo.getAmount());
  987. }
  988. //乘客医保外用
  989. if ("SY_FJ_YBW2".equals(kindInfoVo.getKindCode())) {
  990. int quantity = Integer.parseInt(carInfoVo.getSeatCount()) - 1;
  991. passengerMedicalAmount = String.valueOf(kindInfoVo.getUnitAmount() * quantity);
  992. }
  993. }
  994. }
  995. FeeSchemeReqDto feeSchemeReqDto = new FeeSchemeReqDto();
  996. String isTransfer = "0";
  997. String isNewCar = "0";
  998. String isRenewal = "0";
  999. String useNature = "家庭自用";
  1000. String carType = "客车";
  1001. String isNewEnergy = "0";
  1002. feeSchemeReqDto.setBusType(productId);//"业务类型:单交0330、单商034001、单三034002、交三0330034002、交商0330034001"
  1003. feeSchemeReqDto.setAgreementId(agreementId);//协议ID
  1004. if (carInfoVo.isTransferFlag()) {
  1005. isTransfer = "1";
  1006. }
  1007. feeSchemeReqDto.setIsTransfer(isTransfer);//是否过户 1是 0否"
  1008. //新旧车判断逻辑,初登日期小于起保日期加9个月
  1009. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  1010. LocalDate currentDate = LocalDate.now();
  1011. //有交强日期时取交强,没有交强时取商业
  1012. if (StringUtils.isNotEmpty(quoteRespVo.getStartDateJq())) {
  1013. try {
  1014. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  1015. Date startDate = sdf.parse(quoteRespVo.getStartDateJq());
  1016. String jqStartDate = sdf.format(startDate);
  1017. currentDate = LocalDate.parse(jqStartDate, formatter);
  1018. } catch (Exception e) {
  1019. }
  1020. } else if (StringUtils.isNotEmpty(quoteRespVo.getStartDateSy())) {
  1021. try {
  1022. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  1023. Date startDate = sdf.parse(quoteRespVo.getStartDateSy());
  1024. String jqStartDate = sdf.format(startDate);
  1025. currentDate = LocalDate.parse(jqStartDate, formatter);
  1026. } catch (Exception e) {
  1027. }
  1028. }
  1029. if (StringUtils.isNotEmpty(carInfoVo.getRegisterDate())) {
  1030. LocalDate registerDate = LocalDate.parse(carInfoVo.getRegisterDate(), formatter).plusMonths(9);
  1031. if (currentDate.isBefore(registerDate)) {
  1032. isNewCar = "1";
  1033. }
  1034. }
  1035. List<PtlNewCarJudgeRules> ptlNewCarJudgeRulesList =
  1036. ptlNewCarJudgeRulesService.getByCompanyId(ptlAgreementAttribution.getInsCompanyId());
  1037. if (ptlNewCarJudgeRulesList != null && !ptlNewCarJudgeRulesList.isEmpty()) {
  1038. PtlNewCarJudgeRules ptlNewCarJudgeRules = ptlNewCarJudgeRulesList.get(0);
  1039. if ("月".equals(ptlNewCarJudgeRules.getUnitTypeCode())) {
  1040. LocalDate registerDate =
  1041. LocalDate.parse(carInfoVo.getRegisterDate(), formatter).plusMonths(Integer.parseInt(ptlNewCarJudgeRules.getUnitTypeValue()));
  1042. if (currentDate.isBefore(registerDate)) {
  1043. isNewCar = "1";
  1044. }
  1045. } else {
  1046. LocalDate registerDate =
  1047. LocalDate.parse(carInfoVo.getRegisterDate(), formatter).plusDays(Integer.parseInt(ptlNewCarJudgeRules.getUnitTypeValue()));
  1048. if (currentDate.isBefore(registerDate)) {
  1049. isNewCar = "1";
  1050. }
  1051. }
  1052. }
  1053. feeSchemeReqDto.setIsNewCar(isNewCar);//是否新车 1是 0否
  1054. if ("1".equals(carInfoVo.getPowertype()) || "2".equals(carInfoVo.getPowertype()) || "3".equals(carInfoVo.getPowertype())) {
  1055. isNewEnergy = "1";
  1056. }
  1057. feeSchemeReqDto.setIsNewEnergy(isNewEnergy);//是否新能源 1是 0否
  1058. feeSchemeReqDto.setIsRenewal("0");//是否续保 1是 0否 续保取值有争议 默认送否 暂时搁置
  1059. //页面要素及中煤交互请求返参没有,先默认写死
  1060. if ("A0".equals(carInfoVo.getCimodelclass())) {
  1061. carType = "客车";
  1062. }
  1063. feeSchemeReqDto.setVehicleCategory(carType);//车辆大类: 客车、货车、特种车、挂车、摩托车、拖拉机
  1064. if ("8A".equals(carInfoVo.getCarnature())) {
  1065. useNature = "家庭自用";
  1066. }
  1067. feeSchemeReqDto.setUseNature(useNature);//使用性质: 营业出租、营业租赁、营业公交、营业客运、营业货运、营业旅游、家庭自用、非营业机关事业、非营业企业、非营业个人
  1068. feeSchemeReqDto.setSeatNum(String.valueOf(carInfoVo.getSeatCount()));//座位数 大概率准
  1069. feeSchemeReqDto.setPurchasePrice(carInfoVo.getPurchasePrice());//新车购置价 可能再次新车筛选的时候送保司和页面带入有差异
  1070. feeSchemeReqDto.setApprovedLoadCapacity(String.valueOf(carInfoVo.getLimitLoad()));//核定载质量 可能再次新车筛选的时候送保司和页面带入有差异
  1071. feeSchemeReqDto.setJqPremium(String.valueOf(quoteRespVo.getJqPremium()));//交强保费
  1072. feeSchemeReqDto.setSyPremium(String.valueOf(quoteRespVo.getSyPremium()));//商业保费
  1073. feeSchemeReqDto.setSumPayTax(String.valueOf(quoteRespVo.getTaxAmount()));//车船税金额
  1074. feeSchemeReqDto.setThirdPartyInsurance(thirdPartyInsurance);//三者险保额 准
  1075. feeSchemeReqDto.setNoCarPremium(String.valueOf(quoteRespVo.getJyPremium()));//随车产品保费
  1076. feeSchemeReqDto.setSyDiscount(quoteRespVo.getSyAdjustRate());//商业险折扣
  1077. feeSchemeReqDto.setJqDiscount(quoteRespVo.getJqAdjustRate());//交强险折扣
  1078. feeSchemeReqDto.setInsuranceScore(quoteRespVo.getILogPreUdwMess());//保司评分
  1079. feeSchemeReqDto.setExpectedLossRate(String.valueOf(quoteRespVo.getLossRation()));//预期赔付率
  1080. if (carInfoVo.getLicenseNo() != null && !"".equals(carInfoVo.getLicenseNo()) && !"暂未上牌".equals(carInfoVo.getLicenseNo())) {
  1081. feeSchemeReqDto.setLicenseNo(carInfoVo.getLicenseNo().substring(0, 2));//车牌号
  1082. } else {
  1083. feeSchemeReqDto.setLicenseNo("暂未上牌");//车牌号
  1084. }
  1085. feeSchemeReqDto.setDriverAmount(driverAmount);//人员司机险保额 准
  1086. feeSchemeReqDto.setPassengerAmount(passengerAmount);//人员乘客险保额 准
  1087. feeSchemeReqDto.setThirdMedicalAmount(thirdMedicalAmount);//三者医保外用 准
  1088. feeSchemeReqDto.setDriverMedicalAmount(driverMedicalAmount);//司机医保外用 准
  1089. feeSchemeReqDto.setPassengerMedicalAmount(passengerMedicalAmount);//乘客医保外用 准
  1090. feeSchemeReqDto.setInsureAge(quoteInfoVo.getInsuredPersonInfo().getAge());//被保人年龄
  1091. feeSchemeReqDto.setCarOwnerAge(quoteInfoVo.getOwnerInfo().getAge());//车主年龄
  1092. return feeSchemeReqDto;
  1093. }
  1094. public void dealFeeOrderInfo(BaseQuoteInfoVo quoteInfoVo, QuoteRespVo quoteRespVo, String agreementId, String businessNo) {
  1095. BigDecimal jqNoTaxPremium = new BigDecimal(0);
  1096. BigDecimal syNoTaxPremium = new BigDecimal(0);
  1097. InsOrders insOrders = insOrdersService.getById(quoteRespVo.getOrderno());
  1098. List<AccidentResponseVo> accidentList = quoteRespVo.getAccident();
  1099. /*BigDecimal accidentActualPremium = new BigDecimal(0);
  1100. for(AccidentResponseVo accidentResponseVo: accidentList){
  1101. accidentActualPremium = new BigDecimal(accidentResponseVo.getActualPremium());
  1102. }*/
  1103. FeeSchemeReqDto feeSchemeReqDto = this.getFeeSchemeInfo(quoteInfoVo, quoteRespVo, agreementId, insOrders.getProductid());
  1104. matchTheUndwrtRules(feeSchemeReqDto);
  1105. FeeSchemeResDto feeSchemeResDto = this.matchTheAppropriateFees(feeSchemeReqDto);
  1106. InsFeeOrder insFeeOrder = new InsFeeOrder(feeSchemeReqDto, feeSchemeResDto, businessNo);
  1107. PtlAgreement agreement = ptlAgreementService.getById(agreementId);
  1108. //先通过含税保费计算出不含税保费 公式 总保费/(1+增值税率) 目前增值税率是0.06
  1109. if (insFeeOrder.getJqPremium().doubleValue() > 0) {
  1110. //默认用含税保费计算
  1111. jqNoTaxPremium = insFeeOrder.getJqPremium();
  1112. //如果协议中配置为不含税结算时,计算不含税保费
  1113. if (StringUtils.isNotEmpty(agreement.getWithTax()) && "否".equals(agreement.getWithTax())) {
  1114. jqNoTaxPremium = insFeeOrder.getJqPremium().divide(new BigDecimal(1 + 0.06), BigDecimal.ROUND_HALF_UP, 2);
  1115. }
  1116. insFeeOrder.setJqNoTaxPremium(jqNoTaxPremium);
  1117. //交强险总费用
  1118. insFeeOrder.setJqCostsPremiums(getPremium(jqNoTaxPremium, insFeeOrder.getJqCostsProportion()));
  1119. //监管费比例
  1120. if ("1".equals(feeSchemeReqDto.getIsNewCar())) {
  1121. insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getJqNewCarCostsProportion()));
  1122. } else if ("0".equals(feeSchemeReqDto.getIsNewCar())) {
  1123. insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getJqOldCarCostsProportion()));
  1124. } else {
  1125. insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(0));
  1126. }
  1127. //监管费
  1128. insFeeOrder.setJqSuperviseCostsPremiums(getPremium(jqNoTaxPremium, insFeeOrder.getJqSuperviseCostsProportion()));
  1129. //溢出费比例 先搁置放0
  1130. insFeeOrder.setJqSpilloverProportion(new BigDecimal(feeSchemeResDto.getJqSpilloverProportion()));
  1131. //溢出费 先搁置放0
  1132. insFeeOrder.setJqSpilloverPremiums(getPremium(jqNoTaxPremium, insFeeOrder.getJqSpilloverProportion()));
  1133. }
  1134. if (insFeeOrder.getSyPremium().doubleValue() > 0) {
  1135. //默认用含税保费计算
  1136. syNoTaxPremium = insFeeOrder.getSyPremium();
  1137. //如果协议中配置为不含税结算时,计算不含税保费
  1138. if (StringUtils.isNotEmpty(agreement.getWithTax()) && "否".equals(agreement.getWithTax())) {
  1139. syNoTaxPremium = insFeeOrder.getSyPremium().divide(BigDecimal.valueOf(1 + 0.06), BigDecimal.ROUND_HALF_UP, 2);
  1140. }
  1141. insFeeOrder.setSyNoTaxPremium(syNoTaxPremium);
  1142. //商业险总费用
  1143. insFeeOrder.setSyCostsPremiums(getPremium(syNoTaxPremium, insFeeOrder.getSyCostsProportion()));
  1144. //监管费比例
  1145. if ("1".equals(feeSchemeReqDto.getIsNewCar())) {
  1146. insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getSyNewCarCostsProportion()));
  1147. } else if ("0".equals(feeSchemeReqDto.getIsNewCar())) {
  1148. insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getSyOldCarCostsProportion()));
  1149. } else {
  1150. insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(0));
  1151. }
  1152. //监管费
  1153. insFeeOrder.setSySuperviseCostsPremiums(getPremium(syNoTaxPremium, insFeeOrder.getSySuperviseCostsProportion()));
  1154. //溢出费比例 先搁置放0
  1155. insFeeOrder.setSySpilloverProportion(new BigDecimal(feeSchemeResDto.getSySpilloverProportion()));
  1156. //溢出费 先搁置放0
  1157. insFeeOrder.setSySpilloverPremiums(getPremium(syNoTaxPremium, insFeeOrder.getSySpilloverProportion()));
  1158. }
  1159. if (jqNoTaxPremium.doubleValue() > 0 || syNoTaxPremium.doubleValue() > 0) {
  1160. BigDecimal totalNoTaxPremium = jqNoTaxPremium.add(syNoTaxPremium);
  1161. SysUser sysUser = sysUserService.findByUserId(insOrders.getUserid());
  1162. /**
  1163. * 机构管理费比例逻辑
  1164. * 当前出单员的机构编码找他的上一级就是五级
  1165. * 机构层级划分方式
  1166. * 99 总公司 一级
  1167. * 9914山西分公司 二级
  1168. * 991401太原中支 三级
  1169. * 99140105小店中支 四级
  1170. * 9914010501 营销服务部 五级
  1171. * 1团队 无机构层级
  1172. */
  1173. //判断出单员归属机构层级
  1174. String parentId = sysUser.getDeptId();
  1175. String comlevel = "";
  1176. do {//循环操作
  1177. SysDept sysDeptTemp = sysDeptService.getById(parentId);
  1178. if (sysDeptTemp != null && StringUtils.isNotEmpty(sysDeptTemp.getParentId())) {
  1179. parentId = sysDeptTemp.getParentId();
  1180. } else {
  1181. break;
  1182. }
  1183. if (StringUtils.isEmpty(sysDeptTemp.getComlevel())) {
  1184. continue;
  1185. } else {
  1186. comlevel = sysDeptTemp.getComlevel();
  1187. }
  1188. //当机构层级为五级的时候,获取所有的机构费用比例
  1189. if (sysDeptTemp != null && "5".equals(sysDeptTemp.getComlevel())) {
  1190. //五级机构管理费用比例
  1191. insFeeOrder.setFifthDeptProportion(BigDecimal.valueOf(sysDeptTemp.getManagementFeeFifth()));
  1192. insFeeOrder.setFifthDeptPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getFifthDeptProportion()));
  1193. //四级机构管理费用比例
  1194. insFeeOrder.setForthDeptProportion(BigDecimal.valueOf(sysDeptTemp.getManagementFeeForth()));
  1195. insFeeOrder.setForthDeptPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getForthDeptProportion()));
  1196. //三级机构管理费用比例
  1197. insFeeOrder.setThirdDeptProportion(BigDecimal.valueOf(sysDeptTemp.getManagementFeeThird()));
  1198. insFeeOrder.setThirdDeptPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getThirdDeptProportion()));
  1199. //二级机构管理费用比例
  1200. insFeeOrder.setSecondDeptProportion(BigDecimal.valueOf(sysDeptTemp.getManagementFeeSecond()));
  1201. insFeeOrder.setSecondDeptPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getSecondDeptProportion()));
  1202. //一级机构管理费用比例
  1203. insFeeOrder.setFirstDeptProportion(BigDecimal.valueOf(sysDeptTemp.getManagementFee()));
  1204. insFeeOrder.setFirstDeptPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getFirstDeptProportion()));
  1205. //取到第一层级时结束
  1206. break;
  1207. }
  1208. } while (!"1".equals(comlevel));
  1209. //一级分销比例 推荐人
  1210. //二级分销比例
  1211. //三级分销比例
  1212. /**
  1213. * 分销一级、二级、三级存值取团队配置的分销佣金比例,若该团队走三级分销模式,当前出单员出单时,跟单的分销取值方式为:
  1214. * 根据出单员的推荐人向上找三级,若可以找到,则跟单存一、二、三分销比例;
  1215. * 若向上只能找到一级或者二级,则跟单存一级或者一级、二级
  1216. * 比如 A 1 B 2 C 3 D 若D出单 则给 C 3个 B 2个 A 1个;C出单给 B 3个 A 2个
  1217. * 第一步,先判断团队配置的分销模式
  1218. * 第二步,根据分销模式找上级存值相应分销比例
  1219. * 第三步,仅有一个上级的情况分销比例存啥
  1220. */
  1221. List<EsmRetail> esmRetailList = esmRetailService.selectList(" where t.deptid=? and t.status = '1' ",
  1222. new Object[]{sysUser.getDeptId()});
  1223. if (esmRetailList != null && !esmRetailList.isEmpty()) {
  1224. EsmRetail esmRetail = esmRetailList.get(0);
  1225. if (esmRetail != null) {
  1226. int cycleIndex = 0;
  1227. if ("3".equals(esmRetail.getRetailtype())) {//团队配置了三级分销模式
  1228. cycleIndex = 3;
  1229. } else if ("2".equals(esmRetail.getRetailtype())) {//团队配置了二级分销模式
  1230. cycleIndex = 2;
  1231. } else if ("1".equals(esmRetail.getRetailtype())) {//团队配置了一级分销模式
  1232. cycleIndex = 1;
  1233. } else if ("0".equals(esmRetail.getRetailtype())) {//团队没有配置分销模式
  1234. cycleIndex = 0;
  1235. }
  1236. //利用当前工号,循环向上找推荐人
  1237. String userId = sysUser.getId();
  1238. int breakCycle = 99999999;
  1239. for (int i = 0; i <= cycleIndex; i++) {
  1240. EsmUserReferrer userReferrer = esmUserReferrerService.getById(userId);
  1241. if (userReferrer.getReferrerId().equals(userReferrer.getId())) {//团队长,没有上级
  1242. //跳出循环
  1243. breakCycle = i;
  1244. break;
  1245. } else {
  1246. userId = userReferrer.getReferrerId();
  1247. }
  1248. }
  1249. //breakCycle是3,当前工号的上级的上级的上级就是团队长
  1250. //breakCycle是2,当前工号的上级的上级就是团队长
  1251. //breakCycle是1,当前工号的上级就是团队长
  1252. //breakCycle是0,当前工号就是团队长
  1253. if ("3".equals(esmRetail.getRetailtype())) {//团队配置了三级分销模式
  1254. if (breakCycle == 99999999 || breakCycle == 3) {
  1255. insFeeOrder.setFirstRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate1()));
  1256. insFeeOrder.setSecondRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate2()));
  1257. insFeeOrder.setThirdRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate3()));
  1258. } else if (breakCycle == 2) {
  1259. insFeeOrder.setSecondRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate2()));
  1260. insFeeOrder.setThirdRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate3()));
  1261. } else if (breakCycle == 1) {
  1262. insFeeOrder.setThirdRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate3()));
  1263. }
  1264. } else if ("2".equals(esmRetail.getRetailtype())) {//团队配置了二级分销模式
  1265. if (breakCycle == 99999999 || breakCycle == 3 || breakCycle == 2) {
  1266. insFeeOrder.setFirstRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate1()));
  1267. insFeeOrder.setSecondRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate2()));
  1268. } else if (breakCycle == 1) {
  1269. insFeeOrder.setSecondRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate2()));
  1270. }
  1271. } else if ("1".equals(esmRetail.getRetailtype())) {//团队配置了一级分销模式
  1272. if (breakCycle == 99999999 || breakCycle == 3 || breakCycle == 2 || breakCycle == 1) {
  1273. insFeeOrder.setFirstRetailProportion(BigDecimal.valueOf(esmRetail.getDisrate1()));
  1274. }
  1275. }
  1276. insFeeOrder.setFirstRetailPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getFirstRetailProportion()));
  1277. insFeeOrder.setSecondRetailPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getSecondRetailProportion()));
  1278. insFeeOrder.setThirdRetailPremiums(getPremium(totalNoTaxPremium, insFeeOrder.getThirdRetailProportion()));
  1279. }
  1280. }
  1281. }
  1282. insFeeOrderService.insertCompanyAndOrders(insFeeOrder);
  1283. }
  1284. @Override
  1285. public QueryOrderFeeVo queryFeeOrderInfo(String companyId) {
  1286. InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getInsFeeOrderNewByCompanyId(companyId);
  1287. return null;
  1288. }
  1289. public void compareAndUpdateFeeOrderInfo(String insOrderNo, String jqCostsProportionStr, String syCostsProportionStr, String dealUser) {
  1290. InsFeeOrder insFeeOrder = insFeeOrderService.getByInsOrderNo(insOrderNo);
  1291. InsCopyFeeOrder insCopyFeeOrder = new InsCopyFeeOrder(insFeeOrder, insOrderNo, dealUser);
  1292. boolean updateFlag = false;
  1293. if (insFeeOrder.getJqPremium().doubleValue() > 0 && StringUtils.isNotEmpty(jqCostsProportionStr)) {
  1294. BigDecimal JqCostsProportion = new BigDecimal(jqCostsProportionStr);
  1295. //比较传入的交强总费用比例是否与原费用比例相等,不相等进行更新
  1296. if (JqCostsProportion.compareTo(insFeeOrder.getJqCostsProportion()) != 0) {
  1297. updateFlag = true;
  1298. //交强总费用比例
  1299. insFeeOrder.setJqCostsProportion(JqCostsProportion);
  1300. //交强险总费用
  1301. insFeeOrder.setJqCostsPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getJqCostsProportion()));
  1302. insCopyFeeOrder.setJqCostsProportion(insFeeOrder.getJqCostsProportion());
  1303. insCopyFeeOrder.setJqCostsPremiums(insFeeOrder.getJqCostsPremiums());
  1304. }
  1305. }
  1306. if (insFeeOrder.getSyPremium().doubleValue() > 0 && StringUtils.isNotEmpty(syCostsProportionStr)) {
  1307. BigDecimal SyCostsProportion = new BigDecimal(syCostsProportionStr);
  1308. //比较传入的商业总费用比例是否与原费用比例相等,不相等进行更新
  1309. if (SyCostsProportion.compareTo(insFeeOrder.getSyCostsProportion()) != 0) {
  1310. updateFlag = true;
  1311. //商业总费用比例
  1312. insFeeOrder.setSyCostsProportion(SyCostsProportion);
  1313. //商业险总费用
  1314. insFeeOrder.setSyCostsPremiums(getPremium(insFeeOrder.getSyNoTaxPremium(), insFeeOrder.getSyCostsProportion()));
  1315. insCopyFeeOrder.setSyCostsProportion(insFeeOrder.getSyCostsProportion());
  1316. insCopyFeeOrder.setSyCostsPremiums(insFeeOrder.getSyCostsPremiums());
  1317. }
  1318. }
  1319. if (updateFlag) {
  1320. insFeeOrderService.updateById(insFeeOrder);
  1321. insCopyFeeOrderService.insertCompanyAndOrders(insCopyFeeOrder);
  1322. }
  1323. }
  1324. private BigDecimal getPremium(BigDecimal noTaxPremium, BigDecimal costsProportion) {
  1325. BigDecimal premium = new BigDecimal(0);
  1326. if (costsProportion != null && costsProportion.doubleValue() > 0) {
  1327. premium = noTaxPremium.multiply(costsProportion).divide(new BigDecimal(100), 4, RoundingMode.HALF_UP);
  1328. }
  1329. return premium;
  1330. }
  1331. private BigDecimal getPremiumForSubtract(BigDecimal former, BigDecimal latter) {
  1332. BigDecimal premium = new BigDecimal(0);
  1333. if (former != null && latter != null) {
  1334. premium = former.subtract(latter);
  1335. }
  1336. return premium;
  1337. }
  1338. private QueryOrderCommissionVo getQueryOrderCommission(QueryOrderCommissionVo orderCommissionVo, InsFeeOrder insFeeOrder,
  1339. String businessType) {
  1340. /**
  1341. *单保交商时,insFeeOrder 存的就是单交商的各级管理费及分销费
  1342. *同保交商时,insFeeOrder 存的金额是交商总金额,需要扣减
  1343. */
  1344. /*出单员手续费比例=总费用比例-各级管理费-各级分销费-溢出费*/
  1345. if ("JQ".equals(businessType)) {
  1346. BigDecimal costsPremiums = insFeeOrder.getJqCostsPremiums();
  1347. BigDecimal costsProportion = insFeeOrder.getJqCostsProportion();
  1348. BigDecimal totalCostsProportion = getCostsProportion(insFeeOrder);
  1349. BigDecimal totalCostsPremiums = getCostsPremiumsOne(insFeeOrder);
  1350. if (insFeeOrder.getJqSpilloverPremiums() != null) {
  1351. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getJqSpilloverPremiums());
  1352. }
  1353. if (insFeeOrder.getJqSpilloverProportion() != null) {
  1354. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getJqSpilloverProportion());
  1355. }
  1356. BigDecimal userCostsPremiums = costsPremiums.subtract(totalCostsPremiums);
  1357. BigDecimal userCostsProportion = costsProportion.subtract(totalCostsProportion);
  1358. orderCommissionVo.setJqFeePremium(userCostsPremiums.toString());
  1359. orderCommissionVo.setJqFeeRate(userCostsProportion.toString());
  1360. orderCommissionVo.setTotalFeePremium(userCostsPremiums.toString());
  1361. } else if ("SY".equals(businessType)) {
  1362. BigDecimal costsPremiums = insFeeOrder.getSyCostsPremiums();
  1363. BigDecimal costsProportion = insFeeOrder.getSyCostsProportion();
  1364. BigDecimal totalCostsProportion = getCostsProportion(insFeeOrder);
  1365. BigDecimal totalCostsPremiums = getCostsPremiumsOne(insFeeOrder);
  1366. if (insFeeOrder.getSySpilloverPremiums() != null) {
  1367. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getSySpilloverPremiums());
  1368. }
  1369. if (insFeeOrder.getSySpilloverProportion() != null) {
  1370. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getSySpilloverProportion());
  1371. }
  1372. BigDecimal userCostsPremiums = costsPremiums.subtract(totalCostsPremiums);
  1373. BigDecimal userCostsProportion = costsProportion.subtract(totalCostsProportion);
  1374. orderCommissionVo.setSyFeePremium(userCostsPremiums.toString());
  1375. orderCommissionVo.setSyFeeRate(userCostsProportion.toString());
  1376. orderCommissionVo.setTotalFeePremium(userCostsPremiums.toString());
  1377. } else if ("ALL".equals(businessType)) {
  1378. BigDecimal jqCostsPremiums = insFeeOrder.getJqCostsPremiums();
  1379. BigDecimal jqCostsProportion = insFeeOrder.getJqCostsProportion();
  1380. BigDecimal syCostsPremiums = insFeeOrder.getSyCostsPremiums();
  1381. BigDecimal syCostsProportion = insFeeOrder.getSyCostsProportion();
  1382. BigDecimal totalCostsProportion = getCostsProportion(insFeeOrder);
  1383. BigDecimal jqTotalCostsProportion = totalCostsProportion;
  1384. BigDecimal syTotalCostsProportion = totalCostsProportion;
  1385. HashMap<String, BigDecimal> costsPremiumsMap = getCostsPremiumsAll(insFeeOrder);
  1386. BigDecimal jqTotalCostsPremiums = costsPremiumsMap.get("JQ");
  1387. if (insFeeOrder.getJqSpilloverPremiums() != null) {
  1388. jqTotalCostsPremiums = jqTotalCostsPremiums.add(insFeeOrder.getJqSpilloverPremiums());
  1389. }
  1390. if (insFeeOrder.getJqSpilloverProportion() != null) {
  1391. jqTotalCostsProportion = jqTotalCostsProportion.add(insFeeOrder.getJqSpilloverProportion());
  1392. }
  1393. BigDecimal syTotalCostsPremiums = costsPremiumsMap.get("SY");
  1394. if (insFeeOrder.getJqSpilloverPremiums() != null) {
  1395. syTotalCostsPremiums = syTotalCostsPremiums.add(insFeeOrder.getJqSpilloverPremiums());
  1396. }
  1397. if (insFeeOrder.getJqSpilloverProportion() != null) {
  1398. syTotalCostsProportion = syTotalCostsProportion.add(insFeeOrder.getJqSpilloverProportion());
  1399. }
  1400. BigDecimal jqUserCostsPremiums = jqCostsPremiums.subtract(jqTotalCostsPremiums);
  1401. BigDecimal jqUserCostsProportion = jqCostsProportion.subtract(jqTotalCostsProportion);
  1402. BigDecimal syUserCostsPremiums = syCostsPremiums.subtract(syTotalCostsPremiums);
  1403. BigDecimal syUserCostsProportion = syCostsProportion.subtract(syTotalCostsProportion);
  1404. orderCommissionVo.setJqFeePremium(jqUserCostsPremiums.toString());
  1405. orderCommissionVo.setJqFeeRate(jqUserCostsProportion.toString());
  1406. orderCommissionVo.setSyFeePremium(syUserCostsPremiums.toString());
  1407. orderCommissionVo.setSyFeeRate(syUserCostsProportion.toString());
  1408. orderCommissionVo.setTotalFeePremium(jqUserCostsPremiums.add(syUserCostsPremiums).toString());
  1409. }
  1410. return orderCommissionVo;
  1411. }
  1412. private HashMap<String, BigDecimal> getCostsPremiumsAll(InsFeeOrder insFeeOrder) {
  1413. HashMap<String, BigDecimal> costsPremiumsMap = new HashMap<>();
  1414. InsFeeOrder jqInsFeeOrderTemp = new InsFeeOrder();
  1415. //先利用交强费重算费用
  1416. jqInsFeeOrderTemp.setFirstDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getFirstDeptProportion()));
  1417. jqInsFeeOrderTemp.setSecondDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getSecondDeptProportion()));
  1418. jqInsFeeOrderTemp.setThirdDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getThirdDeptProportion()));
  1419. jqInsFeeOrderTemp.setForthDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getForthDeptProportion()));
  1420. jqInsFeeOrderTemp.setFifthDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getFifthDeptProportion()));
  1421. jqInsFeeOrderTemp.setFirstRetailPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getFirstRetailProportion()));
  1422. jqInsFeeOrderTemp.setSecondRetailPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getSecondRetailProportion()));
  1423. jqInsFeeOrderTemp.setThirdRetailPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getThirdRetailProportion()));
  1424. BigDecimal jqCostsPremiums = getCostsPremiumsOne(jqInsFeeOrderTemp);
  1425. costsPremiumsMap.put("JQ", jqCostsPremiums);
  1426. //再利用总费-交强费,得出商业费
  1427. InsFeeOrder syInsFeeOrderTemp = new InsFeeOrder();
  1428. syInsFeeOrderTemp.setFirstDeptPremiums(getPremiumForSubtract(insFeeOrder.getFirstDeptPremiums(),
  1429. jqInsFeeOrderTemp.getFirstDeptPremiums()));
  1430. syInsFeeOrderTemp.setSecondDeptPremiums(getPremiumForSubtract(insFeeOrder.getSecondDeptPremiums(),
  1431. jqInsFeeOrderTemp.getSecondDeptPremiums()));
  1432. syInsFeeOrderTemp.setThirdDeptPremiums(getPremiumForSubtract(insFeeOrder.getThirdDeptPremiums(),
  1433. jqInsFeeOrderTemp.getThirdDeptPremiums()));
  1434. syInsFeeOrderTemp.setForthDeptPremiums(getPremiumForSubtract(insFeeOrder.getForthDeptPremiums(),
  1435. jqInsFeeOrderTemp.getForthDeptPremiums()));
  1436. syInsFeeOrderTemp.setFifthDeptPremiums(getPremiumForSubtract(insFeeOrder.getFifthDeptPremiums(),
  1437. jqInsFeeOrderTemp.getFifthDeptPremiums()));
  1438. syInsFeeOrderTemp.setFirstRetailPremiums(getPremiumForSubtract(insFeeOrder.getFirstRetailPremiums(),
  1439. jqInsFeeOrderTemp.getFirstRetailPremiums()));
  1440. syInsFeeOrderTemp.setSecondRetailPremiums(getPremiumForSubtract(insFeeOrder.getSecondRetailPremiums(),
  1441. jqInsFeeOrderTemp.getSecondRetailPremiums()));
  1442. syInsFeeOrderTemp.setThirdRetailPremiums(getPremiumForSubtract(insFeeOrder.getThirdRetailPremiums(),
  1443. jqInsFeeOrderTemp.getThirdRetailPremiums()));
  1444. BigDecimal syCostsPremiums = getCostsPremiumsOne(syInsFeeOrderTemp);
  1445. costsPremiumsMap.put("SY", syCostsPremiums);
  1446. return costsPremiumsMap;
  1447. }
  1448. private BigDecimal getCostsProportion(InsFeeOrder insFeeOrder) {
  1449. BigDecimal totalCostsProportion = new BigDecimal(0);
  1450. if (insFeeOrder.getFirstDeptProportion() != null) {
  1451. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getFirstDeptProportion());
  1452. }
  1453. if (insFeeOrder.getSecondDeptProportion() != null) {
  1454. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getSecondDeptProportion());
  1455. }
  1456. if (insFeeOrder.getThirdDeptProportion() != null) {
  1457. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getThirdDeptProportion());
  1458. }
  1459. if (insFeeOrder.getForthDeptProportion() != null) {
  1460. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getForthDeptProportion());
  1461. }
  1462. if (insFeeOrder.getFifthDeptProportion() != null) {
  1463. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getFifthDeptProportion());
  1464. }
  1465. if (insFeeOrder.getFirstRetailProportion() != null) {
  1466. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getFirstRetailProportion());
  1467. }
  1468. if (insFeeOrder.getSecondRetailProportion() != null) {
  1469. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getSecondRetailProportion());
  1470. }
  1471. if (insFeeOrder.getThirdRetailProportion() != null) {
  1472. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getThirdRetailProportion());
  1473. }
  1474. return totalCostsProportion;
  1475. }
  1476. private BigDecimal getCostsPremiumsOne(InsFeeOrder insFeeOrder) {
  1477. BigDecimal totalCostsPremiums = new BigDecimal(0);
  1478. if (insFeeOrder.getFirstDeptPremiums() != null) {
  1479. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getFirstDeptPremiums());
  1480. }
  1481. if (insFeeOrder.getSecondDeptPremiums() != null) {
  1482. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getSecondDeptPremiums());
  1483. }
  1484. if (insFeeOrder.getThirdDeptPremiums() != null) {
  1485. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getThirdDeptPremiums());
  1486. }
  1487. if (insFeeOrder.getForthDeptPremiums() != null) {
  1488. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getForthDeptPremiums());
  1489. }
  1490. if (insFeeOrder.getFifthDeptPremiums() != null) {
  1491. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getFifthDeptPremiums());
  1492. }
  1493. if (insFeeOrder.getFirstRetailPremiums() != null) {
  1494. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getFirstRetailPremiums());
  1495. }
  1496. if (insFeeOrder.getSecondRetailPremiums() != null) {
  1497. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getSecondRetailPremiums());
  1498. }
  1499. if (insFeeOrder.getThirdRetailPremiums() != null) {
  1500. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getThirdRetailPremiums());
  1501. }
  1502. return totalCostsPremiums;
  1503. }
  1504. public List<QueryOrderFeeResultVo> convertOrderFeeVoData(InsFeeOrderNew insFeeOrderNew){
  1505. List<QueryOrderFeeResultVo> queryOrderFeeResultVos = new ArrayList<>();
  1506. QueryOrderFeeResultVo sumFeeResultVo = new QueryOrderFeeResultVo();
  1507. sumFeeResultVo.setDescSerialNo("1");
  1508. sumFeeResultVo.setFeeTypeName("总费用");
  1509. //设置交强费用比例
  1510. StringBuilder jqFeeRate = new StringBuilder();
  1511. jqFeeRate.append(insFeeOrderNew.getJqSuperviseCostsProportion()).append(" / ")
  1512. .append(insFeeOrderNew.getJqOtherCostsProportion()).append(" / ")
  1513. .append(insFeeOrderNew.getJqInvestmentCostsProportion()).append(" / ")
  1514. .append(insFeeOrderNew.getJqCostsProportion());
  1515. sumFeeResultVo.setJqFeeRateAll(jqFeeRate.toString());
  1516. //设置交强费用
  1517. StringBuilder jqFeePremium = new StringBuilder();
  1518. jqFeePremium.append(insFeeOrderNew.getJqSuperviseCostsPremiums()).append(" / ")
  1519. .append(insFeeOrderNew.getJqOtherCostsPremiums()).append(" / ")
  1520. .append(insFeeOrderNew.getJqInvestmentCostsPremiums()).append(" / ")
  1521. .append(insFeeOrderNew.getJqCostsPremiums());
  1522. sumFeeResultVo.setJqFeeAmountAll(jqFeePremium.toString());
  1523. //设置商业费用比例
  1524. StringBuilder syFeeRate = new StringBuilder();
  1525. syFeeRate.append(insFeeOrderNew.getSySuperviseCostsProportion()).append(" / ")
  1526. .append(insFeeOrderNew.getSyOtherCostsProportion()).append(" / ")
  1527. .append(insFeeOrderNew.getSyInvestmentCostsProportion()).append(" / ")
  1528. .append(insFeeOrderNew.getSyCostsProportion());
  1529. sumFeeResultVo.setSyFeeRateAll(syFeeRate.toString());
  1530. //设置商业费用
  1531. StringBuilder syFeePremium = new StringBuilder();
  1532. syFeePremium.append(insFeeOrderNew.getSySuperviseCostsPremiums()).append(" / ")
  1533. .append(insFeeOrderNew.getSyOtherCostsPremiums()).append(" / ")
  1534. .append(insFeeOrderNew.getSyInvestmentCostsPremiums()).append(" / ")
  1535. .append(insFeeOrderNew.getSyCostsPremiums());
  1536. sumFeeResultVo.setSyFeeAmountAll(syFeePremium.toString());
  1537. //设置非车费用比例
  1538. StringBuilder noFeeRate = new StringBuilder();
  1539. noFeeRate.append(insFeeOrderNew.getNoSuperviseCostsProportion()).append(" / ")
  1540. .append(insFeeOrderNew.getNoOtherCostsProportion()).append(" / ")
  1541. .append(insFeeOrderNew.getNoCostsProportion());
  1542. sumFeeResultVo.setFcFeeRateAll(noFeeRate.toString());
  1543. //设置非车费用
  1544. StringBuilder noFeePremium = new StringBuilder();
  1545. noFeePremium.append(insFeeOrderNew.getNoSuperviseCostsPremiums()).append(" / ")
  1546. .append(insFeeOrderNew.getNoOtherCostsPremiums()).append(" / ")
  1547. .append(insFeeOrderNew.getNoCostsPremiums());
  1548. sumFeeResultVo.setFcFeeAmountAll(noFeePremium.toString());
  1549. queryOrderFeeResultVos.add(sumFeeResultVo);
  1550. //设置一级管理费
  1551. QueryOrderFeeResultVo jqml1FeeResultVo = new QueryOrderFeeResultVo();
  1552. jqml1FeeResultVo.setDescSerialNo("2");
  1553. jqml1FeeResultVo.setFeeTypeName("一级管理费");
  1554. jqml1FeeResultVo.setJqFeeRateAll(insFeeOrderNew.getJqDeptProportionLevel1().toString());
  1555. jqml1FeeResultVo.setJqFeeAmountAll(insFeeOrderNew.getJqDeptPremiumsLevel1().toString());
  1556. jqml1FeeResultVo.setSyFeeRateAll(insFeeOrderNew.getSyDeptProportionLevel1().toString());
  1557. jqml1FeeResultVo.setSyFeeAmountAll(insFeeOrderNew.getSyDeptPremiumsLevel1().toString());
  1558. jqml1FeeResultVo.setFcFeeRateAll(insFeeOrderNew.getNoDeptProportionLevel1().toString());
  1559. jqml1FeeResultVo.setFcFeeAmountAll(insFeeOrderNew.getNoDeptPremiumsLevel1().toString());
  1560. queryOrderFeeResultVos.add(jqml1FeeResultVo);
  1561. //设置二级管理费
  1562. QueryOrderFeeResultVo jqml2FeeResultVo = new QueryOrderFeeResultVo();
  1563. jqml2FeeResultVo.setDescSerialNo("3");
  1564. jqml2FeeResultVo.setFeeTypeName("二级管理费");
  1565. jqml2FeeResultVo.setJqFeeRateAll(insFeeOrderNew.getJqDeptProportionLevel2().toString());
  1566. jqml2FeeResultVo.setJqFeeAmountAll(insFeeOrderNew.getJqDeptPremiumsLevel2().toString());
  1567. jqml2FeeResultVo.setSyFeeRateAll(insFeeOrderNew.getSyDeptProportionLevel2().toString());
  1568. jqml2FeeResultVo.setSyFeeAmountAll(insFeeOrderNew.getSyDeptPremiumsLevel2().toString());
  1569. jqml2FeeResultVo.setFcFeeRateAll(insFeeOrderNew.getNoDeptProportionLevel2().toString());
  1570. jqml2FeeResultVo.setFcFeeAmountAll(insFeeOrderNew.getNoDeptPremiumsLevel2().toString());
  1571. queryOrderFeeResultVos.add(jqml2FeeResultVo);
  1572. //设置三级管理费
  1573. QueryOrderFeeResultVo jqml3FeeResultVo = new QueryOrderFeeResultVo();
  1574. jqml3FeeResultVo.setDescSerialNo("4");
  1575. jqml3FeeResultVo.setFeeTypeName("三级管理费");
  1576. jqml3FeeResultVo.setJqFeeRateAll(insFeeOrderNew.getJqDeptProportionLevel3().toString());
  1577. jqml3FeeResultVo.setJqFeeAmountAll(insFeeOrderNew.getJqDeptPremiumsLevel3().toString());
  1578. jqml3FeeResultVo.setSyFeeRateAll(insFeeOrderNew.getSyDeptProportionLevel3().toString());
  1579. jqml3FeeResultVo.setSyFeeAmountAll(insFeeOrderNew.getSyDeptPremiumsLevel3().toString());
  1580. jqml3FeeResultVo.setFcFeeRateAll(insFeeOrderNew.getNoDeptProportionLevel3().toString());
  1581. jqml3FeeResultVo.setFcFeeAmountAll(insFeeOrderNew.getNoDeptPremiumsLevel3().toString());
  1582. queryOrderFeeResultVos.add(jqml3FeeResultVo);
  1583. //设置四级管理费
  1584. QueryOrderFeeResultVo jqml4FeeResultVo = new QueryOrderFeeResultVo();
  1585. jqml4FeeResultVo.setDescSerialNo("5");
  1586. jqml4FeeResultVo.setFeeTypeName("四级管理费");
  1587. jqml4FeeResultVo.setJqFeeRateAll(insFeeOrderNew.getJqDeptProportionLevel4().toString());
  1588. jqml4FeeResultVo.setJqFeeAmountAll(insFeeOrderNew.getJqDeptPremiumsLevel4().toString());
  1589. jqml4FeeResultVo.setSyFeeRateAll(insFeeOrderNew.getSyDeptProportionLevel4().toString());
  1590. jqml4FeeResultVo.setSyFeeAmountAll(insFeeOrderNew.getSyDeptPremiumsLevel4().toString());
  1591. jqml4FeeResultVo.setFcFeeRateAll(insFeeOrderNew.getNoDeptProportionLevel4().toString());
  1592. jqml4FeeResultVo.setFcFeeAmountAll(insFeeOrderNew.getNoDeptPremiumsLevel4().toString());
  1593. queryOrderFeeResultVos.add(jqml4FeeResultVo);
  1594. //设置五级管理费
  1595. QueryOrderFeeResultVo jqml5FeeResultVo = new QueryOrderFeeResultVo();
  1596. jqml5FeeResultVo.setDescSerialNo("6");
  1597. jqml5FeeResultVo.setFeeTypeName("五级管理费");
  1598. jqml5FeeResultVo.setJqFeeRateAll(insFeeOrderNew.getJqDeptProportionLevel5().toString());
  1599. jqml5FeeResultVo.setJqFeeAmountAll(insFeeOrderNew.getJqDeptPremiumsLevel5().toString());
  1600. jqml5FeeResultVo.setSyFeeRateAll(insFeeOrderNew.getSyDeptProportionLevel5().toString());
  1601. jqml5FeeResultVo.setSyFeeAmountAll(insFeeOrderNew.getSyDeptPremiumsLevel5().toString());
  1602. jqml5FeeResultVo.setFcFeeRateAll(insFeeOrderNew.getNoDeptProportionLevel5().toString());
  1603. jqml5FeeResultVo.setFcFeeAmountAll(insFeeOrderNew.getNoDeptPremiumsLevel5().toString());
  1604. queryOrderFeeResultVos.add(jqml5FeeResultVo);
  1605. //设置一级分销费用
  1606. QueryOrderFeeResultVo detailLevel1FeeResultVo = new QueryOrderFeeResultVo();
  1607. detailLevel1FeeResultVo.setDescSerialNo("7");
  1608. detailLevel1FeeResultVo.setFeeTypeName("一级分销费");
  1609. detailLevel1FeeResultVo.setJqFeeRateAll(insFeeOrderNew.getFirstDetailProportion().toString());
  1610. detailLevel1FeeResultVo.setSyFeeRateAll(insFeeOrderNew.getFirstDetailProportion().toString());
  1611. detailLevel1FeeResultVo.setFcFeeRateAll(insFeeOrderNew.getFirstDetailProportion().toString());
  1612. BigDecimal jqDetailFeePremium = insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getFirstDetailProportion().divide(new BigDecimal("100")));
  1613. detailLevel1FeeResultVo.setJqFeeAmountAll(jqDetailFeePremium.setScale(2,BigDecimal.ROUND_DOWN).toString());
  1614. BigDecimal syDetailFeePremium = insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getFirstDetailProportion().divide(new BigDecimal("100")));
  1615. detailLevel1FeeResultVo.setSyFeeAmountAll(syDetailFeePremium.setScale(2,BigDecimal.ROUND_DOWN).toString());
  1616. BigDecimal fcDetailFeePremium = insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getFirstDetailProportion().divide(new BigDecimal("100")));
  1617. detailLevel1FeeResultVo.setFcFeeAmountAll(fcDetailFeePremium.setScale(2,BigDecimal.ROUND_DOWN).toString());
  1618. queryOrderFeeResultVos.add(detailLevel1FeeResultVo);
  1619. //设置二级分销费用
  1620. QueryOrderFeeResultVo detailLevel2FeeResultVo = new QueryOrderFeeResultVo();
  1621. detailLevel2FeeResultVo.setDescSerialNo("8");
  1622. detailLevel2FeeResultVo.setFeeTypeName("二级分销费");
  1623. detailLevel2FeeResultVo.setJqFeeRateAll(insFeeOrderNew.getSecondDetailProportion().toString());
  1624. detailLevel2FeeResultVo.setSyFeeRateAll(insFeeOrderNew.getSecondDetailProportion().toString());
  1625. detailLevel2FeeResultVo.setFcFeeRateAll(insFeeOrderNew.getSecondDetailProportion().toString());
  1626. BigDecimal jqDetailFeePremium2 = insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getSecondDetailProportion().divide(new BigDecimal("100")));
  1627. detailLevel2FeeResultVo.setJqFeeAmountAll(jqDetailFeePremium2.setScale(2,BigDecimal.ROUND_DOWN).toString());
  1628. BigDecimal syDetailFeePremium2 = insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSecondDetailProportion().divide(new BigDecimal("100")));
  1629. detailLevel2FeeResultVo.setSyFeeAmountAll(syDetailFeePremium2.setScale(2,BigDecimal.ROUND_DOWN).toString());
  1630. BigDecimal fcDetailFeePremium2 = insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getSecondDetailProportion().divide(new BigDecimal("100")));
  1631. detailLevel2FeeResultVo.setFcFeeAmountAll(fcDetailFeePremium2.setScale(2,BigDecimal.ROUND_DOWN).toString());
  1632. queryOrderFeeResultVos.add(detailLevel2FeeResultVo);
  1633. //设置三级分销费用
  1634. QueryOrderFeeResultVo detailLevel3FeeResultVo = new QueryOrderFeeResultVo();
  1635. detailLevel3FeeResultVo.setDescSerialNo("9");
  1636. detailLevel3FeeResultVo.setFeeTypeName("三级分销费");
  1637. detailLevel3FeeResultVo.setJqFeeRateAll(insFeeOrderNew.getThirdDetailProportion().toString());
  1638. detailLevel3FeeResultVo.setSyFeeRateAll(insFeeOrderNew.getThirdDetailProportion().toString());
  1639. detailLevel3FeeResultVo.setFcFeeRateAll(insFeeOrderNew.getThirdDetailProportion().toString());
  1640. BigDecimal jqDetailFeePremium3 = insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getThirdDetailProportion().divide(new BigDecimal("100")));
  1641. detailLevel3FeeResultVo.setJqFeeAmountAll(jqDetailFeePremium3.setScale(2, BigDecimal.ROUND_DOWN).toString());
  1642. BigDecimal syDetailFeePremium3 = insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getThirdDetailProportion().divide(new BigDecimal("100")));
  1643. detailLevel3FeeResultVo.setSyFeeAmountAll(syDetailFeePremium3.setScale(2,BigDecimal.ROUND_DOWN).toString());
  1644. BigDecimal fcDetailFeePremium3 = insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getThirdDetailProportion().divide(new BigDecimal("100")));
  1645. detailLevel3FeeResultVo.setFcFeeAmountAll(fcDetailFeePremium3.setScale(2,BigDecimal.ROUND_DOWN).toString());
  1646. queryOrderFeeResultVos.add(detailLevel3FeeResultVo);
  1647. return queryOrderFeeResultVos;
  1648. }
  1649. //把取出的费用信息转换为页面需要展示的数据
  1650. // public List<QueryOrderFeeResultVo> convertOrderFeeVoData(QueryOrderFeeVo orderFeeVo) {
  1651. // List<QueryOrderFeeResultVo> resultList = new ArrayList<>();
  1652. // OrderFeeVo jqOrderFeeVo = orderFeeVo.getJqCoderFeeVo();
  1653. // OrderFeeVo syOrderFeeVo = orderFeeVo.getSyCoderFeeVo();
  1654. // OrderFeeVo fcOrderFeeVo = orderFeeVo.getFcCoderFeeVo();
  1655. //
  1656. // //总费用
  1657. // QueryOrderFeeResultVo feeResultVo1 = new QueryOrderFeeResultVo();
  1658. // feeResultVo1.setDescSerialNo("1");
  1659. // feeResultVo1.setFeeTypeName("总费用");
  1660. // feeResultVo1.setJqFeeRate(jqOrderFeeVo != null && jqOrderFeeVo.getCostsProportion() != null ? jqOrderFeeVo.getCostsProportion() :
  1661. // "-");
  1662. // feeResultVo1.setJqFeeAmount(jqOrderFeeVo != null && jqOrderFeeVo.getCostsPremiums() != null ? jqOrderFeeVo.getCostsPremiums() :
  1663. // "-");
  1664. // feeResultVo1.setSyFeeRate(syOrderFeeVo != null && syOrderFeeVo.getCostsProportion() != null ? syOrderFeeVo.getCostsProportion() :
  1665. // "-");
  1666. // feeResultVo1.setSyFeeAmount(syOrderFeeVo != null && syOrderFeeVo.getCostsPremiums() != null ? syOrderFeeVo.getCostsPremiums() :
  1667. // "-");
  1668. // feeResultVo1.setFcFeeRate(fcOrderFeeVo != null && fcOrderFeeVo.getCostsProportion() != null ? fcOrderFeeVo.getCostsProportion() :
  1669. // "-");
  1670. // feeResultVo1.setFcFeeAmount(fcOrderFeeVo != null && fcOrderFeeVo.getCostsPremiums() != null ? fcOrderFeeVo.getCostsPremiums() :
  1671. // "-");
  1672. // feeResultVo1.setJqFeeRateAll(jqOrderFeeVo != null && jqOrderFeeVo.getCostsProportionAll() != null ?
  1673. // jqOrderFeeVo.getCostsProportionAll() : "-");
  1674. // feeResultVo1.setJqFeeAmountAll(jqOrderFeeVo != null && jqOrderFeeVo.getCostsPremiumsAll() != null ?
  1675. // jqOrderFeeVo.getCostsPremiumsAll() : "-");
  1676. // feeResultVo1.setSyFeeRateAll(syOrderFeeVo != null && syOrderFeeVo.getCostsProportionAll() != null ?
  1677. // syOrderFeeVo.getCostsProportionAll() : "-");
  1678. // feeResultVo1.setSyFeeAmountAll(syOrderFeeVo != null && syOrderFeeVo.getCostsPremiumsAll() != null ?
  1679. // syOrderFeeVo.getCostsPremiumsAll() : "-");
  1680. // feeResultVo1.setFcFeeRateAll(fcOrderFeeVo != null && fcOrderFeeVo.getCostsProportionAll() != null ?
  1681. // fcOrderFeeVo.getCostsProportionAll() : "-");
  1682. // feeResultVo1.setFcFeeAmountAll(fcOrderFeeVo != null && fcOrderFeeVo.getCostsPremiumsAll() != null ?
  1683. // fcOrderFeeVo.getCostsPremiumsAll() : "-");
  1684. // resultList.add(feeResultVo1);
  1685. // //一级管理费用
  1686. // QueryOrderFeeResultVo feeResultVo2 = new QueryOrderFeeResultVo();
  1687. // feeResultVo2.setDescSerialNo("2");
  1688. // feeResultVo2.setFeeTypeName("一级管理费");
  1689. // feeResultVo2.setJqFeeRate(jqOrderFeeVo != null && jqOrderFeeVo.getFirstDeptProportion() != null ?
  1690. // jqOrderFeeVo.getFirstDeptProportion() : "-");
  1691. // feeResultVo2.setJqFeeAmount(jqOrderFeeVo != null && jqOrderFeeVo.getFirstDeptPremiums() != null ?
  1692. // jqOrderFeeVo.getFirstDeptPremiums() : "-");
  1693. // feeResultVo2.setSyFeeRate(syOrderFeeVo != null && syOrderFeeVo.getFirstDeptProportion() != null ?
  1694. // syOrderFeeVo.getFirstDeptProportion() : "-");
  1695. // feeResultVo2.setSyFeeAmount(syOrderFeeVo != null && syOrderFeeVo.getFirstDeptPremiums() != null ?
  1696. // syOrderFeeVo.getFirstDeptPremiums() : "-");
  1697. // feeResultVo2.setFcFeeRate(fcOrderFeeVo != null && fcOrderFeeVo.getFirstDeptProportion() != null ?
  1698. // fcOrderFeeVo.getFirstDeptProportion() : "-");
  1699. // feeResultVo2.setFcFeeAmount(fcOrderFeeVo != null && fcOrderFeeVo.getFirstDeptPremiums() != null ?
  1700. // fcOrderFeeVo.getFirstDeptPremiums() : "-");
  1701. // feeResultVo2.setJqFeeRateAll(feeResultVo2.getJqFeeRate());
  1702. // feeResultVo2.setJqFeeAmountAll(feeResultVo2.getJqFeeAmount());
  1703. // feeResultVo2.setSyFeeRateAll(feeResultVo2.getSyFeeRate());
  1704. // feeResultVo2.setSyFeeAmountAll(feeResultVo2.getSyFeeAmount());
  1705. // feeResultVo2.setFcFeeRateAll(feeResultVo2.getFcFeeRate());
  1706. // feeResultVo2.setFcFeeAmountAll(feeResultVo2.getFcFeeAmount());
  1707. // resultList.add(feeResultVo2);
  1708. // //二级管理费用
  1709. // QueryOrderFeeResultVo feeResultVo3 = new QueryOrderFeeResultVo();
  1710. // feeResultVo3.setDescSerialNo("3");
  1711. // feeResultVo3.setFeeTypeName("二级管理费");
  1712. // feeResultVo3.setJqFeeRate(jqOrderFeeVo != null && jqOrderFeeVo.getSecondDeptProportion() != null ?
  1713. // jqOrderFeeVo.getSecondDeptProportion() : "-");
  1714. // feeResultVo3.setJqFeeAmount(jqOrderFeeVo != null && jqOrderFeeVo.getSecondDeptPremiums() != null ?
  1715. // jqOrderFeeVo.getSecondDeptPremiums() : "-");
  1716. // feeResultVo3.setSyFeeRate(syOrderFeeVo != null && syOrderFeeVo.getSecondDeptProportion() != null ?
  1717. // syOrderFeeVo.getSecondDeptProportion() : "-");
  1718. // feeResultVo3.setSyFeeAmount(syOrderFeeVo != null && syOrderFeeVo.getSecondDeptPremiums() != null ?
  1719. // syOrderFeeVo.getSecondDeptPremiums() : "-");
  1720. // feeResultVo3.setFcFeeRate(fcOrderFeeVo != null && fcOrderFeeVo.getSecondDeptProportion() != null ?
  1721. // fcOrderFeeVo.getSecondDeptProportion() : "-");
  1722. // feeResultVo3.setFcFeeAmount(fcOrderFeeVo != null && fcOrderFeeVo.getSecondDeptPremiums() != null ?
  1723. // fcOrderFeeVo.getSecondDeptPremiums() : "-");
  1724. // feeResultVo3.setJqFeeRateAll(feeResultVo3.getJqFeeRate());
  1725. // feeResultVo3.setJqFeeAmountAll(feeResultVo3.getJqFeeAmount());
  1726. // feeResultVo3.setSyFeeRateAll(feeResultVo3.getSyFeeRate());
  1727. // feeResultVo3.setSyFeeAmountAll(feeResultVo3.getSyFeeAmount());
  1728. // feeResultVo3.setFcFeeRateAll(feeResultVo3.getFcFeeRate());
  1729. // feeResultVo3.setFcFeeAmountAll(feeResultVo3.getFcFeeAmount());
  1730. // resultList.add(feeResultVo3);
  1731. // //三级管理费用
  1732. // QueryOrderFeeResultVo feeResultVo4 = new QueryOrderFeeResultVo();
  1733. // feeResultVo4.setDescSerialNo("4");
  1734. // feeResultVo4.setFeeTypeName("三级管理费");
  1735. // feeResultVo4.setJqFeeRate(jqOrderFeeVo != null && jqOrderFeeVo.getThirdDeptProportion() != null ?
  1736. // jqOrderFeeVo.getThirdDeptProportion() : "-");
  1737. // feeResultVo4.setJqFeeAmount(jqOrderFeeVo != null && jqOrderFeeVo.getThirdDeptPremiums() != null ?
  1738. // jqOrderFeeVo.getThirdDeptPremiums() : "-");
  1739. // feeResultVo4.setSyFeeRate(syOrderFeeVo != null && syOrderFeeVo.getThirdDeptProportion() != null ?
  1740. // syOrderFeeVo.getThirdDeptProportion() : "-");
  1741. // feeResultVo4.setSyFeeAmount(syOrderFeeVo != null && syOrderFeeVo.getThirdDeptPremiums() != null ?
  1742. // syOrderFeeVo.getThirdDeptPremiums() : "-");
  1743. // feeResultVo4.setFcFeeRate(fcOrderFeeVo != null && fcOrderFeeVo.getThirdDeptProportion() != null ?
  1744. // fcOrderFeeVo.getThirdDeptProportion() : "-");
  1745. // feeResultVo4.setFcFeeAmount(fcOrderFeeVo != null && fcOrderFeeVo.getThirdDeptPremiums() != null ?
  1746. // fcOrderFeeVo.getThirdDeptPremiums() : "-");
  1747. // feeResultVo4.setJqFeeRateAll(feeResultVo4.getJqFeeRate());
  1748. // feeResultVo4.setJqFeeAmountAll(feeResultVo4.getJqFeeAmount());
  1749. // feeResultVo4.setSyFeeRateAll(feeResultVo4.getSyFeeRate());
  1750. // feeResultVo4.setSyFeeAmountAll(feeResultVo4.getSyFeeAmount());
  1751. // feeResultVo4.setFcFeeRateAll(feeResultVo4.getFcFeeRate());
  1752. // feeResultVo4.setFcFeeAmountAll(feeResultVo4.getFcFeeAmount());
  1753. // resultList.add(feeResultVo4);
  1754. // //四级管理费用
  1755. // QueryOrderFeeResultVo feeResultVo5 = new QueryOrderFeeResultVo();
  1756. // feeResultVo5.setDescSerialNo("5");
  1757. // feeResultVo5.setFeeTypeName("四级管理费");
  1758. // feeResultVo5.setJqFeeRate(jqOrderFeeVo != null && jqOrderFeeVo.getForthDeptProportion() != null ?
  1759. // jqOrderFeeVo.getForthDeptProportion() : "-");
  1760. // feeResultVo5.setJqFeeAmount(jqOrderFeeVo != null && jqOrderFeeVo.getForthDeptPremiums() != null ?
  1761. // jqOrderFeeVo.getForthDeptPremiums() : "-");
  1762. // feeResultVo5.setSyFeeRate(syOrderFeeVo != null && syOrderFeeVo.getForthDeptProportion() != null ?
  1763. // syOrderFeeVo.getForthDeptProportion() : "-");
  1764. // feeResultVo5.setSyFeeAmount(syOrderFeeVo != null && syOrderFeeVo.getForthDeptPremiums() != null ?
  1765. // syOrderFeeVo.getForthDeptPremiums() : "-");
  1766. // feeResultVo5.setFcFeeRate(fcOrderFeeVo != null && fcOrderFeeVo.getForthDeptProportion() != null ?
  1767. // fcOrderFeeVo.getForthDeptProportion() : "-");
  1768. // feeResultVo5.setFcFeeAmount(fcOrderFeeVo != null && fcOrderFeeVo.getForthDeptPremiums() != null ?
  1769. // fcOrderFeeVo.getForthDeptPremiums() : "-");
  1770. // feeResultVo5.setJqFeeRateAll(feeResultVo5.getJqFeeRate());
  1771. // feeResultVo5.setJqFeeAmountAll(feeResultVo5.getJqFeeAmount());
  1772. // feeResultVo5.setSyFeeRateAll(feeResultVo5.getSyFeeRate());
  1773. // feeResultVo5.setSyFeeAmountAll(feeResultVo5.getSyFeeAmount());
  1774. // feeResultVo5.setFcFeeRateAll(feeResultVo5.getFcFeeRate());
  1775. // feeResultVo5.setFcFeeAmountAll(feeResultVo5.getFcFeeAmount());
  1776. // resultList.add(feeResultVo5);
  1777. // //五级管理费用
  1778. // QueryOrderFeeResultVo feeResultVo6 = new QueryOrderFeeResultVo();
  1779. // feeResultVo6.setDescSerialNo("6");
  1780. // feeResultVo6.setFeeTypeName("五级管理费");
  1781. // feeResultVo6.setJqFeeRate(jqOrderFeeVo != null && jqOrderFeeVo.getFifthDeptProportion() != null ?
  1782. // jqOrderFeeVo.getFifthDeptProportion() : "-");
  1783. // feeResultVo6.setJqFeeAmount(jqOrderFeeVo != null && jqOrderFeeVo.getFifthDeptPremiums() != null ?
  1784. // jqOrderFeeVo.getFifthDeptPremiums() : "-");
  1785. // feeResultVo6.setSyFeeRate(syOrderFeeVo != null && syOrderFeeVo.getFifthDeptProportion() != null ?
  1786. // syOrderFeeVo.getFifthDeptProportion() : "-");
  1787. // feeResultVo6.setSyFeeAmount(syOrderFeeVo != null && syOrderFeeVo.getFifthDeptPremiums() != null ?
  1788. // syOrderFeeVo.getFifthDeptPremiums() : "-");
  1789. // feeResultVo6.setFcFeeRate(fcOrderFeeVo != null && fcOrderFeeVo.getFifthDeptProportion() != null ?
  1790. // fcOrderFeeVo.getFifthDeptProportion() : "-");
  1791. // feeResultVo6.setFcFeeAmount(fcOrderFeeVo != null && fcOrderFeeVo.getFifthDeptPremiums() != null ?
  1792. // fcOrderFeeVo.getFifthDeptPremiums() : "-");
  1793. // feeResultVo6.setJqFeeRateAll(feeResultVo6.getJqFeeRate());
  1794. // feeResultVo6.setJqFeeAmountAll(feeResultVo6.getJqFeeAmount());
  1795. // feeResultVo6.setSyFeeRateAll(feeResultVo6.getSyFeeRate());
  1796. // feeResultVo6.setSyFeeAmountAll(feeResultVo6.getSyFeeAmount());
  1797. // feeResultVo6.setFcFeeRateAll(feeResultVo6.getFcFeeRate());
  1798. // feeResultVo6.setFcFeeAmountAll(feeResultVo6.getFcFeeAmount());
  1799. // resultList.add(feeResultVo6);
  1800. // //一级分销费
  1801. // QueryOrderFeeResultVo feeResultVo7 = new QueryOrderFeeResultVo();
  1802. // feeResultVo7.setDescSerialNo("7");
  1803. // feeResultVo7.setFeeTypeName("一级分销费");
  1804. // feeResultVo7.setJqFeeRate(jqOrderFeeVo != null && jqOrderFeeVo.getFirstRetailProportion() != null ?
  1805. // jqOrderFeeVo.getFirstRetailProportion() : "-");
  1806. // feeResultVo7.setJqFeeAmount(jqOrderFeeVo != null && jqOrderFeeVo.getFirstRetailPremiums() != null ?
  1807. // jqOrderFeeVo.getFirstRetailPremiums() : "-");
  1808. // feeResultVo7.setSyFeeRate(syOrderFeeVo != null && syOrderFeeVo.getFirstRetailProportion() != null ?
  1809. // syOrderFeeVo.getFirstRetailProportion() : "-");
  1810. // feeResultVo7.setSyFeeAmount(syOrderFeeVo != null && syOrderFeeVo.getFirstRetailPremiums() != null ?
  1811. // syOrderFeeVo.getFirstRetailPremiums() : "-");
  1812. // feeResultVo7.setFcFeeRate(fcOrderFeeVo != null && fcOrderFeeVo.getFirstRetailProportion() != null ?
  1813. // fcOrderFeeVo.getFirstRetailProportion() : "-");
  1814. // feeResultVo7.setFcFeeAmount(fcOrderFeeVo != null && fcOrderFeeVo.getFirstRetailPremiums() != null ?
  1815. // fcOrderFeeVo.getFirstRetailPremiums() : "-");
  1816. // feeResultVo7.setJqFeeRateAll(feeResultVo7.getJqFeeRate());
  1817. // feeResultVo7.setJqFeeAmountAll(feeResultVo7.getJqFeeAmount());
  1818. // feeResultVo7.setSyFeeRateAll(feeResultVo7.getSyFeeRate());
  1819. // feeResultVo7.setSyFeeAmountAll(feeResultVo7.getSyFeeAmount());
  1820. // feeResultVo7.setFcFeeRateAll(feeResultVo7.getFcFeeRate());
  1821. // feeResultVo7.setFcFeeAmountAll(feeResultVo7.getFcFeeAmount());
  1822. // resultList.add(feeResultVo7);
  1823. // //二级分销费
  1824. // QueryOrderFeeResultVo feeResultVo8 = new QueryOrderFeeResultVo();
  1825. // feeResultVo8.setDescSerialNo("8");
  1826. // feeResultVo8.setFeeTypeName("二级分销费");
  1827. // feeResultVo8.setJqFeeRate(jqOrderFeeVo != null && jqOrderFeeVo.getSecondRetailProportion() != null ?
  1828. // jqOrderFeeVo.getSecondRetailProportion() : "-");
  1829. // feeResultVo8.setJqFeeAmount(jqOrderFeeVo != null && jqOrderFeeVo.getSecondRetailPremiums() != null ?
  1830. // jqOrderFeeVo.getSecondRetailPremiums() : "-");
  1831. // feeResultVo8.setSyFeeRate(syOrderFeeVo != null && syOrderFeeVo.getSecondRetailProportion() != null ?
  1832. // syOrderFeeVo.getSecondRetailProportion() : "-");
  1833. // feeResultVo8.setSyFeeAmount(syOrderFeeVo != null && syOrderFeeVo.getSecondRetailPremiums() != null ?
  1834. // syOrderFeeVo.getSecondRetailPremiums() : "-");
  1835. // feeResultVo8.setFcFeeRate(fcOrderFeeVo != null && fcOrderFeeVo.getSecondRetailProportion() != null ?
  1836. // fcOrderFeeVo.getSecondRetailProportion() : "-");
  1837. // feeResultVo8.setFcFeeAmount(fcOrderFeeVo != null && fcOrderFeeVo.getSecondRetailPremiums() != null ?
  1838. // fcOrderFeeVo.getSecondRetailPremiums() : "-");
  1839. // feeResultVo8.setJqFeeRateAll(feeResultVo8.getJqFeeRate());
  1840. // feeResultVo8.setJqFeeAmountAll(feeResultVo8.getJqFeeAmount());
  1841. // feeResultVo8.setSyFeeRateAll(feeResultVo8.getSyFeeRate());
  1842. // feeResultVo8.setSyFeeAmountAll(feeResultVo8.getSyFeeAmount());
  1843. // feeResultVo8.setFcFeeRateAll(feeResultVo8.getFcFeeRate());
  1844. // feeResultVo8.setFcFeeAmountAll(feeResultVo8.getFcFeeAmount());
  1845. // resultList.add(feeResultVo8);
  1846. // //三级分销费
  1847. // QueryOrderFeeResultVo feeResultVo9 = new QueryOrderFeeResultVo();
  1848. // feeResultVo9.setDescSerialNo("9");
  1849. // feeResultVo9.setFeeTypeName("三级分销费");
  1850. // feeResultVo9.setJqFeeRate(jqOrderFeeVo != null && jqOrderFeeVo.getThirdRetailProportion() != null ?
  1851. // jqOrderFeeVo.getThirdRetailProportion() : "-");
  1852. // feeResultVo9.setJqFeeAmount(jqOrderFeeVo != null && jqOrderFeeVo.getThirdRetailPremiums() != null ?
  1853. // jqOrderFeeVo.getThirdRetailPremiums() : "-");
  1854. // feeResultVo9.setSyFeeRate(syOrderFeeVo != null && syOrderFeeVo.getThirdRetailProportion() != null ?
  1855. // syOrderFeeVo.getThirdRetailProportion() : "-");
  1856. // feeResultVo9.setSyFeeAmount(syOrderFeeVo != null && syOrderFeeVo.getThirdRetailPremiums() != null ?
  1857. // syOrderFeeVo.getThirdRetailPremiums() : "-");
  1858. // feeResultVo9.setFcFeeRate(fcOrderFeeVo != null && fcOrderFeeVo.getThirdRetailProportion() != null ?
  1859. // fcOrderFeeVo.getThirdRetailProportion() : "-");
  1860. // feeResultVo9.setFcFeeAmount(fcOrderFeeVo != null && fcOrderFeeVo.getThirdRetailPremiums() != null ?
  1861. // fcOrderFeeVo.getThirdRetailPremiums() : "-");
  1862. // feeResultVo9.setJqFeeRateAll(feeResultVo9.getJqFeeRate());
  1863. // feeResultVo9.setJqFeeAmountAll(feeResultVo9.getJqFeeAmount());
  1864. // feeResultVo9.setSyFeeRateAll(feeResultVo9.getSyFeeRate());
  1865. // feeResultVo9.setSyFeeAmountAll(feeResultVo9.getSyFeeAmount());
  1866. // feeResultVo9.setFcFeeRateAll(feeResultVo9.getFcFeeRate());
  1867. // feeResultVo9.setFcFeeAmountAll(feeResultVo9.getFcFeeAmount());
  1868. // resultList.add(feeResultVo9);
  1869. // return resultList;
  1870. // }
  1871. /**
  1872. * 按照组合单模式获取费用明细
  1873. *
  1874. * @param insFeeOrder
  1875. * @return
  1876. */
  1877. // private QueryOrderFeeVo packageOrderFeeInfoAll(InsFeeOrder insFeeOrder) {
  1878. // QueryOrderFeeVo queryOrderFeeVo = new QueryOrderFeeVo();
  1879. // InsFeeOrder jqInsFeeOrderTemp = new InsFeeOrder();
  1880. // //先利用交强费重算费用
  1881. // jqInsFeeOrderTemp.setFirstDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getFirstDeptProportion()));
  1882. // jqInsFeeOrderTemp.setSecondDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getSecondDeptProportion()));
  1883. // jqInsFeeOrderTemp.setThirdDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getThirdDeptProportion()));
  1884. // jqInsFeeOrderTemp.setForthDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getForthDeptProportion()));
  1885. // jqInsFeeOrderTemp.setFifthDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getFifthDeptProportion()));
  1886. // jqInsFeeOrderTemp.setFirstRetailPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getFirstRetailProportion()));
  1887. // jqInsFeeOrderTemp.setSecondRetailPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getSecondRetailProportion()));
  1888. // jqInsFeeOrderTemp.setThirdRetailPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(), insFeeOrder.getThirdRetailProportion()));
  1889. //
  1890. // //再利用总费-交强费,得出商业费
  1891. // InsFeeOrder syInsFeeOrderTemp = new InsFeeOrder();
  1892. // syInsFeeOrderTemp.setFirstDeptPremiums(getPremiumForSubtract(insFeeOrder.getFirstDeptPremiums(),
  1893. // jqInsFeeOrderTemp.getFirstDeptPremiums()));
  1894. // syInsFeeOrderTemp.setSecondDeptPremiums(getPremiumForSubtract(insFeeOrder.getSecondDeptPremiums(),
  1895. // jqInsFeeOrderTemp.getSecondDeptPremiums()));
  1896. // syInsFeeOrderTemp.setThirdDeptPremiums(getPremiumForSubtract(insFeeOrder.getThirdDeptPremiums(),
  1897. // jqInsFeeOrderTemp.getThirdDeptPremiums()));
  1898. // syInsFeeOrderTemp.setForthDeptPremiums(getPremiumForSubtract(insFeeOrder.getForthDeptPremiums(),
  1899. // jqInsFeeOrderTemp.getForthDeptPremiums()));
  1900. // syInsFeeOrderTemp.setFifthDeptPremiums(getPremiumForSubtract(insFeeOrder.getFifthDeptPremiums(),
  1901. // jqInsFeeOrderTemp.getFifthDeptPremiums()));
  1902. // syInsFeeOrderTemp.setFirstRetailPremiums(getPremiumForSubtract(insFeeOrder.getFirstRetailPremiums(),
  1903. // jqInsFeeOrderTemp.getFirstRetailPremiums()));
  1904. // syInsFeeOrderTemp.setSecondRetailPremiums(getPremiumForSubtract(insFeeOrder.getSecondRetailPremiums(),
  1905. // jqInsFeeOrderTemp.getSecondRetailPremiums()));
  1906. // syInsFeeOrderTemp.setThirdRetailPremiums(getPremiumForSubtract(insFeeOrder.getThirdRetailPremiums(),
  1907. // jqInsFeeOrderTemp.getThirdRetailPremiums()));
  1908. //
  1909. // //交强费转换赋值
  1910. // OrderFeeVo jqOrderFeeVo = packageOrderFeeInfoOne(insFeeOrder);
  1911. // jqOrderFeeVo.setFirstDeptPremiums(convertToString(jqInsFeeOrderTemp.getFirstDeptPremiums()));
  1912. // jqOrderFeeVo.setSecondDeptPremiums(convertToString(jqInsFeeOrderTemp.getSecondDeptPremiums()));
  1913. // jqOrderFeeVo.setThirdDeptPremiums(convertToString(jqInsFeeOrderTemp.getThirdDeptPremiums()));
  1914. // jqOrderFeeVo.setForthDeptPremiums(convertToString(jqInsFeeOrderTemp.getForthDeptPremiums()));
  1915. // jqOrderFeeVo.setFifthDeptPremiums(convertToString(jqInsFeeOrderTemp.getFifthDeptPremiums()));
  1916. // jqOrderFeeVo.setFirstRetailPremiums(convertToString(jqInsFeeOrderTemp.getFirstRetailPremiums()));
  1917. // jqOrderFeeVo.setSecondRetailPremiums(convertToString(jqInsFeeOrderTemp.getSecondRetailPremiums()));
  1918. // jqOrderFeeVo.setThirdRetailPremiums(convertToString(jqInsFeeOrderTemp.getThirdRetailPremiums()));
  1919. //
  1920. // //商业费转换赋值
  1921. // OrderFeeVo syOrderFeeVo = packageOrderFeeInfoOne(insFeeOrder);
  1922. // syOrderFeeVo.setFirstDeptPremiums(convertToString(syInsFeeOrderTemp.getFirstDeptPremiums()));
  1923. // syOrderFeeVo.setSecondDeptPremiums(convertToString(syInsFeeOrderTemp.getSecondDeptPremiums()));
  1924. // syOrderFeeVo.setThirdDeptPremiums(convertToString(syInsFeeOrderTemp.getThirdDeptPremiums()));
  1925. // syOrderFeeVo.setForthDeptPremiums(convertToString(syInsFeeOrderTemp.getForthDeptPremiums()));
  1926. // syOrderFeeVo.setFifthDeptPremiums(convertToString(syInsFeeOrderTemp.getFifthDeptPremiums()));
  1927. // syOrderFeeVo.setFirstRetailPremiums(convertToString(syInsFeeOrderTemp.getFirstRetailPremiums()));
  1928. // syOrderFeeVo.setSecondRetailPremiums(convertToString(syInsFeeOrderTemp.getSecondRetailPremiums()));
  1929. // syOrderFeeVo.setThirdRetailPremiums(convertToString(syInsFeeOrderTemp.getThirdRetailPremiums()));
  1930. //
  1931. // queryOrderFeeVo.setJqCoderFeeVo(jqOrderFeeVo);
  1932. // queryOrderFeeVo.setSyCoderFeeVo(syOrderFeeVo);
  1933. // return queryOrderFeeVo;
  1934. // }
  1935. /**
  1936. * 按照单险种方式获取费用明细
  1937. *
  1938. * @param insFeeOrder
  1939. * @return
  1940. */
  1941. // private OrderFeeVo packageOrderFeeInfoOne(InsFeeOrder insFeeOrder) {
  1942. // OrderFeeVo orderFeeVo = new OrderFeeVo();
  1943. // orderFeeVo.setFirstDeptPremiums(convertToString(insFeeOrder.getFirstDeptPremiums()));
  1944. // orderFeeVo.setFirstDeptProportion(convertToString(insFeeOrder.getFirstDeptProportion()));
  1945. // orderFeeVo.setSecondDeptPremiums(convertToString(insFeeOrder.getSecondDeptPremiums()));
  1946. // orderFeeVo.setSecondDeptProportion(convertToString(insFeeOrder.getSecondDeptProportion()));
  1947. // orderFeeVo.setThirdDeptPremiums(convertToString(insFeeOrder.getThirdDeptPremiums()));
  1948. // orderFeeVo.setThirdDeptProportion(convertToString(insFeeOrder.getThirdDeptProportion()));
  1949. // orderFeeVo.setForthDeptPremiums(convertToString(insFeeOrder.getForthDeptPremiums()));
  1950. // orderFeeVo.setForthDeptProportion(convertToString(insFeeOrder.getForthDeptProportion()));
  1951. // orderFeeVo.setFifthDeptPremiums(convertToString(insFeeOrder.getFifthDeptPremiums()));
  1952. // orderFeeVo.setFifthDeptProportion(convertToString(insFeeOrder.getFifthDeptProportion()));
  1953. // orderFeeVo.setFirstRetailPremiums(convertToString(insFeeOrder.getFirstRetailPremiums()));
  1954. // orderFeeVo.setFirstRetailProportion(convertToString(insFeeOrder.getFirstRetailProportion()));
  1955. // orderFeeVo.setSecondRetailPremiums(convertToString(insFeeOrder.getSecondRetailPremiums()));
  1956. // orderFeeVo.setSecondRetailProportion(convertToString(insFeeOrder.getSecondRetailProportion()));
  1957. // orderFeeVo.setThirdRetailPremiums(convertToString(insFeeOrder.getThirdRetailPremiums()));
  1958. // orderFeeVo.setThirdRetailProportion(convertToString(insFeeOrder.getThirdRetailProportion()));
  1959. // return orderFeeVo;
  1960. // }
  1961. private String convertToString(BigDecimal b) {
  1962. if (b != null) {
  1963. if (b.doubleValue() == 0) {
  1964. return null;
  1965. } else {
  1966. return b.toString();
  1967. }
  1968. } else {
  1969. return null;
  1970. }
  1971. }
  1972. public void matchTheUndwrtRules(FeeSchemeReqDto feeSchemeReqDto) {
  1973. //根据协议号获取有效的规则
  1974. List<PtlAgreementUndwrtRules> ptlAgreementUndwrtRulesList =
  1975. ptlAgreementUndwrtRulesService.selectVliadRules(feeSchemeReqDto.getAgreementId());
  1976. if (ptlAgreementUndwrtRulesList.isEmpty()) {
  1977. //没有有效的核保规则,直接抛出
  1978. return;
  1979. } else {
  1980. //循环有效的规则列表,进行因子匹配,抛出匹配到的因子项
  1981. for (PtlAgreementUndwrtRules undwrtRules : ptlAgreementUndwrtRulesList) {
  1982. //获取处理后的待校验因子
  1983. Map<Integer, FeeFactorInfoDto> factorToBeVerified = getFactorToBeVerifiedForRules(undwrtRules);
  1984. //按规则拼接跟单信息
  1985. String matchKeyStr = getMatchKeyWithInsuranceInfoForRules(feeSchemeReqDto);
  1986. //循环进行各项因子校验
  1987. boolean checkFlag = checkFactorValidWithInsuranceInfo(matchKeyStr, factorToBeVerified, "");
  1988. //如果该方案所有因子都校验通过,则放入符合校验方案列表
  1989. if (checkFlag) {
  1990. //validSchemeList.add(undwrtRules);
  1991. throw new SystemException("拒保提示:" + undwrtRules.getRuleDescription() + ",请联系业管!");
  1992. }
  1993. }
  1994. }
  1995. }
  1996. /**
  1997. * 根据配置的因子表数据,组装标准的待校验因子列表
  1998. * 新增因子时,顺序需要与getMatchKeyWithInsuranceInfoForRules()方法放入跟单信息一致
  1999. *
  2000. * @param rulesFactor
  2001. * @return
  2002. */
  2003. private Map<Integer, FeeFactorInfoDto> getFactorToBeVerifiedForRules(PtlAgreementUndwrtRules rulesFactor) {
  2004. Map<Integer, FeeFactorInfoDto> resultMqp = new HashMap<>();
  2005. //以下各项因子必须按顺序放入MAP,以便校验时关联
  2006. //--------------------因子处理分割线----------------------------------
  2007. FeeFactorInfoDto factor0 = new FeeFactorInfoDto();
  2008. factor0.setFactorName("是否过户");
  2009. factor0.setMatchType("1");
  2010. factor0.setMatchSequence(0);
  2011. if (rulesFactor.getTransfer() != null && rulesFactor.getTransfer() != 9) {
  2012. factor0.setNeedMatch(true);
  2013. factor0.setSingleSelectVal(String.valueOf(rulesFactor.getTransfer()));
  2014. } else {
  2015. //如果方案中未录入(是空或为9时),则不校验该项因子
  2016. factor0.setNeedMatch(false);
  2017. }
  2018. resultMqp.put(0, factor0);
  2019. //--------------------因子处理分割线----------------------------------
  2020. FeeFactorInfoDto factor1 = new FeeFactorInfoDto();
  2021. factor1.setFactorName("新旧车");
  2022. factor1.setMatchType("1");
  2023. factor1.setMatchSequence(1);
  2024. if (rulesFactor.getOldAndNew() != null && rulesFactor.getOldAndNew() != 9) {
  2025. factor1.setNeedMatch(true);
  2026. factor1.setSingleSelectVal(String.valueOf(rulesFactor.getOldAndNew()));
  2027. } else {
  2028. //如果方案中未录入(是空或为9时),则不校验该项因子
  2029. factor1.setNeedMatch(false);
  2030. }
  2031. resultMqp.put(1, factor1);
  2032. //--------------------因子处理分割线----------------------------------
  2033. FeeFactorInfoDto factor2 = new FeeFactorInfoDto();
  2034. factor2.setFactorName("是否新能源");
  2035. factor2.setMatchType("1");
  2036. factor2.setMatchSequence(2);
  2037. if (rulesFactor.getNewEnergy() != null && rulesFactor.getNewEnergy() != 9) {
  2038. factor2.setNeedMatch(true);
  2039. factor2.setSingleSelectVal(String.valueOf(rulesFactor.getNewEnergy()));
  2040. } else {
  2041. //如果方案中未录入(是空或为9时),则不校验该项因子
  2042. factor2.setNeedMatch(false);
  2043. }
  2044. resultMqp.put(2, factor2);
  2045. //--------------------因子处理分割线----------------------------------
  2046. FeeFactorInfoDto factor3 = new FeeFactorInfoDto();
  2047. factor3.setFactorName("是否续保");
  2048. factor3.setMatchType("1");
  2049. factor3.setMatchSequence(3);
  2050. if (rulesFactor.getRenewal() != null && rulesFactor.getRenewal() != 9) {
  2051. factor3.setNeedMatch(true);
  2052. factor3.setSingleSelectVal(String.valueOf(rulesFactor.getRenewal()));
  2053. } else {
  2054. //如果方案中未录入(是空或为9时),则不校验该项因子
  2055. factor3.setNeedMatch(false);
  2056. }
  2057. resultMqp.put(3, factor3);
  2058. //--------------------因子处理分割线----------------------------------
  2059. FeeFactorInfoDto factor4 = new FeeFactorInfoDto();
  2060. factor4.setFactorName("车辆大类");
  2061. factor4.setMatchType("2");
  2062. factor4.setMatchSequence(4);
  2063. if (rulesFactor.getVehicleCategory() != null && !"".equals(rulesFactor.getVehicleCategory())) {
  2064. factor4.setNeedMatch(true);
  2065. factor4.setMultipleSelectVal(String.valueOf(rulesFactor.getVehicleCategory()));
  2066. } else {
  2067. //如果方案中未录入,则不校验该项因子
  2068. factor4.setNeedMatch(false);
  2069. }
  2070. resultMqp.put(4, factor4);
  2071. //--------------------因子处理分割线----------------------------------
  2072. FeeFactorInfoDto factor5 = new FeeFactorInfoDto();
  2073. factor5.setFactorName("使用性质");
  2074. factor5.setMatchType("2");
  2075. factor5.setMatchSequence(5);
  2076. if (rulesFactor.getNatureOfUse() != null && !"".equals(rulesFactor.getNatureOfUse())) {
  2077. factor5.setNeedMatch(true);
  2078. factor5.setMultipleSelectVal(String.valueOf(rulesFactor.getNatureOfUse()));
  2079. } else {
  2080. //如果方案中未录入,则不校验该项因子
  2081. factor5.setNeedMatch(false);
  2082. }
  2083. resultMqp.put(5, factor5);
  2084. //--------------------因子处理分割线----------------------------------
  2085. FeeFactorInfoDto factor6 = new FeeFactorInfoDto();
  2086. factor6.setFactorName("客车座位数区间");
  2087. factor6.setMatchType("3");
  2088. factor6.setMatchSequence(6);
  2089. if (checkFactorConfigWithAreaForRules(rulesFactor.getMinSeats(), rulesFactor.getMaxSeats())) {
  2090. factor6.setNeedMatch(true);
  2091. factor6.setMinRangeVal((double) rulesFactor.getMinSeats());
  2092. factor6.setMaxRangeVal((double) rulesFactor.getMaxSeats());
  2093. } else {
  2094. //如果方案中未录入,则不校验该项因子
  2095. factor6.setNeedMatch(false);
  2096. }
  2097. resultMqp.put(6, factor6);
  2098. //--------------------因子处理分割线----------------------------------
  2099. FeeFactorInfoDto factor7 = new FeeFactorInfoDto();
  2100. factor7.setFactorName("新车购置价区间");
  2101. factor7.setMatchType("3");
  2102. factor7.setMatchSequence(7);
  2103. if (checkFactorConfigWithAreaForRules(rulesFactor.getMinPurchasePrice(), rulesFactor.getMaxPurchasePrice())) {
  2104. factor7.setNeedMatch(true);
  2105. factor7.setMinRangeVal((double) rulesFactor.getMinPurchasePrice());
  2106. factor7.setMaxRangeVal((double) rulesFactor.getMaxPurchasePrice());
  2107. } else {
  2108. //如果方案中未录入,则不校验该项因子
  2109. factor7.setNeedMatch(false);
  2110. }
  2111. resultMqp.put(7, factor7);
  2112. //--------------------因子处理分割线----------------------------------
  2113. FeeFactorInfoDto factor8 = new FeeFactorInfoDto();
  2114. factor8.setFactorName("核定载质量区间");
  2115. factor8.setMatchType("3");
  2116. factor8.setMatchSequence(8);
  2117. if (checkFactorConfigWithAreaForRules(rulesFactor.getMinApprovedLoadCapacity(), rulesFactor.getMaxApprovedLoadCapacity())) {
  2118. factor8.setNeedMatch(true);
  2119. factor8.setMinRangeVal((double) rulesFactor.getMinApprovedLoadCapacity());
  2120. factor8.setMaxRangeVal((double) rulesFactor.getMaxApprovedLoadCapacity());
  2121. } else {
  2122. //如果方案中未录入,则不校验该项因子
  2123. factor8.setNeedMatch(false);
  2124. }
  2125. resultMqp.put(8, factor8);
  2126. //--------------------因子处理分割线----------------------------------
  2127. FeeFactorInfoDto factor9 = new FeeFactorInfoDto();
  2128. factor9.setFactorName("交强险保费区间");
  2129. factor9.setMatchType("3");
  2130. factor9.setMatchSequence(9);
  2131. if (checkFactorConfigWithAreaForRules(rulesFactor.getMinCompulsoryInsurancePremium(),
  2132. rulesFactor.getMaxCompulsoryInsurancePremium())) {
  2133. factor9.setNeedMatch(true);
  2134. factor9.setMinRangeVal((double) rulesFactor.getMinCompulsoryInsurancePremium());
  2135. factor9.setMaxRangeVal((double) rulesFactor.getMaxCompulsoryInsurancePremium());
  2136. } else {
  2137. //如果方案中未录入,则不校验该项因子
  2138. factor9.setNeedMatch(false);
  2139. }
  2140. resultMqp.put(9, factor9);
  2141. //--------------------因子处理分割线----------------------------------
  2142. FeeFactorInfoDto factor10 = new FeeFactorInfoDto();
  2143. factor10.setFactorName("车船税金额区间");
  2144. factor10.setMatchType("3");
  2145. factor10.setMatchSequence(10);
  2146. if (checkFactorConfigWithAreaForRules(rulesFactor.getMinTaxAmount(), rulesFactor.getMaxTaxAmount())) {
  2147. factor10.setNeedMatch(true);
  2148. factor10.setMinRangeVal((double) rulesFactor.getMinTaxAmount());
  2149. factor10.setMaxRangeVal((double) rulesFactor.getMaxTaxAmount());
  2150. } else {
  2151. //如果方案中未录入,则不校验该项因子
  2152. factor10.setNeedMatch(false);
  2153. }
  2154. resultMqp.put(10, factor10);
  2155. //--------------------因子处理分割线----------------------------------
  2156. FeeFactorInfoDto factor11 = new FeeFactorInfoDto();
  2157. factor11.setFactorName("三者保额区间");
  2158. factor11.setMatchType("3");
  2159. factor11.setMatchSequence(11);
  2160. if (checkFactorConfigWithAreaForRules(rulesFactor.getMinTheThreePremium(), rulesFactor.getMaxTheThreePremium())) {
  2161. factor11.setNeedMatch(true);
  2162. factor11.setMinRangeVal((double) rulesFactor.getMinTheThreePremium() * 10000);
  2163. factor11.setMaxRangeVal((double) rulesFactor.getMaxTheThreePremium() * 10000);
  2164. } else {
  2165. //如果方案中未录入,则不校验该项因子
  2166. factor11.setNeedMatch(false);
  2167. }
  2168. resultMqp.put(11, factor11);
  2169. //--------------------因子处理分割线----------------------------------
  2170. FeeFactorInfoDto factor12 = new FeeFactorInfoDto();
  2171. factor12.setFactorName("随车产品保费区间");
  2172. factor12.setMatchType("3");
  2173. factor12.setMatchSequence(12);
  2174. if (checkFactorConfigWithAreaForRules(rulesFactor.getMinOnboardProductsPremium(), rulesFactor.getMaxOnboardProductsPremium())) {
  2175. factor12.setNeedMatch(true);
  2176. factor12.setMinRangeVal((double) rulesFactor.getMinOnboardProductsPremium());
  2177. factor12.setMaxRangeVal((double) rulesFactor.getMaxOnboardProductsPremium());
  2178. } else {
  2179. //如果方案中未录入,则不校验该项因子
  2180. factor12.setNeedMatch(false);
  2181. }
  2182. resultMqp.put(12, factor12);
  2183. //--------------------因子处理分割线----------------------------------
  2184. FeeFactorInfoDto factor13 = new FeeFactorInfoDto();
  2185. factor13.setFactorName("商业险折扣区间");
  2186. factor13.setMatchType("3");
  2187. factor13.setMatchSequence(13);
  2188. if (checkFactorConfigWithAreaForRules(rulesFactor.getMinCommercialInsuranceDiscount(),
  2189. rulesFactor.getMaxCommercialInsuranceDiscount())) {
  2190. factor13.setNeedMatch(true);
  2191. factor13.setMinRangeVal((double) rulesFactor.getMinCommercialInsuranceDiscount());
  2192. factor13.setMaxRangeVal((double) rulesFactor.getMaxCommercialInsuranceDiscount());
  2193. } else {
  2194. //如果方案中未录入,则不校验该项因子
  2195. factor13.setNeedMatch(false);
  2196. }
  2197. resultMqp.put(13, factor13);
  2198. //--------------------因子处理分割线----------------------------------
  2199. FeeFactorInfoDto factor14 = new FeeFactorInfoDto();
  2200. factor14.setFactorName("交强险折扣区间");
  2201. factor14.setMatchType("3");
  2202. factor14.setMatchSequence(14);
  2203. if (checkFactorConfigWithAreaForRules(rulesFactor.getMinCompulsoryInsuranceDiscount(),
  2204. rulesFactor.getMaxCompulsoryInsuranceDiscount())) {
  2205. factor14.setNeedMatch(true);
  2206. factor14.setMinRangeVal(rulesFactor.getMinCompulsoryInsuranceDiscount());
  2207. factor14.setMaxRangeVal(rulesFactor.getMaxCompulsoryInsuranceDiscount());
  2208. } else {
  2209. //如果方案中未录入,则不校验该项因子
  2210. factor14.setNeedMatch(false);
  2211. }
  2212. resultMqp.put(14, factor14);
  2213. //--------------------因子处理分割线----------------------------------
  2214. FeeFactorInfoDto factor15 = new FeeFactorInfoDto();
  2215. factor15.setFactorName("保司评分区间");
  2216. factor15.setMatchType("3");
  2217. factor15.setMatchSequence(15);
  2218. if (checkFactorConfigWithAreaForRules(rulesFactor.getMinScore(), rulesFactor.getMaxScore())) {
  2219. factor15.setNeedMatch(true);
  2220. factor15.setMinRangeVal((double) rulesFactor.getMinScore());
  2221. factor15.setMaxRangeVal((double) rulesFactor.getMaxScore());
  2222. } else {
  2223. //如果方案中未录入,则不校验该项因子
  2224. factor15.setNeedMatch(false);
  2225. }
  2226. resultMqp.put(15, factor15);
  2227. //--------------------因子处理分割线----------------------------------
  2228. FeeFactorInfoDto factor16 = new FeeFactorInfoDto();
  2229. factor16.setFactorName("预期赔付率区间");
  2230. factor16.setMatchType("3");
  2231. factor16.setMatchSequence(16);
  2232. if (checkFactorConfigWithAreaForRules(rulesFactor.getMinLossRation(), rulesFactor.getMaxLossRation())) {
  2233. factor16.setNeedMatch(true);
  2234. factor16.setMinRangeVal((double) rulesFactor.getMinLossRation());
  2235. factor16.setMaxRangeVal((double) rulesFactor.getMaxLossRation());
  2236. } else {
  2237. //如果方案中未录入,则不校验该项因子
  2238. factor16.setNeedMatch(false);
  2239. }
  2240. resultMqp.put(16, factor16);
  2241. //--------------------因子处理分割线----------------------------------
  2242. FeeFactorInfoDto factor17 = new FeeFactorInfoDto();
  2243. factor17.setFactorName("车牌号地区");
  2244. factor17.setMatchType("2");
  2245. factor17.setMatchSequence(17);
  2246. if (rulesFactor.getLicenseNumber() != null && !"".equals(rulesFactor.getLicenseNumber())) {
  2247. factor17.setNeedMatch(true);
  2248. String matchStr = rulesFactor.getLicenseNumber();
  2249. //考虑是否含暂未上牌标志
  2250. if (rulesFactor.getContainNoLicense() != null && "1".equals(rulesFactor.getContainNoLicense())) {
  2251. matchStr = matchStr + ",暂未上牌";
  2252. }
  2253. factor17.setMultipleSelectVal(matchStr);
  2254. } else {
  2255. //如果方案中未录入,则不校验该项因子
  2256. factor17.setNeedMatch(false);
  2257. }
  2258. resultMqp.put(17, factor17);
  2259. //--------------------因子处理分割线----------------------------------
  2260. FeeFactorInfoDto factor18 = new FeeFactorInfoDto();
  2261. factor18.setMatchType("4");
  2262. factor18.setMatchSequence(18);
  2263. boolean driverCheckFlag = true;//司机保额是否需要校验
  2264. boolean passengerCheckFlag = true;//乘客保额是否需要校验
  2265. //临时赋值,下面方法中使用需要区分
  2266. factor18.setFactorName("人员司机险保额");
  2267. if (checkFactorConfigWithAreaForRules(rulesFactor.getMinDriverAmount(), rulesFactor.getMaxDriverAmount())) {
  2268. factor18.setDriverMinRangeVal(rulesFactor.getMinDriverAmount() * 10000);
  2269. factor18.setDriverMaxRangeVal(rulesFactor.getMaxDriverAmount() * 10000);
  2270. } else {
  2271. driverCheckFlag = false;
  2272. }
  2273. //临时赋值,下面方法中使用需要区分
  2274. factor18.setFactorName("人员乘客险保额");
  2275. if (checkFactorConfigWithAreaForRules(rulesFactor.getMinPassengerAmount(), rulesFactor.getMaxPassengerAmount())) {
  2276. factor18.setPassengerMinRangeVal(rulesFactor.getMinPassengerAmount() * 10000);
  2277. factor18.setPassengerMaxRangeVal(rulesFactor.getMaxPassengerAmount() * 10000);
  2278. } else {
  2279. passengerCheckFlag = false;
  2280. }
  2281. //最终给因子赋值
  2282. factor18.setFactorName("司乘险保额");
  2283. factor18.setDriverIsNeedMatch(driverCheckFlag);
  2284. factor18.setPassengerIsNeedMatch(passengerCheckFlag);
  2285. //司机、乘客都不需要校验时,不校验该因子
  2286. if (!driverCheckFlag && !passengerCheckFlag) {
  2287. factor18.setNeedMatch(false);
  2288. } else {//需要校验时,需要考虑俩者关联关系
  2289. if (rulesFactor.getDriverPassengerRelation() != null && !"".equals(rulesFactor.getDriverPassengerRelation())) {
  2290. //赋值该因子参数关联关系
  2291. factor18.setDriverPassengerRelation(rulesFactor.getDriverPassengerRelation());
  2292. factor18.setNeedMatch(true);
  2293. } else {
  2294. factor18.setNeedMatch(false);
  2295. }
  2296. }
  2297. resultMqp.put(18, factor18);
  2298. //--------------------因子处理分割线----------------------------------
  2299. FeeFactorInfoDto factor19 = new FeeFactorInfoDto();
  2300. factor19.setFactorName("被保人年龄");
  2301. factor19.setMatchType("3");
  2302. factor19.setMatchSequence(19);
  2303. if (checkFactorConfigWithAreaForRules(rulesFactor.getMinInsureAge(), rulesFactor.getMaxInsureAge())) {
  2304. factor19.setNeedMatch(true);
  2305. factor19.setMinRangeVal((double) rulesFactor.getMinInsureAge());
  2306. factor19.setMaxRangeVal((double) rulesFactor.getMaxInsureAge());
  2307. } else {
  2308. //如果方案中未录入,则不校验该项因子
  2309. factor19.setNeedMatch(false);
  2310. }
  2311. resultMqp.put(19, factor19);
  2312. //--------------------因子处理分割线----------------------------------
  2313. FeeFactorInfoDto factor20 = new FeeFactorInfoDto();
  2314. factor20.setFactorName("车主年龄");
  2315. factor20.setMatchType("3");
  2316. factor20.setMatchSequence(20);
  2317. if (checkFactorConfigWithAreaForRules(rulesFactor.getMinCarOwnerAge(), rulesFactor.getMaxCarOwnerAge())) {
  2318. factor20.setNeedMatch(true);
  2319. factor20.setMinRangeVal((double) rulesFactor.getMinCarOwnerAge());
  2320. factor20.setMaxRangeVal((double) rulesFactor.getMaxCarOwnerAge());
  2321. } else {
  2322. //如果方案中未录入,则不校验该项因子
  2323. factor20.setNeedMatch(false);
  2324. }
  2325. resultMqp.put(20, factor20);
  2326. //--------------------因子处理分割线----------------------------------
  2327. FeeFactorInfoDto factor21 = new FeeFactorInfoDto();
  2328. boolean thirdMCheckFlag = true;//三者医保外用保额是否需要校验
  2329. boolean driverMCheckFlag = true;//司机医保外用保额是否需要校验
  2330. boolean passengerMCheckFlag = true;//乘客医保外用保额是否需要校验
  2331. boolean anyMCheckFlag = true;//任意医保外用保额是否需要校验
  2332. factor21.setMatchType("5");
  2333. factor21.setMatchSequence(21);
  2334. //三者
  2335. if (rulesFactor.getThirdMedicalAmount() != null && rulesFactor.getThirdMedicalAmount() != 0) {
  2336. factor21.setThirdMedicalAmountVal(rulesFactor.getThirdMedicalAmount() * 10000);
  2337. } else {
  2338. factor21.setThirdMedicalAmountVal(null);
  2339. thirdMCheckFlag = false;
  2340. }
  2341. //司机
  2342. if (rulesFactor.getDriverMedicalAmount() != null && rulesFactor.getDriverMedicalAmount() != 0) {
  2343. factor21.setDriverMedicalAmountVal(rulesFactor.getDriverMedicalAmount() * 10000);
  2344. } else {
  2345. factor21.setDriverMedicalAmountVal(null);
  2346. driverMCheckFlag = false;
  2347. }
  2348. //乘客
  2349. if (rulesFactor.getPassengerMedicalAmount() != null && rulesFactor.getPassengerMedicalAmount() != 0) {
  2350. factor21.setPassengerMedicalAmountVal(rulesFactor.getPassengerMedicalAmount() * 10000);
  2351. } else {
  2352. factor21.setPassengerMedicalAmountVal(null);
  2353. passengerMCheckFlag = false;
  2354. }
  2355. //任意
  2356. if (rulesFactor.getAnyMedicalAmount() != null && rulesFactor.getAnyMedicalAmount() != 0) {
  2357. factor21.setAnyMedicalAmountVal(rulesFactor.getAnyMedicalAmount() * 10000);
  2358. } else {
  2359. factor21.setAnyMedicalAmountVal(null);
  2360. anyMCheckFlag = false;
  2361. }
  2362. //最终给因子赋值
  2363. factor21.setFactorName("医保外用保额");
  2364. if (!thirdMCheckFlag && !driverMCheckFlag && !passengerMCheckFlag && !anyMCheckFlag) {//如果四项都没有配置时,不需要校验
  2365. factor21.setNeedMatch(false);
  2366. } else {
  2367. factor21.setNeedMatch(true);
  2368. }
  2369. resultMqp.put(21, factor21);
  2370. //--------------------因子处理分割线----------------------------------
  2371. FeeFactorInfoDto factor22 = new FeeFactorInfoDto();
  2372. factor22.setFactorName("业务类型");
  2373. factor22.setMatchType("2");
  2374. factor22.setMatchSequence(22);
  2375. if (rulesFactor.getProductType() != null && !"".equals(rulesFactor.getProductType())) {
  2376. factor22.setNeedMatch(true);
  2377. factor22.setMultipleSelectVal(String.valueOf(rulesFactor.getProductType() + ","));
  2378. } else {
  2379. //如果方案中未录入,则不校验该项因子
  2380. factor22.setNeedMatch(false);
  2381. }
  2382. resultMqp.put(22, factor22);
  2383. //--------------------因子处理分割线----------------------------------
  2384. return resultMqp;
  2385. }
  2386. /**
  2387. * 判断区间类因子是否需要匹配
  2388. *
  2389. * @param minVal
  2390. * @param maxVal
  2391. * @return
  2392. */
  2393. private boolean checkFactorConfigWithAreaForRules(Double minVal, Double maxVal) {
  2394. boolean result = false; //默认不需要匹配
  2395. if (minVal != null && maxVal != null) {
  2396. if (minVal == 0 && maxVal == 0) {//初始化没有配置的时候,全部默认的0,这种不需要匹配
  2397. result = false;
  2398. } else {
  2399. if (minVal <= maxVal) {
  2400. result = true;
  2401. }
  2402. }
  2403. }
  2404. return result;
  2405. }
  2406. /**
  2407. * 判断区间类因子是否需要匹配
  2408. *
  2409. * @param minVal
  2410. * @param maxVal
  2411. * @return
  2412. */
  2413. private boolean checkFactorConfigWithAreaForRules(Integer minVal, Integer maxVal) {
  2414. boolean result = false; //默认不需要匹配
  2415. if (minVal != null && maxVal != null) {
  2416. if (minVal == 0 && maxVal == 0) {//初始化没有配置的时候,全部默认的0,这种不需要匹配
  2417. result = false;
  2418. } else {
  2419. if (minVal <= maxVal) {
  2420. result = true;
  2421. }
  2422. }
  2423. }
  2424. return result;
  2425. }
  2426. /**
  2427. * 根据跟单信息,按照约定顺序进行拼接匹配串
  2428. * 新增因子时,顺序需要与getFactorToBeVerifiedForRules()方法放入待校验因子一致
  2429. *
  2430. * @param feeSchemeReqDto
  2431. * @return
  2432. */
  2433. private String getMatchKeyWithInsuranceInfoForRules(FeeSchemeReqDto feeSchemeReqDto) {
  2434. StringBuffer result = new StringBuffer();
  2435. result.append(feeSchemeReqDto.getIsTransfer()).append(",");
  2436. result.append(feeSchemeReqDto.getIsNewCar()).append(",");
  2437. result.append(feeSchemeReqDto.getIsNewEnergy()).append(",");
  2438. result.append(feeSchemeReqDto.getIsRenewal()).append(",");
  2439. result.append(feeSchemeReqDto.getVehicleCategory()).append(",");
  2440. result.append(feeSchemeReqDto.getUseNature()).append(",");
  2441. result.append(feeSchemeReqDto.getSeatNum()).append(",");
  2442. result.append(feeSchemeReqDto.getPurchasePrice()).append(",");
  2443. result.append(feeSchemeReqDto.getApprovedLoadCapacity()).append(",");
  2444. result.append(feeSchemeReqDto.getJqPremium()).append(",");
  2445. result.append(feeSchemeReqDto.getSumPayTax()).append(",");
  2446. result.append(feeSchemeReqDto.getThirdPartyInsurance()).append(",");
  2447. result.append(feeSchemeReqDto.getNoCarPremium()).append(",");
  2448. result.append(feeSchemeReqDto.getSyDiscount()).append(",");
  2449. result.append(feeSchemeReqDto.getJqDiscount()).append(",");
  2450. result.append(feeSchemeReqDto.getInsuranceScore()).append(",");
  2451. result.append(feeSchemeReqDto.getExpectedLossRate()).append(",");
  2452. result.append(feeSchemeReqDto.getLicenseNo()).append(",");
  2453. //司乘险保额因子,特殊处理(司机保额-乘客保额)
  2454. result.append(StringUtils.isNotEmpty(feeSchemeReqDto.getDriverAmount()) ? feeSchemeReqDto.getDriverAmount() : "NULL").append("-").append(StringUtils.isNotEmpty(feeSchemeReqDto.getPassengerAmount()) ? feeSchemeReqDto.getPassengerAmount() : "NULL").append(",");
  2455. result.append(feeSchemeReqDto.getInsureAge()).append(",");
  2456. result.append(feeSchemeReqDto.getCarOwnerAge()).append(",");
  2457. //医保外用险保额因子,特殊处理(三者保额-司机保额-乘客保额)
  2458. result.append(StringUtils.isNotEmpty(feeSchemeReqDto.getThirdMedicalAmount()) ? feeSchemeReqDto.getThirdMedicalAmount() : "NULL").append("-").append(StringUtils.isNotEmpty(feeSchemeReqDto.getDriverMedicalAmount()) ? feeSchemeReqDto.getDriverMedicalAmount() : "NULL").append("-").append(StringUtils.isNotEmpty(feeSchemeReqDto.getPassengerMedicalAmount()) ? feeSchemeReqDto.getPassengerMedicalAmount() : "NULL").append(",");
  2459. result.append(feeSchemeReqDto.getBusType());
  2460. return result.toString();
  2461. }
  2462. }