package com.saye.hrs.commons.webservice; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import com.saye.hrs.commons.string.StringDUtil; import com.saye.hrs.dto.*; import com.saye.hrs.model.StatusDefine; import com.saye.hrs.vo.FeeInfoDetailVO; import com.saye.hrs.vo.FeeInfoVO; import com.saye.hrs.vo.MZJSPreDetailVO; import com.saye.hrs.vo.MZJSPreVO; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.*; import org.springframework.web.client.RestTemplate; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; public class OtherWSUtil { private static final Logger logger = LoggerFactory.getLogger(OtherWSUtil.class); public static RestTemplate restTemplate = new RestTemplate(); static HttpHeaders headers; static { headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); } // private static final String url="http://168.168.0.213:8081/WebService1.asmx"; private static final String url="http://218.84.202.146:8081/webService1.asmx"; /** * 调用webservice接口 其他接口 */ public static Result> getPatientFeeInfo(PatientFeeQuery reqDTO) { String patid = reqDTO.getPatid(); logger.info("请求参数----------patid:"+patid); String errCode="0"; String errMsg=""; Result> resultObj=null; try { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("text/xml;charset=UTF-8"); // 请求类型ContentType text/xml;charset=UTF-8 headers.setContentType(type); //请求数据体 String soapRequestData = "" + "" + "" + "" + "" + patid + "" + "" + "" + ""; // 请求 HttpEntity request = new HttpEntity(soapRequestData + "", headers); // 返回结果 String str = restTemplate.postForObject(url, request, String.class); logger.info("返回结果----------"+str); Document document= DocumentHelper.parseText(str); Element rootElt = document.getRootElement(); //解析 Iterator body = rootElt.elementIterator("Body"); Element recordEless = (Element) body.next(); Iterator callHisResponse = recordEless.elementIterator("GetFeeInfoResponse"); Element response = (Element) callHisResponse.next(); Iterator callHisResult = response.elementIterator("GetFeeInfoResult"); Element result = (Element)callHisResult.next(); String text = result.getText(); JSONObject jsonObject = JSONObject.parseObject(text); Integer code = jsonObject.getInteger("Code"); if (code==0){ JSONArray item = jsonObject.getJSONArray("Item"); List javaList = item.toJavaList(FeeInfoVO.class); //将javaList中的体检部分合并 List javaListNew = new ArrayList<>(); List detailNew = new ArrayList<>(); FeeInfoVO xytj = new FeeInfoVO(); BigDecimal xytjValue = new BigDecimal("0.000000"); DecimalFormat df = new DecimalFormat("0.00"); String xytjCfxh = ""; String xytjOrderid = ""; for (int i = 0; i < javaList.size(); i++) { if(javaList.get(i).getMemo().equals("体检开单写入")){ //体检的需要合并 // "patid": "1015880", // "hzxm": null, // "yfdm": "", // "zhye": "", // "cfje": "3.000000", // "cfmxsl": "1", // "cflx": "6", // "yfmc": "", // "cfxh": "7841668", // "cardno": "352229201802274531", // "out_ksmc": "", // "ghxh": "0", // "orderId": "JJ20240517155343228", xytj.setPatid(javaList.get(i).getPatid()); xytj.setHzxm(javaList.get(i).getHzxm()); xytj.setYfdm(javaList.get(i).getYfdm()); xytj.setZhye(javaList.get(i).getZhye()); xytjValue = xytjValue.add(new BigDecimal(javaList.get(i).getCfje())); xytjValue = xytjValue.setScale(2, RoundingMode.HALF_UP); xytj.setCfje(df.format(xytjValue)); xytj.setCfmxsl(javaList.get(i).getCfmxsl()); xytj.setCflx(javaList.get(i).getCflx()); xytj.setYfmc(javaList.get(i).getYfmc()); xytjCfxh = xytjCfxh.concat(javaList.get(i).getCfxh()); if(javaList.size() != (i + 1)){ xytjCfxh = xytjCfxh.concat(","); } xytj.setCfxh(xytjCfxh); xytj.setCardno(javaList.get(i).getCardno()); xytj.setOut_ksmc(javaList.get(i).getOut_ksmc()); xytj.setGhxh(javaList.get(i).getGhxh()); if(!(javaList.get(i).getLrrq().equals(""))){ //2024052711:18:12 //格式化日期 String lrrq = javaList.get(i).getLrrq().substring(0, 4) + "/" + javaList.get(i).getLrrq().substring(4, 6) + "/" + javaList.get(i).getLrrq().substring(6, 8) + " " + javaList.get(i).getLrrq().substring(8, 16); javaList.get(i).setLrrq(lrrq); } xytj.setLrrq(javaList.get(i).getLrrq()); // xytjOrderid = xytjOrderid.concat(javaList.get(i).getOrderId()); // if(javaList.size() != (i + 1)){ // xytjOrderid = xytjOrderid.concat(","); // } // xytj.setOrderId(xytjOrderid); xytj.setOrderId(javaList.get(i).getOrderId()); FeeInfoDetailVO detailTmp = javaList.get(i).getDetail().get(0); Double number = Double.parseDouble(javaList.get(i).getDetail().get(0).getXmje()); detailTmp.setXmje(df.format(number)); detailNew.add(detailTmp); xytj.setMemo("体检开单写入"); }else{ FeeInfoVO newItem = new FeeInfoVO(); newItem = javaList.get(i); if(!(newItem.getLrrq().equals(""))){ //2024052711:18:12 //格式化日期 String lrrq = newItem.getLrrq().substring(0, 4) + "/" + newItem.getLrrq().substring(4, 6) + "/" + newItem.getLrrq().substring(6, 8) + " " + newItem.getLrrq().substring(8, 16); newItem.setLrrq(lrrq); } javaListNew.add(newItem); } } if(xytj.getPatid() != null){ xytj.setDetail(detailNew); javaListNew.add(xytj); } resultObj = Result.returnSuccess(javaListNew); // resultObj = Result.returnSuccess(javaList); }else{ errCode= String.valueOf(code); errMsg=jsonObject.getString("Message"); resultObj = Result.returnError(errCode,errMsg); } } catch (Exception e) { logger.error("返回结果异常----------"+e.toString()); errCode="999"; errMsg=e.getMessage(); resultObj=Result.returnError(errCode,errMsg); } return resultObj; } public static Result PreSettlement(PreSettlementQuery reqDTO, String yyjzhye) { String errCode="0"; String errMsg=""; String jsonString = JSON.toJSONString(reqDTO, SerializerFeature.DisableCircularReferenceDetect); logger.info("请求参数----------"+jsonString); Result resultObj=null; try { String patid = reqDTO.getPatid(); String cfxh = reqDTO.getCfxh(); String ghxh = reqDTO.getGhxh(); String zfjsbz = reqDTO.getZfjsbz(); String ybrc = reqDTO.getYbrc(); String inpayAuthNo = reqDTO.getInpayAuthNo(); String uldLatlnt = reqDTO.getUldLatlnt(); if (ybrc==null){ ybrc=""; } if (inpayAuthNo==null){ inpayAuthNo=""; } if (uldLatlnt==null || "".equals(uldLatlnt)){ uldLatlnt="0,0"; } HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("text/xml;charset=UTF-8"); // 请求类型ContentType text/xml;charset=UTF-8 headers.setContentType(type); String soapRequestData="" + " " + " " + " " + " "+patid+"" + " "+cfxh+"" + " "+ghxh+"" + " "+zfjsbz+"" + " "+ybrc+"" + " "+yyjzhye+"" + " "+inpayAuthNo+"" + " "+uldLatlnt+"" + " " + " " + ""; // 请求 HttpEntity request = new HttpEntity(soapRequestData + "", headers); // 返回结果 String str = restTemplate.postForObject(url, request, String.class); logger.info("返回结果----------"+str); Document document= DocumentHelper.parseText(str); Element rootElt = document.getRootElement(); //解析 Iterator body = rootElt.elementIterator("Body"); Element recordEless = (Element) body.next(); Iterator callHisResponse = recordEless.elementIterator("MZJSPreResponse"); Element response = (Element) callHisResponse.next(); Iterator callHisResult = response.elementIterator("MZJSPreResult"); Element result = (Element)callHisResult.next(); String text = result.getText(); JSONObject jsonObject = JSONObject.parseObject(text); Integer code = jsonObject.getInteger("Code"); if (code==0){ JSONObject detail = jsonObject.getJSONObject("detail"); String payOrdId = jsonObject.getString("payOrdId"); String payToken = jsonObject.getString("payToken"); String gmt_out_create = jsonObject.getString("gmt_out_create"); String hosp_out_trade_no = jsonObject.getString("hosp_out_trade_no"); MZJSPreDetailVO javaObject = detail.toJavaObject(MZJSPreDetailVO.class); MZJSPreVO mzjsPreVO=new MZJSPreVO(); mzjsPreVO.setDetail(javaObject); mzjsPreVO.setPayOrdId(payOrdId); mzjsPreVO.setPayToken(payToken); mzjsPreVO.setGmt_out_create(gmt_out_create); mzjsPreVO.setHosp_out_trade_no(hosp_out_trade_no); //将预结算信息存储到服务器后台 String jsonString1 = JSON.toJSONString(mzjsPreVO); String jsonString2 = JSON.toJSONString(javaObject); HashMap hashMap = JSON.parseObject(jsonString1, HashMap.class); hashMap.put("patid",patid); hashMap.put("zfjsbz",zfjsbz); hashMap.put("status","1"); //1 带表预结算 hashMap.put("detail",jsonString2); //1 带表预结算 hashMap.put("out_ksmc",reqDTO.getOut_ksmc()); String url2=StatusDefine.IP_PORT+"/api/addOrderInfo"; HttpHeaders headers2 = new HttpHeaders(); headers2.setContentType(MediaType.APPLICATION_JSON); String body2 = JSON.toJSONString(hashMap); HttpEntity entity = new HttpEntity(body2, headers2); ResponseEntity resp =restTemplate.exchange(url2, HttpMethod.POST, entity, HashMap.class); HashMap resultMap = resp.getBody(); //如果存储失败直接取消预结算 并返回错误 errCode = StringDUtil.changeNullToEmpty(resultMap.get("errCode")); if (!"0".equals(errCode)){ CancelPreSettlementDTO cancelPreSettlementDTO=new CancelPreSettlementDTO(); cancelPreSettlementDTO.setPayOrdId(payOrdId); cancelPreSettlementDTO.setJssjh(javaObject.getSjh()); cancelPreSettlementDTO.setPayToken(payToken); cancelPreSettlementDTO.setZfjsbz(zfjsbz); CancelPreSettlement(cancelPreSettlementDTO); errMsg="保存订单信息失败,请联系管理员。"; resultObj=Result.returnError(errCode,errMsg); }else{ resultObj=Result.returnSuccess(mzjsPreVO); } }else{ errCode= String.valueOf(code); errMsg=jsonObject.getString("Message"); resultObj=Result.returnError(errCode,errMsg); } }catch (Exception e){ logger.error("返回结果异常----------"+e.toString()); errCode="999"; errMsg=e.getMessage(); resultObj=Result.returnError(errCode,errMsg); } return resultObj; } public static HashMap Settlement(SettlementDTO reqDTO) { HashMap resultMap=new HashMap<>(); String errCode="0"; String errMsg=""; String jsonString = JSON.toJSONString(reqDTO, SerializerFeature.DisableCircularReferenceDetect); logger.info("请求参数----------"+jsonString); try { String patid = reqDTO.getPatid(); String sjh = reqDTO.getSjh(); String zje = reqDTO.getZje(); String ysje = reqDTO.getYsje(); String paytype = reqDTO.getPaytype(); String paymoney = reqDTO.getPaymoney(); String paylsh = reqDTO.getPaylsh(); String zfjsbz = reqDTO.getZfjsbz(); HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("text/xml;charset=UTF-8"); // 请求类型ContentType text/xml;charset=UTF-8 headers.setContentType(type); String soapRequestData="" + " " + " " + " " + " "+patid+"" + " "+sjh+"" + " "+zje+"" + " "+ysje+"" + " "+paytype+"" + " "+paymoney+"" + " "+paylsh+"" + " "+zfjsbz+"" + " " + " " + ""; // 请求 HttpEntity request = new HttpEntity(soapRequestData + "", headers); // 返回结果 String str = restTemplate.postForObject(url, request, String.class); logger.info("返回结果----------"+str); Document document= DocumentHelper.parseText(str); Element rootElt = document.getRootElement(); //解析 Iterator body = rootElt.elementIterator("Body"); Element recordEless = (Element) body.next(); Iterator callHisResponse = recordEless.elementIterator("MZJSResponse"); Element response = (Element) callHisResponse.next(); Iterator callHisResult = response.elementIterator("MZJSResult"); Element result = (Element)callHisResult.next(); String text = result.getText(); JSONObject jsonObject = JSONObject.parseObject(text); Integer code = jsonObject.getInteger("Code"); if (code==0){ //成功应该就没了 }else{ errCode= String.valueOf(code); errMsg=jsonObject.getString("Message"); } }catch (Exception e){ logger.error("返回结果异常----------"+e.toString()); errCode="999"; errMsg=e.getMessage(); } resultMap.put("errCode",errCode); resultMap.put("errMsg",errMsg); return resultMap; } public static HashMap CancelPreSettlement(CancelPreSettlementDTO reqDTO) { HashMap resultMap=new HashMap<>(); String errCode="0"; String errMsg=""; String jsonString = JSON.toJSONString(reqDTO, SerializerFeature.DisableCircularReferenceDetect); logger.info("请求参数----------"+jsonString); try { String jssjh = reqDTO.getJssjh(); String zfjsbz = reqDTO.getZfjsbz(); String payToken = reqDTO.getPayToken(); String payOrdId = reqDTO.getPayOrdId(); HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("text/xml;charset=UTF-8"); // 请求类型ContentType text/xml;charset=UTF-8 headers.setContentType(type); String soapRequestData="" + " " + " " + " " + " "+jssjh+"" + " "+zfjsbz+"" + " "+payOrdId+"" + " "+payToken+"" + " " + " " + ""; // 请求 HttpEntity request = new HttpEntity(soapRequestData + "", headers); // 返回结果 String str = restTemplate.postForObject(url, request, String.class); logger.info("返回结果----------"+str); Document document= DocumentHelper.parseText(str); Element rootElt = document.getRootElement(); //解析 Iterator body = rootElt.elementIterator("Body"); Element recordEless = (Element) body.next(); Iterator callHisResponse = recordEless.elementIterator("MZJSCancelResponse"); Element response = (Element) callHisResponse.next(); Iterator callHisResult = response.elementIterator("MZJSCancelResult"); Element result = (Element)callHisResult.next(); String text = result.getText(); JSONObject jsonObject = JSONObject.parseObject(text); Integer code = jsonObject.getInteger("Code"); if (code==0){ String sjh = jsonObject.getString("sjh"); resultMap.put("sjh",sjh); }else{ errCode= String.valueOf(code); errMsg=jsonObject.getString("Message"); } }catch (Exception e){ logger.error("返回结果异常----------"+e.toString()); errCode="999"; errMsg=e.getMessage(); } resultMap.put("errCode",errCode); resultMap.put("errMsg",errMsg); return resultMap; } public static Result>> getUnPayInfo(PatientFeeQuery reqDTO) { String errCode="0"; String errMsg=""; Result>> resultObj=null; try { //附加没有完成的订单 HashMap hashMap=new HashMap<>(); hashMap.put("patid",reqDTO.getPatid()); String url2= StatusDefine.IP_PORT+"/api/findOrderInfo"; HttpHeaders headers2 = new HttpHeaders(); headers2.setContentType(MediaType.APPLICATION_JSON); String body2 = JSON.toJSONString(hashMap); HttpEntity entity = new HttpEntity(body2, headers2); ResponseEntity resp =restTemplate.exchange(url2, HttpMethod.POST, entity, HashMap.class); HashMap resultMap = resp.getBody(); String errCode1 = StringDUtil.changeNullToEmpty(resultMap.get("errCode")); if("0".equals(errCode1)){ List> list = (List>) resultMap.get("list"); resultObj=Result.returnSuccess(list); //取消这些订单 for (HashMap map : list) { String zfjsbz = StringDUtil.changeNullToEmpty(map.get("zfjsbz")); String payToken = StringDUtil.changeNullToEmpty(map.get("payToken")); String payOrdId = StringDUtil.changeNullToEmpty(map.get("payOrdId")); String hosp_out_trade_no = StringDUtil.changeNullToEmpty(map.get("hosp_out_trade_no")); String detail = StringDUtil.changeNullToEmpty(map.get("detail")); HashMap hashMap1 = JSON.parseObject(detail, HashMap.class); String sjh = StringDUtil.changeNullToEmpty(hashMap1.get("sjh")); CancelPreSettlementDTO cancelPreSettlementDTO=new CancelPreSettlementDTO(); cancelPreSettlementDTO.setPayOrdId(payOrdId); cancelPreSettlementDTO.setJssjh(sjh); cancelPreSettlementDTO.setPayToken(payToken); cancelPreSettlementDTO.setZfjsbz(zfjsbz); CancelPreSettlement(cancelPreSettlementDTO); //取消后通知后台,将状态改为4 已结束 HashMap updateEnd=new HashMap<>(); updateEnd.put("hosp_out_trade_no",hosp_out_trade_no); String url3= StatusDefine.IP_PORT+"/api/updateOrderInfoEnd"; HttpHeaders headers3 = new HttpHeaders(); headers3.setContentType(MediaType.APPLICATION_JSON); String body3 = JSON.toJSONString(updateEnd); HttpEntity entity3 = new HttpEntity(body3, headers3); restTemplate.exchange(url3, HttpMethod.POST, entity3, HashMap.class); } }else{ errCode=errCode1; errMsg=StringDUtil.changeNullToEmpty(resultMap.get("errMsg")); resultObj=Result.returnError(errCode,errMsg); } }catch (Exception e){ logger.error("返回结果异常----------"+e.toString()); errCode="999"; errMsg=e.getMessage(); resultObj=Result.returnError(errCode,errMsg); } return resultObj; } }