package com.jcdm.main.webservice.service;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.jcdm.common.exception.ServiceException;
import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService;
import com.jcdm.main.da.opcuaconfig.init.BeanUtils;
import com.jcdm.main.om.productionOrde.domain.OmProductionOrdeInfo;
import com.jcdm.main.om.productionOrde.service.IOmProductionOrdeInfoService;
import com.jcdm.main.om.workReport.service.IOmWorkReportService;
import com.jcdm.main.webservice.domain.Item;
import com.jcdm.main.webservice.domain.ItemList;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.io.IOUtils;
import com.jcdm.main.om.productionOrde.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import javax.swing.border.Border;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.List;
public class ReceivingServices {
private static final Logger logger = LoggerFactory.getLogger("sys-user");
@Autowired
// private static IOmProductionOrdeInfoService omProductionOrdeInfoService;
private static IOmProductionOrdeInfoService omProductionOrdeInfoService = BeanUtils.getBean(IOmProductionOrdeInfoService.class);
public static final String ProductionPlanInformationUrl = "http://popappdb.cfmoto.com.cn:50100/XISOAPAdapter/MessageServlet?senderParty=&senderService=BC_MES&receiverParty=&receiverService=&interface=SI_ZPP_CF_MES_005_SYN_OUT&interfaceNamespace=http%3A%2F%2Fcfmoto.com%2Fxi%2FMES";
// public static final String ProductionPlanInformationUrl = "http://podqapp.cfmoto.com.cn:50200/XISOAPAdapter/MessageServlet?senderParty=&senderService=BC_MES&receiverParty=&receiverService=&interface=SI_ZPP_CF_MES_005_SYN_OUT&interfaceNamespace=http://cfmoto.com/xi/MES";
public static void main(String[] args) throws Exception {
// getInterfaceInformationXml(ProductionPlanInformationUrl,getProductionPlanInformationXml("A0055577"));
// test1();
// String serviceUrl = "http://podqapp.cfmoto.com.cn:50100/XISOAPAdapter/MessageServlet?senderParty=&senderService=BC_MES&receiverParty=&receiverService=&interface=SI_ZPP_CF_MES_005_SYN_OUT&interfaceNamespace=http://cfmoto.com/xi/MES";
// String serviceUrl = "http://podqapp.cfmoto.com.cn:50100/XISOAPAdapter/MessageServlet?senderParty=&senderService=BC_MES&receiverParty=&receiverService=&interface=SI_ZPP_CF_BC_001_SYN_OUT&interfaceNamespace=http://cfmoto.com/xi/MES";
//// String content = "\n" +
//// " \n" +
//// " \n" +
//// " \n" +
//// " \n" +
//// " 1000\n" +
//// " \n" +
//// " A0055577\n" +
//// " \n" +
//// " \n" +
//// "";
// String content = "\n" +
// " \n" +
// " \n" +
// " \n" +
// " 000010569212\n" +
// " 0010\n" +
// " 1\n" +
// " 0 \n" +
// " 1 \n" +
// " \n" +
// " \n" +
// "";
// // HttpClient发送SOAP请求
// int timeout = 10000;
// HttpClient client = new HttpClient();
// //如果需要用户名密码验证;不需要验证登录则不需要以下4行
// String username = "POMESUSER";
// String password = "12345tgb";
// UsernamePasswordCredentials creds = new UsernamePasswordCredentials(username, password);
// client.getState().setCredentials(AuthScope.ANY, creds);
//
// PostMethod postMethod = new PostMethod(serviceUrl);
// // 设置连接超时
// client.getHttpConnectionManager().getParams().setConnectionTimeout(timeout);
// // 设置读取时间超时
// client.getHttpConnectionManager().getParams().setSoTimeout(timeout);
// // 然后把Soap请求数据添加到PostMethod中
// RequestEntity requestEntity = new StringRequestEntity(content, "text/xml", "UTF-8");
//
// // 设置请求头部,否则可能会报 “no SOAPAction header” 的错误
// postMethod.setRequestHeader("SOAPAction", "");
// // 设置请求体
// postMethod.setRequestEntity(requestEntity);
// int status = client.executeMethod(postMethod);
//
// if (status == 200) {// 成功
// InputStream is = postMethod.getResponseBodyAsStream();
// // 获取请求结果字符串
// String result = IOUtils.toString(is);
//// String jsonStr = xmlToJSON2(result);
//// Gson gson = new Gson();
//// // 将json字符串转换成对象
//// ItemList itemList = gson.fromJson(jsonStr, ItemList.class);
// System.out.println("返回结果:" + result);
// } else {
// System.out.println("错误代码:" + status + ":" + postMethod.getResponseBodyAsString());
// }
}
public static void insertWebserviceData(String factory,String str) {
String result = getInterfaceInformationXml(ProductionPlanInformationUrl, getProductionPlanInformationXml(factory,str));
logger.info("messageLocation1,"+result);
String jsonStr = xmlToJSON2(result);
logger.info("messageLocation5,"+jsonStr);
if (StrUtil.isNotBlank(jsonStr)){
if (!jsonStr.contains("[") && !jsonStr.contains("]")){
StringBuilder stringBuilder = new StringBuilder(jsonStr);
stringBuilder.insert(8,"[");
stringBuilder.insert(jsonStr.length(),"]");
jsonStr = stringBuilder.toString();
logger.info("messageLocation6,"+jsonStr);
}
Gson gson = new Gson();
// 将json字符串转换成对象
ItemList itemList = gson.fromJson(jsonStr, ItemList.class);
if (ObjectUtil.isNotNull(itemList)){
logger.info("messageLocation7,"+ itemList);
}
for (Item item : itemList.getItem()) {
logger.info("messageLocation8,"+item);
OmProductionOrdeInfo ordeInfo = new OmProductionOrdeInfo();
ordeInfo.setWorkshopCode(item.getWERKS());
ordeInfo.setProductCode(item.getPLNBEZ());
ordeInfo.setProductName(item.getMAKTX());
ordeInfo.setLineCode(item.getFEVOR());
ordeInfo.setWorkOrderNo(item.getAUFNR());
ordeInfo.setPlanQty((long) Double.parseDouble(item.getPSMNG()));
ordeInfo.setProductionNotice(item.getZSCTZD());
ordeInfo.setTypeZ(item.getFERTH());
ordeInfo.setCreateUser(item.getZUSER());
//ordeInfo.setCreateTime(item.getZDATE());
ordeInfo.setDemandDate(item.getGSTRP());//开工日期
omProductionOrdeInfoService.insertOmProductionOrdeInfo(ordeInfo);
}
} else {
throw new ServiceException("未接收到数据,请检查");
}
}
public static String getInterfaceInformationXml(String url,String xml){
int timeout = 10000;
HttpClient client = new HttpClient();
//如果需要用户名密码验证;不需要验证登录则不需要以下4行
String username = "POMESUSER";
String password = "12345tgb";
UsernamePasswordCredentials creds = new UsernamePasswordCredentials(username, password);
client.getState().setCredentials(AuthScope.ANY, creds);
PostMethod postMethod = new PostMethod(url);
// 设置连接超时
client.getHttpConnectionManager().getParams().setConnectionTimeout(timeout);
// 设置读取时间超时
client.getHttpConnectionManager().getParams().setSoTimeout(timeout);
// 然后把Soap请求数据添加到PostMethod中
RequestEntity requestEntity = null;
try {
requestEntity = new StringRequestEntity(xml, "text/xml", "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
// 设置请求头部,否则可能会报 “no SOAPAction header” 的错误
postMethod.setRequestHeader("SOAPAction", "application/x-www-form-urlencoded; charset=UTF-8");
// 设置请求体
postMethod.setRequestEntity(requestEntity);
int status = 0;
try {
status = client.executeMethod(postMethod);
} catch (IOException e) {
logger.info("errorLocation1,"+e);
throw new RuntimeException(e);
}
if (status == 200) {// 成功
InputStream is = null;
// 获取请求结果字符串
String result = null;
try {
result = postMethod.getResponseBodyAsString();
logger.info("二次输出流333333,{}",result);
return result;
} catch (IOException e) {
logger.info("errorLocation2,"+e);
throw new RuntimeException(e);
}
}
return "接口调用错误";
}
public static String getProductionPlanInformationXml(String factory,String planNo){
String content = "\n" +
" \n" +
" \n" +
" \n" +
" \n" +
" "+factory+"\n" +
" \n" +
" "+planNo+"\n" +
" \n" +
" \n" +
"";
return content;
}
/**
* 方式--贰
* 使用hutool工具包中的工具转化
* @param xmlStr
* @return
*/
public static String xmlToJSON2(String xmlStr){
JSONObject jsonObject1 = cn.hutool.json.XML.toJSONObject(xmlStr, true);
String data = new String();
Gson gson = new Gson();
JsonObject jsonObject2 = gson.fromJson(jsonObject1.toString(), JsonObject.class);
JsonObject result = jsonObject2
.getAsJsonObject("SOAP:Envelope")
.getAsJsonObject("SOAP:Body")
.getAsJsonObject("n0:ZPP_CF_MES_005.Response");
if (ObjectUtil.isNotNull(result)){
logger.info("messageLocation2,"+result);
String string = result.get("EV_MESSAGE").toString();
// if (string.contains("查询成功")){
// logger.info("messageLocation3,"+string);
// JsonObject etData = jsonObject2
// .getAsJsonObject("SOAP:Envelope")
// .getAsJsonObject("SOAP:Body")
// .getAsJsonObject("n0:ZPP_CF_MES_005.Response")
// .getAsJsonObject("ET_DATA");
// data = etData.toString();
// logger.info("messageLocation4,"+data);
// }
logger.info("messageLocation3,"+string);
JsonObject etData = jsonObject2
.getAsJsonObject("SOAP:Envelope")
.getAsJsonObject("SOAP:Body")
.getAsJsonObject("n0:ZPP_CF_MES_005.Response")
.getAsJsonObject("ET_DATA");
data = etData.toString();
logger.info("messageLocation4,"+data);
}
return data;
}
/**
* 方式--贰
* 使用hutool工具包中的工具转化
* @param xmlStr
* @return
*/
public static String xmlToJSON1(String xmlStr){
String status = "";
if(xmlStr.contains("EV_MESSAGE")){
JSONObject jsonObject1 = cn.hutool.json.XML.toJSONObject(xmlStr, true);
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = null;
try {
rootNode = objectMapper.readTree(String.valueOf(jsonObject1));
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
String evStatus = rootNode
.path("SOAP:Envelope")
.path("SOAP:Body")
.path("n0:ZPP_BC_001.Response")
.path("EV_MESSAGE")
.asText();
status = evStatus;
}
return status;
}
/**
* 方式--贰
* 使用hutool工具包中的工具转化
* @param xmlStr
* @return
*/
public static String xmlToJSON3(String xmlStr){
String status = "";
if(xmlStr.contains("EV_STATUS")){
JSONObject jsonObject1 = cn.hutool.json.XML.toJSONObject(xmlStr, true);
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = null;
try {
rootNode = objectMapper.readTree(String.valueOf(jsonObject1));
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
String evStatus = rootNode
.path("SOAP:Envelope")
.path("SOAP:Body")
.path("n0:ZPP_BC_001.Response")
.path("EV_STATUS")
.asText();
status = evStatus;
}
return status;
}
}