| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368 |
- package com.ydtech.modules.order.entity;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.annotation.IdType;
- import com.baomidou.mybatisplus.annotation.TableField;
- import com.baomidou.mybatisplus.annotation.TableId;
- import com.baomidou.mybatisplus.annotation.TableName;
- import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
- import com.fasterxml.jackson.annotation.JsonFormat;
- import com.ydtech.constants.enums.InsuranceRisk;
- import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
- import com.ydtech.constants.enums.dict.agreement.ProductsType;
- import com.ydtech.exception.SystemException;
- import com.ydtech.modules.admin.model.SysDept;
- import com.ydtech.modules.admin.model.SysUser;
- import com.ydtech.modules.ins.model.vo.KindInfoVo;
- import com.ydtech.modules.ins.model.vo.RiskInfoVo;
- import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
- import lombok.*;
- import java.io.Serializable;
- import java.math.BigDecimal;
- import java.time.LocalDateTime;
- import java.util.List;
- /**
- * 保险订单表
- *
- * @TableName ins_orders
- */
- @EqualsAndHashCode
- @ToString
- @TableName(value = "ins_orders", autoResultMap = true)
- @Data
- @AllArgsConstructor
- @NoArgsConstructor
- public class InsOrders implements Serializable {
- /**
- * 订单号
- */
- @TableId(value = "orderno",type = IdType.AUTO)
- private String orderno;
- /**
- * 报价单号
- */
- @TableField(value = "quoteno")
- private String quoteno;
- /**
- * 承保 保险公司编号
- */
- @TableField(value = "company_id")
- private String companyId;
- /**
- * 承保 保险名称
- */
- @TableField(value = "ins_company")
- private String insCompany;
- /**
- * 报价状态
- */
- @TableField(value = "orderstatus")
- private String orderstatus;
- /**
- * 车辆信息
- */
- @TableField(value = "carinfo", typeHandler = FastjsonTypeHandler.class)
- private JSONObject carinfo;
- /**
- * 用户id
- */
- @TableField(value = "userid")
- private String userid;
- /**
- * 代客录单时操作员ID
- */
- @TableField(value = "operatorid")
- private String operatorid;
- /**
- * 用户名称
- */
- @TableField(value = "username")
- private String username;
- /**
- * 代理团队id
- */
- @TableField(value = "deptid")
- private String deptid;
- /**
- * 代理团队名称
- */
- @TableField(value = "deptname")
- private String deptname;
- /**
- * 车主信息
- */
- @TableField(value = "ownerinfo", typeHandler = FastjsonTypeHandler.class)
- private JSONObject ownerinfo;
- /**
- * 投保人信息
- */
- @TableField(value = "applyinfo", typeHandler = FastjsonTypeHandler.class)
- private JSONObject applyinfo;
- /**
- * 被保人信息
- */
- @TableField(value = "insureinfo", typeHandler = FastjsonTypeHandler.class)
- private JSONObject insureinfo;
- /**
- * 协议id
- */
- @TableField(value = "agreeid")
- private String agreeid;
- /**
- * 产品id
- */
- @TableField(value = "productid")
- private String productid;
- /**
- * 产品名称
- */
- @TableField(value = "product")
- private String product;
- /**
- * 创建时间
- */
- @TableField(value = "createtime")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private LocalDateTime createtime;
- /**
- * 车架号 VIN码
- */
- @TableField(value = "frameno")
- private String frameno;
- /**
- * 车牌号
- */
- @TableField(value = "licenseno")
- private String licenseno;
- /**
- * 投保人姓名
- */
- @TableField(value = "insuredname")
- private String insuredname;
- /**
- * 交强险开始时间
- */
- @TableField(value = "jqstartdate")
- private String jqstartdate;
- /**
- * 交强险结束时间
- */
- @TableField(value = "jqenddate")
- private String jqenddate;
- /**
- * 商业险开始时间
- */
- @TableField(value = "systartdate")
- private String systartdate;
- /**
- * 商业险结束时间
- */
- @TableField(value = "syenddate")
- private String syenddate;
- /**
- * 商业 交强
- */
- @TableField(value = "risk", typeHandler = FastjsonTypeHandler.class)
- private JSONArray risk;
- /**
- * 商业险信息
- */
- @TableField(value = "king", typeHandler = FastjsonTypeHandler.class)
- private JSONArray king;
- /**
- * 车船税信息
- */
- @TableField(value = "vehicle_and_vessel_tax", typeHandler = FastjsonTypeHandler.class)
- private JSONObject vehicleAndVesselTax;
- @TableField(exist = false)
- private List<InsAreaCompany> insAreaCompanyList; //子级集合
- @TableField(exist = false)
- private static final long serialVersionUID = 1L;
- @TableField(exist = false)
- private String subOrderId; //子订单id
- @TableField(exist = false)
- private BigDecimal willFirstPremiums; //一级预收金额
- @TableField(exist = false)
- private BigDecimal willSecondPremiums; //二级预收金额
- @TableField(exist = false)
- private BigDecimal willThreePremiums; //三级预收金额
- @TableField(exist = false)
- private String managementSource; //业务员机构来源
- @TableField(exist = false)
- private String auditStatus; //订单费用审核状态
- @TableField(exist = false)
- private String auditUser; //订单费用审核人
- @TableField(exist = false)
- private String auditTime; //订单费用审核时间
- @TableField(exist = false)
- private String agreementCode; //协议code
- @TableField(exist = false)
- private String agreementName; //协议名称
- @TableField(exist = false)
- private String partnerCompaniesName; //合作公司简称
- @TableField(exist = false)
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private LocalDateTime signingTime; //签单时间
- @TableField(exist = false)
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private LocalDateTime payDate; //支付时间
- public InsOrders(SysUser user, SysDept dept, BaseQuoteInfoVo quoteInfoVo) {
- // 2. 组装订单
- this.setQuoteno(String.valueOf(quoteInfoVo.getQuoteno()));
- this.setOrderstatus(InsOrderStatusEnum.QUOTE_ING.getCode()); // 0 报价 1 待核保 2 已核保待缴费 3 核保退回 4 核保不通过
- this.setFrameno(quoteInfoVo.getCarInfo().getFrameNo());
- this.setLicenseno(quoteInfoVo.getCarInfo().getLicenseNo());
- // 2.1 车辆信息
- this.setCarinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getCarInfo())));
- this.setUserid(user.getId());
- this.setUsername(user.getName());
- this.setDeptid(user.getDeptId());
- this.setDeptname(dept == null ? "" : dept.getName());
- // 2.2 人员信息
- this.setOwnerinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getOwnerInfo())));
- this.setApplyinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getPolicyHolderInfo())));
- this.setInsureinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getInsuredPersonInfo())));
- this.setInsuredname(quoteInfoVo.getPolicyHolderInfo().getName());
- List<RiskInfoVo> risks = quoteInfoVo.getRiskList();
- List<KindInfoVo> kinds = quoteInfoVo.getKindList();
- // 2.3 主险种信息
- this.insuranceInformation(risks, kinds);
- // 2.3.1 险种信息
- this.setRisk(JSON.parseArray(JSON.toJSONString(quoteInfoVo.getRiskList())));
- this.setKing(JSON.parseArray(JSON.toJSONString(quoteInfoVo.getKindList())));
- // 2.4 产品信息
- this.productInformation(risks, kinds);
- this.setCreatetime(LocalDateTime.now());
- // 2.5 车船税信息
- this.setVehicleAndVesselTax(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getVehicleAndVesselTax())));
- }
- /**
- * 保险信息
- *
- * @param risks 主险种
- * @param kinds 商业险险种
- */
- private void insuranceInformation(List<RiskInfoVo> risks, List<KindInfoVo> kinds) {
- for (RiskInfoVo riskInfoVo : risks) {
- if (InsuranceRisk.TRAFFIC.getCode().equals(riskInfoVo.getRiskCode())) { //交强
- this.setJqstartdate(riskInfoVo.getStartDate());
- this.setJqenddate(riskInfoVo.getEndDate());
- }
- if (InsuranceRisk.BUSINESS.getCode().equals(riskInfoVo.getRiskCode())) { //商业
- this.setSystartdate(riskInfoVo.getStartDate());
- this.setSyenddate(riskInfoVo.getEndDate());
- if (kinds.isEmpty()) {
- throw new SystemException("商业险险种未选择,不允许报价");
- }
- }
- }
- }
- /**
- * 产品信息
- *
- * @param risks 主险种
- * @param kinds 商业险险种
- */
- public void productInformation(List<RiskInfoVo> risks, List<KindInfoVo> kinds) {
- /**
- * 投保险种逻辑
- * 单交-单交强
- * 单商-单商业(含车损)
- * 单三-单商业(不含车损)
- * 交三-交强+商业(不含车损)
- * 交商-交强+商业(含车损)
- * 单交:
- * 单商:034001
- * 单三:034002
- * 交三:0330034002
- * 交商:0330034001
- *
- */
- ProductsType productsType;
- boolean haveCarDamageKind = false;//是否含车损
- boolean haveBusiKind = false;//是否含车损外的商业险种
- for (KindInfoVo kindInfoVo : kinds) {
- String code = kindInfoVo.getKindCode();
- // 车损
- if ("A".equalsIgnoreCase(code)) {
- haveCarDamageKind = true;
- }
- if ("B,D3,D4,".contains(code + ",")) {
- haveBusiKind = true;
- }
- }
- if (risks.size() == 1 && InsuranceRisk.TRAFFIC.getCode().equals(risks.get(0).getRiskCode())) {
- productsType = ProductsType.PT_0330;//单交
- } else if (risks.size() == 1 && !haveCarDamageKind && haveBusiKind) {
- productsType = ProductsType.PT_034002;//单三
- } else if (risks.size() == 1) {
- productsType = ProductsType.PT_034001;//单商
- } else if (risks.size() == 2 && !haveCarDamageKind && haveBusiKind) {
- productsType = ProductsType.PT_0330034002;//交三
- } else {
- productsType = ProductsType.PT_0330034001;//交商
- }
- this.setProductid(productsType.getCode());
- this.setProduct(productsType.getDesc());
- }
- }
|