FeeRuleSchemeServiceImpl.java 65 KB

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