package com.ydtech.modules.protocol.service.impl; 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.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.PtlAgreement; import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution; import com.ydtech.modules.protocol.entity.po.PtlAgreementDept; import com.ydtech.modules.protocol.entity.po.PtlAgreementUnderwritingRules; import com.ydtech.modules.protocol.entity.vo.PtlAgreementAuditVo; import com.ydtech.modules.protocol.entity.vo.PtlAgreementPageVo; import com.ydtech.modules.protocol.entity.vo.PtlAgreementQueryVo; import com.ydtech.modules.protocol.entity.vo.PtlAgreementSaveVo; 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.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.time.LocalDateTime; 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 implements PtlAgreementService { private final PtlAgreementProductCostsService ptlAgreementProductCostsService; private final PtlAgreementUnderwritingRulesService ptlAgreementUnderwritingRulesService; private final PtlAgreementAttributionService ptlAgreementAttributionService; private final PtlAgreementDeptService ptlAgreementDeptService; private final EsmInsCompanyService esmInsCompanyService; private InsCrawlerOrderService insCrawlerOrderController; private PtlAgreementService proxyObject; public PtlAgreementServiceImpl(PtlAgreementProductCostsService ptlAgreementProductCostsService, PtlAgreementUnderwritingRulesService ptlAgreementUnderwritingRulesService, PtlAgreementAttributionService ptlAgreementAttributionService, PtlAgreementDeptService ptlAgreementDeptService, EsmInsCompanyService esmInsCompanyService) { this.ptlAgreementProductCostsService = ptlAgreementProductCostsService; this.ptlAgreementUnderwritingRulesService = ptlAgreementUnderwritingRulesService; this.ptlAgreementAttributionService = ptlAgreementAttributionService; this.ptlAgreementDeptService = ptlAgreementDeptService; this.esmInsCompanyService = esmInsCompanyService; } @Autowired public void setProxyObject(PtlAgreementService proxyObject) { this.proxyObject = proxyObject; } @Autowired public void setInsCrawlerOrderController(InsCrawlerOrderService insCrawlerOrderController) { this.insCrawlerOrderController = insCrawlerOrderController; } @Override public List getAgreementCompany(String deptId) { LocalDate localDate = LocalDate.now(); List agreementCompany = baseMapper.getAgreementCompany(localDate, deptId); List agreementIdList = agreementCompany.stream() .flatMap(x -> x.getAgreement().stream().map(PtlAgreementDto::getId)) .collect(Collectors.toList()); Map> 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 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); // 产品费用 String insuranceCompanyId = esmInsCompany.getId(); proxyObject.saveAssociationInformation(ptlAgreement.getId(), insuranceCompanyId, agreement); return HttpResult.ok("添加成功"); } @Override public HttpResult> pageAgreement(PtlAgreementPageVo ptlAgreementPageVo) { int pageNum = ptlAgreementPageVo.getPageNum(); int pageSize = ptlAgreementPageVo.getPageSize(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); // 获取供应商本级id 及其 下级id List 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 ptlAgreementPage = new Page<>(pageNum, pageSize); Page agreementPage = page(ptlAgreementPage, wrapper); PageResult ptlAgreementPageResult = new PageResult<>(pageNum, pageSize, (int) agreementPage.getTotal(), agreementPage.getRecords()); return HttpResult.ok(ptlAgreementPageResult); } @Override public HttpResult getByAgreementId(String agreementId) { PtlAgreement ptlAgreement = proxyObject.ifExistsById(agreementId); // 获取产品费用 List schemeQueryDto = ptlAgreementProductCostsService.getByAgreementId(agreementId); // 获取承保规则 List underwritingRules = ptlAgreementUnderwritingRulesService.getByAgreementId(agreementId); // 账号信息查询 PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId); // 授权查询 List deptList = ptlAgreementDeptService.getByAgreementId(agreementId); PtlAgreementQueryVo ptlAgreementQueryVo = new PtlAgreementQueryVo(ptlAgreement, schemeQueryDto, underwritingRules, ptlAgreementAttribution, deptList); return HttpResult.ok(ptlAgreementQueryVo); } @Override @Transactional public HttpResult deleteAgreement(String agreementId) { proxyObject.ifExistsById(agreementId); boolean b = removeById(agreementId); AssertionUtils.isSucceed(b, "协议信息删除失败"); // 关联表删除 proxyObject.deleteAssociationInformation(agreementId); return HttpResult.ok("删除成功"); } @Override @Transactional public HttpResult 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.deleteAssociationInformation(agreementId); String insuranceCompanyId = esmInsCompany.getId(); proxyObject.saveAssociationInformation(agreementId, insuranceCompanyId, agreement); return HttpResult.ok("修改成功"); } @Override public void saveAssociationInformation(String agreementId, String insuranceCompanyId, PtlAgreementSaveVo agreement) { // 产品费用 ptlAgreementProductCostsService.saveBatchProductCosts(agreementId, agreement.getScheme()); // 承包规则 ptlAgreementUnderwritingRulesService.saveBatchUnderwritingRules(agreementId, agreement.getUnderwritingRules()); // 账号添加 ptlAgreementAttributionService.saveAttribution(agreementId, insuranceCompanyId, agreement.getAttribution()); // 部门授权 ptlAgreementDeptService.saveBatchDept(agreementId, agreement.getDept()); } @Override public void deleteAssociationInformation(String agreementId) { // 删除产品费用 ptlAgreementProductCostsService.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 (PtlApiType.PTL_API_2.getCode() == attribution.getApiType()) { String nameSimple = esmInsCompany.getNamesimple(); insCrawlerOrderController.isLogin(attribution, nameSimple); } ptlAgreement.setCompaniesType(esmInsCompany.getType()); ptlAgreement.setInsuranceCompanyId(esmInsCompany.getId()); ptlAgreement.setInsuranceCompany(esmInsCompany.getNamesimple()); // 生成协议id ptlAgreement.generateTheProtocolCode(); return esmInsCompany; } @Override public HttpResult 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("修改成功"); } }