InsOrderController.java 67 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458
  1. package com.ydtech.modules.ins.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.ydtech.core.page.BaseController;
  6. import com.ydtech.core.page.HttpResult;
  7. import com.ydtech.core.page.PageRequest;
  8. import com.ydtech.core.page.PageResult;
  9. import com.ydtech.modules.admin.model.SysUser;
  10. import com.ydtech.modules.esm.model.EsmAgreement;
  11. import com.ydtech.modules.esm.model.EsmAgreementProdfee;
  12. import com.ydtech.modules.esm.model.EsmRetail;
  13. import com.ydtech.modules.esm.model.InsTaskImage;
  14. import com.ydtech.modules.esm.service.*;
  15. import com.ydtech.modules.ins.model.*;
  16. import com.ydtech.modules.ins.service.*;
  17. import com.ydtech.modules.ins.vo.OrderPayVo;
  18. import com.ydtech.modules.ins.vo.OrderPaymentVo;
  19. import com.ydtech.modules.ins.vo.OrderVo;
  20. import com.ydtech.nai.httpvo.*;
  21. import com.ydtech.utils.HeadUtils;
  22. import com.ydtech.utils.HttpsPostUtil;
  23. import com.ydtech.utils.Base64Utils;
  24. import com.ydtech.utils.idgen.IdGenerate;
  25. import org.slf4j.Logger;
  26. import org.slf4j.LoggerFactory;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.core.env.Environment;
  29. import org.springframework.util.StringUtils;
  30. import org.springframework.web.bind.annotation.*;
  31. import java.math.BigDecimal;
  32. import java.text.SimpleDateFormat;
  33. import java.util.*;
  34. /**
  35. * @author qinfenglong
  36. * @version 1.0.0
  37. * @description InsOrderController
  38. * @since 2020/12/16 9:22
  39. */
  40. @RestController
  41. @RequestMapping("/insOrder")
  42. public class InsOrderController extends BaseController {
  43. Logger logger = LoggerFactory.getLogger(InsOrderController.class);
  44. @Autowired
  45. Environment environment;
  46. @Autowired
  47. InsOrderService insOrderService;
  48. @Autowired
  49. InsFeeDetailService insFeeDetailService;
  50. @Autowired
  51. InsDeptFeeService insDeptFeeService;
  52. @Autowired
  53. InsCommissionService insCommissionService;
  54. @Autowired
  55. EsmAgreementProdfeeService esmAgreementProdfeeService;
  56. @Autowired
  57. EsmAgreementService esmAgreementService;
  58. @Autowired
  59. EsmRetailService esmRetailService;
  60. @Autowired
  61. EsmUserInternalService esmUserInternalService;
  62. @Autowired
  63. InsTaskHistoryService insTaskHistoryService;
  64. @Autowired
  65. InsOrderTaskService insOrderTaskService;
  66. @Autowired
  67. HuanongService huanongService;
  68. @Autowired
  69. HengbangService hengbangService;
  70. @Autowired
  71. InsTaskImageService insTaskImageService;
  72. @Autowired
  73. TiananAPIService tiananAPIService;
  74. /**
  75. * 基础分页查询
  76. *
  77. * @param pageRequest
  78. * @return
  79. */
  80. @PostMapping(value = "/findPage")
  81. public HttpResult findPage(@RequestBody PageRequest pageRequest) {
  82. int pageNum = pageRequest.getPageNum();
  83. int pageSize = pageRequest.getPageSize();
  84. //0报价中 1待核保 2已核保 3核保退回 4核保不通过 5已核保待缴费 6已缴费 7已承保 99已关闭
  85. String orderstatus = pageRequest.getColumnFilterValue(pageRequest, "orderstatus"); // 订单状态
  86. String quotestatus = pageRequest.getColumnFilterValue(pageRequest, "quotestatus"); // 报价状态
  87. String auditid = pageRequest.getColumnFilterValue(pageRequest, "auditid"); // 核保人员
  88. String userid = pageRequest.getColumnFilterValue(pageRequest, "userid"); // 出单员
  89. String deptid = pageRequest.getColumnFilterValue(pageRequest, "deptid"); // 所属机构
  90. String startdate = pageRequest.getColumnFilterValue(pageRequest, "startdate"); // 开始时间
  91. String enddate = pageRequest.getColumnFilterValue(pageRequest, "enddate"); // 截止时间
  92. String policystartdate = pageRequest.getColumnFilterValue(pageRequest, "policystartdate"); // 开始时间
  93. String policyenddate = pageRequest.getColumnFilterValue(pageRequest, "policyenddate"); // 截止时间
  94. String frameNo = pageRequest.getColumnFilterValue(pageRequest, "frameNo"); // 车架号
  95. String licenseNo = pageRequest.getColumnFilterValue(pageRequest, "licenseNo"); // 车牌号
  96. String engineNo = pageRequest.getColumnFilterValue(pageRequest, "engineNo"); //发动机号
  97. String quoteno = pageRequest.getColumnFilterValue(pageRequest, "quoteno"); // 报价单号
  98. String orderno = pageRequest.getColumnFilterValue(pageRequest, "orderno"); // 报价单号
  99. String username = pageRequest.getColumnFilterValue(pageRequest, "username"); // 代理人名称
  100. String riskCode = pageRequest.getColumnFilterValue(pageRequest, "riskCode"); // 险种代码
  101. String insurename = pageRequest.getColumnFilterValue(pageRequest, "insurename"); // 被保人
  102. String inscompany = pageRequest.getColumnFilterValue(pageRequest, "inscompany"); // 保险公司
  103. String editId = pageRequest.getColumnFilterValue(pageRequest, "editId"); // 工号
  104. StringBuffer whereStr = new StringBuffer(" where 1=1");
  105. ArrayList<String> array = new ArrayList<>();
  106. if (!StringUtils.isEmpty(orderstatus)) {
  107. if ("0".equals(orderstatus) && !StringUtils.isEmpty(userid) && !StringUtils.isEmpty(licenseNo)) {
  108. whereStr.append(" and exists (select 1 from v_order a where t.quoteno=a.quoteno and a.userid=? and a.licenseno=?)");
  109. array.add(userid);
  110. array.add(licenseNo);
  111. } else if ("0".equals(orderstatus) && !StringUtils.isEmpty(userid) && !StringUtils.isEmpty(frameNo)) {
  112. whereStr.append(" and exists (select 1 from v_order a where t.quoteno=a.quoteno and a.userid=? and a.frameno=?)");
  113. array.add(userid);
  114. array.add(frameNo);
  115. } else if ("0".equals(orderstatus)) {
  116. whereStr.append(" and exists (select 1 from v_order a where t.quoteno=a.quoteno)");
  117. } else {
  118. whereStr.append(" and orderstatus=?");
  119. array.add(orderstatus);
  120. }
  121. }
  122. if (!StringUtils.isEmpty(quotestatus)) {
  123. whereStr.append(" and quotestatus=?");
  124. array.add(quotestatus);
  125. }
  126. if (!StringUtils.isEmpty(auditid)) {
  127. whereStr.append(" and auditid=?");
  128. array.add(auditid);
  129. }
  130. if (!StringUtils.isEmpty(userid)) {
  131. whereStr.append(" and userid=?");
  132. array.add(userid);
  133. }
  134. if (!StringUtils.isEmpty(username)) {
  135. whereStr.append(" and username=?");
  136. array.add(username);
  137. }
  138. if (!StringUtils.isEmpty(quoteno)) {
  139. whereStr.append(" and quoteno=?");
  140. array.add(quoteno);
  141. }
  142. if (!StringUtils.isEmpty(orderno)) {
  143. whereStr.append(" and orderno=?");
  144. array.add(orderno);
  145. }
  146. if (!StringUtils.isEmpty(engineNo)) {
  147. whereStr.append(" and carinfo like ?");
  148. array.add("%" + engineNo + "%");
  149. }
  150. if (!StringUtils.isEmpty(licenseNo)) {
  151. whereStr.append(" and licenseno=?");
  152. array.add(licenseNo);
  153. }
  154. if (!StringUtils.isEmpty(frameNo)) {
  155. whereStr.append(" and frameno=?");
  156. array.add(frameNo);
  157. }
  158. if (editId != null && !editId.equals("admin")) {
  159. String dept = editId.substring(0, editId.indexOf("D"));
  160. whereStr.append(" and deptid like ?");
  161. array.add(dept + "%");
  162. }
  163. if (!StringUtils.isEmpty(deptid)) {
  164. whereStr.append(" and deptid like ?");
  165. array.add(deptid + "%");
  166. }
  167. if (!StringUtils.isEmpty(riskCode)) {
  168. whereStr.append(" and product = ?");
  169. array.add(riskCode);
  170. }
  171. if (!StringUtils.isEmpty(insurename)) {
  172. whereStr.append(" and insureinfo like ?");
  173. array.add("%" + insurename + "%");
  174. }
  175. if (!StringUtils.isEmpty(inscompany)) {
  176. whereStr.append(" and inscompany=?");
  177. array.add(inscompany);
  178. }
  179. if (!StringUtils.isEmpty(startdate)) {
  180. whereStr.append(" and DATE_FORMAT(createtime, '%Y-%m-%d') >= date ?");
  181. array.add(startdate);
  182. }
  183. if (!StringUtils.isEmpty(enddate)) {
  184. whereStr.append(" and DATE_FORMAT(createtime, '%Y-%m-%d') <= date ?");
  185. array.add(enddate);
  186. }
  187. if (!StringUtils.isEmpty(policystartdate) && !StringUtils.isEmpty(policyenddate)) {
  188. whereStr.append(" and (DATE_FORMAT(jqstartdate, '%Y-%m-%d') between date ? and date ? or DATE_FORMAT(systartdate, '%Y-%m-%d') between date ? and date ?)");
  189. array.add(policystartdate);
  190. array.add(policyenddate);
  191. array.add(policystartdate);
  192. array.add(policyenddate);
  193. }
  194. whereStr.append(" order by t.createtime desc");
  195. PageResult pageResult = insOrderService.selectPaging(pageNum, pageSize, whereStr.toString(), array.toArray());
  196. return HttpResult.ok(pageResult);
  197. }
  198. /**
  199. * 查询订单详情
  200. *
  201. * @param orderno
  202. * @return
  203. */
  204. @GetMapping(value = "/queryOrder")
  205. public HttpResult queryOrder(@RequestParam String orderno) {
  206. InsOrder order = insOrderService.selectByPk(orderno);
  207. if (order == null) {
  208. return HttpResult.error("订单不存在");
  209. }
  210. return HttpResult.ok(order);
  211. }
  212. /**
  213. * 获取缴费二维码
  214. *
  215. * @return
  216. */
  217. @GetMapping("/getPayCode")
  218. public HttpResult getPayCode(@RequestParam String orderno) {
  219. HttpResult httpResult = new HttpResult();
  220. InsOrder order = insOrderService.selectByPk(orderno);
  221. if (order == null) {
  222. return HttpResult.error("订单不存在");
  223. }
  224. String licenseno = order.getLicenseNo();
  225. String carowner = order.getInsuredname();
  226. String jqapplyno = order.getJqapplyno();
  227. String syapplyno = order.getSyapplyno();
  228. if ("华农财险".equals(order.getInscompany())) {
  229. huanongService.login();
  230. huanongService.querySales();
  231. httpResult = huanongService.queryOrder(licenseno, jqapplyno, syapplyno);
  232. } else if ("恒邦财险".equals(order.getInscompany())) {
  233. hengbangService.login();
  234. hengbangService.querySales();
  235. httpResult = hengbangService.queryOrder(licenseno, carowner, jqapplyno, syapplyno);
  236. } else if ("中煤财险".equals(order.getInscompany())) {
  237. StringBuffer whereStr = new StringBuffer(" where 1=1 ");
  238. ArrayList<String> array = new ArrayList<String>();
  239. if (!StringUtils.isEmpty(orderno)) {
  240. whereStr.append(" and orderno=? ");
  241. array.add(orderno);
  242. }
  243. PayinfoVO payinfoVO = insOrderService.selectPayinfo(whereStr.toString(), array.toArray());
  244. if (payinfoVO != null) {
  245. JSONObject reptxt = payinfoVO.getReptxt();
  246. Map<String, Object> reptxtmap = reptxt;
  247. Object payUrl = reptxtmap.get("payUrl");
  248. httpResult.setData(payUrl);
  249. httpResult.setCode(200);
  250. httpResult.setMsg(payUrl.toString());
  251. return httpResult;
  252. } else {
  253. httpResult.setCode(300);
  254. httpResult.setMsg("未获取到二维码");
  255. return httpResult;
  256. }
  257. } else if ("天安财险".equals(order.getInscompany())) {
  258. String url = environment.getProperty("netUrl");
  259. httpResult.setData(url + "api/tianan/applyPay?orderno=" + orderno);
  260. } else {
  261. httpResult.setCode(300);
  262. httpResult.setMsg("该保险公司暂不支持缴费查询!");
  263. }
  264. return httpResult;
  265. }
  266. /**
  267. * 获取缴费状态
  268. *
  269. * @return
  270. */
  271. @GetMapping("/queryPayStatus")
  272. public HttpResult queryPayStatus(@RequestParam String orderno) {
  273. HttpResult httpResult = new HttpResult();
  274. String date = null;
  275. InsOrder order = insOrderService.selectByPk(orderno);
  276. if (order == null) {
  277. return HttpResult.error("订单不存在");
  278. }
  279. String licenseno = order.getLicenseNo();
  280. String carowner = order.getInsuredname();
  281. if (order.getAudittime() != null && !order.getAudittime().equals("")) {
  282. date = order.getAudittime().substring(0, 10);
  283. }
  284. String jqapplyno = order.getJqapplyno();
  285. String syapplyno = order.getSyapplyno();
  286. if ("华农财险".equals(order.getInscompany())) {
  287. huanongService.login();
  288. huanongService.querySales();
  289. httpResult = huanongService.queryPayStatus(licenseno, date, jqapplyno, syapplyno);
  290. } else if ("恒邦财险".equals(order.getInscompany())) {
  291. hengbangService.login();
  292. hengbangService.querySales();
  293. httpResult = hengbangService.queryPayStatus(licenseno, carowner, date, jqapplyno, syapplyno);
  294. } else if ("中煤财险".equals(order.getInscompany())) {
  295. OrderStatusHeadVO record = new OrderStatusHeadVO();
  296. String method = "OrderStatus";
  297. String zmUrl = environment.getProperty("ZMUrl");
  298. String url = zmUrl + method + ".do";
  299. order = insOrderService.selectZMByPk(orderno);
  300. JSONObject reptxt = order.getReptxt();
  301. Map<String, Object> reptxtmap = reptxt;
  302. Object orderNo = reptxtmap.get("orderNo");
  303. record.setOrderNo(orderNo.toString());
  304. HeadVO head = head(method);
  305. head.setToken(environment.getProperty("ZMToken"));
  306. record.setHead(head);
  307. String json = JSON.toJSONString(record);
  308. logger.info("queryPayStatus缴费确认接口入参" + json);
  309. String post = HttpsPostUtil.sendPost(url, json);
  310. if (post != null) {
  311. HeadMessage headMessage = HttpsPostUtil.HeadMessage(post);
  312. logger.info("queryPayStatus缴费确认接口返回结果:" + post);
  313. if (headMessage.getReturnCode().equals("0")) {
  314. JSONObject jsonObject = JSONObject.parseObject(post);
  315. Map<String, Object> map = jsonObject;
  316. String businessType = map.get("businessType").toString();
  317. String SubContractNoJ = null;//交强保单号
  318. String SubContractNoS = null;//商业保单号
  319. String status = map.get("status").toString();
  320. if ("2".equals(status)) {
  321. //当回调状态为承保成功时返回保单号,否则返回投保单号
  322. SubContractNoJ = map.get("subContractNoJ").toString();
  323. SubContractNoS = map.get("subContractNoS").toString();
  324. order.setJqpolicyno(SubContractNoJ);//交强保单号
  325. order.setSypolicyno(SubContractNoS);//商业保单号
  326. order.setOrderstatus("7");
  327. insOrderService.update(order);
  328. httpResult.setCode(200);
  329. httpResult.setMsg("已承保");
  330. } else {
  331. httpResult.setCode(201);
  332. httpResult.setMsg("未缴费");
  333. return httpResult;
  334. }
  335. } else {
  336. httpResult.setCode(201);
  337. httpResult.setMsg("获取订单信息失败!");
  338. return httpResult;
  339. }
  340. } else {
  341. httpResult.setCode(300);
  342. httpResult.setMsg("该保险公司暂不支持缴费查询!");
  343. }
  344. }
  345. return httpResult;
  346. }
  347. /**
  348. * 报价订单提交核保
  349. *
  350. * @param orderno
  351. * @return
  352. */
  353. @PostMapping(value = "/submitAudit")
  354. public HttpResult submitAudit(@RequestParam String orderno, @RequestParam String jqappoint, @RequestParam String syappoint) {
  355. SubmitHeadVO record = new SubmitHeadVO();
  356. DeliveryInfoVO deliveryInfo = new DeliveryInfoVO();
  357. InsOrder order = insOrderService.selectByPk(orderno);
  358. logger.error("报价订单提交核保入参" + orderno);
  359. if (order == null) {
  360. return HttpResult.error("订单不存在");
  361. }
  362. String zmStatus = null;
  363. String inscompany = order.getInscompany();
  364. String sp = null;
  365. // order.setOrderstatus("1");
  366. //匹配任务接收人
  367. String licenseno = order.getLicenseNo().substring(0, 2);
  368. List<InsOrderTask> list = insOrderTaskService.selectList(" where t.status='1' and t.insname=? and t.licenseno=? and t.orderstatus=?", new Object[]{order.getInscompany(), licenseno, "1"});
  369. if (list.size() > 0) {
  370. order.setAuditid(list.get(0).getAuditid());
  371. order.setAuditname(list.get(0).getAuditname());
  372. }
  373. //插入轨迹表
  374. InsTaskHistory history = new InsTaskHistory();
  375. history.setStatus("1");
  376. history.setRemark("提交核保");
  377. // order.setOrderstatus("1");
  378. String product = order.getProduct();
  379. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  380. if ("天安财险".equals(order.getInscompany())) {
  381. JSONObject result = tiananAPIService.insureApply(order);
  382. if ("1".equals(result.getString("dealFlag"))) {
  383. String busUnderWriteFlag = result.getString("busUnderWriteFlag"); //商业险核保状态
  384. //1:核保通过 2:核保不通过 3:自动核保通过 6:承保确认 9:待人工审核
  385. String bzUnderWriteFlag = result.getString("bzUnderWriteFlag"); //交强险核保状态
  386. String busProposalNo = result.getString("busProposalNo"); //商业险投保单号
  387. String bzProposalNo = result.getString("bzProposalNo");
  388. if ("单交强".equals(product) && "3".equals(bzUnderWriteFlag)) {
  389. order.setOrderstatus("5");
  390. order.setJqapplyno(bzProposalNo);
  391. order.setAuditid(null);
  392. order.setAuditname(null);
  393. history.setStatus("5");
  394. history.setRemark("自动核保通过");
  395. } else if ("单商业".equals(product) && "3".equals(busUnderWriteFlag)) {
  396. order.setOrderstatus("5");
  397. order.setSyapplyno(busProposalNo);
  398. order.setAuditid(null);
  399. order.setAuditname(null);
  400. history.setStatus("5");
  401. history.setRemark("自动核保通过");
  402. } else if ("3".equals(busUnderWriteFlag)) {
  403. order.setOrderstatus("5");
  404. order.setJqapplyno(bzProposalNo);
  405. order.setSyapplyno(busProposalNo);
  406. order.setAuditid(null);
  407. order.setAuditname(null);
  408. history.setStatus("5");
  409. history.setRemark("自动核保通过");
  410. } else if ("9".equals(busUnderWriteFlag)) {
  411. order.setOrderstatus("1"); //11 保司人工核保中
  412. order.setJqapplyno(bzProposalNo);
  413. order.setSyapplyno(busProposalNo);
  414. order.setAuditid(null);
  415. order.setAuditname(null);
  416. history.setStatus("1");
  417. history.setRemark("保司人工核保中");
  418. }
  419. } else if (!StringUtils.isEmpty(result.getString("dealFlag"))) {
  420. return HttpResult.error(result.getString("dealMassage"));
  421. } else {
  422. JSONObject resultDTO = result.getJSONObject("resultDTO");
  423. return HttpResult.error(resultDTO.getString("resultMess"));
  424. }
  425. }
  426. if (inscompany != null && inscompany.equals("中煤财险")) {
  427. if (order.getOrderstatus().equals("0")) {
  428. String underrules = "单交强,交强+三者,交强+商业,单三者,单商业,三者+交强,商业+交强";
  429. // 根据,(逗号)进行分割
  430. String[] split = underrules.split(",");
  431. for (int r = 0; r < split.length; r++) {
  432. sp = split[r];
  433. if (sp != null && sp.equals(order.getProduct())) {
  434. //获取请求方法名称
  435. InsOrder orders = insOrderService.selectZMByPk(orderno);
  436. //获取请求地址
  437. String zmUrl = environment.getProperty("ZMUrl");
  438. String CallbackUrl = environment.getProperty("CallbackUrl");//自动核保回调
  439. String RGCallbackUrl = environment.getProperty("RGCallbackUrl");//人工核保回调
  440. logger.error("获取自定义属性路径为:" + environment.getProperty("ZMUrl"));
  441. String url = zmUrl + "Submit.do";
  442. logger.error("请求地址为:" + url);
  443. // record.setOrderNo("140000");
  444. String name = null;
  445. String mobile = null;
  446. String addr = null;
  447. JSONObject reptxt = orders.getReptxt();
  448. Map<String, Object> reptxtmap = reptxt;
  449. JSONObject reqtxt = orders.getReqtxt();
  450. Map<String, Object> reqtxtmap = reqtxt;
  451. Object businessData = reqtxtmap.get("businessData");
  452. JSONObject businessDataObject = JSONObject.parseObject(businessData.toString());
  453. Map<String, Object> ownerInfomap = businessDataObject;
  454. Object customer = ownerInfomap.get("customer");
  455. JSONArray customerObject = JSONObject.parseArray(customer.toString());
  456. for (int i = 0; i < customerObject.size(); i++) {
  457. JSONObject customerList = customerObject.getJSONObject(i);
  458. String role = customerList.getString("role");
  459. if (role != null && role.equals("1")) {
  460. if (customerList.getString("name") != null && !customerList.getString("name").equals("")) {
  461. name = customerList.getString("name");
  462. mobile = customerList.getString("mobile");
  463. addr = customerList.getString("addr");
  464. }
  465. }
  466. }
  467. Object orderNo = reptxtmap.get("orderNo");
  468. Object vin = reptxtmap.get("vin");
  469. String method = "Submit";
  470. record.setOrderNo(orderNo.toString());
  471. record.setVIN(vin.toString());
  472. deliveryInfo.setName(name);
  473. deliveryInfo.setMobile(mobile);
  474. deliveryInfo.setProvince("140000");
  475. deliveryInfo.setCity("140400");
  476. deliveryInfo.setDistrict("140431");
  477. deliveryInfo.setDetail(addr);
  478. record.setPageUrl("**************");
  479. record.setCallbackUrl(CallbackUrl);
  480. record.setPassMsgUrl(RGCallbackUrl);
  481. record.setBusSrePcMAC("12-E1-AD-45-A2-65");
  482. record.setBusSrePcIP("47.92.254.66");
  483. //参数组装
  484. HeadVO head = head(method);
  485. head.setToken(environment.getProperty("ZMToken"));
  486. record.setHead(head);
  487. record.setDeliveryInfo(deliveryInfo);
  488. String json = JSON.toJSONString(record);
  489. logger.error("提交核保请求参数为:" + json);
  490. String post = HttpsPostUtil.sendPost(url, json);
  491. HeadMessage headMessages = HttpsPostUtil.HeadMessage(post);
  492. String returnCodes = headMessages.getReturnCode();
  493. logger.error("==========提交核保接口返回===========" + post);
  494. String proposalNo = null;
  495. if (returnCodes != null) {
  496. JSONObject proposalNojson = JSONObject.parseObject(post);
  497. if (proposalNojson.get("proposalNo") != null && !proposalNojson.get("proposalNo").toString().equals("")) {
  498. proposalNo = proposalNojson.get("proposalNo").toString();
  499. logger.error("获取到的主单号proposalNo为" + proposalNo);
  500. }
  501. HeadMessage headMessage = HttpsPostUtil.HeadMessage(post);
  502. String returnCode = headMessage.getReturnCode();
  503. Object forceProposalNo = null;
  504. Object bizProposalNo = null;
  505. if (proposalNojson.get("forceProposalNo") != null && !proposalNojson.get("forceProposalNo").equals("")) {
  506. forceProposalNo = proposalNojson.get("forceProposalNo");
  507. }
  508. if (proposalNojson.get("bizProposalNo") != null && !proposalNojson.get("bizProposalNo").equals("")) {
  509. bizProposalNo = proposalNojson.get("bizProposalNo");
  510. }
  511. if (forceProposalNo != null && !forceProposalNo.equals("")) {
  512. order.setJqapplyno(forceProposalNo.toString());//交强险投保单号
  513. }
  514. if (bizProposalNo != null && !bizProposalNo.equals("")) {
  515. order.setSyapplyno(bizProposalNo.toString());//商业险投保单号
  516. }
  517. if (proposalNo == null || proposalNo.equals("")) {
  518. logger.info("核保不成功,未获取到订单号");
  519. return HttpResult.error(202, headMessages.getReturnMessage());
  520. }
  521. SubmitStatusQueryHeadVO su = new SubmitStatusQueryHeadVO();
  522. su.setProposalNo(proposalNo);
  523. head = head("SubmitStatusQuery");
  524. su.setHead(head);
  525. url = zmUrl + "SubmitStatus" + ".do";
  526. logger.error("投保单核保状态查询请求地址" + url);
  527. su.setOrderNo(orderNo.toString());
  528. json = JSON.toJSONString(su);
  529. logger.error("投保单核保状态查询请求参数=" + json);
  530. post = HttpsPostUtil.sendPost(url, json);
  531. logger.error("投保单核保状态查询返回=" + post);
  532. headMessages = HttpsPostUtil.HeadMessage(post);
  533. returnCodes = headMessages.getReturnCode();
  534. if (returnCodes != null) {
  535. logger.info("保存订单号的投保单号" + orderno);
  536. JSONObject reqtext = JSONObject.parseObject(json);
  537. PayinfoVO payinfoVO = new PayinfoVO();
  538. logger.info("保存订单号的投保单号" + orderno);
  539. insOrderService.update(order);
  540. JSONObject jsonObject = JSONObject.parseObject(post);
  541. Map<String, Object> Status = jsonObject;
  542. //0报价中 1待核保 2已核保 3核保退回 4核保不通过 5已核保待缴费 6已缴费 7已承保 99已关闭
  543. //初始状态/核保通过/核保不通过/自动核保/拒保/复核通过/承保确认/复核不通过/待复核/待核保
  544. String underWriteInd = Status.get("underWriteInd").toString();
  545. String orderstatus = null;
  546. if (underWriteInd != null && !underWriteInd.equals("")) {
  547. payinfoVO.setReptxt(proposalNojson);
  548. payinfoVO.setReqtxt(reqtext);
  549. payinfoVO.setOrderno(orderno);
  550. payinfoVO.getOrderno();
  551. payinfoVO.setOrderno(orderno);
  552. payinfoVO.setPolicyNo(proposalNo);
  553. if (underWriteInd.equals("初始状态")) {
  554. orderstatus = "1";
  555. zmStatus = "1";
  556. } else if (underWriteInd.equals("核保通过")) {
  557. orderstatus = "5";
  558. zmStatus = "5";
  559. } else if (underWriteInd.equals("核保不通过")) {
  560. orderstatus = "1";
  561. zmStatus = "4";
  562. }/*else if(underWriteInd.equals("自动核保")){
  563. orderstatus="4";
  564. }*/ else if (underWriteInd.equals("拒保")) {
  565. orderstatus = "99";
  566. zmStatus = "99";
  567. } else if (underWriteInd.equals("复核通过")) {
  568. orderstatus = "1";
  569. zmStatus = "5";
  570. } else if (underWriteInd.equals("承保确认")) {
  571. orderstatus = "1";
  572. zmStatus = "1";
  573. } else if (underWriteInd.equals("复核不通过")) {
  574. orderstatus = "99";
  575. zmStatus = "99";
  576. } else if (underWriteInd.equals("待复核")) {
  577. orderstatus = "1";
  578. zmStatus = "1";
  579. } else if (underWriteInd.equals("待核保")) {
  580. orderstatus = "1";
  581. zmStatus = "1";
  582. } else if (underWriteInd.equals("自动核保")) {
  583. zmStatus = "5";
  584. }
  585. PayinfoVO payinfo = insOrderService.selectPayinfo(" where orderno=?", new Object[]{order.getOrderno()});
  586. if (payinfo == null) {
  587. insOrderService.insertPayinfo(payinfoVO);
  588. } else {
  589. insOrderService.updatePayinfo(payinfoVO);
  590. }
  591. order.setOrderno(orderno);
  592. order.setOrderstatus(orderstatus);
  593. //图片上传
  594. Integer result = 0;
  595. NodeBeanlistVO nodeBean = new NodeBeanlistVO();
  596. List<NodeBeanlistVO> nodeBeanList = new ArrayList<>();
  597. UploadImageHeadVO uploadHead = new UploadImageHeadVO();
  598. List<ImageBeanListVO> imgList = new ArrayList<>();
  599. String whereStr = "";
  600. ArrayList<String> arrayList = new ArrayList<String>();
  601. whereStr = " where taskid=?";
  602. arrayList.add(orderno);
  603. List<InsTaskImage> reimgList = insTaskImageService.selectList(whereStr.toString(), arrayList.toArray());
  604. if (reimgList != null && reimgList.size() > 0) {
  605. for (int i = 0; i < reimgList.size(); i++) {
  606. ImageBeanListVO imgVO = new ImageBeanListVO();
  607. InsTaskImage reimg = reimgList.get(i);
  608. if (reimg != null) {
  609. logger.error("reimg=" + reimg.getTaskid());
  610. if (reimg.getTaskid() == null || reimg.getTaskid().equalsIgnoreCase("")) {
  611. return HttpResult.ok("任务号taskid不能为空", result);
  612. }
  613. if (reimg.getImgtype() == null || reimg.getImgtype().equalsIgnoreCase("")) {
  614. return HttpResult.ok("图片类型imgtype不能为空", result);
  615. }
  616. reimg.setId(IdGenerate.nextId());
  617. nodeBean.setId(reimg.getId());
  618. String fileType = Base64Utils.checkImageBase64Format(reimg.getImage());
  619. reimg.setCreator(getUserName());
  620. imgVO.setFileName(HeadUtils.get16UUID() + "." + fileType);
  621. reimg.setCreatetime(new Date());
  622. // 通过base64来转化图片
  623. String data = reimg.getImage().substring(reimg.getImage().indexOf(",") + 1);
  624. imgVO.setImage(data);
  625. if (reimg.getImgtype() != null && reimg.getImgtype().equals("C01")) {
  626. nodeBean.setId("UW_0305");
  627. } else if (reimg.getImgtype() != null && reimg.getImgtype().equals("C03")) {
  628. nodeBean.setId("UW_0302");
  629. } else if (reimg.getImgtype() != null && reimg.getImgtype().equals("C05")) {
  630. nodeBean.setId("UW_0301");
  631. } else {
  632. nodeBean.setId("UW_0301");
  633. }
  634. if (reimg.getImgtype() != null && reimg.getImgtype().equals("C01")) {
  635. nodeBean.setId("UW_0305");
  636. } else if (reimg.getImgtype() != null && reimg.getImgtype().equals("C03")) {
  637. nodeBean.setId("UW_0302");
  638. } else if (reimg.getImgtype() != null && reimg.getImgtype().equals("C05")) {
  639. nodeBean.setId("UW_0301");
  640. }
  641. }
  642. imgList.add(imgVO);
  643. nodeBean.setImageBeanList(imgList);
  644. }
  645. method = "UploadImage";
  646. zmUrl = environment.getProperty("ZMIMGUrl");
  647. url = zmUrl + method + ".do";
  648. HeadVO heads = head(method);
  649. nodeBeanList.add(nodeBean);
  650. uploadHead.setHead(heads);
  651. uploadHead.setContractNo(su.getProposalNo());
  652. uploadHead.setNodeBeanlist(nodeBeanList);
  653. String jsons = JSON.toJSONString(uploadHead);
  654. String postimg = HttpsPostUtil.sendPost(url, jsons);
  655. logger.info("图片信息上传返回" + postimg);
  656. }
  657. }
  658. }
  659. } else {
  660. return HttpResult.error(202, headMessages.getReturnMessage());
  661. }
  662. }
  663. }
  664. } else {
  665. return HttpResult.error("请不要重复提交核保操作");
  666. }
  667. }
  668. if (zmStatus != null && zmStatus.equals("5")) {
  669. order.setOrderstatus(zmStatus);
  670. } else if (zmStatus != null && !zmStatus.equals("5")) {
  671. order.setOrderstatus("1");
  672. }
  673. order.setSubmittime(sdf.format(new Date()));
  674. if (zmStatus != null && zmStatus.equals("5")) {
  675. order.setJqappoint(jqappoint); //交强特别约定
  676. order.setSyappoint(syappoint); //商业特别约定
  677. }
  678. order.setSubmittime(sdf.format(new Date()));
  679. order.setJqappoint(jqappoint); //交强特别约定
  680. order.setSyappoint(syappoint); //商业特别约定
  681. insOrderService.update(order);
  682. history.setId(String.valueOf(new Date().getTime()));
  683. history.setCompany(order.getInscompany());
  684. history.setTaskid(order.getOrderno());
  685. history.setOperatorid(order.getUserid());
  686. history.setOperator(order.getUsername());
  687. history.setCreatetime(sdf.format(new Date()));
  688. if (inscompany != null && inscompany.equals("中煤财险")) {
  689. if (zmStatus != null && zmStatus.equals("5")) {
  690. history.setId(String.valueOf(new Date().getTime() + 10000));
  691. history.setStatus("2");
  692. history.setRemark("已核保");
  693. insTaskHistoryService.insert(history);
  694. history.setId(String.valueOf(new Date().getTime() + 20000));
  695. history.setStatus(zmStatus);
  696. history.setRemark("已核保待缴费");
  697. } else if (zmStatus != null && !zmStatus.equals("5")) {
  698. history.setId(String.valueOf(new Date().getTime() + 10000));
  699. history.setStatus("1");
  700. history.setRemark("已核保");
  701. insTaskHistoryService.insert(history);
  702. history.setRemark("人工核保");
  703. history.setId(String.valueOf(new Date().getTime() + 20000));
  704. } else {
  705. history.setStatus("1");
  706. history.setRemark("提交核保");
  707. }
  708. }
  709. insTaskHistoryService.insert(history);
  710. if (history.getRemark().equals("人工核保")) {
  711. return HttpResult.ok("核保未通过,请人工核保");
  712. }
  713. return HttpResult.ok("提交成功");
  714. }
  715. /**
  716. * 更新订单信息
  717. *
  718. * @param insOrder
  719. * @return
  720. */
  721. @PostMapping(value = "/updateOrder")
  722. public HttpResult updateOrder(@RequestBody InsOrder insOrder) {
  723. InsOrder order = insOrderService.selectByPk(insOrder.getOrderno());
  724. if (order == null) {
  725. return HttpResult.error("订单不存在");
  726. }
  727. insOrderService.update(insOrder);
  728. return HttpResult.ok("修改成功");
  729. }
  730. /**
  731. * 新增订单信息
  732. *
  733. * @param insOrder
  734. * @return
  735. */
  736. @PostMapping(value = "/addOrder")
  737. public HttpResult addOrder(@RequestBody InsOrder insOrder) {
  738. HttpResult httpResult = new HttpResult();
  739. // InsOrder insOrder = new InsOrder();
  740. // BeanUtils.copyProperties(insOrderVO, insOrder);
  741. List<EsmAgreement> agreements = esmAgreementService.selectList(" where t.agreestatus='1' and t.id = ? " + "and exists (select 1 from esm_agreement_prod t2 where t.id=t2.agreeid and t2.authcomcode like ?)", new Object[]{insOrder.getAgreeid(), "%" + insOrder.getDeptid() + "%"});
  742. if (agreements.size() == 0) {
  743. httpResult.setCode(1000);
  744. httpResult.setMsg("不存在有效协议或机构" + insOrder.getDeptid() + "未授权");
  745. return httpResult;
  746. }
  747. String orderno = IdGenerate.nextId();
  748. String quoteno = String.valueOf(new Date().getTime());
  749. insOrder.setOrderno(orderno);
  750. insOrder.setQuoteno(quoteno);
  751. insOrder.setOrderstatus("7");
  752. insOrder.setQuotestatus("1");
  753. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  754. insOrder.setCreatetime(sdf.format(new Date()));
  755. insOrder.setSubmittime(sdf.format(new Date()));
  756. insOrder.setAudittime(sdf.format(new Date()));
  757. insOrderService.insert(insOrder);
  758. //保存费用信息
  759. saveFeeDetail(insOrder);
  760. //插入轨迹表
  761. InsTaskHistory history = new InsTaskHistory();
  762. history.setId(String.valueOf(new Date().getTime()));
  763. history.setCompany(insOrder.getInscompany());
  764. history.setTaskid(insOrder.getOrderno());
  765. history.setOperatorid(insOrder.getAuditid());
  766. history.setOperator(insOrder.getAuditname());
  767. history.setCreatetime(sdf.format(new Date()));
  768. history.setStatus("7");
  769. history.setRemark("手工录单");
  770. insTaskHistoryService.insert(history);
  771. return HttpResult.ok("保存成功");
  772. }
  773. /**
  774. * 指定核保人
  775. *
  776. * @param ordernos
  777. * @return
  778. */
  779. @PostMapping(value = "/saveUser")
  780. public HttpResult saveUser(@RequestParam String ordernos, @RequestParam String operatorid, @RequestParam String auditid, @RequestParam String auditname) {
  781. String[] list = ordernos.split(",");
  782. for (String orderNo : list) {
  783. InsOrder order = insOrderService.selectByPk(orderNo);
  784. if (order == null) {
  785. return HttpResult.error("订单不存在");
  786. }
  787. //插入轨迹表
  788. InsTaskHistory history = new InsTaskHistory();
  789. history.setId(String.valueOf(new Date().getTime()));
  790. history.setCompany(order.getInscompany());
  791. history.setTaskid(order.getOrderno());
  792. history.setOperatorid(operatorid);
  793. history.setOperator(getUserName());
  794. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  795. history.setCreatetime(sdf.format(new Date()));
  796. history.setStatus(order.getOrderstatus());
  797. history.setRemark("任务转发给:" + auditname);
  798. insTaskHistoryService.insert(history);
  799. order.setAuditid(auditid);
  800. order.setAuditname(auditname);
  801. insOrderService.update(order);
  802. }
  803. return HttpResult.ok("保存成功");
  804. }
  805. /**
  806. * 核保审核
  807. *
  808. * @param orderVo
  809. * @return
  810. */
  811. @PostMapping(value = "/saveAudit")
  812. public HttpResult saveAudit(@RequestBody OrderVo orderVo) {
  813. HttpResult httpResult = new HttpResult();
  814. InsOrder order = insOrderService.selectByPk(orderVo.getOrderno());
  815. if (order == null) {
  816. return HttpResult.error("订单不存在");
  817. }
  818. if ("5".equals(orderVo.getOrderstatus())) {
  819. if (StringUtils.isEmpty(orderVo.getJqapplyno()) && StringUtils.isEmpty(orderVo.getSyapplyno())) {
  820. return HttpResult.error("投保为空单号不能");
  821. }
  822. String whereStr = "";
  823. ArrayList<String> arrayList = new ArrayList<>();
  824. if (!StringUtils.isEmpty(orderVo.getJqapplyno()) && StringUtils.isEmpty(orderVo.getSyapplyno())) {
  825. whereStr = " where (jqapplyno in (?) or syapplyno in (?)) and orderstatus<>'99'";
  826. arrayList.add(orderVo.getJqapplyno());
  827. arrayList.add(orderVo.getJqapplyno());
  828. } else if (StringUtils.isEmpty(orderVo.getJqapplyno()) && !StringUtils.isEmpty(orderVo.getSyapplyno())) {
  829. whereStr = " where (jqapplyno in (?) or syapplyno in (?)) and orderstatus<>'99'";
  830. arrayList.add(orderVo.getSyapplyno());
  831. arrayList.add(orderVo.getSyapplyno());
  832. } else {
  833. whereStr = " where (jqapplyno in (?,?) or syapplyno in (?,?)) and orderstatus<>'99'";
  834. arrayList.add(orderVo.getJqapplyno());
  835. arrayList.add(orderVo.getSyapplyno());
  836. arrayList.add(orderVo.getJqapplyno());
  837. arrayList.add(orderVo.getSyapplyno());
  838. }
  839. List<InsOrder> list = insOrderService.selectList(whereStr, arrayList.toArray());
  840. if (list != null && list.size() > 0) {
  841. return HttpResult.error("投保单号已存在!");
  842. }
  843. //判断投保单号是否存在
  844. String applyNos = "";
  845. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  846. String date = format.format(new Date());
  847. // String date = "2021-04-12";
  848. String licenseno = order.getLicenseNo();
  849. String carowner = order.getInsuredname();
  850. if ("华农财险".equals(order.getInscompany())) {
  851. huanongService.login();
  852. huanongService.querySales();
  853. applyNos = huanongService.queryApplyno(licenseno, date);
  854. } else if ("恒邦财险".equals(order.getInscompany())) {
  855. hengbangService.login();
  856. hengbangService.querySales();
  857. applyNos = hengbangService.queryApplyno(licenseno, carowner, date);
  858. }
  859. if (applyNos.length() == 0) {
  860. httpResult.setCode(201);
  861. httpResult.setMsg("通过车牌号获取保险公司订单信息失败!");
  862. return httpResult;
  863. }
  864. String[] array = applyNos.split(",");
  865. boolean flag = false;
  866. for (String applyNo : array) {
  867. if (applyNo.equals(orderVo.getJqapplyno()) || applyNo.equals(orderVo.getSyapplyno())) {
  868. flag = true;
  869. break;
  870. }
  871. }
  872. if (!flag) {
  873. httpResult.setCode(202);
  874. httpResult.setMsg("输入投保单号不正确!保险公司返回投保单号为 " + applyNos);
  875. return httpResult;
  876. }
  877. }
  878. //0报价中 1待核保 2已核保 3核保退回 4核保不通过 5已核保待缴费 6已缴费 7已承保 99已关闭
  879. order.setOrderstatus(orderVo.getOrderstatus());
  880. order.setAuditopinion(orderVo.getAuditopinion());
  881. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  882. order.setAudittime(sdf.format(new Date()));
  883. order.setOrderstatus(orderVo.getOrderstatus());
  884. order.setJqapplyno(orderVo.getJqapplyno());
  885. order.setSyapplyno(orderVo.getSyapplyno());
  886. insOrderService.update(order);
  887. //插入轨迹表
  888. InsTaskHistory history = new InsTaskHistory();
  889. history.setId(String.valueOf(new Date().getTime()));
  890. history.setCompany(order.getInscompany());
  891. history.setTaskid(order.getOrderno());
  892. history.setOperatorid(order.getAuditid());
  893. history.setOperator(order.getAuditname());
  894. history.setCreatetime(sdf.format(new Date()));
  895. history.setStatus(orderVo.getOrderstatus());
  896. history.setRemark("核保审核");
  897. insTaskHistoryService.insert(history);
  898. return HttpResult.ok("保存成功");
  899. }
  900. /**
  901. * 保存支付方式
  902. *
  903. * @param orderVo
  904. * @return
  905. */
  906. @PostMapping(value = "/savePayType")
  907. public HttpResult savePayType(@RequestBody OrderPayVo orderVo) {
  908. InsOrder order = insOrderService.selectByPk(orderVo.getOrderno());
  909. if (order == null) {
  910. return HttpResult.error("订单不存在");
  911. }
  912. //0报价中 1待核保 2已核保 3核保退回 4核保不通过 5已核保待缴费 6已缴费 7已承保 99已关闭
  913. order.setOrderstatus("5");
  914. order.setPaytype(orderVo.getPaytype());
  915. order.setPolicytype(orderVo.getPolicytype());
  916. order.setMailtype(orderVo.getMailtype());
  917. order.setMailaddress(orderVo.getMailaddress());
  918. order.setBilltype(orderVo.getBilltype());
  919. order.setReceiptname(orderVo.getReceiptname());
  920. order.setReceiptphone(orderVo.getReceiptphone());
  921. //匹配任务接收人
  922. String licenseno = order.getLicenseNo().substring(0, 2);
  923. List<InsOrderTask> list = insOrderTaskService.selectList(" where t.status='1' and t.insname=? and t.licenseno=? and t.orderstatus=?", new Object[]{order.getInscompany(), licenseno, "5"});
  924. if (list.size() > 0) {
  925. order.setAuditid(list.get(0).getAuditid());
  926. order.setAuditname(list.get(0).getAuditname());
  927. } else {
  928. order.setAuditid("");
  929. order.setAuditname("");
  930. }
  931. insOrderService.update(order);
  932. //插入轨迹表
  933. InsTaskHistory history = new InsTaskHistory();
  934. history.setId(String.valueOf(new Date().getTime()));
  935. history.setCompany(order.getInscompany());
  936. history.setTaskid(order.getOrderno());
  937. history.setOperatorid(order.getUserid());
  938. history.setOperator(order.getUsername());
  939. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  940. history.setCreatetime(sdf.format(new Date()));
  941. history.setStatus("5");
  942. history.setRemark("保存支付方式");
  943. insTaskHistoryService.insert(history);
  944. return HttpResult.ok("保存成功");
  945. }
  946. /**
  947. * 缴费确认
  948. *
  949. * @param orderVo
  950. * @return
  951. */
  952. @PostMapping(value = "/savePayment")
  953. public HttpResult savePayment(@RequestBody OrderPaymentVo orderVo) {
  954. HttpResult httpResult = new HttpResult();
  955. InsOrder order = insOrderService.selectByPk(orderVo.getOrderno());
  956. if (order == null) {
  957. return HttpResult.error("订单不存在");
  958. }
  959. if ("中煤财险".equals(order.getInscompany())) {
  960. OrderStatusHeadVO record = new OrderStatusHeadVO();
  961. String method = "OrderStatus";
  962. String zmUrl = environment.getProperty("ZMUrl");
  963. String url = zmUrl + method + ".do";
  964. order = insOrderService.selectZMByPk(order.getOrderno());
  965. JSONObject reptxt = order.getReptxt();
  966. Map<String, Object> reptxtmap = reptxt;
  967. Object orderNo = reptxtmap.get("orderNo");
  968. record.setOrderNo(orderNo.toString());
  969. HeadVO head = head(method);
  970. head.setToken(environment.getProperty("ZMToken"));
  971. record.setHead(head);
  972. String json = JSON.toJSONString(record);
  973. logger.info("缴费确认接口入参" + json);
  974. String post = HttpsPostUtil.sendPost(url, json);
  975. if (post != null) {
  976. HeadMessage headMessage = HttpsPostUtil.HeadMessage(post);
  977. logger.info("缴费确认接口返回结果:" + post);
  978. if (headMessage.getReturnCode().equals("0")) {
  979. JSONObject jsonObject = JSONObject.parseObject(post);
  980. Map<String, Object> map = jsonObject;
  981. String businessType = map.get("businessType").toString();
  982. String SubContractNoJ = null;//交强保单号
  983. String SubContractNoS = null;//商业保单号
  984. //当回调状态为承保成功时返回保单号,否则返回投保单号
  985. String status = map.get("status").toString();
  986. if (status != null && status.equals("2") && order.getPaytime() != null) {
  987. if (map.get("SubContractNoJ") != null && !map.get("SubContractNoJ").equals("")) {
  988. SubContractNoJ = map.get("SubContractNoJ").toString();
  989. SubContractNoS = map.get("SubContractNoJ").toString();
  990. }
  991. if (businessType != null && businessType.equals("P")) {
  992. order.setJqpolicyno(SubContractNoJ);//交强保单号
  993. order.setSypolicyno(SubContractNoS);//商业保单号
  994. insOrderService.update(order);
  995. } else {
  996. return HttpResult.error(201, "未缴费");
  997. }
  998. } else {
  999. return HttpResult.error(201, "未缴费");
  1000. }
  1001. } else {
  1002. return HttpResult.error(201, "通过车牌号获取中煤订单信息失败!");
  1003. }
  1004. } else {
  1005. httpResult.setCode(300);
  1006. httpResult.setMsg("该保险公司暂不支持缴费查询!");
  1007. }
  1008. }
  1009. //0报价中 1待核保 2已核保 3核保退回 4核保不通过 5已核保待缴费 6已缴费 7已承保 99已关闭
  1010. order.setOrderstatus("6");
  1011. order.setFeemodel(orderVo.getFeemodel());
  1012. order.setPaymenttype(orderVo.getPaymenttype());
  1013. order.setJqpayamount(orderVo.getJqpayamount());
  1014. order.setSypayamount(orderVo.getSypayamount());
  1015. order.setTaxpayamount(orderVo.getTaxpayamount());
  1016. order.setCommissionflag(orderVo.getCommissionflag());
  1017. order.setFeeflag(orderVo.getFeeflag());
  1018. String auditname = order.getAuditname();
  1019. String auditid = order.getAuditid();
  1020. //匹配任务接收人
  1021. String licenseno = order.getLicenseNo().substring(0, 2);
  1022. List<InsOrderTask> list = insOrderTaskService.selectList(" where t.status='1' and t.insname=? and t.licenseno=? and t.orderstatus=?", new Object[]{order.getInscompany(), licenseno, "7"});
  1023. if (list.size() > 0) {
  1024. order.setAuditid(list.get(0).getAuditid());
  1025. order.setAuditname(list.get(0).getAuditname());
  1026. } else {
  1027. order.setAuditid("");
  1028. order.setAuditname("");
  1029. }
  1030. insOrderService.update(order);
  1031. //插入轨迹表
  1032. InsTaskHistory history = new InsTaskHistory();
  1033. history.setId(String.valueOf(new Date().getTime()));
  1034. history.setCompany(order.getInscompany());
  1035. history.setTaskid(order.getOrderno());
  1036. history.setOperatorid(auditid);
  1037. history.setOperator(auditname);
  1038. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1039. history.setCreatetime(sdf.format(new Date()));
  1040. history.setStatus("6");
  1041. history.setRemark("缴费确认");
  1042. insTaskHistoryService.insert(history);
  1043. return HttpResult.ok("保存成功");
  1044. }
  1045. /**
  1046. * 承保确认
  1047. *
  1048. * @param orderVo
  1049. * @return
  1050. */
  1051. @PostMapping(value = "/savePolicy")
  1052. public HttpResult savePolicy(@RequestBody OrderVo orderVo) {
  1053. InsOrder order = insOrderService.selectByPk(orderVo.getOrderno());
  1054. if (order == null) {
  1055. return HttpResult.error("订单不存在");
  1056. }
  1057. //0报价中 1待核保 2已核保 3核保退回 4核保不通过 5已核保待缴费 6已缴费 7已承保 99已关闭
  1058. order.setOrderstatus("7");
  1059. order.setCouriercompany(orderVo.getCouriercompany());
  1060. order.setCourierno(orderVo.getCourierno());
  1061. order.setJqpolicyno(orderVo.getJqpolicyno());
  1062. order.setSypolicyno(orderVo.getSypolicyno());
  1063. order.setDirid(orderVo.getDirid());
  1064. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1065. order.setAudittime(sdf.format(new Date())); //承保确认时间
  1066. insOrderService.update(order);
  1067. //保存费用信息
  1068. saveFeeDetail(order);
  1069. //插入轨迹表
  1070. InsTaskHistory history = new InsTaskHistory();
  1071. history.setId(String.valueOf(new Date().getTime()));
  1072. history.setCompany(order.getInscompany());
  1073. history.setTaskid(order.getOrderno());
  1074. history.setOperatorid(order.getAuditid());
  1075. history.setOperator(order.getAuditname());
  1076. history.setCreatetime(sdf.format(new Date()));
  1077. history.setStatus("7");
  1078. history.setRemark("承保确认");
  1079. insTaskHistoryService.insert(history);
  1080. return HttpResult.ok("保存成功");
  1081. }
  1082. /**
  1083. * 保存费用明细
  1084. *
  1085. * @param order
  1086. */
  1087. public void saveFeeDetail(InsOrder order) {
  1088. InsFeeDetail feeDetail = new InsFeeDetail();
  1089. feeDetail.setOrderno(order.getOrderno());
  1090. feeDetail.setQuoteno(order.getQuoteno());
  1091. feeDetail.setFeerate(order.getFeerate()); //交强手续费比例
  1092. feeDetail.setDisrate(order.getDisrate()); //商业手续费比例
  1093. BigDecimal jqfee = new BigDecimal(order.getJqpremium() * order.getFeerate() * 0.01);
  1094. jqfee = jqfee.setScale(2, BigDecimal.ROUND_HALF_UP);
  1095. feeDetail.setFeeamount(jqfee.doubleValue()); //交强手续费
  1096. BigDecimal syfee = new BigDecimal(order.getSypremium() * order.getDisrate() * 0.01);
  1097. syfee = syfee.setScale(2, BigDecimal.ROUND_HALF_UP);
  1098. feeDetail.setDisamount(syfee.doubleValue()); //商业手续费
  1099. feeDetail.setJqdiscountrate(order.getJqdiscountrate());
  1100. feeDetail.setSydiscountrate(order.getSydiscountrate());
  1101. BigDecimal jqDiscount = new BigDecimal(order.getJqpremium() * order.getJqdiscountrate() * 0.01);
  1102. jqDiscount = jqDiscount.setScale(2, BigDecimal.ROUND_HALF_UP);
  1103. feeDetail.setJqdiscount(jqDiscount.doubleValue()); //交强优惠金额
  1104. BigDecimal syDiscount = new BigDecimal(order.getSypremium() * order.getSydiscountrate() * 0.01);
  1105. syDiscount = syDiscount.setScale(2, BigDecimal.ROUND_HALF_UP);
  1106. feeDetail.setSydiscount(syDiscount.doubleValue()); //商业优惠金额
  1107. feeDetail.setJqpremium(order.getJqpremium());
  1108. feeDetail.setSypremium(order.getSypremium());
  1109. feeDetail.setTaxamount(order.getTaxamount());
  1110. feeDetail.setSumpremium(order.getSumpremium());
  1111. feeDetail.setInscompany(order.getInscompany());
  1112. feeDetail.setAgreeid(order.getAgreeid());
  1113. feeDetail.setAgreeprodid(order.getProductid());
  1114. EsmAgreement esmAgreement = esmAgreementService.selectByPk(order.getAgreeid());
  1115. if (esmAgreement != null) {
  1116. feeDetail.setAgreementcode(esmAgreement.getAgreementcode());
  1117. feeDetail.setAgreetype(esmAgreement.getAgreementtype());
  1118. feeDetail.setChannel(esmAgreement.getChannel());
  1119. }
  1120. feeDetail.setProducname(order.getProduct());
  1121. feeDetail.setAuditstatus("0"); //0未审核 1已审核
  1122. Integer insFeeDetail = insFeeDetailService.count(" where orderno=? ", new Object[]{feeDetail.getOrderno()});
  1123. if (insFeeDetail > 0) {
  1124. Integer fel = insFeeDetailService.delete(order.getOrderno());
  1125. } else {
  1126. insFeeDetailService.insert(feeDetail);
  1127. }
  1128. //机构费用
  1129. InsDeptFee deptFee = new InsDeptFee();
  1130. deptFee.setOrderno(order.getOrderno());
  1131. deptFee.setQuoteno(order.getQuoteno());
  1132. deptFee.setAgreeid(order.getAgreeid());
  1133. deptFee.setAgreeprodid(order.getProductid());
  1134. deptFee.setAuditstatus("0");
  1135. deptFee.setSettlestatus("0");
  1136. Integer insDeptFee = insDeptFeeService.count(" where orderno=? ", new Object[]{deptFee.getOrderno()});
  1137. if (insDeptFee > 0) {
  1138. Integer fiel = insDeptFeeService.delete(deptFee.getOrderno());
  1139. }
  1140. List<EsmAgreementProdfee> prodfees = esmAgreementProdfeeService.selectList(" where agreeprodid=?", new Object[]{order.getProductid()});
  1141. for (EsmAgreementProdfee prodfee : prodfees) {
  1142. deptFee.setKeeprate(prodfee.getKeeprate() * 0.01);
  1143. BigDecimal amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * prodfee.getKeeprate() * 0.01);
  1144. amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
  1145. deptFee.setKeepamount(amount.doubleValue());
  1146. deptFee.setAddrate(prodfee.getAddrate() * 0.01);
  1147. amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * prodfee.getAddrate() * 0.01);
  1148. amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
  1149. deptFee.setAddamount(amount.doubleValue());
  1150. deptFee.setComlevel(prodfee.getComlevel());
  1151. if ("一级".equals(prodfee.getComlevel())) {
  1152. deptFee.setComcode(order.getDeptid().substring(0, 2)); //99140302M01D01
  1153. } else if ("二级".equals(prodfee.getComlevel())) {
  1154. deptFee.setComcode(order.getDeptid().substring(0, 4));
  1155. } else if ("三级".equals(prodfee.getComlevel())) {
  1156. deptFee.setComcode(order.getDeptid().substring(0, 6));
  1157. } else if ("四级".equals(prodfee.getComlevel())) {
  1158. deptFee.setComcode(order.getDeptid().substring(0, 8));
  1159. } else {
  1160. deptFee.setComcode(order.getDeptid().substring(0, 11));
  1161. }
  1162. insDeptFeeService.insert(deptFee);
  1163. }
  1164. saveRetail(order); //分销所占比例
  1165. }
  1166. /**
  1167. * 三级分销费用保存
  1168. *
  1169. * @param order
  1170. * @return
  1171. */
  1172. public double saveRetail(InsOrder order) {
  1173. double retailRate = 0;
  1174. //1、根据机构匹配分销规则,获取分销比例
  1175. List<EsmRetail> list = esmRetailService.selectList(" where deptid = ? and status=?", new Object[]{order.getDeptid(), "1"});
  1176. //2、根据userid查询三级推荐人
  1177. List<SysUser> users = esmUserInternalService.getSuperior(order.getUserid());
  1178. if (list != null && list.size() > 0 && users.size() > 0 && !"0".equals(list.get(0).getRetailtype())) {
  1179. EsmRetail retail = list.get(0);
  1180. List<Double> rateList = new ArrayList<Double>();
  1181. rateList.add(retail.getDisrate1());
  1182. rateList.add(retail.getDisrate2());
  1183. rateList.add(retail.getDisrate3());
  1184. Integer count = insCommissionService.count(" where orderno=? ", new Object[]{order.getOrderno()});
  1185. if (count > 0) {
  1186. Integer comm = insCommissionService.delete(order.getOrderno());
  1187. }
  1188. if ("1".equals(retail.getRetailtype())) {//一级分销
  1189. InsCommission commission = new InsCommission();
  1190. commission.setOrderno(order.getOrderno());
  1191. commission.setQuoteno(order.getQuoteno());
  1192. commission.setRefereescode(users.get(0).getId());
  1193. commission.setRefereesname(users.get(0).getName());
  1194. double rate = rateList.get(0) * 0.01;
  1195. commission.setCommissionrate(rate);
  1196. BigDecimal amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * rate);
  1197. amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
  1198. commission.setCommissionamount(amount.doubleValue());
  1199. commission.setLevel("1");
  1200. commission.setAuditstatus("0"); //0未审核 1已审核
  1201. commission.setSettlestatus("0"); //0未结算 1已结算
  1202. commission.setInsuredtime(order.getAudittime()); //承保确认时间
  1203. insCommissionService.insert(commission);
  1204. retailRate += rateList.get(0);
  1205. } else if ("2".equals(retail.getRetailtype())) {//二级分销
  1206. int num = users.size() > 2 ? 2 : users.size();
  1207. for (int i = 0; i < num; i++) {
  1208. InsCommission commission = new InsCommission();
  1209. commission.setOrderno(order.getOrderno());
  1210. commission.setQuoteno(order.getQuoteno());
  1211. commission.setRefereescode(users.get(i).getId());
  1212. commission.setRefereesname(users.get(i).getName());
  1213. double rate = rateList.get(i) * 0.01;
  1214. commission.setCommissionrate(rate);
  1215. BigDecimal amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * rate);
  1216. amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
  1217. commission.setCommissionamount(amount.doubleValue());
  1218. commission.setLevel(String.valueOf(i + 1));
  1219. commission.setAuditstatus("0"); //0未审核 1已审核
  1220. commission.setSettlestatus("0"); //0未结算 1已结算
  1221. commission.setInsuredtime(order.getAudittime()); //承保确认时间
  1222. insCommissionService.insert(commission);
  1223. retailRate += rateList.get(i);
  1224. }
  1225. } else {//三级分销
  1226. int num = users.size() > 2 ? 3 : users.size();
  1227. for (int i = 0; i < num; i++) {
  1228. InsCommission commission = new InsCommission();
  1229. commission.setOrderno(order.getOrderno());
  1230. commission.setQuoteno(order.getQuoteno());
  1231. commission.setRefereescode(users.get(i).getId());
  1232. commission.setRefereesname(users.get(i).getName());
  1233. double rate = rateList.get(i) * 0.01;
  1234. commission.setCommissionrate(rate);
  1235. BigDecimal amount = new BigDecimal((order.getJqpremium() + order.getSypremium()) * rate);
  1236. amount = amount.setScale(2, BigDecimal.ROUND_HALF_UP);
  1237. commission.setCommissionamount(amount.doubleValue());
  1238. commission.setLevel(String.valueOf(i + 1));
  1239. commission.setAuditstatus("0"); //0未审核 1已审核
  1240. commission.setSettlestatus("0"); //0未结算 1已结算
  1241. commission.setInsuredtime(order.getAudittime()); //承保确认时间
  1242. insCommissionService.insert(commission);
  1243. retailRate += rateList.get(i);
  1244. }
  1245. }
  1246. }
  1247. return retailRate;
  1248. }
  1249. /**
  1250. * 根据报价单号关闭订单
  1251. *
  1252. * @param quoteno
  1253. * @return
  1254. */
  1255. @PostMapping(value = "/closeOrder")
  1256. public HttpResult closeOrder(@RequestParam String quoteno) {
  1257. //0报价中 1待核保 2已核保 3核保退回 4核保不通过 5已核保待缴费 6已缴费 7已承保 99已关闭
  1258. insOrderService.closeOrder(quoteno, "99");
  1259. return HttpResult.ok("保存成功");
  1260. }
  1261. /**
  1262. * 查询订单历史轨迹
  1263. *
  1264. * @param orderno
  1265. * @return
  1266. */
  1267. @PostMapping(value = "/queryOrderHistory")
  1268. public HttpResult<List<InsTaskHistory>> queryOrderHistory(@RequestParam String orderno) {
  1269. HttpResult<List<InsTaskHistory>> result = new HttpResult<>();
  1270. List<InsTaskHistory> list = insTaskHistoryService.selectList(" where t.taskid=? order by createtime", new Object[]{orderno});
  1271. result.setData(list);
  1272. return result;
  1273. }
  1274. public HeadVO head(String methodName) {
  1275. HeadVO headVO = new HeadVO();
  1276. headVO.setTransCode(methodName);
  1277. headVO.setTransType("Req");
  1278. //测试
  1279. // headVO.setToken("THIRDSCOuloft2020052818346904zmYBSX");
  1280. //生产
  1281. headVO.setToken(environment.getProperty("ZMToken"));
  1282. headVO.setSource("326");
  1283. return headVO;
  1284. }
  1285. }