PtlAgreementServiceImpl.java 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719
  1. package com.ydtech.modules.protocol.service.impl;
  2. import cn.hutool.core.date.DateUtil;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7. import com.ydtech.config.DictEnumConfig;
  8. import com.ydtech.constants.enums.dict.DictionaryData;
  9. import com.ydtech.constants.enums.dict.DictionaryManagement;
  10. import com.ydtech.constants.enums.dict.agreement.AgreementType;
  11. import com.ydtech.core.page.HttpResult;
  12. import com.ydtech.core.page.PageResult;
  13. import com.ydtech.exception.SystemException;
  14. import com.ydtech.modules.esm.model.EsmInsCompany;
  15. import com.ydtech.modules.esm.service.EsmInsCompanyService;
  16. import com.ydtech.modules.order.service.InsCrawlerOrderService;
  17. import com.ydtech.modules.protocol.constants.HistoryStatusConstants;
  18. import com.ydtech.modules.protocol.dao.PtlAgreementMapper;
  19. import com.ydtech.modules.protocol.entity.constants.PtlApiType;
  20. import com.ydtech.modules.protocol.entity.dto.PtlAgreementAttributionDto;
  21. import com.ydtech.modules.protocol.entity.dto.PtlAgreementDto;
  22. import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
  23. import com.ydtech.modules.protocol.entity.dto.PtlAgreementSaveDto;
  24. import com.ydtech.modules.protocol.entity.dto.history.PtlAgreementUndwrtRulesHistory;
  25. import com.ydtech.modules.protocol.entity.po.*;
  26. import com.ydtech.modules.protocol.entity.vo.*;
  27. import com.ydtech.modules.protocol.service.*;
  28. import com.ydtech.modules.protocol.utils.AssertionUtils;
  29. import com.ydtech.utils.idgen.IdGenerate;
  30. import org.apache.commons.lang3.ObjectUtils;
  31. import org.apache.commons.lang3.StringUtils;
  32. import org.springframework.beans.BeanUtils;
  33. import org.springframework.beans.factory.annotation.Autowired;
  34. import org.springframework.context.annotation.Lazy;
  35. import org.springframework.stereotype.Service;
  36. import org.springframework.transaction.annotation.Transactional;
  37. import java.time.LocalDate;
  38. import java.time.LocalDateTime;
  39. import java.time.LocalTime;
  40. import java.time.format.DateTimeFormatter;
  41. import java.util.*;
  42. import java.util.stream.Collectors;
  43. /**
  44. * @author wenks
  45. * @description 针对表【ptl_agreement(协议信息表)】的数据库操作Service实现
  46. * @createDate 2023-06-05 17:59:52
  47. */
  48. @Service
  49. public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, PtlAgreement> implements PtlAgreementService {
  50. private final PtlAgreementProductCostsService ptlAgreementProductCostsService;
  51. private final PtlAgreementAttributionService ptlAgreementAttributionService;
  52. private final PtlAgreementDeptService ptlAgreementDeptService;
  53. private final EsmInsCompanyService esmInsCompanyService;
  54. private final InsCrawlerOrderService insCrawlerOrderController;
  55. private final PtlAgreementService proxyObject;
  56. private final PtlAgreementHistoryService ptlAgreementHistoryService;
  57. private final PtlNonCarInsuranceProductService ptlNonCarInsuranceProductService;
  58. private final PtlAgreementNonCarProductCostsService ptlAgreementNonCarProductCostsService;
  59. private final PtlAgreementUndwrtRulesService ptlAgreementUndwrtRulesService;
  60. private final PtlAgreementProductCostsHistoryService ptlAgreementProductCostsHistoryService;
  61. private final PtlAgreementUndwrtRulesHistoryService ptlAgreementUndwrtRulesHistoryService;
  62. private final PtlAgreementAttributionHistoryService ptlAgreementAttributionHistoryService;
  63. @Autowired
  64. private PtlAgreementDeptHistoryService ptlAgreementDeptHistoryService;
  65. public PtlAgreementServiceImpl(PtlAgreementProductCostsService ptlAgreementProductCostsService,
  66. PtlAgreementAttributionService ptlAgreementAttributionService, PtlAgreementDeptService ptlAgreementDeptService,
  67. EsmInsCompanyService esmInsCompanyService, PtlAgreementNonCarProductCostsService ptlAgreementNonCarProductCostsService,
  68. @Lazy InsCrawlerOrderService insCrawlerOrderController, @Lazy PtlAgreementService proxyObject, PtlNonCarInsuranceProductService ptlNonCarInsuranceProductService, @Lazy PtlAgreementUndwrtRulesService ptlAgreementUndwrtRulesService,
  69. PtlAgreementHistoryService ptlAgreementHistoryService, PtlAgreementProductCostsHistoryService ptlAgreementProductCostsHistoryService,
  70. PtlAgreementUndwrtRulesHistoryService ptlAgreementUndwrtRulesHistoryService, PtlAgreementAttributionHistoryService ptlAgreementAttributionHistoryService) {
  71. this.ptlAgreementProductCostsService = ptlAgreementProductCostsService;
  72. this.ptlAgreementAttributionService = ptlAgreementAttributionService;
  73. this.ptlAgreementDeptService = ptlAgreementDeptService;
  74. this.esmInsCompanyService = esmInsCompanyService;
  75. this.ptlAgreementNonCarProductCostsService = ptlAgreementNonCarProductCostsService;
  76. this.insCrawlerOrderController = insCrawlerOrderController;
  77. this.proxyObject = proxyObject;
  78. this.ptlNonCarInsuranceProductService = ptlNonCarInsuranceProductService;
  79. this.ptlAgreementUndwrtRulesService = ptlAgreementUndwrtRulesService;
  80. this.ptlAgreementHistoryService = ptlAgreementHistoryService;
  81. this.ptlAgreementProductCostsHistoryService = ptlAgreementProductCostsHistoryService;
  82. this.ptlAgreementUndwrtRulesHistoryService = ptlAgreementUndwrtRulesHistoryService;
  83. this.ptlAgreementAttributionHistoryService = ptlAgreementAttributionHistoryService;
  84. }
  85. @Override
  86. public List<PtlAgreementInsCompanyDto> getAgreementCompany(String deptId) {
  87. LocalDate localDate = LocalDate.now();
  88. List<PtlAgreementInsCompanyDto> agreementCompany = baseMapper.getAgreementCompany(localDate, deptId);
  89. for (PtlAgreementInsCompanyDto ptlAgreementInsCompanyDto : agreementCompany) {
  90. List<PtlAgreementDto> agreement = ptlAgreementInsCompanyDto.getAgreement();
  91. for (PtlAgreementDto ptlAgreementDto : agreement) {
  92. if (ptlAgreementDto.getProductsCode() != null && !ptlAgreementDto.getProductsCode().equals("")) {
  93. String[] split = ptlAgreementDto.getProductsCode().split(",");
  94. ptlAgreementDto.setProductsCodes(split);
  95. }
  96. }
  97. }
  98. List<String> agreementIdList = agreementCompany.stream()
  99. .flatMap(x -> x.getAgreement().stream().map(PtlAgreementDto::getId))
  100. .collect(Collectors.toList());
  101. /*Map<String, List<String>> licenseNoList = ptlAgreementUndwrtRulesService.getByLicenseNo(agreementIdList);
  102. agreementCompany.forEach(
  103. x -> x.getAgreement().forEach(a -> a.setLicenseNo(licenseNoList.get(a.getId())))
  104. );*/
  105. return agreementCompany;
  106. }
  107. @Override
  108. public PtlAgreementInsCompanyDto getAgreementCompany(String deptId, String companyId) {
  109. LocalDate localDate = LocalDate.now();
  110. PtlAgreementInsCompanyDto agreementCompany = baseMapper.getAgreementCompanyByCompanyId(localDate, deptId, companyId);
  111. return agreementCompany;
  112. }
  113. @Override
  114. public PtlAgreement ifExistsById(String agreementId) {
  115. PtlAgreement ptlAgreement = getById(agreementId);
  116. if (ObjectUtils.isEmpty(ptlAgreement)) {
  117. throw new SystemException("协议id 不存在");
  118. }
  119. return ptlAgreement;
  120. }
  121. @Override
  122. @Transactional
  123. public HttpResult<Object> saveAgreement(PtlAgreementSaveVo agreement, String userName) {
  124. PtlAgreementSaveDto agreementSaveDto = agreement.getAgreement();
  125. PtlAgreementAttributionDto attribution = agreement.getAttribution();
  126. PtlAgreement ptlAgreement = new PtlAgreement();
  127. BeanUtils.copyProperties(agreementSaveDto, ptlAgreement);
  128. EsmInsCompany esmInsCompany = proxyObject.verifyLogin(ptlAgreement, agreementSaveDto, attribution);
  129. // ptlAgreement.setId(IdGenerate.nextId());
  130. ptlAgreement.setProductsCode(agreementSaveDto.getProductsCode());
  131. ptlAgreement.setCreator(userName);
  132. ptlAgreement.setCreateTime(LocalDateTime.now());
  133. save(ptlAgreement);
  134. // 提交 账号信息 授权部门
  135. proxyObject.saveAssociationInformation(ptlAgreement.getId(), esmInsCompany, agreement);
  136. // 添加 历史记录表
  137. //生成批次号
  138. String batchNo = IdGenerate.nextId();
  139. //添加授权部门历史信息
  140. List<String> dept = agreement.getDept();
  141. List<PtlAgreementDeptHistory> ptlAgreementDeptList = PtlAgreementDeptHistory.toPtlAgreementDeptHistoryList(ptlAgreement.getId(), dept, batchNo);
  142. ptlAgreementDeptHistoryService.saveBatch(ptlAgreementDeptList);
  143. PtlAgreementHistory ptlAgreementHistory = new PtlAgreementHistory(batchNo, userName, HistoryStatusConstants.HISTORY_TYPE_ADD, ptlAgreement);
  144. ptlAgreementHistory.setStartDate(ptlAgreement.getStartDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  145. ptlAgreementHistory.setEndDate(ptlAgreement.getEndDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  146. ptlAgreementHistory.setAgreementId(ptlAgreement.getId());
  147. ptlAgreementHistory.setId(IdGenerate.nextId());
  148. ptlAgreementHistory.setOperatorType("add");
  149. ptlAgreementHistoryService.saveAgreementHistory(ptlAgreementHistory);
  150. PtlAgreementAttributionHistory ptlAgreementAttributionHistory = new PtlAgreementAttributionHistory(batchNo, ptlAgreement.getId(), esmInsCompany.getId(), esmInsCompany.getName(), agreement.getAttribution());
  151. ptlAgreementAttributionHistory.setId(IdGenerate.nextId());
  152. if (StringUtils.isNotEmpty(attribution.getTemplateId())) {
  153. ptlAgreementAttributionHistoryService.save(ptlAgreementAttributionHistory);
  154. }
  155. return HttpResult.ok("添加成功");
  156. }
  157. @Override
  158. @Transactional
  159. public HttpResult<Object> saveAgreementProduct(PtlAgreementProductCosts ptlAgreementProductCosts, String userName) {
  160. PtlAgreement ptlAgreement = baseMapper.selectOne(new LambdaQueryWrapper<PtlAgreement>().eq(PtlAgreement::getId, ptlAgreementProductCosts.getAgreementId()));
  161. if (ptlAgreement == null) {
  162. throw new SystemException("协议不存在");
  163. }
  164. ptlAgreement.setModifiedBy(userName);
  165. ptlAgreement.setUpdateTime(LocalDateTime.now());
  166. //更新协议信息
  167. baseMapper.updateById(ptlAgreement);
  168. // 产品费用
  169. ptlAgreementProductCostsService.save(ptlAgreementProductCosts);
  170. // 添加 历史记录表
  171. PtlAgreementProductCostsHistory history = new PtlAgreementProductCostsHistory(userName, DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"),
  172. HistoryStatusConstants.HISTORY_TYPE_UPDATE, ptlAgreementProductCosts);
  173. ptlAgreementProductCostsHistoryService.save(history);
  174. return HttpResult.ok("添加成功");
  175. }
  176. @Override
  177. public HttpResult<Object> updateAgreementProduct(PtlAgreementProductCosts agreement, String userName) {
  178. PtlAgreement ptlAgreement = baseMapper.selectOne(new LambdaQueryWrapper<PtlAgreement>().eq(PtlAgreement::getId, agreement.getAgreementId()));
  179. if (ptlAgreement == null) {
  180. throw new SystemException("协议不存在");
  181. }
  182. ptlAgreement.setModifiedBy(userName);
  183. ptlAgreement.setUpdateTime(LocalDateTime.now());
  184. //更新协议信息
  185. baseMapper.updateById(ptlAgreement);
  186. // 产品费用
  187. ptlAgreementProductCostsService.updateById(agreement);
  188. // 添加 历史记录表
  189. PtlAgreementProductCostsHistory history = new PtlAgreementProductCostsHistory(userName, DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"),
  190. HistoryStatusConstants.HISTORY_TYPE_UPDATE, agreement);
  191. ptlAgreementProductCostsHistoryService.save(history);
  192. return HttpResult.ok("修改成功");
  193. }
  194. @Override
  195. @Transactional
  196. public HttpResult<Object> deleteAgreementProduct(String id, String userName) {
  197. PtlAgreementProductCosts ptlAg = ptlAgreementProductCostsService.getById(id);
  198. if (ptlAg == null) {
  199. throw new SystemException("协议产品费用不存在");
  200. }
  201. PtlAgreement ptlAgreement = baseMapper.selectOne(new LambdaQueryWrapper<PtlAgreement>().eq(PtlAgreement::getId, ptlAg.getAgreementId()));
  202. if (ptlAgreement == null) {
  203. throw new SystemException("协议不存在");
  204. }
  205. ptlAgreement.setModifiedBy(userName);
  206. ptlAgreement.setUpdateTime(LocalDateTime.now());
  207. //更新协议信息
  208. baseMapper.updateById(ptlAgreement);
  209. //删除协议
  210. ptlAgreementProductCostsService.removeById(id);
  211. PtlAgreementProductCostsHistory history = new PtlAgreementProductCostsHistory(userName, DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"),
  212. HistoryStatusConstants.HISTORY_TYPE_DELETE, ptlAg);
  213. ptlAgreementProductCostsHistoryService.save(history);
  214. return HttpResult.ok("删除成功");
  215. }
  216. @Override
  217. @Transactional
  218. public HttpResult<Object> saveAgreementNonCarProductCosts(PtlAgreementNonVehicleProductCostsVo agreement, String userName) {
  219. //同步刷新其他协议非车产品费用信息(有待同步协议时,进行同步)
  220. if (agreement.getSyncAgreementIds() != null && agreement.getSyncAgreementIds().size() > 0) {
  221. for (int i = 0; i < agreement.getSyncAgreementIds().size(); i++) {
  222. String tempAgreementId = agreement.getSyncAgreementIds().get(i);
  223. PtlAgreement destAgreement = getById(tempAgreementId);
  224. //根据归属保司,找出本级和上级 所有产品代码
  225. //先获取相关保险公司列表
  226. String companyId = destAgreement.getPartnerCompaniesId();
  227. if (destAgreement.getAssociationCompaniesId() != null && !"".equals(destAgreement.getAssociationCompaniesId())) {
  228. companyId = destAgreement.getAssociationCompaniesId();
  229. }
  230. List<String> companyIdList = esmInsCompanyService.getAllRelationCompanyId(companyId);
  231. //再根据保险公司列表获取所有非车产品列表
  232. List<PtlNonCarInsuranceProduct> productList = ptlNonCarInsuranceProductService.findProductListByCompangIds(companyIdList);
  233. List<PtlAgreementNonCarProductCostsSaveVo> finalList = new ArrayList<>();
  234. //按找出的产品过滤传进来的 费用方案列表
  235. for (PtlNonCarInsuranceProduct tempProductDto : productList) {
  236. for (PtlAgreementNonCarProductCostsSaveVo productCostDto : agreement.getNonCarProductCosts()) {
  237. if (productCostDto.getProductId().equals(tempProductDto.getProductCode())) {
  238. finalList.add(productCostDto);
  239. }
  240. }
  241. }
  242. ptlAgreementNonCarProductCostsService.synNonCarProductCosts(destAgreement, finalList);
  243. }
  244. }
  245. return HttpResult.ok("添加成功");
  246. }
  247. @Override
  248. @Transactional
  249. public HttpResult<Object> saveAgreementUndwrtRules(PtlAgreementUndwrtRules ptlAgreementUndwrtRules, String userName) {
  250. PtlAgreement ptlAgreement = baseMapper.selectOne(new LambdaQueryWrapper<PtlAgreement>().eq(PtlAgreement::getId, ptlAgreementUndwrtRules.getAgreementId()));
  251. if (ptlAgreement == null) {
  252. throw new SystemException("协议不存在");
  253. }
  254. ptlAgreement.setModifiedBy(userName);
  255. ptlAgreement.setUpdateTime(LocalDateTime.now());
  256. //更新协议信息
  257. baseMapper.updateById(ptlAgreement);
  258. //添加承保规则
  259. ptlAgreementUndwrtRulesService.save(ptlAgreementUndwrtRules);
  260. //添加历史记录
  261. PtlAgreementUndwrtRulesHistory ptlAgreementUndwrtRulesHistory = new PtlAgreementUndwrtRulesHistory(userName, HistoryStatusConstants.HISTORY_TYPE_ADD, ptlAgreementUndwrtRules);
  262. ptlAgreementUndwrtRulesHistoryService.save(ptlAgreementUndwrtRulesHistory);
  263. return HttpResult.ok("添加成功");
  264. }
  265. @Override
  266. @Transactional
  267. public HttpResult<Object> updateAgreementUndwrtRules(PtlAgreementUndwrtRules ptlAgreementUndwrtRules, String userName) {
  268. PtlAgreement ptlAgreement = baseMapper.selectOne(new LambdaQueryWrapper<PtlAgreement>().eq(PtlAgreement::getId, ptlAgreementUndwrtRules.getAgreementId()));
  269. if (ptlAgreement == null) {
  270. throw new SystemException("协议不存在");
  271. }
  272. ptlAgreement.setModifiedBy(userName);
  273. ptlAgreement.setUpdateTime(LocalDateTime.now());
  274. //更新协议信息
  275. baseMapper.updateById(ptlAgreement);
  276. //添加承保规则
  277. ptlAgreementUndwrtRulesService.updateById(ptlAgreementUndwrtRules);
  278. //添加历史记录
  279. PtlAgreementUndwrtRulesHistory ptlAgreementUndwrtRulesHistory = new PtlAgreementUndwrtRulesHistory(userName, HistoryStatusConstants.HISTORY_TYPE_UPDATE, ptlAgreementUndwrtRules);
  280. ptlAgreementUndwrtRulesHistoryService.save(ptlAgreementUndwrtRulesHistory);
  281. return HttpResult.ok("修改成功");
  282. }
  283. @Override
  284. @Transactional
  285. public HttpResult<Object> deleteAgreementUndwrtRules(String id, String userName) {
  286. PtlAgreementUndwrtRules ptlAgreementUndwrtRules = ptlAgreementUndwrtRulesService.getOne(new LambdaQueryWrapper<PtlAgreementUndwrtRules>().eq(PtlAgreementUndwrtRules::getId, id));
  287. if (ptlAgreementUndwrtRules == null) {
  288. throw new SystemException("协议承保规则不存在");
  289. }
  290. PtlAgreement ptlAgreement = baseMapper.selectOne(new LambdaQueryWrapper<PtlAgreement>().eq(PtlAgreement::getId, ptlAgreementUndwrtRules.getAgreementId()));
  291. if (ptlAgreement == null) {
  292. throw new SystemException("协议不存在");
  293. }
  294. ptlAgreement.setModifiedBy(userName);
  295. ptlAgreement.setUpdateTime(LocalDateTime.now());
  296. //更新协议信息
  297. baseMapper.updateById(ptlAgreement);
  298. //删除承保规则
  299. ptlAgreementUndwrtRulesService.removeById(id);
  300. //添加历史记录
  301. PtlAgreementUndwrtRulesHistory ptlAgreementUndwrtRulesHistory = new PtlAgreementUndwrtRulesHistory(userName, HistoryStatusConstants.HISTORY_TYPE_DELETE, ptlAgreementUndwrtRules);
  302. ptlAgreementUndwrtRulesHistoryService.save(ptlAgreementUndwrtRulesHistory);
  303. return HttpResult.ok("删除成功");
  304. }
  305. @Override
  306. public HttpResult<PageResult<PtlAgreement>> pageAgreement(PtlAgreementPageVo ptlAgreementPageVo) {
  307. LambdaQueryWrapper<PtlAgreement> wrapper = new LambdaQueryWrapper<>();
  308. // 获取供应商本级id 及其 下级id
  309. List<String> lowerId = esmInsCompanyService.getByLowerId(ptlAgreementPageVo.getPartnerCompaniesId());
  310. // 审核状态
  311. wrapper.eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getAuditStatus()), PtlAgreement::getAuditStatus, ptlAgreementPageVo.getAuditStatus())
  312. //是否有效
  313. .eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getValidStatus()), PtlAgreement::getValidStatus, ptlAgreementPageVo.getValidStatus())
  314. // 供应商类型
  315. .eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getCompaniesType()), PtlAgreement::getCompaniesType, ptlAgreementPageVo.getCompaniesType())
  316. // 协议类型
  317. .eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getAgreementType()), PtlAgreement::getAgreementType, ptlAgreementPageVo.getAgreementType())
  318. // 录入人
  319. .eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getCreator()), PtlAgreement::getCreator, ptlAgreementPageVo.getCreator())
  320. // 修改人
  321. .eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getModifiedBy()), PtlAgreement::getModifiedBy, ptlAgreementPageVo.getModifiedBy())
  322. // 合作公司
  323. .in(!StringUtils.isEmpty(ptlAgreementPageVo.getPartnerCompaniesId()) && !lowerId.isEmpty(), PtlAgreement::getPartnerCompaniesId, lowerId)
  324. // 录入时间
  325. .between(!ObjectUtils.isEmpty(ptlAgreementPageVo.getStartDate()) && !ObjectUtils.isEmpty(ptlAgreementPageVo.getEndDate()), PtlAgreement::getCreateTime, ptlAgreementPageVo.getStartDate(), ptlAgreementPageVo.getEndDate())
  326. // 修改时间
  327. .between(!ObjectUtils.isEmpty(ptlAgreementPageVo.getUpdateStarTime()) && !ObjectUtils.isEmpty(ptlAgreementPageVo.getUpdateEndTime()), PtlAgreement::getUpdateTime, ptlAgreementPageVo.getUpdateStarTime(), ptlAgreementPageVo.getUpdateEndTime())
  328. // 协议起期
  329. .le(!ObjectUtils.isEmpty(ptlAgreementPageVo.getAgreementStartDate()), PtlAgreement::getStartDate, ptlAgreementPageVo.getAgreementStartDate())
  330. // 协议止期
  331. .ge(!ObjectUtils.isEmpty(ptlAgreementPageVo.getAgreementEndDate()), PtlAgreement::getEndDate, ptlAgreementPageVo.getAgreementEndDate());
  332. // 录入时间
  333. if (!ObjectUtils.isEmpty(ptlAgreementPageVo.getStartDate()) && !ObjectUtils.isEmpty(ptlAgreementPageVo.getEndDate())) {
  334. LocalDateTime startDateTime = ptlAgreementPageVo.getStartDate().atTime(LocalTime.MIN);
  335. LocalDateTime endDateTime = ptlAgreementPageVo.getEndDate().atTime(LocalTime.MAX);
  336. wrapper.between(!ObjectUtils.isEmpty(ptlAgreementPageVo.getStartDate()) && !ObjectUtils.isEmpty(ptlAgreementPageVo.getEndDate()), PtlAgreement::getCreateTime, startDateTime, endDateTime);
  337. }
  338. // 修改时间
  339. if (!ObjectUtils.isEmpty(ptlAgreementPageVo.getUpdateStarTime()) && !ObjectUtils.isEmpty(ptlAgreementPageVo.getUpdateEndTime())) {
  340. LocalDateTime startDateTime = ptlAgreementPageVo.getUpdateStarTime().atTime(LocalTime.MIN);
  341. LocalDateTime endDateTime = ptlAgreementPageVo.getUpdateEndTime().atTime(LocalTime.MAX);
  342. wrapper.between(!ObjectUtils.isEmpty(ptlAgreementPageVo.getUpdateStarTime()) && !ObjectUtils.isEmpty(ptlAgreementPageVo.getUpdateEndTime()), PtlAgreement::getUpdateTime, startDateTime,endDateTime);
  343. }
  344. // 省市县
  345. if (ptlAgreementPageVo.getAreaCode() != null && !"".equals(ptlAgreementPageVo.getAreaCode()) && ptlAgreementPageVo.getLevel() != null) {
  346. String area = ptlAgreementPageVo.getAreaCode();
  347. String prefix = null;
  348. Integer sign = 0;
  349. switch (ptlAgreementPageVo.getLevel()) {
  350. case "1": { // 省级查询逻辑
  351. sign = 2;
  352. prefix = area.substring(0, 2);
  353. break;
  354. }
  355. case "2": { // 市级查询逻辑
  356. sign = 4;
  357. prefix = area.substring(0, 4);
  358. break;
  359. }
  360. case "3": { // 区县级查询逻辑
  361. sign = 6;
  362. prefix = area.substring(0, 6);
  363. break;
  364. }
  365. }
  366. wrapper.apply("SUBSTRING(partner_companies_id, 6, " + sign + ") =" + prefix);
  367. }
  368. Page<PtlAgreement> agreementPage = page(page, wrapper);
  369. List<PtlAgreement> records = agreementPage.getRecords();
  370. PageResult<PtlAgreement> ptlAgreementPageResult = new PageResult<>(pageNum, pageSize, page.getTotal(), records);
  371. return HttpResult.ok(ptlAgreementPageResult);
  372. }
  373. @Override
  374. public HttpResult<List<PtlAgreement>> listAgreement(PtlAgreementPageVo ptlAgreementPageVo) {
  375. LambdaQueryWrapper<PtlAgreement> wrapper = new LambdaQueryWrapper<>();
  376. // 获取供应商本级id 及其 下级id
  377. List<String> lowerId = esmInsCompanyService.getByLowerId(ptlAgreementPageVo.getPartnerCompaniesId());
  378. // 审核状态
  379. wrapper.eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getAuditStatus()), PtlAgreement::getAuditStatus, ptlAgreementPageVo.getAuditStatus())
  380. //是否有效
  381. .eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getValidStatus()), PtlAgreement::getValidStatus, ptlAgreementPageVo.getValidStatus())
  382. // 供应商类型
  383. .eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getCompaniesType()), PtlAgreement::getCompaniesType, ptlAgreementPageVo.getCompaniesType())
  384. // 合作公司
  385. .in(!StringUtils.isEmpty(ptlAgreementPageVo.getPartnerCompaniesId()) && !lowerId.isEmpty(), PtlAgreement::getPartnerCompaniesId, lowerId)
  386. // 录入时间
  387. .between(!ObjectUtils.isEmpty(ptlAgreementPageVo.getStartDate()) && !ObjectUtils.isEmpty(ptlAgreementPageVo.getEndDate()), PtlAgreement::getCreateTime, ptlAgreementPageVo.getStartDate(), ptlAgreementPageVo.getEndDate());
  388. List<PtlAgreement> agreementPage = list(wrapper);
  389. return HttpResult.ok(agreementPage);
  390. }
  391. @Override
  392. public HttpResult<PtlAgreementQueryVo> getByAgreementId(String agreementId) {
  393. PtlAgreement ptlAgreement = proxyObject.ifExistsById(agreementId);
  394. // // 获取产品费用
  395. // List<PltAgreementSchemeSaveDto> schemeQueryDto = ptlAgreementProductCostsService.getByAgreementId(agreementId);
  396. // // 获取非车险产品费用
  397. // List<PtlAgreementNonCarProductCosts> nonCarProductCosts = ptlAgreementNonCarProductCostsService.getByAgreementId(agreementId);
  398. // // 获取承保规则
  399. // List<PtlAgreementUndwrtRulesSaveDto> underwritingRules = ptlAgreementUndwrtRulesService.getByAgreementId(agreementId);
  400. // 账号信息查询
  401. PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
  402. //2023-08-28 lig 增加 解决前端空对象为null问题,改为返回为空对象
  403. if (null == ptlAgreementAttribution) {
  404. ptlAgreementAttribution = new PtlAgreementAttribution();
  405. ptlAgreementAttribution.setId("");
  406. ptlAgreementAttribution.setInsCompanyId("");
  407. ptlAgreementAttribution.setInsCompanyName("");
  408. ptlAgreementAttribution.setTemplateId("");
  409. ptlAgreementAttribution.setApiType(1);
  410. ptlAgreementAttribution.setFields(new JSONArray());
  411. ptlAgreementAttribution.setUsername("");
  412. ptlAgreementAttribution.setPassword("");
  413. }
  414. // 授权查询
  415. List<PtlAgreementDept> deptList = ptlAgreementDeptService.getByAgreementId(agreementId);
  416. PtlAgreementQueryVo ptlAgreementQueryVo = new PtlAgreementQueryVo(ptlAgreement, ptlAgreementAttribution, deptList);
  417. return HttpResult.ok(ptlAgreementQueryVo);
  418. }
  419. @Override
  420. @Transactional
  421. public HttpResult<Object> deleteAgreement(String agreementId, String userName) {
  422. proxyObject.ifExistsById(agreementId);
  423. HttpResult<PtlAgreementQueryVo> byAgreementId = getByAgreementId(agreementId);
  424. boolean b = removeById(agreementId);
  425. AssertionUtils.isSucceed(b, "协议信息删除失败");
  426. // 关联表删除
  427. proxyObject.deleteAssociationInformation(agreementId);
  428. // 添加 历史记录表
  429. //生成批次号
  430. String batchNo = IdGenerate.nextId();
  431. List<PtlAgreementDept> dept = byAgreementId.getData().getDept();
  432. ArrayList<PtlAgreementDeptHistory> histories = new ArrayList<>();
  433. for (PtlAgreementDept ptlAgreementDept : dept) {
  434. PtlAgreementDeptHistory deptHistory = new PtlAgreementDeptHistory();
  435. deptHistory.setAgreementId(ptlAgreementDept.getAgreementId());
  436. deptHistory.setDeptId(ptlAgreementDept.getDeptId());
  437. deptHistory.setBatch(batchNo);
  438. }
  439. ptlAgreementDeptHistoryService.saveBatch(histories);
  440. PtlAgreementHistory ptlAgreementHistory = new PtlAgreementHistory(batchNo, userName, HistoryStatusConstants.HISTORY_TYPE_ADD, byAgreementId.getData().getAgreement());
  441. ptlAgreementHistory.setStartDate(byAgreementId.getData().getAgreement().getStartDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  442. ptlAgreementHistory.setEndDate(byAgreementId.getData().getAgreement().getEndDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  443. ptlAgreementHistory.setAgreementId(ptlAgreementHistory.getId());
  444. ptlAgreementHistory.setId(IdGenerate.nextId());
  445. ptlAgreementHistory.setOperatorType("delete");
  446. ptlAgreementHistoryService.saveAgreementHistory(ptlAgreementHistory);
  447. PtlAgreementAttributionHistory ptlAgreementAttributionHistory = new PtlAgreementAttributionHistory(batchNo, agreementId,
  448. byAgreementId.getData().getAgreement().getInsuranceCompanyId(),
  449. byAgreementId.getData().getAgreement().getInsuranceCompany(),
  450. byAgreementId.getData().getPtlAgreementAttribution()
  451. );
  452. ptlAgreementAttributionHistory.setId(IdGenerate.nextId());
  453. if (StringUtils.isNotEmpty(ptlAgreementAttributionHistory.getTemplateId())) {
  454. ptlAgreementAttributionHistoryService.save(ptlAgreementAttributionHistory);
  455. }
  456. return HttpResult.ok("删除成功");
  457. }
  458. @Override
  459. @Transactional
  460. public HttpResult<Object> reviseAgreement(String userName, String agreementId, PtlAgreementSaveVo agreement) {
  461. PtlAgreementSaveDto agreementSaveDto = agreement.getAgreement();
  462. PtlAgreementAttributionDto attribution = agreement.getAttribution();
  463. PtlAgreement ptlAgreement = proxyObject.ifExistsById(agreementId);
  464. BeanUtils.copyProperties(agreementSaveDto, ptlAgreement);
  465. EsmInsCompany esmInsCompany = proxyObject.verifyLogin(ptlAgreement, agreementSaveDto, attribution);
  466. ptlAgreement.setProductsCode(agreementSaveDto.getProductsCode());
  467. ptlAgreement.setModifiedBy(userName);
  468. ptlAgreement.setUpdateTime(LocalDateTime.now());
  469. HttpResult<PtlAgreementQueryVo> byAgreementId = this.getByAgreementId(agreementId);
  470. // 修改协议
  471. boolean b = updateById(ptlAgreement);
  472. AssertionUtils.isSucceed(b, "协议信息修改失败");
  473. // 关联表都是先删除后添加
  474. proxyObject.deleteAssociationInformationExcludeCosts(agreementId);
  475. // 提交 账号信息 授权部门
  476. proxyObject.saveAssociationInformation(agreementId, esmInsCompany, agreement);
  477. // 添加 历史记录表
  478. //生成批次号
  479. String batchNo = IdGenerate.nextId();
  480. //添加授权部门历史信息
  481. List<String> dept = agreement.getDept();
  482. List<PtlAgreementDeptHistory> ptlAgreementDeptList = PtlAgreementDeptHistory.toPtlAgreementDeptHistoryList(ptlAgreement.getId(), dept, batchNo);
  483. ptlAgreementDeptHistoryService.saveBatch(ptlAgreementDeptList);
  484. PtlAgreementHistory ptlAgreementHistory = new PtlAgreementHistory(batchNo, userName, HistoryStatusConstants.HISTORY_TYPE_ADD, ptlAgreement);
  485. ptlAgreementHistory.setStartDate(ptlAgreement.getStartDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  486. ptlAgreementHistory.setEndDate(ptlAgreement.getEndDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  487. ptlAgreementHistory.setAgreementId(ptlAgreement.getId());
  488. ptlAgreementHistory.setId(IdGenerate.nextId());
  489. ptlAgreementHistory.setOperatorType("update");
  490. ptlAgreementHistoryService.saveAgreementHistory(ptlAgreementHistory);
  491. PtlAgreementAttributionHistory ptlAgreementAttributionHistory = new PtlAgreementAttributionHistory(batchNo, ptlAgreement.getId(), esmInsCompany.getId(), esmInsCompany.getName(), agreement.getAttribution());
  492. ptlAgreementAttributionHistory.setId(IdGenerate.nextId());
  493. if (StringUtils.isNotEmpty(attribution.getTemplateId())) {
  494. ptlAgreementAttributionHistoryService.save(ptlAgreementAttributionHistory);
  495. }
  496. return HttpResult.ok("修改成功");
  497. }
  498. @Override
  499. public void saveAssociationInformation(String agreementId, EsmInsCompany esmInsCompany, PtlAgreementSaveVo agreement) {
  500. // 账号添加
  501. PtlAgreementAttributionDto attribution = agreement.getAttribution();
  502. if (StringUtils.isNotEmpty(attribution.getTemplateId())) {
  503. ptlAgreementAttributionService.saveAttribution(agreementId, esmInsCompany, agreement.getAttribution());
  504. }
  505. // 部门授权
  506. ptlAgreementDeptService.saveBatchDept(agreementId, agreement.getDept());
  507. }
  508. @Override
  509. public void deleteAssociationInformation(String agreementId) {
  510. // 删除产品费用
  511. ptlAgreementProductCostsService.deleteByAgreementId(agreementId);
  512. // 删除关联信息 删除非车险产品费用 承保规则 账号信息 授权部门
  513. proxyObject.deleteAssociationInformationExcludeCosts(agreementId);
  514. }
  515. @Override
  516. public void deleteAssociationInformationExcludeCosts(String agreementId) {
  517. // 删除非车险产品费用
  518. ptlAgreementNonCarProductCostsService.deleteByAgreementId(agreementId);
  519. // 删除承保规则
  520. ptlAgreementUndwrtRulesService.deleteByAgreementId(agreementId);
  521. // 删除账号信息
  522. ptlAgreementAttributionService.removeById(agreementId);
  523. // 删除授权部门
  524. ptlAgreementDeptService.deleteByAgreementId(agreementId);
  525. }
  526. @Override
  527. public EsmInsCompany verifyLogin(PtlAgreement ptlAgreement, PtlAgreementSaveDto agreementSaveDto, PtlAgreementAttributionDto attribution) {
  528. EsmInsCompany esmInsCompany;
  529. // 获取保险公司
  530. if (AgreementType.AT2.getCode().equals(agreementSaveDto.getAgreementType())) {
  531. String message = String.format("协议为 %s 保险公司必须传入", AgreementType.AT2.getDesc());
  532. AssertionUtils.isStringEmpty(agreementSaveDto.getAssociationCompaniesId(), message);
  533. esmInsCompany = esmInsCompanyService.isExists(agreementSaveDto.getAssociationCompaniesId());
  534. } else {
  535. esmInsCompany = esmInsCompanyService.getBySubsidiary(agreementSaveDto.getPartnerCompaniesId());
  536. }
  537. // 验证用户名密码 python api 对接需要验证用户名
  538. if (!ObjectUtils.isEmpty(attribution.getApiType()) && PtlApiType.PTL_API_2.getCode() == attribution.getApiType()) {
  539. String nameSimple = esmInsCompany.getNamesimple();
  540. String id = esmInsCompany.getId();
  541. insCrawlerOrderController.isLogin(attribution, id, nameSimple);
  542. }
  543. ptlAgreement.setCompaniesType(esmInsCompany.getType());
  544. ptlAgreement.setInsuranceCompanyId(esmInsCompany.getId());
  545. ptlAgreement.setInsuranceCompany(esmInsCompany.getNamesimple());
  546. // 生成协议id
  547. ptlAgreement.generateTheProtocolCode();
  548. return esmInsCompany;
  549. }
  550. @Override
  551. public HttpResult<Object> auditAgreement(String agreementId, PtlAgreementAuditVo ptlAgreementAuditVo) {
  552. PtlAgreement ptlAgreement = proxyObject.ifExistsById(agreementId);
  553. ptlAgreement.setAuditStatus(ptlAgreementAuditVo.getAuditStatus());
  554. ptlAgreement.setAuditContent(ptlAgreementAuditVo.getAuditContent());
  555. // 修改协议
  556. boolean b = updateById(ptlAgreement);
  557. AssertionUtils.isSucceed(b, "协议信息修改失败");
  558. return HttpResult.ok("修改成功");
  559. }
  560. @Override
  561. public HttpResult<List<PtlAgreementNonCarProductCostsVo>> getNonCarCostsInfo(String agreementId, String companyId) {
  562. List<PtlAgreementNonCarProductCostsVo> result = new ArrayList<>();
  563. //先根据传过来的保险公司代码,找上下级所有机构层级对应的非车产品列表
  564. if (companyId != null && !"".equals(companyId)) {
  565. //先获取相关保险公司列表
  566. List<String> companyIdList = esmInsCompanyService.getAllRelationCompanyId(companyId);
  567. //再根据保险公司列表获取所有非车产品列表
  568. List<PtlNonCarInsuranceProduct> productList = ptlNonCarInsuranceProductService.findProductListByCompangIds(companyIdList);
  569. if (productList != null && productList.size() > 0) {
  570. for (int i = 0; i < productList.size(); i++) {
  571. PtlNonCarInsuranceProduct tempProductDto = productList.get(i);
  572. PtlAgreementNonCarProductCostsVo costsVo = new PtlAgreementNonCarProductCostsVo();
  573. costsVo.setProductId(tempProductDto.getProductCode());
  574. costsVo.setProductName(tempProductDto.getProductName());
  575. costsVo.setCompanyId(tempProductDto.getCompanyId());
  576. EsmInsCompany tempInsCompany = esmInsCompanyService.getById(tempProductDto.getCompanyId());
  577. costsVo.setCompanyName(tempInsCompany.getName());
  578. costsVo.setRiskCode(tempProductDto.getInsuranceCode());
  579. Map<String, DictionaryManagement> m = DictEnumConfig.getDmMap();
  580. DictionaryManagement dictionaryManagement = m.get("nonCarInsuranceCode");
  581. String riskName = "";
  582. for (DictionaryData data : dictionaryManagement.getDdList()) {
  583. if (tempProductDto.getInsuranceCode().equals(data.getDictValue())) {
  584. riskName = data.getDictTag();
  585. }
  586. }
  587. costsVo.setRiskName(riskName);
  588. //然后根据协议ID 查询所有已配置费用的产品进行赋值
  589. if (agreementId != null && !"".equals(agreementId)) {
  590. //使用协议ID 产品ID 获取已经配置好的信息
  591. PtlAgreementNonCarProductCosts agreementNonCarProductCosts = ptlAgreementNonCarProductCostsService.getNonCarProductCostsInfo(agreementId, tempProductDto.getProductCode());
  592. //赋值已配置的费用比例
  593. if (agreementNonCarProductCosts != null) {
  594. costsVo.setCostsProportion(agreementNonCarProductCosts.getCostsProportion());
  595. }
  596. }
  597. result.add(costsVo);
  598. }
  599. }
  600. } else {
  601. //如果归属保司没选,则直接返回空列表,相当于没查到对应非车产品信息
  602. }
  603. return HttpResult.ok(result);
  604. }
  605. @Override
  606. public HttpResult<List<PtlAgreement>> findRelationAgreement(String companyId) {
  607. List<PtlAgreement> resultList = new ArrayList<>();
  608. if (companyId != null && !"".equals(companyId)) {
  609. //先获取相关保险公司列表
  610. List<String> companyIdList = esmInsCompanyService.getAllRelationCompanyId(companyId);
  611. if (companyIdList != null && companyIdList.size() > 0) {
  612. for (int i = 0; i < companyIdList.size(); i++) {
  613. String tempCom = companyIdList.get(i);
  614. LambdaQueryWrapper<PtlAgreement> wrapper = new LambdaQueryWrapper<>();
  615. wrapper.eq(PtlAgreement::getValidStatus, "1");
  616. wrapper.and(wq1 -> wq1.eq(PtlAgreement::getPartnerCompaniesId, tempCom).or(wq2 -> wq2.eq(PtlAgreement::getAssociationCompaniesId, tempCom)));
  617. resultList.addAll(list(wrapper));
  618. }
  619. for (int j = 0; j < resultList.size(); j++) {
  620. PtlAgreement agreement = resultList.get(j);
  621. String tempCompanyId = agreement.getAssociationCompaniesId() != null && !"".equals(agreement.getAssociationCompaniesId()) ? agreement.getAssociationCompaniesId() : agreement.getPartnerCompaniesId();
  622. EsmInsCompany tempCompany = esmInsCompanyService.getById(tempCompanyId);
  623. agreement.setInsuranceCompany(tempCompany.getName());
  624. }
  625. }
  626. }
  627. return HttpResult.ok(resultList);
  628. }
  629. /**
  630. * @version
  631. * @author: hxl
  632. * @Date: 2024/4/15 18:02
  633. * @Description: 查询审核的协议
  634. */
  635. public List<PtlAgreement> findCheckAgreementList(PtlAgreement ptlAgreement) {
  636. LambdaQueryWrapper<PtlAgreement> wrapper = new LambdaQueryWrapper<>();
  637. // wrapper.eq(PtlAgreement::getAuditStatus,"1");
  638. //添加协议编码排序
  639. wrapper.orderByAsc(PtlAgreement::getAgreementCode);
  640. List<PtlAgreement> list = proxyObject.list(wrapper);
  641. return list;
  642. }
  643. // @Autowired
  644. // private PtlAgreementProductCostsNewService ptlAgreementProductCostsNewService;
  645. public List<PtlAgreement> getCurrentAgreementList(String agreementId) {
  646. PtlAgreement ptlAgreement = this.getById(agreementId);
  647. String insuranceCompanyId = ptlAgreement.getInsuranceCompanyId();
  648. List<PtlAgreement> ptlAgreements = baseMapper.selectList(new LambdaQueryWrapper<PtlAgreement>().eq(PtlAgreement::getInsuranceCompanyId, insuranceCompanyId));
  649. return ptlAgreements;
  650. }
  651. }