package com.ydtech.modules.ins.model.guoRen; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.annotation.JSONField; import com.fasterxml.jackson.annotation.JsonIgnore; import com.ydtech.constants.enums.InsuranceRisk; import com.ydtech.modules.ins.model.vo.CarInfoVo; import com.ydtech.modules.ins.model.vo.CustomerInfoVo; import com.ydtech.modules.ins.model.vo.KindInfoVo; import com.ydtech.modules.ins.model.vo.RiskInfoVo; import com.ydtech.modules.ins.model.yc.ruote.Applicant; import com.ydtech.modules.ins.model.yc.ruote.Insured; import com.ydtech.modules.order.entity.InsAreaCompany; import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo; import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo; import com.ydtech.modules.order.entity.vo.BaseQuoteVo; import com.ydtech.utils.StringUtils; import lombok.Data; import lombok.NoArgsConstructor; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; /** * 非车保险订单 入参 */ @NoArgsConstructor @Data public class NonAutoInsOrderReq { @JSONField(name = "channelCode") private String channelCode; @JSONField(name = "data") private DataDTO data; @JSONField(name = "othBusinessNo") private String othBusinessNo; @JSONField(name = "requestTime") private String requestTime; @NoArgsConstructor @Data public static class DataDTO { @JSONField(name = "orderList") private List orderList; @NoArgsConstructor @Data public static class OrderListDTO { @JSONField(name = "insuredList") private List insuredList; @JSONField(name = "objCarList") private List objCarList; @JSONField(name = "orderAppl") private OrderApplDTO orderAppl; @JSONField(name = "orderMain") private OrderMainDTO orderMain; @JSONField(name = "planList") private List planList; @JSONField(name = "salesmanList") private List salesmanList; @NoArgsConstructor @Data public static class OrderApplDTO { @JSONField(name = "applName") private String applName; @JSONField(name = "applType") private String applType; @JSONField(name = "certfNo") private String certfNo; @JSONField(name = "certfType") private String certfType; @JSONField(name = "contactName") private String contactName; @JSONField(name = "phoneNo") private String phoneNo; } @NoArgsConstructor @Data public static class OrderMainDTO { @JSONField(name = "amount") private Integer amount; @JSONField(name = "endDate") private String endDate; @JSONField(name = "goodsCode") private String goodsCode; @JSONField(name = "operatorCode") private String operatorCode; @JSONField(name = "othOrderNo") private String othOrderNo; @JSONField(name = "premium") private Integer premium; @JSONField(name = "prodCode") private String prodCode; @JSONField(name = "renewalInd") private Integer renewalInd; @JSONField(name = "riskCode") private List riskCode; @JSONField(name = "startDate") private String startDate; @JSONField(name = "uwCount") private Integer uwCount; @JSONField(name = "businessMode") private String businessMode; @JSONField(name = "businessSource") private String businessSource; } @NoArgsConstructor @Data public static class InsuredListDTO { @JSONField(name = "certfNo") private String certfNo; @JSONField(name = "certfType") private String certfType; @JSONField(name = "countryName") private String countryName; @JSONField(name = "insuredName") private String insuredName; @JSONField(name = "insuredType") private String insuredType; @JSONField(name = "phoneNo") private String phoneNo; @JSONField(name = "planNo") private String planNo; } @NoArgsConstructor @Data public static class ObjCarListDTO { @JSONField(name = "carModels") private String carModels; @JSONField(name = "carType") private String carType; @JSONField(name = "carTypeCode") private String carTypeCode; @JSONField(name = "clnt") private String clnt; @JSONField(name = "frameNo") private String frameNo; @JSONField(name = "licenseNo") private String licenseNo; @JSONField(name = "planNo") private String planNo; @JSONField(name = "purchasePrice") private Integer purchasePrice; @JSONField(name = "seatNum") private Integer seatNum; @JSONField(name = "toncount") private Double toncount; } @NoArgsConstructor @Data public static class PlanListDTO { @JSONField(name = "occupationCode") private String occupationCode; @JSONField(name = "occupationGrade") private String occupationGrade; @JSONField(name = "occupationName") private String occupationName; @JSONField(name = "planNo") private String planNo; @JSONField(name = "quantity") private String quantity; @JSONField(name = "socialSecInd") private String socialSecInd; } @NoArgsConstructor @Data public static class SalesmanListDTO { @JSONField(name = "agentCode") private String agentCode; @JSONField(name = "companyCode") private String companyCode; @JSONField(name = "salesmanCode") private String salesmanCode; @JSONField(name = "salesmanFlag") private Integer salesmanFlag; @JSONField(name = "salesmanName") private String salesmanName; @JSONField(name = "serialNo") private Integer serialNo; @JSONField(name = "teamCode") private String teamCode; @JSONField(name = "teamName") private String teamName; } } } /** * 构造报价请求参数 */ @JsonIgnore public static NonAutoInsOrderReq buildParam(BaseQuoteInfoVo yaQuoteInfoVo, VinQueryResp.DataDTO vinQ, AccidentalDrivingVo accidentalDrivingVo, ChannelInfoDto channelInfo, String carPriceUuid) { //车辆信息 CarInfoVo carInfo = yaQuoteInfoVo.getCarInfo(); //投保人 CustomerInfoVo policyHolder = yaQuoteInfoVo.getPolicyHolderInfo(); //被保人 CustomerInfoVo insuredPerson = yaQuoteInfoVo.getInsuredPersonInfo(); List riskList = yaQuoteInfoVo.getRiskList(); //交强 RiskInfoVo ciRiskInfo = (RiskInfoVo) riskList.stream().filter(x -> x.getRiskCode().equals(InsuranceRisk.TRAFFIC.getCode())).findFirst().orElse(null); //商业 RiskInfoVo biRiskInfo = (RiskInfoVo) riskList.stream().filter(x -> x.getRiskCode().equals(InsuranceRisk.BUSINESS.getCode())).findFirst().orElse(null); NonAutoInsOrderReq req = new NonAutoInsOrderReq(); req.setChannelCode("TQDL"); //外部订单号 订单号或者uuid 使用的车价查询返回的 req.setOthBusinessNo(carPriceUuid); req.setRequestTime(DateUtil.today()); List orderList = new ArrayList(); DataDTO.OrderListDTO orderListDto = new DataDTO.OrderListDTO(); /** * 被保险人信息 */ List insuredList = new ArrayList<>(); DataDTO.OrderListDTO.InsuredListDTO insuredListDTO = new DataDTO.OrderListDTO.InsuredListDTO(); insuredListDTO.setCertfNo(insuredPerson.getIdentifyNumber()); insuredListDTO.setCertfType("01"); insuredListDTO.setCountryName("中国"); insuredListDTO.setInsuredName(insuredPerson.getName()); //客户类型 insuredType String Y 1-个人,2-企业 insuredListDTO.setInsuredType("1"); insuredListDTO.setPhoneNo(insuredPerson.getMobile()); insuredListDTO.setPlanNo("1"); insuredList.add(insuredListDTO); /** * 车辆信息 */ List objCarList = new ArrayList<>(); DataDTO.OrderListDTO.ObjCarListDTO objCarListDTO = new DataDTO.OrderListDTO.ObjCarListDTO(); objCarListDTO.setCarModels(vinQ.getBrandNameBC()); objCarListDTO.setCarType("0"); //车辆性质 objCarListDTO.setCarTypeCode("8A"); //是否新车 1-是 2-否 objCarListDTO.setClnt(StringUtils.isNotEmpty(carInfo.getLicenseNo()) ? "2" : "1"); objCarListDTO.setFrameNo(carInfo.getFrameNo()); objCarListDTO.setLicenseNo(carInfo.getLicenseNo()); objCarListDTO.setPlanNo("1"); objCarListDTO.setPurchasePrice(StringUtils.toInt(vinQ.getPriceShow())); objCarListDTO.setSeatNum(StringUtils.toInt(vinQ.getSeatCountBC())); objCarListDTO.setToncount(StringUtils.toDouble(vinQ.getTonCount())); objCarList.add(objCarListDTO); /** * 投保人信息 */ DataDTO.OrderListDTO.OrderApplDTO orderAppl = new DataDTO.OrderListDTO.OrderApplDTO(); orderAppl.setApplName(policyHolder.getName()); orderAppl.setApplType("1"); orderAppl.setCertfNo(policyHolder.getIdentifyNumber()); orderAppl.setCertfType("01"); orderAppl.setContactName(policyHolder.getName()); orderAppl.setPhoneNo(policyHolder.getMobile()); /** * 订单信息 */ DataDTO.OrderListDTO.OrderMainDTO orderMain = new DataDTO.OrderListDTO.OrderMainDTO(); //( 总保额 = 份数*人数(特殊产品默认人数为1)*每份保额) //@TODO 后续补 BigDecimal orderAmount = BigDecimal.ONE; orderMain.setAmount(orderAmount.intValue()); orderMain.setPremium(orderAmount.intValue()); //yyyy-MM-dd hh:mm:ss搭售非车险保险起期规则: //(1)搭售车险是即时生效的,非车险起期为车险起期的第二天0时。 //(2)搭售车险非即时生效的,非车险起期从车险保单起期。 if (null != ciRiskInfo && null != biRiskInfo) { Date ciStartDate = DateUtil.parse(ciRiskInfo.getStartDate()); Date biStartDate = DateUtil.parse(biRiskInfo.getStartDate()); int ciBiCompare = DateUtil.compare(ciStartDate, biStartDate); //1、非即时生效 if (StringUtils.isEmpty(ciRiskInfo.getInstantFlag()) && StringUtils.isEmpty(biRiskInfo.getInstantFlag())) { if (ciBiCompare == 1) { //(1)交强起期 > 商业起期,非车起期取商业起期 orderMain.setStartDate(biRiskInfo.getStartDate()); orderMain.setEndDate(biRiskInfo.getEndDate()); } else if (ciBiCompare == -1) { //(2)交强起期 < 商业起期,非车起期取交强起期 orderMain.setStartDate(ciRiskInfo.getStartDate()); orderMain.setEndDate(ciRiskInfo.getEndDate()); } else if (ciBiCompare == 0) { //(3)交强起期 = 商业起期,非车起期任取 orderMain.setStartDate(ciRiskInfo.getStartDate()); orderMain.setEndDate(ciRiskInfo.getEndDate()); } } else { //2、即时生效 //(1)交强即时起保起期 > 商业起期,非车起期取商业起期(不含小时数据的起期)+1天 //(2)交强即时起保起期 > 商业即时起保起期,,非车起期取商业起期(不含小时数据的起期)+1天 //(3)交强起期 < 商业即时起保起期,取交强起期,非车起期取交强起期(不含小时数据的起期)+1天 //(4)交强即时起保起期 < 商业即时起保起期,取交强起期,非车起期取交强起期(不含小时数据的起期)+1天 //(5)交强起期 = 商业起期,非车起保(不含小时数据的起期)+1天期任取 } } //家用车驾乘意外险-山西版(02746425173001) orderMain.setGoodsCode("02746425173001"); orderMain.setOperatorCode(channelInfo.getHandlerCode()); //订单号或UUID 不确定参数,暂时使用车价的uuid orderMain.setOthOrderNo(carPriceUuid); orderMain.setProdCode(accidentalDrivingVo.getRideRiskCode()); orderMain.setRenewalInd(StringUtils.isEmpty(carInfo.getLicenseNo()) ? 0 : 1); //险种代码 数组 List riskCodeList = new ArrayList<>(); orderMain.setRiskCode(riskCodeList); orderMain.setUwCount(accidentalDrivingVo.getQuantity()); //1:鼓励类 4:其他类 6:网销类 orderMain.setBusinessMode("1"); //0:直接业务 //1:个人代理 //2:专业代理 //3:兼业代理 //4:经纪业务—境内经纪 //5:经纪业务—境外经纪 //6:电销业务 //7:柜台业务 //8:网上业务 ...... orderMain.setBusinessSource("2"); orderListDto.setInsuredList(insuredList); /** * 方案信息 */ List planList = new ArrayList<>(); DataDTO.OrderListDTO.PlanListDTO planListDto = new DataDTO.OrderListDTO.PlanListDTO(); //按照示例传的 planListDto.setOccupationCode("0500020"); planListDto.setOccupationGrade("1"); planListDto.setOccupationName("其他"); planListDto.setPlanNo("1"); planListDto.setQuantity("1"); planListDto.setSocialSecInd("01"); planList.add(planListDto); /** * 业务员信息 */ List salesmanList = new ArrayList<>(); DataDTO.OrderListDTO.SalesmanListDTO salesmanListDTO = new DataDTO.OrderListDTO.SalesmanListDTO(); salesmanListDTO.setAgentCode(channelInfo.getAgentCode()); salesmanListDTO.setCompanyCode(channelInfo.getComCode()); salesmanListDTO.setSalesmanCode(channelInfo.getHandlerCode()); //0-辅合作方,1-主合作方(默认1-主合作方 salesmanListDTO.setSalesmanFlag(1); salesmanListDTO.setSalesmanName(channelInfo.getHandlerName()); salesmanListDTO.setSerialNo(1); salesmanListDTO.setTeamCode(""); salesmanListDTO.setTeamName(""); salesmanList.add(salesmanListDTO); orderListDto.setInsuredList(insuredList); orderListDto.setOrderAppl(orderAppl); orderListDto.setOrderMain(orderMain); orderListDto.setPlanList(planList); orderListDto.setSalesmanList(salesmanList); orderListDto.setObjCarList(objCarList); orderList.add(orderListDto); DataDTO data = new DataDTO(); data.setOrderList(orderList); req.setData(data); return req; } }