FeeRuleSchemeServiceImpl.java 175 KB

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