PtlAgreementServiceImpl.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396
  1. package com.ydtech.modules.protocol.service.impl;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.ydtech.config.DictEnumConfig;
  7. import com.ydtech.constants.enums.dict.DictionaryData;
  8. import com.ydtech.constants.enums.dict.DictionaryManagement;
  9. import com.ydtech.constants.enums.dict.agreement.AgreementType;
  10. import com.ydtech.core.page.HttpResult;
  11. import com.ydtech.core.page.PageResult;
  12. import com.ydtech.exception.SystemException;
  13. import com.ydtech.modules.esm.model.EsmInsCompany;
  14. import com.ydtech.modules.esm.service.EsmInsCompanyService;
  15. import com.ydtech.modules.order.service.InsCrawlerOrderService;
  16. import com.ydtech.modules.protocol.dao.PtlAgreementMapper;
  17. import com.ydtech.modules.protocol.entity.constants.PtlApiType;
  18. import com.ydtech.modules.protocol.entity.dto.*;
  19. import com.ydtech.modules.protocol.entity.po.*;
  20. import com.ydtech.modules.protocol.entity.vo.*;
  21. import com.ydtech.modules.protocol.service.*;
  22. import com.ydtech.modules.protocol.utils.AssertionUtils;
  23. import org.apache.commons.lang3.ObjectUtils;
  24. import org.apache.commons.lang3.StringUtils;
  25. import org.springframework.beans.BeanUtils;
  26. import org.springframework.context.annotation.Lazy;
  27. import org.springframework.stereotype.Service;
  28. import org.springframework.transaction.annotation.Transactional;
  29. import java.time.LocalDate;
  30. import java.time.LocalDateTime;
  31. import java.util.ArrayList;
  32. import java.util.List;
  33. import java.util.Map;
  34. import java.util.stream.Collectors;
  35. /**
  36. * @author wenks
  37. * @description 针对表【ptl_agreement(协议信息表)】的数据库操作Service实现
  38. * @createDate 2023-06-05 17:59:52
  39. */
  40. @Service
  41. public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, PtlAgreement> implements PtlAgreementService {
  42. private final PtlAgreementProductCostsService ptlAgreementProductCostsService;
  43. private final PtlAgreementAttributionService ptlAgreementAttributionService;
  44. private final PtlAgreementDeptService ptlAgreementDeptService;
  45. private final EsmInsCompanyService esmInsCompanyService;
  46. private final InsCrawlerOrderService insCrawlerOrderController;
  47. private final PtlAgreementService proxyObject;
  48. private final PtlNonCarInsuranceProductService ptlNonCarInsuranceProductService;
  49. private final PtlAgreementNonCarProductCostsService ptlAgreementNonCarProductCostsService;
  50. private final PtlAgreementUndwrtRulesService ptlAgreementUndwrtRulesService;
  51. public PtlAgreementServiceImpl(PtlAgreementProductCostsService ptlAgreementProductCostsService,
  52. PtlAgreementAttributionService ptlAgreementAttributionService, PtlAgreementDeptService ptlAgreementDeptService,
  53. EsmInsCompanyService esmInsCompanyService, PtlAgreementNonCarProductCostsService ptlAgreementNonCarProductCostsService,
  54. @Lazy InsCrawlerOrderService insCrawlerOrderController, @Lazy PtlAgreementService proxyObject,PtlNonCarInsuranceProductService ptlNonCarInsuranceProductService,@Lazy PtlAgreementUndwrtRulesService ptlAgreementUndwrtRulesService) {
  55. this.ptlAgreementProductCostsService = ptlAgreementProductCostsService;
  56. this.ptlAgreementAttributionService = ptlAgreementAttributionService;
  57. this.ptlAgreementDeptService = ptlAgreementDeptService;
  58. this.esmInsCompanyService = esmInsCompanyService;
  59. this.ptlAgreementNonCarProductCostsService = ptlAgreementNonCarProductCostsService;
  60. this.insCrawlerOrderController = insCrawlerOrderController;
  61. this.proxyObject = proxyObject;
  62. this.ptlNonCarInsuranceProductService=ptlNonCarInsuranceProductService;
  63. this.ptlAgreementUndwrtRulesService=ptlAgreementUndwrtRulesService;
  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 = ptlAgreementUndwrtRulesService.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 PtlAgreementInsCompanyDto getAgreementCompany(String deptId,String companyId) {
  80. LocalDate localDate = LocalDate.now();
  81. PtlAgreementInsCompanyDto agreementCompany = baseMapper.getAgreementCompanyByCompanyId(localDate, deptId,companyId);
  82. return agreementCompany;
  83. }
  84. @Override
  85. public PtlAgreement ifExistsById(String agreementId) {
  86. PtlAgreement ptlAgreement = getById(agreementId);
  87. if (ObjectUtils.isEmpty(ptlAgreement)) {
  88. throw new SystemException("协议id 不存在");
  89. }
  90. return ptlAgreement;
  91. }
  92. @Override
  93. @Transactional
  94. public HttpResult<Object> saveAgreement(PtlAgreementSaveVo agreement, String userName) {
  95. PtlAgreementSaveDto agreementSaveDto = agreement.getAgreement();
  96. PtlAgreementAttributionDto attribution = agreement.getAttribution();
  97. PtlAgreement ptlAgreement = new PtlAgreement();
  98. BeanUtils.copyProperties(agreementSaveDto, ptlAgreement);
  99. EsmInsCompany esmInsCompany = proxyObject.verifyLogin(ptlAgreement, agreementSaveDto, attribution);
  100. ptlAgreement.setCreator(userName);
  101. ptlAgreement.setCreateTime(LocalDateTime.now());
  102. save(ptlAgreement);
  103. // 提交 产品费用 承保规则 账号信息 授权部门
  104. proxyObject.saveAssociationInformation(ptlAgreement.getId(), esmInsCompany, agreement);
  105. return HttpResult.ok("添加成功");
  106. }
  107. @Override
  108. public HttpResult<PageResult<PtlAgreement>> pageAgreement(PtlAgreementPageVo ptlAgreementPageVo) {
  109. int pageNum = ptlAgreementPageVo.getPageNum();
  110. int pageSize = ptlAgreementPageVo.getPageSize();
  111. LambdaQueryWrapper<PtlAgreement> wrapper = new LambdaQueryWrapper<>();
  112. // 获取供应商本级id 及其 下级id
  113. List<String> lowerId = esmInsCompanyService.getByLowerId(ptlAgreementPageVo.getPartnerCompaniesId());
  114. // 审核状态
  115. wrapper.eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getAuditStatus()), PtlAgreement::getAuditStatus, ptlAgreementPageVo.getAuditStatus())
  116. //是否有效
  117. .eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getValidStatus()), PtlAgreement::getValidStatus, ptlAgreementPageVo.getValidStatus())
  118. // 供应商类型
  119. .eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getCompaniesType()), PtlAgreement::getCompaniesType, ptlAgreementPageVo.getCompaniesType())
  120. // 合作公司
  121. .in(!StringUtils.isEmpty(ptlAgreementPageVo.getPartnerCompaniesId()) && !lowerId.isEmpty(), PtlAgreement::getPartnerCompaniesId, lowerId)
  122. // 录入时间
  123. .between(!ObjectUtils.isEmpty(ptlAgreementPageVo.getStartDate()) && !ObjectUtils.isEmpty(ptlAgreementPageVo.getEndDate()), PtlAgreement::getCreateTime, ptlAgreementPageVo.getStartDate(), ptlAgreementPageVo.getEndDate());
  124. Page<PtlAgreement> ptlAgreementPage = new Page<>(pageNum, pageSize);
  125. Page<PtlAgreement> agreementPage = page(ptlAgreementPage, wrapper);
  126. PageResult<PtlAgreement> ptlAgreementPageResult = new PageResult<>(pageNum, pageSize, (int) agreementPage.getTotal(), agreementPage.getRecords());
  127. return HttpResult.ok(ptlAgreementPageResult);
  128. }
  129. @Override
  130. public HttpResult<PtlAgreementQueryVo> getByAgreementId(String agreementId) {
  131. PtlAgreement ptlAgreement = proxyObject.ifExistsById(agreementId);
  132. // 获取产品费用
  133. List<PltAgreementSchemeSaveDto> schemeQueryDto = ptlAgreementProductCostsService.getByAgreementId(agreementId);
  134. // 获取非车险产品费用
  135. List<PtlAgreementNonCarProductCosts> nonCarProductCosts = ptlAgreementNonCarProductCostsService.getByAgreementId(agreementId);
  136. // 获取承保规则
  137. List<PtlAgreementUndwrtRulesSaveDto> underwritingRules = ptlAgreementUndwrtRulesService.getByAgreementId(agreementId);
  138. // 账号信息查询
  139. PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
  140. //2023-08-28 lig 增加 解决前端空对象为null问题,改为返回为空对象
  141. if (null == ptlAgreementAttribution) {
  142. ptlAgreementAttribution = new PtlAgreementAttribution();
  143. ptlAgreementAttribution.setId("");
  144. ptlAgreementAttribution.setInsCompanyId("");
  145. ptlAgreementAttribution.setInsCompanyName("");
  146. ptlAgreementAttribution.setTemplateId("");
  147. ptlAgreementAttribution.setApiType(1);
  148. ptlAgreementAttribution.setFields(new JSONArray());
  149. ptlAgreementAttribution.setUsername("");
  150. ptlAgreementAttribution.setPassword("");
  151. }
  152. // 授权查询
  153. List<PtlAgreementDept> deptList = ptlAgreementDeptService.getByAgreementId(agreementId);
  154. PtlAgreementQueryVo ptlAgreementQueryVo = new PtlAgreementQueryVo(ptlAgreement, schemeQueryDto, nonCarProductCosts, underwritingRules, ptlAgreementAttribution, deptList);
  155. return HttpResult.ok(ptlAgreementQueryVo);
  156. }
  157. @Override
  158. @Transactional
  159. public HttpResult<Object> deleteAgreement(String agreementId) {
  160. proxyObject.ifExistsById(agreementId);
  161. boolean b = removeById(agreementId);
  162. AssertionUtils.isSucceed(b, "协议信息删除失败");
  163. // 关联表删除
  164. proxyObject.deleteAssociationInformation(agreementId);
  165. return HttpResult.ok("删除成功");
  166. }
  167. @Override
  168. @Transactional
  169. public HttpResult<Object> reviseAgreement(String userName, String agreementId, PtlAgreementSaveVo agreement) {
  170. PtlAgreementSaveDto agreementSaveDto = agreement.getAgreement();
  171. PtlAgreementAttributionDto attribution = agreement.getAttribution();
  172. PtlAgreement ptlAgreement = proxyObject.ifExistsById(agreementId);
  173. BeanUtils.copyProperties(agreementSaveDto, ptlAgreement);
  174. EsmInsCompany esmInsCompany = proxyObject.verifyLogin(ptlAgreement, agreementSaveDto, attribution);
  175. ptlAgreement.setModifiedBy(userName);
  176. ptlAgreement.setUpdateTime(LocalDateTime.now());
  177. // 修改协议
  178. boolean b = updateById(ptlAgreement);
  179. AssertionUtils.isSucceed(b, "协议信息修改失败");
  180. // 关联表都是先删除后添加
  181. proxyObject.deleteAssociationInformationExcludeCosts(agreementId);
  182. // 提交 产品费用 承保规则 账号信息 授权部门
  183. proxyObject.saveAssociationInformation(agreementId, esmInsCompany, agreement);
  184. return HttpResult.ok("修改成功");
  185. }
  186. @Override
  187. public void saveAssociationInformation(String agreementId, EsmInsCompany esmInsCompany, PtlAgreementSaveVo agreement) {
  188. // 产品费用
  189. ptlAgreementProductCostsService.saveBatchProductCosts(agreementId, agreement.getScheme());
  190. // 非车险产品费用
  191. ptlAgreementNonCarProductCostsService.saveBatchNonCarProductCosts(agreementId, agreement.getNonCarProductCosts());
  192. //同步刷新其他协议非车产品费用信息(有待同步协议时,进行同步)
  193. if(agreement.getSyncAgreementIds()!=null&&agreement.getSyncAgreementIds().size()>0){
  194. for(int i=0;i<agreement.getSyncAgreementIds().size();i++){
  195. String tempAgreementId=agreement.getSyncAgreementIds().get(i);
  196. PtlAgreement destAgreement= getById(tempAgreementId);
  197. //根据归属保司,找出本级和上级 所有产品代码
  198. //先获取相关保险公司列表
  199. String companyId=destAgreement.getPartnerCompaniesId();
  200. if(destAgreement.getAssociationCompaniesId()!=null&&!"".equals(destAgreement.getAssociationCompaniesId())){
  201. companyId=destAgreement.getAssociationCompaniesId();
  202. }
  203. List<String> companyIdList=esmInsCompanyService.getAllRelationCompanyId(companyId);
  204. //再根据保险公司列表获取所有非车产品列表
  205. List<PtlNonCarInsuranceProduct> productList=ptlNonCarInsuranceProductService.findProductListByCompangIds(companyIdList);
  206. List<PtlAgreementNonCarProductCostsSaveVo> finalList=new ArrayList<>();
  207. //按找出的产品过滤传进来的 费用方案列表
  208. for(PtlNonCarInsuranceProduct tempProductDto:productList){
  209. for(PtlAgreementNonCarProductCostsSaveVo productCostDto:agreement.getNonCarProductCosts()){
  210. if(productCostDto.getProductId().equals(tempProductDto.getProductCode())){
  211. finalList.add(productCostDto);
  212. }
  213. }
  214. }
  215. ptlAgreementNonCarProductCostsService.synNonCarProductCosts(destAgreement,finalList);
  216. }
  217. }
  218. // 承包规则
  219. ptlAgreementUndwrtRulesService.saveBatchProductCosts(agreementId,agreement.getUnderwritingRules());
  220. // 账号添加
  221. PtlAgreementAttributionDto attribution = agreement.getAttribution();
  222. if (StringUtils.isNotEmpty(attribution.getTemplateId())) {
  223. ptlAgreementAttributionService.saveAttribution(agreementId, esmInsCompany, agreement.getAttribution());
  224. }
  225. // 部门授权
  226. ptlAgreementDeptService.saveBatchDept(agreementId, agreement.getDept());
  227. }
  228. @Override
  229. public void deleteAssociationInformation(String agreementId) {
  230. // 删除产品费用
  231. ptlAgreementProductCostsService.deleteByAgreementId(agreementId);
  232. // 删除关联信息 删除非车险产品费用 承保规则 账号信息 授权部门
  233. proxyObject.deleteAssociationInformationExcludeCosts(agreementId);
  234. }
  235. @Override
  236. public void deleteAssociationInformationExcludeCosts(String agreementId) {
  237. // 删除非车险产品费用
  238. ptlAgreementNonCarProductCostsService.deleteByAgreementId(agreementId);
  239. // 删除承保规则
  240. ptlAgreementUndwrtRulesService.deleteByAgreementId(agreementId);
  241. // 删除账号信息
  242. ptlAgreementAttributionService.removeById(agreementId);
  243. // 删除授权部门
  244. ptlAgreementDeptService.deleteByAgreementId(agreementId);
  245. }
  246. @Override
  247. public EsmInsCompany verifyLogin(PtlAgreement ptlAgreement, PtlAgreementSaveDto agreementSaveDto, PtlAgreementAttributionDto attribution) {
  248. EsmInsCompany esmInsCompany;
  249. // 获取保险公司
  250. if (AgreementType.AT2.getCode().equals(agreementSaveDto.getAgreementType())) {
  251. String message = String.format("协议为 %s 保险公司必须传入", AgreementType.AT2.getDesc());
  252. AssertionUtils.isStringEmpty(agreementSaveDto.getAssociationCompaniesId(), message);
  253. esmInsCompany = esmInsCompanyService.isExists(agreementSaveDto.getAssociationCompaniesId());
  254. } else {
  255. esmInsCompany = esmInsCompanyService.getBySubsidiary(agreementSaveDto.getPartnerCompaniesId());
  256. }
  257. // 验证用户名密码 python api 对接需要验证用户名
  258. if (!ObjectUtils.isEmpty(attribution.getApiType()) && PtlApiType.PTL_API_2.getCode() == attribution.getApiType()) {
  259. String nameSimple = esmInsCompany.getNamesimple();
  260. String id = esmInsCompany.getId();
  261. insCrawlerOrderController.isLogin(attribution, id, nameSimple);
  262. }
  263. ptlAgreement.setCompaniesType(esmInsCompany.getType());
  264. ptlAgreement.setInsuranceCompanyId(esmInsCompany.getId());
  265. ptlAgreement.setInsuranceCompany(esmInsCompany.getNamesimple());
  266. // 生成协议id
  267. ptlAgreement.generateTheProtocolCode();
  268. return esmInsCompany;
  269. }
  270. @Override
  271. public HttpResult<Object> auditAgreement(String agreementId, PtlAgreementAuditVo ptlAgreementAuditVo) {
  272. PtlAgreement ptlAgreement = proxyObject.ifExistsById(agreementId);
  273. ptlAgreement.setAuditStatus(ptlAgreementAuditVo.getAuditStatus());
  274. ptlAgreement.setAuditContent(ptlAgreementAuditVo.getAuditContent());
  275. // 修改协议
  276. boolean b = updateById(ptlAgreement);
  277. AssertionUtils.isSucceed(b, "协议信息修改失败");
  278. return HttpResult.ok("修改成功");
  279. }
  280. @Override
  281. public HttpResult<List<PtlAgreementNonCarProductCostsVo>> getNonCarCostsInfo(String agreementId, String companyId){
  282. List<PtlAgreementNonCarProductCostsVo> result=new ArrayList<>();
  283. //先根据传过来的保险公司代码,找上下级所有机构层级对应的非车产品列表
  284. if(companyId!=null&&!"".equals(companyId)){
  285. //先获取相关保险公司列表
  286. List<String> companyIdList=esmInsCompanyService.getAllRelationCompanyId(companyId);
  287. //再根据保险公司列表获取所有非车产品列表
  288. List<PtlNonCarInsuranceProduct> productList=ptlNonCarInsuranceProductService.findProductListByCompangIds(companyIdList);
  289. if(productList!=null&&productList.size()>0){
  290. for(int i=0;i<productList.size();i++){
  291. PtlNonCarInsuranceProduct tempProductDto=productList.get(i);
  292. PtlAgreementNonCarProductCostsVo costsVo=new PtlAgreementNonCarProductCostsVo();
  293. costsVo.setProductId(tempProductDto.getProductCode());
  294. costsVo.setProductName(tempProductDto.getProductName());
  295. costsVo.setCompanyId(tempProductDto.getCompanyId());
  296. EsmInsCompany tempInsCompany=esmInsCompanyService.getById(tempProductDto.getCompanyId());
  297. costsVo.setCompanyName(tempInsCompany.getName());
  298. costsVo.setRiskCode(tempProductDto.getInsuranceCode());
  299. Map<String, DictionaryManagement> m = DictEnumConfig.getDmMap();
  300. DictionaryManagement dictionaryManagement=m.get("nonCarInsuranceCode");
  301. String riskName="";
  302. for(DictionaryData data: dictionaryManagement.getDdList()){
  303. if(tempProductDto.getInsuranceCode().equals(data.getDictValue())){
  304. riskName=data.getDictTag();
  305. }
  306. }
  307. costsVo.setRiskName(riskName);
  308. //然后根据协议ID 查询所有已配置费用的产品进行赋值
  309. if(agreementId!=null&&!"".equals(agreementId)){
  310. //使用协议ID 产品ID 获取已经配置好的信息
  311. PtlAgreementNonCarProductCosts agreementNonCarProductCosts=ptlAgreementNonCarProductCostsService.getNonCarProductCostsInfo(agreementId,tempProductDto.getProductCode());
  312. //赋值已配置的费用比例
  313. if(agreementNonCarProductCosts!=null){
  314. costsVo.setCostsProportion(agreementNonCarProductCosts.getCostsProportion());
  315. }
  316. }
  317. result.add(costsVo);
  318. }
  319. }
  320. }else{
  321. //如果归属保司没选,则直接返回空列表,相当于没查到对应非车产品信息
  322. }
  323. return HttpResult.ok(result);
  324. }
  325. @Override
  326. public HttpResult<List<PtlAgreement>> findRelationAgreement(String companyId){
  327. List<PtlAgreement> resultList=new ArrayList<>();
  328. if(companyId!=null&&!"".equals(companyId)) {
  329. //先获取相关保险公司列表
  330. List<String> companyIdList = esmInsCompanyService.getAllRelationCompanyId(companyId);
  331. if(companyIdList!=null&&companyIdList.size()>0){
  332. for(int i=0;i<companyIdList.size();i++){
  333. String tempCom=companyIdList.get(i);
  334. LambdaQueryWrapper<PtlAgreement> wrapper = new LambdaQueryWrapper<>();
  335. wrapper.eq(PtlAgreement::getValidStatus,"1");
  336. wrapper.and(wq1->wq1.eq(PtlAgreement::getPartnerCompaniesId,tempCom).or(wq2->wq2.eq(PtlAgreement::getAssociationCompaniesId,tempCom)));
  337. resultList.addAll(list(wrapper));
  338. }
  339. for(int j=0;j<resultList.size();j++){
  340. PtlAgreement agreement=resultList.get(j);
  341. String tempCompanyId=agreement.getAssociationCompaniesId()!=null&&!"".equals(agreement.getAssociationCompaniesId())?agreement.getAssociationCompaniesId():agreement.getPartnerCompaniesId();
  342. EsmInsCompany tempCompany= esmInsCompanyService.getById(tempCompanyId);
  343. agreement.setInsuranceCompany(tempCompany.getName());
  344. }
  345. }
  346. }
  347. return HttpResult.ok(resultList);
  348. }
  349. }