FeeRuleSchemeServiceImpl.java 170 KB

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