PtlSchemeRulesServiceImpl.java 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. package com.ydtech.modules.scheme.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.insurance.EnergyType;
  6. import com.ydtech.exception.SystemException;
  7. import com.ydtech.modules.admin.service.SysUserService;
  8. import com.ydtech.modules.fee.dto.vo.RuleAttrMappingVo;
  9. import com.ydtech.modules.order.entity.InsAreaCompany;
  10. import com.ydtech.modules.order.entity.InsOrders;
  11. import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
  12. import com.ydtech.modules.protocol.entity.po.PtlNewCarJudgeRules;
  13. import com.ydtech.modules.protocol.service.ITaxSourceService;
  14. import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
  15. import com.ydtech.modules.protocols.entity.vo.AgreementProductCosts;
  16. import com.ydtech.modules.scheme.dao.PtlSchemeRulesAttrLinkMapper;
  17. import com.ydtech.modules.scheme.dao.PtlSchemeRulesMapper;
  18. import com.ydtech.modules.scheme.entity.po.*;
  19. import com.ydtech.modules.scheme.entity.vo.*;
  20. import com.ydtech.modules.scheme.service.*;
  21. import com.ydtech.utils.ObjectUtil;
  22. import com.ydtech.utils.idgen.IdGenerate;
  23. import org.apache.commons.lang3.ObjectUtils;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.stereotype.Service;
  26. import org.springframework.transaction.annotation.Transactional;
  27. import java.util.*;
  28. import java.util.stream.Collectors;
  29. /**
  30. * @description 协议承保规则属性 service实现类
  31. * @createDate 2024-2-22 15:44:29
  32. * @Entity
  33. */
  34. @Service
  35. public class PtlSchemeRulesServiceImpl extends ServiceImpl<PtlSchemeRulesMapper, PtlSchemeRules>
  36. implements PtlSchemeRulesService {
  37. @Autowired
  38. PtlSchemeRulesAttrLinkService ptlSchemeRulesAttrLinkService;
  39. @Autowired
  40. ITaxSourceService taxSourceService;
  41. @Autowired
  42. SysUserService sysUserService;
  43. @Autowired
  44. RuleFilteringService ruleFilteringService;
  45. @Autowired
  46. PtlSchemeRulesAttrService ptlSchemeRulesAttrService;
  47. @Autowired
  48. PtlSchemeService ptlSchemeService;
  49. @Autowired
  50. PtlOptionalSchemeService ptlOptionalSchemeService;
  51. /**
  52. * 保存规则
  53. * @param ruleSaveVo
  54. * @return
  55. */
  56. @Override
  57. @Transactional
  58. public boolean addRules(RuleSaveVo ruleSaveVo){
  59. //保存 方案
  60. PtlSchemeRules rule = ruleSaveVo.getRule();
  61. this.baseMapper.insert(rule);
  62. //保存 方案规则
  63. List<PtlSchemeRulesAttrLink> attrs = ruleSaveVo.getAttrs();
  64. attrs.forEach(attr->{
  65. attr.setRulesId(String.valueOf(rule.getId()));
  66. });
  67. ptlSchemeRulesAttrLinkService.saveBatch(attrs);
  68. return true;
  69. }
  70. /**
  71. * 修改规则
  72. * @param ruleSaveVo
  73. * @return
  74. */
  75. @Override
  76. @Transactional
  77. public boolean updateRules(RuleSaveVo ruleSaveVo){
  78. this.updateById(ruleSaveVo.getRule());
  79. //删除之后再新增
  80. LambdaQueryWrapper<PtlSchemeRulesAttrLink> queryWrapper= new LambdaQueryWrapper<>();
  81. queryWrapper.eq(PtlSchemeRulesAttrLink::getRulesId,ruleSaveVo.getRule().getId());
  82. ptlSchemeRulesAttrLinkService.remove(queryWrapper);
  83. ruleSaveVo.getAttrs().forEach(attr->{
  84. attr.setRulesId(ruleSaveVo.getRule().getId());
  85. });
  86. ptlSchemeRulesAttrLinkService.saveBatch(ruleSaveVo.getAttrs());
  87. return true;
  88. }
  89. /**
  90. * 删除规则
  91. * @param ruleId
  92. * @return
  93. */
  94. @Override
  95. @Transactional
  96. public boolean deleteRules(String ruleId) {
  97. PtlSchemeRules ptlSchemeRules = this.getById(ruleId);
  98. if(Objects.isNull(ptlSchemeRules)){
  99. throw new SystemException("规则不存在");
  100. }
  101. this.removeById(ruleId);
  102. LambdaQueryWrapper<PtlSchemeRulesAttrLink> queryWrapper = new LambdaQueryWrapper<>();
  103. queryWrapper.eq(PtlSchemeRulesAttrLink::getRulesId,ruleId);
  104. ptlSchemeRulesAttrLinkService.remove(queryWrapper);
  105. return true;
  106. }
  107. /**
  108. * 查询规则分页信息
  109. * @param page
  110. * @param ruleQueryVo
  111. * @return
  112. */
  113. @Override
  114. public Page<RuleResultVo> getRulesPage(Page page, RuleQueryVo ruleQueryVo) {
  115. Page<RuleResultVo> rulesPage = baseMapper.getRulePage(page, ruleQueryVo);
  116. return rulesPage;
  117. }
  118. /**
  119. * 根据规则过滤保险公司
  120. * @param ruleFilterVo
  121. * @return
  122. */
  123. @Override
  124. public List<PtlAgreementInsCompanyDto> ruleFilterCompany(String userId,RuleFilterVo ruleFilterVo) {
  125. String deptId = sysUserService.getById(userId).getDeptId();
  126. //首先获取有权限的保险公司
  127. List<PtlAgreementInsCompanyDto> agreementInsCompany = taxSourceService.getAllAgreement(deptId, userId);
  128. //用户可读取的所有保险公司id
  129. List<String> companyIds = agreementInsCompany.stream().map(PtlAgreementInsCompanyDto::getId).collect(Collectors.toList());
  130. //获取所有规则的保险公司id
  131. List<PtlAgreementInsCompanyDto> ptlAgreementInsCompanyDtos = new ArrayList<>();
  132. List<PtlSchemeRules> userAllSchemeByCompanyIds = ptlSchemeService.getUserAllSchemeByCompanyIds(ruleFilterVo.getProductId(), companyIds,
  133. ruleFilterVo.getCarInfo().getCimodelclass(), EnergyType.isNewEnergy(ruleFilterVo.getCarInfo().getEnergyType()));
  134. //获取所有规则属性
  135. List<PtlSchemeRulesAttr> rulesAttrList = ptlSchemeRulesAttrService.getAllRulesAttrList();
  136. //映射的规则属性
  137. List<SchemeRuleAttrMappingVo> ruleAttrMappingVoList = SchemeRuleAttrMappingVo.getRuleAttrMappingVoList(
  138. ruleFilterVo.getCarInfo(),
  139. ruleFilterVo.getOwnerInfo(),
  140. ruleFilterVo.getApplyInfo(),
  141. ruleFilterVo.getInsureInfo(),
  142. null);
  143. //赛选规则
  144. userAllSchemeByCompanyIds.forEach(scheme->{
  145. List<SchemeRuleResultVo> rulesVo = ptlSchemeRulesAttrLinkService.getSchemeRulesAttrLinks(scheme.getCompanyId(), ruleFilterVo.getProductId());
  146. for(SchemeRuleResultVo rule:rulesVo)
  147. {
  148. List<SchemeRuleResultVo> vo = new ArrayList<>();
  149. vo.add(rule);
  150. boolean allRulesPassed = vo.stream().allMatch(r ->
  151. ruleFilteringService.judgements(r.getAttrLinks(), rulesAttrList, ruleAttrMappingVoList)
  152. );
  153. if(allRulesPassed) {
  154. agreementInsCompany.stream()
  155. .filter(x -> x.getId().equals(scheme.getCompanyId()))
  156. .forEach(item -> {
  157. if (ptlAgreementInsCompanyDtos.stream().noneMatch(existing -> existing.getId().equals(scheme.getCompanyId()))) {
  158. item.setInsGuide(ptlOptionalSchemeService.getCompanyInsGuide( scheme.getCompanyId(), ruleFilterVo.getProductId(),
  159. ruleFilterVo.getCarInfo().getCarnature(), ruleFilterVo.getCarInfo().getCimodelclass(), EnergyType.isNewEnergy(ruleFilterVo.getCarInfo().getEnergyType())? "1" : "0"));
  160. ptlAgreementInsCompanyDtos.add(item);
  161. }
  162. });
  163. break;
  164. }
  165. }
  166. });
  167. Map<String, PtlAgreementInsCompanyDto> collect = ptlAgreementInsCompanyDtos.stream().collect(Collectors.toMap(PtlAgreementInsCompanyDto::getId, x -> x));
  168. List<PtlAgreementInsCompanyDto> collect1 = companyIds.stream().map(collect::get).filter(ObjectUtils::isNotEmpty).collect(Collectors.toList());
  169. return collect1;
  170. }
  171. /**
  172. * 根据产品id 和保险公司获取规则
  173. * @param companyId
  174. * @param productId
  175. * @return
  176. */
  177. @Override
  178. public PtlSchemeRules getRuleByProductId(String companyId, String productId) {
  179. LambdaQueryWrapper<PtlSchemeRules> queryWrapper = new LambdaQueryWrapper<>();
  180. queryWrapper.eq(PtlSchemeRules::getCompanyId,companyId);
  181. queryWrapper.eq(PtlSchemeRules::getProductId,productId);
  182. return baseMapper.selectOne(queryWrapper);
  183. }
  184. // private String verificationRule(List<PtlAgreementInsCompanyDto> agreementInsCompany, InsAreaCompany insAreaCompany,
  185. // InsOrders insOrders, StringBuilder logs) {
  186. // //匹配费用因子
  187. // //获取所有费用属性
  188. // List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
  189. // //获取新旧车信息
  190. // PtlNewCarJudgeRules carJudgeRule = getCarJudgeRule(insAreaCompany.getCompanyId());
  191. // //获取所有费用属性关联
  192. // List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insAreaCompany, insOrders,
  193. // undwrtRulesAttrList, carJudgeRule);
  194. //
  195. // for (int i = 0; i < agreementProductCosts.size(); i++) {
  196. // //判断是否匹配
  197. // log.debug("费用因子匹配开始:" + agreementProductCosts.get(i).getId());
  198. //
  199. // log.debug("车牌号:" + insOrders.getLicenseno());
  200. // log.debug("费用因子备注:" + agreementProductCosts.get(i).getCostsDescription());
  201. // logs.append("费用id:" + agreementProductCosts.get(i).getId() + "\n");
  202. // logs.append("费用因子描述:" + agreementProductCosts.get(i).getCostsDescription() + "\n");
  203. // if (judgements(agreementProductCosts.get(i).getCostsAttrLinks(), undwrtRulesAttrList, ruleAttrMappingVoList, logs)) {
  204. // //返回 费用id 如果需要匹配非车的情况 将返回值返回list 后赛选
  205. // return agreementProductCosts.get(i).getId();
  206. // }
  207. // log.debug("当前费用因子匹配结束\n");
  208. // }
  209. // return null;
  210. //// throw new SystemException("费用因子匹配失败");
  211. // }
  212. }