package com.ydtech.modules.scheme.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ydtech.aop.request.RequestSingleParam; import com.ydtech.constants.enums.dict.agreement.ProductsType; import com.ydtech.core.page.HttpResult; import com.ydtech.core.page.PageResult; import com.ydtech.exception.SystemException; import com.ydtech.modules.base.controller.BaseController; import com.ydtech.modules.order.constants.JqInsuranceType; import com.ydtech.modules.order.entity.*; import com.ydtech.modules.order.entity.vo.InsDrivingIntentionInsuranceSonVo; import com.ydtech.modules.order.entity.vo.InsDrivingIntentionInsuranceVo; import com.ydtech.modules.order.service.InsBusinessInsuranceService; import com.ydtech.modules.order.service.InsDrivingIntentionInsuranceService; import com.ydtech.modules.order.service.InsDrivingIntentionInsuranceTypeService; import com.ydtech.modules.protocol.service.ITaxSourceService; import com.ydtech.modules.protocols.service.PtlAgreementUndwrtRulesAttrService; import com.ydtech.modules.scheme.aop.RuleTrajectory; import com.ydtech.modules.scheme.entity.po.*; import com.ydtech.modules.scheme.entity.vo.*; import com.ydtech.modules.scheme.service.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.*; /** *@author: tz *@description: 方案controller *@create: 2024-7-30 10:12:52 */ @Api(tags = "方案管理") @RequestMapping("/plt/scheme") @RestController public class PtlSchemeController extends BaseController { @Autowired private PtlSchemeRulesAttrService ptlSchemeRulesAttrService; @Autowired private PtlSchemeService ptlSchemeService; @Autowired private PtlSchemeRulesService ptlSchemeRulesService; @Autowired private PtlAgreementUndwrtRulesAttrService ptlAgreementUndwrtRulesAttrService; @Autowired private InsDrivingIntentionInsuranceService insDrivingIntentionInsuranceService; @Autowired private ITaxSourceService taxSourceService; @Autowired private InsDrivingIntentionInsuranceTypeService insDrivingIntentionInsuranceTypeService; @Autowired private InsBusinessInsuranceService insBusinessInsuranceService; @Autowired private PtlOptionalSchemeService ptlOptionalSchemeService; @ApiOperation(value = "获取保险公司") @PostMapping("/companyList") public HttpResult companyList(@RequestBody SchemeQueryVo schemeQueryVo) { Page page = buildPageRequest(schemeQueryVo.getPageDto()); return HttpResult.ok(ptlSchemeService.getAllCompany(page,schemeQueryVo)); } //region 规则方法 @ApiOperation(value = "方案规则属性列表") @GetMapping("/attr/list") public HttpResult> list() { List undwrtRulesAttrList = ptlSchemeRulesAttrService.getRulesAttrList(); return HttpResult.ok(undwrtRulesAttrList); } @ApiOperation(value = "根据保险公司id查询方案规则属性列表") @GetMapping("/attr/listByCompanyId") public HttpResult> listByCompanyId(String companyId) { List undwrtRulesAttrList = ptlSchemeRulesAttrService.getRulesAttrList(companyId); return HttpResult.ok(undwrtRulesAttrList); } @ApiOperation(value = "获取规则列表") @PostMapping("/ruleList") public HttpResult ruleList(@Validated @RequestBody RuleQueryVo ruleQueryVo) { Page page = buildPageRequest(ruleQueryVo.getPageDto()); return HttpResult.ok(ptlSchemeRulesService.getRulesPage(page,ruleQueryVo)); } @ApiOperation(value = "获取规则的详情信息") @GetMapping("/ruleInfo") public HttpResult ruleInfo(String ruleId){ List schemeRulesAttrs = ptlSchemeRulesAttrService.getRulesAttrList(); RuleResultVo rulesInfoById = ptlSchemeRulesAttrService.getRulesInfoById(ruleId, schemeRulesAttrs); return HttpResult.ok(rulesInfoById); } @RuleTrajectory(type="C") @ApiOperation(value = "添加规则") @PostMapping("/ruleAdd") public HttpResult ruleAdd(@RequestBody RuleSaveVo ruleSaveVo){ List attrs = ruleSaveVo.getAttrs(); List newAttrs = new ArrayList<>(); //过滤空的属性 attrs.forEach(item->{ if(item.getDictLabal().isEmpty()) { if (((!Objects.isNull(item.getMin()) && !item.getMin().equals("") && !item.getMin().equals("0")) || (!Objects.isNull(item.getOperator()) && !item.getOperator().equals("") && !item.getOperator().equals("1")) || (!Objects.isNull(item.getMax()) && !item.getMax().equals("") && !item.getMax().equals("0")))) { item.setId(null); newAttrs.add(item); } }else{ if (((!Objects.isNull(item.getMin()) && !item.getMin().equals("")) || (!Objects.isNull(item.getOperator()) && !item.getOperator().equals("")) || (!Objects.isNull(item.getMax()) && !item.getMax().equals("")))) { item.setId(null); newAttrs.add(item); } } }); //添加能源类型 newAttrs.add(PtlSchemeRulesAttrLink.NewEnergy(ruleSaveVo.getRule().getEnergyType())); //添加车辆类型 newAttrs.add(PtlSchemeRulesAttrLink.CarType(ruleSaveVo.getRule().getVehicleType())); //添加 使用性质 营业 非营业 if(!Objects.isNull(ruleSaveVo.getRule().getCarnature())){ newAttrs.add(PtlSchemeRulesAttrLink.carNature(ruleSaveVo.getRule().getCarnature())); } ruleSaveVo.setAttrs(newAttrs); int ruleId = ptlSchemeRulesService.addRules(ruleSaveVo); HttpResult httpResult; JSONObject result = new JSONObject(); if(ruleId > 0) { result.put("ruleId", ruleId); result.put("msg", "添加规则成功"); httpResult = HttpResult.ok(result); }else{ result.put("msg","添加规则失败"); httpResult = HttpResult.error(result); } return httpResult; } @RuleTrajectory(type="U") @ApiOperation(value = "修改规则") @PostMapping("/ruleUpdate") public HttpResult ruleUpdate(@RequestBody RuleSaveVo ruleSaveVo){ PtlSchemeRules ptlSchemeRules = ptlSchemeRulesService.getById(ruleSaveVo.getRule().getId()); if(Objects.isNull(ptlSchemeRules)){ throw new SystemException("规则不存在"); } List attrs = ruleSaveVo.getAttrs(); List newAttrs = new ArrayList<>(); //过滤空的属性 attrs.forEach(item->{ if(item.getDictLabal().isEmpty()) { if (((!Objects.isNull(item.getMin()) && !item.getMin().equals("") && !item.getMin().equals("0")) || (!Objects.isNull(item.getOperator()) && !item.getOperator().equals("") && !item.getOperator().equals("1")) || (!Objects.isNull(item.getMax()) && !item.getMax().equals("") && !item.getMax().equals("0")))) { item.setId(null); newAttrs.add(item); } }else{ if(!Objects.isNull(item.getMin())){ if(item.getMin().equals("")) { item.setMin(String.join(",", item.getMinArray())); } } if (((!Objects.isNull(item.getMin()) && !item.getMin().equals("")) || (!Objects.isNull(item.getOperator()) && !item.getOperator().equals("")) || (!Objects.isNull(item.getMax()) && !item.getMax().equals("")))) { item.setId(null); newAttrs.add(item); } } }); //添加能源类型 newAttrs.add(PtlSchemeRulesAttrLink.NewEnergy(ruleSaveVo.getRule().getEnergyType())); //添加车辆类型 newAttrs.add(PtlSchemeRulesAttrLink.CarType(ruleSaveVo.getRule().getVehicleType())); //添加 使用性质 营业 非营业 if(!Objects.isNull(ruleSaveVo.getRule().getCarnature())){ newAttrs.add(PtlSchemeRulesAttrLink.carNature(ruleSaveVo.getRule().getCarnature())); } ruleSaveVo.setAttrs(newAttrs); return ptlSchemeRulesService.updateRules(ruleSaveVo) ? HttpResult.ok("修改规则成功"): HttpResult.error("修改规则失败"); } @RuleTrajectory(type="D") @ApiOperation(value = "删除规则") @PostMapping("/ruleDelete") public HttpResult ruleDelete(@RequestSingleParam("ruleId") String ruleId){ return ptlSchemeRulesService.deleteRules(ruleId) ? HttpResult.ok("删除规则成功"): HttpResult.error("删除规则失败"); } @ApiOperation(value = "规则过滤保险公司") // @Validated @PostMapping("/ruleFilterCompany") public HttpResult ruleFilterCompany( // @Validated @RequestBody RuleFilterVo ruleFilterVo){ String userId = getUserId(); if(!Objects.isNull(ruleFilterVo.getUserId()) && !ruleFilterVo.getUserId().equals("")){ userId = ruleFilterVo.getUserId(); } //如果没有传入险种 则显示用户所有的保险公司 if(Objects.isNull(ruleFilterVo.getProductId())) { return HttpResult.ok(taxSourceService.getAllAgreement(getDeptId(), userId)); } return HttpResult.ok(ptlSchemeRulesService.ruleFilterCompany(userId,ruleFilterVo)); } //endregion //region 方案管理 @PostMapping("/getSchemeList") @ApiOperation("查询方案规则列表") public PageResult getProduct(@RequestBody SchemeQueryVo schemeQueryVo) { Page page = buildPageRequest(schemeQueryVo.getPageDto()); Page schemeQueryDto = ptlSchemeService.getSchemeList(page,schemeQueryVo); return buildPageResponse(schemeQueryDto); } @ApiOperation(value = "方案添加") @PostMapping("/shcemeAdd") public HttpResult shcemeAdd(@RequestBody SchemeSaveVo schemeSaveVo){ List schemeInfoByCompanyId = ptlSchemeService.getSchemeInfoByCompanyId( schemeSaveVo.getCompanyId(), schemeSaveVo.getProductId(), schemeSaveVo.getVehicleType(),schemeSaveVo.getEnergyType(), schemeSaveVo.getCarnature() ); if(schemeInfoByCompanyId.size() > 0) { throw new SystemException("已存在方案"); } return ptlSchemeService.addScheme(schemeSaveVo) ? HttpResult.ok("添加成功") : HttpResult.error("添加失败"); } @ApiOperation(value = "方案列表") @PostMapping("/schemeList") public HttpResult schemeList(@Validated @RequestBody SchemeQueryVo schemeQueryVo){ Page page = buildPageRequest(schemeQueryVo.getPageDto()); return HttpResult.ok(ptlSchemeService.getSchemeList(page,schemeQueryVo)); } @ApiOperation(value = "获取方案详情") @GetMapping("/schemeInfo") public HttpResult schemeInfo(String companyId,String productId,String vehicleType,String energyType,String carnature){ return HttpResult.ok(ptlSchemeService.getSchemeInfo(companyId,productId,vehicleType,energyType,carnature)); } @ApiOperation(value = "更新方案") @PostMapping("/schemeUpdate") public HttpResult schemeUpdate(@Validated @RequestBody SchemeSaveVo schemeSaveVo){ return ptlSchemeService.updateScheme(schemeSaveVo) ? HttpResult.ok("修改成功") : HttpResult.error("修改失败"); } @ApiOperation(value = "删除方案") @PostMapping("/schemeDelete") public HttpResult schemeDepete(@RequestBody SchemeQueryVo schemeQueryVo){ return ptlSchemeService.deleteScheme(schemeQueryVo) ? HttpResult.ok("删除成功") : HttpResult.error("删除失败"); } @ApiOperation(value = "获取方案详情") @PostMapping(value = "getScheneInfo") public HttpResult getScheneInfo(@RequestBody SchemeQueryVo schemeQueryVo) { return HttpResult.ok(ptlSchemeService.getSchemeInfoByCompanyId( schemeQueryVo.getCompanyId(),schemeQueryVo.getProductId(), schemeQueryVo.getVehicleType(),schemeQueryVo.getEnergyType(), schemeQueryVo.getCarnature())); } //endregion //region 驾意险方法 @ApiOperation(value = "获取驾意险分类信息") @PostMapping(value = "/getDrivingType") public HttpResult getDrivingType(@RequestBody DrivingIntentionQueryVo drivingIntentionQueryVo) { return HttpResult.ok(insDrivingIntentionInsuranceTypeService.getDrivingIntentionInsuranceTypeByCompanyId(drivingIntentionQueryVo.getCompanyId())); } @ApiOperation(value = "获取驾意险信息") @PostMapping(value = "/getDriving") public HttpResult getDriving(@RequestBody DrivingIntentionQueryVo drivingIntentionQueryVo) { return HttpResult.ok(insDrivingIntentionInsuranceService.getSchemeDrivingIntentionInsurance(drivingIntentionQueryVo)); } //endregion @ApiOperation(value = "获取商业险信息") @PostMapping(value = "getBusinessInsurance") public HttpResult getBusinessInsurance() { return HttpResult.ok(insBusinessInsuranceService.getBusinessInsurance()); } //region 自选方案 @ApiOperation(value = "自选方案添加") @PostMapping(value = "addOptionalScheme") public HttpResult addOptionalScheme(@RequestBody OptionalSchemeSaveVo optionalSchemeSaveVo) { LambdaQueryWrapper eq = new LambdaQueryWrapper() .eq(PtlOptionalScheme::getCompanyId, optionalSchemeSaveVo.getCompanyId()) .eq(PtlOptionalScheme::getProductId, optionalSchemeSaveVo.getProductId()) .eq(PtlOptionalScheme::getEnergyType, optionalSchemeSaveVo.getEnergyType()) .eq(PtlOptionalScheme::getVehicleType, optionalSchemeSaveVo.getVehicleType()) .eq(!Objects.isNull(optionalSchemeSaveVo.getCarnature()),PtlOptionalScheme::getCarnature,optionalSchemeSaveVo.getCarnature()); List list = ptlOptionalSchemeService.list(eq); if(list.size() > 0) { return HttpResult.error("已存在方案"); } return HttpResult.ok(ptlOptionalSchemeService.addOptionScheme(optionalSchemeSaveVo)? "添加成功" : "添加失败"); } @ApiOperation(value = "自选方案查询") @GetMapping(value = "optionalSchemeInfo") public HttpResult optionalSchemeInfo(String companyId,String productId,String carnature, String vehicleType, String energyType) { return HttpResult.ok( ptlOptionalSchemeService.optionalSchemeInfo(companyId,productId,carnature,vehicleType,energyType)); } @ApiOperation(value = "自选方案修改") @PostMapping(value = "updateOptionalScheme") public HttpResult updateOptionalScheme(@RequestBody OptionalSchemeSaveVo optionalSchemeSaveVo) { return HttpResult.ok(ptlOptionalSchemeService.updateOptionScheme(optionalSchemeSaveVo)? "修改成功" : "修改失败"); } @ApiOperation(value = "自选方案列表") @PostMapping(value = "optionalShcemeList") public HttpResult optionalShcemeList( @RequestBody SchemeQueryVo schemeQueryVo) { List optionalSchemeList = ptlOptionalSchemeService.getOptionalSchemeList(schemeQueryVo); return HttpResult.ok(optionalSchemeList); } @ApiOperation(value = "自选方案删除") @PostMapping(value = "optionalSchemeDelete") public HttpResult optionalSchemeDelete(@RequestSingleParam("id") String id) { return HttpResult.ok(ptlOptionalSchemeService.deleteOptionScheme(id)? "删除成功" : "删除失败"); } @ApiOperation(value = "获取自选方案驾意险信息") @GetMapping(value = "optionalSchemeDriving") public HttpResult optionalSchemeDriving(String schemeId , String seatNum){ List optionalSchemeDrivingList = insDrivingIntentionInsuranceService.getOptionalSchemeDrivingList(schemeId, seatNum); return HttpResult.ok(optionalSchemeDrivingList); } //endregion //region 前端接口 @ApiOperation(value = "获取保险公司的方案信息") @PostMapping(value = "getCompanySchemeInfo") public HttpResult getCompanySchemeInfo(@RequestBody SchemeQueryVo schemeQueryVo) { List companySchemeInfo = ptlSchemeService.getCompanySchemeInfo(schemeQueryVo); return HttpResult.ok(companySchemeInfo); } @ApiOperation(value = "获取自选方案信息") @PostMapping(value = "getCompanyOptionalSchemeInfo") public HttpResult getCompanyOptionalSchemeInfo(@RequestBody SchemeQueryVo schemeQueryVo) { CompanyOptionalSchemeVo companySchemeInfo = ptlOptionalSchemeService.getSchemeInsuranceInfo(schemeQueryVo); JSONArray jqList = new JSONArray(); Arrays.stream(JqInsuranceType.values()).forEach(item->{ JSONObject tmp = new JSONObject(); tmp.put("name",item.getName()); tmp.put("amount",item.getAmount()); jqList.add(tmp); }); companySchemeInfo.setJqList(jqList); return HttpResult.ok(companySchemeInfo); } //endregion //region pc端 @ApiModelProperty(value = "获取方案信息") @PostMapping(value = "getAllSchemeList") public HttpResult getAllSchemeList(@RequestBody SchemeQueryVo schemeQueryVo) { PcSchemeResultVo resultVo = new PcSchemeResultVo(); List companySchemeInfo = ptlSchemeService.getCompanySchemeInfo(schemeQueryVo); List pcCompanySchemeVos = new ArrayList<>(); //分组 主险 附加险 服务 companySchemeInfo.forEach(item->{ JSONArray main = new JSONArray(); JSONArray additional = new JSONArray(); JSONArray service = new JSONArray(); for(int i=0;i{ vo.setJqx(jqx); }); if(!Objects.isNull(pcSchemeInsuranceInfo)) { pcSchemeInsuranceInfo.setJqx(jqx); } } resultVo.setSchemes(pcCompanySchemeVos); resultVo.setOptionalScheme(pcSchemeInsuranceInfo); return HttpResult.ok(resultVo); } @ApiModelProperty(value = "获取产品信息") @GetMapping(value = "getProductInfo") public HttpResult getProductInfo() { JSONArray array = new JSONArray(); Arrays.stream(ProductsType.values()).forEach(item->{ JSONObject obj = new JSONObject(); obj.put("code",item.getCode()); obj.put("desc",item.getDesc()); array.add(obj); }); return HttpResult.ok(array); } @ApiModelProperty(value = "获取驾意险信息Son") @GetMapping(value = "getDrivingSon") public HttpResult getDrivingSon(String companyId,String projectCode) { List insDrivingIntentionInsuranceSon = insDrivingIntentionInsuranceService.getInsDrivingIntentionInsuranceSon(companyId, projectCode); return HttpResult.ok(insDrivingIntentionInsuranceSon); } //endregion //手动新增驾意险 @ApiOperation(value = "手动新增驾意险") @PostMapping(value = "addDriving") public HttpResult addDriving(@RequestBody InsDrivingIntentionInsuranceVo insDrivingIntentionInsuranceVo){ return insDrivingIntentionInsuranceService.add(insDrivingIntentionInsuranceVo); } @ApiOperation(value = "手动新增驾意险后代") @PostMapping(value = "addDrivingSon") public HttpResult addDrivingSon(@RequestBody InsDrivingIntentionInsuranceSonVo insDrivingIntentionInsuranceSonVo){ return insDrivingIntentionInsuranceService.addSon(insDrivingIntentionInsuranceSonVo); } @ApiOperation(value = "手动删除驾意险") @PostMapping(value = "deleteDriving") public HttpResult deleteDriving(@RequestBody InsDrivingIntentionInsurance insDrivingIntentionInsurance){ return insDrivingIntentionInsuranceService.delete(insDrivingIntentionInsurance); } @ApiOperation(value = "手动删除驾意险后代") @PostMapping(value = "deleteDrivingSon") public HttpResult deleteDrivingSon(@RequestBody InsDrivingIntentionInsuranceSon insDrivingIntentionInsuranceSon){ return insDrivingIntentionInsuranceService.deleteSon(insDrivingIntentionInsuranceSon); } @ApiOperation(value = "手动更新驾意险") @PostMapping(value = "updateDriving") public HttpResult updateDriving(@RequestBody InsDrivingIntentionInsurance insDrivingIntentionInsurance){ return insDrivingIntentionInsuranceService.update(insDrivingIntentionInsurance); } @ApiOperation(value = "手动更新驾意险后代") @PostMapping(value = "updateDrivingSon") public HttpResult updateDrivingSon(@RequestBody InsDrivingIntentionInsuranceSon insDrivingIntentionInsuranceSon){ return insDrivingIntentionInsuranceService.updateSon(insDrivingIntentionInsuranceSon); } @ApiOperation(value = "获取驾意险信息") @PostMapping(value = "getDrivingInfo") public HttpResult getDrivingInfo(@RequestBody DrivingIntentionQueryVo drivingIntentionQueryVo){ Page page = new Page(drivingIntentionQueryVo.getPageNum(), drivingIntentionQueryVo.getPageSize()); return HttpResult.ok("",insDrivingIntentionInsuranceService.getSchemeDrivingIntentionInsuranceList(page,drivingIntentionQueryVo)); } /** * @version * @author: hxl * @Date: 2024/10/15 11:27 * @Description: 获取已承保保险公司列表 */ @ApiOperation(value = "获取已承保保险公司列表") @PostMapping("/allCompanyList") public HttpResult allCompanyList(@RequestBody SchemeQueryVo schemeQueryVo) { Page page = buildPageRequest(schemeQueryVo.getPageDto()); return HttpResult.ok(ptlSchemeService.allCompanyList(page,schemeQueryVo)); } }