InsFeeAuditServiceImpl.java 47 KB

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