InsYongchengApiServiceImpl.java 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083
  1. package com.ydtech.modules.ins.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.fasterxml.jackson.annotation.JsonInclude;
  5. import com.fasterxml.jackson.core.JsonProcessingException;
  6. import com.fasterxml.jackson.databind.*;
  7. import com.fasterxml.jackson.dataformat.xml.XmlMapper;
  8. import com.ydtech.components.YongchengRequestApiComponents;
  9. import com.ydtech.constants.InsTaskHistoryEnum;
  10. import com.ydtech.constants.enums.InsOrderStatus;
  11. import com.ydtech.constants.enums.InsQuoteFlow;
  12. import com.ydtech.core.page.HttpResult;
  13. import com.ydtech.exception.SystemException;
  14. import com.ydtech.modules.admin.model.SysUser;
  15. import com.ydtech.modules.admin.service.SysDeptService;
  16. import com.ydtech.modules.admin.service.SysUserService;
  17. import com.ydtech.modules.esm.model.EsmRetail;
  18. import com.ydtech.modules.esm.model.InsTaskImage;
  19. import com.ydtech.modules.esm.service.*;
  20. import com.ydtech.modules.ins.dao.InsAlltrustRegionMapper;
  21. import com.ydtech.modules.ins.model.InsApiLog;
  22. import com.ydtech.modules.ins.model.ya.CarModelDTO;
  23. import com.ydtech.modules.ins.model.ya.CarModel_Req;
  24. import com.ydtech.modules.ins.model.ya.YaQuoteInfoVo;
  25. import com.ydtech.modules.ins.model.yc.*;
  26. import com.ydtech.modules.ins.model.yc.audit.Audit;
  27. import com.ydtech.modules.ins.model.yc.audit.response.AuditResponse;
  28. import com.ydtech.modules.ins.model.yc.imageUp.ImageUp;
  29. import com.ydtech.modules.ins.model.yc.imageUp.response.ImageUpResponse;
  30. import com.ydtech.modules.ins.model.yc.modelsQuery.ModelsQueryResponse;
  31. import com.ydtech.modules.ins.model.yc.modelsQuery.ModelsQueryXml;
  32. import com.ydtech.modules.ins.model.yc.order.CallbackAnOrder;
  33. import com.ydtech.modules.ins.model.yc.order.response.CallbackAnOrderResponse;
  34. import com.ydtech.modules.ins.model.yc.pay.Accident;
  35. import com.ydtech.modules.ins.model.yc.pay.Pay;
  36. import com.ydtech.modules.ins.model.yc.pay.response.AccidentResponse;
  37. import com.ydtech.modules.ins.model.yc.pay.response.PayResponse;
  38. import com.ydtech.modules.ins.model.yc.policy.Policy;
  39. import com.ydtech.modules.ins.model.yc.policy.response.PolicyResponse;
  40. import com.ydtech.modules.ins.model.yc.ruote.Agent;
  41. import com.ydtech.modules.ins.model.yc.ruote.Applicant;
  42. import com.ydtech.modules.ins.model.yc.ruote.Insured;
  43. import com.ydtech.modules.ins.model.yc.ruote.Ruote;
  44. import com.ydtech.modules.ins.model.yc.ruote.response.RuoteResponse;
  45. import com.ydtech.modules.ins.service.*;
  46. import com.ydtech.modules.ins.vo.*;
  47. import com.ydtech.modules.order.entity.InsAreaCompany;
  48. import com.ydtech.modules.order.entity.InsOrders;
  49. import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
  50. import com.ydtech.modules.order.service.InsAreaCompanyService;
  51. import com.ydtech.modules.order.service.InsOrdersService;
  52. import com.ydtech.utils.HttpXmlUtil;
  53. import com.ydtech.utils.IDCardUtils;
  54. import com.ydtech.utils.StringUtils;
  55. import lombok.extern.slf4j.Slf4j;
  56. import org.slf4j.Logger;
  57. import org.slf4j.LoggerFactory;
  58. import org.springframework.beans.BeanUtils;
  59. import org.springframework.beans.factory.annotation.Autowired;
  60. import org.springframework.security.core.context.SecurityContextHolder;
  61. import org.springframework.security.core.userdetails.UserDetails;
  62. import org.springframework.stereotype.Service;
  63. import org.springframework.transaction.annotation.Transactional;
  64. import java.io.IOException;
  65. import java.math.BigDecimal;
  66. import java.text.SimpleDateFormat;
  67. import java.time.LocalDateTime;
  68. import java.util.*;
  69. @Service
  70. public class InsYongchengApiServiceImpl implements InsYongchengApiService {
  71. private static final Logger log = LoggerFactory.getLogger("yongcheng");
  72. @Autowired
  73. private YongchengRequestApiComponents apiComponents;
  74. @Autowired
  75. private InsAlltrustRegionMapper insAlltrustRegionMapper;
  76. private AuthorityDataXml authorityDataXml = null;
  77. private ObjectMapper xmlMapper = null;
  78. @Autowired
  79. private YcBuildData ycBuildData;
  80. @Autowired
  81. private SysUserService sysUserService;
  82. @Autowired
  83. private SysDeptService sysDeptService;
  84. @Autowired
  85. private EsmRetailService esmRetailService;
  86. @Autowired
  87. private EsmAgreementService esmAgreementService;
  88. @Autowired
  89. private EsmAgreementProdService esmAgreementProdService;
  90. @Autowired
  91. private EsmUserInternalService esmUserInternalService;
  92. @Autowired
  93. private InsTaskHistoryService insTaskHistoryService;
  94. @Autowired
  95. private InsAreaCompanyService insAreaCompanyService;
  96. @Autowired
  97. private InsOrdersService insOrdersService;
  98. @Autowired
  99. InsApiLogService insApiLogService;
  100. /**
  101. * @description: 获取验证数据
  102. * @author: lig
  103. * @date: 2023年02月07日 0007
  104. */
  105. private AuthorityDataXml gainAuthorityDataXml() {
  106. if (null == authorityDataXml) {
  107. authorityDataXml = new AuthorityDataXml();
  108. authorityDataXml.setUserName(apiComponents.getUserName());
  109. authorityDataXml.setPassword(apiComponents.getPassword());
  110. }
  111. return authorityDataXml;
  112. }
  113. /**
  114. * 获取渠道
  115. */
  116. public Agent gainAgent() {
  117. return apiComponents.gainAgent();
  118. // if (null == agent) {
  119. // agent = new Agent();
  120. // agent.setAgentCode(agentCode);
  121. // agent.setConferCode(agentType);
  122. // agent.setAgentType(agentType);
  123. // agent.setAgentNme(agentNme);
  124. // agent.setQlftNo(qlftNo);
  125. // agent.setCustNature(custNature);
  126. // agent.setAgentProfId(agentCode);
  127. // agent.setSubCoNo(agentType);
  128. // }
  129. // return agent;
  130. }
  131. private ObjectMapper gainXmlMapper() {
  132. if (null == xmlMapper) {
  133. xmlMapper = new XmlMapper();
  134. xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  135. xmlMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
  136. xmlMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
  137. xmlMapper.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE);
  138. xmlMapper.enable(MapperFeature.USE_STD_BEAN_NAMING);
  139. }
  140. return xmlMapper;
  141. }
  142. // private final YongchengRequestComponents yongchengRequestComponents;
  143. //
  144. // private final OrderComponents orderComponents;
  145. //
  146. // private final StringRedisTemplate redisTemplate;
  147. //
  148. // private final InsOrderService insOrderService;
  149. //
  150. // private final InsTaskHistoryComponents insTaskHistoryComponents;
  151. //
  152. // private final InsTaskImageService insTaskImageService;
  153. // public InsYongchengApiServiceImpl(YongchengRequestComponents yongchengRequestComponents, OrderComponents orderComponents, StringRedisTemplate redisTemplate, InsOrderService insOrderService, InsTaskHistoryComponents insTaskHistoryComponents, InsTaskImageService insTaskImageService) {
  154. // this.yongchengRequestComponents = yongchengRequestComponents;
  155. // this.orderComponents = orderComponents;
  156. // this.redisTemplate = redisTemplate;
  157. // this.insOrderService = insOrderService;
  158. // this.insTaskHistoryComponents = insTaskHistoryComponents;
  159. // this.insTaskImageService = insTaskImageService;
  160. // }
  161. // public double parseDouble(String s) {
  162. // if (StringUtils.isNullOrEmpty(s)) {
  163. // return 0;
  164. // }
  165. // return Double.parseDouble(s);
  166. // }
  167. //
  168. //==============================API 方式
  169. //
  170. /**
  171. * 1 车型查询接口
  172. */
  173. @Override
  174. public HttpResult modelsQueryApi(CarModel_Req carModelReq) {
  175. if (org.springframework.util.StringUtils.isEmpty(carModelReq.getFrameNo()) || org.springframework.util.StringUtils.isEmpty(carModelReq.getEnrollDate()) || org.springframework.util.StringUtils.isEmpty(carModelReq.getModelName())) {
  176. return HttpResult.error("frameNo, enrollDate, modelName 这些参数不能为空!");
  177. }
  178. ModelsQueryXml m = buildModelsQueryParam(carModelReq);
  179. ObjectMapper xmlMapper = this.gainXmlMapper();
  180. log.info("===永诚--车型查询接口请求开始===");
  181. InsApiLog apiLog = httpPost(xmlMapper, m, YcBuildData.API_MODEL);
  182. String responseData = apiLog.getResponseData();
  183. log.info("===永诚--车型查询接口请求结束===");
  184. try {
  185. String cleanStr = YcBuildData.cleanResponseStr(responseData);
  186. ModelsQueryResponse rd = xmlMapper.readValue(cleanStr, ModelsQueryResponse.class);
  187. return HttpResult.ok(buildCarModel(rd));
  188. } catch (IOException e) {
  189. throw new RuntimeException(e);
  190. }
  191. }
  192. /**
  193. * 2 报价
  194. */
  195. @Override
  196. public HttpResult quoteApi(BaseQuoteInfoVo yaQuoteInfoVo) {
  197. HttpResult httpResult = new HttpResult();
  198. ObjectMapper xmlMapper = this.gainXmlMapper();
  199. InsAreaCompany iac = null;
  200. InsOrders order = insOrdersService.getById(yaQuoteInfoVo.getOrderNo());
  201. //1.1必填校验
  202. checkEmpty(yaQuoteInfoVo);
  203. //组装参数
  204. Ruote m = Ruote.buildQuoteParam(yaQuoteInfoVo, gainAuthorityDataXml(), apiComponents.gainAgent());
  205. //构造地区
  206. buildRegion(m);
  207. //6 接口请求
  208. log.debug("=========永诚API方式 - xml请求 - 报价开始======");
  209. InsApiLog apiLog = httpPost(xmlMapper, m, YcBuildData.API_QUOTE);
  210. log.debug("=========永诚API方式 - xml请求 - 报价结束!======");
  211. verifyRequest(apiLog, iac, InsQuoteFlow.Q_S_0);
  212. String responseData = apiLog.getResponseData();
  213. try {
  214. String cleanStr = YcBuildData.cleanResponseStr(responseData);
  215. RuoteResponse rd = xmlMapper.readValue(cleanStr, RuoteResponse.class);
  216. if (!rd.getHead().getErrorCode().equals("000000")) {
  217. throw new SystemException(rd.getHead().getErrorMessage());
  218. }
  219. QuoteRespVo quoteRespVo = YcBuildData.buildQuoteRespVo(order, rd, yaQuoteInfoVo);
  220. //8 生成订单
  221. iac = response_order(order, quoteRespVo, m, rd);
  222. // updateApiLog(apiLog, iac);
  223. quoteRespVo.setCompanyId(iac.getId());
  224. httpResult.setData(quoteRespVo);
  225. httpResult.setMsg("成功");
  226. } catch (IOException e) {
  227. throw new RuntimeException(e);
  228. }
  229. return httpResult;
  230. }
  231. /**
  232. * 3 核保
  233. *
  234. * @param quoteOrderNo
  235. */
  236. @Override
  237. @Transactional
  238. public HttpResult auditApi(String quoteOrderNo) {
  239. ObjectMapper xmlMapper = this.gainXmlMapper();
  240. String msg = "提交成功";
  241. try {
  242. //子订单
  243. InsAreaCompany iac = insAreaCompanyService.getById(quoteOrderNo);
  244. if (iac == null) {
  245. return HttpResult.error("订单不存在");
  246. }
  247. InsOrders order = insOrdersService.getById(iac.getOrderno());
  248. // if (InsOrderStatus.S_5.getCode().equals(iac.getOrderstatus()) || InsOrderStatus.S_4.getCode().equals(iac.getOrderstatus())) {
  249. // return HttpResult.ok(InsOrderStatus.matchKey(iac.getOrderstatus()).getDesc());
  250. // }
  251. //组装参数
  252. Audit m = Audit.buildAuditParam(order, this.gainAuthorityDataXml(), iac);
  253. log.debug("=========永诚API方式 - xml请求 - 核保开始======");
  254. //接口请求
  255. InsApiLog apiLog = httpPost(xmlMapper, m, YcBuildData.API_AUDIT);
  256. log.debug("=========永诚API方式 - xml请求 - 核保结束!======");
  257. verifyRequest(apiLog, iac, InsQuoteFlow.Q_S_1);
  258. String responseData = apiLog.getResponseData();
  259. String cleanStr = YcBuildData.cleanResponseStr(responseData);
  260. AuditResponse rd = xmlMapper.readValue(cleanStr, AuditResponse.class);
  261. if (rd.getResponseHead().getReturnCode().equals("0000")) {
  262. // if (rd.getResponseHead().getReturnCode().equals("E0000")) {
  263. String statusJq = StringUtils.toString(rd.getStatusJq(),"");
  264. String statusSy = StringUtils.toString(rd.getStatusSY(),"");
  265. if (statusJq.equals("0") || statusSy.equals("0")) {
  266. iac.setOrderstatus(InsOrderStatus.S_1.getCode());
  267. } else if (statusJq.equals("3") || statusSy.equals("3")) {
  268. iac.setOrderstatus(InsOrderStatus.S_4.getCode());
  269. } else {
  270. iac.setOrderstatus(InsOrderStatus.S_2.getCode());
  271. }
  272. } else {
  273. msg = rd.getResponseHead().getReturnMessage();
  274. return HttpResult.ok("核保失败" + msg);
  275. }
  276. iac.setAuditid(order.getUserid());
  277. iac.setInsOrderNo(rd.getOrderCode());
  278. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  279. iac.setAudittime(LocalDateTime.now());
  280. iac.setJqapplyno(StringUtils.toString(rd.getPolicyAppNoJQ(), ""));
  281. iac.setSyapplyno(StringUtils.toString(rd.getPolicyAppNoSY(), ""));
  282. iac.setJqappoint(""); //交强特别约定
  283. iac.setSyappoint(""); //商业特别约定
  284. insAreaCompanyService.updateById(iac);
  285. return HttpResult.ok(msg + "状态:" + InsOrderStatus.matchKey(iac.getOrderstatus()).getDesc());
  286. // //插入轨迹表
  287. // insTaskHistoryService.insertByOrderStatus(order);
  288. } catch (SystemException e) {
  289. return HttpResult.error(e.getMessage());
  290. } catch (Exception e) {
  291. // e.printStackTrace();
  292. log.error("===永诚API方式--核保报错(订单号-{}):{}", quoteOrderNo, e.getMessage());
  293. return HttpResult.error("系统错误,请联系管理员");
  294. }
  295. // return HttpResult.ok(msg);
  296. }
  297. /**
  298. * 4 影像上传
  299. */
  300. @Override
  301. public HttpResult UploadImageApi(List<InsTaskImage> taskImageList, String quoteOrderNo) {
  302. HttpResult resutl = HttpResult.ok();
  303. InsAreaCompany iac = insAreaCompanyService.getById(quoteOrderNo);
  304. InsOrders order = insOrdersService.getById(iac.getOrderno());
  305. taskImageList.stream().forEach(a -> {
  306. InsApiLog apiLog = null;
  307. //组装参数
  308. log.debug("=========永诚API方式 - xml请求 - 影像上传开始======");
  309. //接口请求
  310. ImageUp iUp = ImageUp.buildImageUpParam(order, gainAuthorityDataXml(), a.getImage(), a.getImgtype(), apiComponents);
  311. log.debug("=========永诚API方式 - xml请求 - 影像上传结束!======");
  312. ObjectMapper xmlMapper = gainXmlMapper();
  313. //接口请求
  314. apiLog = httpPost(xmlMapper, iUp, YcBuildData.API_UPLOAD);
  315. verifyRequest(apiLog, iac, InsQuoteFlow.Q_S_2);
  316. try {
  317. String responseData = apiLog.getResponseData();
  318. String cleanStr = YcBuildData.cleanResponseStr(responseData);
  319. log.error("===永诚API方式--上传影像清洗返回参数:" + cleanStr);
  320. ImageUpResponse iur = xmlMapper.readValue(cleanStr, ImageUpResponse.class);
  321. } catch (IOException e) {
  322. e.printStackTrace();
  323. log.error("===永诚API方式--上传影像报错:" + e.getMessage());
  324. throw new SystemException("系统错误,请联系管理员");
  325. }
  326. });
  327. return HttpResult.ok();
  328. }
  329. /**
  330. * 5 支付
  331. */
  332. @Override
  333. public HttpResult getPayUrlApi(String quoteOrderNo) {
  334. HttpResult httpResult = new HttpResult();
  335. try {
  336. InsAreaCompany iac = insAreaCompanyService.getById(quoteOrderNo);
  337. InsOrders order = insOrdersService.getById(iac.getOrderno());
  338. // InsOrders order = insOrderService.selectByPk(orderno);
  339. if (iac == null) {
  340. return HttpResult.error("报价订单不存在");
  341. }
  342. //组装参数
  343. Pay pay = Pay.buildPayParam(iac, gainAuthorityDataXml(), apiComponents.getPayCallBack());
  344. ObjectMapper xmlMapper = gainXmlMapper();
  345. //接口请求
  346. log.debug("=========永诚API方式 - xml请求 - 获取缴费链接开始======");
  347. InsApiLog apiLog = httpPost(xmlMapper, pay, YcBuildData.API_PAY);
  348. log.debug("=========永诚API方式 - xml请求 - 获取缴费链接结束!======");
  349. verifyRequest(apiLog, iac, InsQuoteFlow.Q_S_3);
  350. String responseData = apiLog.getResponseData();
  351. String cleanStr = YcBuildData.cleanResponseStr(responseData);
  352. PayResponse payResp = xmlMapper.readValue(cleanStr, PayResponse.class);
  353. if (payResp.getReturnCode().equals("E0000")) {
  354. iac.setPaymentLink(payResp.getPayTransUrl());
  355. insAreaCompanyService.updateById(iac);
  356. httpResult.setMsg(payResp.getPayTransUrl());
  357. } else {
  358. httpResult.setMsg(payResp.getReturnMessage());
  359. }
  360. } catch (SystemException e) {
  361. return HttpResult.error(e.getMessage());
  362. } catch (Exception e) {
  363. e.printStackTrace();
  364. return HttpResult.error("系统错误,请联系管理员");
  365. }
  366. return httpResult;
  367. }
  368. /**
  369. * 补传回调
  370. */
  371. @Override
  372. public HttpResult callbackAnOrder(String quoteOrderNo) {
  373. HttpResult httpResult = new HttpResult();
  374. try {
  375. InsAreaCompany iac = insAreaCompanyService.getById(quoteOrderNo);
  376. InsOrders order = insOrdersService.getById(iac.getOrderno());
  377. if (iac == null) {
  378. return HttpResult.error("报价订单不存在");
  379. }
  380. //组装参数
  381. CallbackAnOrder o = CallbackAnOrder.buildCallbackAnOrderParam(iac, gainAuthorityDataXml());
  382. ObjectMapper xmlMapper = gainXmlMapper();
  383. //接口请求
  384. log.debug("=========永诚API方式 - xml请求 - 补传回调开始======");
  385. InsApiLog apiLog = httpPost(xmlMapper, o, YcBuildData.API_ORDER_QUERY);
  386. log.debug("=========永诚API方式 - xml请求 - 补传回调结束!======");
  387. verifyRequest(apiLog, iac, InsQuoteFlow.Q_S_5);
  388. String responseData = apiLog.getResponseData();
  389. String cleanStr = YcBuildData.cleanResponseStr(responseData);
  390. // CallbackAnOrderResponse callbackAnOrderResponse = xmlMapper.readValue(cleanStr, CallbackAnOrderResponse.class);
  391. if (cleanStr.equals("0000")) {
  392. httpResult.setMsg("操作成功");
  393. } else {
  394. httpResult.setMsg(cleanStr);
  395. // httpResult.setMsg(callbackAnOrderResponse.getMessage());
  396. }
  397. } catch (SystemException e) {
  398. return HttpResult.error(e.getMessage());
  399. } catch (Exception e) {
  400. e.printStackTrace();
  401. return HttpResult.error("系统错误,请联系管理员");
  402. }
  403. return httpResult;
  404. }
  405. /**
  406. * 6 电子保单
  407. */
  408. @Override
  409. public HttpResult getPolicyPrintApi(String orderNo,String type) {
  410. HttpResult httpResult = new HttpResult();
  411. try {
  412. InsAreaCompany iac = insAreaCompanyService.getById(orderNo);
  413. // InsOrder order = insOrderService.selectByPk(orderno);
  414. if (iac == null) {
  415. return HttpResult.error("报价订单不存在");
  416. }
  417. String policyNo = type.equals("1")?iac.getJqpolicyno():iac.getSypolicyno();
  418. //组装参数
  419. Policy p = Policy.buildPolicyParam(policyNo, gainAuthorityDataXml());
  420. ObjectMapper xmlMapper = gainXmlMapper();
  421. //接口请求
  422. log.debug("=========永诚API方式 - xml请求 - 获取保单开始======");
  423. InsApiLog apiLog = httpPost(xmlMapper, p, YcBuildData.API_GUARANTEE_SLIP);
  424. log.debug("=========永诚API方式 - xml请求 - 获取保单结束!======");
  425. verifyRequest(apiLog, iac, InsQuoteFlow.Q_S_4);
  426. String responseData = apiLog.getResponseData();
  427. String cleanStr = YcBuildData.cleanResponseStr(responseData);
  428. PolicyResponse pResp = xmlMapper.readValue(cleanStr, PolicyResponse.class);
  429. if (pResp.getHead().getResponseCompleteMessageStatus().getMessageStatusCode().equals("E0000")) {
  430. Map m = new HashMap();
  431. m.put("url",StringUtils.isNotEmpty(pResp.getJqpolicyUrl())?pResp.getJqpolicyUrl():pResp.getSypolicyUrl());
  432. // m.put("syPolicyUrl", pResp.getSypolicyUrl());
  433. // m.put("jqPolicyUrl", pResp.getJqpolicyUrl());
  434. // m.put("policyBZUrl", pResp.getPolicyBZUrl());
  435. httpResult.setData(m);
  436. httpResult.setMsg(pResp.getHead().getResponseCompleteMessageStatus().getMessageStatusDescription());
  437. } else {
  438. httpResult.setMsg(pResp.getHead().getResponseCompleteMessageStatus().getMessageStatusDescription());
  439. }
  440. } catch (Exception e) {
  441. e.printStackTrace();
  442. return HttpResult.error("系统错误,请联系管理员");
  443. }
  444. return httpResult;
  445. }
  446. /**
  447. * 意外险
  448. */
  449. @Override
  450. public HttpResult gainAccidentList(String quoteOrderNo) {
  451. HttpResult httpResult = new HttpResult();
  452. try {
  453. InsAreaCompany iac = insAreaCompanyService.getById(quoteOrderNo);
  454. InsOrders order = insOrdersService.getById(iac.getOrderno());
  455. if (iac == null) {
  456. return HttpResult.error("报价订单不存在");
  457. }
  458. //组装参数
  459. Accident accident = Accident.buildPayParam(order, gainAuthorityDataXml(), apiComponents);
  460. ObjectMapper xmlMapper = gainXmlMapper();
  461. //接口请求
  462. log.debug("=========永诚API方式 - xml请求 - 获取意健险方案及险种查询开始======");
  463. InsApiLog apiLog = httpPost(xmlMapper, accident, YcBuildData.API_ACCIDENT);
  464. log.debug("=========永诚API方式 - xml请求 - 获取意健险方案及险种查询结束!======");
  465. // verifyRequest(apiLog, iac,InsQuoteFlow.);
  466. String responseData = apiLog.getResponseData();
  467. String cleanStr = YcBuildData.cleanResponseStr(responseData);
  468. AccidentResponse accidentResp = xmlMapper.readValue(cleanStr, AccidentResponse.class);
  469. if (accidentResp.getHead().getResponseCompleteMessageStatus().getMessageStatusCode().equals("E0000")) {
  470. httpResult.setData(accidentResp.getResponseYwCvrg());
  471. httpResult.setMsg(accidentResp.getHead().getResponseCompleteMessageStatus().getMessageStatusDescription());
  472. } else {
  473. httpResult.setMsg(accidentResp.getHead().getResponseCompleteMessageStatus().getMessageStatusDescription());
  474. }
  475. } catch (SystemException e) {
  476. return HttpResult.error(e.getMessage());
  477. } catch (Exception e) {
  478. e.printStackTrace();
  479. return HttpResult.error("系统错误,请联系管理员");
  480. }
  481. return httpResult;
  482. }
  483. @Override
  484. public HttpResult callBackApi(CallBackRequest param) {
  485. // if (StringUtils.isNotEmpty(param.getType())) return HttpResult.error("字段:type(回调类型) 参数为空");
  486. //成功
  487. if (param.getResult().equals("0")) {
  488. LambdaQueryWrapper<InsAreaCompany> lqw = new LambdaQueryWrapper();
  489. //交强保单号查询
  490. lqw.eq(StringUtils.isNotEmpty(param.getCiPolicyAppNo()),InsAreaCompany::getJqapplyno,param.getCiPolicyAppNo());
  491. //商业保单号查询
  492. lqw.eq(StringUtils.isNotEmpty(param.getBizPolicyAppNo()),InsAreaCompany::getSyapplyno,param.getBizPolicyAppNo());
  493. InsAreaCompany iac = insAreaCompanyService.getOne(lqw);
  494. if(null != iac){
  495. if(StringUtils.isNotEmpty(param.getCiPolicyNo())) iac.setJqpolicyno(param.getCiPolicyNo());
  496. if(StringUtils.isNotEmpty(param.getBizPolicyNo())) iac.setSypolicyno(param.getBizPolicyNo());
  497. // if(param.getType().equals("0")) iac.setOrderstatus(InsOrderStatus.S_3.getCode());
  498. // if(param.getType().equals("1")) iac.setOrderstatus(InsOrderStatus.S_7.getCode());
  499. iac.setOrderstatus(InsOrderStatus.S_3.getCode());
  500. insAreaCompanyService.updateById(iac);
  501. //支付后 手工确认意外险
  502. }else{
  503. log.info(String.format("永诚API方式 - 回调 - 信息,订单不存在,交强保单号:{} ,商业保单号:{}",param.getCiPolicyNo(),param.getBizPolicyNo()));
  504. }
  505. } else {
  506. //失败原因
  507. param.getMessage();
  508. log.info(String.format("永诚API方式 - 回调 - 失败,交强保单号:{} ,商业保单号:{},类型:{}",param.getCiPolicyNo(),param.getBizPolicyNo(),param.getType()));
  509. }
  510. return HttpResult.ok(param);
  511. }
  512. /**
  513. * @description:构造车型查询参数
  514. * @author: lig
  515. * @date: 2023年02月08日 0008
  516. */
  517. private ModelsQueryXml buildModelsQueryParam(CarModel_Req carModelReq) {
  518. ModelsQueryXml m = new ModelsQueryXml();
  519. ModelsQueryXml.RequestLabel requestLabel = new ModelsQueryXml.RequestLabel();
  520. requestLabel.setSearchKeyword(carModelReq.getFrameNo().substring(0, 8));
  521. requestLabel.setVid(carModelReq.getFrameNo());
  522. requestLabel.setEngineNo(carModelReq.getEngineNo());
  523. requestLabel.setDptCde("1425");
  524. requestLabel.setProno("");
  525. requestLabel.setMotorTypeCode("11");
  526. requestLabel.setCFstRegYm(carModelReq.getEnrollDate());
  527. requestLabel.setAuthorityData(this.gainAuthorityDataXml());
  528. m.setRequestLabel(requestLabel);
  529. return m;
  530. }
  531. /**
  532. * @description: 构造返回内容,参考永安
  533. * @author: lig
  534. * @date: 2023年02月07日 0007
  535. */
  536. private List<CarModelDTO> buildCarModel(ModelsQueryResponse modelsQueryResponse) {
  537. List<ModelsQueryResponse.VehicleInfo> vList = modelsQueryResponse.getVehicleInfoList();
  538. List<CarModelDTO> carModelList = new ArrayList<>();
  539. vList.stream().forEach(a -> {
  540. CarModelDTO dto = new CarModelDTO();
  541. BeanUtils.copyProperties(a, dto);
  542. carModelList.add(dto);
  543. });
  544. return carModelList;
  545. }
  546. private <T> InsApiLog httpPost(ObjectMapper mapper, T requestData, String apiName) {
  547. String xmlString = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tns=\"http://newWS.front.app.echannel.ebiz.alltrust.com/\">";
  548. xmlString += "<soapenv:Body>";
  549. try {
  550. mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
  551. xmlString += mapper.writeValueAsString(requestData);
  552. xmlString += "</soapenv:Body>\n" +
  553. "</soapenv:Envelope>";
  554. } catch (JsonProcessingException e) {
  555. throw new RuntimeException("永诚API方式-xml转换失败");
  556. }
  557. InsApiLog iplog = HttpXmlUtil.sendXmlPost(apiComponents.getUrl() + apiName, xmlString);
  558. log.info("永诚API方式 - xml请求 - 参数:" + iplog.getRequestData());
  559. log.info("永诚API方式 - xml请求 ------------分割线----------------");
  560. log.info("永诚API方式 - xml请求 - 响应:" + iplog.getResponseData());
  561. return iplog;
  562. }
  563. /**
  564. * @description: 拷贝永安方法,可以封装
  565. * @author: lig
  566. * @date: 2023年02月08日 0008
  567. */
  568. private void checkEmpty(YaQuoteInfoVo yaQuoteInfoVo) {
  569. if (yaQuoteInfoVo.getCarInfo() == null) {
  570. throw new SystemException("carInfo不能为空!");
  571. }
  572. if (yaQuoteInfoVo.getPolicyHolderInfo() == null || yaQuoteInfoVo.getInsuredPersonInfo() == null) {
  573. throw new SystemException("policyHolderInfo/insuredPersonInfo 不能为空!");
  574. }
  575. if (yaQuoteInfoVo.getRiskList() == null || yaQuoteInfoVo.getRiskList().size() == 0) {
  576. throw new SystemException("riskList 不能为空!");
  577. } else {
  578. for (RiskInfoVo riskInfoVo : yaQuoteInfoVo.getRiskList()) {
  579. if (riskInfoVo.getStartDate() == null || riskInfoVo.getEndDate() == null) {
  580. throw new SystemException("riskList.startDate / riskList.endDate不能为空!");
  581. }
  582. }
  583. }
  584. }
  585. // /**
  586. // * 生成订单 拷贝永安
  587. // *
  588. // * @author: lig
  589. // * @date: 2023年02月16日 0016
  590. // */
  591. // protected InsOrders gene_order(YaQuoteInfoVo record) {
  592. // InsOrders insOrder = new InsOrders();
  593. // String orderno = IdGenerate.nextId();
  594. // insOrder.setOrderno(orderno);
  595. // insOrder.setQuoteno(String.valueOf(record.getQuoteno()));
  596. // insOrder.setOrderstatus("0"); //0报价 1待核保 2已核保待缴费 3核保退回 4核保不通过
  597. // insOrder.setFrameno(record.getCarInfo().getFrameNo());
  598. // insOrder.setLicenseno(record.getCarInfo().getLicenseNo());
  599. //
  600. // insOrder.setCarinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getCarInfo())));
  601. // SysUser user = sysUserService.selectByPk(record.getUserId());
  602. // if (user == null) {
  603. // throw new SystemException("userId不存在");
  604. // }
  605. // if (org.springframework.util.StringUtils.isEmpty(record.getCarInfo().getFrameNo())) {
  606. // throw new SystemException("车架号不能为空");
  607. // }
  608. // // 关闭订单 不含当前报价号
  609. // InsOrders orderObj = insOrderService.queryQuoteno(new Object[]{record.getUserId(), record.getCarInfo().getFrameNo(), record.getQuoteno()});
  610. // if (orderObj != null) {
  611. // List<InsOrder> listo = insOrderService.selectList(" where quoteno=?", new Object[]{orderObj.getQuoteno()});
  612. // String status = "0";
  613. // for (InsOrder order : listo) {
  614. // if (!"0".equals(order.getOrderstatus())) {
  615. // status = order.getOrderstatus();
  616. // }
  617. // }
  618. // //0报价中 1待核保 2已核保 3核保退回 4核保不通过 5已核保待缴费 6已缴费 7已承保 99已关闭
  619. // if ("0".equals(status)) {//关闭订单
  620. // insOrderService.closeOrder(orderObj.getOrderno(), "99");
  621. // } else if (!"99".equals(status)) {
  622. // throw new SystemException("此车辆已提交核保,重新报价请先关闭订单,任务号:" + orderObj.getQuoteno());
  623. // }
  624. // }
  625. // insOrder.setUserid(user.getId());
  626. // insOrder.setUsername(user.getName());
  627. // insOrder.setDeptid(user.getDeptId());
  628. // SysDept dept = sysDeptService.selectByPk(user.getDeptId());
  629. // insOrder.setDeptname(dept == null ? "" : dept.getName());
  630. //
  631. // double retailRate = countRetail(user.getDeptId(), user.getId());
  632. //
  633. // insOrder.setOwnerinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getOwnerInfo())));
  634. // insOrder.setApplyinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getPolicyHolderInfo())));
  635. // insOrder.setInsureinfo(JSONObject.parseObject(JSONObject.toJSONString(record.getInsuredPersonInfo())));
  636. //
  637. // insOrder.setInsuredname(record.getPolicyHolderInfo().getName());
  638. //
  639. //
  640. // List<RiskInfoVo> risks = record.getRiskList();
  641. // for (RiskInfoVo risk : risks) {
  642. // if ("0507".equals(risk.getRiskCode())) {//交强
  643. // insOrder.setJqstartdate(risk.getStartDate());
  644. // insOrder.setJqenddate(risk.getEndDate());
  645. // }
  646. // if ("0510".equals(risk.getRiskCode())) {//商业
  647. // insOrder.setSystartdate(risk.getStartDate());
  648. // insOrder.setSyenddate(risk.getEndDate());
  649. // }
  650. // }
  651. //
  652. // List<KindInfoVo> kinds = record.getKindList();
  653. // String productId = "";
  654. // String productname = "";
  655. //
  656. // 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() + "%"});
  657. // if (agreements.size() == 0) {
  658. // throw new SystemException("不存在有效协议或机构" + user.getDeptId() + "未授权");
  659. // }
  660. // String agreeid = agreements.get(0).getId();
  661. // insOrder.setAgreeid(agreeid);
  662. // //匹配协议,获取费用
  663. // StringBuffer whereStr = new StringBuffer();
  664. // List params = new ArrayList();// where t.agreeid=? and t.productid in ()
  665. // whereStr.append("where t.agreeid=? ");
  666. // params.add(agreeid);
  667. // if (risks.size() == 1 && "0507".equals(risks.get(0).getRiskCode())) {
  668. // productId = "ZG01001";
  669. // productname = "单交强";
  670. // whereStr.append(" and t.productid=?");
  671. // params.add(productId);
  672. // } else if (risks.size() == 1 && kinds.size() == 1 && "B".equals(kinds.get(0).getKindCode())) {
  673. // productId = "ZG01002";
  674. // productname = "单三者";
  675. // whereStr.append(" and t.productid=?");
  676. // params.add(productId);
  677. // } else if (risks.size() == 1) {
  678. // productId = "ZG01003";
  679. // productname = "单商业";
  680. // whereStr.append(" and t.productid=?");
  681. // params.add(productId);
  682. // } else if (risks.size() == 2 && kinds.size() == 1 && "B".equals(kinds.get(0).getKindCode())) {
  683. // productId = "ZG01004";
  684. // productname = "交强+三者";
  685. // whereStr.append(" and t.productid in (?,?)");
  686. // params.add("ZG01004");
  687. // params.add("ZG01005");
  688. // } else {
  689. // productId = "ZG01006";
  690. // productname = "交强+商业";
  691. // whereStr.append(" and t.productid in (?,?)");
  692. // params.add("ZG01006");
  693. // params.add("ZG01007");
  694. // }
  695. //
  696. // insOrder.setProductid(productId);
  697. // insOrder.setProduct(productname);
  698. // List<EsmAgreementProd> agreementProds = esmAgreementProdService.selectList(whereStr.toString(), params.toArray());
  699. // for (EsmAgreementProd prod : agreementProds) {
  700. // if ("ZG01001".equals(prod.getProductid()) || "ZG01004".equals(prod.getProductid()) || "ZG01006".equals(prod.getProductid())) {
  701. //
  702. // insOrder.setFeerate(prod.getProductrate()); //交强手续费比例
  703. // insOrder.setJqdiscountrate(prod.getFeerate() - retailRate); //交强优惠比例=业务员绩效-分销费用
  704. // } else {
  705. // insOrder.setDisrate(prod.getProductrate()); //商业手续费比例
  706. // insOrder.setSydiscountrate(prod.getFeerate() - retailRate); //商业优惠比例=业务员绩效-分销费用
  707. //
  708. // }
  709. // insOrder.setProductid(prod.getId());
  710. // }
  711. //
  712. // insOrder.setRiskinfo(JSONObject.parseArray(JSONObject.toJSONString(record.getRiskList())));
  713. // insOrder.setKindinfo(JSONObject.parseArray(JSONObject.toJSONString(record.getKindList())));
  714. // SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  715. //
  716. // insOrder.setInscompany("永安财险");
  717. // insOrder.setCreatetime(sdfm.format(new Date()));
  718. //
  719. // return insOrder;
  720. //
  721. // }
  722. /**
  723. * 分销费用统计 拷贝永安
  724. *
  725. * @param deptid
  726. * @param userid
  727. * @return
  728. */
  729. public double countRetail(String deptid, String userid) {
  730. double retailRate = 0;
  731. //1、根据机构匹配分销规则,获取分销比例
  732. List<EsmRetail> list = esmRetailService.selectList(" where deptid = ? and status=?", new Object[]{deptid, "1"});
  733. //2、根据userid查询三级推荐人
  734. List<SysUser> users = esmUserInternalService.getSuperior(userid);
  735. if (list != null && list.size() > 0 && users.size() > 0 && !"0".equals(list.get(0).getRetailtype())) {
  736. EsmRetail retail = list.get(0);
  737. List<Double> rateList = new ArrayList<Double>();
  738. rateList.add(retail.getDisrate1());
  739. rateList.add(retail.getDisrate2());
  740. rateList.add(retail.getDisrate3());
  741. if ("1".equals(retail.getRetailtype())) {//一级分销
  742. retailRate += rateList.get(0);
  743. } else if ("2".equals(retail.getRetailtype())) {//二级分销
  744. int num = users.size() > 2 ? 2 : users.size();
  745. for (int i = 0; i < num; i++) {
  746. retailRate += rateList.get(i);
  747. }
  748. } else {//三级分销
  749. int num = users.size() > 2 ? 3 : users.size();
  750. for (int i = 0; i < num; i++) {
  751. retailRate += rateList.get(i);
  752. }
  753. }
  754. }
  755. return retailRate;
  756. }
  757. /**
  758. * 新订单 - 子订单
  759. *
  760. * @author: lig
  761. * @date: 2023年02月16日 0016
  762. */
  763. private InsAreaCompany response_order(InsOrders insOrder, QuoteRespVo quoteRespVo, Ruote requestData, RuoteResponse responseData) {
  764. //交强保费 含税
  765. double jqPremium = StringUtils.toDouble(responseData.getBase().getNBefTaxPrmJQ()) + StringUtils.toDouble(responseData.getBase().getNAppTaxAmtJQ());
  766. //商业保费 含税
  767. double syPremium = StringUtils.toDouble(responseData.getBase().getNBefTaxPrmSY()) + StringUtils.toDouble(responseData.getBase().getNAppTaxAmtSY());
  768. //保险公司订单号
  769. String insOrderNo = responseData.getBase().getCresvTxt6();
  770. //查询码交强
  771. String queryCodeJq = responseData.getVhl().getCQryCdeJQ();
  772. //查询码商业
  773. String queryCodeSy = responseData.getVhl().getCQryCdeSY();
  774. boolean jq_falg = jqPremium > 0 ? true : false;
  775. //保存订单信息
  776. InsAreaCompany insAreaCompany = new InsAreaCompany();
  777. insAreaCompany.setOrderno(insOrder.getOrderno());
  778. insAreaCompany.setReptxt(JSONObject.parseObject(JSONObject.toJSONString(responseData)));
  779. insAreaCompany.setJqpremium(BigDecimal.valueOf(jq_falg ? jqPremium : 0));
  780. insAreaCompany.setSypremium(BigDecimal.valueOf(syPremium));
  781. insAreaCompany.setTaxamount(BigDecimal.valueOf(jq_falg ? quoteRespVo.getTaxAmount() : 0));
  782. insAreaCompany.setSumpremium(BigDecimal.valueOf(quoteRespVo.getSumPermium()));
  783. // insAreaCompany.setSumpremium(BigDecimal.valueOf(add(quoteRespVo.getSumPermium(), insOrder.getTaxamount())));
  784. insAreaCompany.setOrderstatus(InsTaskHistoryEnum.WAITING_NUCLEAR_INSURANCE.getState() + "");
  785. insAreaCompany.setRiskinfo(JSONObject.parseArray(JSONObject.toJSONString(quoteRespVo.getRiskList())));
  786. insAreaCompany.setKindinfo(JSONObject.parseArray(JSONObject.toJSONString(quoteRespVo.getKindList())));
  787. insAreaCompany.setCreatetime(LocalDateTime.now());
  788. insAreaCompany.setInsOrderNo(insOrderNo);
  789. insAreaCompany.setJqapplyno(queryCodeJq);
  790. insAreaCompany.setSyapplyno(queryCodeSy);
  791. insAreaCompany.setInscompany("永诚API");
  792. insAreaCompanyService.save(insAreaCompany);
  793. return insAreaCompany;
  794. // //插入轨迹表
  795. // InsTaskHistory history = new InsTaskHistory();
  796. // history.setId(String.valueOf(new Date().getTime()));
  797. // history.setCompany(insOrder.getInscompany());
  798. // history.setTaskid(insOrder.getOrderno());
  799. // history.setOperatorid(insOrder.getUserid());
  800. // history.setOperator(insOrder.getUsername());
  801. // SimpleDateFormat sdfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  802. // history.setCreatetime(sdfm.format(new Date()));
  803. // history.setOperator(insOrder.getUsername());
  804. // history.setStatus("0");
  805. // history.setRemark("报价中");
  806. // insTaskHistoryService.insert(history);
  807. }
  808. public static double add(double v1, double v2) {
  809. BigDecimal b1 = new BigDecimal(Double.toString(v1));
  810. BigDecimal b2 = new BigDecimal(Double.toString(v2));
  811. return b1.add(b2).doubleValue();
  812. }
  813. public static String getUserName() {
  814. String userName = null;
  815. Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
  816. if (principal instanceof UserDetails) {
  817. userName = ((UserDetails) principal).getUsername();
  818. } else {
  819. userName = principal.toString();
  820. }
  821. return userName;
  822. }
  823. /**
  824. * 验证远程请求
  825. *
  826. * @author: lig
  827. * @date: 2023年02月22日 0022
  828. */
  829. private void verifyRequest(InsApiLog apiLog, InsAreaCompany insAreaCompany, InsQuoteFlow iqf) {
  830. //增加api日志
  831. insApiLogService.insertAsync(new InsApiLog(insAreaCompany, apiLog, iqf));
  832. if (StringUtils.isNotEmpty(apiLog.getExceptionMsg())) {
  833. throw new RuntimeException("远程接口调用异常");
  834. }
  835. }
  836. // /**
  837. // * 验证远程请求
  838. // *
  839. // * @author: lig
  840. // * @date: 2023年02月22日 0022
  841. // */
  842. // private void verifyRequest(InsApiLog apiLog, InsAreaCompany insAreaCompany) {
  843. // //增加api日志
  844. // insApiLogService.insertAsync(new InsApiLog(insAreaCompany, apiLog));
  845. // if (StringUtils.isNotEmpty(apiLog.getExceptionMsg())) {
  846. // throw new RuntimeException("远程接口调用异常");
  847. // }
  848. //
  849. // }
  850. /**
  851. * 更新api log
  852. *
  853. * @author: lig
  854. * @date: 2023-03-21
  855. */
  856. private void updateApiLog(InsApiLog apiLog, InsAreaCompany iac) {
  857. if (null != apiLog && null != iac) {
  858. apiLog.setOrderNo(StringUtils.toString(iac.getId()));
  859. // apiLog.setOrderStatus(iac.getOrderstatus());
  860. insApiLogService.UpdateAsync(apiLog);
  861. }
  862. }
  863. @Override
  864. public Map<String,String> gainRegionCode(String address) {
  865. log.debug("*********永诚API方式 - 身份证地址解析 参数:" + address);
  866. Map<String,String> m = IDCardUtils.addressResolution(address);
  867. String city = m.get("city");
  868. String district = m.get("district");
  869. if(StringUtils.isNullOrEmpty(district)){
  870. //第二级赋值到第三级
  871. district = city;
  872. }
  873. if(StringUtils.isNullOrEmpty(district)){
  874. return null;
  875. }
  876. //查询
  877. LambdaQueryWrapper<InsAlltrustRegion> lqw = new LambdaQueryWrapper<>();
  878. lqw.eq(InsAlltrustRegion::getArea,district);
  879. List<InsAlltrustRegion> list = insAlltrustRegionMapper.selectList(lqw);
  880. if(null != list && list.size() > 0){
  881. Map rMap = new HashMap();
  882. rMap.put("provinceCode",list.get(0).getProvinceCode());
  883. rMap.put("cityCode",list.get(0).getCityCode());
  884. rMap.put("areaCode",list.get(0).getAreaCode());
  885. return rMap;
  886. }
  887. return null;
  888. }
  889. private void buildRegion(Ruote m) {
  890. //被保人
  891. Insured i = m.getRequestLabel().getCondition().getInsured();
  892. //投保人
  893. Applicant a = m.getRequestLabel().getCondition().getApplicant();
  894. Map<String,String> iMap = gainRegionCode(i.getCClntAddr());
  895. if(null != iMap && iMap.size() > 0){
  896. i.setCProvince(iMap.get("provinceCode"));
  897. i.setCCity(iMap.get("cityCode"));
  898. i.setCCounty(iMap.get("areaCode"));
  899. }else{
  900. throw new SystemException("永诚 - 地区获取失败,请联系管理员");
  901. }
  902. Map<String,String> aMap = gainRegionCode(a.getCClntAddr());
  903. if(null != aMap && aMap.size() > 0){
  904. a.setCProvince(aMap.get("provinceCode"));
  905. a.setCCity(aMap.get("cityCode"));
  906. a.setCCounty(aMap.get("areaCode"));
  907. }else{
  908. throw new SystemException("永诚 - 地区获取失败,请联系管理员");
  909. }
  910. }
  911. }