Files
kelfy-hrsmobile/src/main/java/com/saye/hrs/commons/webservice/OtherWSUtil.java
2025-11-13 13:56:50 +08:00

571 lines
25 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<List<FeeInfoVO>> getPatientFeeInfo(PatientFeeQuery reqDTO) {
String patid = reqDTO.getPatid();
logger.info("请求参数----------patid:"+patid);
String errCode="0";
String errMsg="";
Result<List<FeeInfoVO>> 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 = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\">" +
"<soapenv:Header/>" +
"<soapenv:Body>" +
"<tem:GetFeeInfo>" +
"<tem:patid>" + patid + "</tem:patid>" +
"</tem:GetFeeInfo>" +
"</soapenv:Body>" +
"</soapenv:Envelope>";
// 请求
HttpEntity<String> request = new HttpEntity<String>(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<FeeInfoVO> javaList = item.toJavaList(FeeInfoVO.class);
//将javaList中的体检部分合并
List<FeeInfoVO> javaListNew = new ArrayList<>();
List<FeeInfoDetailVO> 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<MZJSPreVO> PreSettlement(PreSettlementQuery reqDTO, String yyjzhye) {
String errCode="0";
String errMsg="";
String jsonString = JSON.toJSONString(reqDTO, SerializerFeature.DisableCircularReferenceDetect);
logger.info("请求参数----------"+jsonString);
Result<MZJSPreVO> 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="<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\">" +
" <soapenv:Header/>" +
" <soapenv:Body>" +
" <tem:MZJSPre>" +
" <tem:patid>"+patid+"</tem:patid>" +
" <tem:cfxh>"+cfxh+"</tem:cfxh>" +
" <tem:ghxh>"+ghxh+"</tem:ghxh>" +
" <tem:zfjsbz>"+zfjsbz+"</tem:zfjsbz>" +
" <tem:ybrc>"+ybrc+"</tem:ybrc>" +
" <tem:Blance>"+yyjzhye+"</tem:Blance>" +
" <tem:InpayAuthNo>"+inpayAuthNo+"</tem:InpayAuthNo>" +
" <tem:uldLatlnt>"+uldLatlnt+"</tem:uldLatlnt>" +
" </tem:MZJSPre>" +
" </soapenv:Body>" +
"</soapenv:Envelope>";
// 请求
HttpEntity<String> request = new HttpEntity<String>(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<String> entity = new HttpEntity<String>(body2, headers2);
ResponseEntity<HashMap> 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<Object, Object> Settlement(SettlementDTO reqDTO) {
HashMap<Object,Object> 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="<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\">" +
" <soapenv:Header/>" +
" <soapenv:Body>" +
" <tem:MZJS>" +
" <tem:patid>"+patid+"</tem:patid>" +
" <tem:sjh>"+sjh+"</tem:sjh>" +
" <tem:zje>"+zje+"</tem:zje>" +
" <tem:ysje>"+ysje+"</tem:ysje>" +
" <tem:paytype>"+paytype+"</tem:paytype>" +
" <tem:paymoney>"+paymoney+"</tem:paymoney>" +
" <tem:paylsh>"+paylsh+"</tem:paylsh>" +
" <tem:zfjsbz>"+zfjsbz+"</tem:zfjsbz>" +
" </tem:MZJS>" +
" </soapenv:Body>" +
"</soapenv:Envelope>";
// 请求
HttpEntity<String> request = new HttpEntity<String>(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<Object, Object> CancelPreSettlement(CancelPreSettlementDTO reqDTO) {
HashMap<Object,Object> 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="<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\">" +
" <soapenv:Header/>" +
" <soapenv:Body>" +
" <tem:MZJSCancel>" +
" <tem:jssjh>"+jssjh+"</tem:jssjh>" +
" <tem:zfjsbz>"+zfjsbz+"</tem:zfjsbz>" +
" <tem:payOrdId>"+payOrdId+"</tem:payOrdId>" +
" <tem:payToken>"+payToken+"</tem:payToken>" +
" </tem:MZJSCancel>" +
" </soapenv:Body>" +
"</soapenv:Envelope>";
// 请求
HttpEntity<String> request = new HttpEntity<String>(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<List<HashMap<Object, Object>>> getUnPayInfo(PatientFeeQuery reqDTO) {
String errCode="0";
String errMsg="";
Result<List<HashMap<Object, Object>>> resultObj=null;
try {
//附加没有完成的订单
HashMap<Object,Object> 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<String> entity = new HttpEntity<String>(body2, headers2);
ResponseEntity<HashMap> 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<HashMap<Object, Object>> list = (List<HashMap<Object, Object>>) resultMap.get("list");
resultObj=Result.returnSuccess(list);
//取消这些订单
for (HashMap<Object, Object> 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<Object,Object> 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<String> entity3 = new HttpEntity<String>(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;
}
}