InsOrders.java 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. package com.ydtech.modules.order.entity;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.annotation.IdType;
  6. import com.baomidou.mybatisplus.annotation.TableField;
  7. import com.baomidou.mybatisplus.annotation.TableId;
  8. import com.baomidou.mybatisplus.annotation.TableName;
  9. import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
  10. import com.fasterxml.jackson.annotation.JsonFormat;
  11. import com.ydtech.constants.enums.InsuranceRisk;
  12. import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
  13. import com.ydtech.constants.enums.dict.agreement.ProductsType;
  14. import com.ydtech.exception.SystemException;
  15. import com.ydtech.modules.admin.model.SysDept;
  16. import com.ydtech.modules.admin.model.SysUser;
  17. import com.ydtech.modules.ins.model.vo.KindInfoVo;
  18. import com.ydtech.modules.ins.model.vo.RiskInfoVo;
  19. import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
  20. import lombok.*;
  21. import java.io.Serializable;
  22. import java.time.LocalDateTime;
  23. import java.util.List;
  24. /**
  25. * 保险订单表
  26. *
  27. * @TableName ins_orders
  28. */
  29. @EqualsAndHashCode
  30. @ToString
  31. @TableName(value = "ins_orders", autoResultMap = true)
  32. @Data
  33. @AllArgsConstructor
  34. @NoArgsConstructor
  35. public class InsOrders implements Serializable {
  36. /**
  37. * 订单号
  38. */
  39. @TableId(value = "orderno",type = IdType.AUTO)
  40. private String orderno;
  41. /**
  42. * 报价单号
  43. */
  44. @TableField(value = "quoteno")
  45. private String quoteno;
  46. /**
  47. * 承保 保险公司编号
  48. */
  49. @TableField(value = "company_id")
  50. private String companyId;
  51. /**
  52. * 承保 保险名称
  53. */
  54. @TableField(value = "ins_company")
  55. private String insCompany;
  56. /**
  57. * 报价状态
  58. */
  59. @TableField(value = "orderstatus")
  60. private String orderstatus;
  61. /**
  62. * 车辆信息
  63. */
  64. @TableField(value = "carinfo", typeHandler = FastjsonTypeHandler.class)
  65. private JSONObject carinfo;
  66. /**
  67. * 用户id
  68. */
  69. @TableField(value = "userid")
  70. private String userid;
  71. /**
  72. * 代客录单时操作员ID
  73. */
  74. @TableField(value = "operatorid")
  75. private String operatorid;
  76. /**
  77. * 用户名称
  78. */
  79. @TableField(value = "username")
  80. private String username;
  81. /**
  82. * 代理团队id
  83. */
  84. @TableField(value = "deptid")
  85. private String deptid;
  86. /**
  87. * 代理团队名称
  88. */
  89. @TableField(value = "deptname")
  90. private String deptname;
  91. /**
  92. * 车主信息
  93. */
  94. @TableField(value = "ownerinfo", typeHandler = FastjsonTypeHandler.class)
  95. private JSONObject ownerinfo;
  96. /**
  97. * 投保人信息
  98. */
  99. @TableField(value = "applyinfo", typeHandler = FastjsonTypeHandler.class)
  100. private JSONObject applyinfo;
  101. /**
  102. * 被保人信息
  103. */
  104. @TableField(value = "insureinfo", typeHandler = FastjsonTypeHandler.class)
  105. private JSONObject insureinfo;
  106. /**
  107. * 协议id
  108. */
  109. @TableField(value = "agreeid")
  110. private String agreeid;
  111. /**
  112. * 产品id
  113. */
  114. @TableField(value = "productid")
  115. private String productid;
  116. /**
  117. * 产品名称
  118. */
  119. @TableField(value = "product")
  120. private String product;
  121. /**
  122. * 创建时间
  123. */
  124. @TableField(value = "createtime")
  125. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  126. private LocalDateTime createtime;
  127. /**
  128. * 车架号 VIN码
  129. */
  130. @TableField(value = "frameno")
  131. private String frameno;
  132. /**
  133. * 车牌号
  134. */
  135. @TableField(value = "licenseno")
  136. private String licenseno;
  137. /**
  138. * 投保人姓名
  139. */
  140. @TableField(value = "insuredname")
  141. private String insuredname;
  142. /**
  143. * 交强险开始时间
  144. */
  145. @TableField(value = "jqstartdate")
  146. private String jqstartdate;
  147. /**
  148. * 交强险结束时间
  149. */
  150. @TableField(value = "jqenddate")
  151. private String jqenddate;
  152. /**
  153. * 商业险开始时间
  154. */
  155. @TableField(value = "systartdate")
  156. private String systartdate;
  157. /**
  158. * 商业险结束时间
  159. */
  160. @TableField(value = "syenddate")
  161. private String syenddate;
  162. /**
  163. * 商业 交强
  164. */
  165. @TableField(value = "risk", typeHandler = FastjsonTypeHandler.class)
  166. private JSONArray risk;
  167. /**
  168. * 商业险信息
  169. */
  170. @TableField(value = "king", typeHandler = FastjsonTypeHandler.class)
  171. private JSONArray king;
  172. /**
  173. * 车船税信息
  174. */
  175. @TableField(value = "vehicle_and_vessel_tax", typeHandler = FastjsonTypeHandler.class)
  176. private JSONObject vehicleAndVesselTax;
  177. @TableField(exist = false)
  178. private List<InsAreaCompany> insAreaCompanyList; //子级集合
  179. @TableField(exist = false)
  180. private static final long serialVersionUID = 1L;
  181. @TableField(exist = false)
  182. private String subOrderId; //子订单id
  183. public InsOrders(SysUser user, SysDept dept, BaseQuoteInfoVo quoteInfoVo) {
  184. // 2. 组装订单
  185. this.setQuoteno(String.valueOf(quoteInfoVo.getQuoteno()));
  186. this.setOrderstatus(InsOrderStatusEnum.QUOTE_ING.getCode()); // 0 报价 1 待核保 2 已核保待缴费 3 核保退回 4 核保不通过
  187. this.setFrameno(quoteInfoVo.getCarInfo().getFrameNo());
  188. this.setLicenseno(quoteInfoVo.getCarInfo().getLicenseNo());
  189. // 2.1 车辆信息
  190. this.setCarinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getCarInfo())));
  191. this.setUserid(user.getId());
  192. this.setUsername(user.getName());
  193. this.setDeptid(user.getDeptId());
  194. this.setDeptname(dept == null ? "" : dept.getName());
  195. // 2.2 人员信息
  196. this.setOwnerinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getOwnerInfo())));
  197. this.setApplyinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getPolicyHolderInfo())));
  198. this.setInsureinfo(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getInsuredPersonInfo())));
  199. this.setInsuredname(quoteInfoVo.getPolicyHolderInfo().getName());
  200. List<RiskInfoVo> risks = quoteInfoVo.getRiskList();
  201. List<KindInfoVo> kinds = quoteInfoVo.getKindList();
  202. // 2.3 主险种信息
  203. this.insuranceInformation(risks, kinds);
  204. // 2.3.1 险种信息
  205. this.setRisk(JSON.parseArray(JSON.toJSONString(quoteInfoVo.getRiskList())));
  206. this.setKing(JSON.parseArray(JSON.toJSONString(quoteInfoVo.getKindList())));
  207. // 2.4 产品信息
  208. this.productInformation(risks, kinds);
  209. this.setCreatetime(LocalDateTime.now());
  210. // 2.5 车船税信息
  211. this.setVehicleAndVesselTax(JSON.parseObject(JSON.toJSONString(quoteInfoVo.getVehicleAndVesselTax())));
  212. }
  213. /**
  214. * 保险信息
  215. *
  216. * @param risks 主险种
  217. * @param kinds 商业险险种
  218. */
  219. private void insuranceInformation(List<RiskInfoVo> risks, List<KindInfoVo> kinds) {
  220. for (RiskInfoVo riskInfoVo : risks) {
  221. if (InsuranceRisk.TRAFFIC.getCode().equals(riskInfoVo.getRiskCode())) { //交强
  222. this.setJqstartdate(riskInfoVo.getStartDate());
  223. this.setJqenddate(riskInfoVo.getEndDate());
  224. }
  225. if (InsuranceRisk.BUSINESS.getCode().equals(riskInfoVo.getRiskCode())) { //商业
  226. this.setSystartdate(riskInfoVo.getStartDate());
  227. this.setSyenddate(riskInfoVo.getEndDate());
  228. if (kinds.isEmpty()) {
  229. throw new SystemException("商业险险种未选择,不允许报价");
  230. }
  231. }
  232. }
  233. }
  234. /**
  235. * 产品信息
  236. *
  237. * @param risks 主险种
  238. * @param kinds 商业险险种
  239. */
  240. private void productInformation(List<RiskInfoVo> risks, List<KindInfoVo> kinds) {
  241. /**
  242. * 投保险种逻辑
  243. * 单交-单交强
  244. * 单商-单商业(含车损)
  245. * 单三-单商业(不含车损)
  246. * 交三-交强+商业(不含车损)
  247. * 交商-交强+商业(含车损)
  248. * 单交:
  249. * 单商:034001
  250. * 单三:034002
  251. * 交三:0330034002
  252. * 交商:0330034001
  253. *
  254. */
  255. ProductsType productsType;
  256. boolean haveCarDamageKind = false;//是否含车损
  257. boolean haveBusiKind = false;//是否含车损外的商业险种
  258. for (KindInfoVo kindInfoVo : kinds) {
  259. String code = kindInfoVo.getKindCode();
  260. // 车损
  261. if ("A".equalsIgnoreCase(code)) {
  262. haveCarDamageKind = true;
  263. }
  264. if ("B,D3,D4,".contains(code + ",")) {
  265. haveBusiKind = true;
  266. }
  267. }
  268. if (risks.size() == 1 && InsuranceRisk.TRAFFIC.getCode().equals(risks.get(0).getRiskCode())) {
  269. productsType = ProductsType.PT_0330;//单交
  270. } else if (risks.size() == 1 && !haveCarDamageKind && haveBusiKind) {
  271. productsType = ProductsType.PT_034002;//单三
  272. } else if (risks.size() == 1) {
  273. productsType = ProductsType.PT_034001;//单商
  274. } else if (risks.size() == 2 && !haveCarDamageKind && haveBusiKind) {
  275. productsType = ProductsType.PT_0330034002;//交三
  276. } else {
  277. productsType = ProductsType.PT_0330034001;//交商
  278. }
  279. this.setProductid(productsType.getCode());
  280. this.setProduct(productsType.getDesc());
  281. }
  282. }