| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499 |
- package com.ydtech.modules.ins.controller;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.ydtech.core.page.HttpResult;
- import com.ydtech.modules.admin.model.SysDept;
- import com.ydtech.modules.admin.model.SysUser;
- import com.ydtech.modules.admin.service.SysDeptService;
- import com.ydtech.modules.admin.service.SysUserService;
- import com.ydtech.modules.esm.model.EsmAgreement;
- import com.ydtech.modules.esm.model.EsmAgreementProd;
- import com.ydtech.modules.esm.model.EsmRetail;
- import com.ydtech.modules.esm.service.EsmAgreementProdService;
- import com.ydtech.modules.esm.service.EsmAgreementService;
- import com.ydtech.modules.esm.service.EsmRetailService;
- import com.ydtech.modules.ins.model.*;
- import com.ydtech.modules.ins.model.vo.*;
- import com.ydtech.modules.ins.service.InsOrderService;
- import com.ydtech.modules.ins.service.RenbaoService;
- import com.ydtech.utils.idgen.IdGenerate;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.*;
- import java.math.BigDecimal;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- /**
- * @author qinfenglong
- * @version 1.0.0
- * @description InsRenbaoController
- * @since 2021/3/4 16:43
- */
- @RestController
- @RequestMapping("/api/renbao")
- public class InsRenbaoController {
- @Autowired
- RenbaoService renbaoService;
- @Autowired
- InsOrderService insOrderService;
- @Autowired
- SysUserService sysUserService;
- @Autowired
- SysDeptService sysDeptService;
- @Autowired
- EsmAgreementService esmAgreementService;
- @Autowired
- EsmAgreementProdService esmAgreementProdService;
- @Autowired
- EsmRetailService esmRetailService;
- // @GetMapping("/login")
- public void login() {
- renbaoService.login();
- // renbaoService.calActualVal();
- // renbaoService.quote();
- }
- @PostMapping("/actualValue")
- public HttpResult actualValue(@RequestBody RbValueVo rbValueVo) {
- HttpResult httpResult = new HttpResult();
- renbaoService.login(); // 先登录
- //实际价值
- String result = renbaoService.calActualVal(rbValueVo);
- httpResult.setData(result);
- return httpResult;
- }
- @PostMapping("/quote")
- public HttpResult quote(@RequestBody QuoteInfoVo quoteInfo) {
- HttpResult httpResult = new HttpResult();
- RbQuoteInfo rbQuoteInfo = parseOjb(quoteInfo);
- //保存订单信息
- InsOrder insOrder = new InsOrder();
- String orderno = IdGenerate.nextId();
- // String quoteno = String.valueOf(new Date().getTime());
- insOrder.setOrderno(orderno);
- insOrder.setQuoteno(quoteInfo.getQuoteno());
- insOrder.setOrderstatus("0"); //0报价 1待核保 2已核保待缴费 3核保退回 4核保不通过
- insOrder.setFrameNo(quoteInfo.getCarInfo().getFrameNo());
- insOrder.setLicenseNo(quoteInfo.getCarInfo().getLicenseNo());
- insOrder.setCarinfo(JSONObject.parseObject(JSONObject.toJSONString(quoteInfo.getCarInfo())));
- SysUser user = sysUserService.getById(quoteInfo.getUserId());
- if (user == null) {
- httpResult.setMsg("userId不存在");
- return httpResult;
- }
- //
- if (org.springframework.util.StringUtils.isEmpty(quoteInfo.getCarInfo().getFrameNo())) {
- httpResult.setMsg("车架号不能为空");
- return httpResult;
- }
- // 关闭订单 不含当前报价号
- InsOrder orderObj = insOrderService.queryQuoteno(new Object[]{quoteInfo.getUserId(), quoteInfo.getCarInfo().getFrameNo(), quoteInfo.getQuoteno()});
- if (orderObj != null) {
- List<InsOrder> list = insOrderService.selectList(" where quoteno=?", new Object[]{orderObj.getQuoteno()});
- String status = "0";
- for (InsOrder order : list) {
- if (!"0".equals(order.getOrderstatus())) {
- status = order.getOrderstatus();
- }
- }
- //0报价中 1待核保 2已核保 3核保退回 4核保不通过 5已核保待缴费 6已缴费 7已承保 99已关闭
- if ("0".equals(status)) {//关闭订单
- insOrderService.closeOrder(orderObj.getQuoteno(), "99");
- } else if (!"99".equals(status)) {
- httpResult.setMsg("此车辆已提交核保,重新报价请先关闭订单,任务号:" + orderObj.getQuoteno());
- return httpResult;
- }
- }
- insOrder.setUserid(quoteInfo.getUserId());
- insOrder.setUsername(user.getName());
- insOrder.setDeptid(user.getDeptId());
- SysDept dept = sysDeptService.getById(user.getDeptId());
- insOrder.setDeptname(dept == null ? "" : dept.getName());
- double retailRate = countRetail(user.getDeptId(), user.getId());
- // insOrder.setFeerate(0);
- // insOrder.setDisrate(0);
- insOrder.setOwnerinfo(JSONObject.parseObject(JSONObject.toJSONString(quoteInfo.getOwnerInfo())));
- insOrder.setApplyinfo(JSONObject.parseObject(JSONObject.toJSONString(quoteInfo.getPolicyHolderInfo())));
- insOrder.setInsureinfo(JSONObject.parseObject(JSONObject.toJSONString(quoteInfo.getInsuredPersonInfo())));
- insOrder.setInsuredname(quoteInfo.getPolicyHolderInfo().getName());
- List<RiskInfoVo> risks = quoteInfo.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());
- }
- }
- // insOrder.setJqstartdate("");
- // insOrder.setJqenddate("");
- // insOrder.setSystartdate("");
- // insOrder.setSyenddate("");
- // ZG01001 单交强
- // ZG01002 单三者
- // ZG01003 单商业
- // ZG01004 交强+三者 交强+三者 (交强的费用)
- // ZG01005 交强+三者 交强+三者(三者的费用)
- // ZG01006 交强+商业 交强+商业(交强的费用)
- // ZG01007 交强+商业 交强+商业(商业的费用)
- List<KindInfoVo> kinds = quoteInfo.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[]{"000001%", "%" + user.getDeptId() + "%"});
- if (agreements.size() == 0) {
- httpResult.setMsg("不存在有效协议或机构" + user.getDeptId() + "未授权");
- return httpResult;
- }
- 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(quoteInfo.getRiskList())));
- insOrder.setKindinfo(JSONObject.parseArray(JSONObject.toJSONString(quoteInfo.getKindList())));
- // insOrder.setJqpremium(0);
- // insOrder.setSypremium(0);
- // insOrder.setTaxamount(0);
- // insOrder.setSumpremium(0);
- insOrder.setInscompany("人保财险");
- // insOrder.setQuotestatus("0"); //报价状态 0失败 1成功
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- insOrder.setCreatetime(sdf.format(new Date()));
- insOrder.setReqtxt(JSONObject.parseObject(JSONObject.toJSONString(quoteInfo)));
- // insOrder.setReptxt("");
- //报价
- JSONObject result = renbaoService.quote(rbQuoteInfo);
- if (result == null) {
- login(); // 先登录
- result = renbaoService.quote(rbQuoteInfo);
- }
- if (result == null) {
- httpResult.setMsg("报价异常");
- insOrder.setQuotestatus("0"); //报价状态 0失败 1成功
- insOrder.setReptxt(JSONObject.parseObject(JSONObject.toJSONString(httpResult)));
- insOrderService.insert(insOrder);
- return httpResult;
- }
- JSONArray riskArray = result.getJSONArray("itemKindTempList");
- if (riskArray != null && riskArray.size() > 0) {
- QuoteRespVo quoteRespVo = new QuoteRespVo();
- double tax = result.getDouble("thisPayTax");
- double ciPremium = result.getDouble("ciPremium");
- double sumPremium = result.getDouble("sumPremium");
- BigDecimal sumPremium2 = new BigDecimal(sumPremium);
- sumPremium2 = sumPremium2.setScale(2, BigDecimal.ROUND_HALF_UP);
- quoteRespVo.setCiSumPermium(ciPremium + tax); //交强险和车船税合计
- quoteRespVo.setSumPermium(sumPremium2.doubleValue() + tax);
- quoteRespVo.setTotalAdjustRate(1);
- quoteRespVo.setTaxAmount(tax);
- quoteRespVo.setILogPreUdwMess(result.getString("piccScore"));
- List<QuoteRiskRespVo> riskList = new ArrayList<>();
- String startDate = "";
- String startDateCI = "";
- String endDate = "";
- String endDateCI = "";
- for (RiskInfoVo riskInfoVo : quoteInfo.getRiskList()) {
- if ("0507".equals(riskInfoVo.getRiskCode())) {
- startDateCI = riskInfoVo.getStartDate().substring(0, 10);
- endDateCI = riskInfoVo.getEndDate().substring(0, 10);
- } else {
- startDate = riskInfoVo.getStartDate().substring(0, 10);
- endDate = riskInfoVo.getEndDate().substring(0, 10);
- }
- }
- List<QuoteKindRespVo> kindList = new ArrayList<>();
- for (int i = 0; i < riskArray.size(); i++) {
- JSONObject data = riskArray.getJSONObject(i);
- if ("051074".equals(data.getString("kindCode"))) { //交强
- QuoteRiskRespVo risk = new QuoteRiskRespVo();
- risk.setRiskCode("0507");
- risk.setRiskName("机动车交通事故责任强制保险");
- risk.setPremium(data.getDouble("premium"));
- risk.setStartDate(startDateCI + " 00:00");
- risk.setEndDate(endDateCI + " 24:00");
- riskList.add(risk);
- }
- QuoteKindRespVo kind = null;
- if ("051050".equals(data.getString("kindCode"))) {
- kind = new QuoteKindRespVo();
- kind.setKindCode("A");
- kind.setKindName("车辆损失保险");
- kind.setAmount(data.getDouble("amount"));
- kind.setCoveragePremium(data.getDouble("premium"));
- kindList.add(kind);
- }
- if ("051051".equals(data.getString("kindCode"))) {
- kind = new QuoteKindRespVo();
- kind.setKindCode("B");
- kind.setKindName("第三者责任险");
- kind.setAmount(data.getDouble("amount"));
- kind.setCoveragePremium(data.getDouble("premium"));
- kindList.add(kind);
- }
- if ("051052".equals(data.getString("kindCode"))) {
- kind = new QuoteKindRespVo();
- kind.setKindCode("D3");
- kind.setKindName("司机责任险");
- kind.setAmount(data.getDouble("amount"));
- kind.setCoveragePremium(data.getDouble("premium"));
- kind.setUnitAmount(data.getDouble("amount"));
- kindList.add(kind);
- }
- if ("051053".equals(data.getString("kindCode"))) {
- kind = new QuoteKindRespVo();
- kind.setKindCode("D4");
- kind.setKindName("乘客责任险");
- kind.setAmount(data.getDouble("amount"));
- kind.setCoveragePremium(data.getDouble("premium"));
- kind.setUnitAmount(data.getDouble("unitAmount"));
- kindList.add(kind);
- }
- }
- if (kindList.size() > 0) {
- QuoteRiskRespVo risk = new QuoteRiskRespVo();
- risk.setRiskCode("0510");
- risk.setRiskName("机动车商业保险");
- BigDecimal syPremium = new BigDecimal(sumPremium - ciPremium);
- syPremium = syPremium.setScale(2, BigDecimal.ROUND_HALF_UP);
- risk.setPremium(syPremium.doubleValue());
- risk.setStartDate(startDate + " 00:00");
- risk.setEndDate(endDate + " 24:00");
- riskList.add(risk);
- }
- quoteRespVo.setOrderno(orderno); //订单号
- quoteRespVo.setRiskList(riskList);
- quoteRespVo.setKindList(kindList);
- httpResult.setData(quoteRespVo);
- httpResult.setMsg("成功");
- //报价成功更新险种信息
- insOrder.setRiskinfo(JSONObject.parseArray(JSONObject.toJSONString(riskList)));
- insOrder.setKindinfo(JSONObject.parseArray(JSONObject.toJSONString(kindList)));
- BigDecimal jqPremium = new BigDecimal(result.getDouble("ciPremium"));
- jqPremium = jqPremium.setScale(2, BigDecimal.ROUND_HALF_UP);
- insOrder.setJqpremium(jqPremium.doubleValue());
- double syPremium = result.getDouble("sumPremium") - result.getDouble("ciPremium");
- BigDecimal bd = new BigDecimal(syPremium);
- bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
- syPremium = bd.doubleValue();
- insOrder.setSypremium(syPremium);
- insOrder.setTaxamount(result.getDouble("thisPayTax"));
- insOrder.setSumpremium(sumPremium2.doubleValue());
- insOrder.setQuotestatus("1"); //报价状态 0失败 1成功
- } else if (result.getString("errorTitle") != null) {
- httpResult.setCode(201);
- httpResult.setMsg(result.getString("errorTitle") + "&" + result.getString("errorMsg"));
- insOrder.setQuotestatus("0"); //报价状态 0失败 1成功
- } else {
- httpResult.setCode(202);
- httpResult.setMsg("报价异常");
- insOrder.setQuotestatus("0"); //报价状态 0失败 1成功
- }
- insOrder.setReptxt(JSONObject.parseObject(JSONObject.toJSONString(httpResult)));
- insOrderService.insert(insOrder);
- return httpResult;
- }
- /**
- * 分销费用统计
- *
- * @param deptid
- * @param userid
- * @return
- */
- public double countRetail(String deptid, String userid) {
- double retailRate = 0;
- return retailRate;
- // //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.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())) {//一级分销
- // 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++) {
- // 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;
- }
- //请求参数转换
- public RbQuoteInfo parseOjb(QuoteInfoVo quoteInfo) {
- RbQuoteInfo rbQuoteInfo = new RbQuoteInfo();
- rbQuoteInfo.setLicenseNo(quoteInfo.getCarInfo().getLicenseNo());
- rbQuoteInfo.setEngineNo(quoteInfo.getCarInfo().getEngineNo());
- rbQuoteInfo.setVinNo(quoteInfo.getCarInfo().getVinNo());
- rbQuoteInfo.setCarOwner(quoteInfo.getOwnerInfo().getName());
- String idno = quoteInfo.getOwnerInfo().getIdentifyNumber();
- String birthdary = idno.substring(6, 14);
- String sex = idno.substring(16, 17);
- if ("02468".indexOf(sex) > -1) {
- sex = "2";
- } else {
- sex = "1";
- }
- rbQuoteInfo.setSex(sex); //1男 2女 男单女双
- rbQuoteInfo.setBirthday(birthdary.substring(0, 4) + "-" + birthdary.substring(4, 6) + "-" + birthdary.substring(6, 8));
- rbQuoteInfo.setEnrollDate(quoteInfo.getCarInfo().getRegisterDate());
- rbQuoteInfo.setUseYears("1");
- List<RbKind> kindList = new ArrayList<>();
- for (RiskInfoVo riskInfoVo : quoteInfo.getRiskList()) {
- if ("0507".equals(riskInfoVo.getRiskCode())) {
- rbQuoteInfo.setStartDateCI(riskInfoVo.getStartDate().substring(0, 10));
- RbKind kind = new RbKind();
- kind.setKindCode("051074");
- kind.setKindName("交强");
- kind.setAmount(String.valueOf(riskInfoVo.getAmount()));
- kindList.add(kind);
- } else {
- rbQuoteInfo.setStartDate(riskInfoVo.getStartDate().substring(0, 10));
- }
- }
- for (KindInfoVo kindInfoVo : quoteInfo.getKindList()) {
- RbKind rbKind = new RbKind();
- String kindcode = kindInfoVo.getKindCode();
- if ("A".equals(kindcode)) {
- rbKind.setKindCode("051050");
- rbKind.setKindName("机动车损失保险");
- rbKind.setAmount(String.valueOf(kindInfoVo.getAmount()));
- kindList.add(rbKind);
- }
- if ("B".equals(kindcode)) {
- rbKind.setKindCode("051051");
- rbKind.setKindName("第三者责任险");
- int num = (int) kindInfoVo.getAmount() / 10000;
- rbKind.setAmount(String.valueOf(num));
- kindList.add(rbKind);
- }
- if ("D3".equals(kindcode)) {
- rbKind.setKindCode("051052");
- rbKind.setKindName("车上人员责任险(司机)");
- rbKind.setAmount(String.valueOf(kindInfoVo.getAmount()));
- kindList.add(rbKind);
- }
- if ("D4".equals(kindcode)) {
- rbKind.setKindCode("051053");
- rbKind.setKindName("车上人员责任险(乘客)");
- rbKind.setAmount(String.valueOf(kindInfoVo.getAmount()));
- kindList.add(rbKind);
- }
- }
- rbQuoteInfo.setKindList(kindList);
- rbQuoteInfo.setBrandName(quoteInfo.getCarInfo().getBrandName());
- rbQuoteInfo.setVehicleMaker(quoteInfo.getCarInfo().getFactoryid());
- rbQuoteInfo.setModelCode(quoteInfo.getCarInfo().getModelCode());
- rbQuoteInfo.setSeatCount(quoteInfo.getCarInfo().getSeatCount());
- RbValueVo rbValueVo = new RbValueVo();
- rbValueVo.setApprovedPassengersCapacity(quoteInfo.getCarInfo().getSeatCount());
- rbValueVo.setPurchasePrice(quoteInfo.getCarInfo().getPurchasePrice());
- rbValueVo.setRegisterDate(quoteInfo.getCarInfo().getRegisterDate());
- rbValueVo.setValidDate(rbQuoteInfo.getStartDate());
- HttpResult result = actualValue(rbValueVo);
- rbQuoteInfo.setActualValue(String.valueOf(result.getData()));
- rbQuoteInfo.setPurchasePrice(quoteInfo.getCarInfo().getPurchasePrice());
- String enginedesc = quoteInfo.getCarInfo().getEnginedesc().replace("T", "");
- enginedesc = enginedesc.replace("L", "");
- rbQuoteInfo.setExhaustScale(enginedesc);
- rbQuoteInfo.setCompleteKerbMass(quoteInfo.getCarInfo().getCompleteKerbMass());
- return rbQuoteInfo;
- }
- }
|