Files
kelfy-hrsmobile/src/main/java/com/saye/hrs/commons/webservice/OtherWSUtil.java

571 lines
25 KiB
Java
Raw Normal View History

2025-11-13 13:56:50 +08:00
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;
}
}