InsFeeAuditServiceImpl.java 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908
  1. package com.ydtech.modules.fnc.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import cn.hutool.core.collection.CollUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7. import com.ydtech.constants.enums.dict.FeeAuditAuditstatus;
  8. import com.ydtech.constants.enums.dict.ins.InsFeeAuditDistributionStatusEnum;
  9. import com.ydtech.exception.SystemException;
  10. import com.ydtech.modules.admin.model.SysDept;
  11. import com.ydtech.modules.admin.model.SysDeptAccount;
  12. import com.ydtech.modules.admin.model.SysUser;
  13. import com.ydtech.modules.admin.model.po.SysChannelCost;
  14. import com.ydtech.modules.admin.model.po.SysUserAccount;
  15. import com.ydtech.modules.admin.model.vo.SysUserBaseVO;
  16. import com.ydtech.modules.admin.service.*;
  17. import com.ydtech.modules.base.controller.BaseController;
  18. import com.ydtech.modules.esm.service.EsmUserReferrerService;
  19. import com.ydtech.modules.fnc.dao.FncInsAreaCompanyMapper;
  20. import com.ydtech.modules.fnc.dao.InsFeeAuditMapper;
  21. import com.ydtech.modules.fnc.dao.InsPlyIncomeMapper;
  22. import com.ydtech.modules.fnc.entity.InsAreaCompany;
  23. import com.ydtech.modules.fnc.entity.InsFeeAudit;
  24. import com.ydtech.modules.fnc.entity.InsFeeAuditHistory;
  25. import com.ydtech.modules.fnc.entity.InsPlyIncome;
  26. import com.ydtech.modules.fnc.service.InsFeeAuditHistoryService;
  27. import com.ydtech.modules.fnc.service.InsFeeAuditService;
  28. import com.ydtech.modules.fnc.service.InsPlyIncomeService;
  29. import com.ydtech.modules.ins.model.InsCommission;
  30. import com.ydtech.modules.ins.model.InsCompanyFee;
  31. import com.ydtech.modules.ins.model.InsDeptFee;
  32. import com.ydtech.modules.ins.service.InsCommissionService;
  33. import com.ydtech.modules.ins.service.InsCompanyFeeService;
  34. import com.ydtech.modules.ins.service.InsDeptFeeService;
  35. import com.ydtech.modules.order.dao.InsOrdersMapper;
  36. import com.ydtech.modules.order.entity.InsFeeOrder;
  37. import com.ydtech.modules.order.entity.InsOrders;
  38. import com.ydtech.modules.protocol.service.PtlAgreementService;
  39. import com.ydtech.modules.protocol.utils.AssertionUtils;
  40. import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
  41. import com.ydtech.modules.protocols.entity.po.InsFeeOrderNewDistribution;
  42. import com.ydtech.modules.protocols.service.InsFeeOrderNewDistributionService;
  43. import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
  44. import com.ydtech.utils.DateUtil;
  45. import com.ydtech.utils.StringUtils;
  46. import com.ydtech.utils.idgen.IdGenerate;
  47. import org.apache.commons.lang3.ObjectUtils;
  48. import org.redisson.Redisson;
  49. import org.redisson.api.RLock;
  50. import org.springframework.beans.BeanUtils;
  51. import org.springframework.beans.factory.annotation.Autowired;
  52. import org.springframework.stereotype.Service;
  53. import org.springframework.transaction.annotation.Transactional;
  54. import javax.annotation.Resource;
  55. import java.math.BigDecimal;
  56. import java.time.LocalDateTime;
  57. import java.util.ArrayList;
  58. import java.util.Date;
  59. import java.util.List;
  60. import java.util.concurrent.TimeUnit;
  61. /**
  62. * <p>
  63. * 服务实现类
  64. * </p>
  65. *
  66. * @author gws
  67. * @since 2023-11-22
  68. */
  69. @Service
  70. public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFeeAudit> implements InsFeeAuditService {
  71. private final InsOrdersMapper insOrdersMapper;
  72. private final InsPlyIncomeMapper insPlyIncomeMapper;
  73. private final FncInsAreaCompanyMapper insAreaCompanyMapper;
  74. private final InsDeptFeeService insDeptFeeService;
  75. private final InsCommissionService insCommissionService;
  76. private final InsCompanyFeeService insCompanyFeeService;
  77. private final EsmUserReferrerService esmUserReferrerService;
  78. private final SysUserService sysUserService;
  79. @Autowired
  80. private InsFeeOrderNewService insFeeOrderNewService;
  81. @Autowired
  82. private SysUserAccountService sysUserAccountService;
  83. @Autowired
  84. private SysDeptService sysDeptService;
  85. @Autowired
  86. private SysDeptAccountService sysDeptAccountService;
  87. @Autowired
  88. private SysDeptAccountHistoryService sysDeptAccountHistoryService;
  89. @Autowired
  90. private InsPlyIncomeService insPlyIncomeService;
  91. @Autowired
  92. private InsFeeAuditHistoryService insFeeAuditHistoryService;
  93. @Autowired
  94. private PtlAgreementService ptlAgreementService;
  95. @Autowired
  96. private SysChannelCostService sysChannelCostService;
  97. @Autowired
  98. private Redisson redisson;
  99. @Resource
  100. private InsFeeOrderNewDistributionService insFeeOrderNewDistributionService;
  101. public InsFeeAuditServiceImpl(FncInsAreaCompanyMapper insAreaCompanyMapper, InsOrdersMapper insOrdersMapper,
  102. InsDeptFeeService insDeptFeeService, EsmUserReferrerService esmUserReferrerService,
  103. SysUserService sysUserService, InsCommissionService insCommissionService,
  104. InsCompanyFeeService insCompanyFeeService, InsPlyIncomeMapper insPlyIncomeMapper) {
  105. this.insAreaCompanyMapper = insAreaCompanyMapper;
  106. this.insOrdersMapper = insOrdersMapper;
  107. this.insDeptFeeService = insDeptFeeService;
  108. this.esmUserReferrerService = esmUserReferrerService;
  109. this.sysUserService = sysUserService;
  110. this.insCommissionService = insCommissionService;
  111. this.insCompanyFeeService = insCompanyFeeService;
  112. this.insPlyIncomeMapper = insPlyIncomeMapper;
  113. }
  114. @Override
  115. @Transactional
  116. public void feeAudit(String orderNo, String insOrderNo, boolean isAutoAudit, String auditStatus) {
  117. RLock locked = redisson.getLock("feeAudit." + insOrderNo);
  118. try {
  119. boolean isLock = locked.tryLock(60, 10, TimeUnit.SECONDS);
  120. if (!isLock) {
  121. throw new SystemException("当前业务繁忙,请稍后重试\n");
  122. }
  123. //添加费用审核表及轨迹信息
  124. InsFeeAudit insFeeAudit = saveInsFeeAuditAndHistory(orderNo, insOrderNo, isAutoAudit, auditStatus);
  125. InsOrders order = insOrdersMapper.selectById(orderNo);
  126. InsAreaCompany insAreaCompany = insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo());
  127. //获取该订单的费用
  128. InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper<InsFeeOrderNew>()
  129. .eq(InsFeeOrderNew::getInsOrderNo, insFeeAudit.getInsOrderNo()));
  130. //生成机构费用
  131. gene_deptfee(order, insFeeOrderNew, insAreaCompany);
  132. //结算费用生成
  133. insPlyIncomeService.saveBalanceNew(order, insFeeOrderNew, insAreaCompany);
  134. //生成 用户账户表 数据
  135. if (StringUtils.isNotEmpty(order.getUserid())) {
  136. //用戶賬戶表
  137. SysUserAccount sysUserAccount = new SysUserAccount();
  138. //add by hxl 2024-05-07 begin ==========
  139. //判断当前用户是否是出单员,如果是直接给团队长结算 角色id为19为出单员
  140. String userId = "";
  141. SysUserBaseVO sysUserBaseVO = sysUserService.selectUserById(order.getUserid());
  142. SysUser user = sysUserService.getById(order.getUserid());
  143. SysDept dept = sysDeptService.getById(user.getDeptId());
  144. //出单员是19 且是渠道的话,给渠道团队长
  145. if ("19".equals(sysUserBaseVO.getRoleId()) && "1".equals(dept.getManagementSource())) {
  146. //查找该出单员的的团队长
  147. //找到上级
  148. userId = user.getOperatorCode();
  149. //if (userId == null || "".equals(userId)) {
  150. // throw new SystemException("出单员" + sysUserBaseVO.getName() + "所在机构缺少团队长,请设置!!!");
  151. //}
  152. } else {
  153. userId = order.getUserid();
  154. }
  155. sysUserAccount.setUserId(userId);
  156. // add by hxl 2024-05-07 end ==================
  157. if (ObjectUtils.isNotEmpty(insFeeOrderNew)) {
  158. //用户出口手续费
  159. BigDecimal totalPremiumAmount = new BigDecimal(0);
  160. totalPremiumAmount = totalPremiumAmount.add(insFeeOrderNew.getJqExportSuperviseCostsPremiums())
  161. .add(insFeeOrderNew.getSyExportSuperviseCostsPremiums()).add(insFeeOrderNew.getNoExportSuperviseCostsPremiums());
  162. //用户出口跟单费
  163. BigDecimal totalOtherPremiumAmount = new BigDecimal(0);
  164. totalOtherPremiumAmount =
  165. totalOtherPremiumAmount.add(insFeeOrderNew.getJqExportOtherCostsPremiums()).add(insFeeOrderNew.getSyExportOtherCostsPremiums()).add(insFeeOrderNew.getNoExportOtherCostsPremiums());
  166. //用戶
  167. //算佣金
  168. this.countUserAmount(insFeeOrderNew, insAreaCompany.getId());
  169. sysUserAccount.setHandlingFee(totalPremiumAmount);
  170. sysUserAccount.setDocumentary(totalOtherPremiumAmount);
  171. sysUserAccount.setDocumentaryStatus("2"); // 收入
  172. sysUserAccount.setSuborderId(insAreaCompany.getId()); // 订单Id
  173. sysUserAccountService.addOrUpdate(sysUserAccount);
  174. if (insFeeOrderNew.getDistributionStatus() != null) {
  175. createInsFeeOrderNewDistribution(insFeeOrderNew, insAreaCompany, order, order.getUserid(), BigDecimal.ZERO, BigDecimal.ZERO, "0");
  176. if (insFeeOrderNew.getFirstLevelUserId() != null) {
  177. createInsFeeOrderNewDistribution(insFeeOrderNew, insAreaCompany, order,
  178. insFeeOrderNew.getFirstLevelUserId(), insFeeOrderNew.getFirstDetailProportion(),
  179. insFeeOrderNew.getFirstDetailPremiums(), "1");
  180. }
  181. if (insFeeOrderNew.getTwoLevelUserId() != null) {
  182. createInsFeeOrderNewDistribution(insFeeOrderNew, insAreaCompany, order,
  183. insFeeOrderNew.getTwoLevelUserId(), insFeeOrderNew.getSecondDetailProportion(),
  184. insFeeOrderNew.getSecondDetailPremiums(), "2");
  185. }
  186. if (insFeeOrderNew.getThreeLevelUserId() != null) {
  187. createInsFeeOrderNewDistribution(insFeeOrderNew, insAreaCompany, order,
  188. insFeeOrderNew.getThreeLevelUserId(), insFeeOrderNew.getThirdDetailProportion(),
  189. insFeeOrderNew.getThirdDetailPremiums(), "3");
  190. }
  191. }
  192. String deptid = insFeeOrderNew.getDeptId();
  193. // 定义一个数组来存储各级机构的管理费
  194. BigDecimal[] jqDeptPremiumsLevels = {insFeeOrderNew.getJqDeptPremiumsLevel1(), insFeeOrderNew.getJqDeptPremiumsLevel2(),
  195. insFeeOrderNew.getJqDeptPremiumsLevel3(), insFeeOrderNew.getJqDeptPremiumsLevel4(),
  196. insFeeOrderNew.getJqDeptPremiumsLevel5()};
  197. BigDecimal[] syDeptPremiumsLevels = {insFeeOrderNew.getSyDeptPremiumsLevel1(), insFeeOrderNew.getSyDeptPremiumsLevel2(),
  198. insFeeOrderNew.getSyDeptPremiumsLevel3(), insFeeOrderNew.getSyDeptPremiumsLevel4(),
  199. insFeeOrderNew.getSyDeptPremiumsLevel5()};
  200. BigDecimal[] noDeptPremiumsLevels = {insFeeOrderNew.getNoDeptPremiumsLevel1(), insFeeOrderNew.getNoDeptPremiumsLevel2(),
  201. insFeeOrderNew.getNoDeptPremiumsLevel3(), insFeeOrderNew.getNoDeptPremiumsLevel4(),
  202. insFeeOrderNew.getNoDeptPremiumsLevel5()};
  203. for (int i = 1; i <= 5; i++) {
  204. // 根据循环次数确定机构ID的长度,第五级为11
  205. String levelDeptId = deptid.substring(0, (i == 5) ? 11 : i * 2);
  206. // 获取对应级别的机构信息
  207. SysDeptAccount levelSysDeptAccount = sysDeptAccountService.getOne(new LambdaQueryWrapper<SysDeptAccount>()
  208. .eq(SysDeptAccount::getDeptId, levelDeptId));
  209. // 初始化管理费总额为0
  210. BigDecimal sumManagementFee = BigDecimal.ZERO;
  211. // 根据分销等级和分销用户情况计算分销费用
  212. BigDecimal distributionFee = BigDecimal.ZERO;
  213. if (i == 1) {
  214. if (insFeeOrderNew.getFirstLevelUserId() == null) {
  215. distributionFee = distributionFee.add(insFeeOrderNew.getFirstDetailPremiums());
  216. }
  217. if (insFeeOrderNew.getTwoLevelUserId() == null) {
  218. distributionFee = distributionFee.add(insFeeOrderNew.getSecondDetailPremiums());
  219. }
  220. if (insFeeOrderNew.getThreeLevelUserId() == null) {
  221. distributionFee = distributionFee.add(insFeeOrderNew.getThirdDetailPremiums());
  222. }
  223. }
  224. // 根据分销等级计算管理费总额
  225. sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
  226. .add(syDeptPremiumsLevels[i - 1])
  227. .add(noDeptPremiumsLevels[i - 1]);
  228. if (i == 1) {
  229. sumManagementFee = sumManagementFee.add(distributionFee);
  230. }
  231. // 如果机构信息不为空,更新管理费并记录历史
  232. if (levelSysDeptAccount != null) {
  233. levelSysDeptAccount.setManagementFee(levelSysDeptAccount.getManagementFee().add(sumManagementFee));
  234. sysDeptAccountService.updateById(levelSysDeptAccount);
  235. } else {
  236. // 如果机构信息为空,新建机构信息并记录历史
  237. levelSysDeptAccount = new SysDeptAccount();
  238. levelSysDeptAccount.setDeptId(levelDeptId);
  239. levelSysDeptAccount.setManagementFee(sumManagementFee);
  240. levelSysDeptAccount.setCreateTime(new Date());
  241. sysDeptAccountService.save(levelSysDeptAccount);
  242. }
  243. // 记录历史信息
  244. // 拼接备注
  245. String remark = this.getDeptFeeHistoryLog(i, jqDeptPremiumsLevels, syDeptPremiumsLevels, noDeptPremiumsLevels,
  246. distributionFee);
  247. sysDeptAccountHistoryService.addHistory(levelDeptId, sumManagementFee, levelSysDeptAccount.getManagementFee(), "2",
  248. insOrderNo, BaseController.getUser().getId(), remark);
  249. }
  250. }
  251. }
  252. // 获取加投结算数据 并审核通过
  253. LambdaQueryWrapper<SysChannelCost> costWrapper = new LambdaQueryWrapper<>();
  254. costWrapper.eq(SysChannelCost::getOrderNo, insOrderNo);
  255. List<SysChannelCost> costList = sysChannelCostService.list(costWrapper);
  256. if(CollUtil.isNotEmpty(costList)){
  257. for (SysChannelCost sysChannelCost : costList) {
  258. sysChannelCost.setStatus(1); // 审核通过
  259. sysChannelCost.setPayDate(insAreaCompany.getPayDate());
  260. sysChannelCost.setSigningTime(insAreaCompany.getSigningTime());
  261. sysChannelCost.setUpdateTime(LocalDateTime.now());
  262. sysChannelCost.setUpdateBy(BaseController.getUser().getName());
  263. }
  264. sysChannelCostService.updateBatchById(costList);
  265. }
  266. } catch (Exception e) {
  267. throw new SystemException("当前业务繁忙,请稍后重试");
  268. } finally {
  269. //释放锁
  270. if (locked.isHeldByCurrentThread()) {
  271. locked.unlock();
  272. }
  273. }
  274. }
  275. private void createInsFeeOrderNewDistribution(InsFeeOrderNew insFeeOrderNew, InsAreaCompany insAreaCompany, InsOrders insOrders,
  276. String userId, BigDecimal commissionRate, BigDecimal commissionAmount,
  277. String commissionLevel) {
  278. InsFeeOrderNewDistribution insFeeOrderNewDistribution = new InsFeeOrderNewDistribution();
  279. insFeeOrderNewDistribution.setId(IdGenerate.nextId());
  280. insFeeOrderNewDistribution.setOrderNo(insFeeOrderNew.getInsOrderNo());
  281. insFeeOrderNewDistribution.setJqPolicyNo(insAreaCompany.getJqpolicyno());
  282. insFeeOrderNewDistribution.setSyPolicyNo(insAreaCompany.getSypolicyno());
  283. insFeeOrderNewDistribution.setOperator(insOrders.getUserid());
  284. insFeeOrderNewDistribution.setLicenseNo(insOrders.getLicenseno());
  285. insFeeOrderNewDistribution.setProductId(insAreaCompany.getProductid());
  286. insFeeOrderNewDistribution.setProduct(insAreaCompany.getProduct());
  287. insFeeOrderNewDistribution.setSignTime(insAreaCompany.getSigningTime());
  288. insFeeOrderNewDistribution.setInsCompany(insAreaCompany.getInscompany());
  289. insFeeOrderNewDistribution.setUserId(userId);
  290. insFeeOrderNewDistribution.setCommissionRate(commissionRate);
  291. insFeeOrderNewDistribution.setCommissionAmount(commissionAmount);
  292. insFeeOrderNewDistribution.setCommissionLevel(commissionLevel);
  293. insFeeOrderNewDistribution.setCreateTime(new Date());
  294. // 保存insFeeOrderNewDistribution
  295. insFeeOrderNewDistributionService.save(insFeeOrderNewDistribution);
  296. }
  297. private String getDeptFeeHistoryLog(Integer index, BigDecimal[] jqDeptPremiumsLevels, BigDecimal[] syDeptPremiumsLevels,
  298. BigDecimal[] noDeptPremiumsLevels, BigDecimal distributionFee) {
  299. StringBuilder remarkBuilder = new StringBuilder();
  300. if (jqDeptPremiumsLevels[index - 1].compareTo(BigDecimal.ZERO) != 0) {
  301. remarkBuilder.append("交强").append(index).append("级机构管理费:");
  302. remarkBuilder.append(jqDeptPremiumsLevels[index - 1]).append(",");
  303. }
  304. if (syDeptPremiumsLevels[index - 1].compareTo(BigDecimal.ZERO) != 0) {
  305. remarkBuilder.append("商业").append(index).append("级机构管理费:");
  306. remarkBuilder.append(syDeptPremiumsLevels[index - 1]).append(",");
  307. }
  308. if (noDeptPremiumsLevels[index - 1].compareTo(BigDecimal.ZERO) != 0) {
  309. remarkBuilder.append("非车").append(index).append("级机构管理费:");
  310. remarkBuilder.append(noDeptPremiumsLevels[index - 1]).append(",");
  311. }
  312. if (distributionFee.compareTo(BigDecimal.ZERO) != 0) {
  313. remarkBuilder.append("分销费:").append(distributionFee).append(",");
  314. }
  315. String remark = remarkBuilder.toString();
  316. if (remark.endsWith(",")) {
  317. remark = remark.substring(0, remark.length() - 1);
  318. }
  319. return remark;
  320. }
  321. private void countUserAmount(InsFeeOrderNew insFeeOrderNew, String orderNo) {
  322. String distributionStatus = insFeeOrderNew.getDistributionStatus();
  323. if (StringUtils.isNotEmpty(distributionStatus)) {
  324. if (InsFeeAuditDistributionStatusEnum.DS_3.getCode().equals(distributionStatus)) {
  325. BigDecimal totalDept = BigDecimal.ZERO;
  326. if (StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())) {
  327. String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
  328. BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
  329. this.saveUpdateAccount(firstLevelUserId, firstDetailPremiums, orderNo);
  330. } else {
  331. totalDept = totalDept.add(insFeeOrderNew.getFirstDetailPremiums());
  332. }
  333. if (StringUtils.isNotEmpty(insFeeOrderNew.getTwoLevelUserId())) {
  334. String twoLevelUserId = insFeeOrderNew.getTwoLevelUserId();
  335. BigDecimal secondDetailProportion = insFeeOrderNew.getSecondDetailPremiums();
  336. this.saveUpdateAccount(twoLevelUserId, secondDetailProportion, orderNo);
  337. } else {
  338. totalDept = totalDept.add(insFeeOrderNew.getSecondDetailPremiums());
  339. }
  340. if (StringUtils.isNotEmpty(insFeeOrderNew.getThreeLevelUserId())) {
  341. String threeLevelUserId = insFeeOrderNew.getThreeLevelUserId();
  342. BigDecimal threeDetailPremiums = insFeeOrderNew.getThirdDetailPremiums();
  343. this.saveUpdateAccount(threeLevelUserId, threeDetailPremiums, orderNo);
  344. } else {
  345. totalDept = totalDept.add(insFeeOrderNew.getThirdDetailPremiums());
  346. }
  347. // 机构管理 费用给五级交钱机构管理费
  348. if (totalDept.compareTo(BigDecimal.ZERO) == 0) {
  349. BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
  350. jqDeptPremiumsLevel5.add(totalDept);
  351. insFeeOrderNewService.updateById(insFeeOrderNew);
  352. }
  353. } else if (InsFeeAuditDistributionStatusEnum.DS_2.getCode().equals(distributionStatus)) {
  354. BigDecimal totalDept = BigDecimal.ZERO;
  355. if (StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())) {
  356. String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
  357. BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
  358. this.saveUpdateAccount(firstLevelUserId, firstDetailPremiums, orderNo);
  359. } else {
  360. totalDept = totalDept.add(insFeeOrderNew.getFirstDetailPremiums());
  361. }
  362. if (StringUtils.isNotEmpty(insFeeOrderNew.getTwoLevelUserId())) {
  363. String twoLevelUserId = insFeeOrderNew.getTwoLevelUserId();
  364. BigDecimal secondDetailProportion = insFeeOrderNew.getSecondDetailPremiums();
  365. this.saveUpdateAccount(twoLevelUserId, secondDetailProportion, orderNo);
  366. } else {
  367. totalDept = totalDept.add(insFeeOrderNew.getSecondDetailPremiums());
  368. }
  369. // 机构管理 费用给五级交钱机构管理费
  370. if (totalDept.compareTo(BigDecimal.ZERO) == 0) {
  371. BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
  372. jqDeptPremiumsLevel5.add(totalDept);
  373. insFeeOrderNewService.updateById(insFeeOrderNew);
  374. }
  375. } else {
  376. // 一级分销
  377. if (StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())) {
  378. String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
  379. BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
  380. this.saveUpdateAccount(firstLevelUserId, firstDetailPremiums, orderNo);
  381. } else {
  382. if (insFeeOrderNew.getFirstDetailPremiums().compareTo(BigDecimal.ZERO) == 0) {
  383. BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
  384. jqDeptPremiumsLevel5.add(insFeeOrderNew.getFirstDetailPremiums());
  385. insFeeOrderNewService.updateById(insFeeOrderNew);
  386. }
  387. }
  388. }
  389. }
  390. }
  391. private void saveUpdateAccount(String userId, BigDecimal amount, String orderNo) {
  392. SysUserAccount sysUserOldAccount = new SysUserAccount();
  393. sysUserOldAccount.setUserId(userId);
  394. sysUserOldAccount.setPromotion(amount);
  395. sysUserOldAccount.setDocumentaryStatus("2"); // 收入
  396. sysUserOldAccount.setSuborderId(orderNo);
  397. sysUserAccountService.addOrUpdate(sysUserOldAccount);
  398. }
  399. private BigDecimal zeroBigdecimal(BigDecimal amount) {
  400. if (amount == null) {
  401. return amount = BigDecimal.ZERO;
  402. } else {
  403. return amount;
  404. }
  405. }
  406. /**
  407. * 生成保司费用(应收费用)
  408. *
  409. * @param order
  410. * @param insFeeOrder
  411. * @throws Exception
  412. */
  413. private void gene_orderIncome(InsOrders order, InsFeeOrderNew insFeeOrder, InsAreaCompany plyDto) throws Exception {
  414. InsPlyIncome insPlyIncome = new InsPlyIncome();
  415. insPlyIncome.setOrderno(order.getOrderno());
  416. insPlyIncome.setDeptId(order.getDeptid());
  417. insPlyIncome.setCompanyId(plyDto.getCompanyId());
  418. insPlyIncome.setAgreementId(String.valueOf(plyDto.getAgreementId()));
  419. insPlyIncome.setLicenseno(order.getLicenseno());
  420. insPlyIncome.setPayDate(StringUtils.isNullOrEmpty(plyDto.getPayDate()) ? plyDto.getCreatetime() : plyDto.getPayDate());
  421. insPlyIncome.setSignDate(StringUtils.isNullOrEmpty(plyDto.getInsidePayTime()) ? plyDto.getPayDate() : plyDto.getInsidePayTime());
  422. insPlyIncome.setCreateTime(LocalDateTime.now());
  423. if (StringUtils.isNotEmpty(plyDto.getJqpolicyno())) {
  424. insPlyIncome.setPolicyno(plyDto.getJqpolicyno());
  425. insPlyIncome.setRiskcode("交强");
  426. insPlyIncome.setTaxamount(plyDto.getTaxamount());
  427. if (!ObjectUtils.isEmpty(insFeeOrder)) {
  428. insPlyIncome.setNoTaxPremium(insFeeOrder.getJqNoTaxPremium());
  429. insPlyIncome.setCommissionFeerate(insFeeOrder.getJqSuperviseCostsProportion());
  430. insPlyIncome.setOtherFeerate(insFeeOrder.getJqCostsProportion().subtract(insFeeOrder.getJqSuperviseCostsProportion()));
  431. insPlyIncome.setCommissionFeevalue(insFeeOrder.getJqSuperviseCostsPremiums());
  432. insPlyIncome.setOtherFeevalue(insFeeOrder.getJqCostsPremiums().subtract(insFeeOrder.getJqSuperviseCostsPremiums()));
  433. insPlyIncome.setAllFeeValue(insFeeOrder.getJqCostsPremiums());
  434. }
  435. insPlyIncomeMapper.insert(insPlyIncome);
  436. }
  437. if (StringUtils.isNotEmpty(plyDto.getSypolicyno())) {
  438. insPlyIncome.setPolicyno(plyDto.getSypolicyno());
  439. insPlyIncome.setRiskcode("商业");
  440. insPlyIncome.setTaxamount(new BigDecimal(0));
  441. if (!ObjectUtils.isEmpty(insFeeOrder)) {
  442. insPlyIncome.setNoTaxPremium(insFeeOrder.getSyNoTaxPremium());
  443. insPlyIncome.setCommissionFeerate(insFeeOrder.getSySuperviseCostsProportion());
  444. insPlyIncome.setOtherFeerate(insFeeOrder.getSyCostsProportion().subtract(insFeeOrder.getSySuperviseCostsProportion()));
  445. insPlyIncome.setCommissionFeevalue(insFeeOrder.getSySuperviseCostsPremiums());
  446. insPlyIncome.setOtherFeevalue(insFeeOrder.getSyCostsPremiums().subtract(insFeeOrder.getSySuperviseCostsPremiums()));
  447. insPlyIncome.setAllFeeValue(insFeeOrder.getSyCostsPremiums());
  448. }
  449. insPlyIncomeMapper.insert(insPlyIncome);
  450. }
  451. }
  452. /**
  453. * 生成机构费用
  454. *
  455. * @param order
  456. * @param insFeeOrder
  457. * @throws Exception
  458. */
  459. private void gene_deptfee(InsOrders order, InsFeeOrderNew insFeeOrder, InsAreaCompany plyDto) {
  460. InsDeptFee deptFee = new InsDeptFee();
  461. deptFee.setOrderno(order.getOrderno());
  462. if (!ObjectUtils.isEmpty(insFeeOrder)) {
  463. deptFee.setQuoteno(insFeeOrder.getInsOrderNo());
  464. }
  465. deptFee.setAgreeid(String.valueOf(plyDto.getAgreementId()));
  466. deptFee.setAuditstatus("1");
  467. deptFee.setSettlestatus("0");
  468. if (plyDto.getInsidePayTime() != null) {
  469. deptFee.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(), DateUtil.FULL_TIME_SPLIT_PATTERN));
  470. }
  471. deptFee.setInscompany(plyDto.getCompanyId());
  472. if (StringUtils.isNotEmpty(plyDto.getJqpolicyno())) {
  473. deptFee.setPolicyno(plyDto.getJqpolicyno());
  474. deptFee.setRiskcode("交强");
  475. deptFee.setLicenseno(order.getLicenseno());
  476. geneJqInsDeptFee(order, insFeeOrder, deptFee);
  477. }
  478. if (StringUtils.isNotEmpty(plyDto.getSypolicyno())) {
  479. deptFee.setPolicyno(plyDto.getSypolicyno());
  480. deptFee.setRiskcode("商业");
  481. deptFee.setLicenseno(order.getLicenseno());
  482. geneSyInsDeptFee(order, insFeeOrder, deptFee);
  483. }
  484. }
  485. private void geneJqInsDeptFee(InsOrders order, InsFeeOrderNew insFeeOrder, InsDeptFee deptFee) {
  486. if (!ObjectUtils.isEmpty(insFeeOrder)) {
  487. if (insFeeOrder.getJqDeptPremiumsLevel1().doubleValue() > 0) {
  488. deptFee.setComcode(order.getDeptid().substring(0, 2)); //99140302M01D01
  489. deptFee.setComlevel("一级");
  490. insDeptFeeService.insert(deptFee);
  491. }
  492. if (insFeeOrder.getJqDeptPremiumsLevel2().doubleValue() > 0) {
  493. deptFee.setComcode(order.getDeptid().substring(0, 4)); //99140302M01D01
  494. deptFee.setComlevel("二级");
  495. insDeptFeeService.insert(deptFee);
  496. }
  497. if (insFeeOrder.getJqDeptPremiumsLevel3().doubleValue() > 0) {
  498. deptFee.setComcode(order.getDeptid().substring(0, 6)); //99140302M01D01
  499. deptFee.setComlevel("三级");
  500. insDeptFeeService.insert(deptFee);
  501. }
  502. if (insFeeOrder.getJqDeptPremiumsLevel4().doubleValue() > 0) {
  503. deptFee.setComcode(order.getDeptid().substring(0, 8)); //99140302M01D01
  504. deptFee.setComlevel("四级");
  505. insDeptFeeService.insert(deptFee);
  506. }
  507. if (insFeeOrder.getJqDeptPremiumsLevel5().doubleValue() > 0) {
  508. deptFee.setComcode(order.getDeptid().substring(0, 11)); //99140302M01D01
  509. deptFee.setComlevel("五级");
  510. insDeptFeeService.insert(deptFee);
  511. }
  512. }
  513. }
  514. private void geneSyInsDeptFee(InsOrders order, InsFeeOrderNew insFeeOrder, InsDeptFee deptFee) {
  515. if (!ObjectUtils.isEmpty(insFeeOrder)) {
  516. if (insFeeOrder.getSyDeptPremiumsLevel1().doubleValue() > 0) {
  517. deptFee.setComcode(order.getDeptid().substring(0, 2)); //99140302M01D01
  518. deptFee.setComlevel("一级");
  519. insDeptFeeService.insert(deptFee);
  520. }
  521. if (insFeeOrder.getSyDeptPremiumsLevel2().doubleValue() > 0) {
  522. deptFee.setComcode(order.getDeptid().substring(0, 4)); //99140302M01D01
  523. deptFee.setComlevel("二级");
  524. insDeptFeeService.insert(deptFee);
  525. }
  526. if (insFeeOrder.getSyDeptPremiumsLevel3().doubleValue() > 0) {
  527. deptFee.setComcode(order.getDeptid().substring(0, 6)); //99140302M01D01
  528. deptFee.setComlevel("三级");
  529. insDeptFeeService.insert(deptFee);
  530. }
  531. if (insFeeOrder.getSyDeptPremiumsLevel4().doubleValue() > 0) {
  532. deptFee.setComcode(order.getDeptid().substring(0, 8)); //99140302M01D01
  533. deptFee.setComlevel("四级");
  534. insDeptFeeService.insert(deptFee);
  535. }
  536. if (insFeeOrder.getSyDeptPremiumsLevel5().doubleValue() > 0) {
  537. deptFee.setComcode(order.getDeptid().substring(0, 11)); //99140302M01D01
  538. deptFee.setComlevel("五级");
  539. insDeptFeeService.insert(deptFee);
  540. }
  541. }
  542. }
  543. /**
  544. * 三级分销费用保存
  545. *
  546. * @param order
  547. * @return
  548. */
  549. public void saveRetail(InsOrders order, InsFeeOrder insFeeOrder, InsAreaCompany plyDto) throws Exception {
  550. List<String> userlist = new ArrayList<>();
  551. esmUserReferrerService.getUpUser(order.getUserid(), userlist);
  552. //userlist:包括本人在内向上所有人
  553. if (userlist.size() - 1 > 0) {
  554. if (userlist.size() - 1 >= 1
  555. && insFeeOrder.getThirdRetailPremiums().doubleValue() > 0) {//三级分销
  556. SysUser user = sysUserService.getById(userlist.get(1));
  557. InsCommission commission = new InsCommission();
  558. commission.setOrderno(order.getOrderno());
  559. commission.setQuoteno(insFeeOrder.getInsOrderNo());
  560. commission.setDeptid(order.getDeptid());
  561. commission.setDeptname(order.getDeptname());
  562. commission.setInscompany(plyDto.getCompanyId());
  563. commission.setAgreeid(String.valueOf(plyDto.getAgreementId()));
  564. commission.setRefereescode(user.getId());
  565. commission.setRefereesname(user.getName());
  566. commission.setLevel("3");
  567. commission.setAuditstatus("1"); //0未审核 1已审核
  568. commission.setSettlestatus("0"); //0未结算 1已结算
  569. commission.setInsuredtime(DateUtil.formatFullTime(plyDto.getPayDate(), DateUtil.FULL_TIME_SPLIT_PATTERN));
  570. commission.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(), DateUtil.FULL_TIME_SPLIT_PATTERN));
  571. if (StringUtils.isNotEmpty(plyDto.getJqpolicyno())) {
  572. commission.setPolicyno(plyDto.getJqpolicyno());
  573. commission.setRiskcode("交强");
  574. commission.setLicenseno(order.getLicenseno());
  575. commission.setCommissionrate(insFeeOrder.getThirdRetailProportion().doubleValue());
  576. commission.setCommissionamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getThirdRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  577. insCommissionService.insert(commission);
  578. }
  579. if (StringUtils.isNotEmpty(plyDto.getSypolicyno())) {
  580. commission.setPolicyno(plyDto.getSypolicyno());
  581. commission.setRiskcode("商业");
  582. commission.setLicenseno(order.getLicenseno());
  583. commission.setCommissionrate(insFeeOrder.getThirdRetailProportion().doubleValue());
  584. commission.setCommissionamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getThirdRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  585. insCommissionService.insert(commission);
  586. }
  587. }
  588. if (userlist.size() - 1 >= 2
  589. && insFeeOrder.getSecondRetailPremiums().doubleValue() > 0) {//二级分销
  590. SysUser user = sysUserService.getById(userlist.get(2));
  591. InsCommission commission = new InsCommission();
  592. commission.setOrderno(order.getOrderno());
  593. commission.setQuoteno(insFeeOrder.getInsOrderNo());
  594. commission.setDeptid(order.getDeptid());
  595. commission.setDeptname(order.getDeptname());
  596. commission.setInscompany(plyDto.getCompanyId());
  597. commission.setAgreeid(String.valueOf(plyDto.getAgreementId()));
  598. commission.setRefereescode(user.getId());
  599. commission.setRefereesname(user.getName());
  600. // commission.setCommissionrate(insFeeOrder.getSecondRetailProportion().doubleValue());
  601. // commission.setCommissionamount(insFeeOrder.getSecondRetailPremiums().doubleValue());
  602. commission.setLevel("2");
  603. commission.setAuditstatus("1"); //0未审核 1已审核
  604. commission.setSettlestatus("0"); //0未结算 1已结算
  605. commission.setInsuredtime(DateUtil.formatFullTime(plyDto.getPayDate(), DateUtil.FULL_TIME_SPLIT_PATTERN));
  606. commission.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(), DateUtil.FULL_TIME_SPLIT_PATTERN));
  607. if (StringUtils.isNotEmpty(plyDto.getJqpolicyno())) {
  608. commission.setPolicyno(plyDto.getJqpolicyno());
  609. commission.setRiskcode("交强");
  610. commission.setLicenseno(order.getLicenseno());
  611. commission.setCommissionrate(insFeeOrder.getSecondRetailProportion().doubleValue());
  612. commission.setCommissionamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getSecondRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  613. insCommissionService.insert(commission);
  614. }
  615. if (StringUtils.isNotEmpty(plyDto.getSypolicyno())) {
  616. commission.setPolicyno(plyDto.getSypolicyno());
  617. commission.setRiskcode("商业");
  618. commission.setLicenseno(order.getLicenseno());
  619. commission.setCommissionrate(insFeeOrder.getSecondRetailProportion().doubleValue());
  620. commission.setCommissionamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getSecondRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  621. insCommissionService.insert(commission);
  622. }
  623. }
  624. if (userlist.size() - 1 >= 3
  625. && insFeeOrder.getFirstRetailPremiums().doubleValue() > 0) {//一级分销
  626. SysUser user = sysUserService.getById(userlist.get(3));
  627. InsCommission commission = new InsCommission();
  628. commission.setOrderno(order.getOrderno());
  629. commission.setQuoteno(insFeeOrder.getInsOrderNo());
  630. commission.setDeptid(order.getDeptid());
  631. commission.setDeptname(order.getDeptname());
  632. commission.setInscompany(plyDto.getCompanyId());
  633. commission.setAgreeid(String.valueOf(plyDto.getAgreementId()));
  634. commission.setRefereescode(user.getId());
  635. commission.setRefereesname(user.getName());
  636. // commission.setCommissionrate(insFeeOrder.getFirstRetailProportion().doubleValue());
  637. // commission.setCommissionamount(insFeeOrder.getFirstRetailPremiums().doubleValue());
  638. commission.setLevel("1");
  639. commission.setAuditstatus("1"); //0未审核 1已审核
  640. commission.setSettlestatus("0"); //0未结算 1已结算
  641. commission.setInsuredtime(DateUtil.formatFullTime(plyDto.getPayDate(), DateUtil.FULL_TIME_SPLIT_PATTERN));
  642. commission.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(), DateUtil.FULL_TIME_SPLIT_PATTERN));
  643. if (StringUtils.isNotEmpty(plyDto.getJqpolicyno())) {
  644. commission.setPolicyno(plyDto.getJqpolicyno());
  645. commission.setRiskcode("交强");
  646. commission.setLicenseno(order.getLicenseno());
  647. commission.setCommissionrate(insFeeOrder.getFirstRetailProportion().doubleValue());
  648. commission.setCommissionamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getFirstRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  649. insCommissionService.insert(commission);
  650. }
  651. if (StringUtils.isNotEmpty(plyDto.getSypolicyno())) {
  652. commission.setPolicyno(plyDto.getSypolicyno());
  653. commission.setRiskcode("商业");
  654. commission.setLicenseno(order.getLicenseno());
  655. commission.setCommissionrate(insFeeOrder.getFirstRetailProportion().doubleValue());
  656. commission.setCommissionamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getFirstRetailProportion()).divide(new BigDecimal(100)).doubleValue());
  657. insCommissionService.insert(commission);
  658. }
  659. }
  660. }
  661. }
  662. /**
  663. * 生成个代费用
  664. *
  665. * @param order
  666. * @param insFeeOrder
  667. * @throws Exception
  668. */
  669. public void saveInsCompanyFee(InsOrders order, InsFeeOrder insFeeOrder, InsAreaCompany plyDto) throws Exception {
  670. InsCompanyFee insCompanyFee = new InsCompanyFee();
  671. insCompanyFee.setOrderno(order.getOrderno());
  672. insCompanyFee.setFrameNo(order.getFrameno());
  673. insCompanyFee.setLicenseNo(order.getLicenseno());
  674. insCompanyFee.setInscompany(plyDto.getCompanyId());
  675. insCompanyFee.setAgreeid(String.valueOf(plyDto.getAgreementId()));
  676. insCompanyFee.setUserid(order.getUserid());
  677. insCompanyFee.setUsername(order.getUsername());
  678. insCompanyFee.setDeptid(order.getDeptid());
  679. insCompanyFee.setDeptname(order.getDeptname());
  680. insCompanyFee.setSettletype("B");
  681. insCompanyFee.setSettlestatus("0");
  682. insCompanyFee.setCreatetime(DateUtil.getDateFormat(new Date(), DateUtil.FULL_TIME_SPLIT_PATTERN));
  683. if (plyDto.getInsidePayTime() != null) {
  684. insCompanyFee.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(), DateUtil.FULL_TIME_SPLIT_PATTERN));
  685. }
  686. if (ObjectUtils.isNotEmpty(insFeeOrder)) {
  687. BigDecimal dept_rate = insFeeOrder.getFirstDeptProportion()
  688. .add(insFeeOrder.getSecondDeptProportion())
  689. .add(insFeeOrder.getThirdDeptProportion())
  690. .add(insFeeOrder.getForthDeptProportion())
  691. .add(insFeeOrder.getFifthDeptProportion());
  692. BigDecimal retail_rate = insFeeOrder.getFirstRetailProportion()
  693. .add(insFeeOrder.getSecondRetailProportion())
  694. .add(insFeeOrder.getThirdRetailProportion());
  695. if (StringUtils.isNotEmpty(plyDto.getJqpolicyno())) {
  696. insCompanyFee.setPolicyno(plyDto.getJqpolicyno());
  697. insCompanyFee.setRiskcode("交强");
  698. //交强费用比例=交强险费用比例-五级机构管理费比例-三级分销比例
  699. insCompanyFee.setFeerate(insFeeOrder.getJqCostsProportion().subtract(dept_rate).subtract(retail_rate).doubleValue());
  700. insCompanyFee.setFeeamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getJqCostsProportion().subtract(dept_rate).subtract(retail_rate)).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  701. insCompanyFee.setJqpremium(insFeeOrder.getJqNoTaxPremium().doubleValue());
  702. //保存业务员费用
  703. insCompanyFeeService.insert(insCompanyFee);
  704. }
  705. if (StringUtils.isNotEmpty(plyDto.getSypolicyno())) {
  706. insCompanyFee.setPolicyno(plyDto.getSypolicyno());
  707. insCompanyFee.setRiskcode("商业");
  708. insCompanyFee.setFeerate(0);
  709. insCompanyFee.setFeeamount(0);
  710. insCompanyFee.setJqpremium(0);
  711. //商业费用比例=商业险费用比例-五级机构管理费比例-三级分销比例
  712. insCompanyFee.setDisrate(insFeeOrder.getSyCostsProportion().subtract(dept_rate).subtract(retail_rate).doubleValue());
  713. insCompanyFee.setDisamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getSyCostsProportion().subtract(dept_rate).subtract(retail_rate)).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
  714. insCompanyFee.setSypremium(insFeeOrder.getSyNoTaxPremium().doubleValue());
  715. //保存业务员费用
  716. insCompanyFeeService.insert(insCompanyFee);
  717. }
  718. }
  719. }
  720. /**
  721. * 保存保险费用审核信息及审核历史。
  722. *
  723. * @param orderNo 订单号
  724. * @param insOrderNo 保险订单号
  725. * @param isAutoAudit 是否自动审核,true表示自动审核,false表示人工审核
  726. * @param auditstatus 审核状态码
  727. */
  728. @Override
  729. @Transactional
  730. public InsFeeAudit saveInsFeeAuditAndHistory(String orderNo, String insOrderNo, boolean isAutoAudit, String auditstatus) {
  731. //查询费用审核表
  732. InsFeeAudit insFeeAudit = getOne(new LambdaQueryWrapper<InsFeeAudit>().eq(InsFeeAudit::getInsOrderNo, insOrderNo));
  733. if (insFeeAudit != null && insFeeAudit.getAuditstatus().equals("1")) {
  734. throw new SystemException("该订单费用已审核,请刷新页面");
  735. }
  736. String userId;
  737. // 填充审核人
  738. if (isAutoAudit) {
  739. userId = "自动审核";
  740. } else {
  741. userId = StpUtil.getLoginId().toString();
  742. }
  743. //添加审核轨迹表
  744. InsFeeAuditHistory insFeeAuditHistory = new InsFeeAuditHistory();
  745. if (insFeeAudit == null) {
  746. insFeeAudit = new InsFeeAudit();
  747. // 设置订单号和保险订单号
  748. insFeeAudit.setAudituser(userId);
  749. insFeeAudit.setOrderno(orderNo);
  750. insFeeAudit.setInsOrderNo(insOrderNo);
  751. insFeeAudit.setAudittime(LocalDateTime.now());
  752. insFeeAudit.setAuditstatus(auditstatus);
  753. this.save(insFeeAudit);
  754. } else {
  755. //状态码为已审核且数据不为空,则更新审核状态
  756. insFeeAudit.setAuditstatus(FeeAuditAuditstatus.PASSED.getCode());
  757. insFeeAudit.setAudittime(LocalDateTime.now());
  758. insFeeAudit.setAudituser(userId);
  759. boolean update = this.update(insFeeAudit, new LambdaUpdateWrapper<InsFeeAudit>()
  760. .eq(InsFeeAudit::getAuditstatus, FeeAuditAuditstatus.UNREVICEWED.getCode())
  761. .eq(InsFeeAudit::getInsOrderNo, insOrderNo)
  762. );
  763. AssertionUtils.isSucceed(update, "审核状态异常");
  764. }
  765. //复制审核对象的属性
  766. BeanUtils.copyProperties(insFeeAudit, insFeeAuditHistory);
  767. InsAreaCompany insAreaCompany = insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo());
  768. // 设置操作时间和操作人及保险公司名称
  769. insFeeAuditHistory.setInsCompany(insAreaCompany.getInscompany());
  770. insFeeAuditHistory.setOperatorTime(LocalDateTime.now());
  771. insFeeAuditHistory.setOperator(BaseController.getUser().getName());
  772. // 保存审核轨迹
  773. insFeeAuditHistoryService.save(insFeeAuditHistory);
  774. return insFeeAudit;
  775. }
  776. @Override
  777. public InsFeeAudit saveDefaultInsFeeAuditAndHistory(String orderNo, String insOrderNo, String auditstatus, String rejectInfo) {
  778. //查询费用审核表
  779. InsFeeAudit insFeeAudit = getOne(new LambdaQueryWrapper<InsFeeAudit>()
  780. .eq(InsFeeAudit::getOrderno, orderNo)
  781. .eq(InsFeeAudit::getInsOrderNo, insOrderNo));
  782. //添加审核轨迹表
  783. InsFeeAuditHistory insFeeAuditHistory = new InsFeeAuditHistory();
  784. if (insFeeAudit == null) {
  785. insFeeAudit = new InsFeeAudit();
  786. // 设置订单号和保险订单号
  787. insFeeAudit.setOrderno(orderNo);
  788. insFeeAudit.setInsOrderNo(insOrderNo);
  789. insFeeAudit.setAuditstatus(auditstatus);
  790. this.save(insFeeAudit);
  791. } else {
  792. //状态码为已审核且数据不为空,则更新审核状态
  793. //如果审核状态为已审核则一直都是已审核
  794. if (insFeeAudit.getAuditstatus().equals(FeeAuditAuditstatus.PASSED.getCode())) {
  795. insFeeAudit.setAuditstatus(insFeeAudit.getAuditstatus());
  796. } else {
  797. insFeeAudit.setAuditstatus(auditstatus);
  798. }
  799. insFeeAudit.setAudituser(BaseController.getUser().getName());
  800. insFeeAudit.setAudittime(LocalDateTime.now());
  801. insFeeAudit.setRejectinfo(rejectInfo);
  802. this.update(insFeeAudit, new LambdaUpdateWrapper<InsFeeAudit>()
  803. .eq(InsFeeAudit::getOrderno, orderNo)
  804. .eq(InsFeeAudit::getInsOrderNo, insOrderNo));
  805. }
  806. //复制审核对象的属性
  807. BeanUtils.copyProperties(insFeeAudit, insFeeAuditHistory);
  808. InsAreaCompany insAreaCompany = insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo());
  809. // 设置操作时间和操作人及保险公司名称
  810. insFeeAuditHistory.setInsCompany(insAreaCompany.getInscompany());
  811. insFeeAuditHistory.setOperatorTime(LocalDateTime.now());
  812. insFeeAuditHistory.setOperator(BaseController.getUser().getName());
  813. // 保存审核轨迹
  814. insFeeAuditHistoryService.save(insFeeAuditHistory);
  815. return insFeeAudit;
  816. }
  817. /**
  818. * 获取费用审核 根据子订单id
  819. *
  820. * @return
  821. */
  822. @Override
  823. public InsFeeAudit getFeeAuditByInsOrderNo(String insOrderNo) {
  824. LambdaQueryWrapper<InsFeeAudit> queryWrapper = new LambdaQueryWrapper<>();
  825. queryWrapper.eq(InsFeeAudit::getInsOrderNo, insOrderNo);
  826. return this.getOne(queryWrapper);
  827. }
  828. }