PtlAgreementServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. package com.ydtech.modules.protocol.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.ydtech.constants.enums.dict.agreement.AgreementType;
  6. import com.ydtech.core.page.HttpResult;
  7. import com.ydtech.core.page.PageResult;
  8. import com.ydtech.exception.SystemException;
  9. import com.ydtech.modules.esm.model.EsmInsCompany;
  10. import com.ydtech.modules.esm.service.EsmInsCompanyService;
  11. import com.ydtech.modules.order.service.InsCrawlerOrderService;
  12. import com.ydtech.modules.protocol.dao.PtlAgreementMapper;
  13. import com.ydtech.modules.protocol.entity.constants.PtlApiType;
  14. import com.ydtech.modules.protocol.entity.dto.*;
  15. import com.ydtech.modules.protocol.entity.po.PtlAgreement;
  16. import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
  17. import com.ydtech.modules.protocol.entity.po.PtlAgreementDept;
  18. import com.ydtech.modules.protocol.entity.po.PtlAgreementUnderwritingRules;
  19. import com.ydtech.modules.protocol.entity.vo.PtlAgreementAuditVo;
  20. import com.ydtech.modules.protocol.entity.vo.PtlAgreementPageVo;
  21. import com.ydtech.modules.protocol.entity.vo.PtlAgreementQueryVo;
  22. import com.ydtech.modules.protocol.entity.vo.PtlAgreementSaveVo;
  23. import com.ydtech.modules.protocol.service.*;
  24. import com.ydtech.modules.protocol.utils.AssertionUtils;
  25. import org.apache.commons.lang3.ObjectUtils;
  26. import org.apache.commons.lang3.StringUtils;
  27. import org.springframework.beans.BeanUtils;
  28. import org.springframework.beans.factory.annotation.Autowired;
  29. import org.springframework.stereotype.Service;
  30. import org.springframework.transaction.annotation.Transactional;
  31. import java.time.LocalDate;
  32. import java.time.LocalDateTime;
  33. import java.util.List;
  34. import java.util.Map;
  35. import java.util.stream.Collectors;
  36. /**
  37. * @author wenks
  38. * @description 针对表【ptl_agreement(协议信息表)】的数据库操作Service实现
  39. * @createDate 2023-06-05 17:59:52
  40. */
  41. @Service
  42. public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, PtlAgreement> implements PtlAgreementService {
  43. private final PtlAgreementProductCostsService ptlAgreementProductCostsService;
  44. private final PtlAgreementUnderwritingRulesService ptlAgreementUnderwritingRulesService;
  45. private final PtlAgreementAttributionService ptlAgreementAttributionService;
  46. private final PtlAgreementDeptService ptlAgreementDeptService;
  47. private final EsmInsCompanyService esmInsCompanyService;
  48. private InsCrawlerOrderService insCrawlerOrderController;
  49. private PtlAgreementService proxyObject;
  50. public PtlAgreementServiceImpl(PtlAgreementProductCostsService ptlAgreementProductCostsService, PtlAgreementUnderwritingRulesService ptlAgreementUnderwritingRulesService, PtlAgreementAttributionService ptlAgreementAttributionService, PtlAgreementDeptService ptlAgreementDeptService, EsmInsCompanyService esmInsCompanyService) {
  51. this.ptlAgreementProductCostsService = ptlAgreementProductCostsService;
  52. this.ptlAgreementUnderwritingRulesService = ptlAgreementUnderwritingRulesService;
  53. this.ptlAgreementAttributionService = ptlAgreementAttributionService;
  54. this.ptlAgreementDeptService = ptlAgreementDeptService;
  55. this.esmInsCompanyService = esmInsCompanyService;
  56. }
  57. @Autowired
  58. public void setProxyObject(PtlAgreementService proxyObject) {
  59. this.proxyObject = proxyObject;
  60. }
  61. @Autowired
  62. public void setInsCrawlerOrderController(InsCrawlerOrderService insCrawlerOrderController) {
  63. this.insCrawlerOrderController = insCrawlerOrderController;
  64. }
  65. @Override
  66. public List<PtlAgreementInsCompanyDto> getAgreementCompany(String deptId) {
  67. LocalDate localDate = LocalDate.now();
  68. List<PtlAgreementInsCompanyDto> agreementCompany = baseMapper.getAgreementCompany(localDate, deptId);
  69. List<String> agreementIdList = agreementCompany.stream()
  70. .flatMap(x -> x.getAgreement().stream().map(PtlAgreementDto::getId))
  71. .collect(Collectors.toList());
  72. Map<String, List<String>> licenseNoList = ptlAgreementUnderwritingRulesService.getByLicenseNo(agreementIdList);
  73. agreementCompany.forEach(
  74. x -> x.getAgreement().forEach(a -> a.setLicenseNo(licenseNoList.get(a.getId())))
  75. );
  76. return agreementCompany;
  77. }
  78. @Override
  79. public PtlAgreement ifExistsById(String agreementId) {
  80. PtlAgreement ptlAgreement = getById(agreementId);
  81. if (ObjectUtils.isEmpty(ptlAgreement)) {
  82. throw new SystemException("协议id 不存在");
  83. }
  84. return ptlAgreement;
  85. }
  86. @Override
  87. @Transactional
  88. public HttpResult<Object> saveAgreement(PtlAgreementSaveVo agreement, String userName) {
  89. PtlAgreementSaveDto agreementSaveDto = agreement.getAgreement();
  90. PtlAgreementAttributionDto attribution = agreement.getAttribution();
  91. PtlAgreement ptlAgreement = new PtlAgreement();
  92. BeanUtils.copyProperties(agreementSaveDto, ptlAgreement);
  93. EsmInsCompany esmInsCompany = proxyObject.verifyLogin(ptlAgreement, agreementSaveDto, attribution);
  94. ptlAgreement.setCreator(userName);
  95. ptlAgreement.setCreateTime(LocalDateTime.now());
  96. save(ptlAgreement);
  97. // 产品费用
  98. String insuranceCompanyId = esmInsCompany.getId();
  99. proxyObject.saveAssociationInformation(ptlAgreement.getId(), insuranceCompanyId, agreement);
  100. return HttpResult.ok("添加成功");
  101. }
  102. @Override
  103. public HttpResult<PageResult<PtlAgreement>> pageAgreement(PtlAgreementPageVo ptlAgreementPageVo) {
  104. int pageNum = ptlAgreementPageVo.getPageNum();
  105. int pageSize = ptlAgreementPageVo.getPageSize();
  106. LambdaQueryWrapper<PtlAgreement> wrapper = new LambdaQueryWrapper<>();
  107. // 获取供应商本级id 及其 下级id
  108. List<String> lowerId = esmInsCompanyService.getByLowerId(ptlAgreementPageVo.getPartnerCompaniesId());
  109. // 审核状态
  110. wrapper.eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getAuditStatus()), PtlAgreement::getAuditStatus, ptlAgreementPageVo.getAuditStatus())
  111. // 供应商类型
  112. .eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getCompaniesType()), PtlAgreement::getCompaniesType, ptlAgreementPageVo.getCompaniesType())
  113. // 合作公司
  114. .in(!StringUtils.isEmpty(ptlAgreementPageVo.getPartnerCompaniesId()) && !lowerId.isEmpty(), PtlAgreement::getPartnerCompaniesId, lowerId)
  115. // 录入时间
  116. .between(!ObjectUtils.isEmpty(ptlAgreementPageVo.getStartDate()) && ObjectUtils.isEmpty(ptlAgreementPageVo.getEndDate()), PtlAgreement::getCreateTime, ptlAgreementPageVo.getStartDate(), ptlAgreementPageVo.getEndDate());
  117. Page<PtlAgreement> ptlAgreementPage = new Page<>(pageNum, pageSize);
  118. Page<PtlAgreement> agreementPage = page(ptlAgreementPage, wrapper);
  119. PageResult<PtlAgreement> ptlAgreementPageResult = new PageResult<>(pageNum, pageSize, (int) agreementPage.getTotal(), agreementPage.getRecords());
  120. return HttpResult.ok(ptlAgreementPageResult);
  121. }
  122. @Override
  123. public HttpResult<PtlAgreementQueryVo> getByAgreementId(String agreementId) {
  124. PtlAgreement ptlAgreement = proxyObject.ifExistsById(agreementId);
  125. // 获取产品费用
  126. List<PltAgreementSchemeQueryDto> schemeQueryDto = ptlAgreementProductCostsService.getByAgreementId(agreementId);
  127. // 获取承保规则
  128. List<PtlAgreementUnderwritingRules> underwritingRules = ptlAgreementUnderwritingRulesService.getByAgreementId(agreementId);
  129. // 账号信息查询
  130. PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
  131. // 授权查询
  132. List<PtlAgreementDept> deptList = ptlAgreementDeptService.getByAgreementId(agreementId);
  133. PtlAgreementQueryVo ptlAgreementQueryVo = new PtlAgreementQueryVo(ptlAgreement, schemeQueryDto, underwritingRules, ptlAgreementAttribution, deptList);
  134. return HttpResult.ok(ptlAgreementQueryVo);
  135. }
  136. @Override
  137. @Transactional
  138. public HttpResult<Object> deleteAgreement(String agreementId) {
  139. proxyObject.ifExistsById(agreementId);
  140. boolean b = removeById(agreementId);
  141. AssertionUtils.isSucceed(b, "协议信息删除失败");
  142. // 关联表删除
  143. proxyObject.deleteAssociationInformation(agreementId);
  144. return HttpResult.ok("删除成功");
  145. }
  146. @Override
  147. @Transactional
  148. public HttpResult<Object> reviseAgreement(String userName, String agreementId, PtlAgreementSaveVo agreement) {
  149. PtlAgreementSaveDto agreementSaveDto = agreement.getAgreement();
  150. PtlAgreementAttributionDto attribution = agreement.getAttribution();
  151. PtlAgreement ptlAgreement = proxyObject.ifExistsById(agreementId);
  152. BeanUtils.copyProperties(agreementSaveDto, ptlAgreement);
  153. EsmInsCompany esmInsCompany = proxyObject.verifyLogin(ptlAgreement, agreementSaveDto, attribution);
  154. ptlAgreement.setModifiedBy(userName);
  155. ptlAgreement.setUpdateTime(LocalDateTime.now());
  156. // 修改协议
  157. boolean b = updateById(ptlAgreement);
  158. AssertionUtils.isSucceed(b, "协议信息修改失败");
  159. // 关联表都是先删除后添加
  160. proxyObject.deleteAssociationInformation(agreementId);
  161. String insuranceCompanyId = esmInsCompany.getId();
  162. proxyObject.saveAssociationInformation(agreementId, insuranceCompanyId, agreement);
  163. return HttpResult.ok("修改成功");
  164. }
  165. @Override
  166. public void saveAssociationInformation(String agreementId, String insuranceCompanyId, PtlAgreementSaveVo agreement) {
  167. // 产品费用
  168. ptlAgreementProductCostsService.saveBatchProductCosts(agreementId, agreement.getScheme());
  169. // 承包规则
  170. ptlAgreementUnderwritingRulesService.saveBatchUnderwritingRules(agreementId, agreement.getUnderwritingRules());
  171. // 账号添加
  172. ptlAgreementAttributionService.saveAttribution(agreementId, insuranceCompanyId, agreement.getAttribution());
  173. // 部门授权
  174. ptlAgreementDeptService.saveBatchDept(agreementId, agreement.getDept());
  175. }
  176. @Override
  177. public void deleteAssociationInformation(String agreementId) {
  178. // 删除产品费用
  179. ptlAgreementProductCostsService.deleteByAgreementId(agreementId);
  180. // 删除承保规则
  181. ptlAgreementUnderwritingRulesService.deleteByAgreementId(agreementId);
  182. // 删除账号信息
  183. ptlAgreementAttributionService.removeById(agreementId);
  184. // 删除授权部门
  185. ptlAgreementDeptService.deleteByAgreementId(agreementId);
  186. }
  187. @Override
  188. public EsmInsCompany verifyLogin(PtlAgreement ptlAgreement, PtlAgreementSaveDto agreementSaveDto, PtlAgreementAttributionDto attribution) {
  189. EsmInsCompany esmInsCompany;
  190. // 获取保险公司
  191. if (AgreementType.AT2.getCode().equals(agreementSaveDto.getAgreementType())) {
  192. String message = String.format("协议为 %s 保险公司必须传入", AgreementType.AT2.getDesc());
  193. AssertionUtils.isStringEmpty(agreementSaveDto.getAssociationCompaniesId(), message);
  194. esmInsCompany = esmInsCompanyService.isExists(agreementSaveDto.getAssociationCompaniesId());
  195. } else {
  196. esmInsCompany = esmInsCompanyService.getBySubsidiary(agreementSaveDto.getPartnerCompaniesId());
  197. }
  198. // 验证用户名密码 python api 对接需要验证用户名
  199. if (PtlApiType.PTL_API_2.getCode() == attribution.getApiType()) {
  200. String nameSimple = esmInsCompany.getNamesimple();
  201. insCrawlerOrderController.isLogin(attribution, nameSimple);
  202. }
  203. ptlAgreement.setCompaniesType(esmInsCompany.getType());
  204. ptlAgreement.setInsuranceCompanyId(esmInsCompany.getId());
  205. ptlAgreement.setInsuranceCompany(esmInsCompany.getNamesimple());
  206. // 生成协议id
  207. ptlAgreement.generateTheProtocolCode();
  208. return esmInsCompany;
  209. }
  210. @Override
  211. public HttpResult<Object> auditAgreement(String agreementId, PtlAgreementAuditVo ptlAgreementAuditVo) {
  212. PtlAgreement ptlAgreement = proxyObject.ifExistsById(agreementId);
  213. ptlAgreement.setAuditStatus(ptlAgreementAuditVo.getAuditStatus());
  214. ptlAgreement.setAuditContent(ptlAgreementAuditVo.getAuditContent());
  215. // 修改协议
  216. boolean b = updateById(ptlAgreement);
  217. AssertionUtils.isSucceed(b, "协议信息修改失败");
  218. return HttpResult.ok("修改成功");
  219. }
  220. }