InsFeeAuditServiceImpl.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. package com.ydtech.modules.fnc.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import com.ydtech.modules.admin.model.SysUser;
  4. import com.ydtech.modules.admin.service.SysUserService;
  5. import com.ydtech.modules.esm.service.EsmUserReferrerService;
  6. import com.ydtech.modules.fnc.entity.InsFeeAudit;
  7. import com.ydtech.modules.fnc.dao.InsFeeAuditMapper;
  8. import com.ydtech.modules.fnc.service.InsFeeAuditService;
  9. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  10. import com.ydtech.modules.ins.model.InsCommission;
  11. import com.ydtech.modules.ins.model.InsCompanyFee;
  12. import com.ydtech.modules.ins.model.InsDeptFee;
  13. import com.ydtech.modules.ins.service.InsCommissionService;
  14. import com.ydtech.modules.ins.service.InsCompanyFeeService;
  15. import com.ydtech.modules.ins.service.InsDeptFeeService;
  16. import com.ydtech.modules.order.dao.InsOrdersMapper;
  17. import com.ydtech.modules.order.entity.InsAreaCompany;
  18. import com.ydtech.modules.order.entity.InsFeeOrder;
  19. import com.ydtech.modules.order.entity.InsOrders;
  20. import com.ydtech.modules.order.service.InsAreaCompanyService;
  21. import com.ydtech.modules.order.service.InsFeeOrderService;
  22. import com.ydtech.modules.order.service.InsOrdersService;
  23. import com.ydtech.utils.DateUtil;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.transaction.annotation.Transactional;
  26. import java.math.BigDecimal;
  27. import java.time.LocalDateTime;
  28. import java.util.ArrayList;
  29. import java.util.Date;
  30. import java.util.List;
  31. /**
  32. * <p>
  33. * 服务实现类
  34. * </p>
  35. *
  36. * @author gws
  37. * @since 2023-11-22
  38. */
  39. @Service
  40. public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFeeAudit> implements InsFeeAuditService {
  41. private final InsOrdersMapper insOrdersMapper;
  42. private final InsFeeOrderService insFeeOrderService;
  43. private final InsAreaCompanyService insAreaCompanyService;
  44. private final InsDeptFeeService insDeptFeeService;
  45. private final InsCommissionService insCommissionService;
  46. private final InsCompanyFeeService insCompanyFeeService;
  47. private final EsmUserReferrerService esmUserReferrerService;
  48. private final SysUserService sysUserService;
  49. public InsFeeAuditServiceImpl(InsAreaCompanyService insAreaCompanyService, InsOrdersMapper insOrdersMapper, InsFeeOrderService insFeeOrderService,InsDeptFeeService insDeptFeeService,EsmUserReferrerService esmUserReferrerService,SysUserService sysUserService,InsCommissionService insCommissionService,InsCompanyFeeService insCompanyFeeService) {
  50. this.insAreaCompanyService = insAreaCompanyService;
  51. this.insOrdersMapper = insOrdersMapper;
  52. this.insFeeOrderService=insFeeOrderService;
  53. this.insDeptFeeService=insDeptFeeService;
  54. this.esmUserReferrerService=esmUserReferrerService;
  55. this.sysUserService=sysUserService;
  56. this.insCommissionService=insCommissionService;
  57. this.insCompanyFeeService=insCompanyFeeService;
  58. }
  59. @Override
  60. @Transactional
  61. public void feeAudit(String orderNo, String insOrderNo) throws Exception{
  62. InsFeeAudit insFeeAudit=new InsFeeAudit();
  63. insFeeAudit.setOrderno(orderNo);
  64. insFeeAudit.setInsOrderNo(insOrderNo);
  65. insFeeAudit.setAuditstatus("1");
  66. insFeeAudit.setAudittime(LocalDateTime.now());
  67. insFeeAudit.setAudituser(StpUtil.getLoginId().toString());
  68. this.save(insFeeAudit);
  69. InsOrders order=insOrdersMapper.selectById(orderNo);
  70. InsFeeOrder insFeeOrder=insFeeOrderService.getByInsOrderNo(insFeeAudit.getInsOrderNo());
  71. //bigdecimal为null时设置为0
  72. handleBigdecimal(insFeeOrder);
  73. //生成机构费用
  74. gene_deptfee( order, insFeeOrder);
  75. //生成分销费用
  76. saveRetail(order,insFeeOrder);
  77. //个代费用生成
  78. saveInsCompanyFee(order,insFeeOrder);
  79. }
  80. private void handleBigdecimal(InsFeeOrder insFeeOrder)
  81. {
  82. insFeeOrder.setJqCostsProportion(insFeeOrder.getJqCostsProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getJqCostsProportion());
  83. insFeeOrder.setSyCostsProportion(insFeeOrder.getSyCostsProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getSyCostsProportion());
  84. insFeeOrder.setJqCostsPremiums(insFeeOrder.getJqCostsPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getJqCostsPremiums());
  85. insFeeOrder.setSyCostsPremiums(insFeeOrder.getSyCostsPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getSyCostsPremiums());
  86. insFeeOrder.setJqPremium(insFeeOrder.getJqPremium() ==null ? BigDecimal.ZERO:insFeeOrder.getJqPremium());
  87. insFeeOrder.setSyPremium(insFeeOrder.getSyPremium() ==null ? BigDecimal.ZERO:insFeeOrder.getSyPremium());
  88. insFeeOrder.setJqNoTaxPremium(insFeeOrder.getJqNoTaxPremium() ==null ? BigDecimal.ZERO:insFeeOrder.getJqNoTaxPremium());
  89. insFeeOrder.setSyNoTaxPremium(insFeeOrder.getSyNoTaxPremium() ==null ? BigDecimal.ZERO:insFeeOrder.getSyNoTaxPremium());
  90. insFeeOrder.setJqSuperviseCostsProportion(insFeeOrder.getJqSuperviseCostsProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getJqSuperviseCostsProportion());
  91. insFeeOrder.setJqSuperviseCostsPremiums(insFeeOrder.getJqSuperviseCostsPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getJqSuperviseCostsPremiums());
  92. insFeeOrder.setSySuperviseCostsProportion(insFeeOrder.getSySuperviseCostsProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getSySuperviseCostsProportion());
  93. insFeeOrder.setSySuperviseCostsPremiums(insFeeOrder.getSySuperviseCostsPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getSySuperviseCostsPremiums());
  94. insFeeOrder.setJqSpilloverProportion(insFeeOrder.getJqSpilloverProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getJqSpilloverProportion());
  95. insFeeOrder.setJqSpilloverPremiums(insFeeOrder.getJqSpilloverPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getJqSpilloverPremiums());
  96. insFeeOrder.setSySpilloverProportion(insFeeOrder.getSySpilloverProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getSySpilloverProportion());
  97. insFeeOrder.setSySpilloverPremiums(insFeeOrder.getSySpilloverPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getSySpilloverPremiums());
  98. insFeeOrder.setFirstDeptProportion(insFeeOrder.getFirstDeptProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getFirstDeptProportion());
  99. insFeeOrder.setFirstDeptPremiums(insFeeOrder.getFirstDeptPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getFirstDeptPremiums());
  100. insFeeOrder.setSecondDeptProportion(insFeeOrder.getSecondDeptProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getSecondDeptProportion());
  101. insFeeOrder.setSecondDeptPremiums(insFeeOrder.getSecondDeptPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getSecondDeptPremiums());
  102. insFeeOrder.setThirdDeptProportion(insFeeOrder.getThirdDeptProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getThirdDeptProportion());
  103. insFeeOrder.setThirdDeptPremiums(insFeeOrder.getThirdDeptPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getThirdDeptPremiums());
  104. insFeeOrder.setForthDeptProportion(insFeeOrder.getForthDeptProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getForthDeptProportion());
  105. insFeeOrder.setForthDeptPremiums(insFeeOrder.getForthDeptPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getForthDeptPremiums());
  106. insFeeOrder.setFifthDeptProportion(insFeeOrder.getFifthDeptProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getFifthDeptProportion());
  107. insFeeOrder.setFifthDeptPremiums(insFeeOrder.getFifthDeptPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getFifthDeptPremiums());
  108. insFeeOrder.setFirstRetailProportion(insFeeOrder.getFirstRetailProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getFirstRetailProportion());
  109. insFeeOrder.setFirstRetailPremiums(insFeeOrder.getFirstRetailPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getFirstRetailPremiums());
  110. insFeeOrder.setSecondRetailProportion(insFeeOrder.getSecondRetailProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getSecondRetailProportion());
  111. insFeeOrder.setSecondRetailPremiums(insFeeOrder.getSecondRetailPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getSecondRetailPremiums());
  112. insFeeOrder.setThirdRetailProportion(insFeeOrder.getThirdRetailProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getThirdRetailProportion());
  113. insFeeOrder.setThirdRetailPremiums(insFeeOrder.getThirdRetailPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getThirdRetailPremiums());
  114. }
  115. /**
  116. * 生成机构费用
  117. * @param order
  118. * @param insFeeOrder
  119. * @throws Exception
  120. */
  121. private void gene_deptfee( InsOrders order, InsFeeOrder insFeeOrder) throws Exception{
  122. InsDeptFee deptFee = new InsDeptFee();
  123. deptFee.setOrderno(order.getOrderno());
  124. deptFee.setQuoteno(insFeeOrder.getInsOrderNo());
  125. deptFee.setAgreeid(insFeeOrder.getAgreementId());
  126. deptFee.setAuditstatus("1");
  127. deptFee.setSettlestatus("0");
  128. if (insFeeOrder.getFirstDeptPremiums().doubleValue() > 0) {
  129. deptFee.setComcode(order.getDeptid().substring(0, 2)); //99140302M01D01
  130. deptFee.setKeeprate(insFeeOrder.getFirstDeptProportion().doubleValue() * 0.01);
  131. deptFee.setKeepamount(insFeeOrder.getFirstDeptPremiums().doubleValue());
  132. deptFee.setComlevel("一级");
  133. insDeptFeeService.insert(deptFee);
  134. } else if (insFeeOrder.getSecondDeptPremiums().doubleValue() > 0) {
  135. deptFee.setComcode(order.getDeptid().substring(0, 4)); //99140302M01D01
  136. deptFee.setKeeprate(insFeeOrder.getSecondDeptProportion().doubleValue() * 0.01);
  137. deptFee.setKeepamount(insFeeOrder.getSecondDeptPremiums().doubleValue());
  138. deptFee.setComlevel("二级");
  139. insDeptFeeService.insert(deptFee);
  140. }else if (insFeeOrder.getThirdDeptPremiums().doubleValue() > 0) {
  141. deptFee.setComcode(order.getDeptid().substring(0, 6)); //99140302M01D01
  142. deptFee.setKeeprate(insFeeOrder.getThirdDeptProportion().doubleValue() * 0.01);
  143. deptFee.setKeepamount(insFeeOrder.getThirdDeptPremiums().doubleValue());
  144. deptFee.setComlevel("三级");
  145. insDeptFeeService.insert(deptFee);
  146. }else if (insFeeOrder.getForthDeptPremiums().doubleValue() > 0) {
  147. deptFee.setComcode(order.getDeptid().substring(0, 8)); //99140302M01D01
  148. deptFee.setKeeprate(insFeeOrder.getForthDeptProportion().doubleValue() * 0.01);
  149. deptFee.setKeepamount(insFeeOrder.getForthDeptPremiums().doubleValue());
  150. deptFee.setComlevel("四级");
  151. insDeptFeeService.insert(deptFee);
  152. }else if (insFeeOrder.getFifthDeptPremiums().doubleValue() > 0) {
  153. deptFee.setComcode(order.getDeptid().substring(0, 11)); //99140302M01D01
  154. deptFee.setKeeprate(insFeeOrder.getFifthDeptProportion().doubleValue() * 0.01);
  155. deptFee.setKeepamount(insFeeOrder.getFifthDeptPremiums().doubleValue());
  156. deptFee.setComlevel("五级");
  157. insDeptFeeService.insert(deptFee);
  158. }
  159. }
  160. /**
  161. * 三级分销费用保存
  162. *
  163. * @param order
  164. * @return
  165. */
  166. public void saveRetail(InsOrders order,InsFeeOrder insFeeOrder) throws Exception{
  167. List<String> userlist=new ArrayList<>();
  168. esmUserReferrerService.getUpUser(order.getUserid(),userlist);
  169. //userlist:包括本人在内向上所有人
  170. if(userlist.size()-1>0){
  171. if(userlist.size()-1>=1
  172. &&insFeeOrder.getThirdRetailPremiums().doubleValue()>0)
  173. {//三级分销
  174. SysUser user=sysUserService.getById(userlist.get(1));
  175. InsCommission commission = new InsCommission();
  176. commission.setOrderno(order.getOrderno());
  177. commission.setQuoteno(insFeeOrder.getInsOrderNo());
  178. commission.setRefereescode(user.getId());
  179. commission.setRefereesname(user.getName());
  180. commission.setCommissionrate(insFeeOrder.getThirdRetailProportion().doubleValue()* 0.01);
  181. commission.setCommissionamount(insFeeOrder.getThirdRetailPremiums().doubleValue());
  182. commission.setLevel("3");
  183. commission.setAuditstatus("1"); //0未审核 1已审核
  184. commission.setSettlestatus("0"); //0未结算 1已结算
  185. commission.setInsuredtime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN)); //承保确认时间
  186. insCommissionService.insert(commission);
  187. }
  188. if(userlist.size()-1>=2
  189. &&insFeeOrder.getSecondRetailPremiums().doubleValue()>0)
  190. {//二级分销
  191. SysUser user=sysUserService.getById(userlist.get(2));
  192. InsCommission commission = new InsCommission();
  193. commission.setOrderno(order.getOrderno());
  194. commission.setQuoteno(insFeeOrder.getInsOrderNo());
  195. commission.setRefereescode(user.getId());
  196. commission.setRefereesname(user.getName());
  197. commission.setCommissionrate(insFeeOrder.getSecondRetailProportion().doubleValue()* 0.01);
  198. commission.setCommissionamount(insFeeOrder.getSecondRetailPremiums().doubleValue());
  199. commission.setLevel("2");
  200. commission.setAuditstatus("1"); //0未审核 1已审核
  201. commission.setSettlestatus("0"); //0未结算 1已结算
  202. commission.setInsuredtime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN)); //承保确认时间
  203. insCommissionService.insert(commission);
  204. }
  205. if(userlist.size()-1>=3
  206. &&insFeeOrder.getFirstRetailPremiums().doubleValue()>0)
  207. {//一级分销
  208. SysUser user=sysUserService.getById(userlist.get(3));
  209. InsCommission commission = new InsCommission();
  210. commission.setOrderno(order.getOrderno());
  211. commission.setQuoteno(insFeeOrder.getInsOrderNo());
  212. commission.setRefereescode(user.getId());
  213. commission.setRefereesname(user.getName());
  214. commission.setCommissionrate(insFeeOrder.getFirstRetailProportion().doubleValue()* 0.01);
  215. commission.setCommissionamount(insFeeOrder.getFirstRetailPremiums().doubleValue());
  216. commission.setLevel("1");
  217. commission.setAuditstatus("1"); //0未审核 1已审核
  218. commission.setSettlestatus("0"); //0未结算 1已结算
  219. commission.setInsuredtime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN)); //承保确认时间
  220. insCommissionService.insert(commission);
  221. }
  222. }
  223. }
  224. /**
  225. * 生成个代费用
  226. * @param order
  227. * @param insFeeOrder
  228. * @throws Exception
  229. */
  230. public void saveInsCompanyFee(InsOrders order,InsFeeOrder insFeeOrder) throws Exception {
  231. InsAreaCompany insAreaCompany=insAreaCompanyService.getById(insFeeOrder.getInsOrderNo());
  232. InsCompanyFee insCompanyFee = new InsCompanyFee();
  233. insCompanyFee.setOrderno(order.getOrderno());
  234. BigDecimal dept_rate=insFeeOrder.getFirstDeptProportion()
  235. .add(insFeeOrder.getSecondDeptProportion())
  236. .add(insFeeOrder.getThirdDeptProportion())
  237. .add(insFeeOrder.getForthDeptProportion())
  238. .add(insFeeOrder.getFifthDeptProportion());
  239. BigDecimal retail_rate=insFeeOrder.getFirstRetailProportion()
  240. .add(insFeeOrder.getSecondRetailProportion())
  241. .add(insFeeOrder.getThirdRetailProportion());
  242. //交强费用比例=交强险费用比例-五级机构管理费比例-三级分销比例
  243. insCompanyFee.setFeerate(insFeeOrder.getJqCostsProportion().subtract(dept_rate).subtract(retail_rate).doubleValue());
  244. //商业费用比例=商业险费用比例-五级机构管理费比例-三级分销比例
  245. insCompanyFee.setDisrate(insFeeOrder.getSyCostsProportion().subtract(dept_rate).subtract(retail_rate).doubleValue());
  246. insCompanyFee.setFeeamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getJqCostsProportion().subtract(dept_rate).subtract(retail_rate)).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
  247. insCompanyFee.setDisamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getSyCostsProportion().subtract(dept_rate).subtract(retail_rate)).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
  248. insCompanyFee.setJqpremium(insFeeOrder.getJqNoTaxPremium().doubleValue());
  249. insCompanyFee.setSypremium(insFeeOrder.getSyNoTaxPremium().doubleValue());
  250. insCompanyFee.setFrameNo(order.getFrameno());
  251. insCompanyFee.setLicenseNo(order.getLicenseno());
  252. insCompanyFee.setInscompany(insAreaCompany.getCompanyId());
  253. insCompanyFee.setAgreeid(insFeeOrder.getAgreementId());
  254. insCompanyFee.setUserid(order.getUserid());
  255. insCompanyFee.setUsername(order.getUsername());
  256. insCompanyFee.setDeptid(order.getDeptid());
  257. insCompanyFee.setDeptname(order.getDeptname());
  258. insCompanyFee.setSettletype("B");
  259. insCompanyFee.setSettlestatus("0");
  260. insCompanyFee.setCreatetime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  261. //保存业务员费用
  262. insCompanyFeeService.insert(insCompanyFee);
  263. }
  264. }