YongAnServiceImpl.java 81 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420
  1. package com.ydtech.modules.ins.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.fasterxml.jackson.annotation.JsonInclude;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. import com.fasterxml.jackson.dataformat.xml.XmlMapper;
  6. import com.ydtech.components.OrderComponents;
  7. import com.ydtech.constants.enums.InsOrderStatus;
  8. import com.ydtech.core.page.HttpResult;
  9. import com.ydtech.exception.SystemException;
  10. import com.ydtech.modules.admin.model.SysDept;
  11. import com.ydtech.modules.admin.model.SysUser;
  12. import com.ydtech.modules.admin.service.SysDeptService;
  13. import com.ydtech.modules.admin.service.SysUserService;
  14. import com.ydtech.modules.esm.model.EsmAgreement;
  15. import com.ydtech.modules.esm.model.EsmAgreementProd;
  16. import com.ydtech.modules.esm.model.EsmRetail;
  17. import com.ydtech.modules.esm.model.InsTaskImage;
  18. import com.ydtech.modules.esm.service.*;
  19. import com.ydtech.modules.ins.model.InsOrder;
  20. import com.ydtech.modules.ins.model.InsTaskHistory;
  21. import com.ydtech.modules.ins.model.vo.*;
  22. import com.ydtech.modules.ins.model.ya.*;
  23. import com.ydtech.modules.ins.service.*;
  24. import com.ydtech.modules.order.entity.InsAreaCompany;
  25. import com.ydtech.modules.order.service.InsAreaCompanyService;
  26. import com.ydtech.modules.order.service.InsOrdersService;
  27. import com.ydtech.utils.HMAC256Uitil;
  28. import com.ydtech.utils.HttpXmlUtil;
  29. import com.ydtech.utils.idgen.IdGenerate;
  30. import lombok.extern.slf4j.Slf4j;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.beans.factory.annotation.Value;
  33. import org.springframework.stereotype.Service;
  34. import org.springframework.util.StringUtils;
  35. import org.springframework.web.bind.annotation.RequestBody;
  36. import javax.crypto.Mac;
  37. import javax.crypto.spec.SecretKeySpec;
  38. import java.math.BigDecimal;
  39. import java.nio.charset.StandardCharsets;
  40. import java.text.SimpleDateFormat;
  41. import java.util.*;
  42. import java.util.stream.Collectors;
  43. /**
  44. * @author gws
  45. * @description:TODO
  46. * @date 2022-07-13 16:56
  47. */
  48. @Service
  49. @Slf4j
  50. public class YongAnServiceImpl implements YongAnService {
  51. @Value("${ya.url}")
  52. String url = "";
  53. @Value("${ya.url.sign}")
  54. String url_sign = "";
  55. @Value("${ya.consumerID}")
  56. String consumerID = "";
  57. @Value("${ya.consumerAccessKey}")
  58. String consumerAccessKey_init = "";
  59. @Value("${ya.matchCode}")
  60. String matchCode = "";
  61. @Value("${ya.userCode}")
  62. String userCode = "";
  63. @Value("${ya.comCode}")
  64. String comCode = "";
  65. @Autowired
  66. InsOrderService insOrderService;
  67. @Autowired
  68. private InsTaskImageService insTaskImageService;
  69. @Autowired
  70. SysUserService sysUserService;
  71. @Autowired
  72. SysDeptService sysDeptService;
  73. @Autowired
  74. EsmAgreementService esmAgreementService;
  75. @Autowired
  76. EsmAgreementProdService esmAgreementProdService;
  77. @Autowired
  78. EsmRetailService esmRetailService;
  79. @Autowired
  80. EsmUserInternalService esmUserInternalService;
  81. @Autowired
  82. InsOrderTaskService insOrderTaskService;
  83. @Autowired
  84. InsTaskHistoryService insTaskHistoryService;
  85. @Autowired
  86. private InsFileLogService insFileLogService;
  87. @Autowired
  88. InsFeeDetailService insFeeDetailService;
  89. @Autowired
  90. EsmAgreementProdfeeService esmAgreementProdfeeService;
  91. @Autowired
  92. InsDeptFeeService insDeptFeeService;
  93. @Autowired
  94. InsCommissionService insCommissionService;
  95. @Autowired
  96. OrderComponents orderComponents;
  97. /**
  98. * 1 车型查询接口
  99. */
  100. @Override
  101. public HttpResult modelsQuery(CarModel_Req carModelReq) {
  102. // if (StringUtils.isEmpty(carModelReq.getFrameNo()) || StringUtils.isEmpty(carModelReq.getEnrollDate()) || StringUtils.isEmpty(carModelReq.getModelName())) {
  103. // return HttpResult.error("frameNo, enrollDate, modelName 这些参数不能为空!");
  104. // }
  105. ResponseDataC1 responseDataC1 = new ResponseDataC1();
  106. try {
  107. responseDataC1 = getResponseDataC1(carModelReq);
  108. if (!responseDataC1.getResponseHead().getStatus().equals("0")) {
  109. throw new SystemException("查询车型出错:" + responseDataC1.getResponseHead().getAppMessage());
  110. }
  111. } catch (SystemException e) {
  112. return HttpResult.error(e.getMessage());
  113. } catch (Exception e) {
  114. e.printStackTrace();
  115. return HttpResult.error("系统错误,请联系管理员");
  116. }
  117. return HttpResult.ok(responseDataC1.getResponseBody().getCarModel());
  118. }
  119. /**
  120. * 2 报价
  121. */
  122. @Override
  123. public HttpResult quote(YaQuoteInfoVo yaQuoteInfoVo) {
  124. HttpResult httpResult = new HttpResult();
  125. RequestData requestData = new RequestData();
  126. RequestHead requestHead = getRequestHead("C2");
  127. RequestBodyC2 requestBodyC2 = new RequestBodyC2();
  128. ResponseDataC2 responseDataC2 = new ResponseDataC2();
  129. ObjectMapper mapper = new XmlMapper();
  130. mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
  131. try {
  132. //1.1必填校验
  133. checkEmpty(yaQuoteInfoVo);
  134. //1.2 组装订单信息
  135. InsOrder insOrder = gene_order(yaQuoteInfoVo);
  136. // PrivyDTO[] privys =new PrivyDTO[2];
  137. List<PrivyDTO> privys = new ArrayList<>();
  138. //2.1投保人信息
  139. CustomerInfoVo policyHolderInfo = yaQuoteInfoVo.getPolicyHolderInfo();
  140. PrivyDTO privyDTO_tbr = new PrivyDTO("1", policyHolderInfo.getName(), policyHolderInfo.getIdentifyNumber());
  141. privyDTO_tbr.setPhoneNo(policyHolderInfo.getMobile());
  142. privyDTO_tbr.setCresidaddr(policyHolderInfo.getAddr());
  143. //2.2车主
  144. CustomerInfoVo ownerInfo = yaQuoteInfoVo.getOwnerInfo();
  145. PrivyDTO privyDTO_bbr = new PrivyDTO("2", ownerInfo.getName(), ownerInfo.getIdentifyNumber());
  146. privyDTO_bbr.setPhoneNo(ownerInfo.getMobile());
  147. privyDTO_bbr.setCresidaddr(ownerInfo.getAddr());
  148. privys.add(privyDTO_tbr);
  149. privys.add(privyDTO_bbr);
  150. requestBodyC2.setPrivy(privys);
  151. //3 车辆信息
  152. CarInfoVo carInfo = yaQuoteInfoVo.getCarInfo();
  153. CarModel_Req carModelReq = new CarModel_Req(carInfo.getFrameNo(), carInfo.getRegisterDate(), carInfo.getBrandName(), carInfo.getCiModelCode());
  154. carModelReq.setEngineNo(carInfo.getEngineNo());
  155. ResponseDataC1 responseDataC1 = getResponseDataC1(carModelReq);
  156. if (!responseDataC1.getResponseHead().getStatus().equals("0")) {
  157. throw new SystemException("查询车型出错:" + responseDataC1.getResponseHead().getAppMessage());
  158. }
  159. ResponseBodyC1 responseBody = responseDataC1.getResponseBody();
  160. List<CarModelDTO> carModel = responseBody.getCarModel();
  161. if (carModel == null || carModel.size() == 0) {
  162. throw new SystemException("未查询到匹配车型!");
  163. }
  164. // 通过车型校准永安车型
  165. CarModelDTO carModelDTO = null;
  166. List<CarModelDTO> collect = carModel.stream().filter(a -> Objects.equals(a.getModelName(), carInfo.getBrandName())).collect(Collectors.toList());
  167. for (CarModelDTO carModelDTO1 : collect) {
  168. if (carInfo.getCaryear() == null) {
  169. if (carInfo.getPurchasePrice().equals(carModelDTO1.getReplacementValue())) {
  170. carModelDTO = carModelDTO1;
  171. break;
  172. }
  173. } else {
  174. if (carInfo.getCaryear().equals(carModelDTO1.getMarketYear()) && carInfo.getPurchasePrice().equals(carModelDTO1.getReplacementValue())) {
  175. carModelDTO = carModelDTO1;
  176. break;
  177. }
  178. }
  179. }
  180. if (carModelDTO == null) {
  181. carModelDTO = carModel.get(0);
  182. }
  183. CarDTO carDTO = new CarDTO();
  184. carDTO.setQueryModelNo(responseBody.getQueryModelNo());
  185. carDTO.setLicenseNo(carInfo.getLicenseNo());
  186. carDTO.setFrameNo(carInfo.getFrameNo());
  187. carDTO.setEngineNo(carInfo.getEngineNo());
  188. carDTO.setEnrollDate(carInfo.getRegisterDate());
  189. carDTO.setModelCode(carModelDTO.getModelCode());
  190. carDTO.setModelName(carModelDTO.getModelName());
  191. carDTO.setSeatCount(Integer.parseInt(carModelDTO.getRatedPassengerCapacity()));
  192. carDTO.setPurchasePrice(Double.parseDouble(carModelDTO.getReplacementValue()));
  193. // if (!StringUtils.isEmpty(carInfo.getTransferDate()) && carInfo.isTransferFlag()) {
  194. // carDTO.setTransferDate(carInfo.getTransferDate());
  195. // }
  196. if (carInfo.isTransferFlag()) {
  197. carDTO.setTransferDate(carInfo.getIssueDate());
  198. }
  199. requestBodyC2.setCars(carDTO);
  200. //4 交强商业险加工
  201. List<RiskInfoVo> riskList = yaQuoteInfoVo.getRiskList();
  202. KindDTO[] kinds;
  203. boolean jq_falg = false;
  204. for (int i = 0; i < riskList.size(); i++) {
  205. //商业险
  206. if (riskList.get(i).getRiskCode().equals("0510")) {
  207. if (carDTO.getLicenseNo().length() == 8) {//新能源车
  208. requestBodyC2.setSyRiskCode("039011");
  209. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  210. SimpleDateFormat df_req = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  211. df.format(df_req.parse(riskList.get(i).getEndDate()));
  212. requestBodyC2.setSyStartDate(df.format(df_req.parse(riskList.get(i).getStartDate())));
  213. // 交强险即时起保终保日期时分秒与起保日期一致,商业险即时起保终保日期时分秒必须是23:59:59
  214. // 要是不知道怎么传终保日期,可以不传,系统会自动默认,保期一年
  215. // requestBodyC2.setSyEndDate(df.format(df_req.parse(riskList.get(i).getEndDate())));
  216. } else {
  217. requestBodyC2.setSyRiskCode("039002");
  218. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  219. SimpleDateFormat df_req = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  220. df.format(df_req.parse(riskList.get(i).getEndDate()));
  221. requestBodyC2.setSyStartDate(df.format(df_req.parse(riskList.get(i).getStartDate())));
  222. // 交强险即时起保终保日期时分秒与起保日期一致,商业险即时起保终保日期时分秒必须是23:59:59
  223. // 要是不知道怎么传终保日期,可以不传,系统会自动默认,保期一年
  224. // requestBodyC2.setSyEndDate(df.format(df_req.parse(riskList.get(i).getEndDate())));
  225. }
  226. }
  227. //交强险
  228. if (riskList.get(i).getRiskCode().equals("0507")) {
  229. requestBodyC2.setJqRiskCode("039001");
  230. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  231. SimpleDateFormat df_req = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  232. requestBodyC2.setJqStartDate(df.format(df_req.parse(riskList.get(i).getStartDate())));
  233. // requestBodyC2.setJqEndDate(df.format(df_req.parse(riskList.get(i).getEndDate())));
  234. jq_falg = true;
  235. }
  236. }
  237. //4 险别加工
  238. kinds = geneKindInfo(yaQuoteInfoVo, carDTO, jq_falg);
  239. requestBodyC2.setKinds(kinds);
  240. //5 其他加工
  241. RebateRateInfoList[] jqRebateRateInfo = new RebateRateInfoList[0];
  242. RebateRateInfoList[] syRebateRateInfo = new RebateRateInfoList[0];
  243. requestBodyC2.setJqRebateRateInfo(jqRebateRateInfo);
  244. requestBodyC2.setSyRebateRateInfo(syRebateRateInfo);
  245. DeviceItem[] devices = new DeviceItem[0];
  246. ChargingPileDTO[] chargingPiles = new ChargingPileDTO[0];
  247. ExtendInfoDto[] extendInfo = new ExtendInfoDto[1];
  248. extendInfo[0] = new ExtendInfoDto("matchCode", matchCode);
  249. requestBodyC2.setDevices(devices);
  250. requestBodyC2.setChargingPiles(chargingPiles);
  251. requestBodyC2.setExtendInfo(extendInfo);
  252. //6 接口请求
  253. log.info("===永安--报价接口开始请求===");
  254. requestData.setRequestHead(requestHead);
  255. requestData.setRequestBody(requestBodyC2);
  256. String responseString = httpPost(mapper, requestData);
  257. responseDataC2 = mapper.readValue(responseString, ResponseDataC2.class);
  258. System.out.println(responseDataC2);
  259. // 6.1 替换成正确的车型重新
  260. if (responseDataC2.getResponseHead().getAppMessage().contains("录入车型和平台返回车型")) {
  261. // 录入车型和平台返回车型(JLAAQD0032)
  262. String appMessage = responseDataC2.getResponseHead().getAppMessage();
  263. int i = appMessage.indexOf("(");
  264. int i1 = appMessage.indexOf(")");
  265. String substring = appMessage.substring(i + 1, i1);
  266. carModelReq.setModelCode(substring);
  267. responseDataC1 = getResponseDataC1(carModelReq);
  268. responseBody = responseDataC1.getResponseBody();
  269. carModel = responseBody.getCarModel();
  270. CarModelDTO carModelDTO1 = carModel.get(0);
  271. carDTO.setModelCode(carModelDTO1.getModelCode());
  272. carDTO.setModelName(carModelDTO1.getModelName());
  273. carDTO.setSeatCount(Integer.parseInt(carModelDTO1.getRatedPassengerCapacity()));
  274. carDTO.setPurchasePrice(Double.parseDouble(carModelDTO1.getReplacementValue()));
  275. requestBodyC2.setCars(carDTO);
  276. log.info(carModel.toString());
  277. responseString = httpPost(mapper, requestData);
  278. responseDataC2 = mapper.readValue(responseString, ResponseDataC2.class);
  279. }
  280. if (!responseDataC2.getResponseHead().getStatus().equals("0")) {
  281. return HttpResult.error("永安--报价失败:" + responseDataC2.getResponseHead().getAppMessage());
  282. }
  283. //7 生成返回
  284. ResponseBodyC2 responseBodyC2 = responseDataC2.getResponseBody();
  285. if (responseBodyC2.getReinsureFlag().equals("1")) {
  286. if (insOrder.getJqstartdate() != null && insOrder.getSystartdate() != null) {
  287. if (responseBodyC2.getSyStartDate() != null && responseBodyC2.getJqStartDate() == null) {
  288. throw new SystemException("交强重复投保,商业险起始时间" + responseBodyC2.getSyStartDate() + "---" + responseBodyC2.getSyEndDate());
  289. } else if (responseBodyC2.getJqStartDate() != null && responseBodyC2.getSyStartDate() == null) {
  290. throw new SystemException("商业重复投保, 交强险起始时间" + responseBodyC2.getJqStartDate() + "---" + responseBodyC2.getJqEndDate());
  291. }
  292. }
  293. httpResult.setCode(501);
  294. httpResult.setData(responseBodyC2);
  295. httpResult.setMsg("重复投保");
  296. return httpResult;
  297. }
  298. QuoteRespVo quoteRespVo = getQuoteRespVo(insOrder, carDTO, responseBodyC2);
  299. httpResult.setData(quoteRespVo);
  300. httpResult.setMsg("成功");
  301. //8 生成订单
  302. response_order(insOrder, quoteRespVo, requestData, responseDataC2, jq_falg);
  303. } catch (SystemException e) {
  304. return HttpResult.error(e.getMessage());
  305. } catch (Exception e) {
  306. e.printStackTrace();
  307. return HttpResult.error("系统错误,请联系管理员");
  308. }
  309. return httpResult;
  310. }
  311. /**
  312. * 3 核保
  313. */
  314. @Override
  315. public HttpResult audit(String orderno) {
  316. RequestData requestData = new RequestData();
  317. RequestHead requestHead = getRequestHead("C3");
  318. RequestBodyC3 requestBodyC3 = new RequestBodyC3();
  319. ResponseDataC3 responseDataC3 = new ResponseDataC3();
  320. ObjectMapper mapper = new XmlMapper();
  321. mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
  322. try {
  323. InsOrder order = insOrderService.selectByPk(orderno);
  324. if (order == null) {
  325. return HttpResult.error("订单不存在");
  326. }
  327. //1.组装RequestBody
  328. ResponseDataC2 responseDataC2 = JSONObject.parseObject(order.getReptxt().toJSONString(), ResponseDataC2.class);
  329. CustomerInfoVo insureinfo = JSONObject.parseObject(order.getInsureinfo().toJSONString(), CustomerInfoVo.class);
  330. requestBodyC3.setQuotationNoCI(responseDataC2.getResponseBody().getQuotationNoCI());
  331. requestBodyC3.setQuotationNoBI(responseDataC2.getResponseBody().getQuotationNoBI());
  332. DispatchDTO dispatchDTO = new DispatchDTO();
  333. dispatchDTO.setShippingMethod("3");
  334. requestBodyC3.setDispatch(dispatchDTO);
  335. DeviceItem[] devices = new DeviceItem[0];//新增设备信息
  336. PaymentDTO payment = new PaymentDTO();//缴费信息
  337. List<PrivyDTO> privy = new ArrayList<>();//关系人信息
  338. /*<insuredFlag>1000</insuredFlag>投
  339. <insuredFlag>0100</insuredFlag>被
  340. <insuredFlag>0010</insuredFlag>车主*/
  341. PrivyDTO privyDTO = new PrivyDTO("0100", insureinfo.getName(), insureinfo.getIdentifyNumber());
  342. privyDTO.setPhoneNo(insureinfo.getMobile());
  343. privyDTO.setCresidaddr(insureinfo.getAddr());
  344. privy.add(privyDTO);
  345. ExtendInfoDto[] extendInfo = new ExtendInfoDto[1];//扩展信息
  346. ExtendInfoDto extendInfoDto1 = new ExtendInfoDto("imageNumber", "yx" + order.getOrderno());//影像单号传yx+orderno
  347. extendInfo[0] = extendInfoDto1;
  348. requestBodyC3.setDevices(devices);
  349. requestBodyC3.setPayment(payment);
  350. requestBodyC3.setPrivy(privy);
  351. requestBodyC3.setExtendInfo(extendInfo);
  352. //2 接口请求
  353. log.info("===永安--核保接口开始请求===");
  354. requestData.setRequestHead(requestHead);
  355. requestData.getRequestHead().setSeqNo(order.getOrderno());//支付后保单同步接口根据此号进行同步
  356. requestData.setRequestBody(requestBodyC3);
  357. String responseString = httpPost(mapper, requestData);
  358. responseDataC3 = mapper.readValue(responseString, ResponseDataC3.class);
  359. System.out.println(responseDataC3);
  360. if (!responseDataC3.getResponseHead().getStatus().equals("0")) {
  361. return HttpResult.error("永安--提交核保失败:" + responseDataC3.getResponseHead().getAppMessage());
  362. } else {
  363. ResponseBodyC3 responseBody = responseDataC3.getResponseBody();
  364. String jqApplyno = responseBody.getProposalBZNo();
  365. String syApplyno = responseBody.getProposalNo();
  366. ExtendInfoDto[] extendInfo_res = responseBody.getExtendInfo();
  367. String payUrl = "";
  368. for (ExtendInfoDto extendInfoDto : extendInfo_res) {
  369. if (extendInfoDto.getKey().equals("payUrlApp")) {
  370. payUrl = extendInfoDto.getValue();
  371. }
  372. }
  373. UnderwriteDTO[] underwriteInfo = responseBody.getUnderwriteInfo();
  374. String jqunderwriteStatus = "3";
  375. String syunderwriteStatus = "3";
  376. String orderstatus = "4";
  377. if (underwriteInfo != null && underwriteInfo.length > 0) {
  378. for (UnderwriteDTO underwriteDTO : underwriteInfo) {
  379. if ("CI".equals(underwriteDTO.getResultType())) {
  380. //1:下发修改,2:转人工,3:自核通过
  381. jqunderwriteStatus = underwriteDTO.getUnderwriteStatus();
  382. } else if ("BI".equals(underwriteDTO.getResultType())) {
  383. syunderwriteStatus = underwriteDTO.getUnderwriteStatus();
  384. }
  385. }
  386. if (jqunderwriteStatus.equals("3") && syunderwriteStatus.equals("3")) {
  387. orderstatus = "5";
  388. }
  389. } else {
  390. orderstatus = "5";
  391. }
  392. order.setAuditid(order.getUserid());
  393. order.setPaymenttype(payUrl);
  394. order.setOrderstatus(orderstatus);
  395. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  396. order.setSubmittime(sdf.format(new Date()));
  397. order.setJqapplyno(jqApplyno == null ? "" : jqApplyno);
  398. order.setSyapplyno(syApplyno == null ? "" : syApplyno);
  399. order.setJqappoint(""); //交强特别约定
  400. order.setSyappoint(""); //商业特别约定
  401. insOrderService.update(order);
  402. insTaskHistoryService.insertByOrderStatus(order);
  403. //插入轨迹表
  404. if (orderstatus.equals("5")) {
  405. InsTaskHistory history = new InsTaskHistory();
  406. history.setId(String.valueOf(new Date().getTime()));
  407. history.setCompany(order.getInscompany());
  408. history.setTaskid(order.getOrderno());
  409. history.setOperatorid(order.getUserid());
  410. history.setOperator(order.getUsername());
  411. history.setCreatetime(sdf.format(new Date()));
  412. history.setStatus("2");
  413. history.setRemark("已核保");
  414. insTaskHistoryService.insert(history);
  415. history.setId(String.valueOf(new Date().getTime() + 1000));
  416. history.setCompany(order.getInscompany());
  417. history.setTaskid(order.getOrderno());
  418. history.setOperatorid(order.getUserid());
  419. history.setOperator(order.getUsername());
  420. history.setCreatetime(sdf.format(new Date()));
  421. history.setStatus(order.getOrderstatus());
  422. history.setRemark("已核保待缴费");
  423. insTaskHistoryService.insert(history);
  424. } else {
  425. InsTaskHistory history = new InsTaskHistory();
  426. history.setId(String.valueOf(new Date().getTime()));
  427. history.setCompany(order.getInscompany());
  428. history.setTaskid(order.getOrderno());
  429. history.setOperatorid(order.getUserid());
  430. history.setOperator(order.getUsername());
  431. history.setCreatetime(sdf.format(new Date()));
  432. history.setStatus("4");
  433. history.setRemark("核保不通过");
  434. insTaskHistoryService.insert(history);
  435. }
  436. }
  437. log.info("===永安--核保成功===");
  438. log.info("===永安--影像上传成功成功===");
  439. } catch (SystemException e) {
  440. return HttpResult.error(e.getMessage());
  441. } catch (Exception e) {
  442. e.printStackTrace();
  443. log.error("===永安--核保报错:" + e.getMessage());
  444. return HttpResult.error("系统错误,请联系管理员");
  445. }
  446. return HttpResult.ok("提交成功");
  447. }
  448. /**
  449. * 影像上传
  450. *
  451. * @param record
  452. * @return
  453. */
  454. public HttpResult UploadImage(@RequestBody InsTaskImage record) {
  455. try {
  456. if (record.getTaskid() == null || record.getTaskid().equalsIgnoreCase("")) {
  457. return HttpResult.error("任务号taskid不能为空");
  458. }
  459. if (record.getImgtype() == null || record.getImgtype().equalsIgnoreCase("")) {
  460. return HttpResult.error("图片类型imgtype不能为空");
  461. }
  462. if (record.getImgList() == null || record.getImgList().size() == 0) {
  463. return HttpResult.error("图片列表imgList不能为空");
  464. }
  465. insTaskImageService.delete(record.getTaskid(), record.getImgtype());
  466. RequestData requestData = new RequestData();
  467. RequestHead requestHead = getRequestHead("B25");
  468. RequestBodyB25 requestBodyB25 = new RequestBodyB25();
  469. ResponseDataB25 responseDataB25 = new ResponseDataB25();
  470. ObjectMapper mapper = new XmlMapper();
  471. mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
  472. for (int i = 1; i <= record.getImgList().size(); i++) {
  473. String image = record.getImgList().get(i - 1);
  474. record.setId(IdGenerate.nextId());
  475. record.setCreator(getUserName());
  476. record.setCreatetime(new Date());
  477. record.setImage(image);
  478. insTaskImageService.insert(record);
  479. //------------------永安影像上传----------------------
  480. //1.组装RequestBody
  481. requestBodyB25.setBussNo("yx" + record.getTaskid());
  482. requestBodyB25.setUserCode(userCode);
  483. requestBodyB25.setComCode(comCode);
  484. image = image.replace("data:image/jpeg;base64,", "");
  485. requestBodyB25.setFile(image);
  486. String fileName = "";
  487. //C01车辆影像,C02车主身份证,C03投保人身份证,C04被保人身份证,C05验车照
  488. if (record.getImgtype() != null && record.getImgtype().equals("C01")) {
  489. fileName = "车辆影像" + i + ".jpg";
  490. } else if (record.getImgtype() != null && record.getImgtype().equals("C02")) {
  491. fileName = "车主身份证" + i + ".jpg";
  492. } else if (record.getImgtype() != null && record.getImgtype().equals("C03")) {
  493. fileName = "投保人身份证" + i + ".jpg";
  494. } else if (record.getImgtype() != null && record.getImgtype().equals("C04")) {
  495. fileName = "被保人身份证" + i + ".jpg";
  496. } else if (record.getImgtype() != null && record.getImgtype().equals("C05")) {
  497. fileName = "验车照" + i + ".jpg";
  498. }
  499. requestBodyB25.setFileName(fileName);
  500. //2 接口请求
  501. log.info("===永安--上传影像开始请求===");
  502. requestData.setRequestHead(requestHead);
  503. requestData.setRequestBody(requestBodyB25);
  504. String responseString = httpPost(mapper, requestData);
  505. responseDataB25 = mapper.readValue(responseString, ResponseDataB25.class);
  506. if (!responseDataB25.getResponseHead().getStatus().equals("0")) {
  507. return HttpResult.error("永安--上传影像失败:" + responseDataB25.getResponseHead().getAppMessage());
  508. }
  509. }
  510. } catch (Exception e) {
  511. e.printStackTrace();
  512. log.error("===永安--上传影像报错:" + e.getMessage());
  513. return HttpResult.error("系统错误,请联系管理员");
  514. }
  515. return HttpResult.ok();
  516. }
  517. /*public static void main(String[] args) {
  518. String base64str="/9j/4QCCRXhpZgAATU0AKgAAAAgABAEAAAMAAAABAyoAAAEBAAMAAAABBDgAAIdpAAQAAAABAAAAPgESAAMAAAABAAAAAAAAAAAAAZIIAAMAAAABAAAAAAAAAAAAAwEAAAMAAAABAyoAAAEBAAMAAAABBDgAAAESAAMAAAABAAAAAAAAAAD/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAIQAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAUDc8RjwyUEZBRlpVUF94yIJ4bm549a+5kcj////////////////////////////////////////////////////bAEMBVVpaeGl464KC6//////////////////////////////////////////////////////////////////////////AABEIBDgDKgMBIgACEQEDEQH/xAAYAAEBAQEBAAAAAAAAAAAAAAAAAQIDBP/EACwQAQEAAgIC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";
  519. String savepath="D:\\new.jpg";
  520. GenerateImage(base64str,savepath);
  521. }
  522. public static boolean GenerateImage(String base64str,String savepath)
  523. { //对字节数组字符串进行Base64解码并生成图片
  524. if (base64str == null) //图像数据为空
  525. return false;
  526. // System.out.println("开始解码");
  527. BASE64Decoder decoder = new BASE64Decoder();
  528. try
  529. {
  530. //Base64解码
  531. byte[] b = decoder.decodeBuffer(base64str);
  532. System.out.println("解码完成");
  533. for(int i=0;i<b.length;++i)
  534. {
  535. if(b[i]<0)
  536. {//调整异常数据
  537. b[i]+=256;
  538. }
  539. }
  540. System.out.println("开始生成图片");
  541. //生成jpeg图片
  542. OutputStream out = new FileOutputStream(savepath);
  543. out.write(b);
  544. out.flush();
  545. out.close();
  546. return true;
  547. }
  548. catch (Exception e)
  549. {
  550. e.printStackTrace();
  551. return false;
  552. }
  553. }*/
  554. /**
  555. * 4 获取短信验证码
  556. */
  557. @Override
  558. public HttpResult getMessage(String orderno) {
  559. HttpResult httpResult = new HttpResult();
  560. try {
  561. InsOrder order = insOrderService.selectByPk(orderno);
  562. if (order == null) {
  563. return HttpResult.error("订单不存在");
  564. }
  565. RequestData requestData = new RequestData();
  566. RequestHead requestHead = getRequestHead("B7");
  567. RequestBodyB7 requestBodyB7 = new RequestBodyB7();
  568. ResponseDataB7 responseDataB7 = new ResponseDataB7();
  569. ObjectMapper mapper = new XmlMapper();
  570. mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
  571. //1.组装RequestBody
  572. ResponseDataC2 responseDataC2 = JSONObject.parseObject(order.getReptxt().toJSONString(), ResponseDataC2.class);
  573. List<ExtendInfoDto> extendInfoList = responseDataC2.getResponseBody().getExtendInfo();
  574. Map<String, String> maps = extendInfoList.stream().collect(LinkedHashMap::new, (m, v) -> m.put(v.getKey(), v.getValue()), LinkedHashMap::putAll);
  575. // Map<String, String> maps = extendInfoList.stream().collect(Collectors.toMap(ExtendInfoDto::getKey, ExtendInfoDto::getValue, (key1, key2) -> key2));
  576. requestBodyB7.setBzQueryNo(maps.get("querySequenceBZNo"));//交强
  577. requestBodyB7.setQueryNo(maps.get("querySequenceNo"));
  578. DispatchDTO dispatchDTO = new DispatchDTO();
  579. dispatchDTO.setShippingMethod("3");
  580. requestBodyB7.setCityCode("140400");
  581. List<PrivyDTO> privy = new ArrayList<>();//关系人信息
  582. CustomerInfoVo policyHolderInfo = JSONObject.parseObject(order.getApplyinfo().toJSONString(), CustomerInfoVo.class);
  583. PrivyDTO privyDTO = new PrivyDTO("1000", policyHolderInfo.getName(), policyHolderInfo.getIdentifyNumber());
  584. privyDTO.setPhoneNo(policyHolderInfo.getMobile());
  585. CustomerInfoVo insuredPersonInfo = JSONObject.parseObject(order.getInsureinfo().toJSONString(), CustomerInfoVo.class);
  586. PrivyDTO privyDTO2 = new PrivyDTO("0100", insuredPersonInfo.getName(), insuredPersonInfo.getIdentifyNumber());
  587. privyDTO2.setPhoneNo(insuredPersonInfo.getMobile());
  588. privy.add(privyDTO);
  589. privy.add(privyDTO2);
  590. ExtendInfoDto[] extendInfo = new ExtendInfoDto[1];
  591. extendInfo[0] = new ExtendInfoDto("matchCode", matchCode);
  592. requestBodyB7.setExtendInfo(extendInfo);
  593. requestBodyB7.setPrivy(privy);
  594. //2 接口请求
  595. log.info("===永安--获取短信验证码接口开始请求===");
  596. requestData.setRequestHead(requestHead);
  597. requestData.setRequestBody(requestBodyB7);
  598. String responseString = httpPost(mapper, requestData);
  599. responseDataB7 = mapper.readValue(responseString, ResponseDataB7.class);
  600. System.out.println(responseDataB7);
  601. if (!responseDataB7.getResponseHead().getStatus().equals("0")) {
  602. return HttpResult.error("永安--获取短信验证码接口失败:" + responseDataB7.getResponseHead().getAppMessage());
  603. } else {
  604. log.info("短信发送成功!");
  605. httpResult.setMsg("短信发送成功!");
  606. }
  607. } catch (SystemException e) {
  608. return HttpResult.error(e.getMessage());
  609. } catch (Exception e) {
  610. e.printStackTrace();
  611. return HttpResult.error("系统错误,请联系管理员");
  612. }
  613. return httpResult;
  614. }
  615. /**
  616. * 5 获取支付url(提交短信验证码)
  617. */
  618. @Override
  619. public HttpResult getPayUrl(String orderno, String verificationCode) {
  620. HttpResult httpResult = new HttpResult();
  621. try {
  622. InsOrder order = insOrderService.selectByPk(orderno);
  623. if (order == null) {
  624. return HttpResult.error("订单不存在");
  625. }
  626. RequestData requestData = new RequestData();
  627. RequestHead requestHead = getRequestHead("B13");
  628. RequestBodyB13 requestBodyB13 = new RequestBodyB13();
  629. ResponseDataB13 responseDataB13 = new ResponseDataB13();
  630. ObjectMapper mapper = new XmlMapper();
  631. mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
  632. //1.组装RequestBody
  633. requestBodyB13.setProposalNoCI(order.getJqapplyno());
  634. requestBodyB13.setProposalNoBI(order.getSyapplyno());
  635. requestBodyB13.setVerificationCode(verificationCode);
  636. //2 接口请求
  637. log.info("===永安--提交短信验证码接口开始请求===");
  638. requestData.setRequestHead(requestHead);
  639. requestData.setRequestBody(requestBodyB13);
  640. String responseString = httpPost(mapper, requestData);
  641. responseDataB13 = mapper.readValue(responseString, ResponseDataB13.class);
  642. log.info(responseDataB13.toString());
  643. if (!responseDataB13.getResponseHead().getStatus().equals("0")) {
  644. return HttpResult.error("永安--提交短信验证码接口失败:" + responseDataB13.getResponseHead().getAppMessage());
  645. } else {
  646. log.info("短信提交成功!");
  647. }
  648. httpResult.setMsg(order.getPaymenttype());
  649. } catch (SystemException e) {
  650. return HttpResult.error(e.getMessage());
  651. } catch (Exception e) {
  652. e.printStackTrace();
  653. return HttpResult.error("系统错误,请联系管理员");
  654. }
  655. return httpResult;
  656. }
  657. @Autowired
  658. private InsAreaCompanyService insAreaCompanyService;
  659. @Autowired
  660. private InsOrdersService insOrdersService;
  661. /**
  662. * 5 保单信息同步
  663. */
  664. @Override
  665. public String updatePolicy(Map<String, String> paramMap) {
  666. String orderNo = paramMap.get("orderNo");
  667. String payAppNo = paramMap.get("payAppNo");
  668. String payTime = paramMap.get("payTime");
  669. String crstTxt = paramMap.get("crstTxt");
  670. String crstMsg = paramMap.get("crstMsg");
  671. String cplyNoBI = paramMap.get("cplyNoBI");
  672. String cplyNoCI = paramMap.get("cplyNoCI");
  673. if (StringUtils.isEmpty(orderNo) || StringUtils.isEmpty(cplyNoCI)) {
  674. log.error("orderNo/crstTxt 不能为空");
  675. }
  676. if (crstTxt.equals("0")) {//0:生成保单成功; 1:生成保单失败
  677. InsAreaCompany insAreaCompany = insAreaCompanyService.getById(orderNo);
  678. // InsOrder order = insOrderService.selectByPk(orderNo);
  679. if (insAreaCompany == null) {
  680. log.error("订单不存在,orderNo:" + orderNo);
  681. }
  682. if (StringUtils.isEmpty(cplyNoBI) && StringUtils.isEmpty(cplyNoCI)) {
  683. log.error("cplyNoBI/cplyNoCI 交强商业保单号同时为空");
  684. }
  685. insAreaCompany.setJqpolicyno(StringUtils.isEmpty(cplyNoCI) ? "" : cplyNoCI);
  686. insAreaCompany.setSypolicyno(StringUtils.isEmpty(cplyNoBI) ? "" : cplyNoBI);
  687. insAreaCompany.setOrderstatus(InsOrderStatus.S_3.getCode());//已承保
  688. // order.setPaytype(payAppNo);
  689. // order.setPaytime(payTime);
  690. // insOrderService.update(order);
  691. insAreaCompanyService.updateById(insAreaCompany);
  692. insOrdersService.updateByOrderStatus(insAreaCompany.getOrderno(), insAreaCompany.getOrderstatus());
  693. } else {
  694. log.error("生成保单失败:crstTxt--" + crstTxt + "||crstMsg--" + crstMsg);
  695. }
  696. return "0";
  697. }
  698. @Override
  699. public HttpResult getPolicyPrint(String orderno, String policytype, String flag) {
  700. HttpResult httpResult = new HttpResult();
  701. try {
  702. InsOrder order = insOrderService.selectByPk(orderno);
  703. if (order == null) {
  704. return HttpResult.error("订单不存在");
  705. }
  706. RequestData requestData = new RequestData();
  707. RequestHead requestHead = getRequestHead("B21");
  708. RequestBodyB21 requestBodyB21 = new RequestBodyB21();
  709. ResponseDataB21 responseDataB21 = new ResponseDataB21();
  710. ObjectMapper mapper = new XmlMapper();
  711. mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
  712. //1.组装RequestBody
  713. requestBodyB21.setDocumentType(flag);
  714. if ("jq".equals(policytype)) {
  715. requestBodyB21.setBusinessNo(order.getJqpolicyno());
  716. } else if ("sy".equals(policytype)) {
  717. requestBodyB21.setBusinessNo(order.getSypolicyno());
  718. } else {
  719. return HttpResult.error("policytype不能为空");
  720. }
  721. //2 接口请求
  722. log.info("===永安--获取电子保单接口开始请求===");
  723. requestData.setRequestHead(requestHead);
  724. requestData.setRequestBody(requestBodyB21);
  725. String responseString = httpPost(mapper, requestData);
  726. responseDataB21 = mapper.readValue(responseString, ResponseDataB21.class);
  727. System.out.println(responseDataB21);
  728. ResponseBodyB21 responseBody21 = responseDataB21.getResponseBody();
  729. if (!responseDataB21.getResponseHead().getStatus().equals("0")) {
  730. return HttpResult.error("永安--获取电子保单接口失败:" + responseDataB21.getResponseHead().getAppMessage());
  731. } else {
  732. if (!responseBody21.getResultCode().equals("0")) {
  733. return HttpResult.error("永安--获取电子保单接口失败:" + responseBody21.getErrorMessage());
  734. }
  735. }
  736. httpResult.setData(responseBody21.getInsurancePolicy());
  737. } catch (SystemException e) {
  738. return HttpResult.error(e.getMessage());
  739. } catch (Exception e) {
  740. e.printStackTrace();
  741. return HttpResult.error("系统错误,请联系管理员");
  742. }
  743. return httpResult;
  744. }
  745. private QuoteRespVo getQuoteRespVo(InsOrder insOrder, CarDTO carDTO, ResponseBodyC2 responseBodyC2) {
  746. double jqPremium = responseBodyC2.getCiPremium();
  747. double syPremium = responseBodyC2.getBiPremium();
  748. QuoteRespVo quoteRespVo = new QuoteRespVo();
  749. List<QuoteRiskRespVo> riskList1 = new ArrayList<>();
  750. List<QuoteKindRespVo> kindList1 = new ArrayList<>();
  751. if (jqPremium != 0) {
  752. QuoteRiskRespVo risk = new QuoteRiskRespVo();
  753. risk.setRiskCode("0507");
  754. risk.setRiskName("机动车交通事故责任强制保险");
  755. risk.setPremium(jqPremium);
  756. risk.setStartDate(responseBodyC2.getJqStartDate());
  757. risk.setEndDate(responseBodyC2.getJqEndDate());
  758. riskList1.add(risk);
  759. }
  760. if (syPremium != 0) {
  761. QuoteRiskRespVo risk = new QuoteRiskRespVo();
  762. risk = new QuoteRiskRespVo();
  763. risk.setRiskCode("0510");
  764. risk.setRiskName("机动车商业保险");
  765. risk.setPremium(syPremium);
  766. risk.setStartDate(responseBodyC2.getSyStartDate());
  767. risk.setEndDate(responseBodyC2.getSyEndDate());
  768. riskList1.add(risk);
  769. }
  770. List<KindDTO> kinds_res = responseBodyC2.getKinds();
  771. for (int i = 0; i < kinds_res.size(); i++) {
  772. KindDTO kindDTO = kinds_res.get(i);
  773. String kindcode = kindDTO.getKindCode();
  774. double premium = kindDTO.getPremium();
  775. double amount = kindDTO.getAmount();
  776. QuoteKindRespVo kind = null;
  777. if ("030006".equals(kindcode)) {
  778. kind = new QuoteKindRespVo();
  779. kind.setKindCode("A");
  780. kind.setKindName("车辆损失保险");
  781. kind.setAmount(amount);
  782. kind.setCoveragePremium(premium);
  783. kindList1.add(kind);
  784. }
  785. if ("030018".equals(kindcode)) {
  786. kind = new QuoteKindRespVo();
  787. kind.setKindCode("B");
  788. kind.setKindName("第三者责任险");
  789. kind.setAmount(amount);
  790. kind.setCoveragePremium(premium);
  791. kindList1.add(kind);
  792. }
  793. if ("030001".equals(kindcode)) {
  794. kind = new QuoteKindRespVo();
  795. kind.setKindCode("D3");
  796. kind.setKindName("司机责任险");
  797. kind.setAmount(amount);
  798. kind.setCoveragePremium(premium);
  799. kind.setUnitAmount(amount);
  800. kindList1.add(kind);
  801. }
  802. if ("030009".equals(kindcode)) {
  803. int seat = carDTO.getSeatCount() - 1;
  804. kind = new QuoteKindRespVo();
  805. kind.setKindCode("D4");
  806. kind.setKindName("乘客责任险");
  807. kind.setUnitAmount(amount / seat);
  808. kind.setAmount(amount);
  809. kind.setCoveragePremium(premium);
  810. kind.setQuantity(String.valueOf(seat));
  811. // kind.setUnitAmount(obj.getDouble("unitAmount"));
  812. kindList1.add(kind);
  813. }
  814. if ("033601".equals(kindcode)) {
  815. kind = new QuoteKindRespVo();
  816. kind.setKindCode("MJ1");
  817. kind.setKindName("绝对免赔率特约险(车损)");
  818. kind.setAmount(amount);
  819. kind.setCoveragePremium(premium);
  820. kindList1.add(kind);
  821. }
  822. if ("033602".equals(kindcode)) {
  823. kind = new QuoteKindRespVo();
  824. kind.setKindCode("MJ2");
  825. kind.setKindName("绝对免赔率特约险(三者)");
  826. kind.setAmount(amount);
  827. kind.setCoveragePremium(premium);
  828. kindList1.add(kind);
  829. }
  830. if ("033603".equals(kindcode)) {
  831. kind = new QuoteKindRespVo();
  832. kind.setKindCode("MJ3");
  833. kind.setKindName("绝对免赔率特约险(司机)");
  834. kind.setAmount(amount);
  835. kind.setCoveragePremium(premium);
  836. kindList1.add(kind);
  837. }
  838. if ("033604".equals(kindcode)) {
  839. kind = new QuoteKindRespVo();
  840. kind.setKindCode("MJ4");
  841. kind.setKindName("绝对免赔率特约险(乘客)");
  842. kind.setAmount(amount);
  843. kind.setCoveragePremium(premium);
  844. kindList1.add(kind);
  845. }
  846. if ("032601".equals(kindcode)) {
  847. kind = new QuoteKindRespVo();
  848. kind.setKindCode("L");
  849. kind.setKindName("车身划痕损失险");
  850. kind.setAmount(amount);
  851. kind.setCoveragePremium(premium);
  852. kindList1.add(kind);
  853. }
  854. if ("030078".equals(kindcode)) {
  855. kind = new QuoteKindRespVo();
  856. kind.setKindCode("BD");
  857. kind.setKindName("法定节假日限额翻倍险");
  858. kind.setAmount(amount);
  859. kind.setCoveragePremium(premium);
  860. kindList1.add(kind);
  861. }
  862. }
  863. quoteRespVo.setRiskList(riskList1);
  864. quoteRespVo.setKindList(kindList1);
  865. quoteRespVo.setCiSumPermium(jqPremium + responseBodyC2.getSumTax());//交强险和车船税合计
  866. quoteRespVo.setSumPermium(add(responseBodyC2.getSumPremium(), responseBodyC2.getSumTax()));//保费合计
  867. quoteRespVo.setTaxAmount(responseBodyC2.getSumTax());//车船税
  868. quoteRespVo.setTotalAdjustRate(1);
  869. quoteRespVo.setILogPreUdwMess("0");//评分
  870. quoteRespVo.setOrderno(insOrder.getOrderno()); //订单号
  871. List<ExtendInfoDto> extendInfo = responseBodyC2.getExtendInfo();
  872. // Map<String, String> maps = extendInfo.stream().collect(Collectors.toMap(ExtendInfoDto::getKey,ExtendInfoDto::getValue , (key1, key2) -> key2));
  873. Map<String, String> maps = extendInfo.stream().collect(LinkedHashMap::new, (m, v) -> m.put(v.getKey(), v.getValue()), LinkedHashMap::putAll);
  874. String relationType = maps.get("relationType");
  875. quoteRespVo.setIszdj("0");
  876. if ("7".equals(relationType)) {
  877. quoteRespVo.setIszdj("1");
  878. }
  879. return quoteRespVo;
  880. }
  881. protected InsOrder gene_order(YaQuoteInfoVo record) throws Exception {
  882. InsOrder insOrder = new InsOrder();
  883. String orderno = IdGenerate.nextId();
  884. insOrder.setOrderno(orderno);
  885. insOrder.setQuoteno(String.valueOf(record.getQuoteno()));
  886. insOrder.setOrderstatus("0"); //0报价 1待核保 2已核保待缴费 3核保退回 4核保不通过
  887. insOrder.setFrameNo(record.getCarInfo().getFrameNo());
  888. insOrder.setLicenseNo(record.getCarInfo().getLicenseNo());
  889. insOrder.setCarinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getCarInfo())));
  890. SysUser user = sysUserService.getById(record.getUserId());
  891. if (user == null) {
  892. throw new SystemException("userId不存在");
  893. }
  894. if (StringUtils.isEmpty(record.getCarInfo().getFrameNo())) {
  895. throw new SystemException("车架号不能为空");
  896. }
  897. // 关闭订单 不含当前报价号
  898. InsOrder orderObj = insOrderService.queryQuoteno(new Object[]{record.getUserId(), record.getCarInfo().getFrameNo(), record.getQuoteno()});
  899. if (orderObj != null) {
  900. List<InsOrder> listo = insOrderService.selectList(" where quoteno=?", new Object[]{orderObj.getQuoteno()});
  901. String status = "0";
  902. for (InsOrder order : listo) {
  903. if (!"0".equals(order.getOrderstatus())) {
  904. status = order.getOrderstatus();
  905. }
  906. }
  907. //0报价中 1待核保 2已核保 3核保退回 4核保不通过 5已核保待缴费 6已缴费 7已承保 99已关闭
  908. if ("0".equals(status)) {//关闭订单
  909. insOrderService.closeOrder(orderObj.getOrderno(), "99");
  910. } else if (!"99".equals(status)) {
  911. throw new SystemException("此车辆已提交核保,重新报价请先关闭订单,任务号:" + orderObj.getQuoteno());
  912. }
  913. }
  914. insOrder.setUserid(user.getId());
  915. insOrder.setUsername(user.getName());
  916. insOrder.setDeptid(user.getDeptId());
  917. SysDept dept = sysDeptService.getById(user.getDeptId());
  918. insOrder.setDeptname(dept == null ? "" : dept.getName());
  919. double retailRate = countRetail(user.getDeptId(), user.getId());
  920. insOrder.setOwnerinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getOwnerInfo())));
  921. insOrder.setApplyinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getPolicyHolderInfo())));
  922. insOrder.setInsureinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getInsuredPersonInfo())));
  923. insOrder.setInsuredname(record.getPolicyHolderInfo().getName());
  924. List<RiskInfoVo> risks = record.getRiskList();
  925. for (RiskInfoVo risk : risks) {
  926. if ("0507".equals(risk.getRiskCode())) {//交强
  927. insOrder.setJqstartdate(risk.getStartDate());
  928. insOrder.setJqenddate(risk.getEndDate());
  929. }
  930. if ("0510".equals(risk.getRiskCode())) {//商业
  931. insOrder.setSystartdate(risk.getStartDate());
  932. insOrder.setSyenddate(risk.getEndDate());
  933. }
  934. }
  935. List<KindInfoVo> kinds = record.getKindList();
  936. String productId = "";
  937. String productname = "";
  938. 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[]{"000006140400%", "%" + user.getDeptId() + "%"});
  939. if (agreements.size() == 0) {
  940. throw new SystemException("不存在有效协议或机构" + user.getDeptId() + "未授权");
  941. }
  942. String agreeid = agreements.get(0).getId();
  943. insOrder.setAgreeid(agreeid);
  944. //匹配协议,获取费用
  945. StringBuffer whereStr = new StringBuffer();
  946. List params = new ArrayList();// where t.agreeid=? and t.productid in ()
  947. whereStr.append("where t.agreeid=? ");
  948. params.add(agreeid);
  949. if (risks.size() == 1 && "0507".equals(risks.get(0).getRiskCode())) {
  950. productId = "ZG01001";
  951. productname = "单交强";
  952. whereStr.append(" and t.productid=?");
  953. params.add(productId);
  954. } else if (risks.size() == 1 && kinds.size() == 1 && "B".equals(kinds.get(0).getKindCode())) {
  955. productId = "ZG01002";
  956. productname = "单三者";
  957. whereStr.append(" and t.productid=?");
  958. params.add(productId);
  959. } else if (risks.size() == 1) {
  960. productId = "ZG01003";
  961. productname = "单商业";
  962. whereStr.append(" and t.productid=?");
  963. params.add(productId);
  964. } else if (risks.size() == 2 && kinds.size() == 1 && "B".equals(kinds.get(0).getKindCode())) {
  965. productId = "ZG01004";
  966. productname = "交强+三者";
  967. whereStr.append(" and t.productid in (?,?)");
  968. params.add("ZG01004");
  969. params.add("ZG01005");
  970. } else {
  971. productId = "ZG01006";
  972. productname = "交强+商业";
  973. whereStr.append(" and t.productid in (?,?)");
  974. params.add("ZG01006");
  975. params.add("ZG01007");
  976. }
  977. insOrder.setProductid(productId);
  978. insOrder.setProduct(productname);
  979. List<EsmAgreementProd> agreementProds = esmAgreementProdService.selectList(whereStr.toString(), params.toArray());
  980. for (EsmAgreementProd prod : agreementProds) {
  981. if ("ZG01001".equals(prod.getProductid()) || "ZG01004".equals(prod.getProductid()) || "ZG01006".equals(prod.getProductid())) {
  982. insOrder.setFeerate(prod.getProductrate()); //交强手续费比例
  983. insOrder.setJqdiscountrate(prod.getFeerate() - retailRate); //交强优惠比例=业务员绩效-分销费用
  984. } else {
  985. insOrder.setDisrate(prod.getProductrate()); //商业手续费比例
  986. insOrder.setSydiscountrate(prod.getFeerate() - retailRate); //商业优惠比例=业务员绩效-分销费用
  987. }
  988. insOrder.setProductid(prod.getId());
  989. }
  990. insOrder.setRiskinfo(JSONObject.parseArray(JSONObject.toJSONString(record.getRiskList())));
  991. insOrder.setKindinfo(JSONObject.parseArray(JSONObject.toJSONString(record.getKindList())));
  992. SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  993. insOrder.setInscompany("永安财险");
  994. insOrder.setCreatetime(sdfm.format(new Date()));
  995. return insOrder;
  996. }
  997. private HttpResult response_order(InsOrder insOrder, QuoteRespVo quoteRespVo, RequestData requestData, ResponseDataC2 responseDataC2, boolean jq_falg) {
  998. //保存订单信息
  999. if (responseDataC2.getResponseHead().getStatus() != null && responseDataC2.getResponseHead().getStatus().equals("0")) {
  1000. //报价成功更新险种信息
  1001. ResponseBodyC2 responseBody = responseDataC2.getResponseBody();
  1002. System.out.println("JSONObject.toJSONString(responseBody) ---" + JSONObject.toJSONString(responseBody));
  1003. System.out.println("JSONObject.toJSONString(responseBody.getKinds()) ---" + JSONObject.toJSONString(responseBody.getKinds()));
  1004. insOrder.setKindinfo(JSONObject.parseArray(JSONObject.toJSONString(quoteRespVo.getKindList())));
  1005. insOrder.setRiskinfo(JSONObject.parseArray(JSONObject.toJSONString(quoteRespVo.getRiskList())));
  1006. insOrder.setJqpremium(jq_falg ? responseBody.getCiPremium() : 0);
  1007. insOrder.setSypremium(responseBody.getBiPremium());
  1008. insOrder.setTaxamount(jq_falg ? responseBody.getCarTax().getSumPayment() : 0);
  1009. // insOrder.setSumpremium(responseBody.getSumPremium()+insOrder.getTaxamount());
  1010. insOrder.setSumpremium(add(responseBody.getSumPremium(), insOrder.getTaxamount()));
  1011. insOrder.setQuotestatus("1");
  1012. insOrder.setReqtxt(JSONObject.parseObject(JSONObject.toJSONString(requestData)));
  1013. insOrder.setReptxt(JSONObject.parseObject(JSONObject.toJSONString(responseDataC2)));
  1014. insOrder.setPolicytype(quoteRespVo.getIszdj());
  1015. insOrderService.insert(insOrder);
  1016. //插入轨迹表
  1017. InsTaskHistory history = new InsTaskHistory();
  1018. history.setId(String.valueOf(new Date().getTime()));
  1019. history.setCompany(insOrder.getInscompany());
  1020. history.setTaskid(insOrder.getOrderno());
  1021. history.setOperatorid(insOrder.getUserid());
  1022. history.setOperator(insOrder.getUsername());
  1023. SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1024. history.setCreatetime(sdfm.format(new Date()));
  1025. history.setOperator(insOrder.getUsername());
  1026. history.setStatus("0");
  1027. history.setRemark("报价中");
  1028. insTaskHistoryService.insert(history);
  1029. } else {
  1030. return HttpResult.error(responseDataC2.getResponseHead().getAppMessage());
  1031. }
  1032. return HttpResult.ok();
  1033. }
  1034. /**
  1035. * 分销费用统计
  1036. *
  1037. * @param deptid
  1038. * @param userid
  1039. * @return
  1040. */
  1041. public double countRetail(String deptid, String userid) {
  1042. double retailRate = 0;
  1043. //1、根据机构匹配分销规则,获取分销比例
  1044. List<EsmRetail> list = esmRetailService.selectList(" where deptid = ? and status=?", new Object[]{deptid, "1"});
  1045. //2、根据userid查询三级推荐人
  1046. List<SysUser> users = esmUserInternalService.getSuperior(userid);
  1047. if (list != null && list.size() > 0 && users.size() > 0 && !"0".equals(list.get(0).getRetailtype())) {
  1048. EsmRetail retail = list.get(0);
  1049. List<Double> rateList = new ArrayList<>();
  1050. rateList.add(retail.getDisrate1());
  1051. rateList.add(retail.getDisrate2());
  1052. rateList.add(retail.getDisrate3());
  1053. if ("1".equals(retail.getRetailtype())) {//一级分销
  1054. retailRate += rateList.get(0);
  1055. } else if ("2".equals(retail.getRetailtype())) {//二级分销
  1056. int num = Math.min(users.size(), 2);
  1057. for (int i = 0; i < num; i++) {
  1058. retailRate += rateList.get(i);
  1059. }
  1060. } else {//三级分销
  1061. int num = users.size() > 2 ? 3 : users.size();
  1062. for (int i = 0; i < num; i++) {
  1063. retailRate += rateList.get(i);
  1064. }
  1065. }
  1066. }
  1067. return retailRate;
  1068. }
  1069. @Override
  1070. public ResponseDataC1 getResponseDataC1(CarModel_Req carModelReq) throws Exception {
  1071. ResponseDataC1 responseDataC1;
  1072. ObjectMapper mapper = new XmlMapper();
  1073. RequestData requestData = new RequestData();
  1074. RequestHead requestHead = getRequestHead("C1");
  1075. RequestBodyC1 requestBody = new RequestBodyC1();
  1076. requestBody.setCityCode("140400");
  1077. requestBody.setCityName("长治市");
  1078. requestBody.setFrameNo(carModelReq.getFrameNo());
  1079. requestBody.setEnrollDate(carModelReq.getEnrollDate());
  1080. requestBody.setModelName(carModelReq.getModelName());
  1081. requestBody.setEngineNo(carModelReq.getEngineNo());
  1082. requestBody.setLicenseNo(carModelReq.getLicenseNo());
  1083. requestBody.setModelCode(carModelReq.getModelCode());
  1084. ExtendInfoDto[] extendInfo = new ExtendInfoDto[1];
  1085. extendInfo[0] = new ExtendInfoDto("matchCode", matchCode);
  1086. requestBody.setExtendInfo(extendInfo);
  1087. requestData.setRequestHead(requestHead);
  1088. requestData.setRequestBody(requestBody);
  1089. log.info("===永安--车型查询接口开始请求===");
  1090. String responseString = httpPost(mapper, requestData);
  1091. responseDataC1 = mapper.readValue(responseString, ResponseDataC1.class);
  1092. return responseDataC1;
  1093. }
  1094. private String httpPost(ObjectMapper mapper, RequestData requestData) throws Exception {
  1095. //加签
  1096. String xmlString_sign = mapper.writeValueAsString(requestData);
  1097. String consumerAccessKey = getConsumerAccessKey(xmlString_sign);
  1098. //替换签名,请求接口
  1099. requestData.getRequestHead().setConsumerAccessKey(consumerAccessKey);
  1100. String xmlString = mapper.writeValueAsString(requestData);
  1101. return HttpXmlUtil.sendPost(url, xmlString);
  1102. }
  1103. private RequestHead getRequestHead(String type) {
  1104. RequestHead requestHead = new RequestHead();
  1105. requestHead.setSeqNo(geneReqNo());
  1106. requestHead.setConsumerID(consumerID);
  1107. requestHead.setConsumerAccessKey(consumerAccessKey_init);
  1108. requestHead.setTransCode(type);
  1109. requestHead.setRegionCode("D");
  1110. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1111. requestHead.setTransTime(df.format(new Date()));
  1112. return requestHead;
  1113. }
  1114. private void checkEmpty(YaQuoteInfoVo yaQuoteInfoVo) throws Exception {
  1115. if (yaQuoteInfoVo.getCarInfo() == null) {
  1116. throw new SystemException("carInfo不能为空!");
  1117. }
  1118. if (yaQuoteInfoVo.getPolicyHolderInfo() == null || yaQuoteInfoVo.getInsuredPersonInfo() == null) {
  1119. throw new SystemException("policyHolderInfo/insuredPersonInfo 不能为空!");
  1120. }
  1121. if (yaQuoteInfoVo.getRiskList() == null || yaQuoteInfoVo.getRiskList().size() == 0) {
  1122. throw new SystemException("riskList 不能为空!");
  1123. } else {
  1124. for (RiskInfoVo riskInfoVo : yaQuoteInfoVo.getRiskList()) {
  1125. if (riskInfoVo.getStartDate() == null || riskInfoVo.getEndDate() == null) {
  1126. throw new SystemException("riskList.startDate / riskList.endDate不能为空!");
  1127. }
  1128. }
  1129. }
  1130. }
  1131. private KindDTO[] geneKindInfo(YaQuoteInfoVo yaQuoteInfoVo, CarDTO carDTO, boolean jq_falg) {
  1132. List<KindInfoVo> kindList = yaQuoteInfoVo.getKindList();
  1133. KindDTO[] kindList_n;
  1134. if (jq_falg) {
  1135. kindList_n = new KindDTO[kindList.size() + 1];
  1136. } else {
  1137. kindList_n = new KindDTO[kindList.size()];
  1138. }
  1139. //商业险险别
  1140. for (int j = 0; j < kindList.size(); j++) {
  1141. KindInfoVo kindInfoVo = kindList.get(j);
  1142. String deductibleRate = kindInfoVo.getDeductibleRate();
  1143. //第三者责任险
  1144. if (kindList.get(j).getKindCode().equals("B")) {
  1145. KindDTO kindInfo = new KindDTO();
  1146. kindInfo.setKindCode("030018");
  1147. kindInfo.setKindname("机动车第三者责任保险");
  1148. kindInfo.setAmount(kindList.get(j).getAmount());
  1149. kindList_n[j] = kindInfo;
  1150. }
  1151. //乘客责任险
  1152. if (kindList.get(j).getKindCode().equals("D4")) {
  1153. KindDTO kindInfo = new KindDTO();
  1154. kindInfo.setKindCode("030009");
  1155. kindInfo.setKindname("机动车车上人员责任保险(乘客)");
  1156. kindInfo.setQuantity(carDTO.getSeatCount() - 1);
  1157. kindInfo.setAmount(kindList.get(j).getUnitAmount() * (carDTO.getSeatCount() - 1));
  1158. kindInfo.setUnitAmount(kindList.get(j).getUnitAmount());
  1159. kindList_n[j] = kindInfo;
  1160. }
  1161. //机动车损失险
  1162. if (kindList.get(j).getKindCode().equals("A")) {
  1163. KindDTO kindInfo = new KindDTO();
  1164. kindInfo.setKindCode("030006");
  1165. kindInfo.setKindname("机动车损失保险");
  1166. // kindInfo.setAmount(kindList.get(j).getAmount());
  1167. kindList_n[j] = kindInfo;
  1168. }
  1169. //司机责任险
  1170. if (kindList.get(j).getKindCode().equals("D3")) {
  1171. KindDTO kindInfo = new KindDTO();
  1172. kindInfo.setKindCode("030001");
  1173. kindInfo.setKindname("机动车车上人员责任保险(司机)");
  1174. kindInfo.setAmount(kindList.get(j).getAmount());
  1175. kindList_n[j] = kindInfo;
  1176. }
  1177. //附加绝对免赔率特约条款(车损)
  1178. if (kindList.get(j).getKindCode().equals("MJ1")) {
  1179. KindDTO kindInfo = new KindDTO();
  1180. kindInfo.setKindCode("033601");
  1181. kindInfo.setKindname("附加绝对免赔率特约条款(机动车损失保险)");
  1182. kindInfo.setAmount(kindList.get(j).getAmount());
  1183. kindInfo.setDeductibleRatio(deductibleRate);
  1184. kindList_n[j] = kindInfo;
  1185. }
  1186. //绝对免赔率特约险(三者)
  1187. if (kindList.get(j).getKindCode().equals("MJ2")) {
  1188. KindDTO kindInfo = new KindDTO();
  1189. kindInfo.setKindCode("033602");
  1190. kindInfo.setKindname("附加绝对免赔率特约条款(机动车第三者责任保险)");
  1191. kindInfo.setAmount(kindList.get(j).getAmount());
  1192. kindInfo.setDeductibleRatio(deductibleRate);
  1193. kindList_n[j] = kindInfo;
  1194. }
  1195. //绝对免赔率特约险(司机)
  1196. if (kindList.get(j).getKindCode().equals("MJ3")) {
  1197. KindDTO kindInfo = new KindDTO();
  1198. kindInfo.setKindCode("033603");
  1199. kindInfo.setKindname("附加绝对免赔率特约条款(机动车车上人员责任保险(司机))");
  1200. kindInfo.setAmount(kindList.get(j).getAmount());
  1201. kindInfo.setDeductibleRatio(deductibleRate);
  1202. kindList_n[j] = kindInfo;
  1203. }
  1204. //绝对免赔率特约险(乘客)
  1205. if (kindList.get(j).getKindCode().equals("MJ4")) {
  1206. KindDTO kindInfo = new KindDTO();
  1207. kindInfo.setKindCode("033604");
  1208. kindInfo.setKindname("附加绝对免赔率特约条款(机动车车上人员责任保险(乘客))");
  1209. kindInfo.setAmount(kindList.get(j).getAmount());
  1210. kindInfo.setDeductibleRatio(deductibleRate);
  1211. kindList_n[j] = kindInfo;
  1212. }
  1213. //车身划痕险
  1214. if (kindList.get(j).getKindCode().equals("L")) {
  1215. KindDTO kindInfo = new KindDTO();
  1216. kindInfo.setKindCode("032601");
  1217. kindInfo.setKindname("附加车身划痕损失险");
  1218. kindInfo.setAmount(kindList.get(j).getAmount());
  1219. kindList_n[j] = kindInfo;
  1220. }
  1221. //法定节假日限额翻倍险
  1222. if (kindList.get(j).getKindCode().equals("BD")) {
  1223. KindDTO kindInfo = new KindDTO();
  1224. kindInfo.setKindCode("030078");
  1225. kindInfo.setKindname("附加法定节假日限额翻倍险");
  1226. kindInfo.setAmount(kindList.get(j).getAmount());
  1227. kindList_n[j] = kindInfo;
  1228. }
  1229. }
  1230. //交强险险别
  1231. if (jq_falg) {
  1232. KindDTO kindInfo_jq = new KindDTO();
  1233. kindInfo_jq.setKindCode("030000");
  1234. kindInfo_jq.setKindname("机动车交通事故责任强制保险");
  1235. kindList_n[kindList.size()] = kindInfo_jq;
  1236. }
  1237. return kindList_n;
  1238. }
  1239. public String getConsumerAccessKey(String xmlString) throws Exception {
  1240. String consumerAccessKey = "";
  1241. xmlString = xmlString.substring(xmlString.lastIndexOf("<requestBody>") + 13, xmlString.lastIndexOf("</requestBody>"));
  1242. consumerAccessKey = HMAC256Uitil.hmac256(xmlString, consumerAccessKey_init);
  1243. return consumerAccessKey;
  1244. }
  1245. public String getConsumerAccessKey_url(String xmlString) {
  1246. String responseString = HttpXmlUtil.sendPost(url_sign, xmlString);
  1247. String consumerAccessKey = responseString.substring(responseString.lastIndexOf("<consumerAccessKey>") + 19, responseString.lastIndexOf("</consumerAccessKey>"));
  1248. System.out.println("返回参数 consumerAccessKey====" + consumerAccessKey);
  1249. return consumerAccessKey;
  1250. }
  1251. public String HMACSHA256(String data, String key) throws Exception {
  1252. Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
  1253. SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
  1254. sha256_HMAC.init(secret_key);
  1255. byte[] array = sha256_HMAC.doFinal(data.getBytes(StandardCharsets.UTF_8));
  1256. StringBuilder sb = new StringBuilder();
  1257. for (byte item : array) {
  1258. sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
  1259. }
  1260. return sb.toString().toUpperCase();
  1261. }
  1262. private String geneReqNo() {
  1263. //中介机构id+UUID,每次请求需生成一个不重复的流水号,响应时原样返回
  1264. return UUID.randomUUID().toString().substring(0, 25);
  1265. }
  1266. public static double add(double v1, double v2) {
  1267. BigDecimal b1 = new BigDecimal(Double.toString(v1));
  1268. BigDecimal b2 = new BigDecimal(Double.toString(v2));
  1269. return b1.add(b2).doubleValue();
  1270. }
  1271. public static String getUserName() {
  1272. return "";
  1273. // String userName = null;
  1274. // Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
  1275. //
  1276. // if (principal instanceof UserDetails) {
  1277. // userName = ((UserDetails) principal).getUsername();
  1278. // } else {
  1279. // userName = principal.toString();
  1280. // }
  1281. // return userName;
  1282. }
  1283. }