| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 |
- package com.ydtech.components;
- import com.ydtech.exception.SystemException;
- import com.ydtech.modules.admin.service.SysDeptService;
- import com.ydtech.modules.admin.service.SysUserService;
- import com.ydtech.modules.esm.service.EsmAgreementProdService;
- import com.ydtech.modules.esm.service.EsmAgreementProdfeeService;
- import com.ydtech.modules.esm.service.EsmAgreementService;
- import com.ydtech.modules.esm.service.EsmRetailService;
- import com.ydtech.modules.ins.model.InsOrder;
- import com.ydtech.modules.ins.model.vo.RiskInfoVo;
- import com.ydtech.modules.ins.model.ya.YaQuoteInfoVo;
- import com.ydtech.modules.ins.service.InsCommissionService;
- import com.ydtech.modules.ins.service.InsDeptFeeService;
- import com.ydtech.modules.ins.service.InsFeeDetailService;
- import com.ydtech.modules.ins.service.InsOrderService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.redis.core.StringRedisTemplate;
- import org.springframework.stereotype.Component;
- import org.springframework.util.ObjectUtils;
- import org.springframework.util.StringUtils;
- import javax.annotation.Resource;
- @Component
- public class OrderComponents {
- @Resource
- private EsmAgreementService esmAgreementService;
- @Resource
- private EsmAgreementProdfeeService esmAgreementProdfeeService;
- @Resource
- private InsFeeDetailService insFeeDetailService;
- @Resource
- private InsDeptFeeService insDeptFeeService;
- @Resource
- private InsCommissionService insCommissionService;
- @Resource
- private EsmRetailService esmRetailService;
- @Resource
- private SysUserService sysUserService;
- @Resource
- private InsOrderService insOrderService;
- @Resource
- private SysDeptService sysDeptService;
- @Resource
- private EsmAgreementProdService esmAgreementProdService;
- // @Resource
- // private StringRedisTemplate redisTemplate;
- // /**
- // * 保存费用明细
- // *
- // * @param order
- // */
- // public void saveFeeDetail(InsOrder order) {
- // InsFeeDetail feeDetail = new InsFeeDetail();
- // feeDetail.setOrderno(order.getOrderno());
- // feeDetail.setQuoteno(order.getQuoteno());
- // feeDetail.setFeerate(order.getFeerate()); //交强手续费比例
- // feeDetail.setDisrate(order.getDisrate()); //商业手续费比例
- // BigDecimal jqfee = new BigDecimal(order.getJqpremium() * order.getFeerate() * 0.01);
- // jqfee = jqfee.setScale(2, BigDecimal.ROUND_HALF_UP);
- // feeDetail.setFeeamount(jqfee.doubleValue()); //交强手续费
- // BigDecimal syfee = new BigDecimal(order.getSypremium() * order.getDisrate() * 0.01);
- // syfee = syfee.setScale(2, BigDecimal.ROUND_HALF_UP);
- // feeDetail.setDisamount(syfee.doubleValue()); //商业手续费
- //
- // feeDetail.setJqdiscountrate(order.getJqdiscountrate());
- // feeDetail.setSydiscountrate(order.getSydiscountrate());
- // BigDecimal jqDiscount = new BigDecimal(order.getJqpremium() * order.getJqdiscountrate() * 0.01);
- // jqDiscount = jqDiscount.setScale(2, RoundingMode.HALF_UP);
- // feeDetail.setJqdiscount(jqDiscount.doubleValue()); //交强优惠金额
- // BigDecimal syDiscount = new BigDecimal(order.getSypremium() * order.getSydiscountrate() * 0.01);
- // syDiscount = syDiscount.setScale(2, RoundingMode.HALF_UP);
- // feeDetail.setSydiscount(syDiscount.doubleValue()); //商业优惠金额
- //
- // feeDetail.setJqpremium(order.getJqpremium());
- // feeDetail.setSypremium(order.getSypremium());
- // feeDetail.setTaxamount(order.getTaxamount());
- // feeDetail.setSumpremium(order.getSumpremium());
- // feeDetail.setInscompany(order.getInscompany());
- // feeDetail.setAgreeid(order.getAgreeid());
- // feeDetail.setAgreeprodid(order.getProductid());
- // EsmAgreement esmAgreement = esmAgreementService.selectByPk(order.getAgreeid());
- // if (esmAgreement != null) {
- // feeDetail.setAgreementcode(esmAgreement.getAgreementcode());
- // feeDetail.setAgreetype(esmAgreement.getAgreementtype());
- // feeDetail.setChannel(esmAgreement.getChannel());
- // }
- // feeDetail.setProducname(order.getProduct());
- // feeDetail.setAuditstatus("0"); //0未审核 1已审核
- //
- // insFeeDetailService.insert(feeDetail);
- //
- // //机构费用
- // InsDeptFee deptFee = new InsDeptFee();
- // deptFee.setOrderno(order.getOrderno());
- // deptFee.setQuoteno(order.getQuoteno());
- // deptFee.setAgreeid(order.getAgreeid());
- // deptFee.setAgreeprodid(order.getProductid());
- // deptFee.setAuditstatus("0");
- // deptFee.setSettlestatus("0");
- // List<EsmAgreementProdfee> prodfees = esmAgreementProdfeeService.selectList(" where agreeprodid=?", new Object[]{order.getProductid()});
- // for (EsmAgreementProdfee prodfee : prodfees) {
- // deptFee.setKeeprate(prodfee.getKeeprate() * 0.01);
- // BigDecimal amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * prodfee.getKeeprate() * 0.01);
- // amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
- // deptFee.setKeepamount(amount.doubleValue());
- // deptFee.setAddrate(prodfee.getAddrate() * 0.01);
- // amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * prodfee.getAddrate() * 0.01);
- // amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
- // deptFee.setAddamount(amount.doubleValue());
- // deptFee.setComlevel(prodfee.getComlevel());
- // if ("一级".equals(prodfee.getComlevel())) {
- // deptFee.setComcode(order.getDeptid().substring(0, 2)); //99140302M01D01
- // } else if ("二级".equals(prodfee.getComlevel())) {
- // deptFee.setComcode(order.getDeptid().substring(0, 4));
- // } else if ("三级".equals(prodfee.getComlevel())) {
- // deptFee.setComcode(order.getDeptid().substring(0, 6));
- // } else if ("四级".equals(prodfee.getComlevel())) {
- // deptFee.setComcode(order.getDeptid().substring(0, 8));
- // } else {
- // deptFee.setComcode(order.getDeptid().substring(0, 11));
- // }
- // insDeptFeeService.insert(deptFee);
- // }
- //
- // saveRetail(order); //分销所占比例
- // }
- // /**
- // * 三级分销费用保存
- // *
- // * @param order
- // * @return
- // */
- // public double saveRetail(InsOrder order) {
- // double retailRate = 0;
- //
- // //1、根据机构匹配分销规则,获取分销比例
- // List<EsmRetail> list = esmRetailService.selectList(" where deptid = ? and status=?", new Object[]{order.getDeptid(), "1"});
- // //2、根据userid查询三级推荐人
- // List<SysUser> users = esmUserInternalService.getSuperior(order.getUserid());
- //
- // if (list != null && list.size() > 0 && users.size() > 0 && !"0".equals(list.get(0).getRetailtype())) {
- // EsmRetail retail = list.get(0);
- // List<Double> rateList = new ArrayList<Double>();
- // rateList.add(retail.getDisrate1());
- // rateList.add(retail.getDisrate2());
- // rateList.add(retail.getDisrate3());
- //
- // if ("1".equals(retail.getRetailtype())) {//一级分销
- // InsCommission commission = new InsCommission();
- // commission.setOrderno(order.getOrderno());
- // commission.setQuoteno(order.getQuoteno());
- // commission.setRefereescode(users.get(0).getId());
- // commission.setRefereesname(users.get(0).getName());
- // double rate = rateList.get(0) * 0.01;
- // commission.setCommissionrate(rate);
- // BigDecimal amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * rate);
- // amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
- // commission.setCommissionamount(amount.doubleValue());
- // commission.setLevel("1");
- // commission.setAuditstatus("0"); //0未审核 1已审核
- // commission.setSettlestatus("0"); //0未结算 1已结算
- // commission.setInsuredtime(order.getAudittime()); //承保确认时间
- // insCommissionService.insert(commission);
- //
- // retailRate += rateList.get(0);
- // } else if ("2".equals(retail.getRetailtype())) {//二级分销
- // int num = users.size() > 2 ? 2 : users.size();
- // for (int i = 0; i < num; i++) {
- // InsCommission commission = new InsCommission();
- // commission.setOrderno(order.getOrderno());
- // commission.setQuoteno(order.getQuoteno());
- // commission.setRefereescode(users.get(i).getId());
- // commission.setRefereesname(users.get(i).getName());
- // double rate = rateList.get(i) * 0.01;
- // commission.setCommissionrate(rate);
- // BigDecimal amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * rate);
- // amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
- // commission.setCommissionamount(amount.doubleValue());
- // commission.setLevel(String.valueOf(i + 1));
- // commission.setAuditstatus("0"); //0未审核 1已审核
- // commission.setSettlestatus("0"); //0未结算 1已结算
- // commission.setInsuredtime(order.getAudittime()); //承保确认时间
- // insCommissionService.insert(commission);
- //
- // retailRate += rateList.get(i);
- // }
- //
- // } else {//三级分销
- // int num = users.size() > 2 ? 3 : users.size();
- // for (int i = 0; i < num; i++) {
- // InsCommission commission = new InsCommission();
- // commission.setOrderno(order.getOrderno());
- // commission.setQuoteno(order.getQuoteno());
- // commission.setRefereescode(users.get(i).getId());
- // commission.setRefereesname(users.get(i).getName());
- // double rate = rateList.get(i) * 0.01;
- // commission.setCommissionrate(rate);
- // BigDecimal amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * rate);
- // amount = amount.setScale(2, RoundingMode.HALF_UP);
- // commission.setCommissionamount(amount.doubleValue());
- // commission.setLevel(String.valueOf(i + 1));
- // commission.setAuditstatus("0"); //0未审核 1已审核
- // commission.setSettlestatus("0"); //0未结算 1已结算
- // commission.setInsuredtime(order.getAudittime()); //承保确认时间
- // insCommissionService.insert(commission);
- //
- // retailRate += rateList.get(i);
- // }
- // }
- // }
- // return retailRate;
- // }
- //
- // /**
- // * 分销费用统计
- // *
- // * @param deptid
- // * @param userid
- // * @return
- // */
- // public double countRetail(String deptid, String userid) {
- // double retailRate = 0;
- //
- // //1、根据机构匹配分销规则,获取分销比例
- // List<EsmRetail> list = esmRetailService.selectList(" where deptid = ? and status=?", new Object[]{deptid, "1"});
- // //2、根据userid查询三级推荐人
- // List<SysUser> users = esmUserInternalService.getSuperior(userid);
- //
- // if (list != null && !list.isEmpty() && !users.isEmpty() && !"0".equals(list.get(0).getRetailtype())) {
- // EsmRetail retail = list.get(0);
- // List<Double> rateList = new ArrayList<>();
- // rateList.add(retail.getDisrate1());
- // rateList.add(retail.getDisrate2());
- // rateList.add(retail.getDisrate3());
- //
- // if ("1".equals(retail.getRetailtype())) {//一级分销
- // retailRate += rateList.get(0);
- // } else if ("2".equals(retail.getRetailtype())) {//二级分销
- // int num = Math.min(users.size(), 2);
- // for (int i = 0; i < num; i++) {
- // retailRate += rateList.get(i);
- // }
- // } else {//三级分销
- // int num = users.size() > 2 ? 3 : users.size();
- // for (int i = 0; i < num; i++) {
- // retailRate += rateList.get(i);
- // }
- // }
- // }
- //
- // return retailRate;
- // }
- /**
- * 校验参数
- *
- * @param yaQuoteInfoVo
- * @throws Exception
- */
- public void checkEmpty(YaQuoteInfoVo yaQuoteInfoVo) {
- if (yaQuoteInfoVo.getCarInfo() == null) {
- throw new SystemException("车辆信息 不能为空!");
- }
- if (yaQuoteInfoVo.getPolicyHolderInfo() == null || yaQuoteInfoVo.getInsuredPersonInfo() == null) {
- throw new SystemException("被保人信息 / 被保人信息 不能为空!");
- }
- if (StringUtils.isEmpty(yaQuoteInfoVo.getCarInfo().getFrameNo())) {
- throw new SystemException("车架号不能为空");
- }
- if (yaQuoteInfoVo.getRiskList() == null || yaQuoteInfoVo.getRiskList().isEmpty()) {
- throw new SystemException("投保信息 不能为空!");
- }
- for (RiskInfoVo riskInfoVo : yaQuoteInfoVo.getRiskList()) {
- if (riskInfoVo.getStartDate() == null || riskInfoVo.getEndDate() == null) {
- throw new SystemException("投保信息 起保日期 或 终保日期 不能为空!");
- }
- }
- }
- // /**
- // * 生成订单信息
- // *
- // * @param record
- // * @param insCompany
- // * @return InsOrder
- // */
- // public InsOrder geneOrder(YaQuoteInfoVo record, String insCompany, String authComCode) {
- // checkEmpty(record);
- //
- // SysUser user = sysUserService.getById(record.getUserId());
- // if (user == null) {
- // throw new SystemException("userId不存在");
- // }
- //
- // InsOrder insOrder = new InsOrder();
- // String orderno = IdGenerate.nextId();
- // insOrder.setOrderno(orderno);
- // insOrder.setQuoteno(String.valueOf(record.getQuoteno()));
- // insOrder.setOrderstatus("0"); // 0 报价 1 待核保 2 已核保待缴费 3 核保退回 4 核保不通过
- // insOrder.setFrameNo(record.getCarInfo().getFrameNo());
- // insOrder.setLicenseNo(record.getCarInfo().getLicenseNo());
- // insOrder.setCarinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getCarInfo())));
- //
- // // 关闭订单 不含当前报价号
- // InsOrder orderObj = insOrderService.queryQuoteno(new Object[]{record.getUserId(), record.getCarInfo().getFrameNo(), record.getQuoteno()});
- // if (orderObj != null) {
- // List<InsOrder> listo = insOrderService.selectList(" where quoteno=?", new Object[]{orderObj.getQuoteno()});
- // String status = "0";
- // for (InsOrder order : listo) {
- // if (!"0".equals(order.getOrderstatus())) {
- // status = order.getOrderstatus();
- // }
- // }
- // //0报价中 1待核保 2已核保 3核保退回 4核保不通过 5已核保待缴费 6已缴费 7已承保 99已关闭
- // if ("0".equals(status)) {//关闭订单
- // insOrderService.closeOrder(orderObj.getOrderno(), "99");
- // } else if (!"99".equals(status)) {
- // throw new SystemException("此车辆已提交核保,重新报价请先关闭订单,任务号:" + orderObj.getQuoteno());
- // }
- // }
- // insOrder.setUserid(user.getId());
- // insOrder.setUsername(user.getName());
- // insOrder.setDeptid(user.getDeptId());
- // SysDept dept = sysDeptService.getById(user.getDeptId());
- //// SysDept dept = sysDeptService.selectByPk(user.getDeptId());
- // insOrder.setDeptname(dept == null ? "" : dept.getName());
- //
- // double retailRate = countRetail(user.getDeptId(), user.getId());
- //
- // insOrder.setOwnerinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getOwnerInfo())));
- // insOrder.setApplyinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getPolicyHolderInfo())));
- // insOrder.setInsureinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getInsuredPersonInfo())));
- //
- // insOrder.setInsuredname(record.getPolicyHolderInfo().getName());
- //
- // List<RiskInfoVo> risks = record.getRiskList();
- // for (RiskInfoVo risk : risks) {
- // if ("0507".equals(risk.getRiskCode())) {//交强
- // insOrder.setJqstartdate(risk.getStartDate());
- // insOrder.setJqenddate(risk.getEndDate());
- // }
- // if ("0510".equals(risk.getRiskCode())) {//商业
- // insOrder.setSystartdate(risk.getStartDate());
- // insOrder.setSyenddate(risk.getEndDate());
- // }
- // }
- //
- // List<KindInfoVo> kinds = record.getKindList();
- // String productId = "";
- // String productname = "";
- //
- // 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() + "%"});
- // if (agreements.size() == 0) {
- // throw new SystemException("不存在有效协议或机构" + user.getDeptId() + "未授权");
- // }
- // String agreeid = agreements.get(0).getId();
- // insOrder.setAgreeid(agreeid);
- // //匹配协议,获取费用
- // StringBuffer whereStr = new StringBuffer();
- // List params = new ArrayList();// where t.agreeid=? and t.productid in ()
- // whereStr.append("where t.agreeid=? ");
- // params.add(agreeid);
- // if (risks.size() == 1 && "0507".equals(risks.get(0).getRiskCode())) {
- // productId = "ZG01001";
- // productname = "单交强";
- // whereStr.append(" and t.productid=?");
- // params.add(productId);
- // } else if (risks.size() == 1 && kinds.size() == 1 && "B".equals(kinds.get(0).getKindCode())) {
- // productId = "ZG01002";
- // productname = "单三者";
- // whereStr.append(" and t.productid=?");
- // params.add(productId);
- // } else if (risks.size() == 1) {
- // productId = "ZG01003";
- // productname = "单商业";
- // whereStr.append(" and t.productid=?");
- // params.add(productId);
- // } else if (risks.size() == 2 && kinds.size() == 1 && "B".equals(kinds.get(0).getKindCode())) {
- // productId = "ZG01004";
- // productname = "交强+三者";
- // whereStr.append(" and t.productid in (?,?)");
- // params.add("ZG01004");
- // params.add("ZG01005");
- // } else {
- // productId = "ZG01006";
- // productname = "交强+商业";
- // whereStr.append(" and t.productid in (?,?)");
- // params.add("ZG01006");
- // params.add("ZG01007");
- // }
- //
- // insOrder.setProductid(productId);
- // insOrder.setProduct(productname);
- // List<EsmAgreementProd> agreementProds = esmAgreementProdService.selectList(whereStr.toString(), params.toArray());
- // for (EsmAgreementProd prod : agreementProds) {
- // if ("ZG01001".equals(prod.getProductid()) || "ZG01004".equals(prod.getProductid()) || "ZG01006".equals(prod.getProductid())) {
- // insOrder.setFeerate(prod.getProductrate());//交强手续费比例
- // insOrder.setJqdiscountrate(prod.getFeerate() - retailRate); //交强优惠比例=业务员绩效-分销费用
- // } else {
- // insOrder.setDisrate(prod.getProductrate()); //商业手续费比例
- // insOrder.setSydiscountrate(prod.getFeerate() - retailRate); //商业优惠比例=业务员绩效-分销费用
- // }
- // insOrder.setProductid(prod.getId());
- // }
- //
- // insOrder.setRiskinfo(JSONObject.parseArray(JSONObject.toJSONString(record.getRiskList())));
- // insOrder.setKindinfo(JSONObject.parseArray(JSONObject.toJSONString(record.getKindList())));
- // SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- //
- // insOrder.setInscompany(insCompany);
- // insOrder.setCreatetime(sdfm.format(new Date()));
- //
- // return insOrder;
- //
- // }
- public InsOrder orderExists(String orderNo) {
- InsOrder insOrder = insOrderService.selectByPk(orderNo);
- if (ObjectUtils.isEmpty(insOrder)) {
- throw new SystemException("订单不存在");
- }
- return insOrder;
- }
- }
|