package com.jcdm.main.webservice.service;
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.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.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import javax.swing.border.Border;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
public class ReceivingServices {
@Autowired
// private static IOmProductionOrdeInfoService omProductionOrdeInfoService;
private static IOmProductionOrdeInfoService omProductionOrdeInfoService = BeanUtils.getBean(IOmProductionOrdeInfoService.class);
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:50200/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:50200/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 str) {
String result = getInterfaceInformationXml(ProductionPlanInformationUrl, getProductionPlanInformationXml(str));
String jsonStr = xmlToJSON2(result);
Gson gson = new Gson();
// 将json字符串转换成对象
ItemList itemList = gson.fromJson(jsonStr, ItemList.class);
for (Item item : itemList.getItem()) {
OmProductionOrdeInfo ordeInfo = new OmProductionOrdeInfo();
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());
omProductionOrdeInfoService.insertOmProductionOrdeInfo(ordeInfo);
}
}
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", "");
// 设置请求体
postMethod.setRequestEntity(requestEntity);
int status = 0;
try {
status = client.executeMethod(postMethod);
} catch (IOException e) {
throw new RuntimeException(e);
}
if (status == 200) {// 成功
InputStream is = null;
try {
is = postMethod.getResponseBodyAsStream();
} catch (IOException e) {
throw new RuntimeException(e);
}
// 获取请求结果字符串
String result = null;
try {
result = IOUtils.toString(is);
return result;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return "接口调用错误";
}
public static String getProductionPlanInformationXml(String str){
String content = "\n" +
" \n" +
" \n" +
" \n" +
" \n" +
" 1000\n" +
" \n" +
" "+str+"\n" +
" \n" +
" \n" +
"";
return content;
}
/**
* 方式--贰
* 使用hutool工具包中的工具转化
* @param xmlStr
* @return
*/
public static String xmlToJSON2(String xmlStr){
JSONObject jsonObject1 = cn.hutool.json.XML.toJSONObject(xmlStr, true);
Gson gson = new Gson();
JsonObject jsonObject2 = gson.fromJson(jsonObject1.toString(), JsonObject.class);
JsonObject etData = jsonObject2
.getAsJsonObject("SOAP:Envelope")
.getAsJsonObject("SOAP:Body")
.getAsJsonObject("n0:ZPP_CF_MES_005.Response")
.getAsJsonObject("ET_DATA");
return etData.toString();
}
/**
* 方式--贰
* 使用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;
}
}