PtlAgreementServiceImpl.java 40 KB

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