| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956 |
- package com.ydtech.modules.ins.service.impl;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.ObjectReader;
- import com.ydtech.core.page.HttpResult;
- import com.ydtech.modules.admin.model.SysCbitError;
- import com.ydtech.modules.admin.model.SysCbitLog;
- import com.ydtech.modules.ins.controller.InsCBITController;
- import com.ydtech.modules.ins.model.cbit.*;
- import com.ydtech.modules.ins.service.InsCBITService;
- import com.ydtech.modules.ins.service.SysCbitErrorService;
- import com.ydtech.modules.ins.service.SysCbitLogService;
- import com.ydtech.modules.ins.model.vo.CarModelQryVo;
- import com.ydtech.modules.ins.model.vo.KingInfoVo;
- import com.ydtech.utils.HttpsPostUtil;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.core.env.Environment;
- import org.springframework.stereotype.Service;
- import org.springframework.util.StringUtils;
- import java.io.IOException;
- import java.math.BigDecimal;
- import java.text.SimpleDateFormat;
- import java.util.*;
- /**
- * @author gws
- * @description:TODO
- * @date 2021-11-30 16:33
- */
- @Service
- public class InsCBITServiceImpl implements InsCBITService {
- Logger logger = LoggerFactory.getLogger(InsCBITController.class);
- @Autowired
- Environment environment;
- @Autowired
- SysCbitLogService sysCbitLogService;
- @Autowired
- SysCbitErrorService sysCbitErrorService;
- //接口域名
- @Value("${cbit.url_pre}")
- String url_pre = "";
- //中介机构编码
- @Value("${cbit.franchiserId}")
- String franchiserId = "";
- //ip
- @Value("${cbit.ip}")
- String franchiserIp = "";
- //中介平台-加解密秘钥对 私钥+公钥
- @Value("${cbit.ZJPT_PUBLIC_KEY}")
- private String ZJPT_PUBLIC_KEY = "";
- //合作伙伴-加解密秘钥对 私钥+公钥
- @Value("${cbit.HZHB_PRIVATE_KEY}")
- private String HZHB_PRIVATE_KEY = "";
- /**
- * 3.2初始化参数获取接口
- * insurerId 保险公司id
- * insurerBranchCode 二级机构编码
- * franchiserChannelId 传中介网点代码
- */
- @Override
- public InitResultData initParamAPI(CBITBaseparam req_baseparam) {
- String url = url_pre + environment.getProperty("cbit.api2");
- String req_desc = "3.2初始化参数获取接口";
- InitResultData initResultData = null;
- try {
- checkBaseparam(req_baseparam);
- String reqno = geneReqNo();//请求流水号
- String reqtype = "Z00001";
- logger.info(req_desc + "--请求接口地址-->" + url);
- //1.生成初始化参数
- //CBITBaseparam baseparam=new CBITBaseparam(req_baseparam.getInsurerId(),reqno,"Z00001",req_baseparam.getInsurerBranchCode(),req_baseparam.getFranchiserChannel().getFranchiserChannelId());
- req_baseparam.setRequestNo(reqno);
- req_baseparam.setRequestType(reqtype);
- CBITReqParam reqParam = geneReqParam(req_baseparam);
- //2.调用保信接口
- String req_json = JSON.toJSONString(reqParam);
- logger.info(req_desc + "--请求参数-->" + req_json);
- String resp_json = HttpsPostUtil.sendCBITPost(url, req_json, ZJPT_PUBLIC_KEY, HZHB_PRIVATE_KEY);
- logger.info(req_desc + "--返回结果-->" + resp_json);
- //3.插入调保信接口日志表
- insertCbitLog(url, req_desc, reqno, req_json, resp_json);
- //4.处理保信接口返回数据
- ObjectMapper objectMapper = new ObjectMapper();
- ObjectReader reader = objectMapper.readerFor(CBITResponse.class);
- CBITResponse res;
- try {
- res = reader.readValue(resp_json);
- } catch (IOException e) {
- res = null;
- logger.error("反序列化失败", e);
- }
- if (res == null) {
- throw new Exception("反序列化失败");
- }
- if (!"Z00001".equals(res.getStatus())) {
- throw new Exception("保信接口返回错误:" + res.getMsg());
- } else {//5.接口交互成功,返回数据处理
- initResultData = JSON.parseObject(JSON.toJSONString(res.getData()), InitResultData.class);
- }
- } catch (Exception e) {
- e.printStackTrace();
- HttpResult.error(e.getMessage());
- }
- return initResultData;
- }
- /**
- * 3.3订单号生成接口
- */
- @Override
- public HttpResult geneOrder(CBITBaseparam req_baseparam) {
- String url = url_pre + environment.getProperty("cbit.api3");
- String req_desc = "3.3订单号生成接口";
- String orderNo = "";
- try {
- checkBaseparam(req_baseparam);
- String reqno = geneReqNo();//请求流水号
- String reqtype = "Z00002";
- //1.生成初始化参数
- //CBITBaseparam baseparam=new CBITBaseparam(req_baseparam.getInsurerId(),reqno,reqtype,req_baseparam.getInsurerBranchCode(),req_baseparam.getFranchiserChannel().getFranchiserChannelId());
- req_baseparam.setRequestNo(reqno);
- req_baseparam.setRequestType(reqtype);
- CBITReqParam reqParam = geneReqParam(req_baseparam);
- //2.调用保信接口
- String req_json = JSON.toJSONString(reqParam);
- logger.info(req_desc + "--请求参数-->" + req_json);
- String resp_json = HttpsPostUtil.sendCBITPost(url, req_json, ZJPT_PUBLIC_KEY, HZHB_PRIVATE_KEY);
- logger.info(req_desc + "--返回结果-->" + resp_json);
- //3.插入调保信接口日志表
- insertCbitLog(url, req_desc, reqno, req_json, resp_json);
- //4.处理保信接口返回数据
- ObjectMapper objectMapper = new ObjectMapper();
- ObjectReader reader = objectMapper.readerFor(CBITResponse.class);
- CBITResponse res;
- try {
- res = reader.readValue(resp_json);
- } catch (IOException e) {
- res = null;
- logger.error("反序列化失败", e);
- }
- if (res == null) {
- throw new Exception("反序列化失败");
- }
- if (!"Z00001".equals(res.getStatus())) {
- return HttpResult.error("订单号生成错误,错误信息:" + res.getMsg());
- } else {//5.接口交互成功,返回数据处理
- JSONObject data = res.getData();
- orderNo = data.getString("orderNo");
- }
- } catch (Exception e) {
- e.printStackTrace();
- return HttpResult.error(e.getMessage());
- }
- return HttpResult.ok("订单号生成成功", orderNo);
- }
- /**
- * 3.5车型查询接口
- */
- @Override
- public HttpResult queryModel(CarModelQryVo carModelQryVo) {
- String url = url_pre + environment.getProperty("cbit.api5");
- String req_desc = "3.5车型查询接口";
- CBITModelInfo cbitModelInfo = null;
- try {
- String reqno = geneReqNo();//请求流水号
- CBITBaseparam baseparam = carModelQryVo.getBaseParam();
- String insurerId = baseparam.getInsurerId();//
- String reqtype = "Z00004";
- baseparam.setRequestNo(reqno);
- baseparam.setRequestType(reqtype);
- String insurerBranchCode = baseparam.getInsurerBranchCode();
- String franchiserChannelId = baseparam.getFranchiserChannel().getFranchiserChannelId();
- if (StringUtils.isEmpty(franchiserChannelId)//中介网点代码
- || StringUtils.isEmpty(insurerId)//保险公司
- || StringUtils.isEmpty(insurerBranchCode)//二级机构编码
- ) {
- throw new Exception("insurerId/insurerBranchCode/franchiserChannelId,不能为空!");
- }
- if (StringUtils.isEmpty(baseparam.getOrderNo())
- || StringUtils.isEmpty(carModelQryVo.getModelCName())//车辆型号
- || StringUtils.isEmpty(carModelQryVo.getEngineNo())//发动机号
- || StringUtils.isEmpty(carModelQryVo.getVin())//车架号
- || StringUtils.isEmpty(carModelQryVo.getNewVehicleFlag())//0:非新车,1:新车
- ) {
- throw new Exception("orderNo/modelCName/engineNo/vin/newVehicleFlag,不能为空!");
- }
- //1.生成初始化参数
- CBITReqParam reqParam = geneReqParam(baseparam);
- reqParam.setVehicleBrandModelKey(carModelQryVo.getModelCName());//车辆型号
- reqParam.setEngineNo(carModelQryVo.getEngineNo());//发动机号
- reqParam.setVin(carModelQryVo.getVin());//车架号
- reqParam.setNewVehicleFlag(carModelQryVo.getNewVehicleFlag());//0:非新车,1:新车
- //2.调用保信接口
- String req_json = JSON.toJSONString(reqParam);
- logger.info(req_desc + "--请求参数-->" + req_json);
- String resp_json = HttpsPostUtil.sendCBITPost(url, req_json, ZJPT_PUBLIC_KEY, HZHB_PRIVATE_KEY);
- logger.info(req_desc + "--返回结果-->" + resp_json);
- //3.插入调保信接口日志表
- insertCbitLog(url, req_desc, reqno, req_json, resp_json);
- //4.处理保信接口返回数据
- ObjectMapper objectMapper = new ObjectMapper();
- ObjectReader reader = objectMapper.readerFor(CBITResponse.class);
- CBITResponse res;
- try {
- res = reader.readValue(resp_json);
- } catch (IOException e) {
- res = null;
- logger.error("反序列化失败", e);
- }
- if (res == null) {
- throw new Exception("反序列化失败");
- }
- if (!"Z00001".equals(res.getStatus())) {
- return HttpResult.error(req_desc + "返回错误,错误信息:" + res.getMsg());
- } else {//5.接口交互成功,返回数据处理
- cbitModelInfo = JSON.parseObject(JSON.toJSONString(res.getData()), CBITModelInfo.class);
- }
- } catch (Exception e) {
- e.printStackTrace();
- return HttpResult.error(e.getMessage());
- }
- return HttpResult.ok(cbitModelInfo);
- }
- /**
- * 3.6车辆确认接口
- *
- * @param reqParam_in
- * @return
- */
- @Override
- public HttpResult confirmVehicle(CBITReqParam reqParam_in) {
- String url = url_pre + environment.getProperty("cbit.api6");
- String req_desc = "3.6车辆确认接口";
- ConfirmVehicleResqData confirmVehicleResqData = null;
- try {
- String reqno = geneReqNo();//请求流水号
- CBITBaseparam baseparam = reqParam_in.getBaseParam();
- checkBaseparam(baseparam);
- String reqtype = "Z00005";
- baseparam.setRequestNo(reqno);
- baseparam.setRequestType(reqtype);
- //1.生成初始化参数
- CBITReqParam reqParam = geneReqParam(baseparam);
- reqParam.setCarOwner(reqParam_in.getCarOwner());
- reqParam.setHolder(reqParam_in.getHolder());
- reqParam.setInsureder(reqParam_in.getInsureder());
- reqParam.setVehicle(reqParam_in.getVehicle());
- //2.调用保信接口
- String req_json = JSON.toJSONString(reqParam);
- logger.info(req_desc + "--请求参数-->" + req_json);
- String resp_json = HttpsPostUtil.sendCBITPost(url, req_json, ZJPT_PUBLIC_KEY, HZHB_PRIVATE_KEY);
- logger.info(req_desc + "--返回结果-->" + resp_json);
- //3.插入调保信接口日志表
- insertCbitLog(url, req_desc, reqno, req_json, resp_json);
- //4.处理保信接口返回数据
- ObjectMapper objectMapper = new ObjectMapper();
- ObjectReader reader = objectMapper.readerFor(CBITResponse.class);
- CBITResponse res;
- try {
- res = reader.readValue(resp_json);
- } catch (IOException e) {
- res = null;
- logger.error("反序列化失败", e);
- }
- if (res == null) {
- throw new Exception("反序列化失败");
- }
- if ("Z00002".equals(res.getStatus())) {//二次车型确认
- ConfirmVehicleResqData confirmVehicleResqData2 = JSON.parseObject(JSON.toJSONString(res.getData()), ConfirmVehicleResqData.class);
- String reqno2 = geneReqNo();
- CBITBaseparam baseparam2 = reqParam.getBaseParam();
- baseparam2.setRequestNo(reqno2);
- CBITReqParam reqParam2 = geneReqParam(baseparam2);
- reqParam2.setCarOwner(reqParam.getCarOwner());
- reqParam2.setHolder(reqParam.getHolder());
- reqParam2.setInsureder(reqParam.getInsureder());
- Vehicle vehicle = reqParam.getVehicle();
- vehicle.setPurchasePrice(confirmVehicleResqData2.getVehicleModels().get(0).getPurchasePrice());
- vehicle.setVehicleModelCode(confirmVehicleResqData2.getVehicleModels().get(0).getVehicleModelCode());
- reqParam2.setVehicle(vehicle);
- String req_json2 = JSON.toJSONString(reqParam2);
- logger.info(req_desc + "--二次车型请求参数-->" + req_json2);
- String resp_json2 = HttpsPostUtil.sendCBITPost(url, req_json2, ZJPT_PUBLIC_KEY, HZHB_PRIVATE_KEY);
- logger.info(req_desc + "--二次车型返回结果-->" + resp_json2);
- //3.插入调保信接口日志表
- insertCbitLog(url, req_desc, reqno2, req_json2, resp_json2);
- //4.处理保信接口返回数据
- ObjectMapper objectMapper2 = new ObjectMapper();
- ObjectReader reader2 = objectMapper2.readerFor(CBITResponse.class);
- CBITResponse res2;
- try {
- res2 = reader2.readValue(resp_json2);
- } catch (IOException e) {
- res2 = null;
- logger.error("反序列化失败", e);
- }
- if (res2 == null) {
- throw new Exception("反序列化失败");
- }
- if (!"Z00001".equals(res2.getStatus())) {
- return HttpResult.error(req_desc + "错误,错误信息:" + res2.getMsg());
- } else {//5.接口交互成功,返回数据处理
- confirmVehicleResqData = JSON.parseObject(JSON.toJSONString(res2.getData()), ConfirmVehicleResqData.class);
- }
- } else if (!"Z00001".equals(res.getStatus())) {
- return HttpResult.error(req_desc + "错误,错误信息:" + res.getMsg());
- } else {//5.接口交互成功,返回数据处理
- confirmVehicleResqData = JSON.parseObject(JSON.toJSONString(res.getData()), ConfirmVehicleResqData.class);
- }
- } catch (Exception e) {
- e.printStackTrace();
- return HttpResult.error(e.getMessage());
- }
- return HttpResult.ok(confirmVehicleResqData);
- }
- /**
- * 3.7报价
- *
- * @param quoteInfo
- * @return
- */
- @Override
- public QuoteRespData quote(CBITQuoteInfoVo quoteInfo) throws Exception {
- String url = url_pre + environment.getProperty("cbit.api7");
- String req_desc = "3.7报价";
- QuoteRespData quoteRespData = null;
- try {
- String reqno = geneReqNo();//请求流水号
- String reqtype = "Z00006";
- CBITBaseparam baseparam = quoteInfo.getBaseParam();
- checkBaseparam(baseparam);
- baseparam.setRequestNo(reqno);
- baseparam.setRequestType(reqtype);
- if (StringUtils.isEmpty(baseparam.getOrderNo())//订单号
- ) {
- throw new Exception("orderNo,不能为空!");
- }
- if (quoteInfo.getRiskList() == null || quoteInfo.getRiskList().size() == 0) {
- throw new Exception("riskList,不能为空!");
- }
- //1.生成初始化参数
- CBITReqParam reqParam = geneReqParam(baseparam);
- List<CBITRiskInfoVo> riskList = quoteInfo.getRiskList();
- //交强商业险加工
- TrafficPolicy trafficPolicy = null;
- BusinessPolicy businessPolicy = null;
- List<KingInfoVo> kindList_n = new ArrayList<>();
- Date startdate_sy = new Date();
- SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- for (int i = 0; i < riskList.size(); i++) {
- //商业险
- if (riskList.get(i).getRiskCode().equals("0510")) {
- kindList_n = geneKindInfo(quoteInfo);
- startdate_sy = sdfm.parse(riskList.get(i).getStartDate());
- businessPolicy = new BusinessPolicy(startdate_sy, kindList_n);
- }
- //交强险
- if (riskList.get(i).getRiskCode().equals("0507")) {
- trafficPolicy = new TrafficPolicy(sdfm.parse(riskList.get(i).getStartDate()), "T", "0");
- }
- }
- reqParam.setTrafficPolicy(trafficPolicy);//需修改
- reqParam.setBusinessPolicy(businessPolicy);//需修改
- reqParam.setArgueSolution("1");
- reqParam.setCarVin(quoteInfo.getCarInfo().getVinNo());
- //2.调用保信接口
- String req_json = JSON.toJSONString(reqParam);
- logger.info(req_desc + "--请求参数-->" + req_json);
- String resp_json = HttpsPostUtil.sendCBITPost(url, req_json, ZJPT_PUBLIC_KEY, HZHB_PRIVATE_KEY);
- logger.info(req_desc + "--返回结果-->" + resp_json);
- //3.插入调保信接口日志表
- insertCbitLog(url, req_desc, reqno, req_json, resp_json);
- //4.处理保信接口返回数据
- ObjectMapper objectMapper = new ObjectMapper();
- ObjectReader reader = objectMapper.readerFor(CBITResponse.class);
- CBITResponse res;
- try {
- res = reader.readValue(resp_json);
- } catch (IOException e) {
- res = null;
- logger.error("反序列化失败", e);
- }
- if (res == null) {
- throw new Exception("反序列化失败");
- }
- if (!"Z00001".equals(res.getStatus())) {
- throw new Exception(req_desc + "错误,错误信息:" + res.getMsg());
- } else {//5.接口交互成功,返回数据处理
- quoteRespData = JSON.parseObject(JSON.toJSONString(res.getData()), QuoteRespData.class);
- }
- } catch (Exception e) {
- //e.printStackTrace();
- throw e;
- }
- return quoteRespData;
- }
- private List<KingInfoVo> geneKindInfo(CBITQuoteInfoVo quoteInfo) {
- List<KingInfoVo> kindList = quoteInfo.getKindList();
- List<KingInfoVo> kindList_n = new ArrayList<>();
- for (int j = 0; j < kindList.size(); j++) {
- KingInfoVo kindInfoVo = kindList.get(j);
- String deductibleRate = kindInfoVo.getDeductibleRate();
- BigDecimal setScale = null;
- if (deductibleRate != null) {
- BigDecimal b1 = new BigDecimal(Double.parseDouble(deductibleRate));
- BigDecimal b2 = b1.divide(new BigDecimal(-1d));
- setScale = b2.setScale(4, 4);
- }
- //扩展属性
- //seat: 乘客数(机动车车上人员责任保险-乘客)
- //repairFactorRate: 指定修理厂费率(指定专修厂险,国产车:车损险基准纯风险保费的10%~30%之间,选择国产默认10%;进口车:车损险基准纯风险保费的15%~60%之间,选择进口默认20%。)
- //importFlag:是否国产 0:国产 1:进口';
- //claimLimitPerDay: 每日赔付限额 (修理期间赔付险)
- //maxClaimDays: 最大赔付天数(修理期间赔付险)
- //damageCardeductibles: 绝对免赔额(车辆损失险)
- //damageCarDeductiblesNoClaimRate: 车损险绝对免赔率
- //serviceTimes: 服务次数
- //(道路救援服务特约险\车辆安全检测特约险\代为驾驶服务特约险\代为送检服务特约险需传送)
- //serviceGrade: 服务款别
- //第三者责任险
- if (kindList.get(j).getKindCode().equals("B")) {
- KingInfoVo kindInfo = new KingInfoVo();
- kindInfo.setKindCode("0301600");
- kindInfo.setAmount(kindList.get(j).getAmount());
- kindList_n.add(kindInfo);
- }
- //乘客责任险
- if (kindList.get(j).getKindCode().equals("D4")) {
- KingInfoVo kindInfo = new KingInfoVo();
- kindInfo.setKindCode("0301702");
- kindInfo.setAmount(kindList.get(j).getUnitAmount());
- Map<String, String> extendInfos = new HashMap<String, String>();
- extendInfos.put("seat", String.valueOf(Integer.valueOf(quoteInfo.getVehicleModel_QueRen().getSeatCount()) - 1));
- kindInfo.setExtendInfos(extendInfos);
- kindList_n.add(kindInfo);
- }
- //机动车损失险
- if (kindList.get(j).getKindCode().equals("A")) {
- KingInfoVo kindInfo = new KingInfoVo();
- kindInfo.setKindCode("0301200");
- kindInfo.setAmount(quoteInfo.getVehicleModel_QueRen().getCurrentValue().doubleValue());
- Map<String, String> extendInfos = new HashMap<String, String>();
- extendInfos.put("damageCardeductibles", "0");
- kindInfo.setExtendInfos(extendInfos);
- kindList_n.add(kindInfo);
- }
- //司机责任险
- if (kindList.get(j).getKindCode().equals("D3")) {
- KingInfoVo kindInfo = new KingInfoVo();
- kindInfo.setKindCode("0301701");
- kindInfo.setAmount(kindList.get(j).getAmount());
- /*Map<String, String> extendInfos =new HashMap<String, String>();
- extendInfos.put("damageCardeductibles","0");
- kindInfo.setExtendInfos(extendInfos);*/
- kindList_n.add(kindInfo);
- }
- //附加绝对免赔率特约条款(车损)
- if (kindList.get(j).getKindCode().equals("MJ1")) {
- KingInfoVo kindInfo = new KingInfoVo();
- kindInfo.setKindCode("0301007");
- kindInfo.setAmount(kindList.get(j).getAmount());
- Map<String, String> extendInfos = new HashMap<String, String>();
- extendInfos.put("damageCarDeductiblesNoClaimRate", setScale.toString());
- kindInfo.setExtendInfos(extendInfos);
- kindList_n.add(kindInfo);
- }
- //绝对免赔率特约险(三者)
- if (kindList.get(j).getKindCode().equals("MJ2")) {
- KingInfoVo kindInfo = new KingInfoVo();
- kindInfo.setKindCode("0301008");
- kindInfo.setAmount(kindList.get(j).getAmount());
- Map<String, String> extendInfos = new HashMap<String, String>();
- extendInfos.put("damageCarDeductiblesNoClaimRate", setScale.toString());
- kindInfo.setExtendInfos(extendInfos);
- kindList_n.add(kindInfo);
- }
- //绝对免赔率特约险(司机)
- if (kindList.get(j).getKindCode().equals("MJ3")) {
- KingInfoVo kindInfo = new KingInfoVo();
- kindInfo.setKindCode("0301009");
- kindInfo.setAmount(kindList.get(j).getAmount());
- Map<String, String> extendInfos = new HashMap<String, String>();
- extendInfos.put("damageCarDeductiblesNoClaimRate", setScale.toString());
- kindInfo.setExtendInfos(extendInfos);
- kindList_n.add(kindInfo);
- }
- //绝对免赔率特约险(乘客)
- if (kindList.get(j).getKindCode().equals("MJ4")) {
- KingInfoVo kindInfo = new KingInfoVo();
- kindInfo.setKindCode("0301010");
- kindInfo.setAmount(kindList.get(j).getAmount());
- Map<String, String> extendInfos = new HashMap<String, String>();
- extendInfos.put("damageCarDeductiblesNoClaimRate", setScale.toString());
- kindInfo.setExtendInfos(extendInfos);
- kindList_n.add(kindInfo);
- }
- //车身划痕险
- if (kindList.get(j).getKindCode().equals("L")) {
- KingInfoVo kindInfo = new KingInfoVo();
- kindInfo.setKindCode("0301210");
- kindInfo.setAmount(kindList.get(j).getAmount());
- kindList_n.add(kindInfo);
- }
- //法定节假日限额翻倍险
- if (kindList.get(j).getKindCode().equals("BD")) {
- KingInfoVo kindInfo = new KingInfoVo();
- kindInfo.setKindCode("0301604");
- kindInfo.setAmount(kindList.get(j).getAmount());
- kindList_n.add(kindInfo);
- }
- }
- return kindList_n;
- }
- /**
- * 3.8核保接口
- *
- * @param reqParam_in
- * @return
- */
- @Override
- public HttpResult submitAudit(CBITReqParam reqParam_in, CBITQuoteInfoVo quoteInfo) {
- String url = url_pre + environment.getProperty("cbit.api8");
- String req_desc = "3.8核保接口";
- String reqno = geneReqNo();//请求流水号
- String reqtype = "Z00007";
- AuditRespData auditRespData = null;
- try {
- CBITBaseparam baseparam = reqParam_in.getBaseParam();
- checkBaseparam(baseparam);
- baseparam.setRequestNo(reqno);
- baseparam.setRequestType(reqtype);
- if (StringUtils.isEmpty(baseparam.getOrderNo())//订单号
- ) {
- throw new Exception("orderNo,不能为空!");
- }
- if (quoteInfo.getRiskList() == null || quoteInfo.getRiskList().size() == 0) {
- throw new Exception("riskList,不能为空!");
- }
- //1.生成初始化参数
- CBITReqParam reqParam = geneReqParam(baseparam);
- List<CBITRiskInfoVo> riskList = quoteInfo.getRiskList();
- //交强商业险加工
- TrafficPolicy trafficPolicy = null;
- BusinessPolicy businessPolicy = null;
- List<KingInfoVo> kindList_n = new ArrayList<>();
- Date startdate_sy = new Date();
- SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- for (int i = 0; i < riskList.size(); i++) {
- //商业险
- if (riskList.get(i).getRiskCode().equals("0510")) {
- kindList_n = geneKindInfo(quoteInfo);
- startdate_sy = sdfm.parse(riskList.get(i).getStartDate());
- }
- //交强险
- if (riskList.get(i).getRiskCode().equals("0507")) {
- trafficPolicy = new TrafficPolicy(sdfm.parse(riskList.get(i).getStartDate()), "T", "0");
- }
- }
- businessPolicy = new BusinessPolicy(startdate_sy, kindList_n);
- reqParam.setTrafficPolicy(trafficPolicy);
- reqParam.setBusinessPolicy(businessPolicy);
- //2.调用保信接口
- String req_json = JSON.toJSONString(reqParam);
- logger.info(req_desc + "--请求参数-->" + req_json);
- String resp_json = HttpsPostUtil.sendCBITPost(url, req_json, ZJPT_PUBLIC_KEY, HZHB_PRIVATE_KEY);
- logger.info(req_desc + "--返回结果-->" + resp_json);
- //3.插入调保信接口日志表
- insertCbitLog(url, req_desc, reqno, req_json, resp_json);
- //4.处理保信接口返回数据
- ObjectMapper objectMapper = new ObjectMapper();
- ObjectReader reader = objectMapper.readerFor(CBITResponse.class);
- CBITResponse res;
- try {
- res = reader.readValue(resp_json);
- } catch (IOException e) {
- res = null;
- logger.error("反序列化失败", e);
- }
- if (res == null) {
- throw new Exception("反序列化失败");
- }
- if (!"Z00001".equals(res.getStatus())) {
- return HttpResult.error(req_desc + "错误,错误信息:" + res.getMsg());
- } else {//5.接口交互成功,返回数据处理
- auditRespData = JSON.parseObject(JSON.toJSONString(res.getData()), AuditRespData.class);
- }
- } catch (Exception e) {
- e.printStackTrace();
- return HttpResult.error(e.getMessage());
- }
- return HttpResult.ok(auditRespData);
- }
- /**
- * 3.14电子签名支付接口
- *
- * @return
- */
- @Override
- public HttpResult pay_eleSign(CBITBaseparam req_baseparam) {
- String url = url_pre + environment.getProperty("cbit.api14");
- String req_desc = "3.14电子签名支付接口";
- String reqno = geneReqNo();//请求流水号
- String reqtype = "Z00013";
- SignPayResqData signPayResqData = null;
- try {
- checkBaseparam(req_baseparam);
- if (StringUtils.isEmpty(req_baseparam.getOrderNo())//订单号
- ) {
- throw new Exception("orderNo,不能为空!");
- }
- //1.生成初始化参数
- req_baseparam.setRequestNo(reqno);
- req_baseparam.setRequestType(reqtype);
- CBITReqParam reqParam = geneReqParam(req_baseparam);
- //2.调用保信接口
- String req_json = JSON.toJSONString(reqParam);
- logger.info(req_desc + "--请求参数-->" + req_json);
- String resp_json = HttpsPostUtil.sendCBITPost(url, req_json, ZJPT_PUBLIC_KEY, HZHB_PRIVATE_KEY);
- logger.info(req_desc + "--返回结果-->" + resp_json);
- //3.插入调保信接口日志表
- insertCbitLog(url, req_desc, reqno, req_json, resp_json);
- //4.处理保信接口返回数据
- ObjectMapper objectMapper = new ObjectMapper();
- ObjectReader reader = objectMapper.readerFor(CBITResponse.class);
- CBITResponse res;
- try {
- res = reader.readValue(resp_json);
- } catch (IOException e) {
- res = null;
- logger.error("反序列化失败", e);
- }
- if (res == null) {
- throw new Exception("反序列化失败");
- }
- if (!"Z00001".equals(res.getStatus())) {
- return HttpResult.error(req_desc + "错误,错误信息:" + res.getMsg());
- } else {//5.接口交互成功,返回数据处理
- signPayResqData = JSON.parseObject(JSON.toJSONString(res.getData()), SignPayResqData.class);
- }
- } catch (Exception e) {
- e.printStackTrace();
- return HttpResult.error(e.getMessage());
- }
- return HttpResult.ok(signPayResqData);
- }
- /**
- * 3.17投保单继续支付接口
- *
- * @return
- */
- @Override
- public HttpResult pay_application(CBITBaseparam req_baseparam) {
- String url = url_pre + environment.getProperty("cbit.api17");
- String req_desc = "3.17投保单继续支付接口";
- String reqno = geneReqNo();//请求流水号
- String reqtype = "Z00016";
- String data = "";
- String pay_url = "";
- try {
- checkBaseparam(req_baseparam);
- if (StringUtils.isEmpty(req_baseparam.getOrderNo())//订单号
- ) {
- throw new Exception("orderNo,不能为空!");
- }
- //1.生成初始化参数
- req_baseparam.setRequestNo(reqno);
- req_baseparam.setRequestType(reqtype);
- CBITReqParam reqParam = geneReqParam(req_baseparam);
- //2.调用保信接口
- String req_json = JSON.toJSONString(reqParam);
- logger.info(req_desc + "--请求参数-->" + req_json);
- String resp_json = HttpsPostUtil.sendCBITPost(url, req_json, ZJPT_PUBLIC_KEY, HZHB_PRIVATE_KEY);
- logger.info(req_desc + "--返回结果-->" + resp_json);
- //3.插入调保信接口日志表
- insertCbitLog(url, req_desc, reqno, req_json, resp_json);
- //4.处理保信接口返回数据
- JSONObject resultMap = JSON.parseObject(resp_json.toString());
- String status = resultMap.getString("status");
- if (!"Z00001".equals(status)) {
- return HttpResult.error(req_desc + "错误,错误信息:" + resultMap.getString("msg"));
- } else {//5.接口交互成功,返回数据处理
- data = resultMap.getString("data");
- /*//生成html,并返回前端url
- String filePath = "/usr/local/apache-tomcat-7.0.93/webapps/html/template.html";
- String replaceStr =data;
- String disrPath = "/usr/local/apache-tomcat-7.0.93/webapps/html";
- String fileName = reqno;
- CreateHtmlUtils.MakeHtml(filePath,replaceStr,disrPath,fileName);
- pay_url ="http://10.23.69.89/html/"+reqno+".html";*/
- }
- } catch (Exception e) {
- e.printStackTrace();
- return HttpResult.error(e.getMessage());
- }
- return HttpResult.ok("", data);
- }
- /**
- * 3.11获取短信验证码接口(手机认证)
- *
- * @param req_baseparam
- * @return
- */
- @Override
- public HttpResult pay_duanxin(CBITBaseparam req_baseparam) {
- String url = url_pre + environment.getProperty("cbit.api11");
- String req_desc = "3.11获取短信验证码接口(手机认证)";
- String reqno = geneReqNo();//请求流水号
- String reqtype = "Z00010";
- String data = "";
- String pay_url = "";
- try {
- checkBaseparam(req_baseparam);
- if (StringUtils.isEmpty(req_baseparam.getOrderNo())//订单号
- ) {
- throw new Exception("orderNo,不能为空!");
- }
- //1.生成初始化参数
- req_baseparam.setRequestNo(reqno);
- req_baseparam.setRequestType(reqtype);
- CBITReqParam reqParam = geneReqParam(req_baseparam);
- reqParam.setSmsType("SMDX");
- //2.调用保信接口
- String req_json = JSON.toJSONString(reqParam);
- logger.info(req_desc + "--请求参数-->" + req_json);
- String resp_json = HttpsPostUtil.sendCBITPost(url, req_json, ZJPT_PUBLIC_KEY, HZHB_PRIVATE_KEY);
- logger.info(req_desc + "--返回结果-->" + resp_json);
- //3.插入调保信接口日志表
- insertCbitLog(url, req_desc, reqno, req_json, resp_json);
- //4.处理保信接口返回数据
- JSONObject resultMap = JSON.parseObject(resp_json.toString());
- String status = resultMap.getString("status");
- if (!"Z00001".equals(status)) {
- return HttpResult.error(req_desc + "错误,错误信息:" + resultMap.getString("msg"));
- } else {//5.接口交互成功,返回数据处理
- data = resultMap.getString("data");
- /*//生成html,并返回前端url
- String filePath = "/usr/local/apache-tomcat-7.0.93/webapps/html/template.html";
- String replaceStr =data;
- String disrPath = "/usr/local/apache-tomcat-7.0.93/webapps/html";
- String fileName = reqno;
- CreateHtmlUtils.MakeHtml(filePath,replaceStr,disrPath,fileName);
- pay_url ="http://10.23.69.89/html/"+reqno+".html";*/
- }
- } catch (Exception e) {
- e.printStackTrace();
- return HttpResult.error(e.getMessage());
- }
- return HttpResult.ok("", data);
- }
- /**
- * 3.12回收短信验证码接口(手机认证)
- *
- * @param req_baseparam
- * @return
- */
- @Override
- public HttpResult pay_duanxin_back(CBITBaseparam req_baseparam, String issueCode) {
- String url = url_pre + environment.getProperty("cbit.api12");
- String req_desc = "3.12回收短信验证码接口(手机认证)";
- String reqno = geneReqNo();//请求流水号
- String reqtype = "Z00011";
- String data = "";
- String pay_url = "";
- try {
- checkBaseparam(req_baseparam);
- //1.生成初始化参数
- req_baseparam.setRequestNo(reqno);
- req_baseparam.setRequestType(reqtype);
- CBITReqParam reqParam = geneReqParam(req_baseparam);
- logger.info("验证码issueCode:" + issueCode);
- reqParam.setIssueCode(issueCode);
- //2.调用保信接口
- String req_json = JSON.toJSONString(reqParam);
- logger.info(req_desc + "--请求参数-->" + req_json);
- String resp_json = HttpsPostUtil.sendCBITPost(url, req_json, ZJPT_PUBLIC_KEY, HZHB_PRIVATE_KEY);
- logger.info(req_desc + "--返回结果-->" + resp_json);
- //3.插入调保信接口日志表
- insertCbitLog(url, req_desc, reqno, req_json, resp_json);
- //4.处理保信接口返回数据
- JSONObject resultMap = JSON.parseObject(resp_json.toString());
- String status = resultMap.getString("status");
- if (!"Z00001".equals(status)) {
- return HttpResult.error(req_desc + "错误,错误信息:" + resultMap.getString("msg"));
- } else {//5.接口交互成功,返回数据处理
- data = resultMap.getString("data");
- /*//生成html,并返回前端url
- String filePath = "/usr/local/apache-tomcat-7.0.93/webapps/html/template.html";
- String replaceStr =data;
- String disrPath = "/usr/local/apache-tomcat-7.0.93/webapps/html";
- String fileName = reqno;
- CreateHtmlUtils.MakeHtml(filePath,replaceStr,disrPath,fileName);
- pay_url ="http://10.23.69.89/html/"+reqno+".html";*/
- }
- } catch (Exception e) {
- e.printStackTrace();
- return HttpResult.error(e.getMessage());
- }
- return HttpResult.ok("", data);
- }
- /**
- * 3.9支付申请接口
- *
- * @return
- */
- @Override
- public HttpResult pay_duanxin_pay(CBITBaseparam req_baseparam) {
- String url = url_pre + environment.getProperty("cbit.api9");
- String req_desc = "3.9支付申请接口";
- String reqno = geneReqNo();//请求流水号
- String reqtype = "Z00008";
- String data = "";
- String pay_url = "";
- try {
- checkBaseparam(req_baseparam);
- //1.生成初始化参数
- req_baseparam.setRequestNo(reqno);
- req_baseparam.setRequestType(reqtype);
- CBITReqParam reqParam = geneReqParam(req_baseparam);
- reqParam.setPayWay("Z000005");//太平 "payWayCode": "Z000005"
- //2.调用保信接口
- String req_json = JSON.toJSONString(reqParam);
- logger.info(req_desc + "--请求参数-->" + req_json);
- String resp_json = HttpsPostUtil.sendCBITPost(url, req_json, ZJPT_PUBLIC_KEY, HZHB_PRIVATE_KEY);
- logger.info(req_desc + "--返回结果-->" + resp_json);
- //3.插入调保信接口日志表
- insertCbitLog(url, req_desc, reqno, req_json, resp_json);
- //4.处理保信接口返回数据
- JSONObject resultMap = JSON.parseObject(resp_json.toString());
- String status = resultMap.getString("status");
- if (!"Z00001".equals(status)) {
- return HttpResult.error(req_desc + "错误,错误信息:" + resultMap.getString("msg"));
- } else {//5.接口交互成功,返回数据处理
- data = resultMap.getString("data");
- /*//生成html,并返回前端url
- String filePath = "/usr/local/apache-tomcat-7.0.93/webapps/html/template.html";
- String replaceStr =data;
- String disrPath = "/usr/local/apache-tomcat-7.0.93/webapps/html";
- String fileName = reqno;
- CreateHtmlUtils.MakeHtml(filePath,replaceStr,disrPath,fileName);
- pay_url ="http://10.23.69.89/html/"+reqno+".html";*/
- }
- } catch (Exception e) {
- e.printStackTrace();
- return HttpResult.error(e.getMessage());
- }
- return HttpResult.ok("", data);
- }
- private void insertCbitLog(String url, String req_desc, String reqno, String req_json, String resp_json) {
- SysCbitLog cbitLog = new SysCbitLog();
- cbitLog.setReqNo(reqno);
- cbitLog.setUsercode("");
- // cbitLog.setUsercode(SecurityUtils.getUsername());
- cbitLog.setReqUrl(url);
- cbitLog.setDescription(req_desc);
- cbitLog.setReqParam(req_json);
- cbitLog.setResponse(resp_json);
- cbitLog.setCreatetime(new Date());
- sysCbitLogService.insert(cbitLog);
- }
- private String geneReqNo() {
- //中介机构id+UUID,每次请求需生成一个不重复的流水号,响应时原样返回
- return franchiserId + UUID.randomUUID();
- }
- private CBITReqParam geneReqParam(CBITBaseparam baseparam) throws Exception {
- CBITReqParam CBITReqParam = new CBITReqParam();
- //不能为空校验
- //String insurerId,String reqno,String reqtype,String insurerBranchCode,String franchiserChannelId
- if (StringUtils.isEmpty(baseparam.getInsurerId()) || StringUtils.isEmpty(baseparam.getRequestNo()) || StringUtils.isEmpty(baseparam.getRequestType()) ||
- StringUtils.isEmpty(baseparam.getInsurerBranchCode()) || StringUtils.isEmpty(baseparam.getFranchiserChannel().getFranchiserChannelId())) {
- throw new Exception("insurerId, reqno, reqtype, insurerBranchCode, franchiserChannelId 这些参数不能为空!");
- }
- CBITBaseparam reqParam = new CBITBaseparam();
- reqParam.setFranchiserId(franchiserId);
- reqParam.setInsurerId(baseparam.getInsurerId());
- reqParam.setOrderNo(StringUtils.isEmpty(baseparam.getOrderNo()) ? "" : baseparam.getOrderNo());
- reqParam.setRequestNo(baseparam.getRequestNo());
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
- reqParam.setRequestTime(df.format(new Date()));
- reqParam.setRequestType(baseparam.getRequestType());
- reqParam.setIp(franchiserIp);
- reqParam.setInsurerBranchCode(baseparam.getInsurerBranchCode());
- reqParam.setPjOrderSourceCode(StringUtils.isEmpty(baseparam.getPjOrderSourceCode()) ? "" : baseparam.getPjOrderSourceCode());
- reqParam.setSysProductVersion(StringUtils.isEmpty(baseparam.getSysProductVersion()) ? "" : baseparam.getSysProductVersion());
- reqParam.setSysVersion(StringUtils.isEmpty(baseparam.getSysVersion()) ? "" : baseparam.getSysVersion());
- reqParam.setFranchiserInstitutionCode(StringUtils.isEmpty(baseparam.getFranchiserInstitutionCode()) ? "" : baseparam.getFranchiserInstitutionCode());
- reqParam.setFranchiserChannel(baseparam.getFranchiserChannel());
- CBITReqParam.setBaseParam(reqParam);
- return CBITReqParam;
- }
- private void checkBaseparam(CBITBaseparam baseparam) throws Exception {
- if (baseparam == null
- || StringUtils.isEmpty(baseparam.getFranchiserChannel().getFranchiserChannelId())//中介网点代码
- || StringUtils.isEmpty(baseparam.getInsurerId())//保险公司
- || StringUtils.isEmpty(baseparam.getInsurerBranchCode())//二级机构编码
- ) {
- throw new Exception("insurerId/insurerBranchCode/franchiserChannelId,不能为空!");
- }
- }
- private void insertCbitError(CBITReqParam reqParam_cbit, String api_url, String errorinfo) {
- SysCbitError sysCbitError = new SysCbitError();
- sysCbitError.setReqno(reqParam_cbit.getBaseParam().getRequestNo());
- sysCbitError.setRequrl(api_url);
- sysCbitError.setReqparam(JSON.toJSONString(reqParam_cbit));
- sysCbitError.setErrorinfo(errorinfo);
- sysCbitErrorService.insert(sysCbitError);
- }
- }
|