|
|
@@ -4,20 +4,30 @@ import cn.hutool.core.bean.BeanUtil;
|
|
|
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.jzg.commons.core.page.HttpResult;
|
|
|
+import com.jzg.commons.entity.dto.AgreementParam;
|
|
|
import com.jzg.commons.entity.po.EsmInsCompany;
|
|
|
import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesAttr;
|
|
|
import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesAttrLink;
|
|
|
import com.jzg.commons.entity.po.PtlAgreementUndwrtRulesDictLabal;
|
|
|
import com.jzg.commons.entity.scheme.po.*;
|
|
|
import com.jzg.commons.entity.scheme.vo.*;
|
|
|
+import com.jzg.commons.entity.vo.AgreementVo;
|
|
|
import com.jzg.commons.entity.vo.EsmInsCompanyResVo;
|
|
|
import com.jzg.commons.exception.ValidateException;
|
|
|
import com.jzg.commons.util.AssertionUtils;
|
|
|
+import com.jzg.commons.util.MinioUtils;
|
|
|
import com.jzg.commons.util.StringUtils;
|
|
|
+import com.jzg.costsorrule.model.ValidateSchemeRuleVo;
|
|
|
+import com.jzg.organization.client.CostsRuleClient;
|
|
|
import com.jzg.organization.mapper.*;
|
|
|
+import com.jzg.organization.service.PtlAgreementService;
|
|
|
import com.jzg.organization.service.PtlAgreementUndwrtRulesAttrService;
|
|
|
import com.jzg.organization.service.PtlSchemeService;
|
|
|
+import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
|
|
|
+import org.redisson.api.RedissonClient;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
@@ -32,6 +42,9 @@ import java.util.stream.Collectors;
|
|
|
@Service
|
|
|
public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme> implements PtlSchemeService {
|
|
|
|
|
|
+ @Value("${minio.bucket-name}")
|
|
|
+ private String bucketName;
|
|
|
+
|
|
|
@Autowired
|
|
|
PtlSchemeMapper ptlSchemeMapper;
|
|
|
|
|
|
@@ -53,6 +66,15 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
|
|
|
@Autowired
|
|
|
PtlAgreementUndwrtRulesAttrService agreementUndwrtRulesAttrService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ CostsRuleClient costsRuleClient;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ RedissonClient redissonClient;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private PtlAgreementService agreementService;
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public boolean saveScheme(PtlSchemeSaveVo ptlSchemeSaveVo) {
|
|
|
@@ -123,7 +145,7 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
|
|
|
public PtlSchemeQueryVo getScheme(String id) {
|
|
|
//获取方案信息
|
|
|
PtlSchemeInfo ptlSchemeInfo = ptlSchemeInfoMapper.selectOne(new LambdaQueryWrapper<PtlSchemeInfo>()
|
|
|
- .eq(PtlSchemeInfo::getSchemeId, id));
|
|
|
+ .eq(PtlSchemeInfo::getId, id));
|
|
|
AssertionUtils.isFail(Objects.isNull(ptlSchemeInfo),"方案不存在");
|
|
|
//获取方案信息
|
|
|
PtlScheme ptlScheme = ptlSchemeMapper.selectOne(new LambdaQueryWrapper<PtlScheme>()
|
|
|
@@ -259,4 +281,118 @@ public class PtlSchemeServiceImpl extends ServiceImpl<PtlSchemeMapper, PtlScheme
|
|
|
List<EsmInsCompany> companyList = ptlSchemeMapper.getCompanyList();
|
|
|
return BeanUtil.copyToList(companyList, EsmInsCompanyResVo.class);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<PtlAgreementInsCompanyVo> ruleFilterCompany(SchemeRuleFilterVo schemeRuleFilterVo){
|
|
|
+ //根据权限获取所有保司
|
|
|
+ List<EsmInsCompany> companyList = ptlSchemeMapper.getCompanyList();
|
|
|
+ //根据基本规则 能源、车辆类型、使用性质获取方案
|
|
|
+ List<PtlScheme> ptlSchemes = ptlSchemeMapper.selectList(new LambdaQueryWrapper<PtlScheme>()
|
|
|
+ .eq(PtlScheme::getEnergyType, schemeRuleFilterVo.getCarInfo().getEnergyTypeCode())
|
|
|
+ .eq(PtlScheme::getCarnature, schemeRuleFilterVo.getCarInfo().getCarNatureCode())
|
|
|
+ .eq(PtlScheme::getVehicleType, schemeRuleFilterVo.getCarInfo().getVehicleUseCode())
|
|
|
+ .eq(PtlScheme::getIsDelete, 0));
|
|
|
+
|
|
|
+ // 查找规则
|
|
|
+ List<String> ptlSchemeIds = ptlSchemes.stream().map(PtlScheme::getId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ AssertionUtils.isFail(ptlSchemeIds.isEmpty(),"没有可报价的保险公司");
|
|
|
+
|
|
|
+ List<PtlSchemeRulesAttrLink> ptlSchemeRulesAttrLinks = ptlSchemeRulesAttrLinkMapper.selectList(new LambdaQueryWrapper<PtlSchemeRulesAttrLink>()
|
|
|
+ .in(PtlSchemeRulesAttrLink::getSchemeId, ptlSchemeIds));
|
|
|
+
|
|
|
+ // 将规则根据schemeId聚合转换成Map
|
|
|
+ Map<String, List<PtlSchemeRulesAttrLink>> ptlSchemeRulesAttrLinkMap = ptlSchemeRulesAttrLinks.stream()
|
|
|
+ .collect(Collectors.groupingBy(PtlSchemeRulesAttrLink::getSchemeId));
|
|
|
+
|
|
|
+ ValidateSchemeRuleVo validateSchemeRuleVo = new ValidateSchemeRuleVo();
|
|
|
+ validateSchemeRuleVo.builderQuoteVo(schemeRuleFilterVo, redissonClient);
|
|
|
+ validateSchemeRuleVo.setAttrLinks(ptlSchemeRulesAttrLinks);
|
|
|
+ HttpResult<List<String>> esmInsCompanyHttpResult = costsRuleClient.validateSchemeRule(validateSchemeRuleVo);
|
|
|
+ List<String> insCompanyIds = esmInsCompanyHttpResult.getData();
|
|
|
+ //开始过滤保险公司
|
|
|
+ ptlSchemes.removeIf(ptlScheme -> !insCompanyIds.contains(ptlScheme.getId()));
|
|
|
+ List<String> companyIds = ptlSchemes.stream().map(ptlScheme -> ptlScheme.getCompanyId()).collect(Collectors.toList());
|
|
|
+ companyList.removeIf(company -> !companyIds.contains(company.getId()));
|
|
|
+ List<PtlAgreementInsCompanyVo> resVo = new ArrayList<>();
|
|
|
+ companyList.forEach(company->{
|
|
|
+ PtlAgreementInsCompanyVo vo = new PtlAgreementInsCompanyVo();
|
|
|
+ BeanUtil.copyProperties(company,vo);
|
|
|
+ vo.setLogo(MinioUtils.getPresignedObjectUrl(bucketName,company.getLogo()));
|
|
|
+ resVo.add(vo);
|
|
|
+
|
|
|
+ });
|
|
|
+
|
|
|
+ AgreementParam param = new AgreementParam();
|
|
|
+ param.setCompanyIds(companyIds);
|
|
|
+// Page<AgreementVo> agreementVoPage = agreementService.queryPage(param);
|
|
|
+ return resVo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public SchemeResultVo getSchemeResult(String companyId,String productId){
|
|
|
+ List<SchemeResultVo.SchemeVo> schemeInsuranceInfo = ptlSchemeMapper.getSchemeInsuranceInfo(companyId, productId);
|
|
|
+ List<SchemeResultVo.SchemeVo> schemeDrivingInfo = ptlSchemeMapper.getSchemeDrivingInfo(companyId, productId);
|
|
|
+ // 创建一个 Map,Key: info.id, Value: List<Driving>
|
|
|
+ Map<String, List<SchemeResultVo.Driving>> drivingMap = new HashMap<>();
|
|
|
+
|
|
|
+ // 遍历 schemeDrivingInfo,把 drivings 存入 map
|
|
|
+ for (SchemeResultVo.SchemeVo drivingScheme : schemeDrivingInfo) {
|
|
|
+ for (SchemeResultVo.SchemeInfoVo info : drivingScheme.getInfos()) {
|
|
|
+ drivingMap.put(info.getId(), info.getDrivings());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 遍历 schemeInsuranceInfo,把 drivings 合并
|
|
|
+ for (SchemeResultVo.SchemeVo insuranceScheme : schemeInsuranceInfo) {
|
|
|
+ for (SchemeResultVo.SchemeInfoVo info : insuranceScheme.getInfos()) {
|
|
|
+ List<SchemeResultVo.Driving> drivings = drivingMap.get(info.getId());
|
|
|
+ if (drivings != null) {
|
|
|
+ info.getDrivings().addAll(drivings); // 合并 drivings
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ schemeInsuranceInfo.forEach(scheme->{
|
|
|
+ for (SchemeResultVo.SchemeInfoVo info : scheme.getInfos()) {
|
|
|
+ info.setProductId(scheme.getProductId());
|
|
|
+ info.setCompanyId(scheme.getCompanyId());
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ schemeInsuranceInfo.forEach(schemeVo -> {
|
|
|
+ if(!schemeVo.getInfos().isEmpty()){
|
|
|
+ schemeVo.setSchemeType(schemeVo.getInfos().get(0).getSchemeType());
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ SchemeResultVo schemeResultVo = new SchemeResultVo();
|
|
|
+ //基础方案
|
|
|
+ SchemeResultVo.SchemeVo schemeVo = schemeInsuranceInfo.stream().filter(x -> x.getSchemeType().equals("1")).findFirst().orElse(null);
|
|
|
+ schemeResultVo.setSchemes(schemeVo.getInfos());
|
|
|
+ //把基础方案的商业险的value 赋值
|
|
|
+ schemeResultVo.getSchemes().forEach(schemeInfoVo -> {
|
|
|
+ schemeInfoVo.getKinds().forEach(kind -> {
|
|
|
+ kind.setAmount(kind.getOptions().get(0).getValue());
|
|
|
+ kind.setUnitAmount(kind.getOptions().get(0).getValue());
|
|
|
+ kind.setServiceTimes(kind.getOptions().get(0).getValue());
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ //自选方案
|
|
|
+ SchemeResultVo.SchemeVo opSchemeVo = schemeInsuranceInfo.stream().filter(x -> x.getSchemeType().equals("2")).findFirst().orElse(null);
|
|
|
+ schemeResultVo.setOptionalScheme(opSchemeVo.getInfos().get(0));
|
|
|
+
|
|
|
+ //排除交强险的险种
|
|
|
+ schemeResultVo.getSchemes().removeIf(schemeInfoVo ->
|
|
|
+ schemeInfoVo.getKinds().stream().anyMatch(kind -> "J1".equals(kind.getKindCode()))
|
|
|
+ );
|
|
|
+
|
|
|
+ SchemeResultVo.SchemeInfoVo optionalScheme = schemeResultVo.getOptionalScheme();
|
|
|
+ if (optionalScheme != null && optionalScheme.getKinds() != null) {
|
|
|
+ optionalScheme.getKinds().removeIf(kind -> "J1".equals(kind.getKindCode()));
|
|
|
+ }
|
|
|
+
|
|
|
+ return schemeResultVo;
|
|
|
+ }
|
|
|
}
|