FeeRuleSchemeServiceImpl.java 66 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111
  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.CarInfoVo;
  16. import com.ydtech.modules.ins.model.vo.KindInfoVo;
  17. import com.ydtech.modules.ins.model.vo.QuoteRespVo;
  18. import com.ydtech.modules.order.entity.InsAreaCompany;
  19. import com.ydtech.modules.order.entity.InsFeeOrder;
  20. import com.ydtech.modules.order.entity.InsOrders;
  21. import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
  22. import com.ydtech.modules.order.entity.vo.OrderFeeVo;
  23. import com.ydtech.modules.order.entity.vo.QueryOrderFeeResultVo;
  24. import com.ydtech.modules.order.entity.vo.QueryOrderFeeVo;
  25. import com.ydtech.modules.order.service.InsAreaCompanyService;
  26. import com.ydtech.modules.order.service.InsFeeOrderService;
  27. import com.ydtech.modules.order.service.InsOrdersService;
  28. import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts;
  29. import com.ydtech.modules.protocol.service.PtlAgreementProductCostsService;
  30. import org.apache.commons.lang3.StringUtils;
  31. import org.apache.commons.lang3.math.NumberUtils;
  32. import org.springframework.stereotype.Service;
  33. import javax.annotation.Resource;
  34. import java.math.BigDecimal;
  35. import java.time.LocalDate;
  36. import java.time.format.DateTimeFormatter;
  37. import java.util.*;
  38. import java.util.stream.Collectors;
  39. /**
  40. * 费用接口中相关功能的实现类
  41. */
  42. @Service
  43. public class FeeRuleSchemeServiceImpl implements FeeRuleSchemeService {
  44. @Resource
  45. private PtlAgreementProductCostsService ptlAgreementProductCostsService;
  46. @Resource
  47. private InsOrdersService insOrdersService;
  48. @Resource
  49. private InsFeeOrderService insFeeOrderService;
  50. @Resource
  51. private SysUserService sysUserService;
  52. @Resource
  53. private SysDeptService sysDeptService;
  54. @Resource
  55. private EsmRetailService esmRetailService;
  56. @Resource
  57. private EsmUserReferrerService esmUserReferrerService;
  58. @Resource
  59. private InsAreaCompanyService insAreaCompanyService;
  60. /**
  61. * 根据跟单信息,以及配置的费用因子,获取合适的跟单费用
  62. * @param feeSchemeReqDto
  63. * @return
  64. */
  65. public FeeSchemeResDto matchTheAppropriateFees(FeeSchemeReqDto feeSchemeReqDto) {
  66. FeeSchemeResDto feeSchemeResDto=new FeeSchemeResDto();
  67. //先根据业务类别、有效期、协议编码、历史标志代码字段 获取对应费用方案列表
  68. List<PtlAgreementProductCosts> ptlAgreementProductCosts =ptlAgreementProductCostsService.selectVliadFeeFactor(feeSchemeReqDto.getBusType(),feeSchemeReqDto.getAgreementId());
  69. if (ptlAgreementProductCosts.isEmpty()) {
  70. //如果查询不到费用方案信息,则阻断算费流程,进行提示
  71. throw new SystemException("未查询到费用配置,请先配置该协议的费用方案!");
  72. }else{
  73. //符合跟单信息的方案列表
  74. List<PtlAgreementProductCosts> validSchemeList=new ArrayList();
  75. //循环符合的方案列表,再进行细化的因子匹配,获取最终可以匹配到的方案
  76. for(int i=0;i<ptlAgreementProductCosts.size();i++){
  77. PtlAgreementProductCosts factorCost=ptlAgreementProductCosts.get(i);
  78. //获取处理后的待校验因子
  79. Map<Integer, FeeFactorInfoDto> factorToBeVerified=getFactorToBeVerified(factorCost);
  80. //按规则拼接跟单信息
  81. String matchKeyStr=getMatchKeyWithInsuranceInfo(feeSchemeReqDto);
  82. //循环进行各项因子校验
  83. boolean checkFlag=checkFactorValidWithInsuranceInfo(matchKeyStr,factorToBeVerified);
  84. //如果该方案所有因子都校验通过,则放入符合校验方案列表
  85. if(checkFlag){
  86. validSchemeList.add(factorCost);
  87. }
  88. }
  89. if(validSchemeList.size()>0){
  90. //先判断匹配到的是不是只有兜底类型,如果不是则过滤掉兜底类型的费用,优先以跟单的为准,如果只有兜底类型,则按同样逻辑进行筛选
  91. //根据ProductId去重后的结果集
  92. List tempList=validSchemeList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(PtlAgreementProductCosts :: getProductId))), ArrayList::new));
  93. if(tempList.size()>1){//如果有多种类型,则过滤掉兜底类型的
  94. validSchemeList=validSchemeList.stream().filter(x -> !"039999".equals(x.getProductId())).collect(Collectors.toList());
  95. }
  96. //匹配到唯一一条费用方案,直接用这条
  97. if(validSchemeList.size()==1){
  98. //进行费用比例赋值,给返回对象
  99. feeSchemeResDto=generateSchemeResDto((PtlAgreementProductCosts)validSchemeList.get(0));
  100. }else{
  101. //如果最终符合的有多条,则按特殊规则选择其中一条
  102. PtlAgreementProductCosts finalSchemeCost=changeSchemeWithSpecialRule(validSchemeList,feeSchemeReqDto);
  103. //进行费用比例赋值,给返回对象
  104. feeSchemeResDto=generateSchemeResDto(finalSchemeCost);
  105. }
  106. }else{
  107. throw new SystemException("未匹配到合适的费用方案,请先配置该协议的费用方案!");
  108. }
  109. }
  110. return feeSchemeResDto;
  111. }
  112. /**
  113. * 特殊处理选择费用方案
  114. * 如果最终符合的有多条,则先看交强、商业谁的保费多,然后根据保费多得在匹配到的方案中找费用比例大的那一条
  115. * @param validSchemeList
  116. * @param feeSchemeReqDto
  117. * @return
  118. */
  119. private PtlAgreementProductCosts changeSchemeWithSpecialRule(List<PtlAgreementProductCosts> validSchemeList, FeeSchemeReqDto feeSchemeReqDto) {
  120. PtlAgreementProductCosts finalScheme=null;
  121. //险种标志,最终取哪个险种费用比例 1取交强 2取商业
  122. String riskFlag="";
  123. //判断险种标志
  124. if("0330".equals(feeSchemeReqDto.getBusType())){//单交
  125. riskFlag="1";
  126. }else if("034001".equals(feeSchemeReqDto.getBusType())){//单商
  127. riskFlag="2";
  128. }else if("034002".equals(feeSchemeReqDto.getBusType())){//单三
  129. riskFlag="2";
  130. }else if("0330034002".equals(feeSchemeReqDto.getBusType())){//交三
  131. if(Double.parseDouble(feeSchemeReqDto.getJqPremium())<=Double.parseDouble(feeSchemeReqDto.getSyPremium())){
  132. riskFlag="2";
  133. }else{
  134. riskFlag="1";
  135. }
  136. }else if("0330034001".equals(feeSchemeReqDto.getBusType())){//交商
  137. if(Double.parseDouble(feeSchemeReqDto.getJqPremium())<=Double.parseDouble(feeSchemeReqDto.getSyPremium())){
  138. riskFlag="2";
  139. }else{
  140. riskFlag="1";
  141. }
  142. }
  143. //循环找出对应比例最大的
  144. for(int i=0;i<validSchemeList.size();i++){
  145. PtlAgreementProductCosts tempCostDto=validSchemeList.get(i);
  146. if(finalScheme!=null){
  147. if("1".equals(riskFlag)){//按交强比例排序,找比例最大的
  148. if(Double.parseDouble(finalScheme.getJqCostsProportion())<Double.parseDouble(tempCostDto.getJqCostsProportion())){
  149. finalScheme=tempCostDto;
  150. }
  151. }else if("2".equals(riskFlag)){//按商业比例排序,找比例最大的
  152. if(Double.parseDouble(finalScheme.getSyCostsProportion())<Double.parseDouble(tempCostDto.getSyCostsProportion())){
  153. finalScheme=tempCostDto;
  154. }
  155. }
  156. }else{
  157. finalScheme=tempCostDto;
  158. }
  159. }
  160. return finalScheme;
  161. }
  162. /**
  163. * 组装费用接口反参对象
  164. * @param agreementProductCost
  165. * @return
  166. */
  167. private FeeSchemeResDto generateSchemeResDto(PtlAgreementProductCosts agreementProductCost) {
  168. FeeSchemeResDto resDto=new FeeSchemeResDto();
  169. resDto.setAgreementId(agreementProductCost.getAgreementId());
  170. resDto.setSchemeId(agreementProductCost.getId());
  171. resDto.setJqSpilloverPremiums(agreementProductCost.getJqSpilloverPremiums());
  172. resDto.setJqSpilloverProportion(agreementProductCost.getJqSpilloverProportion());
  173. resDto.setJqNewCarCostsProportion(agreementProductCost.getJqNewCarCostsProportion());
  174. resDto.setJqOldCarCostsProportion(agreementProductCost.getJqOldCarCostsProportion());
  175. resDto.setJqCostsProportion(agreementProductCost.getJqCostsProportion());
  176. resDto.setJqNewCarOtherCostsProportion(agreementProductCost.getJqNewCarOtherCostsProportion());
  177. resDto.setJqOldCarOtherCostsProportion(agreementProductCost.getJqOldCarOtherCostsProportion());
  178. resDto.setSySpilloverPremiums(agreementProductCost.getSySpilloverPremiums());
  179. resDto.setSySpilloverProportion(agreementProductCost.getSySpilloverProportion());
  180. resDto.setSyNewCarCostsProportion(agreementProductCost.getSyNewCarCostsProportion());
  181. resDto.setSyOldCarCostsProportion(agreementProductCost.getSyOldCarCostsProportion());
  182. resDto.setSyCostsProportion(agreementProductCost.getSyCostsProportion());
  183. resDto.setSyNewCarOtherCostsProportion(agreementProductCost.getSyNewCarOtherCostsProportion());
  184. resDto.setSyOldCarOtherCostsProportion(agreementProductCost.getSyOldCarOtherCostsProportion());
  185. return resDto;
  186. }
  187. /**
  188. * 根据跟单信息,循环各项因子 校验该方案的匹配情况
  189. * @param matchKeyStr
  190. * @param factorToBeVerified
  191. * @return
  192. */
  193. private boolean checkFactorValidWithInsuranceInfo(String matchKeyStr, Map<Integer, FeeFactorInfoDto> factorToBeVerified) {
  194. boolean result=false; //默认没有匹配到
  195. String[] matchKeys= matchKeyStr.split(",");
  196. //循环待校验因子列表
  197. for(Map.Entry<Integer,FeeFactorInfoDto> entry : factorToBeVerified.entrySet()){
  198. Integer key=entry.getKey();
  199. FeeFactorInfoDto checkFactorInfo=entry.getValue();
  200. //特殊处理,如果跟单是客车时,不关注配置的核定载质量字段
  201. if("客车".equals(matchKeys[4])){
  202. if(checkFactorInfo.getMatchSequence()==8){
  203. continue;
  204. }
  205. }
  206. //先看该方案是否需要匹配该因子,不需要则跳过本条因子
  207. if(!checkFactorInfo.isNeedMatch()){
  208. continue;
  209. }
  210. //下面处理需要进行匹配的因子
  211. if("1".equals(checkFactorInfo.getMatchType())){//1.单字符串匹配(相等)
  212. if(matchKeys[key]!=null&&!"".equals(matchKeys[key])){
  213. if(checkFactorInfo.getSingleSelectVal().equals(matchKeys[key])){
  214. result=true;
  215. continue;
  216. }else{
  217. //如果需要匹配且没有匹配到,则直接跳出本次循环,该方案不符合
  218. result=false;
  219. break;
  220. }
  221. }else{
  222. //判断跟单信息是否为空,如果为空,则直接没有匹配到,该方案不符合
  223. result=false;
  224. break;
  225. }
  226. }else if("2".equals(checkFactorInfo.getMatchType())){//2.多字符串匹配(包含)
  227. if(matchKeys[key]!=null&&!"".equals(matchKeys[key])){
  228. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  229. if(checkFactorInfo.getMultipleSelectVal().indexOf(matchKeys[key])>-1){
  230. result=true;
  231. continue;
  232. }else{
  233. //如果需要匹配且没有匹配到,则直接跳出循环,该方案不符合
  234. result=false;
  235. break;
  236. }
  237. }else{
  238. //判断跟单信息是否为空,如果为空,则直接没有匹配到,该方案不符合
  239. result=false;
  240. break;
  241. }
  242. }else if("3".equals(checkFactorInfo.getMatchType())){//3.区间范围比较(左闭右闭)
  243. if(matchKeys[key]!=null&&NumberUtils.isCreatable(matchKeys[key])){
  244. //如果需要匹配,且匹配成功,则跳过本次循环,继续校验下一因子
  245. if(Double.parseDouble(matchKeys[key])>=checkFactorInfo.getMinRangeVal()&&Double.parseDouble(matchKeys[key])<=checkFactorInfo.getMaxRangeVal()){
  246. result=true;
  247. continue;
  248. }else{
  249. //如果需要匹配且没有匹配到,则直接跳出循环,该方案不符合
  250. result=false;
  251. break;
  252. }
  253. }else{
  254. //判断跟单信息是否为空和可转整型,如果不符,则直接没有匹配到,该方案不符合
  255. result=false;
  256. break;
  257. }
  258. }
  259. }
  260. return result;
  261. }
  262. /**
  263. * 根据跟单信息,按照约定顺序进行拼接匹配串
  264. * 新增因子时,顺序需要与getFactorToBeVerified()方法放入待校验因子一致
  265. * @param feeSchemeReqDto
  266. * @return
  267. */
  268. private String getMatchKeyWithInsuranceInfo(FeeSchemeReqDto feeSchemeReqDto) {
  269. StringBuffer result=new StringBuffer();
  270. result.append(feeSchemeReqDto.getIsTransfer()).append(",");
  271. result.append(feeSchemeReqDto.getIsNewCar()).append(",");
  272. result.append(feeSchemeReqDto.getIsNewEnergy()).append(",");
  273. result.append(feeSchemeReqDto.getIsRenewal()).append(",");
  274. result.append(feeSchemeReqDto.getVehicleCategory()).append(",");
  275. result.append(feeSchemeReqDto.getUseNature()).append(",");
  276. result.append(feeSchemeReqDto.getSeatNum()).append(",");
  277. result.append(feeSchemeReqDto.getPurchasePrice()).append(",");
  278. result.append(feeSchemeReqDto.getApprovedLoadCapacity()).append(",");
  279. result.append(feeSchemeReqDto.getJqPremium()).append(",");
  280. result.append(feeSchemeReqDto.getSumPayTax()).append(",");
  281. result.append(feeSchemeReqDto.getThirdPartyInsurance()).append(",");
  282. result.append(feeSchemeReqDto.getNoCarPremium()).append(",");
  283. result.append(feeSchemeReqDto.getSyDiscount()).append(",");
  284. result.append(feeSchemeReqDto.getJqDiscount()).append(",");
  285. result.append(feeSchemeReqDto.getInsuranceScore()).append(",");
  286. result.append(feeSchemeReqDto.getExpectedLossRate()).append(",");
  287. result.append(feeSchemeReqDto.getLicenseNo());
  288. return result.toString();
  289. }
  290. /**
  291. * 根据配置的因子表数据,组装标准的待校验因子列表
  292. * 新增因子时,顺序需要与getMatchKeyWithInsuranceInfo()方法放入跟单信息一致
  293. * @param factorCost
  294. * @return
  295. */
  296. private Map<Integer, FeeFactorInfoDto> getFactorToBeVerified(PtlAgreementProductCosts factorCost) {
  297. Map<Integer, FeeFactorInfoDto> resultMqp=new HashMap<>();
  298. //以下各项因子必须按顺序放入MAP,以便校验时关联
  299. //--------------------因子处理分割线----------------------------------
  300. FeeFactorInfoDto factor0=new FeeFactorInfoDto();
  301. factor0.setFactorName("是否过户");
  302. factor0.setMatchType("1");
  303. factor0.setMatchSequence(0);
  304. if(factorCost.getTransfer()!=null&&factorCost.getTransfer()!=9){
  305. factor0.setNeedMatch(true);
  306. factor0.setSingleSelectVal(String.valueOf(factorCost.getTransfer()));
  307. }else{
  308. //如果方案中未录入(是空或为9时),则不校验该项因子
  309. factor0.setNeedMatch(false);
  310. }
  311. resultMqp.put(0,factor0);
  312. //--------------------因子处理分割线----------------------------------
  313. FeeFactorInfoDto factor1=new FeeFactorInfoDto();
  314. factor1.setFactorName("新旧车");
  315. factor1.setMatchType("1");
  316. factor1.setMatchSequence(1);
  317. if(factorCost.getOldAndNew()!=null&&factorCost.getOldAndNew()!=9){
  318. factor1.setNeedMatch(true);
  319. factor1.setSingleSelectVal(String.valueOf(factorCost.getOldAndNew()));
  320. }else{
  321. //如果方案中未录入(是空或为9时),则不校验该项因子
  322. factor1.setNeedMatch(false);
  323. }
  324. resultMqp.put(1,factor1);
  325. //--------------------因子处理分割线----------------------------------
  326. FeeFactorInfoDto factor2=new FeeFactorInfoDto();
  327. factor2.setFactorName("是否新能源");
  328. factor2.setMatchType("1");
  329. factor2.setMatchSequence(2);
  330. if(factorCost.getNewEnergy()!=null&&factorCost.getNewEnergy()!=9){
  331. factor2.setNeedMatch(true);
  332. factor2.setSingleSelectVal(String.valueOf(factorCost.getNewEnergy()));
  333. }else{
  334. //如果方案中未录入(是空或为9时),则不校验该项因子
  335. factor2.setNeedMatch(false);
  336. }
  337. resultMqp.put(2,factor2);
  338. //--------------------因子处理分割线----------------------------------
  339. FeeFactorInfoDto factor3=new FeeFactorInfoDto();
  340. factor3.setFactorName("是否续保");
  341. factor3.setMatchType("1");
  342. factor3.setMatchSequence(3);
  343. if(factorCost.getRenewal()!=null&&factorCost.getRenewal()!=9){
  344. factor3.setNeedMatch(true);
  345. factor3.setSingleSelectVal(String.valueOf(factorCost.getRenewal()));
  346. }else{
  347. //如果方案中未录入(是空或为9时),则不校验该项因子
  348. factor3.setNeedMatch(false);
  349. }
  350. resultMqp.put(3,factor3);
  351. //--------------------因子处理分割线----------------------------------
  352. FeeFactorInfoDto factor4=new FeeFactorInfoDto();
  353. factor4.setFactorName("车辆大类");
  354. factor4.setMatchType("2");
  355. factor4.setMatchSequence(4);
  356. if(factorCost.getVehicleCategory()!=null&&!"".equals(factorCost.getVehicleCategory())){
  357. factor4.setNeedMatch(true);
  358. factor4.setMultipleSelectVal(String.valueOf(factorCost.getVehicleCategory()));
  359. }else{
  360. //如果方案中未录入,则不校验该项因子
  361. factor4.setNeedMatch(false);
  362. }
  363. resultMqp.put(4,factor4);
  364. //--------------------因子处理分割线----------------------------------
  365. FeeFactorInfoDto factor5=new FeeFactorInfoDto();
  366. factor5.setFactorName("使用性质");
  367. factor5.setMatchType("2");
  368. factor5.setMatchSequence(5);
  369. if(factorCost.getNatureOfUse()!=null&&!"".equals(factorCost.getNatureOfUse())){
  370. factor5.setNeedMatch(true);
  371. factor5.setMultipleSelectVal(String.valueOf(factorCost.getNatureOfUse()));
  372. }else{
  373. //如果方案中未录入,则不校验该项因子
  374. factor5.setNeedMatch(false);
  375. }
  376. resultMqp.put(5,factor5);
  377. //--------------------因子处理分割线----------------------------------
  378. FeeFactorInfoDto factor6=new FeeFactorInfoDto();
  379. factor6.setFactorName("客车座位数区间");
  380. factor6.setMatchType("3");
  381. factor6.setMatchSequence(6);
  382. if(checkFactorConfigWithArea(factorCost.getMinSeats(),factorCost.getMaxSeats(),factor6,factorCost)){
  383. factor6.setNeedMatch(true);
  384. factor6.setMinRangeVal(factorCost.getMinSeats());
  385. factor6.setMaxRangeVal(factorCost.getMaxSeats());
  386. }else{
  387. //如果方案中未录入,则不校验该项因子
  388. factor6.setNeedMatch(false);
  389. }
  390. resultMqp.put(6,factor6);
  391. //--------------------因子处理分割线----------------------------------
  392. FeeFactorInfoDto factor7=new FeeFactorInfoDto();
  393. factor7.setFactorName("新车购置价区间");
  394. factor7.setMatchType("3");
  395. factor7.setMatchSequence(7);
  396. if(checkFactorConfigWithArea(factorCost.getMinPurchasePrice(),factorCost.getMaxPurchasePrice(),factor7,factorCost)){
  397. factor7.setNeedMatch(true);
  398. factor7.setMinRangeVal(factorCost.getMinPurchasePrice());
  399. factor7.setMaxRangeVal(factorCost.getMaxPurchasePrice());
  400. }else{
  401. //如果方案中未录入,则不校验该项因子
  402. factor7.setNeedMatch(false);
  403. }
  404. resultMqp.put(7,factor7);
  405. //--------------------因子处理分割线----------------------------------
  406. FeeFactorInfoDto factor8=new FeeFactorInfoDto();
  407. factor8.setFactorName("核定载质量区间");
  408. factor8.setMatchType("3");
  409. factor8.setMatchSequence(8);
  410. if(checkFactorConfigWithArea(factorCost.getMinApprovedLoadCapacity(),factorCost.getMaxApprovedLoadCapacity(),factor8,factorCost)){
  411. factor8.setNeedMatch(true);
  412. factor8.setMinRangeVal(factorCost.getMinApprovedLoadCapacity());
  413. factor8.setMaxRangeVal(factorCost.getMaxApprovedLoadCapacity());
  414. }else{
  415. //如果方案中未录入,则不校验该项因子
  416. factor8.setNeedMatch(false);
  417. }
  418. resultMqp.put(8,factor8);
  419. //--------------------因子处理分割线----------------------------------
  420. FeeFactorInfoDto factor9=new FeeFactorInfoDto();
  421. factor9.setFactorName("交强险保费区间");
  422. factor9.setMatchType("3");
  423. factor9.setMatchSequence(9);
  424. if(checkFactorConfigWithArea(factorCost.getMinCompulsoryInsurancePremium(),factorCost.getMaxCompulsoryInsurancePremium(),factor9,factorCost)){
  425. factor9.setNeedMatch(true);
  426. factor9.setMinRangeVal(factorCost.getMinCompulsoryInsurancePremium());
  427. factor9.setMaxRangeVal(factorCost.getMaxCompulsoryInsurancePremium());
  428. }else{
  429. //如果方案中未录入,则不校验该项因子
  430. factor9.setNeedMatch(false);
  431. }
  432. resultMqp.put(9,factor9);
  433. //--------------------因子处理分割线----------------------------------
  434. FeeFactorInfoDto factor10=new FeeFactorInfoDto();
  435. factor10.setFactorName("车船税金额区间");
  436. factor10.setMatchType("3");
  437. factor10.setMatchSequence(10);
  438. if(checkFactorConfigWithArea(factorCost.getMinTaxAmount(),factorCost.getMaxTaxAmount(),factor10,factorCost)){
  439. factor10.setNeedMatch(true);
  440. factor10.setMinRangeVal(factorCost.getMinTaxAmount());
  441. factor10.setMaxRangeVal(factorCost.getMaxTaxAmount());
  442. }else{
  443. //如果方案中未录入,则不校验该项因子
  444. factor10.setNeedMatch(false);
  445. }
  446. resultMqp.put(10,factor10);
  447. //--------------------因子处理分割线----------------------------------
  448. FeeFactorInfoDto factor11=new FeeFactorInfoDto();
  449. factor11.setFactorName("三者保额区间");
  450. factor11.setMatchType("3");
  451. factor11.setMatchSequence(11);
  452. if(checkFactorConfigWithArea(factorCost.getMinTheThreePremium(),factorCost.getMaxTheThreePremium(),factor11,factorCost)){
  453. factor11.setNeedMatch(true);
  454. factor11.setMinRangeVal(factorCost.getMinTheThreePremium());
  455. factor11.setMaxRangeVal(factorCost.getMaxTheThreePremium());
  456. }else{
  457. //如果方案中未录入,则不校验该项因子
  458. factor11.setNeedMatch(false);
  459. }
  460. resultMqp.put(11,factor11);
  461. //--------------------因子处理分割线----------------------------------
  462. FeeFactorInfoDto factor12=new FeeFactorInfoDto();
  463. factor12.setFactorName("随车产品保费区间");
  464. factor12.setMatchType("3");
  465. factor12.setMatchSequence(12);
  466. if(checkFactorConfigWithArea(factorCost.getMinOnboardProductsPremium(),factorCost.getMaxOnboardProductsPremium(),factor12,factorCost)){
  467. factor12.setNeedMatch(true);
  468. factor12.setMinRangeVal(factorCost.getMinOnboardProductsPremium());
  469. factor12.setMaxRangeVal(factorCost.getMaxOnboardProductsPremium());
  470. }else{
  471. //如果方案中未录入,则不校验该项因子
  472. factor12.setNeedMatch(false);
  473. }
  474. resultMqp.put(12,factor12);
  475. //--------------------因子处理分割线----------------------------------
  476. FeeFactorInfoDto factor13=new FeeFactorInfoDto();
  477. factor13.setFactorName("商业险折扣区间");
  478. factor13.setMatchType("3");
  479. factor13.setMatchSequence(13);
  480. if(checkFactorConfigWithArea(factorCost.getMinCommercialInsuranceDiscount(),factorCost.getMaxCommercialInsuranceDiscount(),factor13,factorCost)){
  481. factor13.setNeedMatch(true);
  482. factor13.setMinRangeVal(factorCost.getMinCommercialInsuranceDiscount());
  483. factor13.setMaxRangeVal(factorCost.getMaxCommercialInsuranceDiscount());
  484. }else{
  485. //如果方案中未录入,则不校验该项因子
  486. factor13.setNeedMatch(false);
  487. }
  488. resultMqp.put(13,factor13);
  489. //--------------------因子处理分割线----------------------------------
  490. FeeFactorInfoDto factor14=new FeeFactorInfoDto();
  491. factor14.setFactorName("交强险折扣区间");
  492. factor14.setMatchType("3");
  493. factor14.setMatchSequence(14);
  494. if(checkFactorConfigWithArea(factorCost.getMinCompulsoryInsuranceDiscount(),factorCost.getMaxCompulsoryInsuranceDiscount(),factor14,factorCost)){
  495. factor14.setNeedMatch(true);
  496. factor14.setMinRangeVal(factorCost.getMinCompulsoryInsuranceDiscount());
  497. factor14.setMaxRangeVal(factorCost.getMaxCompulsoryInsuranceDiscount());
  498. }else{
  499. //如果方案中未录入,则不校验该项因子
  500. factor14.setNeedMatch(false);
  501. }
  502. resultMqp.put(14,factor14);
  503. //--------------------因子处理分割线----------------------------------
  504. FeeFactorInfoDto factor15=new FeeFactorInfoDto();
  505. factor15.setFactorName("保司评分区间");
  506. factor15.setMatchType("3");
  507. factor15.setMatchSequence(15);
  508. if(checkFactorConfigWithArea(factorCost.getMinScore(),factorCost.getMaxScore(),factor15,factorCost)){
  509. factor15.setNeedMatch(true);
  510. factor15.setMinRangeVal(factorCost.getMinScore());
  511. factor15.setMaxRangeVal(factorCost.getMaxScore());
  512. }else{
  513. //如果方案中未录入,则不校验该项因子
  514. factor15.setNeedMatch(false);
  515. }
  516. resultMqp.put(15,factor15);
  517. //--------------------因子处理分割线----------------------------------
  518. FeeFactorInfoDto factor16=new FeeFactorInfoDto();
  519. factor16.setFactorName("预期赔付率区间");
  520. factor16.setMatchType("3");
  521. factor16.setMatchSequence(16);
  522. if(checkFactorConfigWithArea(factorCost.getMinLossRation(),factorCost.getMaxLossRation(),factor16,factorCost)){
  523. factor16.setNeedMatch(true);
  524. factor16.setMinRangeVal(factorCost.getMinLossRation());
  525. factor16.setMaxRangeVal(factorCost.getMaxLossRation());
  526. }else{
  527. //如果方案中未录入,则不校验该项因子
  528. factor16.setNeedMatch(false);
  529. }
  530. resultMqp.put(16,factor16);
  531. //--------------------因子处理分割线----------------------------------
  532. FeeFactorInfoDto factor17=new FeeFactorInfoDto();
  533. factor17.setFactorName("车牌号地区");
  534. factor17.setMatchType("2");
  535. factor17.setMatchSequence(17);
  536. if(factorCost.getLicenseNumber()!=null&&!"".equals(factorCost.getLicenseNumber())){
  537. factor17.setNeedMatch(true);
  538. String matchStr=factorCost.getLicenseNumber();
  539. //考虑是否含暂未上牌标志
  540. if(factorCost.getContainNoLicense()!=null&&"1".equals(factorCost.getContainNoLicense())){
  541. matchStr=matchStr+",暂未上牌";
  542. }
  543. factor17.setMultipleSelectVal(matchStr);
  544. }else{
  545. //如果方案中未录入,则不校验该项因子
  546. factor17.setNeedMatch(false);
  547. }
  548. resultMqp.put(17,factor17);
  549. return resultMqp;
  550. }
  551. /**
  552. * 判断区间类因子是否需要匹配
  553. * @param minVal
  554. * @param maxVal
  555. * @param factorInfoDto
  556. * @param productCosts
  557. * @return
  558. */
  559. private boolean checkFactorConfigWithArea(Integer minVal, Integer maxVal,FeeFactorInfoDto factorInfoDto,PtlAgreementProductCosts productCosts) {
  560. boolean result=false; //默认不需要匹配
  561. if(minVal!=null&&maxVal!=null){
  562. if(minVal==0&&maxVal==0){//初始化没有配置的时候,全部默认的0,这种不需要匹配
  563. result=false;
  564. }else{
  565. if(minVal<=maxVal){
  566. result=true;
  567. }else{
  568. throw new SystemException("协议ID:"+productCosts.getAgreementId()+" 方案序号:"+productCosts.getId()+" 费用因子:"+factorInfoDto.getFactorName()+"配置有问题,请检查!");
  569. }
  570. }
  571. }else if(minVal!=null && maxVal==null){
  572. throw new SystemException("协议ID:"+productCosts.getAgreementId()+" 方案序号:"+productCosts.getId()+" 费用因子:"+factorInfoDto.getFactorName()+"配置有问题,请检查!");
  573. }else if(minVal==null&&maxVal!=null){
  574. throw new SystemException("协议ID:"+productCosts.getAgreementId()+" 方案序号:"+productCosts.getId()+" 费用因子:"+factorInfoDto.getFactorName()+"配置有问题,请检查!");
  575. }
  576. return result;
  577. }
  578. //----------------------------------------------分割线
  579. public FeeSchemeReqDto getFeeSchemeInfo(BaseQuoteInfoVo quoteInfoVo, QuoteRespVo quoteRespVo, String agreementId, String productId){
  580. CarInfoVo carInfoVo = quoteInfoVo.getCarInfo();
  581. List<KindInfoVo> kindList = quoteInfoVo.getKindList();
  582. String thirdPartyInsurance = "";
  583. if(kindList!=null && kindList.size()>0){
  584. for(KindInfoVo kindInfoVo:kindList){
  585. if("B".equals(kindInfoVo.getKindCode())){
  586. thirdPartyInsurance = String.valueOf(kindInfoVo.getAmount());
  587. }
  588. }
  589. }
  590. FeeSchemeReqDto feeSchemeReqDto = new FeeSchemeReqDto();
  591. String isTransfer = "0";
  592. String isNewCar = "0";
  593. String isRenewal = "0";
  594. String useNature = "家庭自用";
  595. String carType="客车";
  596. String isNewEnergy = "0";
  597. feeSchemeReqDto.setBusType(productId);//"业务类型:单交0330、单商034001、单三034002、交三0330034002、交商0330034001"
  598. feeSchemeReqDto.setAgreementId(agreementId);//协议ID
  599. if(carInfoVo.isTransferFlag()){
  600. isTransfer = "1";
  601. }
  602. feeSchemeReqDto.setIsTransfer(isTransfer);//是否过户 1是 0否"
  603. //新旧车判断逻辑,初登日期小于当前日期加9个月
  604. if(StringUtils.isNotEmpty(carInfoVo.getRegisterDate())){
  605. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  606. LocalDate registerDate = LocalDate.parse(carInfoVo.getRegisterDate(), formatter).plusMonths(9);
  607. LocalDate currentDate = LocalDate.now();
  608. if(currentDate.isBefore(registerDate)){
  609. isNewCar = "1";
  610. }
  611. }
  612. feeSchemeReqDto.setIsNewCar(isNewCar);//是否新车 1是 0否
  613. if("1".equals(carInfoVo.getPowertype())||"2".equals(carInfoVo.getPowertype())||"3".equals(carInfoVo.getPowertype())){
  614. isNewEnergy = "1";
  615. }
  616. feeSchemeReqDto.setIsNewEnergy(isNewEnergy);//是否新能源 1是 0否
  617. feeSchemeReqDto.setIsRenewal("0");//是否续保 1是 0否 续保取值有争议 默认送否 暂时搁置
  618. //页面要素及中煤交互请求返参没有,先默认写死
  619. if("A0".equals(carInfoVo.getCimodelclass())){
  620. carType="客车";
  621. }
  622. feeSchemeReqDto.setVehicleCategory(carType);//车辆大类: 客车、货车、特种车、挂车、摩托车、拖拉机
  623. if("8A".equals(carInfoVo.getCarnature())){
  624. useNature = "家庭自用";
  625. }
  626. feeSchemeReqDto.setUseNature(useNature);//使用性质: 营业出租、营业租赁、营业公交、营业客运、营业货运、营业旅游、家庭自用、非营业机关事业、非营业企业、非营业个人
  627. feeSchemeReqDto.setSeatNum(String.valueOf(carInfoVo.getSeatCount()));//座位数 大概率准
  628. feeSchemeReqDto.setPurchasePrice(carInfoVo.getPurchasePrice());//新车购置价 可能再次新车筛选的时候送保司和页面带入有差异
  629. feeSchemeReqDto.setApprovedLoadCapacity(String.valueOf(carInfoVo.getLimitLoad()));//核定载质量 可能再次新车筛选的时候送保司和页面带入有差异
  630. feeSchemeReqDto.setJqPremium(String.valueOf(quoteRespVo.getJqPremium()));//交强保费
  631. feeSchemeReqDto.setSyPremium(String.valueOf(quoteRespVo.getSyPremium()));//商业保费
  632. feeSchemeReqDto.setSumPayTax(String.valueOf(quoteRespVo.getTaxAmount()));//车船税金额
  633. feeSchemeReqDto.setThirdPartyInsurance(thirdPartyInsurance);//三者险保额 准
  634. feeSchemeReqDto.setNoCarPremium("");//随车产品保费
  635. feeSchemeReqDto.setSyDiscount("");//商业险折扣
  636. feeSchemeReqDto.setJqDiscount("");//交强险折扣
  637. // feeSchemeReqDto.setInsuranceScore(quotedPriceResponse.getPlatMain().getZmScore());//保司评分 这里直接取中煤分
  638. feeSchemeReqDto.setExpectedLossRate("");//预期赔付率
  639. if(carInfoVo.getLicenseNo()!=null&&!"".equals(carInfoVo.getLicenseNo())&&!"暂未上牌".equals(carInfoVo.getLicenseNo())){
  640. feeSchemeReqDto.setLicenseNo(carInfoVo.getLicenseNo().substring(0,2));//车牌号
  641. }else{
  642. feeSchemeReqDto.setLicenseNo("暂未上牌");//车牌号
  643. }
  644. return feeSchemeReqDto;
  645. }
  646. public void dealFeeOrderInfo(BaseQuoteInfoVo quoteInfoVo, QuoteRespVo quoteRespVo, String agreementId,String businessNo){
  647. BigDecimal jqNoTaxPremium = new BigDecimal(0);
  648. BigDecimal syNoTaxPremium = new BigDecimal(0);
  649. InsOrders insOrders = insOrdersService.getById(quoteRespVo.getOrderno());
  650. FeeSchemeReqDto feeSchemeReqDto = this.getFeeSchemeInfo(quoteInfoVo,quoteRespVo,agreementId,insOrders.getProductid());
  651. FeeSchemeResDto feeSchemeResDto = this.matchTheAppropriateFees(feeSchemeReqDto);
  652. InsFeeOrder insFeeOrder = new InsFeeOrder(feeSchemeReqDto,feeSchemeResDto,businessNo);
  653. //先通过含税保费计算出不含税保费 公式 总保费/(1+增值税率) 目前增值税率是0.06
  654. if(insFeeOrder.getJqPremium().doubleValue()>0){
  655. jqNoTaxPremium = insFeeOrder.getJqPremium().divide(new BigDecimal(1+0.06),BigDecimal.ROUND_HALF_UP,2);
  656. insFeeOrder.setJqNoTaxPremium(jqNoTaxPremium);
  657. //交强险总费用
  658. insFeeOrder.setJqCostsPremiums(getPremium(jqNoTaxPremium,insFeeOrder.getJqCostsProportion()));
  659. //监管费比例
  660. if("1".equals(feeSchemeReqDto.getIsNewCar())){
  661. insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getJqNewCarCostsProportion()));
  662. }else if("0".equals(feeSchemeReqDto.getIsNewCar())){
  663. insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getJqOldCarCostsProportion()));
  664. }else{
  665. insFeeOrder.setJqSuperviseCostsProportion(new BigDecimal(0));
  666. }
  667. //监管费
  668. insFeeOrder.setJqSuperviseCostsPremiums(getPremium(jqNoTaxPremium,insFeeOrder.getJqSuperviseCostsProportion()));
  669. //溢出费比例 先搁置放0
  670. insFeeOrder.setJqSpilloverProportion(new BigDecimal(feeSchemeResDto.getJqSpilloverProportion()));
  671. //溢出费 先搁置放0
  672. insFeeOrder.setJqSpilloverPremiums(getPremium(jqNoTaxPremium,insFeeOrder.getJqSpilloverProportion()));
  673. }
  674. if(insFeeOrder.getSyPremium().doubleValue()>0){
  675. syNoTaxPremium = insFeeOrder.getSyPremium().divide(new BigDecimal(1+0.06),BigDecimal.ROUND_HALF_UP,2);
  676. insFeeOrder.setSyNoTaxPremium(syNoTaxPremium);
  677. //商业险总费用
  678. insFeeOrder.setSyCostsPremiums(getPremium(syNoTaxPremium,insFeeOrder.getSyCostsProportion()));
  679. //监管费比例
  680. if("1".equals(feeSchemeReqDto.getIsNewCar())){
  681. insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getSyNewCarCostsProportion()));
  682. }else if("0".equals(feeSchemeReqDto.getIsNewCar())){
  683. insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(feeSchemeResDto.getSyOldCarCostsProportion()));
  684. }else{
  685. insFeeOrder.setSySuperviseCostsProportion(new BigDecimal(0));
  686. }
  687. //监管费
  688. insFeeOrder.setSySuperviseCostsPremiums(getPremium(syNoTaxPremium,insFeeOrder.getSySuperviseCostsProportion()));
  689. //溢出费比例 先搁置放0
  690. insFeeOrder.setSySpilloverProportion(new BigDecimal(feeSchemeResDto.getSySpilloverProportion()));
  691. //溢出费 先搁置放0
  692. insFeeOrder.setSySpilloverPremiums(getPremium(syNoTaxPremium,insFeeOrder.getSySpilloverProportion()));
  693. }
  694. if(jqNoTaxPremium.doubleValue() >0 || syNoTaxPremium.doubleValue() >0){
  695. BigDecimal totalNoTaxPremium = jqNoTaxPremium.add(syNoTaxPremium);
  696. SysUser sysUser = sysUserService.findByUserId(insOrders.getUserid());
  697. /**
  698. * 机构管理费比例逻辑
  699. * 当前出单员的机构编码找他的上一级就是五级
  700. * 机构层级划分方式
  701. * 99 总公司 一级
  702. * 9914山西分公司 二级
  703. * 991401太原中支 三级
  704. * 99140105小店中支 四级
  705. * 9914010501 营销服务部 五级
  706. * 1团队 无机构层级
  707. */
  708. //判断出单员归属机构层级
  709. String parentId = sysUser.getDeptId();
  710. String comlevel = "";
  711. do{//循环操作
  712. SysDept sysDeptTemp = sysDeptService.getById(parentId);
  713. if(sysDeptTemp!=null&&StringUtils.isNotEmpty(sysDeptTemp.getParentId())){
  714. parentId = sysDeptTemp.getParentId();
  715. }else{
  716. break;
  717. }
  718. if(StringUtils.isEmpty(sysDeptTemp.getComlevel())){
  719. continue;
  720. }else {
  721. comlevel = sysDeptTemp.getComlevel();
  722. }
  723. //五级机构管理费用比例
  724. if(sysDeptTemp!=null && "5".equals(sysDeptTemp.getComlevel())){
  725. insFeeOrder.setFifthDeptProportion(new BigDecimal(sysDeptTemp.getManagementFee()));
  726. insFeeOrder.setFifthDeptPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getFifthDeptProportion()));
  727. }
  728. //四级机构管理费用比例
  729. if(sysDeptTemp!=null && "4".equals(sysDeptTemp.getComlevel())){
  730. insFeeOrder.setForthDeptProportion(new BigDecimal(sysDeptTemp.getManagementFee()));
  731. insFeeOrder.setForthDeptPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getForthDeptProportion()));
  732. }
  733. //三级机构管理费用比例
  734. if(sysDeptTemp!=null && "3".equals(sysDeptTemp.getComlevel())){
  735. insFeeOrder.setThirdDeptProportion(new BigDecimal(sysDeptTemp.getManagementFee()));
  736. insFeeOrder.setThirdDeptPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getThirdDeptProportion()));
  737. }
  738. //二级机构管理费用比例
  739. if(sysDeptTemp!=null && "2".equals(sysDeptTemp.getComlevel())){
  740. insFeeOrder.setSecondDeptProportion(new BigDecimal(sysDeptTemp.getManagementFee()));
  741. insFeeOrder.setSecondDeptPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getSecondDeptProportion()));
  742. }
  743. //一级机构管理费用比例
  744. if(sysDeptTemp!=null && "1".equals(sysDeptTemp.getComlevel())){
  745. insFeeOrder.setFirstDeptProportion(new BigDecimal(sysDeptTemp.getManagementFee()));
  746. insFeeOrder.setFirstDeptPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getFirstDeptProportion()));
  747. //取到第一层级时结束
  748. break;
  749. }
  750. }while (!"1".equals(comlevel));
  751. //一级分销比例 推荐人
  752. //二级分销比例
  753. //三级分销比例
  754. /**
  755. * 分销一级、二级、三级存值取团队配置的分销佣金比例,若该团队走三级分销模式,当前出单员出单时,跟单的分销取值方式为:
  756. * 根据出单员的推荐人向上找三级,若可以找到,则跟单存一、二、三分销比例;
  757. * 若向上只能找到一级或者二级,则跟单存一级或者一级、二级
  758. * 比如 A 1 B 2 C 3 D 若D出单 则给 C 3个 B 2个 A 1个;C出单给 B 3个 A 2个
  759. * 第一步,先判断团队配置的分销模式
  760. * 第二步,根据分销模式找上级存值相应分销比例
  761. * 第三步,仅有一个上级的情况分销比例存啥
  762. */
  763. List<EsmRetail> esmRetailList = esmRetailService.selectList(" where t.deptid=? and t.status = '1' ", new Object[]{sysUser.getDeptId()});
  764. if(esmRetailList!=null && esmRetailList.size()>0){
  765. EsmRetail esmRetail = esmRetailList.get(0);
  766. if(esmRetail!=null){
  767. int cycleIndex = 0;
  768. if("3".equals(esmRetail.getRetailtype())){//团队配置了三级分销模式
  769. cycleIndex = 3;
  770. }else if("2".equals(esmRetail.getRetailtype())){//团队配置了二级分销模式
  771. cycleIndex = 2;
  772. }else if("1".equals(esmRetail.getRetailtype())){//团队配置了一级分销模式
  773. cycleIndex = 1;
  774. }else if("0".equals(esmRetail.getRetailtype())){//团队没有配置分销模式
  775. cycleIndex = 0;
  776. }
  777. //利用当前工号,循环向上找推荐人
  778. String userId = sysUser.getId();
  779. int breakCycle = 99999999;
  780. for(int i=0;i<=cycleIndex;i++){
  781. EsmUserReferrer userReferrer = esmUserReferrerService.getById(userId);
  782. if(userReferrer.getReferrerId().equals(userReferrer.getId())){//团队长,没有上级
  783. //跳出循环
  784. breakCycle = i;
  785. break;
  786. }else {
  787. userId = userReferrer.getReferrerId();
  788. }
  789. }
  790. //breakCycle是3,当前工号的上级的上级的上级就是团队长
  791. //breakCycle是2,当前工号的上级的上级就是团队长
  792. //breakCycle是1,当前工号的上级就是团队长
  793. //breakCycle是0,当前工号就是团队长
  794. if("3".equals(esmRetail.getRetailtype())){//团队配置了三级分销模式
  795. if(breakCycle==99999999||breakCycle==3){
  796. insFeeOrder.setFirstRetailProportion(new BigDecimal(esmRetail.getDisrate1()));
  797. insFeeOrder.setSecondRetailProportion(new BigDecimal(esmRetail.getDisrate2()));
  798. insFeeOrder.setThirdRetailProportion(new BigDecimal(esmRetail.getDisrate3()));
  799. }else if(breakCycle==2){
  800. insFeeOrder.setSecondRetailProportion(new BigDecimal(esmRetail.getDisrate2()));
  801. insFeeOrder.setThirdRetailProportion(new BigDecimal(esmRetail.getDisrate3()));
  802. }else if(breakCycle==1){
  803. insFeeOrder.setThirdRetailProportion(new BigDecimal(esmRetail.getDisrate3()));
  804. }
  805. }else if("2".equals(esmRetail.getRetailtype())){//团队配置了二级分销模式
  806. if(breakCycle==99999999||breakCycle==3 || breakCycle==2){
  807. insFeeOrder.setFirstRetailProportion(new BigDecimal(esmRetail.getDisrate1()));
  808. insFeeOrder.setSecondRetailProportion(new BigDecimal(esmRetail.getDisrate2()));
  809. }else if(breakCycle==1){
  810. insFeeOrder.setSecondRetailProportion(new BigDecimal(esmRetail.getDisrate2()));
  811. }
  812. }else if("1".equals(esmRetail.getRetailtype())){//团队配置了一级分销模式
  813. if(breakCycle==99999999||breakCycle==3 || breakCycle==2||breakCycle==1){
  814. insFeeOrder.setFirstRetailProportion(new BigDecimal(esmRetail.getDisrate1()));
  815. }
  816. }
  817. insFeeOrder.setFirstRetailPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getFirstRetailProportion()));
  818. insFeeOrder.setSecondRetailPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getSecondRetailProportion()));
  819. insFeeOrder.setThirdRetailPremiums(getPremium(totalNoTaxPremium,insFeeOrder.getThirdRetailProportion()));
  820. }
  821. }
  822. }
  823. insFeeOrderService.insertCompanyAndOrders(insFeeOrder);
  824. }
  825. private BigDecimal getPremium(BigDecimal noTaxPremium,BigDecimal costsProportion){
  826. BigDecimal premium = new BigDecimal(0);
  827. if(costsProportion!=null && costsProportion.doubleValue()>0){
  828. premium = noTaxPremium.multiply(costsProportion).divide(new BigDecimal(100),4,BigDecimal.ROUND_HALF_UP);
  829. }
  830. return premium;
  831. }
  832. private BigDecimal getPremiumForSubtract(BigDecimal former,BigDecimal latter){
  833. BigDecimal premium = new BigDecimal(0);
  834. if(former!=null && latter!=null){
  835. former.subtract(latter);
  836. }
  837. return premium;
  838. }
  839. public List<QueryOrderFeeResultVo> queryFeeOrderInfo(String companyId){
  840. QueryOrderFeeVo queryOrderFeeVo = new QueryOrderFeeVo();
  841. OrderFeeVo jqOrderFeeVo = new OrderFeeVo();
  842. OrderFeeVo syOrderFeeVo = new OrderFeeVo();
  843. OrderFeeVo fcOrderFeeVo = new OrderFeeVo();
  844. InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
  845. InsFeeOrder insFeeOrder = insFeeOrderService.getByInsOrderNo(insAreaCompany.getInsOrderNo());
  846. if(insFeeOrder!=null){
  847. if(insFeeOrder.getJqPremium()!=null && insFeeOrder.getJqPremium().doubleValue()>0 && insFeeOrder.getSyPremium()!=null && insFeeOrder.getSyPremium().doubleValue()==0){//当为单交业务时
  848. jqOrderFeeVo = packageOrderFeeInfoOne(insFeeOrder);
  849. jqOrderFeeVo.setCostsPremiums(convertToString(insFeeOrder.getJqCostsPremiums()));
  850. jqOrderFeeVo.setCostsProportion(convertToString(insFeeOrder.getJqCostsProportion()));
  851. }else if(insFeeOrder.getSyPremium()!=null && insFeeOrder.getSyPremium().doubleValue()>0 && insFeeOrder.getJqPremium()!=null && insFeeOrder.getJqPremium().doubleValue()==0){//当为单商业务时
  852. syOrderFeeVo = packageOrderFeeInfoOne(insFeeOrder);
  853. syOrderFeeVo.setCostsPremiums(convertToString(insFeeOrder.getSyCostsPremiums()));
  854. syOrderFeeVo.setCostsProportion(convertToString(insFeeOrder.getSyCostsProportion()));
  855. }else if(insFeeOrder.getJqPremium()!=null && insFeeOrder.getJqPremium().doubleValue()>0 && insFeeOrder.getSyPremium()!=null && insFeeOrder.getSyPremium().doubleValue()>0){//当为交商业务时
  856. QueryOrderFeeVo queryOrderFeeVoTemp = packageOrderFeeInfoAll(insFeeOrder);
  857. //获取交强险费用明细
  858. jqOrderFeeVo = queryOrderFeeVoTemp.getJqCoderFeeVo();
  859. jqOrderFeeVo.setCostsPremiums(convertToString(insFeeOrder.getJqCostsPremiums()));
  860. jqOrderFeeVo.setCostsProportion(convertToString(insFeeOrder.getJqCostsProportion()));
  861. //获取商业险费用明细
  862. syOrderFeeVo = queryOrderFeeVoTemp.getSyCoderFeeVo();
  863. syOrderFeeVo.setCostsPremiums(convertToString(insFeeOrder.getSyCostsPremiums()));
  864. syOrderFeeVo.setCostsProportion(convertToString(insFeeOrder.getSyCostsProportion()));
  865. }
  866. queryOrderFeeVo.setJqCoderFeeVo(jqOrderFeeVo);
  867. queryOrderFeeVo.setSyCoderFeeVo(syOrderFeeVo);
  868. queryOrderFeeVo.setFcCoderFeeVo(fcOrderFeeVo);
  869. }
  870. List<QueryOrderFeeResultVo> resultList=convertOrderFeeVoData(queryOrderFeeVo);
  871. return resultList;
  872. }
  873. //把取出的费用信息转换为页面需要展示的数据
  874. private List<QueryOrderFeeResultVo> convertOrderFeeVoData(QueryOrderFeeVo orderFeeVo) {
  875. List<QueryOrderFeeResultVo> resultList=new ArrayList<>();
  876. OrderFeeVo jqOrderFeeVo = orderFeeVo.getJqCoderFeeVo();
  877. OrderFeeVo syOrderFeeVo = orderFeeVo.getSyCoderFeeVo();
  878. OrderFeeVo fcOrderFeeVo = orderFeeVo.getFcCoderFeeVo();
  879. //总费用
  880. QueryOrderFeeResultVo feeResultVo1=new QueryOrderFeeResultVo();
  881. feeResultVo1.setDescSerialNo("1");
  882. feeResultVo1.setFeeTypeName("总费用");
  883. feeResultVo1.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getCostsProportion()!=null?jqOrderFeeVo.getCostsProportion():"-");
  884. feeResultVo1.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getCostsPremiums()!=null?jqOrderFeeVo.getCostsPremiums():"-");
  885. feeResultVo1.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getCostsProportion()!=null?syOrderFeeVo.getCostsProportion():"-");
  886. feeResultVo1.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getCostsPremiums()!=null?syOrderFeeVo.getCostsPremiums():"-");
  887. feeResultVo1.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getCostsProportion()!=null?fcOrderFeeVo.getCostsProportion():"-");
  888. feeResultVo1.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getCostsPremiums()!=null?fcOrderFeeVo.getCostsPremiums():"-");
  889. resultList.add(feeResultVo1);
  890. //一级管理费用
  891. QueryOrderFeeResultVo feeResultVo2=new QueryOrderFeeResultVo();
  892. feeResultVo2.setDescSerialNo("2");
  893. feeResultVo2.setFeeTypeName("一级管理费");
  894. feeResultVo2.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getFirstDeptProportion()!=null?jqOrderFeeVo.getFirstDeptProportion():"-");
  895. feeResultVo2.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getFirstDeptPremiums()!=null?jqOrderFeeVo.getFirstDeptPremiums():"-");
  896. feeResultVo2.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getFirstDeptProportion()!=null?syOrderFeeVo.getFirstDeptProportion():"-");
  897. feeResultVo2.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getFirstDeptPremiums()!=null?syOrderFeeVo.getFirstDeptPremiums():"-");
  898. feeResultVo2.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getFirstDeptProportion()!=null?fcOrderFeeVo.getFirstDeptProportion():"-");
  899. feeResultVo2.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getFirstDeptPremiums()!=null?fcOrderFeeVo.getFirstDeptPremiums():"-");
  900. resultList.add(feeResultVo2);
  901. //二级管理费用
  902. QueryOrderFeeResultVo feeResultVo3=new QueryOrderFeeResultVo();
  903. feeResultVo3.setDescSerialNo("3");
  904. feeResultVo3.setFeeTypeName("二级管理费");
  905. feeResultVo3.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getSecondDeptProportion()!=null?jqOrderFeeVo.getSecondDeptProportion():"-");
  906. feeResultVo3.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getSecondDeptPremiums()!=null?jqOrderFeeVo.getSecondDeptPremiums():"-");
  907. feeResultVo3.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getSecondDeptProportion()!=null?syOrderFeeVo.getSecondDeptProportion():"-");
  908. feeResultVo3.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getSecondDeptPremiums()!=null?syOrderFeeVo.getSecondDeptPremiums():"-");
  909. feeResultVo3.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getSecondDeptProportion()!=null?fcOrderFeeVo.getSecondDeptProportion():"-");
  910. feeResultVo3.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getSecondDeptPremiums()!=null?fcOrderFeeVo.getSecondDeptPremiums():"-");
  911. resultList.add(feeResultVo3);
  912. //三级管理费用
  913. QueryOrderFeeResultVo feeResultVo4=new QueryOrderFeeResultVo();
  914. feeResultVo4.setDescSerialNo("4");
  915. feeResultVo4.setFeeTypeName("三级管理费");
  916. feeResultVo4.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getThirdDeptProportion()!=null?jqOrderFeeVo.getThirdDeptProportion():"-");
  917. feeResultVo4.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getThirdDeptPremiums()!=null?jqOrderFeeVo.getThirdDeptPremiums():"-");
  918. feeResultVo4.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getThirdDeptProportion()!=null?syOrderFeeVo.getThirdDeptProportion():"-");
  919. feeResultVo4.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getThirdDeptPremiums()!=null?syOrderFeeVo.getThirdDeptPremiums():"-");
  920. feeResultVo4.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getThirdDeptProportion()!=null?fcOrderFeeVo.getThirdDeptProportion():"-");
  921. feeResultVo4.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getThirdDeptPremiums()!=null?fcOrderFeeVo.getThirdDeptPremiums():"-");
  922. resultList.add(feeResultVo4);
  923. //四级管理费用
  924. QueryOrderFeeResultVo feeResultVo5=new QueryOrderFeeResultVo();
  925. feeResultVo5.setDescSerialNo("5");
  926. feeResultVo5.setFeeTypeName("四级管理费");
  927. feeResultVo5.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getForthDeptProportion()!=null?jqOrderFeeVo.getForthDeptProportion():"-");
  928. feeResultVo5.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getForthDeptPremiums()!=null?jqOrderFeeVo.getForthDeptPremiums():"-");
  929. feeResultVo5.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getForthDeptProportion()!=null?syOrderFeeVo.getForthDeptProportion():"-");
  930. feeResultVo5.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getForthDeptPremiums()!=null?syOrderFeeVo.getForthDeptPremiums():"-");
  931. feeResultVo5.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getForthDeptProportion()!=null?fcOrderFeeVo.getForthDeptProportion():"-");
  932. feeResultVo5.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getForthDeptPremiums()!=null?fcOrderFeeVo.getForthDeptPremiums():"-");
  933. resultList.add(feeResultVo5);
  934. //五级管理费用
  935. QueryOrderFeeResultVo feeResultVo6=new QueryOrderFeeResultVo();
  936. feeResultVo6.setDescSerialNo("6");
  937. feeResultVo6.setFeeTypeName("五级管理费");
  938. feeResultVo6.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getFifthDeptProportion()!=null?jqOrderFeeVo.getFifthDeptProportion():"-");
  939. feeResultVo6.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getFifthDeptPremiums()!=null?jqOrderFeeVo.getFifthDeptPremiums():"-");
  940. feeResultVo6.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getFifthDeptProportion()!=null?syOrderFeeVo.getFifthDeptProportion():"-");
  941. feeResultVo6.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getFifthDeptPremiums()!=null?syOrderFeeVo.getFifthDeptPremiums():"-");
  942. feeResultVo6.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getFifthDeptProportion()!=null?fcOrderFeeVo.getFifthDeptProportion():"-");
  943. feeResultVo6.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getFifthDeptPremiums()!=null?fcOrderFeeVo.getFifthDeptPremiums():"-");
  944. resultList.add(feeResultVo6);
  945. //一级分销费
  946. QueryOrderFeeResultVo feeResultVo7=new QueryOrderFeeResultVo();
  947. feeResultVo7.setDescSerialNo("7");
  948. feeResultVo7.setFeeTypeName("一级分销费");
  949. feeResultVo7.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getFirstRetailProportion()!=null?jqOrderFeeVo.getFirstRetailProportion():"-");
  950. feeResultVo7.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getFirstRetailPremiums()!=null?jqOrderFeeVo.getFirstRetailPremiums():"-");
  951. feeResultVo7.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getFirstRetailProportion()!=null?syOrderFeeVo.getFirstRetailProportion():"-");
  952. feeResultVo7.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getFirstRetailPremiums()!=null?syOrderFeeVo.getFirstRetailPremiums():"-");
  953. feeResultVo7.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getFirstRetailProportion()!=null?fcOrderFeeVo.getFirstRetailProportion():"-");
  954. feeResultVo7.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getFirstRetailPremiums()!=null?fcOrderFeeVo.getFirstRetailPremiums():"-");
  955. resultList.add(feeResultVo7);
  956. //二级分销费
  957. QueryOrderFeeResultVo feeResultVo8=new QueryOrderFeeResultVo();
  958. feeResultVo8.setDescSerialNo("8");
  959. feeResultVo8.setFeeTypeName("二级分销费");
  960. feeResultVo8.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getSecondRetailProportion()!=null?jqOrderFeeVo.getSecondRetailProportion():"-");
  961. feeResultVo8.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getSecondRetailPremiums()!=null?jqOrderFeeVo.getSecondRetailPremiums():"-");
  962. feeResultVo8.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getSecondRetailProportion()!=null?syOrderFeeVo.getSecondRetailProportion():"-");
  963. feeResultVo8.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getSecondRetailPremiums()!=null?syOrderFeeVo.getSecondRetailPremiums():"-");
  964. feeResultVo8.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getSecondRetailProportion()!=null?fcOrderFeeVo.getSecondRetailProportion():"-");
  965. feeResultVo8.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getSecondRetailPremiums()!=null?fcOrderFeeVo.getSecondRetailPremiums():"-");
  966. resultList.add(feeResultVo8);
  967. //三级分销费
  968. QueryOrderFeeResultVo feeResultVo9=new QueryOrderFeeResultVo();
  969. feeResultVo9.setDescSerialNo("9");
  970. feeResultVo9.setFeeTypeName("三级分销费");
  971. feeResultVo9.setJqFeeRate(jqOrderFeeVo!=null&&jqOrderFeeVo.getThirdRetailProportion()!=null?jqOrderFeeVo.getThirdRetailProportion():"-");
  972. feeResultVo9.setJqFeeAmount(jqOrderFeeVo!=null&&jqOrderFeeVo.getThirdRetailPremiums()!=null?jqOrderFeeVo.getThirdRetailPremiums():"-");
  973. feeResultVo9.setSyFeeRate(syOrderFeeVo!=null&&syOrderFeeVo.getThirdRetailProportion()!=null?syOrderFeeVo.getThirdRetailProportion():"-");
  974. feeResultVo9.setSyFeeAmount(syOrderFeeVo!=null&&syOrderFeeVo.getThirdRetailPremiums()!=null?syOrderFeeVo.getThirdRetailPremiums():"-");
  975. feeResultVo9.setFcFeeRate(fcOrderFeeVo!=null&&fcOrderFeeVo.getThirdRetailProportion()!=null?fcOrderFeeVo.getThirdRetailProportion():"-");
  976. feeResultVo9.setFcFeeAmount(fcOrderFeeVo!=null&&fcOrderFeeVo.getThirdRetailPremiums()!=null?fcOrderFeeVo.getThirdRetailPremiums():"-");
  977. resultList.add(feeResultVo9);
  978. return resultList;
  979. }
  980. /**
  981. * 按照组合单模式获取费用明细
  982. * @param insFeeOrder
  983. * @return
  984. */
  985. private QueryOrderFeeVo packageOrderFeeInfoAll(InsFeeOrder insFeeOrder){
  986. QueryOrderFeeVo queryOrderFeeVo = new QueryOrderFeeVo();
  987. InsFeeOrder jqInsFeeOrderTemp = new InsFeeOrder();
  988. //先利用交强费重算费用
  989. jqInsFeeOrderTemp.setFirstDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getFirstDeptProportion()));
  990. jqInsFeeOrderTemp.setSecondDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getSecondDeptProportion()));
  991. jqInsFeeOrderTemp.setThirdDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getThirdDeptProportion()));
  992. jqInsFeeOrderTemp.setForthDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getForthDeptProportion()));
  993. jqInsFeeOrderTemp.setFifthDeptPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getFifthDeptProportion()));
  994. jqInsFeeOrderTemp.setFirstRetailPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getFirstRetailProportion()));
  995. jqInsFeeOrderTemp.setSecondRetailPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getSecondRetailProportion()));
  996. jqInsFeeOrderTemp.setThirdRetailPremiums(getPremium(insFeeOrder.getJqNoTaxPremium(),insFeeOrder.getThirdRetailProportion()));
  997. //再利用总费-交强费,得出商业费
  998. InsFeeOrder syInsFeeOrderTemp = new InsFeeOrder();
  999. syInsFeeOrderTemp.setFirstDeptPremiums(getPremiumForSubtract(insFeeOrder.getFirstDeptPremiums(),jqInsFeeOrderTemp.getFirstDeptPremiums()));
  1000. syInsFeeOrderTemp.setSecondDeptPremiums(getPremiumForSubtract(insFeeOrder.getSecondDeptPremiums(),jqInsFeeOrderTemp.getSecondDeptPremiums()));
  1001. syInsFeeOrderTemp.setThirdDeptPremiums(getPremiumForSubtract(insFeeOrder.getThirdDeptPremiums(),jqInsFeeOrderTemp.getThirdDeptPremiums()));
  1002. syInsFeeOrderTemp.setForthDeptPremiums(getPremiumForSubtract(insFeeOrder.getForthDeptPremiums(),jqInsFeeOrderTemp.getForthDeptPremiums()));
  1003. syInsFeeOrderTemp.setFifthDeptPremiums(getPremiumForSubtract(insFeeOrder.getFifthDeptPremiums(),jqInsFeeOrderTemp.getFifthDeptPremiums()));
  1004. syInsFeeOrderTemp.setFirstRetailPremiums(getPremiumForSubtract(insFeeOrder.getFirstRetailPremiums(),jqInsFeeOrderTemp.getFirstRetailPremiums()));
  1005. syInsFeeOrderTemp.setSecondRetailPremiums(getPremiumForSubtract(insFeeOrder.getSecondRetailPremiums(),jqInsFeeOrderTemp.getSecondRetailPremiums()));
  1006. syInsFeeOrderTemp.setThirdRetailPremiums(getPremiumForSubtract(insFeeOrder.getThirdRetailPremiums(),jqInsFeeOrderTemp.getThirdRetailPremiums()));
  1007. //交强费转换赋值
  1008. OrderFeeVo jqOrderFeeVo = packageOrderFeeInfoOne(insFeeOrder);
  1009. jqOrderFeeVo.setFirstDeptPremiums(convertToString(jqInsFeeOrderTemp.getFirstDeptPremiums()));
  1010. jqOrderFeeVo.setSecondDeptPremiums(convertToString(jqInsFeeOrderTemp.getSecondDeptPremiums()));
  1011. jqOrderFeeVo.setThirdDeptPremiums(convertToString(jqInsFeeOrderTemp.getThirdDeptPremiums()));
  1012. jqOrderFeeVo.setForthDeptPremiums(convertToString(jqInsFeeOrderTemp.getForthDeptPremiums()));
  1013. jqOrderFeeVo.setFifthDeptPremiums(convertToString(jqInsFeeOrderTemp.getFifthDeptPremiums()));
  1014. jqOrderFeeVo.setFirstRetailPremiums(convertToString(jqInsFeeOrderTemp.getFirstRetailPremiums()));
  1015. jqOrderFeeVo.setSecondRetailPremiums(convertToString(jqInsFeeOrderTemp.getSecondRetailPremiums()));
  1016. jqOrderFeeVo.setThirdRetailPremiums(convertToString(jqInsFeeOrderTemp.getThirdRetailPremiums()));
  1017. //商业费转换赋值
  1018. OrderFeeVo syOrderFeeVo = packageOrderFeeInfoOne(insFeeOrder);
  1019. syOrderFeeVo.setFirstDeptPremiums(convertToString(syInsFeeOrderTemp.getFirstDeptPremiums()));
  1020. syOrderFeeVo.setSecondDeptPremiums(convertToString(syInsFeeOrderTemp.getSecondDeptPremiums()));
  1021. syOrderFeeVo.setThirdDeptPremiums(convertToString(syInsFeeOrderTemp.getThirdDeptPremiums()));
  1022. syOrderFeeVo.setForthDeptPremiums(convertToString(syInsFeeOrderTemp.getForthDeptPremiums()));
  1023. syOrderFeeVo.setFifthDeptPremiums(convertToString(syInsFeeOrderTemp.getFifthDeptPremiums()));
  1024. syOrderFeeVo.setFirstRetailPremiums(convertToString(syInsFeeOrderTemp.getFirstRetailPremiums()));
  1025. syOrderFeeVo.setSecondRetailPremiums(convertToString(syInsFeeOrderTemp.getSecondRetailPremiums()));
  1026. syOrderFeeVo.setThirdRetailPremiums(convertToString(syInsFeeOrderTemp.getThirdRetailPremiums()));
  1027. queryOrderFeeVo.setJqCoderFeeVo(jqOrderFeeVo);
  1028. queryOrderFeeVo.setSyCoderFeeVo(syOrderFeeVo);
  1029. return queryOrderFeeVo;
  1030. }
  1031. /**
  1032. * 按照单险种方式获取费用明细
  1033. * @param insFeeOrder
  1034. * @return
  1035. */
  1036. private OrderFeeVo packageOrderFeeInfoOne(InsFeeOrder insFeeOrder){
  1037. OrderFeeVo orderFeeVo = new OrderFeeVo();
  1038. orderFeeVo.setFirstDeptPremiums(convertToString(insFeeOrder.getFirstDeptPremiums()));
  1039. orderFeeVo.setFirstDeptProportion(convertToString(insFeeOrder.getFirstDeptProportion()));
  1040. orderFeeVo.setSecondDeptPremiums(convertToString(insFeeOrder.getSecondDeptPremiums()));
  1041. orderFeeVo.setSecondDeptProportion(convertToString(insFeeOrder.getSecondDeptProportion()));
  1042. orderFeeVo.setThirdDeptPremiums(convertToString(insFeeOrder.getThirdDeptPremiums()));
  1043. orderFeeVo.setThirdDeptProportion(convertToString(insFeeOrder.getThirdDeptProportion()));
  1044. orderFeeVo.setForthDeptPremiums(convertToString(insFeeOrder.getForthDeptPremiums()));
  1045. orderFeeVo.setForthDeptProportion(convertToString(insFeeOrder.getForthDeptProportion()));
  1046. orderFeeVo.setFifthDeptPremiums(convertToString(insFeeOrder.getFifthDeptPremiums()));
  1047. orderFeeVo.setFifthDeptProportion(convertToString(insFeeOrder.getFifthDeptProportion()));
  1048. orderFeeVo.setFirstRetailPremiums(convertToString(insFeeOrder.getFirstRetailPremiums()));
  1049. orderFeeVo.setFirstRetailProportion(convertToString(insFeeOrder.getFirstRetailProportion()));
  1050. orderFeeVo.setSecondRetailPremiums(convertToString(insFeeOrder.getSecondRetailPremiums()));
  1051. orderFeeVo.setSecondRetailProportion(convertToString(insFeeOrder.getSecondRetailProportion()));
  1052. orderFeeVo.setThirdRetailPremiums(convertToString(insFeeOrder.getThirdRetailPremiums()));
  1053. orderFeeVo.setThirdRetailProportion(convertToString(insFeeOrder.getThirdRetailProportion()));
  1054. return orderFeeVo;
  1055. }
  1056. private String convertToString(BigDecimal b){
  1057. if(b!=null){
  1058. if(b.doubleValue()==0){
  1059. return null;
  1060. }else {
  1061. return b.toString();
  1062. }
  1063. }else{
  1064. return null;
  1065. }
  1066. }
  1067. }