FeeRuleSchemeServiceImpl.java 187 KB

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