public void runTimeOrder() throws Exception {
// TODO Auto-generated method stub
Map params = new HashMap();
params.put("update", 1);
List<OrderForm> orderForms = this.orderFormDAO.query("select obj from OrderForm obj where obj.update_status=:update", params, -1, 10);
if(orderForms.size() > 0){
for(OrderForm order : orderForms){
if(order.getOrder_status() == 30 && order.getUpdate_status() == 1){
Map express_map = Json.fromJson(Map.class,
order.getExpress_info());
//调用ddu
String sendMsg = appendXmlContextTow(order.getNumber(),order.getCode());//拼接请求报文
InputStreamReader isr = null;// 开启HTTP连接
BufferedReader inReader = null;
StringBuffer result = null;
OutputStream outObject = null;
URL url = new URL("***/webservice.php?wsdl");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
//设置请求方式默认为GET
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Length",
String.valueOf(sendMsg.getBytes().length));
httpConn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
httpConn.setDoOutput(true);//设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true, 默认情况下是false;
httpConn.setDoInput(true); //设置是否从httpUrlConnection读入,默认情况下是true;
outObject = httpConn.getOutputStream();// 进行HTTP请求,此处getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法, 所以在开发中不调用上述的connect()也可以)
outObject.write(sendMsg.getBytes());
if (200 != (httpConn.getResponseCode())) {
throw new Exception("HTTP Request is not success, Response code is " + httpConn.getResponseCode());
}
isr = new InputStreamReader(
httpConn.getInputStream(), "utf-8"); // 获取HTTP响应流(响应数据)
inReader = new BufferedReader(isr);
result = new StringBuffer();
String inputLine;
while ((inputLine = inReader.readLine()) != null) {
result.append(inputLine);
}
String xmlResult = result.toString().replace("<", "<");
//报文返回状态码,1表示正常
String responseCode = SOAPUtils.getXmlMessageByName(xmlResult, "responseCode");
if("1".equals(responseCode)){
JSONArray jsonArray = dom4jXml(xmlResult);
if(jsonArray != null){
List<String> list = new ArrayList<String>();
for(Object obj : jsonArray){
JSONObject jo = (JSONObject) obj;
String status = jo.get("status").toString();
list.add(status);
}
if(list.contains("DELIVERED")){
order.setUpdate_status(-1);
}else{
order.setUpdate_status(2);
}
}
order.setLogistics_info(jsonArray.toString());
this.orderFormDAO.update(order);
}
}
}
}else{
params.clear();
params.put("update", 2);
orderForms = this.orderFormDAO.query("select obj from OrderForm obj where obj.update_status=:update", params, -1, -1);
if(orderForms.size() > 0){
for(OrderForm order : orderForms){
order.setUpdate_status(1);
this.orderFormDAO.update(order);
}
}
}
}
/**
* 解析ddu返回xml
* @param interfaceData
* @return
* @throws Exception
*/
public static JSONArray dom4jXml(String interfaceData) throws Exception{
List<Element> elementList = null;
List<Ddu> Ddus = null;
try {
SAXReader sr = new SAXReader();
Document document = sr.read(new ByteArrayInputStream(interfaceData.getBytes()));
Element root = document.getRootElement();
elementList = root.elements();
Ddus = new ArrayList();
} catch (DocumentException e) {
e.printStackTrace();
}
for (Element e : elementList) {
// 解析标签下一级标签
Element e1 = e.element("GetStatusDetailsResponse");
Element e2 = e1.element("return");
Element e3 = e2.element("responseArray");
List<Element> elementList1 = e3.elements();
for (Element el:elementList1){
Ddu ddu = new Ddu();
ddu.setTime(el.elementText("SDate"));
ddu.setStatus(el.elementText("CStatus"));
ddu.setLocation(el.elementText("SLocation"));
ddu.setDetails(el.elementText("SDetails"));
Ddus.add(ddu);
}
}
return JSONArray.fromObject(Ddus);
}
// 构建请求报文
private static String appendXmlContextTow(String BookingNumber, String CompanyCode) {
List<String> list = new ArrayList<String>();
StringBuffer stringBuffer = new StringBuffer("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:com=\"http://com.foresee.top.service/\">\n" +
" <soapenv:Body>\n" +
" <GetStatusDetails>\n" + //该标签为请求方法名
" <SaveProductResult>\n" +
" <BookingNumber>" + BookingNumber+ "</BookingNumber>\n" +
" <CompanyCode>" + CompanyCode+ "</CompanyCode>\n" +
" </SaveProductResult>\n" +
" </GetStatusDetails>\n" +
" </soapenv:Body>\n" +
"</soapenv:Envelope>");
return stringBuffer.toString();
}