InsFeeAuditServiceImpl.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  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. }
  135. if (insFeeOrder.getSecondDeptPremiums().doubleValue() > 0) {
  136. deptFee.setComcode(order.getDeptid().substring(0, 4)); //99140302M01D01
  137. deptFee.setKeeprate(insFeeOrder.getSecondDeptProportion().setScale(2).doubleValue() * 0.01);
  138. deptFee.setKeepamount(insFeeOrder.getSecondDeptPremiums().doubleValue());
  139. deptFee.setComlevel("二级");
  140. insDeptFeeService.insert(deptFee);
  141. }
  142. if (insFeeOrder.getThirdDeptPremiums().doubleValue() > 0) {
  143. deptFee.setComcode(order.getDeptid().substring(0, 6)); //99140302M01D01
  144. deptFee.setKeeprate(insFeeOrder.getThirdDeptProportion().doubleValue() * 0.01);
  145. deptFee.setKeepamount(insFeeOrder.getThirdDeptPremiums().doubleValue());
  146. deptFee.setComlevel("三级");
  147. insDeptFeeService.insert(deptFee);
  148. }
  149. if (insFeeOrder.getForthDeptPremiums().doubleValue() > 0) {
  150. deptFee.setComcode(order.getDeptid().substring(0, 8)); //99140302M01D01
  151. deptFee.setKeeprate(insFeeOrder.getForthDeptProportion().doubleValue() * 0.01);
  152. deptFee.setKeepamount(insFeeOrder.getForthDeptPremiums().doubleValue());
  153. deptFee.setComlevel("四级");
  154. insDeptFeeService.insert(deptFee);
  155. }
  156. if (insFeeOrder.getFifthDeptPremiums().doubleValue() > 0) {
  157. deptFee.setComcode(order.getDeptid().substring(0, 11)); //99140302M01D01
  158. deptFee.setKeeprate(insFeeOrder.getFifthDeptProportion().doubleValue() * 0.01);
  159. deptFee.setKeepamount(insFeeOrder.getFifthDeptPremiums().doubleValue());
  160. deptFee.setComlevel("五级");
  161. insDeptFeeService.insert(deptFee);
  162. }
  163. }
  164. /**
  165. * 三级分销费用保存
  166. *
  167. * @param order
  168. * @return
  169. */
  170. public void saveRetail(InsOrders order,InsFeeOrder insFeeOrder) throws Exception{
  171. List<String> userlist=new ArrayList<>();
  172. esmUserReferrerService.getUpUser(order.getUserid(),userlist);
  173. //userlist:包括本人在内向上所有人
  174. if(userlist.size()-1>0){
  175. if(userlist.size()-1>=1
  176. &&insFeeOrder.getThirdRetailPremiums().doubleValue()>0)
  177. {//三级分销
  178. SysUser user=sysUserService.getById(userlist.get(1));
  179. InsCommission commission = new InsCommission();
  180. commission.setOrderno(order.getOrderno());
  181. commission.setQuoteno(insFeeOrder.getInsOrderNo());
  182. commission.setRefereescode(user.getId());
  183. commission.setRefereesname(user.getName());
  184. commission.setCommissionrate(insFeeOrder.getThirdRetailProportion().doubleValue()* 0.01);
  185. commission.setCommissionamount(insFeeOrder.getThirdRetailPremiums().doubleValue());
  186. commission.setLevel("3");
  187. commission.setAuditstatus("1"); //0未审核 1已审核
  188. commission.setSettlestatus("0"); //0未结算 1已结算
  189. commission.setInsuredtime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN)); //承保确认时间
  190. insCommissionService.insert(commission);
  191. }
  192. if(userlist.size()-1>=2
  193. &&insFeeOrder.getSecondRetailPremiums().doubleValue()>0)
  194. {//二级分销
  195. SysUser user=sysUserService.getById(userlist.get(2));
  196. InsCommission commission = new InsCommission();
  197. commission.setOrderno(order.getOrderno());
  198. commission.setQuoteno(insFeeOrder.getInsOrderNo());
  199. commission.setRefereescode(user.getId());
  200. commission.setRefereesname(user.getName());
  201. commission.setCommissionrate(insFeeOrder.getSecondRetailProportion().doubleValue()* 0.01);
  202. commission.setCommissionamount(insFeeOrder.getSecondRetailPremiums().doubleValue());
  203. commission.setLevel("2");
  204. commission.setAuditstatus("1"); //0未审核 1已审核
  205. commission.setSettlestatus("0"); //0未结算 1已结算
  206. commission.setInsuredtime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN)); //承保确认时间
  207. insCommissionService.insert(commission);
  208. }
  209. if(userlist.size()-1>=3
  210. &&insFeeOrder.getFirstRetailPremiums().doubleValue()>0)
  211. {//一级分销
  212. SysUser user=sysUserService.getById(userlist.get(3));
  213. InsCommission commission = new InsCommission();
  214. commission.setOrderno(order.getOrderno());
  215. commission.setQuoteno(insFeeOrder.getInsOrderNo());
  216. commission.setRefereescode(user.getId());
  217. commission.setRefereesname(user.getName());
  218. commission.setCommissionrate(insFeeOrder.getFirstRetailProportion().doubleValue()* 0.01);
  219. commission.setCommissionamount(insFeeOrder.getFirstRetailPremiums().doubleValue());
  220. commission.setLevel("1");
  221. commission.setAuditstatus("1"); //0未审核 1已审核
  222. commission.setSettlestatus("0"); //0未结算 1已结算
  223. commission.setInsuredtime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN)); //承保确认时间
  224. insCommissionService.insert(commission);
  225. }
  226. }
  227. }
  228. /**
  229. * 生成个代费用
  230. * @param order
  231. * @param insFeeOrder
  232. * @throws Exception
  233. */
  234. public void saveInsCompanyFee(InsOrders order,InsFeeOrder insFeeOrder) throws Exception {
  235. InsAreaCompany insAreaCompany=insAreaCompanyService.getById(insFeeOrder.getInsOrderNo());
  236. InsCompanyFee insCompanyFee = new InsCompanyFee();
  237. insCompanyFee.setOrderno(order.getOrderno());
  238. BigDecimal dept_rate=insFeeOrder.getFirstDeptProportion()
  239. .add(insFeeOrder.getSecondDeptProportion())
  240. .add(insFeeOrder.getThirdDeptProportion())
  241. .add(insFeeOrder.getForthDeptProportion())
  242. .add(insFeeOrder.getFifthDeptProportion());
  243. BigDecimal retail_rate=insFeeOrder.getFirstRetailProportion()
  244. .add(insFeeOrder.getSecondRetailProportion())
  245. .add(insFeeOrder.getThirdRetailProportion());
  246. //交强费用比例=交强险费用比例-五级机构管理费比例-三级分销比例
  247. insCompanyFee.setFeerate(insFeeOrder.getJqCostsProportion().subtract(dept_rate).subtract(retail_rate).doubleValue());
  248. //商业费用比例=商业险费用比例-五级机构管理费比例-三级分销比例
  249. insCompanyFee.setDisrate(insFeeOrder.getSyCostsProportion().subtract(dept_rate).subtract(retail_rate).doubleValue());
  250. insCompanyFee.setFeeamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getJqCostsProportion().subtract(dept_rate).subtract(retail_rate)).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
  251. insCompanyFee.setDisamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getSyCostsProportion().subtract(dept_rate).subtract(retail_rate)).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
  252. insCompanyFee.setJqpremium(insFeeOrder.getJqNoTaxPremium().doubleValue());
  253. insCompanyFee.setSypremium(insFeeOrder.getSyNoTaxPremium().doubleValue());
  254. insCompanyFee.setFrameNo(order.getFrameno());
  255. insCompanyFee.setLicenseNo(order.getLicenseno());
  256. insCompanyFee.setInscompany(insAreaCompany.getCompanyId());
  257. insCompanyFee.setAgreeid(insFeeOrder.getAgreementId());
  258. insCompanyFee.setUserid(order.getUserid());
  259. insCompanyFee.setUsername(order.getUsername());
  260. insCompanyFee.setDeptid(order.getDeptid());
  261. insCompanyFee.setDeptname(order.getDeptname());
  262. insCompanyFee.setSettletype("B");
  263. insCompanyFee.setSettlestatus("0");
  264. insCompanyFee.setCreatetime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN));
  265. //保存业务员费用
  266. insCompanyFeeService.insert(insCompanyFee);
  267. }
  268. }