InsFeeAuditServiceImpl.java 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691
  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. BigDecimal jqPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getJqSuperviseCostsPremiums());//交强监管费
  129. BigDecimal syPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getSySuperviseCostsPremiums());//商业监管费
  130. BigDecimal noPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getNoSuperviseCostsPremiums());//非车监管费用
  131. BigDecimal totalPremiumAmount = jqPremiumAmount.add(syPremiumAmount).add(noPremiumAmount); // 手续非佣金
  132. BigDecimal jqOtherCostsPremiums =this.zeroBigdecimal(insFeeOrderNew.getJqOtherCostsPremiums());//交强其他费用
  133. BigDecimal syOtherCostsPremiums =this.zeroBigdecimal(insFeeOrderNew.getSyOtherCostsPremiums()); //商业其他费用
  134. BigDecimal noOtherCostsProportion = this.zeroBigdecimal(insFeeOrderNew.getNoOtherCostsPremiums());//非车其他费用
  135. BigDecimal totalOtherPremiumAmount = jqOtherCostsPremiums.add(syOtherCostsPremiums).add(noOtherCostsProportion); //非跟单费用
  136. // 用戶
  137. sysUserAccount.setHandlingFee(totalPremiumAmount);
  138. sysUserAccount.setDocumentary(totalOtherPremiumAmount);
  139. // 算佣金
  140. this.countUserAmount(insFeeOrderNew,orderNo);
  141. sysUserAccount.setDocumentaryStatus("2"); // 收入
  142. sysUserAccount.setSuborderId(orderNo); // 订单Id
  143. sysUserAccountService.addOrUpdate(sysUserAccount);
  144. String deptid = insFeeOrderNew.getDeptId();
  145. String distributionStatus = insFeeOrderNew.getDistributionStatus();
  146. // 定义一个数组来存储各级机构的管理费
  147. BigDecimal[] jqDeptPremiumsLevels = {insFeeOrderNew.getJqDeptPremiumsLevel1(), insFeeOrderNew.getJqDeptPremiumsLevel2(),
  148. insFeeOrderNew.getJqDeptPremiumsLevel3(), insFeeOrderNew.getJqDeptPremiumsLevel4(),
  149. insFeeOrderNew.getJqDeptPremiumsLevel5()};
  150. BigDecimal[] syDeptPremiumsLevels = {insFeeOrderNew.getSyDeptPremiumsLevel1(), insFeeOrderNew.getSyDeptPremiumsLevel2(),
  151. insFeeOrderNew.getSyDeptPremiumsLevel3(), insFeeOrderNew.getSyDeptPremiumsLevel4(),
  152. insFeeOrderNew.getSyDeptPremiumsLevel5()};
  153. BigDecimal[] noDeptPremiumsLevels = {insFeeOrderNew.getNoDeptPremiumsLevel1(), insFeeOrderNew.getNoDeptPremiumsLevel2(),
  154. insFeeOrderNew.getNoDeptPremiumsLevel3(), insFeeOrderNew.getNoDeptPremiumsLevel4(),
  155. insFeeOrderNew.getNoDeptPremiumsLevel5()};
  156. for (int i = 1; i <= 5; i++) {
  157. // 根据循环次数确定机构ID的长度,第五级为11
  158. String levelDeptId = deptid.substring(0, (i == 5) ? 11 : i * 2);
  159. // 获取对应级别的机构信息
  160. SysDeptAccount levelSysDeptAccount = sysDeptAccountService.getOne(new LambdaQueryWrapper<SysDeptAccount>()
  161. .eq(SysDeptAccount::getDeptId, levelDeptId));
  162. // 初始化管理费总额为0
  163. BigDecimal sumManagementFee = BigDecimal.ZERO;
  164. // 根据分销等级和分销用户情况计算分销费用
  165. BigDecimal distributionFee = BigDecimal.ZERO;
  166. if (i == 5) {
  167. if (InsFeeAuditDistributionStatusEnum.DS_2.getCode().equals(distributionStatus) && insFeeOrderNew.getTwoLevelUserId() == null) {
  168. distributionFee = insFeeOrderNew.getSecondDetailPremiums();
  169. } else if (InsFeeAuditDistributionStatusEnum.DS_3.getCode().equals(distributionStatus) && insFeeOrderNew.getThreeLevelUserId() == null) {
  170. distributionFee = insFeeOrderNew.getThirdDetailPremiums();
  171. }
  172. }
  173. // 根据分销等级计算管理费总额
  174. if (i == 5) {
  175. sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
  176. .add(syDeptPremiumsLevels[i - 1])
  177. .add(noDeptPremiumsLevels[i - 1])
  178. .add(distributionFee);
  179. } else {
  180. sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
  181. .add(syDeptPremiumsLevels[i - 1])
  182. .add(noDeptPremiumsLevels[i - 1]);
  183. }
  184. // 如果机构信息不为空,更新管理费并记录历史
  185. if (levelSysDeptAccount != null) {
  186. levelSysDeptAccount.setManagementFee(levelSysDeptAccount.getManagementFee().add(sumManagementFee));
  187. sysDeptAccountService.updateById(levelSysDeptAccount);
  188. // 记录历史信息
  189. SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory();
  190. sysDeptAccountHistory.setId(IdGenerate.nextId());
  191. sysDeptAccountHistory.setDeptId(levelDeptId);
  192. sysDeptAccountHistory.setAmount(sumManagementFee);
  193. sysDeptAccountHistory.setSurplusAmount(levelSysDeptAccount.getManagementFee());
  194. sysDeptAccountHistory.setDocumentary("2"); //收入
  195. sysDeptAccountHistory.setSuborder(orderNo);
  196. sysDeptAccountHistory.setFromBankCard(null);
  197. sysDeptAccountHistory.setToBankCard(null);
  198. sysDeptAccountHistory.setUserId(BaseController.getUser().getId());
  199. sysDeptAccountHistory.setCreateTime(new Date());
  200. sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] +
  201. ",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] +
  202. ",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] +
  203. ",分销费:" + distributionFee);
  204. sysDeptAccountHistoryService.save(sysDeptAccountHistory);
  205. } else {
  206. // 如果机构信息为空,新建机构信息并记录历史
  207. SysDeptAccount sysDeptAccount = new SysDeptAccount();
  208. sysDeptAccount.setDeptId(levelDeptId);
  209. sysDeptAccount.setManagementFee(sumManagementFee);
  210. sysDeptAccount.setCreateTime(new Date());
  211. sysDeptAccountService.save(sysDeptAccount);
  212. // 记录历史信息
  213. SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory();
  214. sysDeptAccountHistory.setId(IdGenerate.nextId());
  215. sysDeptAccountHistory.setDeptId(levelDeptId);
  216. sysDeptAccountHistory.setAmount(sumManagementFee);
  217. sysDeptAccountHistory.setSurplusAmount(sumManagementFee);
  218. sysDeptAccountHistory.setDocumentary("2"); //收入
  219. sysDeptAccountHistory.setSuborder(orderNo);
  220. sysDeptAccountHistory.setFromBankCard(null);
  221. sysDeptAccountHistory.setToBankCard(null);
  222. sysDeptAccountHistory.setUserId(BaseController.getUser().getId());
  223. sysDeptAccountHistory.setCreateTime(new Date());
  224. sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] +
  225. ",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] +
  226. ",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] +
  227. ",分销费:" + distributionFee);
  228. sysDeptAccountHistoryService.save(sysDeptAccountHistory);
  229. }
  230. }
  231. }
  232. }
  233. }
  234. private void countUserAmount(InsFeeOrderNew insFeeOrderNew ,String orderNo) {
  235. String distributionStatus = insFeeOrderNew.getDistributionStatus();
  236. if(StringUtils.isNotEmpty(distributionStatus)){
  237. if(InsFeeAuditDistributionStatusEnum.DS_3.getCode().equals(distributionStatus)){
  238. BigDecimal totalDept = BigDecimal.ZERO;
  239. if(StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())){
  240. String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
  241. BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
  242. this.saveUpdateAccount(firstLevelUserId,firstDetailPremiums,orderNo);
  243. }else {
  244. totalDept = totalDept.add(insFeeOrderNew.getFirstDetailPremiums());
  245. }
  246. if(StringUtils.isNotEmpty(insFeeOrderNew.getTwoLevelUserId())){
  247. String twoLevelUserId = insFeeOrderNew.getTwoLevelUserId();
  248. BigDecimal secondDetailProportion = insFeeOrderNew.getSecondDetailPremiums();
  249. this.saveUpdateAccount(twoLevelUserId,secondDetailProportion,orderNo);
  250. }else {
  251. totalDept =totalDept.add(insFeeOrderNew.getSecondDetailPremiums());
  252. }
  253. if(StringUtils.isNotEmpty(insFeeOrderNew.getThreeLevelUserId())){
  254. String threeLevelUserId = insFeeOrderNew.getThreeLevelUserId();
  255. BigDecimal threeDetailPremiums = insFeeOrderNew.getThirdDetailPremiums();
  256. this.saveUpdateAccount(threeLevelUserId,threeDetailPremiums,orderNo);
  257. }else {
  258. totalDept =totalDept.add(insFeeOrderNew.getThirdDetailPremiums());
  259. }
  260. // 机构管理 费用给五级交钱机构管理费
  261. if(totalDept.compareTo(BigDecimal.ZERO) ==0){
  262. BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
  263. jqDeptPremiumsLevel5.add(totalDept);
  264. insFeeOrderNewService.updateById(insFeeOrderNew);
  265. }
  266. } else if (InsFeeAuditDistributionStatusEnum.DS_2.getCode().equals(distributionStatus)) {
  267. BigDecimal totalDept = BigDecimal.ZERO;
  268. if(StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())){
  269. String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
  270. BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
  271. this.saveUpdateAccount(firstLevelUserId,firstDetailPremiums,orderNo);
  272. }else {
  273. totalDept = totalDept.add(insFeeOrderNew.getFirstDetailPremiums());
  274. }
  275. if(StringUtils.isNotEmpty(insFeeOrderNew.getTwoLevelUserId())){
  276. String twoLevelUserId = insFeeOrderNew.getTwoLevelUserId();
  277. BigDecimal secondDetailProportion = insFeeOrderNew.getSecondDetailPremiums();
  278. this.saveUpdateAccount(twoLevelUserId,secondDetailProportion,orderNo);
  279. }else {
  280. totalDept =totalDept.add(insFeeOrderNew.getSecondDetailPremiums());
  281. }
  282. // 机构管理 费用给五级交钱机构管理费
  283. if(totalDept.compareTo(BigDecimal.ZERO) ==0){
  284. BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
  285. jqDeptPremiumsLevel5.add(totalDept);
  286. insFeeOrderNewService.updateById(insFeeOrderNew);
  287. }
  288. }else {
  289. // 一级分销
  290. if(StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())){
  291. String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
  292. BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
  293. this.saveUpdateAccount(firstLevelUserId,firstDetailPremiums,orderNo);
  294. }else {
  295. if(insFeeOrderNew.getFirstDetailPremiums().compareTo(BigDecimal.ZERO) ==0){
  296. BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
  297. jqDeptPremiumsLevel5.add(insFeeOrderNew.getFirstDetailPremiums());
  298. insFeeOrderNewService.updateById(insFeeOrderNew);
  299. }
  300. }
  301. }
  302. }
  303. }
  304. private void saveUpdateAccount(String userId, BigDecimal amount, String orderNo) {
  305. SysUserAccount sysUserAccount = new SysUserAccount();
  306. sysUserAccount.setUserId(userId);
  307. sysUserAccount.setPromotion(amount);
  308. sysUserAccount.setDocumentaryStatus("2"); // 收入
  309. sysUserAccount.setSuborderId(orderNo);
  310. sysUserAccountService.addOrUpdate(sysUserAccount);
  311. }
  312. private BigDecimal zeroBigdecimal(BigDecimal amount) {
  313. if (amount == null) {
  314. return amount = BigDecimal.ZERO;
  315. } else {
  316. return amount;
  317. }
  318. }
  319. /**
  320. * 生成保司费用(应收费用)
  321. * @param order
  322. * @param insFeeOrder
  323. * @throws Exception
  324. */
  325. private void gene_orderIncome( InsOrders order, InsFeeOrderNew insFeeOrder,InsAreaCompany plyDto) throws Exception{
  326. InsPlyIncome insPlyIncome =new InsPlyIncome();
  327. insPlyIncome.setOrderno(order.getOrderno());
  328. insPlyIncome.setDeptId(order.getDeptid());
  329. insPlyIncome.setCompanyId(plyDto.getCompanyId());
  330. insPlyIncome.setAgreementId(String.valueOf(plyDto.getAgreementId()));
  331. insPlyIncome.setLicenseno(order.getLicenseno());
  332. insPlyIncome.setPayDate(StringUtils.isNullOrEmpty(plyDto.getPayDate())?plyDto.getCreatetime():plyDto.getPayDate());
  333. insPlyIncome.setSignDate(StringUtils.isNullOrEmpty(plyDto.getInsidePayTime())?plyDto.getPayDate():plyDto.getInsidePayTime());
  334. insPlyIncome.setCreateTime(LocalDateTime.now() );
  335. if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
  336. insPlyIncome.setPolicyno(plyDto.getJqpolicyno());
  337. insPlyIncome.setRiskcode("交强");
  338. insPlyIncome.setTaxamount(plyDto.getTaxamount());
  339. if(!ObjectUtils.isEmpty(insFeeOrder)){
  340. insPlyIncome.setNoTaxPremium(insFeeOrder.getJqNoTaxPremium());
  341. insPlyIncome.setCommissionFeerate(insFeeOrder.getJqSuperviseCostsProportion());
  342. insPlyIncome.setOtherFeerate(insFeeOrder.getJqCostsProportion().subtract(insFeeOrder.getJqSuperviseCostsProportion()));
  343. insPlyIncome.setCommissionFeevalue(insFeeOrder.getJqSuperviseCostsPremiums());
  344. insPlyIncome.setOtherFeevalue(insFeeOrder.getJqCostsPremiums().subtract(insFeeOrder.getJqSuperviseCostsPremiums()));
  345. insPlyIncome.setAllFeeValue(insFeeOrder.getJqCostsPremiums());
  346. }
  347. insPlyIncomeMapper.insert(insPlyIncome);
  348. }
  349. if(StringUtils.isNotEmpty(plyDto.getSypolicyno())){
  350. insPlyIncome.setPolicyno(plyDto.getSypolicyno());
  351. insPlyIncome.setRiskcode("商业");
  352. insPlyIncome.setTaxamount(new BigDecimal(0));
  353. if(!ObjectUtils.isEmpty(insFeeOrder)){
  354. insPlyIncome.setNoTaxPremium(insFeeOrder.getSyNoTaxPremium());
  355. insPlyIncome.setCommissionFeerate(insFeeOrder.getSySuperviseCostsProportion());
  356. insPlyIncome.setOtherFeerate(insFeeOrder.getSyCostsProportion().subtract(insFeeOrder.getSySuperviseCostsProportion()));
  357. insPlyIncome.setCommissionFeevalue(insFeeOrder.getSySuperviseCostsPremiums());
  358. insPlyIncome.setOtherFeevalue(insFeeOrder.getSyCostsPremiums().subtract(insFeeOrder.getSySuperviseCostsPremiums()));
  359. insPlyIncome.setAllFeeValue(insFeeOrder.getSyCostsPremiums());
  360. }
  361. insPlyIncomeMapper.insert(insPlyIncome);
  362. }
  363. }
  364. /**
  365. * 生成机构费用
  366. * @param order
  367. * @param insFeeOrder
  368. * @throws Exception
  369. */
  370. private void gene_deptfee( InsOrders order, InsFeeOrderNew insFeeOrder,InsAreaCompany plyDto) throws Exception{
  371. InsDeptFee deptFee = new InsDeptFee();
  372. deptFee.setOrderno(order.getOrderno());
  373. if(!ObjectUtils.isEmpty(insFeeOrder)){
  374. deptFee.setQuoteno(insFeeOrder.getInsOrderNo());
  375. }
  376. deptFee.setAgreeid(String.valueOf(plyDto.getAgreementId()));
  377. deptFee.setAuditstatus("1");
  378. deptFee.setSettlestatus("0");
  379. if(plyDto.getInsidePayTime()!=null){
  380. deptFee.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  381. }
  382. deptFee.setInscompany(plyDto.getCompanyId());
  383. if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
  384. deptFee.setPolicyno(plyDto.getJqpolicyno());
  385. deptFee.setRiskcode("交强");
  386. deptFee.setLicenseno(order.getLicenseno());
  387. geneJqInsDeptFee(order, insFeeOrder, deptFee);
  388. }
  389. if(StringUtils.isNotEmpty(plyDto.getSypolicyno())){
  390. deptFee.setPolicyno(plyDto.getSypolicyno());
  391. deptFee.setRiskcode("商业");
  392. deptFee.setLicenseno(order.getLicenseno());
  393. geneSyInsDeptFee(order, insFeeOrder, deptFee);
  394. }
  395. }
  396. private void geneJqInsDeptFee(InsOrders order, InsFeeOrderNew insFeeOrder, InsDeptFee deptFee) {
  397. if(!ObjectUtils.isEmpty(insFeeOrder)){
  398. if (insFeeOrder.getJqDeptPremiumsLevel1().doubleValue() > 0) {
  399. deptFee.setComcode(order.getDeptid().substring(0, 2)); //99140302M01D01
  400. deptFee.setComlevel("一级");
  401. insDeptFeeService.insert(deptFee);
  402. }
  403. if (insFeeOrder.getJqDeptPremiumsLevel2().doubleValue() > 0) {
  404. deptFee.setComcode(order.getDeptid().substring(0, 4)); //99140302M01D01
  405. deptFee.setComlevel("二级");
  406. insDeptFeeService.insert(deptFee);
  407. }
  408. if (insFeeOrder.getJqDeptPremiumsLevel3().doubleValue() > 0) {
  409. deptFee.setComcode(order.getDeptid().substring(0, 6)); //99140302M01D01
  410. deptFee.setComlevel("三级");
  411. insDeptFeeService.insert(deptFee);
  412. }
  413. if (insFeeOrder.getJqDeptPremiumsLevel4().doubleValue() > 0) {
  414. deptFee.setComcode(order.getDeptid().substring(0, 8)); //99140302M01D01
  415. deptFee.setComlevel("四级");
  416. insDeptFeeService.insert(deptFee);
  417. }
  418. if (insFeeOrder.getJqDeptPremiumsLevel5().doubleValue() > 0) {
  419. deptFee.setComcode(order.getDeptid().substring(0, 11)); //99140302M01D01
  420. deptFee.setComlevel("五级");
  421. insDeptFeeService.insert(deptFee);
  422. }
  423. }
  424. }
  425. private void geneSyInsDeptFee(InsOrders order, InsFeeOrderNew insFeeOrder, InsDeptFee deptFee) {
  426. if(!ObjectUtils.isEmpty(insFeeOrder)){
  427. if (insFeeOrder.getSyDeptPremiumsLevel1().doubleValue() > 0) {
  428. deptFee.setComcode(order.getDeptid().substring(0, 2)); //99140302M01D01
  429. deptFee.setComlevel("一级");
  430. insDeptFeeService.insert(deptFee);
  431. }
  432. if (insFeeOrder.getSyDeptPremiumsLevel2().doubleValue() > 0) {
  433. deptFee.setComcode(order.getDeptid().substring(0, 4)); //99140302M01D01
  434. deptFee.setComlevel("二级");
  435. insDeptFeeService.insert(deptFee);
  436. }
  437. if (insFeeOrder.getSyDeptPremiumsLevel3().doubleValue() > 0) {
  438. deptFee.setComcode(order.getDeptid().substring(0, 6)); //99140302M01D01
  439. deptFee.setComlevel("三级");
  440. insDeptFeeService.insert(deptFee);
  441. }
  442. if (insFeeOrder.getSyDeptPremiumsLevel4().doubleValue() > 0) {
  443. deptFee.setComcode(order.getDeptid().substring(0, 8)); //99140302M01D01
  444. deptFee.setComlevel("四级");
  445. insDeptFeeService.insert(deptFee);
  446. }
  447. if (insFeeOrder.getSyDeptPremiumsLevel5().doubleValue() > 0) {
  448. deptFee.setComcode(order.getDeptid().substring(0, 11)); //99140302M01D01
  449. deptFee.setComlevel("五级");
  450. insDeptFeeService.insert(deptFee);
  451. }
  452. }
  453. }
  454. /**
  455. * 三级分销费用保存
  456. *
  457. * @param order
  458. * @return
  459. */
  460. public void saveRetail(InsOrders order,InsFeeOrder insFeeOrder,InsAreaCompany plyDto) throws Exception{
  461. List<String> userlist=new ArrayList<>();
  462. esmUserReferrerService.getUpUser(order.getUserid(),userlist);
  463. //userlist:包括本人在内向上所有人
  464. if(userlist.size()-1>0){
  465. if(userlist.size()-1>=1
  466. &&insFeeOrder.getThirdRetailPremiums().doubleValue()>0)
  467. {//三级分销
  468. SysUser user=sysUserService.getById(userlist.get(1));
  469. InsCommission commission = new InsCommission();
  470. commission.setOrderno(order.getOrderno());
  471. commission.setQuoteno(insFeeOrder.getInsOrderNo());
  472. commission.setDeptid(order.getDeptid());
  473. commission.setDeptname(order.getDeptname());
  474. commission.setInscompany(plyDto.getCompanyId());
  475. commission.setAgreeid(String.valueOf(plyDto.getAgreementId()));
  476. commission.setRefereescode(user.getId());
  477. commission.setRefereesname(user.getName());
  478. commission.setLevel("3");
  479. commission.setAuditstatus("1"); //0未审核 1已审核
  480. commission.setSettlestatus("0"); //0未结算 1已结算
  481. commission.setInsuredtime(DateUtil.formatFullTime(plyDto.getPayDate(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  482. commission.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  483. if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
  484. commission.setPolicyno(plyDto.getJqpolicyno());
  485. commission.setRiskcode("交强");
  486. commission.setLicenseno(order.getLicenseno());
  487. commission.setCommissionrate(insFeeOrder.getThirdRetailProportion().doubleValue());
  488. commission.setCommissionamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getThirdRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  489. insCommissionService.insert(commission);
  490. }
  491. if(StringUtils.isNotEmpty(plyDto.getSypolicyno())){
  492. commission.setPolicyno(plyDto.getSypolicyno());
  493. commission.setRiskcode("商业");
  494. commission.setLicenseno(order.getLicenseno());
  495. commission.setCommissionrate(insFeeOrder.getThirdRetailProportion().doubleValue());
  496. commission.setCommissionamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getThirdRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  497. insCommissionService.insert(commission);
  498. }
  499. }
  500. if(userlist.size()-1>=2
  501. &&insFeeOrder.getSecondRetailPremiums().doubleValue()>0)
  502. {//二级分销
  503. SysUser user=sysUserService.getById(userlist.get(2));
  504. InsCommission commission = new InsCommission();
  505. commission.setOrderno(order.getOrderno());
  506. commission.setQuoteno(insFeeOrder.getInsOrderNo());
  507. commission.setDeptid(order.getDeptid());
  508. commission.setDeptname(order.getDeptname());
  509. commission.setInscompany(plyDto.getCompanyId());
  510. commission.setAgreeid(String.valueOf(plyDto.getAgreementId()));
  511. commission.setRefereescode(user.getId());
  512. commission.setRefereesname(user.getName());
  513. // commission.setCommissionrate(insFeeOrder.getSecondRetailProportion().doubleValue());
  514. // commission.setCommissionamount(insFeeOrder.getSecondRetailPremiums().doubleValue());
  515. commission.setLevel("2");
  516. commission.setAuditstatus("1"); //0未审核 1已审核
  517. commission.setSettlestatus("0"); //0未结算 1已结算
  518. commission.setInsuredtime(DateUtil.formatFullTime(plyDto.getPayDate(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  519. commission.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  520. if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
  521. commission.setPolicyno(plyDto.getJqpolicyno());
  522. commission.setRiskcode("交强");
  523. commission.setLicenseno(order.getLicenseno());
  524. commission.setCommissionrate(insFeeOrder.getSecondRetailProportion().doubleValue());
  525. commission.setCommissionamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getSecondRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  526. insCommissionService.insert(commission);
  527. }
  528. if(StringUtils.isNotEmpty(plyDto.getSypolicyno())){
  529. commission.setPolicyno(plyDto.getSypolicyno());
  530. commission.setRiskcode("商业");
  531. commission.setLicenseno(order.getLicenseno());
  532. commission.setCommissionrate(insFeeOrder.getSecondRetailProportion().doubleValue());
  533. commission.setCommissionamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getSecondRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  534. insCommissionService.insert(commission);
  535. }
  536. }
  537. if(userlist.size()-1>=3
  538. &&insFeeOrder.getFirstRetailPremiums().doubleValue()>0)
  539. {//一级分销
  540. SysUser user=sysUserService.getById(userlist.get(3));
  541. InsCommission commission = new InsCommission();
  542. commission.setOrderno(order.getOrderno());
  543. commission.setQuoteno(insFeeOrder.getInsOrderNo());
  544. commission.setDeptid(order.getDeptid());
  545. commission.setDeptname(order.getDeptname());
  546. commission.setInscompany(plyDto.getCompanyId());
  547. commission.setAgreeid(String.valueOf(plyDto.getAgreementId()));
  548. commission.setRefereescode(user.getId());
  549. commission.setRefereesname(user.getName());
  550. // commission.setCommissionrate(insFeeOrder.getFirstRetailProportion().doubleValue());
  551. // commission.setCommissionamount(insFeeOrder.getFirstRetailPremiums().doubleValue());
  552. commission.setLevel("1");
  553. commission.setAuditstatus("1"); //0未审核 1已审核
  554. commission.setSettlestatus("0"); //0未结算 1已结算
  555. commission.setInsuredtime(DateUtil.formatFullTime(plyDto.getPayDate(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  556. commission.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  557. if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
  558. commission.setPolicyno(plyDto.getJqpolicyno());
  559. commission.setRiskcode("交强");
  560. commission.setLicenseno(order.getLicenseno());
  561. commission.setCommissionrate(insFeeOrder.getFirstRetailProportion().doubleValue());
  562. commission.setCommissionamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getFirstRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  563. insCommissionService.insert(commission);
  564. }
  565. if(StringUtils.isNotEmpty(plyDto.getSypolicyno())){
  566. commission.setPolicyno(plyDto.getSypolicyno());
  567. commission.setRiskcode("商业");
  568. commission.setLicenseno(order.getLicenseno());
  569. commission.setCommissionrate(insFeeOrder.getFirstRetailProportion().doubleValue());
  570. commission.setCommissionamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getFirstRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  571. insCommissionService.insert(commission);
  572. }
  573. }
  574. }
  575. }
  576. /**
  577. * 生成个代费用
  578. * @param order
  579. * @param insFeeOrder
  580. * @throws Exception
  581. */
  582. public void saveInsCompanyFee(InsOrders order,InsFeeOrder insFeeOrder,InsAreaCompany plyDto) throws Exception {
  583. InsCompanyFee insCompanyFee = new InsCompanyFee();
  584. insCompanyFee.setOrderno(order.getOrderno());
  585. insCompanyFee.setFrameNo(order.getFrameno());
  586. insCompanyFee.setLicenseNo(order.getLicenseno());
  587. insCompanyFee.setInscompany(plyDto.getCompanyId());
  588. insCompanyFee.setAgreeid(String.valueOf(plyDto.getAgreementId()));
  589. insCompanyFee.setUserid(order.getUserid());
  590. insCompanyFee.setUsername(order.getUsername());
  591. insCompanyFee.setDeptid(order.getDeptid());
  592. insCompanyFee.setDeptname(order.getDeptname());
  593. insCompanyFee.setSettletype("B");
  594. insCompanyFee.setSettlestatus("0");
  595. insCompanyFee.setCreatetime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  596. if(plyDto.getInsidePayTime()!=null){
  597. insCompanyFee.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  598. }
  599. if(ObjectUtils.isNotEmpty(insFeeOrder)){
  600. BigDecimal dept_rate=insFeeOrder.getFirstDeptProportion()
  601. .add(insFeeOrder.getSecondDeptProportion())
  602. .add(insFeeOrder.getThirdDeptProportion())
  603. .add(insFeeOrder.getForthDeptProportion())
  604. .add(insFeeOrder.getFifthDeptProportion());
  605. BigDecimal retail_rate=insFeeOrder.getFirstRetailProportion()
  606. .add(insFeeOrder.getSecondRetailProportion())
  607. .add(insFeeOrder.getThirdRetailProportion());
  608. if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
  609. insCompanyFee.setPolicyno(plyDto.getJqpolicyno());
  610. insCompanyFee.setRiskcode("交强");
  611. //交强费用比例=交强险费用比例-五级机构管理费比例-三级分销比例
  612. insCompanyFee.setFeerate(insFeeOrder.getJqCostsProportion().subtract(dept_rate).subtract(retail_rate).doubleValue());
  613. insCompanyFee.setFeeamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getJqCostsProportion().subtract(dept_rate).subtract(retail_rate)).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
  614. insCompanyFee.setJqpremium(insFeeOrder.getJqNoTaxPremium().doubleValue());
  615. //保存业务员费用
  616. insCompanyFeeService.insert(insCompanyFee);
  617. }
  618. if(StringUtils.isNotEmpty(plyDto.getSypolicyno())){
  619. insCompanyFee.setPolicyno(plyDto.getSypolicyno());
  620. insCompanyFee.setRiskcode("商业");
  621. insCompanyFee.setFeerate(0);
  622. insCompanyFee.setFeeamount(0);
  623. insCompanyFee.setJqpremium(0);
  624. //商业费用比例=商业险费用比例-五级机构管理费比例-三级分销比例
  625. insCompanyFee.setDisrate(insFeeOrder.getSyCostsProportion().subtract(dept_rate).subtract(retail_rate).doubleValue());
  626. insCompanyFee.setDisamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getSyCostsProportion().subtract(dept_rate).subtract(retail_rate)).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
  627. insCompanyFee.setSypremium(insFeeOrder.getSyNoTaxPremium().doubleValue());
  628. //保存业务员费用
  629. insCompanyFeeService.insert(insCompanyFee);
  630. }
  631. }
  632. }
  633. }