FeeRuleSchemeServiceImpl.java 107 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714
  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.InsFeeOrder;
  21. import com.ydtech.modules.order.entity.InsOrders;
  22. import com.ydtech.modules.order.entity.vo.*;
  23. import com.ydtech.modules.order.service.InsAreaCompanyService;
  24. import com.ydtech.modules.order.service.InsFeeOrderService;
  25. import com.ydtech.modules.order.service.InsOrdersService;
  26. import com.ydtech.modules.protocol.entity.po.PtlAgreement;
  27. import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
  28. import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
  29. import com.ydtech.modules.protocol.entity.po.PtlNewCarJudgeRules;
  30. import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
  31. import com.ydtech.modules.protocol.service.PtlAgreementProductCostsService;
  32. import com.ydtech.modules.protocol.service.PtlAgreementService;
  33. import com.ydtech.modules.protocol.service.PtlNewCarJudgeRulesService;
  34. import org.apache.commons.lang3.StringUtils;
  35. import org.apache.commons.lang3.math.NumberUtils;
  36. import org.springframework.stereotype.Service;
  37. import javax.annotation.Resource;
  38. import java.math.BigDecimal;
  39. import java.time.LocalDate;
  40. import java.time.format.DateTimeFormatter;
  41. import java.util.*;
  42. import java.util.stream.Collectors;
  43. /**
  44. * 费用接口中相关功能的实现类
  45. */
  46. @Service
  47. public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
  48. @Resource
  49. private PtlAgreementProductCostsService ptlAgreementProductCostsService;
  50. @Resource
  51. private InsOrdersService insOrdersService;
  52. @Resource
  53. private InsFeeOrderService insFeeOrderService;
  54. @Resource
  55. private SysUserService sysUserService;
  56. @Resource
  57. private SysDeptService sysDeptService;
  58. @Resource
  59. private EsmRetailService esmRetailService;
  60. @Resource
  61. private EsmUserReferrerService esmUserReferrerService;
  62. @Resource
  63. private InsAreaCompanyService insAreaCompanyService;
  64. @Resource
  65. private PtlAgreementService ptlAgreementService;
  66. @Resource
  67. private PtlNewCarJudgeRulesService ptlNewCarJudgeRulesService;
  68. @Resource
  69. private PtlAgreementAttributionService ptlAgreementAttributionService;
  70. /**
  71. * 根据跟单信息,以及配置的费用因子,获取合适的跟单费用
  72. * @param feeSchemeReqDto
  73. * @return
  74. */
  75. public FeeSchemeResDto matchTheAppropriateFees(FeeSchemeReqDto feeSchemeReqDto) {
  76. FeeSchemeResDto feeSchemeResDto=new FeeSchemeResDto();
  77. //先根据业务类别、有效期、协议编码、历史标志代码字段 获取对应费用方案列表
  78. List<PtlAgreementProductCosts> ptlAgreementProductCosts =ptlAgreementProductCostsService.selectVliadFeeFactor(feeSchemeReqDto.getBusType(),feeSchemeReqDto.getAgreementId());
  79. if (ptlAgreementProductCosts.isEmpty()) {
  80. //如果查询不到费用方案信息,则阻断算费流程,进行提示
  81. throw new SystemException("未查询到费用配置,请先配置该协议的费用方案!");
  82. }else{
  83. //符合跟单信息的方案列表
  84. List<PtlAgreementProductCosts> validSchemeList=new ArrayList();
  85. //循环符合的方案列表,再进行细化的因子匹配,获取最终可以匹配到的方案
  86. for(int i=0;i<ptlAgreementProductCosts.size();i++){
  87. PtlAgreementProductCosts factorCost=ptlAgreementProductCosts.get(i);
  88. //获取处理后的待校验因子
  89. Map<Integer, FeeFactorInfoDto> factorToBeVerified=getFactorToBeVerified(factorCost);
  90. //按规则拼接跟单信息
  91. String matchKeyStr=getMatchKeyWithInsuranceInfo(feeSchemeReqDto);
  92. //循环进行各项因子校验
  93. boolean checkFlag=checkFactorValidWithInsuranceInfo(matchKeyStr,factorToBeVerified);
  94. //如果该方案所有因子都校验通过,则放入符合校验方案列表
  95. if(checkFlag){
  96. validSchemeList.add(factorCost);
  97. }
  98. }
  99. if(validSchemeList.size()>0){
  100. //先判断匹配到的是不是只有兜底类型,如果不是则过滤掉兜底类型的费用,优先以跟单的为准,如果只有兜底类型,则按同样逻辑进行筛选
  101. //根据ProductId去重后的结果集
  102. List tempList=validSchemeList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(PtlAgreementProductCosts :: getProductId))), ArrayList::new));
  103. if(tempList.size()>1){//如果有多种类型,则过滤掉兜底类型的
  104. validSchemeList=validSchemeList.stream().filter(x -> !"039999".equals(x.getProductId())).collect(Collectors.toList());
  105. }
  106. //匹配到唯一一条费用方案,直接用这条
  107. if(validSchemeList.size()==1){
  108. //进行费用比例赋值,给返回对象
  109. feeSchemeResDto=generateSchemeResDto((PtlAgreementProductCosts)validSchemeList.get(0));
  110. }else{
  111. /* //如果最终符合的有多条,则按特殊规则选择其中一条 (原来使用保费多少判断优先的停用)
  112. PtlAgreementProductCosts finalSchemeCost=changeSchemeWithSpecialRule(validSchemeList,feeSchemeReqDto);*/
  113. PtlAgreementProductCosts finalSchemeCost=null;
  114. //调整为使用协议方案中优先级字段判断优先方案(循环找出对应优先级最高的)
  115. for(int i=0;i<validSchemeList.size();i++){
  116. PtlAgreementProductCosts tempCostDto=validSchemeList.get(i);
  117. int currentLevel=tempCostDto.getPriorityLevel()==null?0:tempCostDto.getPriorityLevel();
  118. if(finalSchemeCost!=null){
  119. int oldLevel=finalSchemeCost.getPriorityLevel()==null?0:finalSchemeCost.getPriorityLevel();
  120. if(oldLevel>currentLevel){
  121. finalSchemeCost=tempCostDto;
  122. }
  123. }else{
  124. finalSchemeCost=tempCostDto;
  125. }
  126. }
  127. //进行费用比例赋值,给返回对象
  128. feeSchemeResDto=generateSchemeResDto(finalSchemeCost);
  129. }
  130. }else{
  131. throw new SystemException("未匹配到合适的费用方案,请先配置该协议的费用方案!");
  132. }
  133. }
  134. return feeSchemeResDto;
  135. }
  136. /**
  137. * 特殊处理选择费用方案
  138. * 如果最终符合的有多条,则先看交强、商业谁的保费多,然后根据保费多得在匹配到的方案中找费用比例大的那一条
  139. * @param validSchemeList
  140. * @param feeSchemeReqDto
  141. * @return
  142. */
  143. private PtlAgreementProductCosts changeSchemeWithSpecialRule(List<PtlAgreementProductCosts> validSchemeList, FeeSchemeReqDto feeSchemeReqDto) {
  144. PtlAgreementProductCosts finalScheme=null;
  145. //险种标志,最终取哪个险种费用比例 1取交强 2取商业
  146. String riskFlag="";
  147. //判断险种标志
  148. if("0330".equals(feeSchemeReqDto.getBusType())){//单交
  149. riskFlag="1";
  150. }else if("034001".equals(feeSchemeReqDto.getBusType())){//单商
  151. riskFlag="2";
  152. }else if("034002".equals(feeSchemeReqDto.getBusType())){//单三
  153. riskFlag="2";
  154. }else if("0330034002".equals(feeSchemeReqDto.getBusType())){//交三
  155. if(Double.parseDouble(feeSchemeReqDto.getJqPremium())<=Double.parseDouble(feeSchemeReqDto.getSyPremium())){
  156. riskFlag="2";
  157. }else{
  158. riskFlag="1";
  159. }
  160. }else if("0330034001".equals(feeSchemeReqDto.getBusType())){//交商
  161. if(Double.parseDouble(feeSchemeReqDto.getJqPremium())<=Double.parseDouble(feeSchemeReqDto.getSyPremium())){
  162. riskFlag="2";
  163. }else{
  164. riskFlag="1";
  165. }
  166. }
  167. //循环找出对应比例最大的
  168. for(int i=0;i<validSchemeList.size();i++){
  169. PtlAgreementProductCosts tempCostDto=validSchemeList.get(i);
  170. if(finalScheme!=null){
  171. if("1".equals(riskFlag)){//按交强比例排序,找比例最大的
  172. if(Double.parseDouble(finalScheme.getJqCostsProportion())<Double.parseDouble(tempCostDto.getJqCostsProportion())){
  173. finalScheme=tempCostDto;
  174. }
  175. }else if("2".equals(riskFlag)){//按商业比例排序,找比例最大的
  176. if(Double.parseDouble(finalScheme.getSyCostsProportion())<Double.parseDouble(tempCostDto.getSyCostsProportion())){
  177. finalScheme=tempCostDto;
  178. }
  179. }
  180. }else{
  181. finalScheme=tempCostDto;
  182. }
  183. }
  184. return finalScheme;
  185. }
  186. /**
  187. * 组装费用接口反参对象
  188. * @param agreementProductCost
  189. * @return
  190. */
  191. private FeeSchemeResDto generateSchemeResDto(PtlAgreementProductCosts agreementProductCost) {
  192. FeeSchemeResDto resDto=new FeeSchemeResDto();
  193. resDto.setAgreementId(agreementProductCost.getAgreementId());
  194. resDto.setSchemeId(agreementProductCost.getId());
  195. resDto.setJqSpilloverPremiums(agreementProductCost.getJqSpilloverPremiums());
  196. resDto.setJqSpilloverProportion(agreementProductCost.getJqSpilloverProportion());
  197. resDto.setJqNewCarCostsProportion(agreementProductCost.getJqNewCarCostsProportion());
  198. resDto.setJqOldCarCostsProportion(agreementProductCost.getJqOldCarCostsProportion());
  199. resDto.setJqCostsProportion(agreementProductCost.getJqCostsProportion());
  200. resDto.setJqNewCarOtherCostsProportion(agreementProductCost.getJqNewCarOtherCostsProportion());
  201. resDto.setJqOldCarOtherCostsProportion(agreementProductCost.getJqOldCarOtherCostsProportion());
  202. resDto.setSySpilloverPremiums(agreementProductCost.getSySpilloverPremiums());
  203. resDto.setSySpilloverProportion(agreementProductCost.getSySpilloverProportion());
  204. resDto.setSyNewCarCostsProportion(agreementProductCost.getSyNewCarCostsProportion());
  205. resDto.setSyOldCarCostsProportion(agreementProductCost.getSyOldCarCostsProportion());
  206. resDto.setSyCostsProportion(agreementProductCost.getSyCostsProportion());
  207. resDto.setSyNewCarOtherCostsProportion(agreementProductCost.getSyNewCarOtherCostsProportion());
  208. resDto.setSyOldCarOtherCostsProportion(agreementProductCost.getSyOldCarOtherCostsProportion());
  209. return resDto;
  210. }
  211. /**
  212. * 根据跟单信息,循环各项因子 校验该方案的匹配情况
  213. * @param matchKeyStr
  214. * @param factorToBeVerified
  215. * @return
  216. */
  217. private boolean checkFactorValidWithInsuranceInfo(String matchKeyStr, Map<Integer, FeeFactorInfoDto> factorToBeVerified) {
  218. boolean result=false; //默认没有匹配到
  219. String[] matchKeys= matchKeyStr.split(",");
  220. //循环待校验因子列表
  221. for(Map.Entry<Integer,FeeFactorInfoDto> entry : factorToBeVerified.entrySet()){
  222. Integer key=entry.getKey();
  223. FeeFactorInfoDto checkFactorInfo=entry.getValue();
  224. //特殊处理,如果跟单是客车时,不关注配置的核定载质量字段
  225. if("客车".equals(matchKeys[4])){
  226. if(checkFactorInfo.getMatchSequence()==8){
  227. continue;
  228. }
  229. }
  230. //先看该方案是否需要匹配该因子,不需要则跳过本条因子
  231. if(!checkFactorInfo.isNeedMatch()){
  232. continue;
  233. }
  234. //下面处理需要进行匹配的因子
  235. if("1".equals(checkFactorInfo.getMatchType())){//1.单字符串匹配(相等)
  236. if(matchKeys[key]!=null&&!"".equals(matchKeys[key])){
  237. if(checkFactorInfo.getSingleSelectVal().equals(matchKeys[key])){
  238. result=true;
  239. continue;
  240. }else{
  241. //如果需要匹配且没有匹配到,则直接跳出本次循环,该方案不符合
  242. result=false;
  243. break;
  244. }
  245. }else{
  246. //判断跟单信息是否为空,如果为空,则直接没有匹配到,该方案不符合
  247. result=false;
  248. break;
  249. }
  250. }else if("2".equals(checkFactorInfo.getMatchType())){//2.多字符串匹配(包含)
  251. if(matchKeys[key]!=null&&!"".equals(matchKeys[key])){
  252. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  253. if(checkFactorInfo.getMultipleSelectVal().indexOf(matchKeys[key])>-1){
  254. result=true;
  255. continue;
  256. }else{
  257. //如果需要匹配且没有匹配到,则直接跳出循环,该方案不符合
  258. result=false;
  259. break;
  260. }
  261. }else{
  262. //判断跟单信息是否为空,如果为空,则直接没有匹配到,该方案不符合
  263. result=false;
  264. break;
  265. }
  266. }else if("3".equals(checkFactorInfo.getMatchType())){//3.区间范围比较(左闭右闭)
  267. if(matchKeys[key]!=null&&NumberUtils.isCreatable(matchKeys[key])){
  268. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  269. if(Double.parseDouble(matchKeys[key])>=checkFactorInfo.getMinRangeVal()&&Double.parseDouble(matchKeys[key])<=checkFactorInfo.getMaxRangeVal()){
  270. result=true;
  271. continue;
  272. }else{
  273. //如果需要匹配且没有匹配到,则直接跳出循环,该方案不符合
  274. result=false;
  275. break;
  276. }
  277. }else{
  278. //判断跟单信息是否为空和可转整型,如果不符,则直接没有匹配到,该方案不符合
  279. result=false;
  280. break;
  281. }
  282. }else if("4".equals(checkFactorInfo.getMatchType())){//4.特殊规则,司乘险校验,存在关联关系需要单独判断
  283. if(matchKeys[key]!=null){
  284. //先获取跟单司机、乘客保额
  285. String[] kindAmountStr= matchKeys[key].split("-");
  286. String driverAmount="NULL".equals(kindAmountStr[0])?"0":kindAmountStr[0];
  287. String passengerAmount="NULL".equals(kindAmountStr[1])?"0":kindAmountStr[1];
  288. if("0".equals(checkFactorInfo.getDriverPassengerRelation())){//无关系,则各自校验各自,有一个不符合,则方案不符合
  289. if(NumberUtils.isCreatable(driverAmount)){//如果司机保额是数字,则可以进行校验
  290. if(checkFactorInfo.isDriverIsNeedMatch()){
  291. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  292. if(Double.parseDouble(driverAmount)>=checkFactorInfo.getDriverMinRangeVal()&&Double.parseDouble(driverAmount)<=checkFactorInfo.getDriverMaxRangeVal()){
  293. result=true;
  294. continue;
  295. }else{
  296. //如果需要匹配且没有匹配到,则直接跳出循环,该方案不符合
  297. result=false;
  298. break;
  299. }
  300. }
  301. }
  302. if(NumberUtils.isCreatable(passengerAmount)){//如果司机保额是数字,则可以进行校验
  303. if(checkFactorInfo.isPassengerIsNeedMatch()){
  304. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  305. if(Double.parseDouble(passengerAmount)>=checkFactorInfo.getPassengerMinRangeVal()&&Double.parseDouble(passengerAmount)<=checkFactorInfo.getPassengerMaxRangeVal()){
  306. result=true;
  307. continue;
  308. }else{
  309. //如果需要匹配且没有匹配到,则直接跳出循环,该方案不符合
  310. result=false;
  311. break;
  312. }
  313. }
  314. }
  315. }else if("1".equals(checkFactorInfo.getDriverPassengerRelation())){//或的关系 2个里面有一个通过则通过
  316. boolean isDriverPass=false;
  317. boolean isPassengerPass=false;
  318. if(NumberUtils.isCreatable(driverAmount)){//如果司机保额是数字,则可以进行校验
  319. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  320. if(Double.parseDouble(driverAmount)>=checkFactorInfo.getDriverMinRangeVal()&&Double.parseDouble(driverAmount)<=checkFactorInfo.getDriverMaxRangeVal()){
  321. isDriverPass=true;
  322. }
  323. }
  324. if(NumberUtils.isCreatable(passengerAmount)){//如果司机保额是数字,则可以进行校验
  325. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  326. if(Double.parseDouble(passengerAmount)>=checkFactorInfo.getPassengerMinRangeVal()&&Double.parseDouble(passengerAmount)<=checkFactorInfo.getPassengerMaxRangeVal()){
  327. isPassengerPass=true;
  328. }
  329. }
  330. if(!isDriverPass&&!isPassengerPass){//两项都不通过的时候,才不符合
  331. result=false;
  332. break;
  333. }else{
  334. result=true;
  335. continue;
  336. }
  337. }else if("2".equals(checkFactorInfo.getDriverPassengerRelation())){//且的关系 2个全部通过才算通过
  338. boolean isDriverPass=false;
  339. boolean isPassengerPass=false;
  340. if(NumberUtils.isCreatable(driverAmount)){//如果司机保额是数字,则可以进行校验
  341. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  342. if(Double.parseDouble(driverAmount)>=checkFactorInfo.getDriverMinRangeVal()&&Double.parseDouble(driverAmount)<=checkFactorInfo.getDriverMaxRangeVal()){
  343. isDriverPass=true;
  344. }
  345. }
  346. if(NumberUtils.isCreatable(passengerAmount)){//如果司机保额是数字,则可以进行校验
  347. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  348. if(Double.parseDouble(passengerAmount)>=checkFactorInfo.getPassengerMinRangeVal()&&Double.parseDouble(passengerAmount)<=checkFactorInfo.getPassengerMaxRangeVal()){
  349. isPassengerPass=true;
  350. }
  351. }
  352. if(isDriverPass&&isPassengerPass){//两项都通过的时候,才符合
  353. result=true;
  354. continue;
  355. }else{
  356. result=false;
  357. break;
  358. }
  359. }
  360. }
  361. }else if("5".equals(checkFactorInfo.getMatchType())) {//5.特殊规则,医保外用校验,存在互斥关系需要单独判断
  362. if(matchKeys[key]!=null){
  363. //先获取跟单医保外用保额 三者-司机-乘客
  364. String[] kindAmountStr= matchKeys[key].split("-");
  365. String thirdMedicalAmount="NULL".equals(kindAmountStr[0])?"0":kindAmountStr[0];
  366. String driverMedicalAmount="NULL".equals(kindAmountStr[1])?"0":kindAmountStr[1];
  367. String passengerMedicalAmount="NULL".equals(kindAmountStr[2])?"0":kindAmountStr[2];
  368. if(checkFactorInfo.getAnyMedicalAmountVal()!=null){//不为空时,为任意险别符合即可 三者 司机 乘客 三者为 或的关系
  369. boolean isThirdPass=false;
  370. boolean isDriverPass=false;
  371. boolean isPassengerPass=false;
  372. if(NumberUtils.isCreatable(thirdMedicalAmount)){//如果医保外用三者保额是数字,则可以进行校验
  373. if(Double.parseDouble(thirdMedicalAmount)>=checkFactorInfo.getAnyMedicalAmountVal()){
  374. isThirdPass=true;
  375. }
  376. }
  377. if(NumberUtils.isCreatable(driverMedicalAmount)){//如果医保外用保额是数字,则可以进行校验
  378. if(Double.parseDouble(driverMedicalAmount)>=checkFactorInfo.getAnyMedicalAmountVal()){
  379. isDriverPass=true;
  380. }
  381. }
  382. if(NumberUtils.isCreatable(passengerMedicalAmount)){//如果医保外用乘客保额是数字,则可以进行校验
  383. if(Double.parseDouble(passengerMedicalAmount)>=checkFactorInfo.getAnyMedicalAmountVal()){
  384. isPassengerPass=true;
  385. }
  386. }
  387. if(!isThirdPass&&!isDriverPass&&!isPassengerPass){//三项都不通过的时候,才不符合
  388. result=false;
  389. break;
  390. }else{
  391. result=true;
  392. continue;
  393. }
  394. }else {//看指定险别的判断 三者 司机 乘客 三者为 且的关系
  395. boolean isThirdPass=false;
  396. boolean isDriverPass=false;
  397. boolean isPassengerPass=false;
  398. if(NumberUtils.isCreatable(thirdMedicalAmount)){//如果医保外用三者保额是数字,则可以进行校验
  399. if(checkFactorInfo.getThirdMedicalAmountVal()!=null){
  400. if(Double.parseDouble(thirdMedicalAmount)>=checkFactorInfo.getThirdMedicalAmountVal()){
  401. isThirdPass=true;
  402. }
  403. }else{
  404. isThirdPass=true;
  405. }
  406. }
  407. if(NumberUtils.isCreatable(driverMedicalAmount)){//如果医保外用保额是数字,则可以进行校验
  408. if(checkFactorInfo.getDriverMedicalAmountVal()!=null){
  409. if(Double.parseDouble(driverMedicalAmount)>=checkFactorInfo.getDriverMedicalAmountVal()){
  410. isDriverPass=true;
  411. }
  412. }else{
  413. isDriverPass=true;
  414. }
  415. }
  416. if(NumberUtils.isCreatable(passengerMedicalAmount)){//如果医保外用乘客保额是数字,则可以进行校验
  417. if(checkFactorInfo.getPassengerMedicalAmountVal()!=null){
  418. if(Double.parseDouble(passengerMedicalAmount)>=checkFactorInfo.getPassengerMedicalAmountVal()){
  419. isPassengerPass=true;
  420. }
  421. }else{
  422. isPassengerPass=true;
  423. }
  424. }
  425. if(isThirdPass&&isDriverPass&&isPassengerPass){//三项都通过的时候,才符合
  426. result=true;
  427. continue;
  428. }else{
  429. result=false;
  430. break;
  431. }
  432. }
  433. }
  434. }
  435. }
  436. return result;
  437. }
  438. /**
  439. * 根据跟单信息,按照约定顺序进行拼接匹配串
  440. * 新增因子时,顺序需要与getFactorToBeVerified()方法放入待校验因子一致
  441. * @param feeSchemeReqDto
  442. * @return
  443. */
  444. private String getMatchKeyWithInsuranceInfo(FeeSchemeReqDto feeSchemeReqDto) {
  445. StringBuffer result=new StringBuffer();
  446. result.append(feeSchemeReqDto.getIsTransfer()).append(",");
  447. result.append(feeSchemeReqDto.getIsNewCar()).append(",");
  448. result.append(feeSchemeReqDto.getIsNewEnergy()).append(",");
  449. result.append(feeSchemeReqDto.getIsRenewal()).append(",");
  450. result.append(feeSchemeReqDto.getVehicleCategory()).append(",");
  451. result.append(feeSchemeReqDto.getUseNature()).append(",");
  452. result.append(feeSchemeReqDto.getSeatNum()).append(",");
  453. result.append(feeSchemeReqDto.getPurchasePrice()).append(",");
  454. result.append(feeSchemeReqDto.getApprovedLoadCapacity()).append(",");
  455. result.append(feeSchemeReqDto.getJqPremium()).append(",");
  456. result.append(feeSchemeReqDto.getSumPayTax()).append(",");
  457. result.append(feeSchemeReqDto.getThirdPartyInsurance()).append(",");
  458. result.append(feeSchemeReqDto.getNoCarPremium()).append(",");
  459. result.append(feeSchemeReqDto.getSyDiscount()).append(",");
  460. result.append(feeSchemeReqDto.getJqDiscount()).append(",");
  461. result.append(feeSchemeReqDto.getInsuranceScore()).append(",");
  462. result.append(feeSchemeReqDto.getExpectedLossRate()).append(",");
  463. result.append(feeSchemeReqDto.getLicenseNo()).append(",");
  464. //司乘险保额因子,特殊处理(司机保额-乘客保额)
  465. result.append(StringUtils.isNotEmpty(feeSchemeReqDto.getDriverAmount())?feeSchemeReqDto.getDriverAmount():"NULL").append("-").append(StringUtils.isNotEmpty(feeSchemeReqDto.getPassengerAmount())?feeSchemeReqDto.getPassengerAmount():"NULL").append(",");
  466. result.append(feeSchemeReqDto.getInsureAge()).append(",");
  467. result.append(feeSchemeReqDto.getCarOwnerAge()).append(",");
  468. //医保外用险保额因子,特殊处理(三者保额-司机保额-乘客保额)
  469. result.append(StringUtils.isNotEmpty(feeSchemeReqDto.getThirdMedicalAmount())?feeSchemeReqDto.getThirdMedicalAmount():"NULL").append("-")
  470. .append(StringUtils.isNotEmpty(feeSchemeReqDto.getDriverMedicalAmount())?feeSchemeReqDto.getDriverMedicalAmount():"NULL").append("-")
  471. .append(StringUtils.isNotEmpty(feeSchemeReqDto.getPassengerMedicalAmount())?feeSchemeReqDto.getPassengerMedicalAmount():"NULL");
  472. return result.toString();
  473. }
  474. /**
  475. * 根据配置的因子表数据,组装标准的待校验因子列表
  476. * 新增因子时,顺序需要与getMatchKeyWithInsuranceInfo()方法放入跟单信息一致
  477. * @param factorCost
  478. * @return
  479. */
  480. private Map<Integer, FeeFactorInfoDto> getFactorToBeVerified(PtlAgreementProductCosts factorCost) {
  481. Map<Integer, FeeFactorInfoDto> resultMqp=new HashMap<>();
  482. //以下各项因子必须按顺序放入MAP,以便校验时关联
  483. //--------------------因子处理分割线----------------------------------
  484. FeeFactorInfoDto factor0=new FeeFactorInfoDto();
  485. factor0.setFactorName("是否过户");
  486. factor0.setMatchType("1");
  487. factor0.setMatchSequence(0);
  488. if(factorCost.getTransfer()!=null&&factorCost.getTransfer()!=9){
  489. factor0.setNeedMatch(true);
  490. factor0.setSingleSelectVal(String.valueOf(factorCost.getTransfer()));
  491. }else{
  492. //如果方案中未录入(是空或为9时),则不校验该项因子
  493. factor0.setNeedMatch(false);
  494. }
  495. resultMqp.put(0,factor0);
  496. //--------------------因子处理分割线----------------------------------
  497. FeeFactorInfoDto factor1=new FeeFactorInfoDto();
  498. factor1.setFactorName("新旧车");
  499. factor1.setMatchType("1");
  500. factor1.setMatchSequence(1);
  501. if(factorCost.getOldAndNew()!=null&&factorCost.getOldAndNew()!=9){
  502. factor1.setNeedMatch(true);
  503. factor1.setSingleSelectVal(String.valueOf(factorCost.getOldAndNew()));
  504. }else{
  505. //如果方案中未录入(是空或为9时),则不校验该项因子
  506. factor1.setNeedMatch(false);
  507. }
  508. resultMqp.put(1,factor1);
  509. //--------------------因子处理分割线----------------------------------
  510. FeeFactorInfoDto factor2=new FeeFactorInfoDto();
  511. factor2.setFactorName("是否新能源");
  512. factor2.setMatchType("1");
  513. factor2.setMatchSequence(2);
  514. if(factorCost.getNewEnergy()!=null&&factorCost.getNewEnergy()!=9){
  515. factor2.setNeedMatch(true);
  516. factor2.setSingleSelectVal(String.valueOf(factorCost.getNewEnergy()));
  517. }else{
  518. //如果方案中未录入(是空或为9时),则不校验该项因子
  519. factor2.setNeedMatch(false);
  520. }
  521. resultMqp.put(2,factor2);
  522. //--------------------因子处理分割线----------------------------------
  523. FeeFactorInfoDto factor3=new FeeFactorInfoDto();
  524. factor3.setFactorName("是否续保");
  525. factor3.setMatchType("1");
  526. factor3.setMatchSequence(3);
  527. if(factorCost.getRenewal()!=null&&factorCost.getRenewal()!=9){
  528. factor3.setNeedMatch(true);
  529. factor3.setSingleSelectVal(String.valueOf(factorCost.getRenewal()));
  530. }else{
  531. //如果方案中未录入(是空或为9时),则不校验该项因子
  532. factor3.setNeedMatch(false);
  533. }
  534. resultMqp.put(3,factor3);
  535. //--------------------因子处理分割线----------------------------------
  536. FeeFactorInfoDto factor4=new FeeFactorInfoDto();
  537. factor4.setFactorName("车辆大类");
  538. factor4.setMatchType("2");
  539. factor4.setMatchSequence(4);
  540. if(factorCost.getVehicleCategory()!=null&&!"".equals(factorCost.getVehicleCategory())){
  541. factor4.setNeedMatch(true);
  542. factor4.setMultipleSelectVal(String.valueOf(factorCost.getVehicleCategory()));
  543. }else{
  544. //如果方案中未录入,则不校验该项因子
  545. factor4.setNeedMatch(false);
  546. }
  547. resultMqp.put(4,factor4);
  548. //--------------------因子处理分割线----------------------------------
  549. FeeFactorInfoDto factor5=new FeeFactorInfoDto();
  550. factor5.setFactorName("使用性质");
  551. factor5.setMatchType("2");
  552. factor5.setMatchSequence(5);
  553. if(factorCost.getNatureOfUse()!=null&&!"".equals(factorCost.getNatureOfUse())){
  554. factor5.setNeedMatch(true);
  555. factor5.setMultipleSelectVal(String.valueOf(factorCost.getNatureOfUse()));
  556. }else{
  557. //如果方案中未录入,则不校验该项因子
  558. factor5.setNeedMatch(false);
  559. }
  560. resultMqp.put(5,factor5);
  561. //--------------------因子处理分割线----------------------------------
  562. FeeFactorInfoDto factor6=new FeeFactorInfoDto();
  563. factor6.setFactorName("客车座位数区间");
  564. factor6.setMatchType("3");
  565. factor6.setMatchSequence(6);
  566. if(checkFactorConfigWithArea(factorCost.getMinSeats(),factorCost.getMaxSeats(),factor6,factorCost)){
  567. factor6.setNeedMatch(true);
  568. factor6.setMinRangeVal((double)factorCost.getMinSeats());
  569. factor6.setMaxRangeVal((double)factorCost.getMaxSeats());
  570. }else{
  571. //如果方案中未录入,则不校验该项因子
  572. factor6.setNeedMatch(false);
  573. }
  574. resultMqp.put(6,factor6);
  575. //--------------------因子处理分割线----------------------------------
  576. FeeFactorInfoDto factor7=new FeeFactorInfoDto();
  577. factor7.setFactorName("新车购置价区间");
  578. factor7.setMatchType("3");
  579. factor7.setMatchSequence(7);
  580. if(checkFactorConfigWithArea(factorCost.getMinPurchasePrice(),factorCost.getMaxPurchasePrice(),factor7,factorCost)){
  581. factor7.setNeedMatch(true);
  582. factor7.setMinRangeVal((double)factorCost.getMinPurchasePrice());
  583. factor7.setMaxRangeVal((double)factorCost.getMaxPurchasePrice());
  584. }else{
  585. //如果方案中未录入,则不校验该项因子
  586. factor7.setNeedMatch(false);
  587. }
  588. resultMqp.put(7,factor7);
  589. //--------------------因子处理分割线----------------------------------
  590. FeeFactorInfoDto factor8=new FeeFactorInfoDto();
  591. factor8.setFactorName("核定载质量区间");
  592. factor8.setMatchType("3");
  593. factor8.setMatchSequence(8);
  594. if(checkFactorConfigWithArea(factorCost.getMinApprovedLoadCapacity(),factorCost.getMaxApprovedLoadCapacity(),factor8,factorCost)){
  595. factor8.setNeedMatch(true);
  596. factor8.setMinRangeVal((double)factorCost.getMinApprovedLoadCapacity());
  597. factor8.setMaxRangeVal((double)factorCost.getMaxApprovedLoadCapacity());
  598. }else{
  599. //如果方案中未录入,则不校验该项因子
  600. factor8.setNeedMatch(false);
  601. }
  602. resultMqp.put(8,factor8);
  603. //--------------------因子处理分割线----------------------------------
  604. FeeFactorInfoDto factor9=new FeeFactorInfoDto();
  605. factor9.setFactorName("交强险保费区间");
  606. factor9.setMatchType("3");
  607. factor9.setMatchSequence(9);
  608. if(checkFactorConfigWithArea(factorCost.getMinCompulsoryInsurancePremium(),factorCost.getMaxCompulsoryInsurancePremium(),factor9,factorCost)){
  609. factor9.setNeedMatch(true);
  610. factor9.setMinRangeVal((double)factorCost.getMinCompulsoryInsurancePremium());
  611. factor9.setMaxRangeVal((double)factorCost.getMaxCompulsoryInsurancePremium());
  612. }else{
  613. //如果方案中未录入,则不校验该项因子
  614. factor9.setNeedMatch(false);
  615. }
  616. resultMqp.put(9,factor9);
  617. //--------------------因子处理分割线----------------------------------
  618. FeeFactorInfoDto factor10=new FeeFactorInfoDto();
  619. factor10.setFactorName("车船税金额区间");
  620. factor10.setMatchType("3");
  621. factor10.setMatchSequence(10);
  622. if(checkFactorConfigWithArea(factorCost.getMinTaxAmount(),factorCost.getMaxTaxAmount(),factor10,factorCost)){
  623. factor10.setNeedMatch(true);
  624. factor10.setMinRangeVal((double)factorCost.getMinTaxAmount());
  625. factor10.setMaxRangeVal((double)factorCost.getMaxTaxAmount());
  626. }else{
  627. //如果方案中未录入,则不校验该项因子
  628. factor10.setNeedMatch(false);
  629. }
  630. resultMqp.put(10,factor10);
  631. //--------------------因子处理分割线----------------------------------
  632. FeeFactorInfoDto factor11=new FeeFactorInfoDto();
  633. factor11.setFactorName("三者保额区间");
  634. factor11.setMatchType("3");
  635. factor11.setMatchSequence(11);
  636. if(checkFactorConfigWithArea(factorCost.getMinTheThreePremium(),factorCost.getMaxTheThreePremium(),factor11,factorCost)){
  637. factor11.setNeedMatch(true);
  638. factor11.setMinRangeVal((double)factorCost.getMinTheThreePremium()*10000);
  639. factor11.setMaxRangeVal((double)factorCost.getMaxTheThreePremium()*10000);
  640. }else{
  641. //如果方案中未录入,则不校验该项因子
  642. factor11.setNeedMatch(false);
  643. }
  644. resultMqp.put(11,factor11);
  645. //--------------------因子处理分割线----------------------------------
  646. FeeFactorInfoDto factor12=new FeeFactorInfoDto();
  647. factor12.setFactorName("随车产品保费区间");
  648. factor12.setMatchType("3");
  649. factor12.setMatchSequence(12);
  650. if(checkFactorConfigWithArea(factorCost.getMinOnboardProductsPremium(),factorCost.getMaxOnboardProductsPremium(),factor12,factorCost)){
  651. factor12.setNeedMatch(true);
  652. factor12.setMinRangeVal((double)factorCost.getMinOnboardProductsPremium());
  653. factor12.setMaxRangeVal((double)factorCost.getMaxOnboardProductsPremium());
  654. }else{
  655. //如果方案中未录入,则不校验该项因子
  656. factor12.setNeedMatch(false);
  657. }
  658. resultMqp.put(12,factor12);
  659. //--------------------因子处理分割线----------------------------------
  660. FeeFactorInfoDto factor13=new FeeFactorInfoDto();
  661. factor13.setFactorName("商业险折扣区间");
  662. factor13.setMatchType("3");
  663. factor13.setMatchSequence(13);
  664. if(checkFactorConfigWithArea(factorCost.getMinCommercialInsuranceDiscount(),factorCost.getMaxCommercialInsuranceDiscount(),factor13,factorCost)){
  665. factor13.setNeedMatch(true);
  666. factor13.setMinRangeVal((double)factorCost.getMinCommercialInsuranceDiscount());
  667. factor13.setMaxRangeVal((double)factorCost.getMaxCommercialInsuranceDiscount());
  668. }else{
  669. //如果方案中未录入,则不校验该项因子
  670. factor13.setNeedMatch(false);
  671. }
  672. resultMqp.put(13,factor13);
  673. //--------------------因子处理分割线----------------------------------
  674. FeeFactorInfoDto factor14=new FeeFactorInfoDto();
  675. factor14.setFactorName("交强险折扣区间");
  676. factor14.setMatchType("3");
  677. factor14.setMatchSequence(14);
  678. if(checkFactorConfigWithArea(factorCost.getMinCompulsoryInsuranceDiscount(),factorCost.getMaxCompulsoryInsuranceDiscount(),factor14,factorCost)){
  679. factor14.setNeedMatch(true);
  680. factor14.setMinRangeVal(factorCost.getMinCompulsoryInsuranceDiscount());
  681. factor14.setMaxRangeVal(factorCost.getMaxCompulsoryInsuranceDiscount());
  682. }else{
  683. //如果方案中未录入,则不校验该项因子
  684. factor14.setNeedMatch(false);
  685. }
  686. resultMqp.put(14,factor14);
  687. //--------------------因子处理分割线----------------------------------
  688. FeeFactorInfoDto factor15=new FeeFactorInfoDto();
  689. factor15.setFactorName("保司评分区间");
  690. factor15.setMatchType("3");
  691. factor15.setMatchSequence(15);
  692. if(checkFactorConfigWithArea(factorCost.getMinScore(),factorCost.getMaxScore(),factor15,factorCost)){
  693. factor15.setNeedMatch(true);
  694. factor15.setMinRangeVal((double)factorCost.getMinScore());
  695. factor15.setMaxRangeVal((double)factorCost.getMaxScore());
  696. }else{
  697. //如果方案中未录入,则不校验该项因子
  698. factor15.setNeedMatch(false);
  699. }
  700. resultMqp.put(15,factor15);
  701. //--------------------因子处理分割线----------------------------------
  702. FeeFactorInfoDto factor16=new FeeFactorInfoDto();
  703. factor16.setFactorName("预期赔付率区间");
  704. factor16.setMatchType("3");
  705. factor16.setMatchSequence(16);
  706. if(checkFactorConfigWithArea(factorCost.getMinLossRation(),factorCost.getMaxLossRation(),factor16,factorCost)){
  707. factor16.setNeedMatch(true);
  708. factor16.setMinRangeVal((double)factorCost.getMinLossRation());
  709. factor16.setMaxRangeVal((double)factorCost.getMaxLossRation());
  710. }else{
  711. //如果方案中未录入,则不校验该项因子
  712. factor16.setNeedMatch(false);
  713. }
  714. resultMqp.put(16,factor16);
  715. //--------------------因子处理分割线----------------------------------
  716. FeeFactorInfoDto factor17=new FeeFactorInfoDto();
  717. factor17.setFactorName("车牌号地区");
  718. factor17.setMatchType("2");
  719. factor17.setMatchSequence(17);
  720. if(factorCost.getLicenseNumber()!=null&&!"".equals(factorCost.getLicenseNumber())){
  721. factor17.setNeedMatch(true);
  722. String matchStr=factorCost.getLicenseNumber();
  723. //考虑是否含暂未上牌标志
  724. if(factorCost.getContainNoLicense()!=null&&"1".equals(factorCost.getContainNoLicense())){
  725. matchStr=matchStr+",暂未上牌";
  726. }
  727. factor17.setMultipleSelectVal(matchStr);
  728. }else{
  729. //如果方案中未录入,则不校验该项因子
  730. factor17.setNeedMatch(false);
  731. }
  732. resultMqp.put(17,factor17);
  733. //--------------------因子处理分割线----------------------------------
  734. FeeFactorInfoDto factor18=new FeeFactorInfoDto();
  735. factor18.setMatchType("4");
  736. factor18.setMatchSequence(18);
  737. boolean driverCheckFlag=true;//司机保额是否需要校验
  738. boolean passengerCheckFlag=true;//乘客保额是否需要校验
  739. //临时赋值,下面方法中使用需要区分
  740. factor18.setFactorName("人员司机险保额");
  741. if(checkFactorConfigWithArea(factorCost.getMinDriverAmount(),factorCost.getMaxDriverAmount(),factor18,factorCost)){
  742. factor18.setDriverMinRangeVal(factorCost.getMinDriverAmount()*10000);
  743. factor18.setDriverMaxRangeVal(factorCost.getMaxDriverAmount()*10000);
  744. }else{
  745. driverCheckFlag=false;
  746. }
  747. //临时赋值,下面方法中使用需要区分
  748. factor18.setFactorName("人员乘客险保额");
  749. if(checkFactorConfigWithArea(factorCost.getMinPassengerAmount(),factorCost.getMaxPassengerAmount(),factor18,factorCost)){
  750. factor18.setPassengerMinRangeVal(factorCost.getMinPassengerAmount()*10000);
  751. factor18.setPassengerMaxRangeVal(factorCost.getMaxPassengerAmount()*10000);
  752. }else{
  753. passengerCheckFlag=false;
  754. }
  755. //最终给因子赋值
  756. factor18.setFactorName("司乘险保额");
  757. factor18.setDriverIsNeedMatch(driverCheckFlag);
  758. factor18.setPassengerIsNeedMatch(passengerCheckFlag);
  759. //司机、乘客都不需要校验时,不校验该因子
  760. if(!driverCheckFlag&&!passengerCheckFlag){
  761. factor18.setNeedMatch(false);
  762. }else{//需要校验时,需要考虑俩者关联关系
  763. if(factorCost.getDriverPassengerRelation()!=null&&!"".equals(factorCost.getDriverPassengerRelation())){
  764. //赋值该因子参数关联关系
  765. factor18.setDriverPassengerRelation(factorCost.getDriverPassengerRelation());
  766. factor18.setNeedMatch(true);
  767. }else{
  768. throw new SystemException("协议ID:"+factorCost.getAgreementId()+" 方案序号:"+factorCost.getId()+" 费用因子:"+factor18.getFactorName()+"关联关系配置有问题,请检查!");
  769. }
  770. }
  771. resultMqp.put(18,factor18);
  772. //--------------------因子处理分割线----------------------------------
  773. FeeFactorInfoDto factor19=new FeeFactorInfoDto();
  774. factor19.setFactorName("被保人年龄");
  775. factor19.setMatchType("3");
  776. factor19.setMatchSequence(19);
  777. if(checkFactorConfigWithArea(factorCost.getMinInsureAge(),factorCost.getMaxInsureAge(),factor19,factorCost)){
  778. factor19.setNeedMatch(true);
  779. factor19.setMinRangeVal((double)factorCost.getMinInsureAge());
  780. factor19.setMaxRangeVal((double)factorCost.getMaxInsureAge());
  781. }else{
  782. //如果方案中未录入,则不校验该项因子
  783. factor19.setNeedMatch(false);
  784. }
  785. resultMqp.put(19,factor19);
  786. //--------------------因子处理分割线----------------------------------
  787. FeeFactorInfoDto factor20=new FeeFactorInfoDto();
  788. factor20.setFactorName("车主年龄");
  789. factor20.setMatchType("3");
  790. factor20.setMatchSequence(20);
  791. if(checkFactorConfigWithArea(factorCost.getMinCarOwnerAge(),factorCost.getMaxCarOwnerAge(),factor20,factorCost)){
  792. factor20.setNeedMatch(true);
  793. factor20.setMinRangeVal((double)factorCost.getMinCarOwnerAge());
  794. factor20.setMaxRangeVal((double)factorCost.getMaxCarOwnerAge());
  795. }else{
  796. //如果方案中未录入,则不校验该项因子
  797. factor20.setNeedMatch(false);
  798. }
  799. resultMqp.put(20,factor20);
  800. //--------------------因子处理分割线----------------------------------
  801. FeeFactorInfoDto factor21=new FeeFactorInfoDto();
  802. boolean thirdMCheckFlag=true;//三者医保外用保额是否需要校验
  803. boolean driverMCheckFlag=true;//司机医保外用保额是否需要校验
  804. boolean passengerMCheckFlag=true;//乘客医保外用保额是否需要校验
  805. boolean anyMCheckFlag=true;//任意医保外用保额是否需要校验
  806. factor21.setMatchType("5");
  807. factor21.setMatchSequence(21);
  808. //三者
  809. if(factorCost.getThirdMedicalAmount()!=null&&factorCost.getThirdMedicalAmount()!=0){
  810. factor21.setThirdMedicalAmountVal(factorCost.getThirdMedicalAmount()*10000);
  811. }else{
  812. factor21.setThirdMedicalAmountVal(null);
  813. thirdMCheckFlag=false;
  814. }
  815. //司机
  816. if(factorCost.getDriverMedicalAmount()!=null&&factorCost.getDriverMedicalAmount()!=0){
  817. factor21.setDriverMedicalAmountVal(factorCost.getDriverMedicalAmount()*10000);
  818. }else{
  819. factor21.setDriverMedicalAmountVal(null);
  820. driverMCheckFlag=false;
  821. }
  822. //乘客
  823. if(factorCost.getPassengerMedicalAmount()!=null&&factorCost.getPassengerMedicalAmount()!=0){
  824. factor21.setPassengerMedicalAmountVal(factorCost.getPassengerMedicalAmount()*10000);
  825. }else{
  826. factor21.setPassengerMedicalAmountVal(null);
  827. passengerMCheckFlag=false;
  828. }
  829. //任意
  830. if(factorCost.getAnyMedicalAmount()!=null&&factorCost.getAnyMedicalAmount()!=0){
  831. factor21.setAnyMedicalAmountVal(factorCost.getAnyMedicalAmount()*10000);
  832. }else{
  833. factor21.setAnyMedicalAmountVal(null);
  834. anyMCheckFlag=false;
  835. }
  836. //最终给因子赋值
  837. factor21.setFactorName("医保外用保额");
  838. if(!thirdMCheckFlag&&!driverMCheckFlag&&!passengerMCheckFlag&&!anyMCheckFlag){//如果四项都没有配置时,不需要校验
  839. factor21.setNeedMatch(false);
  840. }else{
  841. factor21.setNeedMatch(true);
  842. }
  843. resultMqp.put(21,factor21);
  844. //--------------------因子处理分割线----------------------------------
  845. return resultMqp;
  846. }
  847. /**
  848. * 判断区间类因子是否需要匹配
  849. * @param minVal
  850. * @param maxVal
  851. * @param factorInfoDto
  852. * @param productCosts
  853. * @return
  854. */
  855. private boolean checkFactorConfigWithArea(Integer minVal, Integer maxVal,FeeFactorInfoDto factorInfoDto,PtlAgreementProductCosts productCosts) {
  856. boolean result=false; //默认不需要匹配
  857. if(minVal!=null&&maxVal!=null){
  858. if(minVal==0&&maxVal==0){//初始化没有配置的时候,全部默认的0,这种不需要匹配
  859. result=false;
  860. }else{
  861. if(minVal<=maxVal){
  862. result=true;
  863. }else{
  864. throw new SystemException("协议ID:"+productCosts.getAgreementId()+" 方案序号:"+productCosts.getId()+" 费用因子:"+factorInfoDto.getFactorName()+"配置有问题,请检查!");
  865. }
  866. }
  867. }else if(minVal!=null && maxVal==null){
  868. throw new SystemException("协议ID:"+productCosts.getAgreementId()+" 方案序号:"+productCosts.getId()+" 费用因子:"+factorInfoDto.getFactorName()+"配置有问题,请检查!");
  869. }else if(minVal==null&&maxVal!=null){
  870. throw new SystemException("协议ID:"+productCosts.getAgreementId()+" 方案序号:"+productCosts.getId()+" 费用因子:"+factorInfoDto.getFactorName()+"配置有问题,请检查!");
  871. }
  872. return result;
  873. }
  874. /**
  875. * 判断区间类因子是否需要匹配
  876. * @param minVal
  877. * @param maxVal
  878. * @param factorInfoDto
  879. * @param productCosts
  880. * @return
  881. */
  882. private boolean checkFactorConfigWithArea(Double minVal, Double maxVal,FeeFactorInfoDto factorInfoDto,PtlAgreementProductCosts productCosts) {
  883. boolean result=false; //默认不需要匹配
  884. if(minVal!=null&&maxVal!=null){
  885. if(minVal==0&&maxVal==0){//初始化没有配置的时候,全部默认的0,这种不需要匹配
  886. result=false;
  887. }else{
  888. if(minVal<=maxVal){
  889. result=true;
  890. }else{
  891. throw new SystemException("协议ID:"+productCosts.getAgreementId()+" 方案序号:"+productCosts.getId()+" 费用因子:"+factorInfoDto.getFactorName()+"配置有问题,请检查!");
  892. }
  893. }
  894. }else if(minVal!=null && maxVal==null){
  895. throw new SystemException("协议ID:"+productCosts.getAgreementId()+" 方案序号:"+productCosts.getId()+" 费用因子:"+factorInfoDto.getFactorName()+"配置有问题,请检查!");
  896. }else if(minVal==null&&maxVal!=null){
  897. throw new SystemException("协议ID:"+productCosts.getAgreementId()+" 方案序号:"+productCosts.getId()+" 费用因子:"+factorInfoDto.getFactorName()+"配置有问题,请检查!");
  898. }
  899. return result;
  900. }
  901. //----------------------------------------------分割线
  902. public FeeSchemeReqDto getFeeSchemeInfo(BaseQuoteInfoVo quoteInfoVo, QuoteRespVo quoteRespVo, String agreementId, String productId){
  903. PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
  904. CarInfoVo carInfoVo = quoteInfoVo.getCarInfo();
  905. List<KindInfoVo> kindList = quoteInfoVo.getKindList();
  906. String thirdPartyInsurance = "";
  907. String driverAmount="";
  908. String passengerAmount="";
  909. String thirdMedicalAmount="";
  910. String driverMedicalAmount="";
  911. String passengerMedicalAmount="";
  912. if(kindList!=null && kindList.size()>0){
  913. for(KindInfoVo kindInfoVo:kindList){
  914. //三者保额
  915. if("B".equals(kindInfoVo.getKindCode())){
  916. thirdPartyInsurance = String.valueOf(kindInfoVo.getAmount());
  917. }
  918. //司机保额
  919. if("D3".equals(kindInfoVo.getKindCode())){
  920. driverAmount = String.valueOf(kindInfoVo.getAmount());
  921. }
  922. //乘客保额
  923. if("D4".equals(kindInfoVo.getKindCode())){
  924. int quantity = Integer.parseInt(carInfoVo.getSeatCount())-1;
  925. passengerAmount = String.valueOf(kindInfoVo.getUnitAmount()*quantity);
  926. }
  927. //三者医保外用
  928. if("SY_FJ_YBW1".equals(kindInfoVo.getKindCode())){
  929. thirdMedicalAmount = String.valueOf(kindInfoVo.getAmount());
  930. }
  931. //司机医保外用
  932. if("SY_FJ_YBW3".equals(kindInfoVo.getKindCode())){
  933. driverMedicalAmount = String.valueOf(kindInfoVo.getAmount());
  934. }
  935. //乘客医保外用
  936. if("SY_FJ_YBW2".equals(kindInfoVo.getKindCode())){
  937. int quantity = Integer.parseInt(carInfoVo.getSeatCount())-1;
  938. passengerMedicalAmount = String.valueOf(kindInfoVo.getUnitAmount()*quantity);
  939. }
  940. }
  941. }
  942. FeeSchemeReqDto feeSchemeReqDto = new FeeSchemeReqDto();
  943. String isTransfer = "0";
  944. String isNewCar = "0";
  945. String isRenewal = "0";
  946. String useNature = "家庭自用";
  947. String carType="客车";
  948. String isNewEnergy = "0";
  949. feeSchemeReqDto.setBusType(productId);//"业务类型:单交0330、单商034001、单三034002、交三0330034002、交商0330034001"
  950. feeSchemeReqDto.setAgreementId(agreementId);//协议ID
  951. if(carInfoVo.isTransferFlag()){
  952. isTransfer = "1";
  953. }
  954. feeSchemeReqDto.setIsTransfer(isTransfer);//是否过户 1是 0否"
  955. //新旧车判断逻辑,初登日期小于当前日期加9个月
  956. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  957. LocalDate currentDate = LocalDate.now();
  958. if(StringUtils.isNotEmpty(carInfoVo.getRegisterDate())){
  959. LocalDate registerDate = LocalDate.parse(carInfoVo.getRegisterDate(), formatter).plusMonths(9);
  960. if(currentDate.isBefore(registerDate)){
  961. isNewCar = "1";
  962. }
  963. }
  964. List<PtlNewCarJudgeRules> ptlNewCarJudgeRulesList = ptlNewCarJudgeRulesService.getByCompanyId(ptlAgreementAttribution.getInsCompanyId());
  965. if(ptlNewCarJudgeRulesList!=null &&ptlNewCarJudgeRulesList.size()>0){
  966. PtlNewCarJudgeRules ptlNewCarJudgeRules = ptlNewCarJudgeRulesList.get(0);
  967. if("月".equals(ptlNewCarJudgeRules.getUnitTypeCode())){
  968. LocalDate registerDate = LocalDate.parse(carInfoVo.getRegisterDate(), formatter).plusMonths(Integer.parseInt(ptlNewCarJudgeRules.getUnitTypeValue()));
  969. if(currentDate.isBefore(registerDate)){
  970. isNewCar = "1";
  971. }
  972. }else{
  973. LocalDate registerDate = LocalDate.parse(carInfoVo.getRegisterDate(), formatter).plusDays(Integer.parseInt(ptlNewCarJudgeRules.getUnitTypeValue()));
  974. if(currentDate.isBefore(registerDate)){
  975. isNewCar = "1";
  976. }
  977. }
  978. }
  979. feeSchemeReqDto.setIsNewCar(isNewCar);//是否新车 1是 0否
  980. if("1".equals(carInfoVo.getPowertype())||"2".equals(carInfoVo.getPowertype())||"3".equals(carInfoVo.getPowertype())){
  981. isNewEnergy = "1";
  982. }
  983. feeSchemeReqDto.setIsNewEnergy(isNewEnergy);//是否新能源 1是 0否
  984. feeSchemeReqDto.setIsRenewal("0");//是否续保 1是 0否 续保取值有争议 默认送否 暂时搁置
  985. //页面要素及中煤交互请求返参没有,先默认写死
  986. if("A0".equals(carInfoVo.getCimodelclass())){
  987. carType="客车";
  988. }
  989. feeSchemeReqDto.setVehicleCategory(carType);//车辆大类: 客车、货车、特种车、挂车、摩托车、拖拉机
  990. if("8A".equals(carInfoVo.getCarnature())){
  991. useNature = "家庭自用";
  992. }
  993. feeSchemeReqDto.setUseNature(useNature);//使用性质: 营业出租、营业租赁、营业公交、营业客运、营业货运、营业旅游、家庭自用、非营业机关事业、非营业企业、非营业个人
  994. feeSchemeReqDto.setSeatNum(String.valueOf(carInfoVo.getSeatCount()));//座位数 大概率准
  995. feeSchemeReqDto.setPurchasePrice(carInfoVo.getPurchasePrice());//新车购置价 可能再次新车筛选的时候送保司和页面带入有差异
  996. feeSchemeReqDto.setApprovedLoadCapacity(String.valueOf(carInfoVo.getLimitLoad()));//核定载质量 可能再次新车筛选的时候送保司和页面带入有差异
  997. feeSchemeReqDto.setJqPremium(String.valueOf(quoteRespVo.getJqPremium()));//交强保费
  998. feeSchemeReqDto.setSyPremium(String.valueOf(quoteRespVo.getSyPremium()));//商业保费
  999. feeSchemeReqDto.setSumPayTax(String.valueOf(quoteRespVo.getTaxAmount()));//车船税金额
  1000. feeSchemeReqDto.setThirdPartyInsurance(thirdPartyInsurance);//三者险保额 准
  1001. feeSchemeReqDto.setNoCarPremium(String.valueOf(quoteRespVo.getJyPremium()));//随车产品保费
  1002. feeSchemeReqDto.setSyDiscount(quoteRespVo.getSyAdjustRate());//商业险折扣
  1003. feeSchemeReqDto.setJqDiscount(quoteRespVo.getJqAdjustRate());//交强险折扣
  1004. feeSchemeReqDto.setInsuranceScore(quoteRespVo.getILogPreUdwMess());//保司评分
  1005. feeSchemeReqDto.setExpectedLossRate(String.valueOf(quoteRespVo.getLossRation()));//预期赔付率
  1006. if(carInfoVo.getLicenseNo()!=null&&!"".equals(carInfoVo.getLicenseNo())&&!"暂未上牌".equals(carInfoVo.getLicenseNo())){
  1007. feeSchemeReqDto.setLicenseNo(carInfoVo.getLicenseNo().substring(0,2));//车牌号
  1008. }else{
  1009. feeSchemeReqDto.setLicenseNo("暂未上牌");//车牌号
  1010. }
  1011. feeSchemeReqDto.setDriverAmount(driverAmount);//人员司机险保额 准
  1012. feeSchemeReqDto.setPassengerAmount(passengerAmount);//人员乘客险保额 准
  1013. feeSchemeReqDto.setThirdMedicalAmount(thirdMedicalAmount);//三者医保外用 准
  1014. feeSchemeReqDto.setDriverMedicalAmount(driverMedicalAmount);//司机医保外用 准
  1015. feeSchemeReqDto.setPassengerMedicalAmount(passengerMedicalAmount);//乘客医保外用 准
  1016. feeSchemeReqDto.setInsureAge(quoteInfoVo.getInsuredPersonInfo().getAge());//被保人年龄
  1017. feeSchemeReqDto.setCarOwnerAge(quoteInfoVo.getOwnerInfo().getAge());//车主年龄
  1018. return feeSchemeReqDto;
  1019. }
  1020. public void dealFeeOrderInfo(BaseQuoteInfoVo quoteInfoVo, QuoteRespVo quoteRespVo, String agreementId,String businessNo){
  1021. BigDecimal jqNoTaxPremium = new BigDecimal(0);
  1022. BigDecimal syNoTaxPremium = new BigDecimal(0);
  1023. InsOrders insOrders = insOrdersService.getById(quoteRespVo.getOrderno());
  1024. List<AccidentResponseVo> accidentList = quoteRespVo.getAccident();
  1025. /*BigDecimal accidentActualPremium = new BigDecimal(0);
  1026. for(AccidentResponseVo accidentResponseVo: accidentList){
  1027. accidentActualPremium = new BigDecimal(accidentResponseVo.getActualPremium());
  1028. }*/
  1029. FeeSchemeReqDto feeSchemeReqDto = this.getFeeSchemeInfo(quoteInfoVo,quoteRespVo,agreementId,insOrders.getProductid());
  1030. FeeSchemeResDto feeSchemeResDto = this.matchTheAppropriateFees(feeSchemeReqDto);
  1031. InsFeeOrder insFeeOrder = new InsFeeOrder(feeSchemeReqDto,feeSchemeResDto,businessNo);
  1032. PtlAgreement agreement=ptlAgreementService.getById(agreementId);
  1033. //先通过含税保费计算出不含税保费 公式 总保费/(1+增值税率) 目前增值税率是0.06
  1034. if(insFeeOrder.getJqPremium().doubleValue()>0){
  1035. //默认用含税保费计算
  1036. jqNoTaxPremium=insFeeOrder.getJqPremium();
  1037. //如果协议中配置为不含税结算时,计算不含税保费
  1038. if(StringUtils.isNotEmpty(agreement.getWithTax())&&"否".equals(agreement.getWithTax())){
  1039. jqNoTaxPremium = insFeeOrder.getJqPremium().divide(new BigDecimal(1+0.06),BigDecimal.ROUND_HALF_UP,2);
  1040. }
  1041. insFeeOrder.setJqNoTaxPremium(jqNoTaxPremium);
  1042. //交强险总费用
  1043. insFeeOrder.setJqCostsPremiums(getPremium(jqNoTaxPremium,insFeeOrder.getJqCostsProportion()));
  1044. //监管费比例
  1045. if("1".equals(feeSchemeReqDto.getIsNewCar())){
  1046. insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getJqNewCarCostsProportion()));
  1047. }else if("0".equals(feeSchemeReqDto.getIsNewCar())){
  1048. insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getJqOldCarCostsProportion()));
  1049. }else{
  1050. insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(0));
  1051. }
  1052. //监管费
  1053. insFeeOrder.setJqSuperviseCostsPremiums(getPremium(jqNoTaxPremium,insFeeOrder.getJqSuperviseCostsProportion()));
  1054. //溢出费比例 先搁置放0
  1055. insFeeOrder.setJqSpilloverProportion(new BigDecimal(feeSchemeResDto.getJqSpilloverProportion()));
  1056. //溢出费 先搁置放0
  1057. insFeeOrder.setJqSpilloverPremiums(getPremium(jqNoTaxPremium,insFeeOrder.getJqSpilloverProportion()));
  1058. }
  1059. if(insFeeOrder.getSyPremium().doubleValue()>0){
  1060. //默认用含税保费计算
  1061. syNoTaxPremium = insFeeOrder.getSyPremium();
  1062. //如果协议中配置为不含税结算时,计算不含税保费
  1063. if(StringUtils.isNotEmpty(agreement.getWithTax())&&"否".equals(agreement.getWithTax())){
  1064. syNoTaxPremium = insFeeOrder.getSyPremium().divide(new BigDecimal(1+0.06),BigDecimal.ROUND_HALF_UP,2);
  1065. }
  1066. insFeeOrder.setSyNoTaxPremium(syNoTaxPremium);
  1067. //商业险总费用
  1068. insFeeOrder.setSyCostsPremiums(getPremium(syNoTaxPremium,insFeeOrder.getSyCostsProportion()));
  1069. //监管费比例
  1070. if("1".equals(feeSchemeReqDto.getIsNewCar())){
  1071. insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getSyNewCarCostsProportion()));
  1072. }else if("0".equals(feeSchemeReqDto.getIsNewCar())){
  1073. insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getSyOldCarCostsProportion()));
  1074. }else{
  1075. insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(0));
  1076. }
  1077. //监管费
  1078. insFeeOrder.setSySuperviseCostsPremiums(getPremium(syNoTaxPremium,insFeeOrder.getSySuperviseCostsProportion()));
  1079. //溢出费比例 先搁置放0
  1080. insFeeOrder.setSySpilloverProportion(new BigDecimal(feeSchemeResDto.getSySpilloverProportion()));
  1081. //溢出费 先搁置放0
  1082. insFeeOrder.setSySpilloverPremiums(getPremium(syNoTaxPremium,insFeeOrder.getSySpilloverProportion()));
  1083. }
  1084. if(jqNoTaxPremium.doubleValue() >0 || syNoTaxPremium.doubleValue() >0){
  1085. BigDecimal totalNoTaxPremium = jqNoTaxPremium.add(syNoTaxPremium);
  1086. SysUser sysUser = sysUserService.findByUserId(insOrders.getUserid());
  1087. /**
  1088. * 机构管理费比例逻辑
  1089. * 当前出单员的机构编码找他的上一级就是五级
  1090. * 机构层级划分方式
  1091. * 99 总公司 一级
  1092. * 9914山西分公司 二级
  1093. * 991401太原中支 三级
  1094. * 99140105小店中支 四级
  1095. * 9914010501 营销服务部 五级
  1096. * 1团队 无机构层级
  1097. */
  1098. //判断出单员归属机构层级
  1099. String parentId = sysUser.getDeptId();
  1100. String comlevel = "";
  1101. do{//循环操作
  1102. SysDept sysDeptTemp = sysDeptService.getById(parentId);
  1103. if(sysDeptTemp!=null&&StringUtils.isNotEmpty(sysDeptTemp.getParentId())){
  1104. parentId = sysDeptTemp.getParentId();
  1105. }else{
  1106. break;
  1107. }
  1108. if(StringUtils.isEmpty(sysDeptTemp.getComlevel())){
  1109. continue;
  1110. }else {
  1111. comlevel = sysDeptTemp.getComlevel();
  1112. }
  1113. //五级机构管理费用比例
  1114. if(sysDeptTemp!=null && "5".equals(sysDeptTemp.getComlevel())){
  1115. insFeeOrder.setFifthDeptProportion(new BigDecimal(sysDeptTemp.getManagementFee()));
  1116. insFeeOrder.setFifthDeptPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getFifthDeptProportion()));
  1117. }
  1118. //四级机构管理费用比例
  1119. if(sysDeptTemp!=null && "4".equals(sysDeptTemp.getComlevel())){
  1120. insFeeOrder.setForthDeptProportion(new BigDecimal(sysDeptTemp.getManagementFee()));
  1121. insFeeOrder.setForthDeptPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getForthDeptProportion()));
  1122. }
  1123. //三级机构管理费用比例
  1124. if(sysDeptTemp!=null && "3".equals(sysDeptTemp.getComlevel())){
  1125. insFeeOrder.setThirdDeptProportion(new BigDecimal(sysDeptTemp.getManagementFee()));
  1126. insFeeOrder.setThirdDeptPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getThirdDeptProportion()));
  1127. }
  1128. //二级机构管理费用比例
  1129. if(sysDeptTemp!=null && "2".equals(sysDeptTemp.getComlevel())){
  1130. insFeeOrder.setSecondDeptProportion(new BigDecimal(sysDeptTemp.getManagementFee()));
  1131. insFeeOrder.setSecondDeptPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getSecondDeptProportion()));
  1132. }
  1133. //一级机构管理费用比例
  1134. if(sysDeptTemp!=null && "1".equals(sysDeptTemp.getComlevel())){
  1135. insFeeOrder.setFirstDeptProportion(new BigDecimal(sysDeptTemp.getManagementFee()));
  1136. insFeeOrder.setFirstDeptPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getFirstDeptProportion()));
  1137. //取到第一层级时结束
  1138. break;
  1139. }
  1140. }while (!"1".equals(comlevel));
  1141. //一级分销比例 推荐人
  1142. //二级分销比例
  1143. //三级分销比例
  1144. /**
  1145. * 分销一级、二级、三级存值取团队配置的分销佣金比例,若该团队走三级分销模式,当前出单员出单时,跟单的分销取值方式为:
  1146. * 根据出单员的推荐人向上找三级,若可以找到,则跟单存一、二、三分销比例;
  1147. * 若向上只能找到一级或者二级,则跟单存一级或者一级、二级
  1148. * 比如 A 1 B 2 C 3 D 若D出单 则给 C 3个 B 2个 A 1个;C出单给 B 3个 A 2个
  1149. * 第一步,先判断团队配置的分销模式
  1150. * 第二步,根据分销模式找上级存值相应分销比例
  1151. * 第三步,仅有一个上级的情况分销比例存啥
  1152. */
  1153. List<EsmRetail> esmRetailList = esmRetailService.selectList(" where t.deptid=? and t.status = '1' ", new Object[]{sysUser.getDeptId()});
  1154. if(esmRetailList!=null && esmRetailList.size()>0){
  1155. EsmRetail esmRetail = esmRetailList.get(0);
  1156. if(esmRetail!=null){
  1157. int cycleIndex = 0;
  1158. if("3".equals(esmRetail.getRetailtype())){//团队配置了三级分销模式
  1159. cycleIndex = 3;
  1160. }else if("2".equals(esmRetail.getRetailtype())){//团队配置了二级分销模式
  1161. cycleIndex = 2;
  1162. }else if("1".equals(esmRetail.getRetailtype())){//团队配置了一级分销模式
  1163. cycleIndex = 1;
  1164. }else if("0".equals(esmRetail.getRetailtype())){//团队没有配置分销模式
  1165. cycleIndex = 0;
  1166. }
  1167. //利用当前工号,循环向上找推荐人
  1168. String userId = sysUser.getId();
  1169. int breakCycle = 99999999;
  1170. for(int i=0;i<=cycleIndex;i++){
  1171. EsmUserReferrer userReferrer = esmUserReferrerService.getById(userId);
  1172. if(userReferrer.getReferrerId().equals(userReferrer.getId())){//团队长,没有上级
  1173. //跳出循环
  1174. breakCycle = i;
  1175. break;
  1176. }else {
  1177. userId = userReferrer.getReferrerId();
  1178. }
  1179. }
  1180. //breakCycle是3,当前工号的上级的上级的上级就是团队长
  1181. //breakCycle是2,当前工号的上级的上级就是团队长
  1182. //breakCycle是1,当前工号的上级就是团队长
  1183. //breakCycle是0,当前工号就是团队长
  1184. if("3".equals(esmRetail.getRetailtype())){//团队配置了三级分销模式
  1185. if(breakCycle==99999999||breakCycle==3){
  1186. insFeeOrder.setFirstRetailProportion(new BigDecimal(esmRetail.getDisrate1()));
  1187. insFeeOrder.setSecondRetailProportion(new BigDecimal(esmRetail.getDisrate2()));
  1188. insFeeOrder.setThirdRetailProportion(new BigDecimal(esmRetail.getDisrate3()));
  1189. }else if(breakCycle==2){
  1190. insFeeOrder.setSecondRetailProportion(new BigDecimal(esmRetail.getDisrate2()));
  1191. insFeeOrder.setThirdRetailProportion(new BigDecimal(esmRetail.getDisrate3()));
  1192. }else if(breakCycle==1){
  1193. insFeeOrder.setThirdRetailProportion(new BigDecimal(esmRetail.getDisrate3()));
  1194. }
  1195. }else if("2".equals(esmRetail.getRetailtype())){//团队配置了二级分销模式
  1196. if(breakCycle==99999999||breakCycle==3 || breakCycle==2){
  1197. insFeeOrder.setFirstRetailProportion(new BigDecimal(esmRetail.getDisrate1()));
  1198. insFeeOrder.setSecondRetailProportion(new BigDecimal(esmRetail.getDisrate2()));
  1199. }else if(breakCycle==1){
  1200. insFeeOrder.setSecondRetailProportion(new BigDecimal(esmRetail.getDisrate2()));
  1201. }
  1202. }else if("1".equals(esmRetail.getRetailtype())){//团队配置了一级分销模式
  1203. if(breakCycle==99999999||breakCycle==3 || breakCycle==2||breakCycle==1){
  1204. insFeeOrder.setFirstRetailProportion(new BigDecimal(esmRetail.getDisrate1()));
  1205. }
  1206. }
  1207. insFeeOrder.setFirstRetailPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getFirstRetailProportion()));
  1208. insFeeOrder.setSecondRetailPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getSecondRetailProportion()));
  1209. insFeeOrder.setThirdRetailPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getThirdRetailProportion()));
  1210. }
  1211. }
  1212. }
  1213. insFeeOrderService.insertCompanyAndOrders(insFeeOrder);
  1214. }
  1215. private BigDecimal getPremium(BigDecimal noTaxPremium,BigDecimal costsProportion){
  1216. BigDecimal premium = new BigDecimal(0);
  1217. if(costsProportion!=null && costsProportion.doubleValue()>0){
  1218. premium = noTaxPremium.multiply(costsProportion).divide(new BigDecimal(100),4,BigDecimal.ROUND_HALF_UP);
  1219. }
  1220. return premium;
  1221. }
  1222. private BigDecimal getPremiumForSubtract(BigDecimal former,BigDecimal latter){
  1223. BigDecimal premium = new BigDecimal(0);
  1224. if(former!=null && latter!=null){
  1225. premium = former.subtract(latter);
  1226. }
  1227. return premium;
  1228. }
  1229. public QueryOrderFeeVo queryFeeOrderInfo(String companyId){
  1230. QueryOrderFeeVo queryOrderFeeVo = new QueryOrderFeeVo();
  1231. QueryOrderCommissionVo orderCommissionVo = new QueryOrderCommissionVo();
  1232. OrderFeeVo jqOrderFeeVo = new OrderFeeVo();
  1233. OrderFeeVo syOrderFeeVo = new OrderFeeVo();
  1234. OrderFeeVo fcOrderFeeVo = new OrderFeeVo();
  1235. InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
  1236. InsFeeOrder insFeeOrder = insFeeOrderService.getByInsOrderNo(insAreaCompany.getId());
  1237. if(insFeeOrder!=null){
  1238. if(insFeeOrder.getJqPremium()!=null && insFeeOrder.getJqPremium().doubleValue()>0 && insFeeOrder.getSyPremium()!=null && insFeeOrder.getSyPremium().doubleValue()==0){//当为单交业务时
  1239. jqOrderFeeVo = packageOrderFeeInfoOne(insFeeOrder);
  1240. jqOrderFeeVo.setCostsPremiums(convertToString(insFeeOrder.getJqCostsPremiums()));
  1241. jqOrderFeeVo.setCostsProportion(convertToString(insFeeOrder.getJqCostsProportion()));
  1242. jqOrderFeeVo.setCostsPremiumsAll(convertToString(insFeeOrder.getJqSuperviseCostsPremiums())+"元 / "+convertToString(insFeeOrder.getJqCostsPremiums().subtract(insFeeOrder.getJqSuperviseCostsPremiums()))+"元 / "+convertToString(insFeeOrder.getJqCostsPremiums())+"元");
  1243. jqOrderFeeVo.setCostsProportionAll(convertToString(insFeeOrder.getJqSuperviseCostsProportion())+" / "+convertToString(insFeeOrder.getJqCostsProportion().subtract(insFeeOrder.getJqSuperviseCostsProportion()))+" / "+convertToString(insFeeOrder.getJqCostsProportion()));
  1244. /*出单员手续费比例=总费用比例-各级管理费-各级分销费-溢出费*/
  1245. orderCommissionVo = getQueryOrderCommission(orderCommissionVo,insFeeOrder,"JQ");
  1246. }else if(insFeeOrder.getSyPremium()!=null && insFeeOrder.getSyPremium().doubleValue()>0 && insFeeOrder.getJqPremium()!=null && insFeeOrder.getJqPremium().doubleValue()==0){//当为单商业务时
  1247. syOrderFeeVo = packageOrderFeeInfoOne(insFeeOrder);
  1248. syOrderFeeVo.setCostsPremiums(convertToString(insFeeOrder.getSyCostsPremiums()));
  1249. syOrderFeeVo.setCostsProportion(convertToString(insFeeOrder.getSyCostsProportion()));
  1250. syOrderFeeVo.setCostsPremiumsAll(convertToString(insFeeOrder.getSySuperviseCostsPremiums())+"元 / "+convertToString(insFeeOrder.getSyCostsPremiums().subtract(insFeeOrder.getSySuperviseCostsPremiums()))+"元 / "+convertToString(insFeeOrder.getSyCostsPremiums())+"元");
  1251. syOrderFeeVo.setCostsProportionAll(convertToString(insFeeOrder.getSySuperviseCostsProportion())+" / "+convertToString(insFeeOrder.getSyCostsProportion().subtract(insFeeOrder.getSySuperviseCostsProportion()))+" / "+convertToString(insFeeOrder.getSyCostsProportion()));
  1252. /*出单员手续费比例=总费用比例-各级管理费-各级分销费-溢出费*/
  1253. orderCommissionVo = getQueryOrderCommission(orderCommissionVo,insFeeOrder,"SY");
  1254. }else if(insFeeOrder.getJqPremium()!=null && insFeeOrder.getJqPremium().doubleValue()>0 && insFeeOrder.getSyPremium()!=null && insFeeOrder.getSyPremium().doubleValue()>0){//当为交商业务时
  1255. QueryOrderFeeVo queryOrderFeeVoTemp = packageOrderFeeInfoAll(insFeeOrder);
  1256. //获取交强险费用明细
  1257. jqOrderFeeVo = queryOrderFeeVoTemp.getJqCoderFeeVo();
  1258. jqOrderFeeVo.setCostsPremiums(convertToString(insFeeOrder.getJqCostsPremiums()));
  1259. jqOrderFeeVo.setCostsProportion(convertToString(insFeeOrder.getJqCostsProportion()));
  1260. jqOrderFeeVo.setCostsPremiumsAll(convertToString(insFeeOrder.getJqSuperviseCostsPremiums())+"元 / "+convertToString(insFeeOrder.getJqCostsPremiums().subtract(insFeeOrder.getJqSuperviseCostsPremiums()))+"元 / "+convertToString(insFeeOrder.getJqCostsPremiums())+"元");
  1261. jqOrderFeeVo.setCostsProportionAll(convertToString(insFeeOrder.getJqSuperviseCostsProportion())+" / "+convertToString(insFeeOrder.getJqCostsProportion().subtract(insFeeOrder.getJqSuperviseCostsProportion()))+" / "+convertToString(insFeeOrder.getJqCostsProportion()));
  1262. //获取商业险费用明细
  1263. syOrderFeeVo = queryOrderFeeVoTemp.getSyCoderFeeVo();
  1264. syOrderFeeVo.setCostsPremiums(convertToString(insFeeOrder.getSyCostsPremiums()));
  1265. syOrderFeeVo.setCostsProportion(convertToString(insFeeOrder.getSyCostsProportion()));
  1266. syOrderFeeVo.setCostsPremiumsAll(convertToString(insFeeOrder.getSySuperviseCostsPremiums())+"元 / "+convertToString(insFeeOrder.getSyCostsPremiums().subtract(insFeeOrder.getSySuperviseCostsPremiums()))+"元 / "+convertToString(insFeeOrder.getSyCostsPremiums())+"元");
  1267. syOrderFeeVo.setCostsProportionAll(convertToString(insFeeOrder.getSySuperviseCostsProportion())+" / "+convertToString(insFeeOrder.getSyCostsProportion().subtract(insFeeOrder.getSySuperviseCostsProportion()))+" / "+convertToString(insFeeOrder.getSyCostsProportion()));
  1268. /*出单员手续费比例=总费用比例-各级管理费-各级分销费-溢出费*/
  1269. orderCommissionVo = getQueryOrderCommission(orderCommissionVo,insFeeOrder,"ALL");
  1270. }
  1271. queryOrderFeeVo.setJqCoderFeeVo(jqOrderFeeVo);
  1272. queryOrderFeeVo.setSyCoderFeeVo(syOrderFeeVo);
  1273. queryOrderFeeVo.setFcCoderFeeVo(fcOrderFeeVo);
  1274. queryOrderFeeVo.setOrderCommissionVo(orderCommissionVo);
  1275. }
  1276. return queryOrderFeeVo;
  1277. }
  1278. private QueryOrderCommissionVo getQueryOrderCommission(QueryOrderCommissionVo orderCommissionVo,InsFeeOrder insFeeOrder,String businessType){
  1279. /**
  1280. *单保交商时,insFeeOrder 存的就是单交商的各级管理费及分销费
  1281. *同保交商时,insFeeOrder 存的金额是交商总金额,需要扣减
  1282. */
  1283. /*出单员手续费比例=总费用比例-各级管理费-各级分销费-溢出费*/
  1284. if("JQ".equals(businessType)){
  1285. BigDecimal costsPremiums = insFeeOrder.getJqCostsPremiums();
  1286. BigDecimal costsProportion = insFeeOrder.getJqCostsProportion();
  1287. BigDecimal totalCostsProportion = getCostsProportion(insFeeOrder);
  1288. BigDecimal totalCostsPremiums = getCostsPremiumsOne(insFeeOrder);
  1289. if(insFeeOrder.getJqSpilloverPremiums()!=null){
  1290. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getJqSpilloverPremiums());
  1291. }
  1292. if(insFeeOrder.getJqSpilloverProportion()!=null){
  1293. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getJqSpilloverProportion());
  1294. }
  1295. BigDecimal userCostsPremiums = costsPremiums.subtract(totalCostsPremiums);
  1296. BigDecimal userCostsProportion = costsProportion.subtract(totalCostsProportion);
  1297. orderCommissionVo.setJqFeePremium(userCostsPremiums.toString());
  1298. orderCommissionVo.setJqFeeRate(userCostsProportion.toString());
  1299. orderCommissionVo.setTotalFeePremium(userCostsPremiums.toString());
  1300. }else if("SY".equals(businessType)){
  1301. BigDecimal costsPremiums = insFeeOrder.getSyCostsPremiums();
  1302. BigDecimal costsProportion = insFeeOrder.getSyCostsProportion();
  1303. BigDecimal totalCostsProportion = getCostsProportion(insFeeOrder);
  1304. BigDecimal totalCostsPremiums = getCostsPremiumsOne(insFeeOrder);
  1305. if(insFeeOrder.getSySpilloverPremiums()!=null){
  1306. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getSySpilloverPremiums());
  1307. }
  1308. if(insFeeOrder.getSySpilloverProportion()!=null){
  1309. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getSySpilloverProportion());
  1310. }
  1311. BigDecimal userCostsPremiums = costsPremiums.subtract(totalCostsPremiums);
  1312. BigDecimal userCostsProportion = costsProportion.subtract(totalCostsProportion);
  1313. orderCommissionVo.setSyFeePremium(userCostsPremiums.toString());
  1314. orderCommissionVo.setSyFeeRate(userCostsProportion.toString());
  1315. orderCommissionVo.setTotalFeePremium(userCostsPremiums.toString());
  1316. }else if("ALL".equals(businessType)){
  1317. BigDecimal jqCostsPremiums = insFeeOrder.getJqCostsPremiums();
  1318. BigDecimal jqCostsProportion = insFeeOrder.getJqCostsProportion();
  1319. BigDecimal syCostsPremiums = insFeeOrder.getSyCostsPremiums();
  1320. BigDecimal syCostsProportion = insFeeOrder.getSyCostsProportion();
  1321. BigDecimal totalCostsProportion = getCostsProportion(insFeeOrder);
  1322. BigDecimal jqTotalCostsProportion = totalCostsProportion;
  1323. BigDecimal syTotalCostsProportion = totalCostsProportion;
  1324. HashMap<String,BigDecimal> costsPremiumsMap = getCostsPremiumsAll(insFeeOrder);
  1325. BigDecimal jqTotalCostsPremiums = costsPremiumsMap.get("JQ");
  1326. if(insFeeOrder.getJqSpilloverPremiums()!=null){
  1327. jqTotalCostsPremiums = jqTotalCostsPremiums.add(insFeeOrder.getJqSpilloverPremiums());
  1328. }
  1329. if(insFeeOrder.getJqSpilloverProportion()!=null){
  1330. jqTotalCostsProportion = jqTotalCostsProportion.add(insFeeOrder.getJqSpilloverProportion());
  1331. }
  1332. BigDecimal syTotalCostsPremiums = costsPremiumsMap.get("SY");
  1333. if(insFeeOrder.getJqSpilloverPremiums()!=null){
  1334. syTotalCostsPremiums = syTotalCostsPremiums.add(insFeeOrder.getJqSpilloverPremiums());
  1335. }
  1336. if(insFeeOrder.getJqSpilloverProportion()!=null){
  1337. syTotalCostsProportion = syTotalCostsProportion.add(insFeeOrder.getJqSpilloverProportion());
  1338. }
  1339. BigDecimal jqUserCostsPremiums = jqCostsPremiums.subtract(jqTotalCostsPremiums);
  1340. BigDecimal jqUserCostsProportion = jqCostsProportion.subtract(jqTotalCostsProportion);
  1341. BigDecimal syUserCostsPremiums = syCostsPremiums.subtract(syTotalCostsPremiums);
  1342. BigDecimal syUserCostsProportion = syCostsProportion.subtract(syTotalCostsProportion);
  1343. orderCommissionVo.setJqFeePremium(jqUserCostsPremiums.toString());
  1344. orderCommissionVo.setJqFeeRate(jqUserCostsProportion.toString());
  1345. orderCommissionVo.setSyFeePremium(syUserCostsPremiums.toString());
  1346. orderCommissionVo.setSyFeeRate(syUserCostsProportion.toString());
  1347. orderCommissionVo.setTotalFeePremium(jqUserCostsPremiums.add(syUserCostsPremiums).toString());
  1348. }
  1349. return orderCommissionVo;
  1350. }
  1351. private HashMap<String,BigDecimal> getCostsPremiumsAll(InsFeeOrder insFeeOrder){
  1352. HashMap<String,BigDecimal> costsPremiumsMap = new HashMap<>();
  1353. InsFeeOrder jqInsFeeOrderTemp = new InsFeeOrder();
  1354. //先利用交强费重算费用
  1355. jqInsFeeOrderTemp.setFirstDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getFirstDeptProportion()));
  1356. jqInsFeeOrderTemp.setSecondDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getSecondDeptProportion()));
  1357. jqInsFeeOrderTemp.setThirdDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getThirdDeptProportion()));
  1358. jqInsFeeOrderTemp.setForthDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getForthDeptProportion()));
  1359. jqInsFeeOrderTemp.setFifthDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getFifthDeptProportion()));
  1360. jqInsFeeOrderTemp.setFirstRetailPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getFirstRetailProportion()));
  1361. jqInsFeeOrderTemp.setSecondRetailPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getSecondRetailProportion()));
  1362. jqInsFeeOrderTemp.setThirdRetailPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getThirdRetailProportion()));
  1363. BigDecimal jqCostsPremiums = getCostsPremiumsOne(jqInsFeeOrderTemp);
  1364. costsPremiumsMap.put("JQ",jqCostsPremiums);
  1365. //再利用总费-交强费,得出商业费
  1366. InsFeeOrder syInsFeeOrderTemp = new InsFeeOrder();
  1367. syInsFeeOrderTemp.setFirstDeptPremiums(getPremiumForSubtract(insFeeOrder.getFirstDeptPremiums(),jqInsFeeOrderTemp.getFirstDeptPremiums()));
  1368. syInsFeeOrderTemp.setSecondDeptPremiums(getPremiumForSubtract(insFeeOrder.getSecondDeptPremiums(),jqInsFeeOrderTemp.getSecondDeptPremiums()));
  1369. syInsFeeOrderTemp.setThirdDeptPremiums(getPremiumForSubtract(insFeeOrder.getThirdDeptPremiums(),jqInsFeeOrderTemp.getThirdDeptPremiums()));
  1370. syInsFeeOrderTemp.setForthDeptPremiums(getPremiumForSubtract(insFeeOrder.getForthDeptPremiums(),jqInsFeeOrderTemp.getForthDeptPremiums()));
  1371. syInsFeeOrderTemp.setFifthDeptPremiums(getPremiumForSubtract(insFeeOrder.getFifthDeptPremiums(),jqInsFeeOrderTemp.getFifthDeptPremiums()));
  1372. syInsFeeOrderTemp.setFirstRetailPremiums(getPremiumForSubtract(insFeeOrder.getFirstRetailPremiums(),jqInsFeeOrderTemp.getFirstRetailPremiums()));
  1373. syInsFeeOrderTemp.setSecondRetailPremiums(getPremiumForSubtract(insFeeOrder.getSecondRetailPremiums(),jqInsFeeOrderTemp.getSecondRetailPremiums()));
  1374. syInsFeeOrderTemp.setThirdRetailPremiums(getPremiumForSubtract(insFeeOrder.getThirdRetailPremiums(),jqInsFeeOrderTemp.getThirdRetailPremiums()));
  1375. BigDecimal syCostsPremiums = getCostsPremiumsOne(syInsFeeOrderTemp);
  1376. costsPremiumsMap.put("SY",syCostsPremiums);
  1377. return costsPremiumsMap;
  1378. }
  1379. private BigDecimal getCostsProportion(InsFeeOrder insFeeOrder){
  1380. BigDecimal totalCostsProportion = new BigDecimal(0);
  1381. if(insFeeOrder.getFirstDeptProportion()!=null){
  1382. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getFirstDeptProportion());
  1383. }
  1384. if(insFeeOrder.getSecondDeptProportion()!=null){
  1385. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getSecondDeptProportion());
  1386. }
  1387. if(insFeeOrder.getThirdDeptProportion()!=null){
  1388. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getThirdDeptProportion());
  1389. }
  1390. if(insFeeOrder.getForthDeptProportion()!=null){
  1391. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getForthDeptProportion());
  1392. }
  1393. if(insFeeOrder.getFifthDeptProportion()!=null){
  1394. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getFifthDeptProportion());
  1395. }
  1396. if(insFeeOrder.getFirstRetailProportion()!=null){
  1397. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getFirstRetailProportion());
  1398. }
  1399. if(insFeeOrder.getSecondRetailProportion()!=null){
  1400. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getSecondRetailProportion());
  1401. }
  1402. if(insFeeOrder.getThirdRetailProportion()!=null){
  1403. totalCostsProportion = totalCostsProportion.add(insFeeOrder.getThirdRetailProportion());
  1404. }
  1405. return totalCostsProportion;
  1406. }
  1407. private BigDecimal getCostsPremiumsOne(InsFeeOrder insFeeOrder){
  1408. BigDecimal totalCostsPremiums = new BigDecimal(0);
  1409. if(insFeeOrder.getFirstDeptPremiums()!=null){
  1410. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getFirstDeptPremiums());
  1411. }
  1412. if(insFeeOrder.getSecondDeptPremiums()!=null){
  1413. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getSecondDeptPremiums());
  1414. }
  1415. if(insFeeOrder.getThirdDeptPremiums()!=null){
  1416. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getThirdDeptPremiums());
  1417. }
  1418. if(insFeeOrder.getForthDeptPremiums()!=null){
  1419. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getForthDeptPremiums());
  1420. }
  1421. if(insFeeOrder.getFifthDeptPremiums()!=null){
  1422. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getFifthDeptPremiums());
  1423. }
  1424. if(insFeeOrder.getFirstRetailPremiums()!=null){
  1425. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getFirstRetailPremiums());
  1426. }
  1427. if(insFeeOrder.getSecondRetailPremiums()!=null){
  1428. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getSecondRetailPremiums());
  1429. }
  1430. if(insFeeOrder.getThirdRetailPremiums()!=null){
  1431. totalCostsPremiums = totalCostsPremiums.add(insFeeOrder.getThirdRetailPremiums());
  1432. }
  1433. return totalCostsPremiums;
  1434. }
  1435. //把取出的费用信息转换为页面需要展示的数据
  1436. public List<QueryOrderFeeResultVo> convertOrderFeeVoData(QueryOrderFeeVo orderFeeVo) {
  1437. List<QueryOrderFeeResultVo> resultList=new ArrayList<>();
  1438. OrderFeeVo jqOrderFeeVo = orderFeeVo.getJqCoderFeeVo();
  1439. OrderFeeVo syOrderFeeVo = orderFeeVo.getSyCoderFeeVo();
  1440. OrderFeeVo fcOrderFeeVo = orderFeeVo.getFcCoderFeeVo();
  1441. //总费用
  1442. QueryOrderFeeResultVo feeResultVo1=new QueryOrderFeeResultVo();
  1443. feeResultVo1.setDescSerialNo("1");
  1444. feeResultVo1.setFeeTypeName("总费用");
  1445. feeResultVo1.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getCostsProportion()!=null?jqOrderFeeVo.getCostsProportion():"-");
  1446. feeResultVo1.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getCostsPremiums()!=null?jqOrderFeeVo.getCostsPremiums():"-");
  1447. feeResultVo1.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getCostsProportion()!=null?syOrderFeeVo.getCostsProportion():"-");
  1448. feeResultVo1.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getCostsPremiums()!=null?syOrderFeeVo.getCostsPremiums():"-");
  1449. feeResultVo1.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getCostsProportion()!=null?fcOrderFeeVo.getCostsProportion():"-");
  1450. feeResultVo1.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getCostsPremiums()!=null?fcOrderFeeVo.getCostsPremiums():"-");
  1451. feeResultVo1.setJqFeeRateAll(jqOrderFeeVo!=null&&jqOrderFeeVo.getCostsProportionAll()!=null?jqOrderFeeVo.getCostsProportionAll():"-");
  1452. feeResultVo1.setJqFeeAmountAll(jqOrderFeeVo!=null&&jqOrderFeeVo.getCostsPremiumsAll()!=null?jqOrderFeeVo.getCostsPremiumsAll():"-");
  1453. feeResultVo1.setSyFeeRateAll(syOrderFeeVo!=null&&syOrderFeeVo.getCostsProportionAll()!=null?syOrderFeeVo.getCostsProportionAll():"-");
  1454. feeResultVo1.setSyFeeAmountAll(syOrderFeeVo!=null&&syOrderFeeVo.getCostsPremiumsAll()!=null?syOrderFeeVo.getCostsPremiumsAll():"-");
  1455. feeResultVo1.setFcFeeRateAll(fcOrderFeeVo!=null&&fcOrderFeeVo.getCostsProportionAll()!=null?fcOrderFeeVo.getCostsProportionAll():"-");
  1456. feeResultVo1.setFcFeeAmountAll(fcOrderFeeVo!=null&&fcOrderFeeVo.getCostsPremiumsAll()!=null?fcOrderFeeVo.getCostsPremiumsAll():"-");
  1457. resultList.add(feeResultVo1);
  1458. //一级管理费用
  1459. QueryOrderFeeResultVo feeResultVo2=new QueryOrderFeeResultVo();
  1460. feeResultVo2.setDescSerialNo("2");
  1461. feeResultVo2.setFeeTypeName("一级管理费");
  1462. feeResultVo2.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getFirstDeptProportion()!=null?jqOrderFeeVo.getFirstDeptProportion():"-");
  1463. feeResultVo2.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getFirstDeptPremiums()!=null?jqOrderFeeVo.getFirstDeptPremiums():"-");
  1464. feeResultVo2.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getFirstDeptProportion()!=null?syOrderFeeVo.getFirstDeptProportion():"-");
  1465. feeResultVo2.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getFirstDeptPremiums()!=null?syOrderFeeVo.getFirstDeptPremiums():"-");
  1466. feeResultVo2.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getFirstDeptProportion()!=null?fcOrderFeeVo.getFirstDeptProportion():"-");
  1467. feeResultVo2.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getFirstDeptPremiums()!=null?fcOrderFeeVo.getFirstDeptPremiums():"-");
  1468. feeResultVo2.setJqFeeRateAll(feeResultVo2.getJqFeeRate());
  1469. feeResultVo2.setJqFeeAmountAll(feeResultVo2.getJqFeeAmount());
  1470. feeResultVo2.setSyFeeRateAll(feeResultVo2.getSyFeeRate());
  1471. feeResultVo2.setSyFeeAmountAll(feeResultVo2.getSyFeeAmount());
  1472. feeResultVo2.setFcFeeRateAll(feeResultVo2.getFcFeeRate());
  1473. feeResultVo2.setFcFeeAmountAll(feeResultVo2.getFcFeeAmount());
  1474. resultList.add(feeResultVo2);
  1475. //二级管理费用
  1476. QueryOrderFeeResultVo feeResultVo3=new QueryOrderFeeResultVo();
  1477. feeResultVo3.setDescSerialNo("3");
  1478. feeResultVo3.setFeeTypeName("二级管理费");
  1479. feeResultVo3.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getSecondDeptProportion()!=null?jqOrderFeeVo.getSecondDeptProportion():"-");
  1480. feeResultVo3.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getSecondDeptPremiums()!=null?jqOrderFeeVo.getSecondDeptPremiums():"-");
  1481. feeResultVo3.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getSecondDeptProportion()!=null?syOrderFeeVo.getSecondDeptProportion():"-");
  1482. feeResultVo3.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getSecondDeptPremiums()!=null?syOrderFeeVo.getSecondDeptPremiums():"-");
  1483. feeResultVo3.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getSecondDeptProportion()!=null?fcOrderFeeVo.getSecondDeptProportion():"-");
  1484. feeResultVo3.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getSecondDeptPremiums()!=null?fcOrderFeeVo.getSecondDeptPremiums():"-");
  1485. feeResultVo3.setJqFeeRateAll(feeResultVo3.getJqFeeRate());
  1486. feeResultVo3.setJqFeeAmountAll(feeResultVo3.getJqFeeAmount());
  1487. feeResultVo3.setSyFeeRateAll(feeResultVo3.getSyFeeRate());
  1488. feeResultVo3.setSyFeeAmountAll(feeResultVo3.getSyFeeAmount());
  1489. feeResultVo3.setFcFeeRateAll(feeResultVo3.getFcFeeRate());
  1490. feeResultVo3.setFcFeeAmountAll(feeResultVo3.getFcFeeAmount());
  1491. resultList.add(feeResultVo3);
  1492. //三级管理费用
  1493. QueryOrderFeeResultVo feeResultVo4=new QueryOrderFeeResultVo();
  1494. feeResultVo4.setDescSerialNo("4");
  1495. feeResultVo4.setFeeTypeName("三级管理费");
  1496. feeResultVo4.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getThirdDeptProportion()!=null?jqOrderFeeVo.getThirdDeptProportion():"-");
  1497. feeResultVo4.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getThirdDeptPremiums()!=null?jqOrderFeeVo.getThirdDeptPremiums():"-");
  1498. feeResultVo4.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getThirdDeptProportion()!=null?syOrderFeeVo.getThirdDeptProportion():"-");
  1499. feeResultVo4.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getThirdDeptPremiums()!=null?syOrderFeeVo.getThirdDeptPremiums():"-");
  1500. feeResultVo4.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getThirdDeptProportion()!=null?fcOrderFeeVo.getThirdDeptProportion():"-");
  1501. feeResultVo4.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getThirdDeptPremiums()!=null?fcOrderFeeVo.getThirdDeptPremiums():"-");
  1502. feeResultVo4.setJqFeeRateAll(feeResultVo4.getJqFeeRate());
  1503. feeResultVo4.setJqFeeAmountAll(feeResultVo4.getJqFeeAmount());
  1504. feeResultVo4.setSyFeeRateAll(feeResultVo4.getSyFeeRate());
  1505. feeResultVo4.setSyFeeAmountAll(feeResultVo4.getSyFeeAmount());
  1506. feeResultVo4.setFcFeeRateAll(feeResultVo4.getFcFeeRate());
  1507. feeResultVo4.setFcFeeAmountAll(feeResultVo4.getFcFeeAmount());
  1508. resultList.add(feeResultVo4);
  1509. //四级管理费用
  1510. QueryOrderFeeResultVo feeResultVo5=new QueryOrderFeeResultVo();
  1511. feeResultVo5.setDescSerialNo("5");
  1512. feeResultVo5.setFeeTypeName("四级管理费");
  1513. feeResultVo5.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getForthDeptProportion()!=null?jqOrderFeeVo.getForthDeptProportion():"-");
  1514. feeResultVo5.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getForthDeptPremiums()!=null?jqOrderFeeVo.getForthDeptPremiums():"-");
  1515. feeResultVo5.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getForthDeptProportion()!=null?syOrderFeeVo.getForthDeptProportion():"-");
  1516. feeResultVo5.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getForthDeptPremiums()!=null?syOrderFeeVo.getForthDeptPremiums():"-");
  1517. feeResultVo5.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getForthDeptProportion()!=null?fcOrderFeeVo.getForthDeptProportion():"-");
  1518. feeResultVo5.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getForthDeptPremiums()!=null?fcOrderFeeVo.getForthDeptPremiums():"-");
  1519. feeResultVo5.setJqFeeRateAll(feeResultVo5.getJqFeeRate());
  1520. feeResultVo5.setJqFeeAmountAll(feeResultVo5.getJqFeeAmount());
  1521. feeResultVo5.setSyFeeRateAll(feeResultVo5.getSyFeeRate());
  1522. feeResultVo5.setSyFeeAmountAll(feeResultVo5.getSyFeeAmount());
  1523. feeResultVo5.setFcFeeRateAll(feeResultVo5.getFcFeeRate());
  1524. feeResultVo5.setFcFeeAmountAll(feeResultVo5.getFcFeeAmount());
  1525. resultList.add(feeResultVo5);
  1526. //五级管理费用
  1527. QueryOrderFeeResultVo feeResultVo6=new QueryOrderFeeResultVo();
  1528. feeResultVo6.setDescSerialNo("6");
  1529. feeResultVo6.setFeeTypeName("五级管理费");
  1530. feeResultVo6.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getFifthDeptProportion()!=null?jqOrderFeeVo.getFifthDeptProportion():"-");
  1531. feeResultVo6.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getFifthDeptPremiums()!=null?jqOrderFeeVo.getFifthDeptPremiums():"-");
  1532. feeResultVo6.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getFifthDeptProportion()!=null?syOrderFeeVo.getFifthDeptProportion():"-");
  1533. feeResultVo6.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getFifthDeptPremiums()!=null?syOrderFeeVo.getFifthDeptPremiums():"-");
  1534. feeResultVo6.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getFifthDeptProportion()!=null?fcOrderFeeVo.getFifthDeptProportion():"-");
  1535. feeResultVo6.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getFifthDeptPremiums()!=null?fcOrderFeeVo.getFifthDeptPremiums():"-");
  1536. feeResultVo6.setJqFeeRateAll(feeResultVo6.getJqFeeRate());
  1537. feeResultVo6.setJqFeeAmountAll(feeResultVo6.getJqFeeAmount());
  1538. feeResultVo6.setSyFeeRateAll(feeResultVo6.getSyFeeRate());
  1539. feeResultVo6.setSyFeeAmountAll(feeResultVo6.getSyFeeAmount());
  1540. feeResultVo6.setFcFeeRateAll(feeResultVo6.getFcFeeRate());
  1541. feeResultVo6.setFcFeeAmountAll(feeResultVo6.getFcFeeAmount());
  1542. resultList.add(feeResultVo6);
  1543. //一级分销费
  1544. QueryOrderFeeResultVo feeResultVo7=new QueryOrderFeeResultVo();
  1545. feeResultVo7.setDescSerialNo("7");
  1546. feeResultVo7.setFeeTypeName("一级分销费");
  1547. feeResultVo7.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getFirstRetailProportion()!=null?jqOrderFeeVo.getFirstRetailProportion():"-");
  1548. feeResultVo7.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getFirstRetailPremiums()!=null?jqOrderFeeVo.getFirstRetailPremiums():"-");
  1549. feeResultVo7.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getFirstRetailProportion()!=null?syOrderFeeVo.getFirstRetailProportion():"-");
  1550. feeResultVo7.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getFirstRetailPremiums()!=null?syOrderFeeVo.getFirstRetailPremiums():"-");
  1551. feeResultVo7.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getFirstRetailProportion()!=null?fcOrderFeeVo.getFirstRetailProportion():"-");
  1552. feeResultVo7.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getFirstRetailPremiums()!=null?fcOrderFeeVo.getFirstRetailPremiums():"-");
  1553. resultList.add(feeResultVo7);
  1554. //二级分销费
  1555. QueryOrderFeeResultVo feeResultVo8=new QueryOrderFeeResultVo();
  1556. feeResultVo8.setDescSerialNo("8");
  1557. feeResultVo8.setFeeTypeName("二级分销费");
  1558. feeResultVo8.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getSecondRetailProportion()!=null?jqOrderFeeVo.getSecondRetailProportion():"-");
  1559. feeResultVo8.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getSecondRetailPremiums()!=null?jqOrderFeeVo.getSecondRetailPremiums():"-");
  1560. feeResultVo8.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getSecondRetailProportion()!=null?syOrderFeeVo.getSecondRetailProportion():"-");
  1561. feeResultVo8.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getSecondRetailPremiums()!=null?syOrderFeeVo.getSecondRetailPremiums():"-");
  1562. feeResultVo8.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getSecondRetailProportion()!=null?fcOrderFeeVo.getSecondRetailProportion():"-");
  1563. feeResultVo8.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getSecondRetailPremiums()!=null?fcOrderFeeVo.getSecondRetailPremiums():"-");
  1564. resultList.add(feeResultVo8);
  1565. //三级分销费
  1566. QueryOrderFeeResultVo feeResultVo9=new QueryOrderFeeResultVo();
  1567. feeResultVo9.setDescSerialNo("9");
  1568. feeResultVo9.setFeeTypeName("三级分销费");
  1569. feeResultVo9.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getThirdRetailProportion()!=null?jqOrderFeeVo.getThirdRetailProportion():"-");
  1570. feeResultVo9.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getThirdRetailPremiums()!=null?jqOrderFeeVo.getThirdRetailPremiums():"-");
  1571. feeResultVo9.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getThirdRetailProportion()!=null?syOrderFeeVo.getThirdRetailProportion():"-");
  1572. feeResultVo9.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getThirdRetailPremiums()!=null?syOrderFeeVo.getThirdRetailPremiums():"-");
  1573. feeResultVo9.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getThirdRetailProportion()!=null?fcOrderFeeVo.getThirdRetailProportion():"-");
  1574. feeResultVo9.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getThirdRetailPremiums()!=null?fcOrderFeeVo.getThirdRetailPremiums():"-");
  1575. resultList.add(feeResultVo9);
  1576. return resultList;
  1577. }
  1578. /**
  1579. * 按照组合单模式获取费用明细
  1580. * @param insFeeOrder
  1581. * @return
  1582. */
  1583. private QueryOrderFeeVo packageOrderFeeInfoAll(InsFeeOrder insFeeOrder){
  1584. QueryOrderFeeVo queryOrderFeeVo = new QueryOrderFeeVo();
  1585. InsFeeOrder jqInsFeeOrderTemp = new InsFeeOrder();
  1586. //先利用交强费重算费用
  1587. jqInsFeeOrderTemp.setFirstDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getFirstDeptProportion()));
  1588. jqInsFeeOrderTemp.setSecondDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getSecondDeptProportion()));
  1589. jqInsFeeOrderTemp.setThirdDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getThirdDeptProportion()));
  1590. jqInsFeeOrderTemp.setForthDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getForthDeptProportion()));
  1591. jqInsFeeOrderTemp.setFifthDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getFifthDeptProportion()));
  1592. jqInsFeeOrderTemp.setFirstRetailPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getFirstRetailProportion()));
  1593. jqInsFeeOrderTemp.setSecondRetailPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getSecondRetailProportion()));
  1594. jqInsFeeOrderTemp.setThirdRetailPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getThirdRetailProportion()));
  1595. //再利用总费-交强费,得出商业费
  1596. InsFeeOrder syInsFeeOrderTemp = new InsFeeOrder();
  1597. syInsFeeOrderTemp.setFirstDeptPremiums(getPremiumForSubtract(insFeeOrder.getFirstDeptPremiums(),jqInsFeeOrderTemp.getFirstDeptPremiums()));
  1598. syInsFeeOrderTemp.setSecondDeptPremiums(getPremiumForSubtract(insFeeOrder.getSecondDeptPremiums(),jqInsFeeOrderTemp.getSecondDeptPremiums()));
  1599. syInsFeeOrderTemp.setThirdDeptPremiums(getPremiumForSubtract(insFeeOrder.getThirdDeptPremiums(),jqInsFeeOrderTemp.getThirdDeptPremiums()));
  1600. syInsFeeOrderTemp.setForthDeptPremiums(getPremiumForSubtract(insFeeOrder.getForthDeptPremiums(),jqInsFeeOrderTemp.getForthDeptPremiums()));
  1601. syInsFeeOrderTemp.setFifthDeptPremiums(getPremiumForSubtract(insFeeOrder.getFifthDeptPremiums(),jqInsFeeOrderTemp.getFifthDeptPremiums()));
  1602. syInsFeeOrderTemp.setFirstRetailPremiums(getPremiumForSubtract(insFeeOrder.getFirstRetailPremiums(),jqInsFeeOrderTemp.getFirstRetailPremiums()));
  1603. syInsFeeOrderTemp.setSecondRetailPremiums(getPremiumForSubtract(insFeeOrder.getSecondRetailPremiums(),jqInsFeeOrderTemp.getSecondRetailPremiums()));
  1604. syInsFeeOrderTemp.setThirdRetailPremiums(getPremiumForSubtract(insFeeOrder.getThirdRetailPremiums(),jqInsFeeOrderTemp.getThirdRetailPremiums()));
  1605. //交强费转换赋值
  1606. OrderFeeVo jqOrderFeeVo = packageOrderFeeInfoOne(insFeeOrder);
  1607. jqOrderFeeVo.setFirstDeptPremiums(convertToString(jqInsFeeOrderTemp.getFirstDeptPremiums()));
  1608. jqOrderFeeVo.setSecondDeptPremiums(convertToString(jqInsFeeOrderTemp.getSecondDeptPremiums()));
  1609. jqOrderFeeVo.setThirdDeptPremiums(convertToString(jqInsFeeOrderTemp.getThirdDeptPremiums()));
  1610. jqOrderFeeVo.setForthDeptPremiums(convertToString(jqInsFeeOrderTemp.getForthDeptPremiums()));
  1611. jqOrderFeeVo.setFifthDeptPremiums(convertToString(jqInsFeeOrderTemp.getFifthDeptPremiums()));
  1612. jqOrderFeeVo.setFirstRetailPremiums(convertToString(jqInsFeeOrderTemp.getFirstRetailPremiums()));
  1613. jqOrderFeeVo.setSecondRetailPremiums(convertToString(jqInsFeeOrderTemp.getSecondRetailPremiums()));
  1614. jqOrderFeeVo.setThirdRetailPremiums(convertToString(jqInsFeeOrderTemp.getThirdRetailPremiums()));
  1615. //商业费转换赋值
  1616. OrderFeeVo syOrderFeeVo = packageOrderFeeInfoOne(insFeeOrder);
  1617. syOrderFeeVo.setFirstDeptPremiums(convertToString(syInsFeeOrderTemp.getFirstDeptPremiums()));
  1618. syOrderFeeVo.setSecondDeptPremiums(convertToString(syInsFeeOrderTemp.getSecondDeptPremiums()));
  1619. syOrderFeeVo.setThirdDeptPremiums(convertToString(syInsFeeOrderTemp.getThirdDeptPremiums()));
  1620. syOrderFeeVo.setForthDeptPremiums(convertToString(syInsFeeOrderTemp.getForthDeptPremiums()));
  1621. syOrderFeeVo.setFifthDeptPremiums(convertToString(syInsFeeOrderTemp.getFifthDeptPremiums()));
  1622. syOrderFeeVo.setFirstRetailPremiums(convertToString(syInsFeeOrderTemp.getFirstRetailPremiums()));
  1623. syOrderFeeVo.setSecondRetailPremiums(convertToString(syInsFeeOrderTemp.getSecondRetailPremiums()));
  1624. syOrderFeeVo.setThirdRetailPremiums(convertToString(syInsFeeOrderTemp.getThirdRetailPremiums()));
  1625. queryOrderFeeVo.setJqCoderFeeVo(jqOrderFeeVo);
  1626. queryOrderFeeVo.setSyCoderFeeVo(syOrderFeeVo);
  1627. return queryOrderFeeVo;
  1628. }
  1629. /**
  1630. * 按照单险种方式获取费用明细
  1631. * @param insFeeOrder
  1632. * @return
  1633. */
  1634. private OrderFeeVo packageOrderFeeInfoOne(InsFeeOrder insFeeOrder){
  1635. OrderFeeVo orderFeeVo = new OrderFeeVo();
  1636. orderFeeVo.setFirstDeptPremiums(convertToString(insFeeOrder.getFirstDeptPremiums()));
  1637. orderFeeVo.setFirstDeptProportion(convertToString(insFeeOrder.getFirstDeptProportion()));
  1638. orderFeeVo.setSecondDeptPremiums(convertToString(insFeeOrder.getSecondDeptPremiums()));
  1639. orderFeeVo.setSecondDeptProportion(convertToString(insFeeOrder.getSecondDeptProportion()));
  1640. orderFeeVo.setThirdDeptPremiums(convertToString(insFeeOrder.getThirdDeptPremiums()));
  1641. orderFeeVo.setThirdDeptProportion(convertToString(insFeeOrder.getThirdDeptProportion()));
  1642. orderFeeVo.setForthDeptPremiums(convertToString(insFeeOrder.getForthDeptPremiums()));
  1643. orderFeeVo.setForthDeptProportion(convertToString(insFeeOrder.getForthDeptProportion()));
  1644. orderFeeVo.setFifthDeptPremiums(convertToString(insFeeOrder.getFifthDeptPremiums()));
  1645. orderFeeVo.setFifthDeptProportion(convertToString(insFeeOrder.getFifthDeptProportion()));
  1646. orderFeeVo.setFirstRetailPremiums(convertToString(insFeeOrder.getFirstRetailPremiums()));
  1647. orderFeeVo.setFirstRetailProportion(convertToString(insFeeOrder.getFirstRetailProportion()));
  1648. orderFeeVo.setSecondRetailPremiums(convertToString(insFeeOrder.getSecondRetailPremiums()));
  1649. orderFeeVo.setSecondRetailProportion(convertToString(insFeeOrder.getSecondRetailProportion()));
  1650. orderFeeVo.setThirdRetailPremiums(convertToString(insFeeOrder.getThirdRetailPremiums()));
  1651. orderFeeVo.setThirdRetailProportion(convertToString(insFeeOrder.getThirdRetailProportion()));
  1652. return orderFeeVo;
  1653. }
  1654. private String convertToString(BigDecimal b){
  1655. if(b!=null){
  1656. if(b.doubleValue()==0){
  1657. return null;
  1658. }else {
  1659. return b.toString();
  1660. }
  1661. }else{
  1662. return null;
  1663. }
  1664. }
  1665. }