OrderComponents.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. package com.ydtech.components;
  2. import com.ydtech.exception.SystemException;
  3. import com.ydtech.modules.admin.service.SysDeptService;
  4. import com.ydtech.modules.admin.service.SysUserService;
  5. import com.ydtech.modules.esm.service.EsmAgreementProdService;
  6. import com.ydtech.modules.esm.service.EsmAgreementProdfeeService;
  7. import com.ydtech.modules.esm.service.EsmAgreementService;
  8. import com.ydtech.modules.esm.service.EsmRetailService;
  9. import com.ydtech.modules.ins.model.InsOrder;
  10. import com.ydtech.modules.ins.model.vo.RiskInfoVo;
  11. import com.ydtech.modules.ins.model.ya.YaQuoteInfoVo;
  12. import com.ydtech.modules.ins.service.InsCommissionService;
  13. import com.ydtech.modules.ins.service.InsDeptFeeService;
  14. import com.ydtech.modules.ins.service.InsFeeDetailService;
  15. import com.ydtech.modules.ins.service.InsOrderService;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.data.redis.core.StringRedisTemplate;
  18. import org.springframework.stereotype.Component;
  19. import org.springframework.util.ObjectUtils;
  20. import org.springframework.util.StringUtils;
  21. import javax.annotation.Resource;
  22. @Component
  23. public class OrderComponents {
  24. @Resource
  25. private EsmAgreementService esmAgreementService;
  26. @Resource
  27. private EsmAgreementProdfeeService esmAgreementProdfeeService;
  28. @Resource
  29. private InsFeeDetailService insFeeDetailService;
  30. @Resource
  31. private InsDeptFeeService insDeptFeeService;
  32. @Resource
  33. private InsCommissionService insCommissionService;
  34. @Resource
  35. private EsmRetailService esmRetailService;
  36. @Resource
  37. private SysUserService sysUserService;
  38. @Resource
  39. private InsOrderService insOrderService;
  40. @Resource
  41. private SysDeptService sysDeptService;
  42. @Resource
  43. private EsmAgreementProdService esmAgreementProdService;
  44. // @Resource
  45. // private StringRedisTemplate redisTemplate;
  46. // /**
  47. // * 保存费用明细
  48. // *
  49. // * @param order
  50. // */
  51. // public void saveFeeDetail(InsOrder order) {
  52. // InsFeeDetail feeDetail = new InsFeeDetail();
  53. // feeDetail.setOrderno(order.getOrderno());
  54. // feeDetail.setQuoteno(order.getQuoteno());
  55. // feeDetail.setFeerate(order.getFeerate()); //交强手续费比例
  56. // feeDetail.setDisrate(order.getDisrate()); //商业手续费比例
  57. // BigDecimal jqfee = new BigDecimal(order.getJqpremium() * order.getFeerate() * 0.01);
  58. // jqfee = jqfee.setScale(2, BigDecimal.ROUND_HALF_UP);
  59. // feeDetail.setFeeamount(jqfee.doubleValue()); //交强手续费
  60. // BigDecimal syfee = new BigDecimal(order.getSypremium() * order.getDisrate() * 0.01);
  61. // syfee = syfee.setScale(2, BigDecimal.ROUND_HALF_UP);
  62. // feeDetail.setDisamount(syfee.doubleValue()); //商业手续费
  63. //
  64. // feeDetail.setJqdiscountrate(order.getJqdiscountrate());
  65. // feeDetail.setSydiscountrate(order.getSydiscountrate());
  66. // BigDecimal jqDiscount = new BigDecimal(order.getJqpremium() * order.getJqdiscountrate() * 0.01);
  67. // jqDiscount = jqDiscount.setScale(2, RoundingMode.HALF_UP);
  68. // feeDetail.setJqdiscount(jqDiscount.doubleValue()); //交强优惠金额
  69. // BigDecimal syDiscount = new BigDecimal(order.getSypremium() * order.getSydiscountrate() * 0.01);
  70. // syDiscount = syDiscount.setScale(2, RoundingMode.HALF_UP);
  71. // feeDetail.setSydiscount(syDiscount.doubleValue()); //商业优惠金额
  72. //
  73. // feeDetail.setJqpremium(order.getJqpremium());
  74. // feeDetail.setSypremium(order.getSypremium());
  75. // feeDetail.setTaxamount(order.getTaxamount());
  76. // feeDetail.setSumpremium(order.getSumpremium());
  77. // feeDetail.setInscompany(order.getInscompany());
  78. // feeDetail.setAgreeid(order.getAgreeid());
  79. // feeDetail.setAgreeprodid(order.getProductid());
  80. // EsmAgreement esmAgreement = esmAgreementService.selectByPk(order.getAgreeid());
  81. // if (esmAgreement != null) {
  82. // feeDetail.setAgreementcode(esmAgreement.getAgreementcode());
  83. // feeDetail.setAgreetype(esmAgreement.getAgreementtype());
  84. // feeDetail.setChannel(esmAgreement.getChannel());
  85. // }
  86. // feeDetail.setProducname(order.getProduct());
  87. // feeDetail.setAuditstatus("0"); //0未审核 1已审核
  88. //
  89. // insFeeDetailService.insert(feeDetail);
  90. //
  91. // //机构费用
  92. // InsDeptFee deptFee = new InsDeptFee();
  93. // deptFee.setOrderno(order.getOrderno());
  94. // deptFee.setQuoteno(order.getQuoteno());
  95. // deptFee.setAgreeid(order.getAgreeid());
  96. // deptFee.setAgreeprodid(order.getProductid());
  97. // deptFee.setAuditstatus("0");
  98. // deptFee.setSettlestatus("0");
  99. // List<EsmAgreementProdfee> prodfees = esmAgreementProdfeeService.selectList(" where agreeprodid=?", new Object[]{order.getProductid()});
  100. // for (EsmAgreementProdfee prodfee : prodfees) {
  101. // deptFee.setKeeprate(prodfee.getKeeprate() * 0.01);
  102. // BigDecimal amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * prodfee.getKeeprate() * 0.01);
  103. // amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
  104. // deptFee.setKeepamount(amount.doubleValue());
  105. // deptFee.setAddrate(prodfee.getAddrate() * 0.01);
  106. // amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * prodfee.getAddrate() * 0.01);
  107. // amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
  108. // deptFee.setAddamount(amount.doubleValue());
  109. // deptFee.setComlevel(prodfee.getComlevel());
  110. // if ("一级".equals(prodfee.getComlevel())) {
  111. // deptFee.setComcode(order.getDeptid().substring(0, 2)); //99140302M01D01
  112. // } else if ("二级".equals(prodfee.getComlevel())) {
  113. // deptFee.setComcode(order.getDeptid().substring(0, 4));
  114. // } else if ("三级".equals(prodfee.getComlevel())) {
  115. // deptFee.setComcode(order.getDeptid().substring(0, 6));
  116. // } else if ("四级".equals(prodfee.getComlevel())) {
  117. // deptFee.setComcode(order.getDeptid().substring(0, 8));
  118. // } else {
  119. // deptFee.setComcode(order.getDeptid().substring(0, 11));
  120. // }
  121. // insDeptFeeService.insert(deptFee);
  122. // }
  123. //
  124. // saveRetail(order); //分销所占比例
  125. // }
  126. // /**
  127. // * 三级分销费用保存
  128. // *
  129. // * @param order
  130. // * @return
  131. // */
  132. // public double saveRetail(InsOrder order) {
  133. // double retailRate = 0;
  134. //
  135. // //1、根据机构匹配分销规则,获取分销比例
  136. // List<EsmRetail> list = esmRetailService.selectList(" where deptid = ? and status=?", new Object[]{order.getDeptid(), "1"});
  137. // //2、根据userid查询三级推荐人
  138. // List<SysUser> users = esmUserInternalService.getSuperior(order.getUserid());
  139. //
  140. // if (list != null && list.size() > 0 && users.size() > 0 && !"0".equals(list.get(0).getRetailtype())) {
  141. // EsmRetail retail = list.get(0);
  142. // List<Double> rateList = new ArrayList<Double>();
  143. // rateList.add(retail.getDisrate1());
  144. // rateList.add(retail.getDisrate2());
  145. // rateList.add(retail.getDisrate3());
  146. //
  147. // if ("1".equals(retail.getRetailtype())) {//一级分销
  148. // InsCommission commission = new InsCommission();
  149. // commission.setOrderno(order.getOrderno());
  150. // commission.setQuoteno(order.getQuoteno());
  151. // commission.setRefereescode(users.get(0).getId());
  152. // commission.setRefereesname(users.get(0).getName());
  153. // double rate = rateList.get(0) * 0.01;
  154. // commission.setCommissionrate(rate);
  155. // BigDecimal amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * rate);
  156. // amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
  157. // commission.setCommissionamount(amount.doubleValue());
  158. // commission.setLevel("1");
  159. // commission.setAuditstatus("0"); //0未审核 1已审核
  160. // commission.setSettlestatus("0"); //0未结算 1已结算
  161. // commission.setInsuredtime(order.getAudittime()); //承保确认时间
  162. // insCommissionService.insert(commission);
  163. //
  164. // retailRate += rateList.get(0);
  165. // } else if ("2".equals(retail.getRetailtype())) {//二级分销
  166. // int num = users.size() > 2 ? 2 : users.size();
  167. // for (int i = 0; i < num; i++) {
  168. // InsCommission commission = new InsCommission();
  169. // commission.setOrderno(order.getOrderno());
  170. // commission.setQuoteno(order.getQuoteno());
  171. // commission.setRefereescode(users.get(i).getId());
  172. // commission.setRefereesname(users.get(i).getName());
  173. // double rate = rateList.get(i) * 0.01;
  174. // commission.setCommissionrate(rate);
  175. // BigDecimal amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * rate);
  176. // amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
  177. // commission.setCommissionamount(amount.doubleValue());
  178. // commission.setLevel(String.valueOf(i + 1));
  179. // commission.setAuditstatus("0"); //0未审核 1已审核
  180. // commission.setSettlestatus("0"); //0未结算 1已结算
  181. // commission.setInsuredtime(order.getAudittime()); //承保确认时间
  182. // insCommissionService.insert(commission);
  183. //
  184. // retailRate += rateList.get(i);
  185. // }
  186. //
  187. // } else {//三级分销
  188. // int num = users.size() > 2 ? 3 : users.size();
  189. // for (int i = 0; i < num; i++) {
  190. // InsCommission commission = new InsCommission();
  191. // commission.setOrderno(order.getOrderno());
  192. // commission.setQuoteno(order.getQuoteno());
  193. // commission.setRefereescode(users.get(i).getId());
  194. // commission.setRefereesname(users.get(i).getName());
  195. // double rate = rateList.get(i) * 0.01;
  196. // commission.setCommissionrate(rate);
  197. // BigDecimal amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * rate);
  198. // amount = amount.setScale(2, RoundingMode.HALF_UP);
  199. // commission.setCommissionamount(amount.doubleValue());
  200. // commission.setLevel(String.valueOf(i + 1));
  201. // commission.setAuditstatus("0"); //0未审核 1已审核
  202. // commission.setSettlestatus("0"); //0未结算 1已结算
  203. // commission.setInsuredtime(order.getAudittime()); //承保确认时间
  204. // insCommissionService.insert(commission);
  205. //
  206. // retailRate += rateList.get(i);
  207. // }
  208. // }
  209. // }
  210. // return retailRate;
  211. // }
  212. //
  213. // /**
  214. // * 分销费用统计
  215. // *
  216. // * @param deptid
  217. // * @param userid
  218. // * @return
  219. // */
  220. // public double countRetail(String deptid, String userid) {
  221. // double retailRate = 0;
  222. //
  223. // //1、根据机构匹配分销规则,获取分销比例
  224. // List<EsmRetail> list = esmRetailService.selectList(" where deptid = ? and status=?", new Object[]{deptid, "1"});
  225. // //2、根据userid查询三级推荐人
  226. // List<SysUser> users = esmUserInternalService.getSuperior(userid);
  227. //
  228. // if (list != null && !list.isEmpty() && !users.isEmpty() && !"0".equals(list.get(0).getRetailtype())) {
  229. // EsmRetail retail = list.get(0);
  230. // List<Double> rateList = new ArrayList<>();
  231. // rateList.add(retail.getDisrate1());
  232. // rateList.add(retail.getDisrate2());
  233. // rateList.add(retail.getDisrate3());
  234. //
  235. // if ("1".equals(retail.getRetailtype())) {//一级分销
  236. // retailRate += rateList.get(0);
  237. // } else if ("2".equals(retail.getRetailtype())) {//二级分销
  238. // int num = Math.min(users.size(), 2);
  239. // for (int i = 0; i < num; i++) {
  240. // retailRate += rateList.get(i);
  241. // }
  242. // } else {//三级分销
  243. // int num = users.size() > 2 ? 3 : users.size();
  244. // for (int i = 0; i < num; i++) {
  245. // retailRate += rateList.get(i);
  246. // }
  247. // }
  248. // }
  249. //
  250. // return retailRate;
  251. // }
  252. /**
  253. * 校验参数
  254. *
  255. * @param yaQuoteInfoVo
  256. * @throws Exception
  257. */
  258. public void checkEmpty(YaQuoteInfoVo yaQuoteInfoVo) {
  259. if (yaQuoteInfoVo.getCarInfo() == null) {
  260. throw new SystemException("车辆信息 不能为空!");
  261. }
  262. if (yaQuoteInfoVo.getPolicyHolderInfo() == null || yaQuoteInfoVo.getInsuredPersonInfo() == null) {
  263. throw new SystemException("被保人信息 / 被保人信息 不能为空!");
  264. }
  265. if (StringUtils.isEmpty(yaQuoteInfoVo.getCarInfo().getFrameNo())) {
  266. throw new SystemException("车架号不能为空");
  267. }
  268. if (yaQuoteInfoVo.getRiskList() == null || yaQuoteInfoVo.getRiskList().isEmpty()) {
  269. throw new SystemException("投保信息 不能为空!");
  270. }
  271. for (RiskInfoVo riskInfoVo : yaQuoteInfoVo.getRiskList()) {
  272. if (riskInfoVo.getStartDate() == null || riskInfoVo.getEndDate() == null) {
  273. throw new SystemException("投保信息 起保日期 或 终保日期 不能为空!");
  274. }
  275. }
  276. }
  277. // /**
  278. // * 生成订单信息
  279. // *
  280. // * @param record
  281. // * @param insCompany
  282. // * @return InsOrder
  283. // */
  284. // public InsOrder geneOrder(YaQuoteInfoVo record, String insCompany, String authComCode) {
  285. // checkEmpty(record);
  286. //
  287. // SysUser user = sysUserService.getById(record.getUserId());
  288. // if (user == null) {
  289. // throw new SystemException("userId不存在");
  290. // }
  291. //
  292. // InsOrder insOrder = new InsOrder();
  293. // String orderno = IdGenerate.nextId();
  294. // insOrder.setOrderno(orderno);
  295. // insOrder.setQuoteno(String.valueOf(record.getQuoteno()));
  296. // insOrder.setOrderstatus("0"); // 0 报价 1 待核保 2 已核保待缴费 3 核保退回 4 核保不通过
  297. // insOrder.setFrameNo(record.getCarInfo().getFrameNo());
  298. // insOrder.setLicenseNo(record.getCarInfo().getLicenseNo());
  299. // insOrder.setCarinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getCarInfo())));
  300. //
  301. // // 关闭订单 不含当前报价号
  302. // InsOrder orderObj = insOrderService.queryQuoteno(new Object[]{record.getUserId(), record.getCarInfo().getFrameNo(), record.getQuoteno()});
  303. // if (orderObj != null) {
  304. // List<InsOrder> listo = insOrderService.selectList(" where quoteno=?", new Object[]{orderObj.getQuoteno()});
  305. // String status = "0";
  306. // for (InsOrder order : listo) {
  307. // if (!"0".equals(order.getOrderstatus())) {
  308. // status = order.getOrderstatus();
  309. // }
  310. // }
  311. // //0报价中 1待核保 2已核保 3核保退回 4核保不通过 5已核保待缴费 6已缴费 7已承保 99已关闭
  312. // if ("0".equals(status)) {//关闭订单
  313. // insOrderService.closeOrder(orderObj.getOrderno(), "99");
  314. // } else if (!"99".equals(status)) {
  315. // throw new SystemException("此车辆已提交核保,重新报价请先关闭订单,任务号:" + orderObj.getQuoteno());
  316. // }
  317. // }
  318. // insOrder.setUserid(user.getId());
  319. // insOrder.setUsername(user.getName());
  320. // insOrder.setDeptid(user.getDeptId());
  321. // SysDept dept = sysDeptService.getById(user.getDeptId());
  322. //// SysDept dept = sysDeptService.selectByPk(user.getDeptId());
  323. // insOrder.setDeptname(dept == null ? "" : dept.getName());
  324. //
  325. // double retailRate = countRetail(user.getDeptId(), user.getId());
  326. //
  327. // insOrder.setOwnerinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getOwnerInfo())));
  328. // insOrder.setApplyinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getPolicyHolderInfo())));
  329. // insOrder.setInsureinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getInsuredPersonInfo())));
  330. //
  331. // insOrder.setInsuredname(record.getPolicyHolderInfo().getName());
  332. //
  333. // List<RiskInfoVo> risks = record.getRiskList();
  334. // for (RiskInfoVo risk : risks) {
  335. // if ("0507".equals(risk.getRiskCode())) {//交强
  336. // insOrder.setJqstartdate(risk.getStartDate());
  337. // insOrder.setJqenddate(risk.getEndDate());
  338. // }
  339. // if ("0510".equals(risk.getRiskCode())) {//商业
  340. // insOrder.setSystartdate(risk.getStartDate());
  341. // insOrder.setSyenddate(risk.getEndDate());
  342. // }
  343. // }
  344. //
  345. // List<KindInfoVo> kinds = record.getKindList();
  346. // String productId = "";
  347. // String productname = "";
  348. //
  349. // List<EsmAgreement> agreements = esmAgreementService.selectList(" where t.agreestatus='1' and t.insure1 like ? " + "and exists (select 1 from esm_agreement_prod t2 where t.id=t2.agreeid and t2.authcomcode like ?)", new Object[]{authComCode + "%", "%" + user.getDeptId() + "%"});
  350. // if (agreements.size() == 0) {
  351. // throw new SystemException("不存在有效协议或机构" + user.getDeptId() + "未授权");
  352. // }
  353. // String agreeid = agreements.get(0).getId();
  354. // insOrder.setAgreeid(agreeid);
  355. // //匹配协议,获取费用
  356. // StringBuffer whereStr = new StringBuffer();
  357. // List params = new ArrayList();// where t.agreeid=? and t.productid in ()
  358. // whereStr.append("where t.agreeid=? ");
  359. // params.add(agreeid);
  360. // if (risks.size() == 1 && "0507".equals(risks.get(0).getRiskCode())) {
  361. // productId = "ZG01001";
  362. // productname = "单交强";
  363. // whereStr.append(" and t.productid=?");
  364. // params.add(productId);
  365. // } else if (risks.size() == 1 && kinds.size() == 1 && "B".equals(kinds.get(0).getKindCode())) {
  366. // productId = "ZG01002";
  367. // productname = "单三者";
  368. // whereStr.append(" and t.productid=?");
  369. // params.add(productId);
  370. // } else if (risks.size() == 1) {
  371. // productId = "ZG01003";
  372. // productname = "单商业";
  373. // whereStr.append(" and t.productid=?");
  374. // params.add(productId);
  375. // } else if (risks.size() == 2 && kinds.size() == 1 && "B".equals(kinds.get(0).getKindCode())) {
  376. // productId = "ZG01004";
  377. // productname = "交强+三者";
  378. // whereStr.append(" and t.productid in (?,?)");
  379. // params.add("ZG01004");
  380. // params.add("ZG01005");
  381. // } else {
  382. // productId = "ZG01006";
  383. // productname = "交强+商业";
  384. // whereStr.append(" and t.productid in (?,?)");
  385. // params.add("ZG01006");
  386. // params.add("ZG01007");
  387. // }
  388. //
  389. // insOrder.setProductid(productId);
  390. // insOrder.setProduct(productname);
  391. // List<EsmAgreementProd> agreementProds = esmAgreementProdService.selectList(whereStr.toString(), params.toArray());
  392. // for (EsmAgreementProd prod : agreementProds) {
  393. // if ("ZG01001".equals(prod.getProductid()) || "ZG01004".equals(prod.getProductid()) || "ZG01006".equals(prod.getProductid())) {
  394. // insOrder.setFeerate(prod.getProductrate());//交强手续费比例
  395. // insOrder.setJqdiscountrate(prod.getFeerate() - retailRate); //交强优惠比例=业务员绩效-分销费用
  396. // } else {
  397. // insOrder.setDisrate(prod.getProductrate()); //商业手续费比例
  398. // insOrder.setSydiscountrate(prod.getFeerate() - retailRate); //商业优惠比例=业务员绩效-分销费用
  399. // }
  400. // insOrder.setProductid(prod.getId());
  401. // }
  402. //
  403. // insOrder.setRiskinfo(JSONObject.parseArray(JSONObject.toJSONString(record.getRiskList())));
  404. // insOrder.setKindinfo(JSONObject.parseArray(JSONObject.toJSONString(record.getKindList())));
  405. // SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  406. //
  407. // insOrder.setInscompany(insCompany);
  408. // insOrder.setCreatetime(sdfm.format(new Date()));
  409. //
  410. // return insOrder;
  411. //
  412. // }
  413. public InsOrder orderExists(String orderNo) {
  414. InsOrder insOrder = insOrderService.selectByPk(orderNo);
  415. if (ObjectUtils.isEmpty(insOrder)) {
  416. throw new SystemException("订单不存在");
  417. }
  418. return insOrder;
  419. }
  420. }