3/10 安溪县访问包装1.0

axxyy
wangwei 4 weeks ago
parent af135d6b4e
commit c5e75597b3

@ -220,7 +220,23 @@
</exclusion>
</exclusions>
</dependency>
<!-- Jackson 核心库 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
<!-- Jackson XML 数据格式处理库 -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.8</version>
</dependency>
</dependencies>
<build>

@ -16,6 +16,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.glxp.mipsdl.client.CommonHttpClient;
import com.glxp.mipsdl.config.ThirdSysConfig;
import com.glxp.mipsdl.constant.ConstantType;
@ -30,6 +33,7 @@ import com.glxp.mipsdl.dao.inout.IoOrderDao;
import com.glxp.mipsdl.dao.inout.IoOrderDetailBizDao;
import com.glxp.mipsdl.dao.thrsys.*;
import com.glxp.mipsdl.entity.auth.AuthWarehouseEntity;
import com.glxp.mipsdl.entity.axxyy.PriceDict;
import com.glxp.mipsdl.entity.basic.BasicBussinessTypeEntity;
import com.glxp.mipsdl.entity.basic.BasicCorpEntity;
import com.glxp.mipsdl.entity.basic.BasicUdirelEntity;
@ -42,7 +46,6 @@ import com.glxp.mipsdl.entity.thrsys.*;
import com.glxp.mipsdl.http.HttpClient;
import com.glxp.mipsdl.req.base.*;
import com.glxp.mipsdl.req.base.forthird.*;
import com.glxp.mipsdl.req.ctqyy.CtqyyRequest;
import com.glxp.mipsdl.req.ctqyy.DlThirdProjectRequest;
import com.glxp.mipsdl.req.ctqyy.GetSickRequest;
import com.glxp.mipsdl.req.njxyy.PostThrProductRequest;
@ -61,21 +64,20 @@ import com.glxp.mipsdl.thirddao.njxyy.ThrCorpMapper;
import com.glxp.mipsdl.thirddao.njxyy.ThrProductsMapper;
import com.glxp.mipsdl.thirddao.njxyy.ThrSickerMapper;
import com.glxp.mipsdl.util.*;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import javax.annotation.Resource;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
@ -88,11 +90,7 @@ import javax.xml.transform.stream.StreamResult;
;
import java.io.*;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.*;
import java.util.logging.Level;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@ -151,7 +149,6 @@ public class AxxyyClient extends CommonHttpClient {
ThrSickerMapper thrSickerMapper;
/**
* xml
*
@ -173,7 +170,7 @@ public class AxxyyClient extends CommonHttpClient {
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<root>\n" +
"<code>" + "" + "</code>\n" +
"<name>红细胞寿命测定-呼气法</name>\n" +
"<name>红细胞</name>\n" +
"<spell>" + "" + "</spell>\n" +
"<invalid>" + "" + "</invalid>\n" +
"<subject>" + "" + "</subject>\n" +
@ -184,40 +181,17 @@ public class AxxyyClient extends CommonHttpClient {
private static String buildSoapRequest(String msgHeader, String msgBody) {
// 构建 SOAP 请求消息
// String soapRequestTemplate =
// "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:zys=\"http://www.zysoft.com.cn/\">\n" +
// "<soapenv:Header/>\n" +
// " <soapenv:Body>\n" +
// " <zys:CallInterface>\n" +
// " <zys:msgHeader><![CDATA[%s]]></zys:msgHeader>\n" +
// " <zys:msgBody><![CDATA[%s]]></zys:msgBody>\n" +
// " </zys:CallInterface>\n" +
// " </soapenv:Body>\n" +
// "</soapenv:Envelope>";
String soapRequestTemplate = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:zys=\"http://www.zysoft.com.cn/\">\n" +
String soapRequestTemplate =
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:zys=\"http://www.zysoft.com.cn/\">\n" +
"<soapenv:Header/>\n" +
" <soapenv:Body>\n" +
" <zys:CallInterface>\n" +
" <zys:msgHeader><![CDATA[<root>\n" +
" <serverName>getPriceDict</serverName>\n" +
" <format>xml</format>\n" +
" <callOperator></callOperator>\n" +
" <certificate>ousrgPVbTpn7ckRUZWypfBR7tGWi2EINBp4vIHOS44V/jN3U5dD+5A==</certificate>\n" +
" </root>]]>\n" +
"</zys:msgHeader>\n" +
"<zys:msgBody><![CDATA[\t\n" +
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
"<root>\n" +
"<name>红细胞寿命测定-呼气法</name>\n" +
"</root>]]>\n" +
"</zys:msgBody>\n" +
" <zys:msgHeader><![CDATA[%s]]></zys:msgHeader>\n" +
" <zys:msgBody><![CDATA[%s]]></zys:msgBody>\n" +
" </zys:CallInterface>\n" +
" </soapenv:Body>\n" +
"</soapenv:Envelope>";
// return String.format(soapRequestTemplate, msgHeader, msgBody);
return soapRequestTemplate;
return String.format(soapRequestTemplate, msgHeader, msgBody);
}
/**
@ -1014,9 +988,17 @@ public class AxxyyClient extends CommonHttpClient {
public BaseResponse getBasicProject(DlThirdProjectRequest dlThirdProjectRequest) {
try {
// 发送请求
BaseResponse response = callInterface(getMsgHeader("getPriceDict"), setFilter());
// 记录日志
log.error("获取智业收费项目222: " + response);
String response = callInterface(getMsgHeader("getPriceDict"), setFilter());
String xml = getXml(response);
if (xml == null){
return ResultVOUtils.error(500,"获取项目字典错误");
}
DataVo dataVo = getDataVo(xml);
if (dataVo.getCode() != 0){
return ResultVOUtils.error(500,"获取项目字典错误");
}
List<PriceDict> list = dataVo.getList(PriceDict.class);
log.error("最终获取的收费项目: " + list);
// log.error("获取智业收费项目:::::: " + response);
}catch (Exception e){
log.error("获取智业收费项目失败" );
@ -1026,21 +1008,19 @@ public class AxxyyClient extends CommonHttpClient {
return null;
}
private static final String WSDL_URL = "http://173.19.192.196:8882/OTHER/BtmsEntranceWs?wsdl";
public BaseResponse callInterface(String msgHeader, String msgBody) {
try {
private static final String WSDL_URL = "http://173.19.192.196:8882/OTHER/BtmsEntranceWs?wsdl";
public String callInterface(String msgHeader, String msgBody) {
try {
// 构建请求头
Map<String, String> headers = Map.of(
"Content-Type", "text/xml;charset=utf-8",
"SOAPAction","http://www.zysoft.com.cn/CallInterface"
);
// 注意这里我们实际上是在构建一个表单体而不是直接发送XML或JSON
// 因此我们需要对msgHeader和msgBody进行URL编码并将它们作为表单字段发送
String postData = buildSoapRequest(null,null);
String postData = buildSoapRequest(msgHeader,msgBody);
HttpRequest request = HttpRequest.post(WSDL_URL)
.addHeaders(headers)
@ -1050,18 +1030,14 @@ public class AxxyyClient extends CommonHttpClient {
String xml = xmlResponse.body();
// 假设 XML 解析到的 JSON 字符串部分
log.error("获取智业收费项目999:" + xml);
return ResultVOUtils.error(500, xml);
return xml;
} catch (Exception e) {
log.error("获取智业收费项目失败===" + e.getMessage());
return ResultVOUtils.error(500, "获取智业收费项目失败===" + e.getMessage());
throw new RuntimeException("获取智业收费项目失败===" + e.getMessage());
}
}
public static void main(String[] args) {
String soapXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"><soapenv:Body><zys:CallInterfaceResponse xmlns:zys=\"http://www.zysoft.com.cn/\">" +
" <zys:payload>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;&lt;root&gt;&lt;code&gt;0&lt;/code&gt;&lt;data&gt;&lt;lists&gt;&lt;code&gt;023050000701&lt;/code&gt;&lt;name&gt;红细胞寿命测定-呼气法&lt;/name&gt;&lt;unit&gt;次&lt;/unit&gt;&lt;price&gt;245&lt;/price&gt;&lt;spell&gt;HXBSMCDHQF&lt;/spell&gt;&lt;valid&gt;Y&lt;/valid&gt;&lt;sequence&gt;&lt;/sequence&gt;&lt;std_code&gt;23050000701&lt;/std_code&gt;&lt;subject&gt;D&lt;/subject&gt;&lt;subjectname&gt;化验&lt;/subjectname&gt;&lt;dispreceipt&gt;FJ15&lt;/dispreceipt&gt;&lt;dispreceiptname&gt;化验费&lt;/dispreceiptname&gt;&lt;resireceipt&gt;FJ15&lt;/resireceipt&gt;&lt;resireceiptname&gt;化验费&lt;/resireceiptname&gt;&lt;starttime&gt;20190412000000&lt;/starttime&gt;&lt;stoptime&gt;&lt;/stoptime&gt;&lt;modifytime&gt;20190505170000&lt;/modifytime&gt;&lt;modifyoperator&gt;SYSTEM3&lt;/modifyoperator&gt;&lt;item_connotation&gt;红细胞寿命测定-呼气法&lt;/item_connotation&gt;&lt;except_content&gt;&lt;/except_content&gt;&lt;country_code&gt;002305000070000-23050000701&lt;/country_code&gt;&lt;org_stdcode&gt;&lt;/org_stdcode&gt;&lt;/lists&gt;&lt;/data&gt;&lt;/root&gt;</zys:payload>" +
"</zys:CallInterfaceResponse></soapenv:Body></soapenv:Envelope>";
public String getXml(String soapXml) {
try {
// 提取 <zys:payload> 中的内容
int payloadStart = soapXml.indexOf("<zys:payload>") + "<zys:payload>".length();
@ -1088,33 +1064,31 @@ public class AxxyyClient extends CommonHttpClient {
transformer.transform(new DOMSource(doc), new StreamResult(writer));
String standardXml = writer.toString();
// 处理空标签,将 <tag/> 替换为 <tag></tag>
Pattern pattern = Pattern.compile("<([^/][^>]*)\\s*/>");
Matcher matcher = pattern.matcher(standardXml);
String resultXml = matcher.replaceAll("<$1></$1>");
// 输出标准 XML
System.out.println(resultXml);
log.error("解析后的数据" + resultXml);
return resultXml;
} catch (ParserConfigurationException | SAXException | TransformerException | IOException e) {
e.printStackTrace();
}
return null;
}
private static String formatXML(Document doc) throws TransformerException {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
DOMSource source = new DOMSource(doc);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
transformer.transform(source, result);
return writer.toString();
public DataVo getDataVo(String xml){
try {
XmlMapper xmlMapper = new XmlMapper();
JsonNode xmlNode = xmlMapper.readTree(xml.getBytes());
// 创建 JSON 映射器
ObjectMapper jsonMapper = new ObjectMapper();
String json = jsonMapper.writeValueAsString(xmlNode);
DataVo dataVo = JSONUtil.toBean(json,DataVo.class);
return dataVo;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}

@ -0,0 +1,49 @@
package com.glxp.mipsdl.client.axxyy;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import lombok.Data;
import org.apache.poi.ss.formula.functions.T;
import javax.xml.bind.annotation.*;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
/**
* @author : zhuzhu
* @date : 2025/2/28 9:35
* @modyified By :
*/
@Data
@XmlAccessorType(XmlAccessType.FIELD)
public class DataVo<T>{
private Integer code;
private List<List> data; // 泛型 List
public List<T> getList(Class<T> clazz){
List<Object> jsonArray = data.get(0);
Gson gson = new Gson();
System.out.println(jsonArray.get(0).toString().replace("lists=",""));
String str = jsonArray.get(0).toString().replace("lists=","");
JSONArray array = JSONUtil.parseArray(str);
List<T> list = new ArrayList<>();
for (Object obj : array) {
System.out.println(obj.toString());
T dataVo = JSONUtil.toBean(obj.toString(),clazz);
list.add(dataVo);
}
return list;
}
}

@ -1,75 +0,0 @@
package com.glxp.mipsdl.client.axxyy;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.util.List;
/**
* @author : zhuzhu
* @date : 2025/2/28 16:03
* @modyified By :
*/
public class JAXBUtil {
// /**
// * 将XML字符串反序列化为指定类型的Java对象并返回该对象的data字段值。
// *
// * @param clazz 目标Java类
// * @param xml XML字符串
// * @param <T> 泛型,表示目标类的类型
// * @return 目标对象的data字段值
// * @throws JAXBException 如果JAXB操作失败
// */
// public static <T> Object unmarshalAndGetResult(Class<T> clazz, String xml) throws JAXBException {
// // 创建JAXB上下文
// JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
// // 创建Unmarshaller
// Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
//
// // 反序列化XML为Java对象
// T object = (T) unmarshaller.unmarshal(new StringReader(xml));
//
// // 调用目标对象的getData()方法并返回结果
// return ((ProductVo) object).getData();
// }
/**
* XMLJavadata
*
* @param clazz JavaProductVo.class
* @param dataClass dataItem.class
* @param xml XML
* @param <T> data
* @return dataList<T>
* @throws JAXBException JAXB
*/
public static <T> List<T> unmarshalAndGetList(Class<?> clazz, Class<T> dataClass, String xml) throws JAXBException {
// 创建JAXB上下文
JAXBContext jaxbContext = JAXBContext.newInstance(clazz, dataClass);
// 创建Unmarshaller
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
// 反序列化XML为Java对象
Object object = unmarshaller.unmarshal(new StringReader(xml));
// 假设反序列化后的对象是ProductVo类型
ProductVo<T> productVo = (ProductVo<T>) object;
// 返回data字段的值
return productVo.getData();
}
// public static void main(String[] args) {
// try {
// // 示例用法
// String xml = "<ProductVo><data>Example Data</data></ProductVo>";
// Object result = unmarshalAndGetResult(ProductVo.class, xml);
// System.out.println("Result: " + result);
// } catch (JAXBException e) {
// e.printStackTrace();
// }
// }
}

@ -1,49 +0,0 @@
package com.glxp.mipsdl.client.axxyy;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
/**
* @author : zhuzhu
* @date : 2025/2/28 16:04
* @modyified By :
*/
@XmlRootElement(name = "root")
public class ProductVo<T> {
private String code;
private String error;
private List<T> data;
@XmlElement(name = "code")
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@XmlElement(name = "error")
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
@XmlElementWrapper(name = "data")
@XmlElement(name = "item") // 假设List中的元素由<item>标签包裹
public List<T> getData() {
return data;
}
public void setData(List<T> data) {
this.data = data;
}
}

@ -2,6 +2,8 @@ package com.glxp.mipsdl.entity.axxyy;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
/**
@ -11,36 +13,48 @@ import javax.xml.bind.annotation.XmlElement;
*/
@Data
@XmlAccessorType(XmlAccessType.FIELD)
public class PriceDict {
@XmlElement(name = "code")
private String code;
@XmlElement(name = "name")
private String name;
@XmlElement(name = "unit")
private String unit;
@XmlElement(name = "price")
private String price;
private String spell;
private String valid;
private String sequence;
private String stdCode;
@XmlElement(name = "subject")
private String subject;
private String subjectName;
private String dispreceipt;
@XmlElement(name = "starttime")
private String startTime;
private String dispreceiptName;
private String resireceipt;
@XmlElement(name = "stoptime")
private String stopTime;
private String resireceiptName;
private String starttime;
private String stoptime;
private String modifytime;
private String modifyoperator;
private String itemConnotation;
private String exceptContent;
@XmlElement(name = "country_code")
private String countryCode;
private String orgStdcode;
}

Loading…
Cancel
Save