InsFeeAuditServiceImpl.java 59 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002
  1. package com.ydtech.modules.fnc.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.ydtech.constants.enums.dict.ins.InsFeeAuditDistributionStatusEnum;
  5. import com.ydtech.modules.admin.model.SysDept;
  6. import com.ydtech.modules.admin.model.SysDeptAccount;
  7. import com.ydtech.modules.admin.model.SysDeptAccountHistory;
  8. import com.ydtech.modules.admin.model.SysUser;
  9. import com.ydtech.modules.admin.model.po.SysUserAccount;
  10. import com.ydtech.modules.admin.service.*;
  11. import com.ydtech.modules.base.controller.BaseController;
  12. import com.ydtech.modules.esm.service.EsmUserReferrerService;
  13. import com.ydtech.modules.fnc.dao.FncInsAreaCompanyMapper;
  14. import com.ydtech.modules.fnc.dao.InsPlyIncomeMapper;
  15. import com.ydtech.modules.fnc.entity.InsFeeAudit;
  16. import com.ydtech.modules.fnc.dao.InsFeeAuditMapper;
  17. import com.ydtech.modules.fnc.entity.InsPlyIncome;
  18. import com.ydtech.modules.fnc.service.InsFeeAuditService;
  19. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  20. import com.ydtech.modules.ins.model.InsCommission;
  21. import com.ydtech.modules.ins.model.InsCompanyFee;
  22. import com.ydtech.modules.ins.model.InsDeptFee;
  23. import com.ydtech.modules.ins.service.InsCommissionService;
  24. import com.ydtech.modules.ins.service.InsCompanyFeeService;
  25. import com.ydtech.modules.ins.service.InsDeptFeeService;
  26. import com.ydtech.modules.order.dao.InsOrdersMapper;
  27. import com.ydtech.modules.fnc.entity.InsAreaCompany;
  28. import com.ydtech.modules.order.entity.InsFeeOrder;
  29. import com.ydtech.modules.order.entity.InsOrders;
  30. import com.ydtech.modules.order.service.InsFeeOrderService;
  31. import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
  32. import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
  33. import com.ydtech.utils.DateUtil;
  34. import com.ydtech.utils.StringUtils;
  35. import com.ydtech.utils.idgen.IdGenerate;
  36. import org.apache.commons.lang3.ObjectUtils;
  37. import org.springframework.beans.factory.annotation.Autowired;
  38. import org.springframework.stereotype.Service;
  39. import org.springframework.transaction.annotation.Transactional;
  40. import java.math.BigDecimal;
  41. import java.time.LocalDateTime;
  42. import java.util.ArrayList;
  43. import java.util.Date;
  44. import java.util.List;
  45. /**
  46. * <p>
  47. * 服务实现类
  48. * </p>
  49. *
  50. * @author gws
  51. * @since 2023-11-22
  52. */
  53. @Service
  54. public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFeeAudit> implements InsFeeAuditService {
  55. private final InsOrdersMapper insOrdersMapper;
  56. private final InsPlyIncomeMapper insPlyIncomeMapper;
  57. private final InsFeeOrderService insFeeOrderService;
  58. private final FncInsAreaCompanyMapper insAreaCompanyMapper;
  59. private final InsDeptFeeService insDeptFeeService;
  60. private final InsCommissionService insCommissionService;
  61. private final InsCompanyFeeService insCompanyFeeService;
  62. private final EsmUserReferrerService esmUserReferrerService;
  63. private final SysUserService sysUserService;
  64. @Autowired
  65. private InsFeeOrderNewService insFeeOrderNewService;
  66. @Autowired
  67. private SysUserAccountService sysUserAccountService;
  68. @Autowired
  69. private SysDeptService sysDeptService;
  70. @Autowired
  71. private SysDeptAccountService sysDeptAccountService;
  72. @Autowired
  73. private SysDeptAccountHistoryService sysDeptAccountHistoryService;
  74. public InsFeeAuditServiceImpl(FncInsAreaCompanyMapper insAreaCompanyMapper, InsOrdersMapper insOrdersMapper, InsFeeOrderService insFeeOrderService,InsDeptFeeService insDeptFeeService,EsmUserReferrerService esmUserReferrerService,SysUserService sysUserService,InsCommissionService insCommissionService,InsCompanyFeeService insCompanyFeeService,InsPlyIncomeMapper insPlyIncomeMapper) {
  75. this.insAreaCompanyMapper = insAreaCompanyMapper;
  76. this.insOrdersMapper = insOrdersMapper;
  77. this.insFeeOrderService=insFeeOrderService;
  78. this.insDeptFeeService=insDeptFeeService;
  79. this.esmUserReferrerService=esmUserReferrerService;
  80. this.sysUserService=sysUserService;
  81. this.insCommissionService=insCommissionService;
  82. this.insCompanyFeeService=insCompanyFeeService;
  83. this.insPlyIncomeMapper=insPlyIncomeMapper;
  84. }
  85. @Override
  86. @Transactional
  87. public void feeAudit(String orderNo, String insOrderNo) throws Exception{
  88. //保存审核表
  89. InsFeeAudit insFeeAudit=new InsFeeAudit();
  90. insFeeAudit.setOrderno(orderNo);
  91. insFeeAudit.setInsOrderNo(insOrderNo);
  92. insFeeAudit.setAuditstatus("1");
  93. insFeeAudit.setAudittime(LocalDateTime.now());
  94. insFeeAudit.setAudituser(StpUtil.getLoginId().toString());
  95. this.save(insFeeAudit);
  96. InsOrders order=insOrdersMapper.selectById(orderNo);
  97. InsFeeOrderNew insFeeOrder=insFeeOrderNewService.getInsFeeOrderNewByCompanyId(insFeeAudit.getInsOrderNo());
  98. InsAreaCompany insAreaCompany=insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo());
  99. //获取该订单的费用
  100. InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper<InsFeeOrderNew>()
  101. .eq(InsFeeOrderNew::getInsOrderNo, insFeeAudit.getInsOrderNo()));
  102. //获取操作人员的机构来源
  103. String deptId=order.getDeptid();
  104. List<SysDept> teamList = sysDeptService.findTeamList(deptId);
  105. teamList.forEach(sysDept -> {
  106. if(StringUtils.isNotEmpty(sysDept.getComlevel()) && sysDept.getComlevel().equals("1")){
  107. BigDecimal jqDeptPremiumsLevel1 = insFeeOrderNew.getJqDeptPremiumsLevel1();
  108. }
  109. });
  110. //bigdecimal为null时设置为0
  111. // handleBigdecimal(insFeeOrder);
  112. //生成保司费用(应收费用)
  113. gene_orderIncome( order, insFeeOrderNew,insAreaCompany);
  114. //生成机构费用
  115. gene_deptfee( order, insFeeOrderNew,insAreaCompany);
  116. //生成分销费用
  117. // saveRetail(order,insFeeOrderNew,insAreaCompany);
  118. //个代费用生成
  119. // saveInsCompanyFee(order,insFeeOrderNew,insAreaCompany);
  120. // 生成 用户账户表 数据
  121. if(StringUtils.isNotEmpty(order.getUserid())){
  122. // 用戶賬戶表
  123. SysUserAccount sysUserAccount = new SysUserAccount();
  124. sysUserAccount.setUserId(order.getUserid());
  125. if (ObjectUtils.isNotEmpty(insFeeOrderNew) ) {
  126. // 手续非佣金 = 交强监管费用 + 商业监管费用 + 非车监管费用
  127. // 非跟单费用 = 交强非跟单费用 + 商业非跟单费用 + 非车非跟单费用
  128. //手续费入口费用
  129. // BigDecimal jqPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getJqSuperviseCostsPremiums());//交强监管费
  130. // BigDecimal syPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getSySuperviseCostsPremiums());//商业监管费
  131. // BigDecimal noPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getNoSuperviseCostsPremiums());//非车监管费用
  132. // BigDecimal totalPremiumAmount = jqPremiumAmount.add(syPremiumAmount).add(noPremiumAmount); // 手续非佣金
  133. // //其他费用入口费用
  134. // BigDecimal jqOtherCostsPremiums =this.zeroBigdecimal(insFeeOrderNew.getJqOtherCostsPremiums());//交强其他费用
  135. // BigDecimal syOtherCostsPremiums =this.zeroBigdecimal(insFeeOrderNew.getSyOtherCostsPremiums()); //商业其他费用
  136. // BigDecimal noOtherCostsProportion = this.zeroBigdecimal(insFeeOrderNew.getNoOtherCostsPremiums());//非车其他费用
  137. // BigDecimal totalOtherPremiumAmount = jqOtherCostsPremiums.add(syOtherCostsPremiums).add(noOtherCostsProportion); //非跟单费用
  138. //总机构 交强管理比例
  139. BigDecimal sumJqDeptProportion = insFeeOrderNew.getJqDeptProportionLevel1()
  140. .add(insFeeOrderNew.getJqDeptProportionLevel2())
  141. .add(insFeeOrderNew.getJqDeptProportionLevel3())
  142. .add(insFeeOrderNew.getJqDeptProportionLevel4())
  143. .add(insFeeOrderNew.getJqDeptProportionLevel5());
  144. //总机构 商业管理比例
  145. BigDecimal sumSyDeptProportion = insFeeOrderNew.getSyDeptProportionLevel1()
  146. .add(insFeeOrderNew.getSyDeptProportionLevel2())
  147. .add(insFeeOrderNew.getSyDeptProportionLevel3())
  148. .add(insFeeOrderNew.getSyDeptProportionLevel4())
  149. .add(insFeeOrderNew.getSyDeptProportionLevel5());
  150. //总机构 非车管理比例
  151. BigDecimal sumNoDeptProportion = insFeeOrderNew.getNoDeptProportionLevel1()
  152. .add(insFeeOrderNew.getNoDeptProportionLevel2())
  153. .add(insFeeOrderNew.getNoDeptProportionLevel3())
  154. .add(insFeeOrderNew.getNoDeptProportionLevel4())
  155. .add(insFeeOrderNew.getNoDeptProportionLevel5());
  156. //总分销比例
  157. BigDecimal sumRetail = insFeeOrderNew.getFirstDetailProportion().add(insFeeOrderNew.getSecondDetailProportion()).add(insFeeOrderNew.getThirdDetailProportion());
  158. //交强出口比例
  159. BigDecimal jqExportProceduresProportion = new BigDecimal(0);
  160. if(insFeeOrderNew.getJqCostsProportion().compareTo(sumJqDeptProportion.add(sumRetail))>0){
  161. jqExportProceduresProportion = insFeeOrderNew.getJqCostsProportion().subtract(sumJqDeptProportion).subtract(sumRetail);
  162. }
  163. //商业出口比例
  164. BigDecimal syExportProceduresProportion = new BigDecimal(0);
  165. if(insFeeOrderNew.getSyCostsProportion().compareTo(sumSyDeptProportion.add(sumRetail))>0){
  166. syExportProceduresProportion = insFeeOrderNew.getSyCostsProportion().subtract(sumSyDeptProportion).subtract(sumRetail);
  167. }
  168. //非车出口比例
  169. BigDecimal noExportProceduresProportion = new BigDecimal(0);
  170. if(insFeeOrderNew.getNoCostsProportion().compareTo(sumNoDeptProportion.add(sumRetail))>0){
  171. noExportProceduresProportion = insFeeOrderNew.getNoCostsProportion().subtract(sumNoDeptProportion).subtract(sumRetail);
  172. }
  173. //交强手续费出口比例
  174. BigDecimal jqExportProceduresFee = insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqSuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
  175. //交强跟单出口费用
  176. BigDecimal jqExportOtherFee = insFeeOrderNew.getJqPremium()
  177. .multiply(jqExportProceduresProportion
  178. .subtract(insFeeOrderNew.getJqSuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
  179. //商业手续费出口比例
  180. BigDecimal syExportProceduresFee = insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSySuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
  181. //商业跟单出口比例
  182. BigDecimal syExportOtherFee = insFeeOrderNew.getSyPremium()
  183. .multiply(syExportProceduresProportion
  184. .subtract(insFeeOrderNew.getSySuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
  185. //非车手续费出口比例
  186. BigDecimal noExportProceduresFee = insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoSuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
  187. //非车跟单出口比例
  188. BigDecimal noExportOtherFee = insFeeOrderNew.getNoPremium()
  189. .multiply(noExportProceduresProportion
  190. .subtract(insFeeOrderNew.getNoSuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
  191. //用户出口手续费
  192. BigDecimal totalPremiumAmount = new BigDecimal(0);
  193. totalPremiumAmount = totalPremiumAmount.add(jqExportProceduresFee).add(syExportProceduresFee).add(noExportProceduresFee);
  194. //用户出口跟单费
  195. BigDecimal totalOtherPremiumAmount = new BigDecimal(0);
  196. totalOtherPremiumAmount = totalOtherPremiumAmount.add(jqExportOtherFee).add(syExportOtherFee).add(noExportOtherFee);
  197. // 用戶
  198. sysUserAccount.setHandlingFee(totalPremiumAmount);
  199. sysUserAccount.setDocumentary(totalOtherPremiumAmount);
  200. // 算佣金
  201. this.countUserAmount(insFeeOrderNew,orderNo);
  202. sysUserAccount.setDocumentaryStatus("2"); // 收入
  203. sysUserAccount.setSuborderId(orderNo); // 订单Id
  204. sysUserAccountService.addOrUpdate(sysUserAccount);
  205. String deptid = insFeeOrderNew.getDeptId();
  206. String distributionStatus = insFeeOrderNew.getDistributionStatus();
  207. // 定义一个数组来存储各级机构的管理费
  208. BigDecimal[] jqDeptPremiumsLevels = {insFeeOrderNew.getJqDeptPremiumsLevel1(), insFeeOrderNew.getJqDeptPremiumsLevel2(),
  209. insFeeOrderNew.getJqDeptPremiumsLevel3(), insFeeOrderNew.getJqDeptPremiumsLevel4(),
  210. insFeeOrderNew.getJqDeptPremiumsLevel5()};
  211. BigDecimal[] syDeptPremiumsLevels = {insFeeOrderNew.getSyDeptPremiumsLevel1(), insFeeOrderNew.getSyDeptPremiumsLevel2(),
  212. insFeeOrderNew.getSyDeptPremiumsLevel3(), insFeeOrderNew.getSyDeptPremiumsLevel4(),
  213. insFeeOrderNew.getSyDeptPremiumsLevel5()};
  214. BigDecimal[] noDeptPremiumsLevels = {insFeeOrderNew.getNoDeptPremiumsLevel1(), insFeeOrderNew.getNoDeptPremiumsLevel2(),
  215. insFeeOrderNew.getNoDeptPremiumsLevel3(), insFeeOrderNew.getNoDeptPremiumsLevel4(),
  216. insFeeOrderNew.getNoDeptPremiumsLevel5()};
  217. for (int i = 1; i <= 5; i++) {
  218. // 根据循环次数确定机构ID的长度,第五级为11
  219. String levelDeptId = deptid.substring(0, (i == 5) ? 11 : i * 2);
  220. // 获取对应级别的机构信息
  221. SysDeptAccount levelSysDeptAccount = sysDeptAccountService.getOne(new LambdaQueryWrapper<SysDeptAccount>()
  222. .eq(SysDeptAccount::getDeptId, levelDeptId));
  223. // 初始化管理费总额为0
  224. BigDecimal sumManagementFee = BigDecimal.ZERO;
  225. // 根据分销等级和分销用户情况计算分销费用
  226. BigDecimal distributionFee = BigDecimal.ZERO;
  227. if (i == 5) {
  228. if (InsFeeAuditDistributionStatusEnum.DS_2.getCode().equals(distributionStatus) && insFeeOrderNew.getTwoLevelUserId() == null) {
  229. distributionFee = insFeeOrderNew.getSecondDetailPremiums();
  230. } else if (InsFeeAuditDistributionStatusEnum.DS_3.getCode().equals(distributionStatus) && insFeeOrderNew.getThreeLevelUserId() == null) {
  231. distributionFee = insFeeOrderNew.getThirdDetailPremiums();
  232. }
  233. }
  234. // 根据分销等级计算管理费总额
  235. if (i == 5) {
  236. sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
  237. .add(syDeptPremiumsLevels[i - 1])
  238. .add(noDeptPremiumsLevels[i - 1])
  239. .add(distributionFee);
  240. } else {
  241. sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
  242. .add(syDeptPremiumsLevels[i - 1])
  243. .add(noDeptPremiumsLevels[i - 1]);
  244. }
  245. // 如果机构信息不为空,更新管理费并记录历史
  246. if (levelSysDeptAccount != null) {
  247. levelSysDeptAccount.setManagementFee(levelSysDeptAccount.getManagementFee().add(sumManagementFee));
  248. sysDeptAccountService.updateById(levelSysDeptAccount);
  249. // 记录历史信息
  250. SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory();
  251. sysDeptAccountHistory.setId(IdGenerate.nextId());
  252. sysDeptAccountHistory.setDeptId(levelDeptId);
  253. sysDeptAccountHistory.setAmount(sumManagementFee);
  254. sysDeptAccountHistory.setSurplusAmount(levelSysDeptAccount.getManagementFee());
  255. sysDeptAccountHistory.setDocumentary("2"); //收入
  256. sysDeptAccountHistory.setSuborder(orderNo);
  257. sysDeptAccountHistory.setFromBankCard(null);
  258. sysDeptAccountHistory.setToBankCard(null);
  259. sysDeptAccountHistory.setUserId(BaseController.getUser().getId());
  260. sysDeptAccountHistory.setCreateTime(new Date());
  261. sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] +
  262. ",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] +
  263. ",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] +
  264. ",分销费:" + distributionFee);
  265. sysDeptAccountHistoryService.save(sysDeptAccountHistory);
  266. } else {
  267. // 如果机构信息为空,新建机构信息并记录历史
  268. SysDeptAccount sysDeptAccount = new SysDeptAccount();
  269. sysDeptAccount.setDeptId(levelDeptId);
  270. sysDeptAccount.setManagementFee(sumManagementFee);
  271. sysDeptAccount.setCreateTime(new Date());
  272. sysDeptAccountService.save(sysDeptAccount);
  273. // 记录历史信息
  274. SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory();
  275. sysDeptAccountHistory.setId(IdGenerate.nextId());
  276. sysDeptAccountHistory.setDeptId(levelDeptId);
  277. sysDeptAccountHistory.setAmount(sumManagementFee);
  278. sysDeptAccountHistory.setSurplusAmount(sumManagementFee);
  279. sysDeptAccountHistory.setDocumentary("2"); //收入
  280. sysDeptAccountHistory.setSuborder(orderNo);
  281. sysDeptAccountHistory.setFromBankCard(null);
  282. sysDeptAccountHistory.setToBankCard(null);
  283. sysDeptAccountHistory.setUserId(BaseController.getUser().getId());
  284. sysDeptAccountHistory.setCreateTime(new Date());
  285. sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] +
  286. ",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] +
  287. ",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] +
  288. ",分销费:" + distributionFee);
  289. sysDeptAccountHistoryService.save(sysDeptAccountHistory);
  290. }
  291. }
  292. }
  293. }
  294. }
  295. @Override
  296. public boolean autoFeeAudit(String orderNo, String insOrderNo) throws Exception {
  297. //保存审核表
  298. InsFeeAudit insFeeAudit=new InsFeeAudit();
  299. insFeeAudit.setOrderno(orderNo);
  300. insFeeAudit.setInsOrderNo(insOrderNo);
  301. insFeeAudit.setAuditstatus("1");
  302. insFeeAudit.setAudittime(LocalDateTime.now());
  303. insFeeAudit.setAudituser("自动审核");
  304. this.save(insFeeAudit);
  305. InsOrders order=insOrdersMapper.selectById(orderNo);
  306. InsFeeOrderNew insFeeOrder=insFeeOrderNewService.getInsFeeOrderNewByCompanyId(insFeeAudit.getInsOrderNo());
  307. InsAreaCompany insAreaCompany=insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo());
  308. //获取该订单的费用
  309. InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper<InsFeeOrderNew>()
  310. .eq(InsFeeOrderNew::getInsOrderNo, insFeeAudit.getInsOrderNo()));
  311. //获取操作人员的机构来源
  312. String deptId=order.getDeptid();
  313. List<SysDept> teamList = sysDeptService.findTeamList(deptId);
  314. teamList.forEach(sysDept -> {
  315. if(StringUtils.isNotEmpty(sysDept.getComlevel()) && sysDept.getComlevel().equals("1")){
  316. BigDecimal jqDeptPremiumsLevel1 = insFeeOrderNew.getJqDeptPremiumsLevel1();
  317. }
  318. });
  319. //bigdecimal为null时设置为0
  320. // handleBigdecimal(insFeeOrder);
  321. //生成保司费用(应收费用)
  322. gene_orderIncome( order, insFeeOrderNew,insAreaCompany);
  323. //生成机构费用
  324. gene_deptfee( order, insFeeOrderNew,insAreaCompany);
  325. //生成分销费用
  326. // saveRetail(order,insFeeOrderNew,insAreaCompany);
  327. //个代费用生成
  328. // saveInsCompanyFee(order,insFeeOrderNew,insAreaCompany);
  329. // 生成 用户账户表 数据
  330. if(StringUtils.isNotEmpty(order.getUserid())){
  331. // 用戶賬戶表
  332. SysUserAccount sysUserAccount = new SysUserAccount();
  333. sysUserAccount.setUserId(order.getUserid());
  334. if (ObjectUtils.isNotEmpty(insFeeOrderNew) ) {
  335. // 手续非佣金 = 交强监管费用 + 商业监管费用 + 非车监管费用
  336. // 非跟单费用 = 交强非跟单费用 + 商业非跟单费用 + 非车非跟单费用
  337. //手续费入口费用
  338. // BigDecimal jqPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getJqSuperviseCostsPremiums());//交强监管费
  339. // BigDecimal syPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getSySuperviseCostsPremiums());//商业监管费
  340. // BigDecimal noPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getNoSuperviseCostsPremiums());//非车监管费用
  341. // BigDecimal totalPremiumAmount = jqPremiumAmount.add(syPremiumAmount).add(noPremiumAmount); // 手续非佣金
  342. // //其他费用入口费用
  343. // BigDecimal jqOtherCostsPremiums =this.zeroBigdecimal(insFeeOrderNew.getJqOtherCostsPremiums());//交强其他费用
  344. // BigDecimal syOtherCostsPremiums =this.zeroBigdecimal(insFeeOrderNew.getSyOtherCostsPremiums()); //商业其他费用
  345. // BigDecimal noOtherCostsProportion = this.zeroBigdecimal(insFeeOrderNew.getNoOtherCostsPremiums());//非车其他费用
  346. // BigDecimal totalOtherPremiumAmount = jqOtherCostsPremiums.add(syOtherCostsPremiums).add(noOtherCostsProportion); //非跟单费用
  347. //总机构 交强管理比例
  348. BigDecimal sumJqDeptProportion = insFeeOrderNew.getJqDeptProportionLevel1()
  349. .add(insFeeOrderNew.getJqDeptProportionLevel2())
  350. .add(insFeeOrderNew.getJqDeptProportionLevel3())
  351. .add(insFeeOrderNew.getJqDeptProportionLevel4())
  352. .add(insFeeOrderNew.getJqDeptProportionLevel5());
  353. //总机构 商业管理比例
  354. BigDecimal sumSyDeptProportion = insFeeOrderNew.getSyDeptProportionLevel1()
  355. .add(insFeeOrderNew.getSyDeptProportionLevel2())
  356. .add(insFeeOrderNew.getSyDeptProportionLevel3())
  357. .add(insFeeOrderNew.getSyDeptProportionLevel4())
  358. .add(insFeeOrderNew.getSyDeptProportionLevel5());
  359. //总机构 非车管理比例
  360. BigDecimal sumNoDeptProportion = insFeeOrderNew.getNoDeptProportionLevel1()
  361. .add(insFeeOrderNew.getNoDeptProportionLevel2())
  362. .add(insFeeOrderNew.getNoDeptProportionLevel3())
  363. .add(insFeeOrderNew.getNoDeptProportionLevel4())
  364. .add(insFeeOrderNew.getNoDeptProportionLevel5());
  365. //总分销比例
  366. BigDecimal sumRetail = insFeeOrderNew.getFirstDetailProportion().add(insFeeOrderNew.getSecondDetailProportion()).add(insFeeOrderNew.getThirdDetailProportion());
  367. //交强出口比例
  368. BigDecimal jqExportProceduresProportion = new BigDecimal(0);
  369. if(insFeeOrderNew.getJqCostsProportion().compareTo(sumJqDeptProportion.add(sumRetail))>0){
  370. jqExportProceduresProportion = insFeeOrderNew.getJqCostsProportion().subtract(sumJqDeptProportion).subtract(sumRetail);
  371. }
  372. //商业出口比例
  373. BigDecimal syExportProceduresProportion = new BigDecimal(0);
  374. if(insFeeOrderNew.getSyCostsProportion().compareTo(sumSyDeptProportion.add(sumRetail))>0){
  375. syExportProceduresProportion = insFeeOrderNew.getSyCostsProportion().subtract(sumSyDeptProportion).subtract(sumRetail);
  376. }
  377. //非车出口比例
  378. BigDecimal noExportProceduresProportion = new BigDecimal(0);
  379. if(insFeeOrderNew.getNoCostsProportion().compareTo(sumNoDeptProportion.add(sumRetail))>0){
  380. noExportProceduresProportion = insFeeOrderNew.getNoCostsProportion().subtract(sumNoDeptProportion).subtract(sumRetail);
  381. }
  382. //交强手续费出口比例
  383. BigDecimal jqExportProceduresFee = insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqSuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
  384. //交强跟单出口费用
  385. BigDecimal jqExportOtherFee = insFeeOrderNew.getJqPremium()
  386. .multiply(jqExportProceduresProportion
  387. .subtract(insFeeOrderNew.getJqSuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
  388. //商业手续费出口比例
  389. BigDecimal syExportProceduresFee = insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSySuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
  390. //商业跟单出口比例
  391. BigDecimal syExportOtherFee = insFeeOrderNew.getSyPremium()
  392. .multiply(syExportProceduresProportion
  393. .subtract(insFeeOrderNew.getSySuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
  394. //非车手续费出口比例
  395. BigDecimal noExportProceduresFee = insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoSuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
  396. //非车跟单出口比例
  397. BigDecimal noExportOtherFee = insFeeOrderNew.getNoPremium()
  398. .multiply(noExportProceduresProportion
  399. .subtract(insFeeOrderNew.getNoSuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
  400. //用户出口手续费
  401. BigDecimal totalPremiumAmount = new BigDecimal(0);
  402. totalPremiumAmount = totalPremiumAmount.add(jqExportProceduresFee).add(syExportProceduresFee).add(noExportProceduresFee);
  403. //用户出口跟单费
  404. BigDecimal totalOtherPremiumAmount = new BigDecimal(0);
  405. totalOtherPremiumAmount = totalOtherPremiumAmount.add(jqExportOtherFee).add(syExportOtherFee).add(noExportOtherFee);
  406. // 用戶
  407. sysUserAccount.setHandlingFee(totalPremiumAmount);
  408. sysUserAccount.setDocumentary(totalOtherPremiumAmount);
  409. // 算佣金
  410. this.countUserAmount(insFeeOrderNew,orderNo);
  411. sysUserAccount.setDocumentaryStatus("2"); // 收入
  412. sysUserAccount.setSuborderId(orderNo); // 订单Id
  413. sysUserAccountService.addOrUpdate(sysUserAccount);
  414. String deptid = insFeeOrderNew.getDeptId();
  415. String distributionStatus = insFeeOrderNew.getDistributionStatus();
  416. // 定义一个数组来存储各级机构的管理费
  417. BigDecimal[] jqDeptPremiumsLevels = {insFeeOrderNew.getJqDeptPremiumsLevel1(), insFeeOrderNew.getJqDeptPremiumsLevel2(),
  418. insFeeOrderNew.getJqDeptPremiumsLevel3(), insFeeOrderNew.getJqDeptPremiumsLevel4(),
  419. insFeeOrderNew.getJqDeptPremiumsLevel5()};
  420. BigDecimal[] syDeptPremiumsLevels = {insFeeOrderNew.getSyDeptPremiumsLevel1(), insFeeOrderNew.getSyDeptPremiumsLevel2(),
  421. insFeeOrderNew.getSyDeptPremiumsLevel3(), insFeeOrderNew.getSyDeptPremiumsLevel4(),
  422. insFeeOrderNew.getSyDeptPremiumsLevel5()};
  423. BigDecimal[] noDeptPremiumsLevels = {insFeeOrderNew.getNoDeptPremiumsLevel1(), insFeeOrderNew.getNoDeptPremiumsLevel2(),
  424. insFeeOrderNew.getNoDeptPremiumsLevel3(), insFeeOrderNew.getNoDeptPremiumsLevel4(),
  425. insFeeOrderNew.getNoDeptPremiumsLevel5()};
  426. for (int i = 1; i <= 5; i++) {
  427. // 根据循环次数确定机构ID的长度,第五级为11
  428. String levelDeptId = deptid.substring(0, (i == 5) ? 11 : i * 2);
  429. // 获取对应级别的机构信息
  430. SysDeptAccount levelSysDeptAccount = sysDeptAccountService.getOne(new LambdaQueryWrapper<SysDeptAccount>()
  431. .eq(SysDeptAccount::getDeptId, levelDeptId));
  432. // 初始化管理费总额为0
  433. BigDecimal sumManagementFee = BigDecimal.ZERO;
  434. // 根据分销等级和分销用户情况计算分销费用
  435. BigDecimal distributionFee = BigDecimal.ZERO;
  436. if (i == 5) {
  437. if (InsFeeAuditDistributionStatusEnum.DS_2.getCode().equals(distributionStatus) && insFeeOrderNew.getTwoLevelUserId() == null) {
  438. distributionFee = insFeeOrderNew.getSecondDetailPremiums();
  439. } else if (InsFeeAuditDistributionStatusEnum.DS_3.getCode().equals(distributionStatus) && insFeeOrderNew.getThreeLevelUserId() == null) {
  440. distributionFee = insFeeOrderNew.getThirdDetailPremiums();
  441. }
  442. }
  443. // 根据分销等级计算管理费总额
  444. if (i == 5) {
  445. sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
  446. .add(syDeptPremiumsLevels[i - 1])
  447. .add(noDeptPremiumsLevels[i - 1])
  448. .add(distributionFee);
  449. } else {
  450. sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
  451. .add(syDeptPremiumsLevels[i - 1])
  452. .add(noDeptPremiumsLevels[i - 1]);
  453. }
  454. // 如果机构信息不为空,更新管理费并记录历史
  455. if (levelSysDeptAccount != null) {
  456. levelSysDeptAccount.setManagementFee(levelSysDeptAccount.getManagementFee().add(sumManagementFee));
  457. sysDeptAccountService.updateById(levelSysDeptAccount);
  458. // 记录历史信息
  459. SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory();
  460. sysDeptAccountHistory.setId(IdGenerate.nextId());
  461. sysDeptAccountHistory.setDeptId(levelDeptId);
  462. sysDeptAccountHistory.setAmount(sumManagementFee);
  463. sysDeptAccountHistory.setSurplusAmount(levelSysDeptAccount.getManagementFee());
  464. sysDeptAccountHistory.setDocumentary("2"); //收入
  465. sysDeptAccountHistory.setSuborder(orderNo);
  466. sysDeptAccountHistory.setFromBankCard(null);
  467. sysDeptAccountHistory.setToBankCard(null);
  468. sysDeptAccountHistory.setUserId(BaseController.getUser().getId());
  469. sysDeptAccountHistory.setCreateTime(new Date());
  470. sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] +
  471. ",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] +
  472. ",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] +
  473. ",分销费:" + distributionFee);
  474. sysDeptAccountHistoryService.save(sysDeptAccountHistory);
  475. } else {
  476. // 如果机构信息为空,新建机构信息并记录历史
  477. SysDeptAccount sysDeptAccount = new SysDeptAccount();
  478. sysDeptAccount.setDeptId(levelDeptId);
  479. sysDeptAccount.setManagementFee(sumManagementFee);
  480. sysDeptAccount.setCreateTime(new Date());
  481. sysDeptAccountService.save(sysDeptAccount);
  482. // 记录历史信息
  483. SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory();
  484. sysDeptAccountHistory.setId(IdGenerate.nextId());
  485. sysDeptAccountHistory.setDeptId(levelDeptId);
  486. sysDeptAccountHistory.setAmount(sumManagementFee);
  487. sysDeptAccountHistory.setSurplusAmount(sumManagementFee);
  488. sysDeptAccountHistory.setDocumentary("2"); //收入
  489. sysDeptAccountHistory.setSuborder(orderNo);
  490. sysDeptAccountHistory.setFromBankCard(null);
  491. sysDeptAccountHistory.setToBankCard(null);
  492. sysDeptAccountHistory.setUserId(BaseController.getUser().getId());
  493. sysDeptAccountHistory.setCreateTime(new Date());
  494. sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] +
  495. ",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] +
  496. ",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] +
  497. ",分销费:" + distributionFee);
  498. sysDeptAccountHistoryService.save(sysDeptAccountHistory);
  499. }
  500. }
  501. }
  502. }
  503. return true;
  504. }
  505. private void countUserAmount(InsFeeOrderNew insFeeOrderNew ,String orderNo) {
  506. String distributionStatus = insFeeOrderNew.getDistributionStatus();
  507. if(StringUtils.isNotEmpty(distributionStatus)){
  508. if(InsFeeAuditDistributionStatusEnum.DS_3.getCode().equals(distributionStatus)){
  509. BigDecimal totalDept = BigDecimal.ZERO;
  510. if(StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())){
  511. String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
  512. BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
  513. this.saveUpdateAccount(firstLevelUserId,firstDetailPremiums,orderNo);
  514. }else {
  515. totalDept = totalDept.add(insFeeOrderNew.getFirstDetailPremiums());
  516. }
  517. if(StringUtils.isNotEmpty(insFeeOrderNew.getTwoLevelUserId())){
  518. String twoLevelUserId = insFeeOrderNew.getTwoLevelUserId();
  519. BigDecimal secondDetailProportion = insFeeOrderNew.getSecondDetailPremiums();
  520. this.saveUpdateAccount(twoLevelUserId,secondDetailProportion,orderNo);
  521. }else {
  522. totalDept =totalDept.add(insFeeOrderNew.getSecondDetailPremiums());
  523. }
  524. if(StringUtils.isNotEmpty(insFeeOrderNew.getThreeLevelUserId())){
  525. String threeLevelUserId = insFeeOrderNew.getThreeLevelUserId();
  526. BigDecimal threeDetailPremiums = insFeeOrderNew.getThirdDetailPremiums();
  527. this.saveUpdateAccount(threeLevelUserId,threeDetailPremiums,orderNo);
  528. }else {
  529. totalDept =totalDept.add(insFeeOrderNew.getThirdDetailPremiums());
  530. }
  531. // 机构管理 费用给五级交钱机构管理费
  532. if(totalDept.compareTo(BigDecimal.ZERO) ==0){
  533. BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
  534. jqDeptPremiumsLevel5.add(totalDept);
  535. insFeeOrderNewService.updateById(insFeeOrderNew);
  536. }
  537. } else if (InsFeeAuditDistributionStatusEnum.DS_2.getCode().equals(distributionStatus)) {
  538. BigDecimal totalDept = BigDecimal.ZERO;
  539. if(StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())){
  540. String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
  541. BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
  542. this.saveUpdateAccount(firstLevelUserId,firstDetailPremiums,orderNo);
  543. }else {
  544. totalDept = totalDept.add(insFeeOrderNew.getFirstDetailPremiums());
  545. }
  546. if(StringUtils.isNotEmpty(insFeeOrderNew.getTwoLevelUserId())){
  547. String twoLevelUserId = insFeeOrderNew.getTwoLevelUserId();
  548. BigDecimal secondDetailProportion = insFeeOrderNew.getSecondDetailPremiums();
  549. this.saveUpdateAccount(twoLevelUserId,secondDetailProportion,orderNo);
  550. }else {
  551. totalDept =totalDept.add(insFeeOrderNew.getSecondDetailPremiums());
  552. }
  553. // 机构管理 费用给五级交钱机构管理费
  554. if(totalDept.compareTo(BigDecimal.ZERO) ==0){
  555. BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
  556. jqDeptPremiumsLevel5.add(totalDept);
  557. insFeeOrderNewService.updateById(insFeeOrderNew);
  558. }
  559. }else {
  560. // 一级分销
  561. if(StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())){
  562. String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
  563. BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
  564. this.saveUpdateAccount(firstLevelUserId,firstDetailPremiums,orderNo);
  565. }else {
  566. if(insFeeOrderNew.getFirstDetailPremiums().compareTo(BigDecimal.ZERO) ==0){
  567. BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
  568. jqDeptPremiumsLevel5.add(insFeeOrderNew.getFirstDetailPremiums());
  569. insFeeOrderNewService.updateById(insFeeOrderNew);
  570. }
  571. }
  572. }
  573. }
  574. }
  575. private void saveUpdateAccount(String userId, BigDecimal amount, String orderNo) {
  576. SysUserAccount sysUserAccount = new SysUserAccount();
  577. sysUserAccount.setUserId(userId);
  578. sysUserAccount.setPromotion(amount);
  579. sysUserAccount.setDocumentaryStatus("2"); // 收入
  580. sysUserAccount.setSuborderId(orderNo);
  581. sysUserAccountService.addOrUpdate(sysUserAccount);
  582. }
  583. private BigDecimal zeroBigdecimal(BigDecimal amount) {
  584. if (amount == null) {
  585. return amount = BigDecimal.ZERO;
  586. } else {
  587. return amount;
  588. }
  589. }
  590. /**
  591. * 生成保司费用(应收费用)
  592. * @param order
  593. * @param insFeeOrder
  594. * @throws Exception
  595. */
  596. private void gene_orderIncome( InsOrders order, InsFeeOrderNew insFeeOrder,InsAreaCompany plyDto) throws Exception{
  597. InsPlyIncome insPlyIncome =new InsPlyIncome();
  598. insPlyIncome.setOrderno(order.getOrderno());
  599. insPlyIncome.setDeptId(order.getDeptid());
  600. insPlyIncome.setCompanyId(plyDto.getCompanyId());
  601. insPlyIncome.setAgreementId(String.valueOf(plyDto.getAgreementId()));
  602. insPlyIncome.setLicenseno(order.getLicenseno());
  603. insPlyIncome.setPayDate(StringUtils.isNullOrEmpty(plyDto.getPayDate())?plyDto.getCreatetime():plyDto.getPayDate());
  604. insPlyIncome.setSignDate(StringUtils.isNullOrEmpty(plyDto.getInsidePayTime())?plyDto.getPayDate():plyDto.getInsidePayTime());
  605. insPlyIncome.setCreateTime(LocalDateTime.now() );
  606. if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
  607. insPlyIncome.setPolicyno(plyDto.getJqpolicyno());
  608. insPlyIncome.setRiskcode("交强");
  609. insPlyIncome.setTaxamount(plyDto.getTaxamount());
  610. if(!ObjectUtils.isEmpty(insFeeOrder)){
  611. insPlyIncome.setNoTaxPremium(insFeeOrder.getJqNoTaxPremium());
  612. insPlyIncome.setCommissionFeerate(insFeeOrder.getJqSuperviseCostsProportion());
  613. insPlyIncome.setOtherFeerate(insFeeOrder.getJqCostsProportion().subtract(insFeeOrder.getJqSuperviseCostsProportion()));
  614. insPlyIncome.setCommissionFeevalue(insFeeOrder.getJqSuperviseCostsPremiums());
  615. insPlyIncome.setOtherFeevalue(insFeeOrder.getJqCostsPremiums().subtract(insFeeOrder.getJqSuperviseCostsPremiums()));
  616. insPlyIncome.setAllFeeValue(insFeeOrder.getJqCostsPremiums());
  617. }
  618. insPlyIncomeMapper.insert(insPlyIncome);
  619. }
  620. if(StringUtils.isNotEmpty(plyDto.getSypolicyno())){
  621. insPlyIncome.setPolicyno(plyDto.getSypolicyno());
  622. insPlyIncome.setRiskcode("商业");
  623. insPlyIncome.setTaxamount(new BigDecimal(0));
  624. if(!ObjectUtils.isEmpty(insFeeOrder)){
  625. insPlyIncome.setNoTaxPremium(insFeeOrder.getSyNoTaxPremium());
  626. insPlyIncome.setCommissionFeerate(insFeeOrder.getSySuperviseCostsProportion());
  627. insPlyIncome.setOtherFeerate(insFeeOrder.getSyCostsProportion().subtract(insFeeOrder.getSySuperviseCostsProportion()));
  628. insPlyIncome.setCommissionFeevalue(insFeeOrder.getSySuperviseCostsPremiums());
  629. insPlyIncome.setOtherFeevalue(insFeeOrder.getSyCostsPremiums().subtract(insFeeOrder.getSySuperviseCostsPremiums()));
  630. insPlyIncome.setAllFeeValue(insFeeOrder.getSyCostsPremiums());
  631. }
  632. insPlyIncomeMapper.insert(insPlyIncome);
  633. }
  634. }
  635. /**
  636. * 生成机构费用
  637. * @param order
  638. * @param insFeeOrder
  639. * @throws Exception
  640. */
  641. private void gene_deptfee( InsOrders order, InsFeeOrderNew insFeeOrder,InsAreaCompany plyDto) throws Exception{
  642. InsDeptFee deptFee = new InsDeptFee();
  643. deptFee.setOrderno(order.getOrderno());
  644. if(!ObjectUtils.isEmpty(insFeeOrder)){
  645. deptFee.setQuoteno(insFeeOrder.getInsOrderNo());
  646. }
  647. deptFee.setAgreeid(String.valueOf(plyDto.getAgreementId()));
  648. deptFee.setAuditstatus("1");
  649. deptFee.setSettlestatus("0");
  650. if(plyDto.getInsidePayTime()!=null){
  651. deptFee.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  652. }
  653. deptFee.setInscompany(plyDto.getCompanyId());
  654. if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
  655. deptFee.setPolicyno(plyDto.getJqpolicyno());
  656. deptFee.setRiskcode("交强");
  657. deptFee.setLicenseno(order.getLicenseno());
  658. geneJqInsDeptFee(order, insFeeOrder, deptFee);
  659. }
  660. if(StringUtils.isNotEmpty(plyDto.getSypolicyno())){
  661. deptFee.setPolicyno(plyDto.getSypolicyno());
  662. deptFee.setRiskcode("商业");
  663. deptFee.setLicenseno(order.getLicenseno());
  664. geneSyInsDeptFee(order, insFeeOrder, deptFee);
  665. }
  666. }
  667. private void geneJqInsDeptFee(InsOrders order, InsFeeOrderNew insFeeOrder, InsDeptFee deptFee) {
  668. if(!ObjectUtils.isEmpty(insFeeOrder)){
  669. if (insFeeOrder.getJqDeptPremiumsLevel1().doubleValue() > 0) {
  670. deptFee.setComcode(order.getDeptid().substring(0, 2)); //99140302M01D01
  671. deptFee.setComlevel("一级");
  672. insDeptFeeService.insert(deptFee);
  673. }
  674. if (insFeeOrder.getJqDeptPremiumsLevel2().doubleValue() > 0) {
  675. deptFee.setComcode(order.getDeptid().substring(0, 4)); //99140302M01D01
  676. deptFee.setComlevel("二级");
  677. insDeptFeeService.insert(deptFee);
  678. }
  679. if (insFeeOrder.getJqDeptPremiumsLevel3().doubleValue() > 0) {
  680. deptFee.setComcode(order.getDeptid().substring(0, 6)); //99140302M01D01
  681. deptFee.setComlevel("三级");
  682. insDeptFeeService.insert(deptFee);
  683. }
  684. if (insFeeOrder.getJqDeptPremiumsLevel4().doubleValue() > 0) {
  685. deptFee.setComcode(order.getDeptid().substring(0, 8)); //99140302M01D01
  686. deptFee.setComlevel("四级");
  687. insDeptFeeService.insert(deptFee);
  688. }
  689. if (insFeeOrder.getJqDeptPremiumsLevel5().doubleValue() > 0) {
  690. deptFee.setComcode(order.getDeptid().substring(0, 11)); //99140302M01D01
  691. deptFee.setComlevel("五级");
  692. insDeptFeeService.insert(deptFee);
  693. }
  694. }
  695. }
  696. private void geneSyInsDeptFee(InsOrders order, InsFeeOrderNew insFeeOrder, InsDeptFee deptFee) {
  697. if(!ObjectUtils.isEmpty(insFeeOrder)){
  698. if (insFeeOrder.getSyDeptPremiumsLevel1().doubleValue() > 0) {
  699. deptFee.setComcode(order.getDeptid().substring(0, 2)); //99140302M01D01
  700. deptFee.setComlevel("一级");
  701. insDeptFeeService.insert(deptFee);
  702. }
  703. if (insFeeOrder.getSyDeptPremiumsLevel2().doubleValue() > 0) {
  704. deptFee.setComcode(order.getDeptid().substring(0, 4)); //99140302M01D01
  705. deptFee.setComlevel("二级");
  706. insDeptFeeService.insert(deptFee);
  707. }
  708. if (insFeeOrder.getSyDeptPremiumsLevel3().doubleValue() > 0) {
  709. deptFee.setComcode(order.getDeptid().substring(0, 6)); //99140302M01D01
  710. deptFee.setComlevel("三级");
  711. insDeptFeeService.insert(deptFee);
  712. }
  713. if (insFeeOrder.getSyDeptPremiumsLevel4().doubleValue() > 0) {
  714. deptFee.setComcode(order.getDeptid().substring(0, 8)); //99140302M01D01
  715. deptFee.setComlevel("四级");
  716. insDeptFeeService.insert(deptFee);
  717. }
  718. if (insFeeOrder.getSyDeptPremiumsLevel5().doubleValue() > 0) {
  719. deptFee.setComcode(order.getDeptid().substring(0, 11)); //99140302M01D01
  720. deptFee.setComlevel("五级");
  721. insDeptFeeService.insert(deptFee);
  722. }
  723. }
  724. }
  725. /**
  726. * 三级分销费用保存
  727. *
  728. * @param order
  729. * @return
  730. */
  731. public void saveRetail(InsOrders order,InsFeeOrder insFeeOrder,InsAreaCompany plyDto) throws Exception{
  732. List<String> userlist=new ArrayList<>();
  733. esmUserReferrerService.getUpUser(order.getUserid(),userlist);
  734. //userlist:包括本人在内向上所有人
  735. if(userlist.size()-1>0){
  736. if(userlist.size()-1>=1
  737. &&insFeeOrder.getThirdRetailPremiums().doubleValue()>0)
  738. {//三级分销
  739. SysUser user=sysUserService.getById(userlist.get(1));
  740. InsCommission commission = new InsCommission();
  741. commission.setOrderno(order.getOrderno());
  742. commission.setQuoteno(insFeeOrder.getInsOrderNo());
  743. commission.setDeptid(order.getDeptid());
  744. commission.setDeptname(order.getDeptname());
  745. commission.setInscompany(plyDto.getCompanyId());
  746. commission.setAgreeid(String.valueOf(plyDto.getAgreementId()));
  747. commission.setRefereescode(user.getId());
  748. commission.setRefereesname(user.getName());
  749. commission.setLevel("3");
  750. commission.setAuditstatus("1"); //0未审核 1已审核
  751. commission.setSettlestatus("0"); //0未结算 1已结算
  752. commission.setInsuredtime(DateUtil.formatFullTime(plyDto.getPayDate(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  753. commission.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  754. if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
  755. commission.setPolicyno(plyDto.getJqpolicyno());
  756. commission.setRiskcode("交强");
  757. commission.setLicenseno(order.getLicenseno());
  758. commission.setCommissionrate(insFeeOrder.getThirdRetailProportion().doubleValue());
  759. commission.setCommissionamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getThirdRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  760. insCommissionService.insert(commission);
  761. }
  762. if(StringUtils.isNotEmpty(plyDto.getSypolicyno())){
  763. commission.setPolicyno(plyDto.getSypolicyno());
  764. commission.setRiskcode("商业");
  765. commission.setLicenseno(order.getLicenseno());
  766. commission.setCommissionrate(insFeeOrder.getThirdRetailProportion().doubleValue());
  767. commission.setCommissionamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getThirdRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  768. insCommissionService.insert(commission);
  769. }
  770. }
  771. if(userlist.size()-1>=2
  772. &&insFeeOrder.getSecondRetailPremiums().doubleValue()>0)
  773. {//二级分销
  774. SysUser user=sysUserService.getById(userlist.get(2));
  775. InsCommission commission = new InsCommission();
  776. commission.setOrderno(order.getOrderno());
  777. commission.setQuoteno(insFeeOrder.getInsOrderNo());
  778. commission.setDeptid(order.getDeptid());
  779. commission.setDeptname(order.getDeptname());
  780. commission.setInscompany(plyDto.getCompanyId());
  781. commission.setAgreeid(String.valueOf(plyDto.getAgreementId()));
  782. commission.setRefereescode(user.getId());
  783. commission.setRefereesname(user.getName());
  784. // commission.setCommissionrate(insFeeOrder.getSecondRetailProportion().doubleValue());
  785. // commission.setCommissionamount(insFeeOrder.getSecondRetailPremiums().doubleValue());
  786. commission.setLevel("2");
  787. commission.setAuditstatus("1"); //0未审核 1已审核
  788. commission.setSettlestatus("0"); //0未结算 1已结算
  789. commission.setInsuredtime(DateUtil.formatFullTime(plyDto.getPayDate(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  790. commission.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  791. if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
  792. commission.setPolicyno(plyDto.getJqpolicyno());
  793. commission.setRiskcode("交强");
  794. commission.setLicenseno(order.getLicenseno());
  795. commission.setCommissionrate(insFeeOrder.getSecondRetailProportion().doubleValue());
  796. commission.setCommissionamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getSecondRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  797. insCommissionService.insert(commission);
  798. }
  799. if(StringUtils.isNotEmpty(plyDto.getSypolicyno())){
  800. commission.setPolicyno(plyDto.getSypolicyno());
  801. commission.setRiskcode("商业");
  802. commission.setLicenseno(order.getLicenseno());
  803. commission.setCommissionrate(insFeeOrder.getSecondRetailProportion().doubleValue());
  804. commission.setCommissionamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getSecondRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  805. insCommissionService.insert(commission);
  806. }
  807. }
  808. if(userlist.size()-1>=3
  809. &&insFeeOrder.getFirstRetailPremiums().doubleValue()>0)
  810. {//一级分销
  811. SysUser user=sysUserService.getById(userlist.get(3));
  812. InsCommission commission = new InsCommission();
  813. commission.setOrderno(order.getOrderno());
  814. commission.setQuoteno(insFeeOrder.getInsOrderNo());
  815. commission.setDeptid(order.getDeptid());
  816. commission.setDeptname(order.getDeptname());
  817. commission.setInscompany(plyDto.getCompanyId());
  818. commission.setAgreeid(String.valueOf(plyDto.getAgreementId()));
  819. commission.setRefereescode(user.getId());
  820. commission.setRefereesname(user.getName());
  821. // commission.setCommissionrate(insFeeOrder.getFirstRetailProportion().doubleValue());
  822. // commission.setCommissionamount(insFeeOrder.getFirstRetailPremiums().doubleValue());
  823. commission.setLevel("1");
  824. commission.setAuditstatus("1"); //0未审核 1已审核
  825. commission.setSettlestatus("0"); //0未结算 1已结算
  826. commission.setInsuredtime(DateUtil.formatFullTime(plyDto.getPayDate(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  827. commission.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  828. if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
  829. commission.setPolicyno(plyDto.getJqpolicyno());
  830. commission.setRiskcode("交强");
  831. commission.setLicenseno(order.getLicenseno());
  832. commission.setCommissionrate(insFeeOrder.getFirstRetailProportion().doubleValue());
  833. commission.setCommissionamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getFirstRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  834. insCommissionService.insert(commission);
  835. }
  836. if(StringUtils.isNotEmpty(plyDto.getSypolicyno())){
  837. commission.setPolicyno(plyDto.getSypolicyno());
  838. commission.setRiskcode("商业");
  839. commission.setLicenseno(order.getLicenseno());
  840. commission.setCommissionrate(insFeeOrder.getFirstRetailProportion().doubleValue());
  841. commission.setCommissionamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getFirstRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  842. insCommissionService.insert(commission);
  843. }
  844. }
  845. }
  846. }
  847. /**
  848. * 生成个代费用
  849. * @param order
  850. * @param insFeeOrder
  851. * @throws Exception
  852. */
  853. public void saveInsCompanyFee(InsOrders order,InsFeeOrder insFeeOrder,InsAreaCompany plyDto) throws Exception {
  854. InsCompanyFee insCompanyFee = new InsCompanyFee();
  855. insCompanyFee.setOrderno(order.getOrderno());
  856. insCompanyFee.setFrameNo(order.getFrameno());
  857. insCompanyFee.setLicenseNo(order.getLicenseno());
  858. insCompanyFee.setInscompany(plyDto.getCompanyId());
  859. insCompanyFee.setAgreeid(String.valueOf(plyDto.getAgreementId()));
  860. insCompanyFee.setUserid(order.getUserid());
  861. insCompanyFee.setUsername(order.getUsername());
  862. insCompanyFee.setDeptid(order.getDeptid());
  863. insCompanyFee.setDeptname(order.getDeptname());
  864. insCompanyFee.setSettletype("B");
  865. insCompanyFee.setSettlestatus("0");
  866. insCompanyFee.setCreatetime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  867. if(plyDto.getInsidePayTime()!=null){
  868. insCompanyFee.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  869. }
  870. if(ObjectUtils.isNotEmpty(insFeeOrder)){
  871. BigDecimal dept_rate=insFeeOrder.getFirstDeptProportion()
  872. .add(insFeeOrder.getSecondDeptProportion())
  873. .add(insFeeOrder.getThirdDeptProportion())
  874. .add(insFeeOrder.getForthDeptProportion())
  875. .add(insFeeOrder.getFifthDeptProportion());
  876. BigDecimal retail_rate=insFeeOrder.getFirstRetailProportion()
  877. .add(insFeeOrder.getSecondRetailProportion())
  878. .add(insFeeOrder.getThirdRetailProportion());
  879. if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
  880. insCompanyFee.setPolicyno(plyDto.getJqpolicyno());
  881. insCompanyFee.setRiskcode("交强");
  882. //交强费用比例=交强险费用比例-五级机构管理费比例-三级分销比例
  883. insCompanyFee.setFeerate(insFeeOrder.getJqCostsProportion().subtract(dept_rate).subtract(retail_rate).doubleValue());
  884. insCompanyFee.setFeeamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getJqCostsProportion().subtract(dept_rate).subtract(retail_rate)).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
  885. insCompanyFee.setJqpremium(insFeeOrder.getJqNoTaxPremium().doubleValue());
  886. //保存业务员费用
  887. insCompanyFeeService.insert(insCompanyFee);
  888. }
  889. if(StringUtils.isNotEmpty(plyDto.getSypolicyno())){
  890. insCompanyFee.setPolicyno(plyDto.getSypolicyno());
  891. insCompanyFee.setRiskcode("商业");
  892. insCompanyFee.setFeerate(0);
  893. insCompanyFee.setFeeamount(0);
  894. insCompanyFee.setJqpremium(0);
  895. //商业费用比例=商业险费用比例-五级机构管理费比例-三级分销比例
  896. insCompanyFee.setDisrate(insFeeOrder.getSyCostsProportion().subtract(dept_rate).subtract(retail_rate).doubleValue());
  897. insCompanyFee.setDisamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getSyCostsProportion().subtract(dept_rate).subtract(retail_rate)).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
  898. insCompanyFee.setSypremium(insFeeOrder.getSyNoTaxPremium().doubleValue());
  899. //保存业务员费用
  900. insCompanyFeeService.insert(insCompanyFee);
  901. }
  902. }
  903. }
  904. }