PtlAgreementServiceImpl.java 41 KB

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