| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385 |
- package com.ydtech.modules.protocol.service.impl;
- import com.alibaba.fastjson.JSONArray;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.ydtech.config.DictEnumConfig;
- import com.ydtech.constants.enums.dict.DictionaryData;
- import com.ydtech.constants.enums.dict.DictionaryManagement;
- import com.ydtech.constants.enums.dict.agreement.AgreementType;
- import com.ydtech.core.page.HttpResult;
- import com.ydtech.core.page.PageResult;
- import com.ydtech.exception.SystemException;
- import com.ydtech.modules.esm.model.EsmInsCompany;
- import com.ydtech.modules.esm.service.EsmInsCompanyService;
- import com.ydtech.modules.order.service.InsCrawlerOrderService;
- import com.ydtech.modules.protocol.dao.PtlAgreementMapper;
- import com.ydtech.modules.protocol.entity.constants.PtlApiType;
- import com.ydtech.modules.protocol.entity.dto.*;
- import com.ydtech.modules.protocol.entity.po.*;
- import com.ydtech.modules.protocol.entity.vo.*;
- import com.ydtech.modules.protocol.service.*;
- import com.ydtech.modules.protocol.utils.AssertionUtils;
- import org.apache.commons.lang3.ObjectUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.BeanUtils;
- import org.springframework.context.annotation.Lazy;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.time.LocalDate;
- import java.time.LocalDateTime;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
- /**
- * @author wenks
- * @description 针对表【ptl_agreement(协议信息表)】的数据库操作Service实现
- * @createDate 2023-06-05 17:59:52
- */
- @Service
- public class PtlAgreementServiceImpl extends ServiceImpl<PtlAgreementMapper, PtlAgreement> implements PtlAgreementService {
- private final PtlAgreementProductCostsService ptlAgreementProductCostsService;
- private final PtlAgreementUnderwritingRulesService ptlAgreementUnderwritingRulesService;
- private final PtlAgreementAttributionService ptlAgreementAttributionService;
- private final PtlAgreementDeptService ptlAgreementDeptService;
- private final EsmInsCompanyService esmInsCompanyService;
- private final InsCrawlerOrderService insCrawlerOrderController;
- private final PtlAgreementService proxyObject;
- private final PtlNonCarInsuranceProductService ptlNonCarInsuranceProductService;
- private final PtlAgreementNonCarProductCostsService ptlAgreementNonCarProductCostsService;
- public PtlAgreementServiceImpl(PtlAgreementProductCostsService ptlAgreementProductCostsService, PtlAgreementUnderwritingRulesService ptlAgreementUnderwritingRulesService,
- PtlAgreementAttributionService ptlAgreementAttributionService, PtlAgreementDeptService ptlAgreementDeptService,
- EsmInsCompanyService esmInsCompanyService, PtlAgreementNonCarProductCostsService ptlAgreementNonCarProductCostsService,
- @Lazy InsCrawlerOrderService insCrawlerOrderController, @Lazy PtlAgreementService proxyObject,PtlNonCarInsuranceProductService ptlNonCarInsuranceProductService) {
- this.ptlAgreementProductCostsService = ptlAgreementProductCostsService;
- this.ptlAgreementUnderwritingRulesService = ptlAgreementUnderwritingRulesService;
- this.ptlAgreementAttributionService = ptlAgreementAttributionService;
- this.ptlAgreementDeptService = ptlAgreementDeptService;
- this.esmInsCompanyService = esmInsCompanyService;
- this.ptlAgreementNonCarProductCostsService = ptlAgreementNonCarProductCostsService;
- this.insCrawlerOrderController = insCrawlerOrderController;
- this.proxyObject = proxyObject;
- this.ptlNonCarInsuranceProductService=ptlNonCarInsuranceProductService;
- }
- @Override
- public List<PtlAgreementInsCompanyDto> getAgreementCompany(String deptId) {
- LocalDate localDate = LocalDate.now();
- List<PtlAgreementInsCompanyDto> agreementCompany = baseMapper.getAgreementCompany(localDate, deptId);
- List<String> agreementIdList = agreementCompany.stream()
- .flatMap(x -> x.getAgreement().stream().map(PtlAgreementDto::getId))
- .collect(Collectors.toList());
- Map<String, List<String>> licenseNoList = ptlAgreementUnderwritingRulesService.getByLicenseNo(agreementIdList);
- agreementCompany.forEach(
- x -> x.getAgreement().forEach(a -> a.setLicenseNo(licenseNoList.get(a.getId())))
- );
- return agreementCompany;
- }
- @Override
- public PtlAgreement ifExistsById(String agreementId) {
- PtlAgreement ptlAgreement = getById(agreementId);
- if (ObjectUtils.isEmpty(ptlAgreement)) {
- throw new SystemException("协议id 不存在");
- }
- return ptlAgreement;
- }
- @Override
- @Transactional
- public HttpResult<Object> saveAgreement(PtlAgreementSaveVo agreement, String userName) {
- PtlAgreementSaveDto agreementSaveDto = agreement.getAgreement();
- PtlAgreementAttributionDto attribution = agreement.getAttribution();
- PtlAgreement ptlAgreement = new PtlAgreement();
- BeanUtils.copyProperties(agreementSaveDto, ptlAgreement);
- EsmInsCompany esmInsCompany = proxyObject.verifyLogin(ptlAgreement, agreementSaveDto, attribution);
- ptlAgreement.setCreator(userName);
- ptlAgreement.setCreateTime(LocalDateTime.now());
- save(ptlAgreement);
- // 提交 产品费用 承保规则 账号信息 授权部门
- proxyObject.saveAssociationInformation(ptlAgreement.getId(), esmInsCompany, agreement);
- return HttpResult.ok("添加成功");
- }
- @Override
- public HttpResult<PageResult<PtlAgreement>> pageAgreement(PtlAgreementPageVo ptlAgreementPageVo) {
- int pageNum = ptlAgreementPageVo.getPageNum();
- int pageSize = ptlAgreementPageVo.getPageSize();
- LambdaQueryWrapper<PtlAgreement> wrapper = new LambdaQueryWrapper<>();
- // 获取供应商本级id 及其 下级id
- List<String> lowerId = esmInsCompanyService.getByLowerId(ptlAgreementPageVo.getPartnerCompaniesId());
- // 审核状态
- wrapper.eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getAuditStatus()), PtlAgreement::getAuditStatus, ptlAgreementPageVo.getAuditStatus())
- // 供应商类型
- .eq(!ObjectUtils.isEmpty(ptlAgreementPageVo.getCompaniesType()), PtlAgreement::getCompaniesType, ptlAgreementPageVo.getCompaniesType())
- // 合作公司
- .in(!StringUtils.isEmpty(ptlAgreementPageVo.getPartnerCompaniesId()) && !lowerId.isEmpty(), PtlAgreement::getPartnerCompaniesId, lowerId)
- // 录入时间
- .between(!ObjectUtils.isEmpty(ptlAgreementPageVo.getStartDate()) && ObjectUtils.isEmpty(ptlAgreementPageVo.getEndDate()), PtlAgreement::getCreateTime, ptlAgreementPageVo.getStartDate(), ptlAgreementPageVo.getEndDate());
- Page<PtlAgreement> ptlAgreementPage = new Page<>(pageNum, pageSize);
- Page<PtlAgreement> agreementPage = page(ptlAgreementPage, wrapper);
- PageResult<PtlAgreement> ptlAgreementPageResult = new PageResult<>(pageNum, pageSize, (int) agreementPage.getTotal(), agreementPage.getRecords());
- return HttpResult.ok(ptlAgreementPageResult);
- }
- @Override
- public HttpResult<PtlAgreementQueryVo> getByAgreementId(String agreementId) {
- PtlAgreement ptlAgreement = proxyObject.ifExistsById(agreementId);
- // 获取产品费用
- List<PltAgreementSchemeSaveDto> schemeQueryDto = ptlAgreementProductCostsService.getByAgreementId(agreementId);
- // 获取非车险产品费用
- List<PtlAgreementNonCarProductCosts> nonCarProductCosts = ptlAgreementNonCarProductCostsService.getByAgreementId(agreementId);
- // 获取承保规则
- List<PtlAgreementUnderwritingRules> underwritingRules = ptlAgreementUnderwritingRulesService.getByAgreementId(agreementId);
- // 账号信息查询
- PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
- //2023-08-28 lig 增加 解决前端空对象为null问题,改为返回为空对象
- if (null == ptlAgreementAttribution) {
- ptlAgreementAttribution = new PtlAgreementAttribution();
- ptlAgreementAttribution.setId("");
- ptlAgreementAttribution.setInsCompanyId("");
- ptlAgreementAttribution.setInsCompanyName("");
- ptlAgreementAttribution.setTemplateId("");
- ptlAgreementAttribution.setApiType(1);
- ptlAgreementAttribution.setFields(new JSONArray());
- ptlAgreementAttribution.setUsername("");
- ptlAgreementAttribution.setPassword("");
- }
- // 授权查询
- List<PtlAgreementDept> deptList = ptlAgreementDeptService.getByAgreementId(agreementId);
- PtlAgreementQueryVo ptlAgreementQueryVo = new PtlAgreementQueryVo(ptlAgreement, schemeQueryDto, nonCarProductCosts, underwritingRules, ptlAgreementAttribution, deptList);
- return HttpResult.ok(ptlAgreementQueryVo);
- }
- @Override
- @Transactional
- public HttpResult<Object> deleteAgreement(String agreementId) {
- proxyObject.ifExistsById(agreementId);
- boolean b = removeById(agreementId);
- AssertionUtils.isSucceed(b, "协议信息删除失败");
- // 关联表删除
- proxyObject.deleteAssociationInformation(agreementId);
- return HttpResult.ok("删除成功");
- }
- @Override
- @Transactional
- public HttpResult<Object> reviseAgreement(String userName, String agreementId, PtlAgreementSaveVo agreement) {
- PtlAgreementSaveDto agreementSaveDto = agreement.getAgreement();
- PtlAgreementAttributionDto attribution = agreement.getAttribution();
- PtlAgreement ptlAgreement = proxyObject.ifExistsById(agreementId);
- BeanUtils.copyProperties(agreementSaveDto, ptlAgreement);
- EsmInsCompany esmInsCompany = proxyObject.verifyLogin(ptlAgreement, agreementSaveDto, attribution);
- ptlAgreement.setModifiedBy(userName);
- ptlAgreement.setUpdateTime(LocalDateTime.now());
- // 修改协议
- boolean b = updateById(ptlAgreement);
- AssertionUtils.isSucceed(b, "协议信息修改失败");
- // 关联表都是先删除后添加
- proxyObject.deleteAssociationInformationExcludeCosts(agreementId);
- // 提交 产品费用 承保规则 账号信息 授权部门
- proxyObject.saveAssociationInformation(agreementId, esmInsCompany, agreement);
- return HttpResult.ok("修改成功");
- }
- @Override
- public void saveAssociationInformation(String agreementId, EsmInsCompany esmInsCompany, PtlAgreementSaveVo agreement) {
- // 产品费用
- ptlAgreementProductCostsService.saveBatchProductCosts(agreementId, agreement.getScheme());
- // 非车险产品费用
- ptlAgreementNonCarProductCostsService.saveBatchNonCarProductCosts(agreementId, agreement.getNonCarProductCosts());
- //同步刷新其他协议非车产品费用信息(有待同步协议时,进行同步)
- if(agreement.getSyncAgreementIds()!=null&&agreement.getSyncAgreementIds().size()>0){
- for(int i=0;i<agreement.getSyncAgreementIds().size();i++){
- String tempAgreementId=agreement.getSyncAgreementIds().get(i);
- PtlAgreement destAgreement= getById(tempAgreementId);
- //根据归属保司,找出本级和上级 所有产品代码
- //先获取相关保险公司列表
- String companyId=destAgreement.getPartnerCompaniesId();
- if(destAgreement.getAssociationCompaniesId()!=null&&!"".equals(destAgreement.getAssociationCompaniesId())){
- companyId=destAgreement.getAssociationCompaniesId();
- }
- List<String> companyIdList=esmInsCompanyService.getAllRelationCompanyId(companyId);
- //再根据保险公司列表获取所有非车产品列表
- List<PtlNonCarInsuranceProduct> productList=ptlNonCarInsuranceProductService.findProductListByCompangIds(companyIdList);
- List<PtlAgreementNonCarProductCostsSaveVo> finalList=new ArrayList<>();
- //按找出的产品过滤传进来的 费用方案列表
- for(PtlNonCarInsuranceProduct tempProductDto:productList){
- for(PtlAgreementNonCarProductCostsSaveVo productCostDto:agreement.getNonCarProductCosts()){
- if(productCostDto.getProductId().equals(tempProductDto.getProductCode())){
- finalList.add(productCostDto);
- }
- }
- }
- ptlAgreementNonCarProductCostsService.synNonCarProductCosts(destAgreement,finalList);
- }
- }
- // 承包规则
- ptlAgreementUnderwritingRulesService.saveBatchUnderwritingRules(agreementId, agreement.getUnderwritingRules());
- // 账号添加
- PtlAgreementAttributionDto attribution = agreement.getAttribution();
- if (StringUtils.isNotEmpty(attribution.getTemplateId())) {
- ptlAgreementAttributionService.saveAttribution(agreementId, esmInsCompany, agreement.getAttribution());
- }
- // 部门授权
- ptlAgreementDeptService.saveBatchDept(agreementId, agreement.getDept());
- }
- @Override
- public void deleteAssociationInformation(String agreementId) {
- // 删除产品费用
- ptlAgreementProductCostsService.deleteByAgreementId(agreementId);
- // 删除关联信息 删除非车险产品费用 承保规则 账号信息 授权部门
- proxyObject.deleteAssociationInformationExcludeCosts(agreementId);
- }
- @Override
- public void deleteAssociationInformationExcludeCosts(String agreementId) {
- // 删除非车险产品费用
- ptlAgreementNonCarProductCostsService.deleteByAgreementId(agreementId);
- // 删除承保规则
- ptlAgreementUnderwritingRulesService.deleteByAgreementId(agreementId);
- // 删除账号信息
- ptlAgreementAttributionService.removeById(agreementId);
- // 删除授权部门
- ptlAgreementDeptService.deleteByAgreementId(agreementId);
- }
- @Override
- public EsmInsCompany verifyLogin(PtlAgreement ptlAgreement, PtlAgreementSaveDto agreementSaveDto, PtlAgreementAttributionDto attribution) {
- EsmInsCompany esmInsCompany;
- // 获取保险公司
- if (AgreementType.AT2.getCode().equals(agreementSaveDto.getAgreementType())) {
- String message = String.format("协议为 %s 保险公司必须传入", AgreementType.AT2.getDesc());
- AssertionUtils.isStringEmpty(agreementSaveDto.getAssociationCompaniesId(), message);
- esmInsCompany = esmInsCompanyService.isExists(agreementSaveDto.getAssociationCompaniesId());
- } else {
- esmInsCompany = esmInsCompanyService.getBySubsidiary(agreementSaveDto.getPartnerCompaniesId());
- }
- // 验证用户名密码 python api 对接需要验证用户名
- if (!ObjectUtils.isEmpty(attribution.getApiType()) && PtlApiType.PTL_API_2.getCode() == attribution.getApiType()) {
- String nameSimple = esmInsCompany.getNamesimple();
- String id = esmInsCompany.getId();
- insCrawlerOrderController.isLogin(attribution, id, nameSimple);
- }
- ptlAgreement.setCompaniesType(esmInsCompany.getType());
- ptlAgreement.setInsuranceCompanyId(esmInsCompany.getId());
- ptlAgreement.setInsuranceCompany(esmInsCompany.getNamesimple());
- // 生成协议id
- ptlAgreement.generateTheProtocolCode();
- return esmInsCompany;
- }
- @Override
- public HttpResult<Object> auditAgreement(String agreementId, PtlAgreementAuditVo ptlAgreementAuditVo) {
- PtlAgreement ptlAgreement = proxyObject.ifExistsById(agreementId);
- ptlAgreement.setAuditStatus(ptlAgreementAuditVo.getAuditStatus());
- ptlAgreement.setAuditContent(ptlAgreementAuditVo.getAuditContent());
- // 修改协议
- boolean b = updateById(ptlAgreement);
- AssertionUtils.isSucceed(b, "协议信息修改失败");
- return HttpResult.ok("修改成功");
- }
- @Override
- public HttpResult<List<PtlAgreementNonCarProductCostsVo>> getNonCarCostsInfo(String agreementId, String companyId){
- List<PtlAgreementNonCarProductCostsVo> result=new ArrayList<>();
- //先根据传过来的保险公司代码,找上下级所有机构层级对应的非车产品列表
- if(companyId!=null&&!"".equals(companyId)){
- //先获取相关保险公司列表
- List<String> companyIdList=esmInsCompanyService.getAllRelationCompanyId(companyId);
- //再根据保险公司列表获取所有非车产品列表
- List<PtlNonCarInsuranceProduct> productList=ptlNonCarInsuranceProductService.findProductListByCompangIds(companyIdList);
- if(productList!=null&&productList.size()>0){
- for(int i=0;i<productList.size();i++){
- PtlNonCarInsuranceProduct tempProductDto=productList.get(i);
- PtlAgreementNonCarProductCostsVo costsVo=new PtlAgreementNonCarProductCostsVo();
- costsVo.setProductId(tempProductDto.getProductCode());
- costsVo.setProductName(tempProductDto.getProductName());
- costsVo.setCompanyId(tempProductDto.getCompanyId());
- EsmInsCompany tempInsCompany=esmInsCompanyService.getById(tempProductDto.getCompanyId());
- costsVo.setCompanyName(tempInsCompany.getName());
- costsVo.setRiskCode(tempProductDto.getInsuranceCode());
- Map<String, DictionaryManagement> m = DictEnumConfig.getDmMap();
- DictionaryManagement dictionaryManagement=m.get("nonCarInsuranceCode");
- String riskName="";
- for(DictionaryData data: dictionaryManagement.getDdList()){
- if(tempProductDto.getInsuranceCode().equals(data.getDictValue())){
- riskName=data.getDictTag();
- }
- }
- costsVo.setRiskName(riskName);
- //然后根据协议ID 查询所有已配置费用的产品进行赋值
- if(agreementId!=null&&!"".equals(agreementId)){
- //使用协议ID 产品ID 获取已经配置好的信息
- PtlAgreementNonCarProductCosts agreementNonCarProductCosts=ptlAgreementNonCarProductCostsService.getNonCarProductCostsInfo(agreementId,tempProductDto.getProductCode());
- //赋值已配置的费用比例
- if(agreementNonCarProductCosts!=null){
- costsVo.setCostsProportion(agreementNonCarProductCosts.getCostsProportion());
- }
- }
- result.add(costsVo);
- }
- }
- }else{
- //如果归属保司没选,则直接返回空列表,相当于没查到对应非车产品信息
- }
- return HttpResult.ok(result);
- }
- @Override
- public HttpResult<List<PtlAgreement>> findRelationAgreement(String companyId){
- List<PtlAgreement> resultList=new ArrayList<>();
- if(companyId!=null&&!"".equals(companyId)) {
- //先获取相关保险公司列表
- List<String> companyIdList = esmInsCompanyService.getAllRelationCompanyId(companyId);
- if(companyIdList!=null&&companyIdList.size()>0){
- for(int i=0;i<companyIdList.size();i++){
- String tempCom=companyIdList.get(i);
- LambdaQueryWrapper<PtlAgreement> wrapper = new LambdaQueryWrapper<>();
- wrapper.eq(PtlAgreement::getValidStatus,"1");
- wrapper.and(wq1->wq1.eq(PtlAgreement::getPartnerCompaniesId,tempCom).or(wq2->wq2.eq(PtlAgreement::getAssociationCompaniesId,tempCom)));
- resultList.addAll(list(wrapper));
- }
- for(int j=0;j<resultList.size();j++){
- PtlAgreement agreement=resultList.get(j);
- String tempCompanyId=agreement.getAssociationCompaniesId()!=null&&!"".equals(agreement.getAssociationCompaniesId())?agreement.getAssociationCompaniesId():agreement.getPartnerCompaniesId();
- EsmInsCompany tempCompany= esmInsCompanyService.getById(tempCompanyId);
- agreement.setInsuranceCompany(tempCompany.getName());
- }
- }
- }
- return HttpResult.ok(resultList);
- }
- }
|