package com.slcf.filter; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.Date; import java.util.HashMap; import javax.annotation.Resource; import com.alibaba.fastjson.JSON; import com.slcf.pojo.SapRequestLogBean; import com.slcf.service.SapRequestLogService; import com.slcf.util.HttpHandler; import net.sf.json.JSONString; import org.activiti.engine.impl.transformer.IntegerToString; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.RequestMapping; import com.slcf.bean.AllBean; import com.slcf.pojo.WaitPakInBean; import com.slcf.pojo.WaitPakOutBean; import com.slcf.service.WaitPakInService; import com.slcf.service.WaitPakOutService; import com.slcf.service.impl.WaitPakInServiceImpl; import com.slcf.util.Constants; import com.slcf.util.SpringBeanUtils; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import sun.misc.BASE64Encoder; /** * 回报,处理与sap交互数据 * @author admin * @Date 2020-02-17 */ //@Service public class UpdateThread extends Thread {//implements Runnable{ // @Resource // WaitPakInService waitPakInService; // @Resource // WaitPakOutService waitPakOutService; // @Resource // private static WaitPakInServiceImpl waitPakInService; @Autowired SapRequestLogService sapRequestLogService; Logger logger=Logger.getLogger(UpdateThread.class); public static int count=0; private WaitPakInService waitPakInService; public WaitPakInService getWaitPakInService() { return waitPakInService; } public void setWaitPakInService(WaitPakInService waitPakInService) { this.waitPakInService = waitPakInService; } private WaitPakOutService waitPakOutService; public WaitPakOutService getWaitPakOutService() { return waitPakOutService; } public void setWaitPakOutService(WaitPakOutService waitPakOutService) { this.waitPakOutService = waitPakOutService; } public void run() { waitPakInService = getWaitPakInService(); waitPakOutService = getWaitPakOutService(); while(true) { try { updateWaitPakInData(); // 入库 sendPickPrintCmd(); // 打印 updateWaitPakOutData(); // 出库 // 清空2天前的日志 sapRequestLogService.clearSapLog(); // updateWaitCheckData(); Thread.sleep(15000); } catch (InterruptedException e) { e.printStackTrace(); } } } public JSONObject requestSAP(JSONObject body, String url) { logger.info(url); JSONObject resp; HashMap requestHeader = new HashMap<>(); requestHeader.put("Accept", "application/json"); requestHeader.put("Content-Type", "application/json"); requestHeader.put("X-Requested-With", "X"); requestHeader.put("Authorization","Basic TElRSTpzdGFydDEu"); requestHeader.put("sap-client","100"); String s = null; try { s = new HttpHandler.Builder() .setUri(url) .setJson(body.toString()) .setHeaders(requestHeader) .build() .doPost(); } catch (IOException e) { throw new RuntimeException(e); } resp = JSONObject.fromObject(s); logger.info("返回体:" + resp); return resp; } /** * 处理入库通知档数据 */ private void updateWaitPakInData() { try { // logger.info("waitIn:" + count++); WaitPakInBean waitPakInBean = waitPakInService.queryWaitPakInFnh(); if(waitPakInBean!=null) { String httpUrl = Constants.SAP_URL + "/sap/opu/odata/SAP/Z_WM_H5_DW_SRV/AsrsTrSet"; int result = sendPakInStatus(httpUrl,waitPakInBean); } }catch(Exception e) { logger.error("SAP Error updateWaitPakInData---" + e.getMessage()); // System.out.println(e.getMessage()); } } /** * 入库完成,调用sap接口上传完成信息 */ private int sendPakInStatus(String httpUrl,WaitPakInBean waitPakIn) { int result = 0; // String token = getXCsrfToken(httpUrl); String input = Constants.SAP_USER + ":" + Constants.SAP_PASSWORD;//"ZHANGX:654321"; BASE64Encoder base = new BASE64Encoder(); String encodedPassword; String token=""; String session_value=""; // HttpURLConnection connection1 = null; // try { // encodedPassword = base.encode(input.getBytes("UTF-8")); // URL url1 = new URL(httpUrl); // connection1 = (HttpURLConnection) url1.openConnection(); // connection1.setDoOutput(true); // connection1.setDoInput(true); // connection1.setConnectTimeout(30000); // connection1.setReadTimeout(30000); // connection1.setRequestMethod("GET"); // connection1.setRequestProperty("Authorization", "Basic " + encodedPassword); // connection1.setRequestProperty("x-csrf-token","Fetch"); // // // String sessionCookie = connection1.getHeaderField("Set-Cookie"); // if(sessionCookie==null || sessionCookie.length()<1) // { // logger.error("SAP ERROR-----调用上架完成接口,get请求获取cookie失败"); // // SAP INFO-----调用上架完成接口,日志记录 // SapRequestLogBean logInfo = new SapRequestLogBean(); // logInfo.setMatnr(waitPakIn.getMatnr()); // logInfo.setRequest("获取cookie失败,cookie值:" + sessionCookie); // logInfo.setResponse("SAP ERROR-----调用上架完成接口,get请求获取cookie失败"); // logInfo.setCreate_time(new Date()); // logInfo.setType(2); //// sapRequestLogService.addSapLog(logInfo); // return result; // } // String[] sessionId = sessionCookie.split(";"); // session_value = sessionId[0]; // token = connection1.getHeaderField("x-csrf-token"); //// Map> map = connection1.getHeaderFields(); //// token = map.get("x-csrf-token").toString(); // } catch (Exception e1) { // logger.error("SAP ERROR-----调用上架完成接口1,get请求获取cookie失败。" + e1.getMessage()); // // SAP INFO-----调用上架完成接口,日志记录 // SapRequestLogBean logInfo = new SapRequestLogBean(); // logInfo.setMatnr(waitPakIn.getMatnr()); // logInfo.setRequest("获取cookie失败"); // logInfo.setResponse("SAP ERROR-----调用上架完成接口1,get请求获取cookie失败。" + e1.getMessage()); // logInfo.setCreate_time(new Date()); // logInfo.setType(2); //// sapRequestLogService.addSapLog(logInfo); //// e1.printStackTrace(); // }finally { // if(connection1!=null){ // connection1.disconnect(); // } // } JSONObject jsObj = new JSONObject(); try { JSONArray arr = new JSONArray(); for(int i=0;i<1;i++) { JSONObject json = new JSONObject(); json.put("lgnum",waitPakIn.getLgnum()); json.put("tbnum",Long.toString(waitPakIn.getTbnum())); json.put("tbpos",Integer.toString(waitPakIn.getTbpos())); json.put("zmatid",waitPakIn.getZmatid()); json.put("anfme",Double.toString(waitPakIn.getAnfme())); json.put("altme",waitPakIn.getAltme()); json.put("nltyp","A01"); json.put("nlber","001"); json.put("nlpla",waitPakIn.getLoc_no()); arr.add(json); } jsObj.put("item", arr); byte[] buff = jsObj.toString().getBytes(); int buffLen = buff.length; JSONObject json = requestSAP(jsObj, httpUrl); //创建连接 // HttpURLConnection connection = null; // try { //// String input = "ZHANGX:654321"; //// BASE64Encoder base = new BASE64Encoder(); //// String encodedPassword = base.encode(input.getBytes("UTF-8")); // // URL url = new URL(httpUrl); // connection = (HttpURLConnection) url.openConnection(); // connection.setDoOutput(true); // connection.setDoInput(true); // connection.setRequestMethod("POST"); // connection.setConnectTimeout(30000); // connection.setReadTimeout(30000); //// connection.setUseCaches(false); //// connection.setInstanceFollowRedirects(true); //// connection.setRequestProperty("Content-Type","text/json;charset=gb2312"); // connection.setRequestProperty("Cookie", session_value); // connection.setRequestProperty("Content-Type","application/json"); // connection.setRequestProperty("Accept","application/json"); // connection.setRequestProperty("Accept-Language","zh-CN,zh;q=0.9,en;q=0.8"); // connection.setRequestProperty("Content-Length","" + buffLen); //// connection.setRequestProperty("Authorization", "Basic " + encodedPassword); // connection.setRequestProperty("x-csrf-token",token); // // //POST请求 // OutputStream out = connection.getOutputStream(); // out.write(buff); // out.close(); // // //读取响应 // BufferedReader reader = new BufferedReader(new InputStreamReader( // connection.getInputStream())); // String lines; // StringBuffer sb = new StringBuffer(""); // while ((lines = reader.readLine()) != null) { // lines = new String(lines.getBytes(), "utf-8"); // sb.append(lines); // } // logger.error("SAP INFO-----调用上架完成接口,返回JSON数据:" + sb.toString()); // System.out.println(sb.toString()); // JSONObject json = JSONObject.fromObject(sb.toString()); String d = json.get("d").toString(); JSONObject jsonD = JSONObject.fromObject(d); String Item = jsonD.get("item").toString(); JSONObject jsonItem = JSONObject.fromObject(Item); String results = jsonItem.get("results").toString(); JSONArray array = JSONArray.fromObject(results); if(array.size()>0) { for(int i=0;i> map = connection1.getHeaderFields(); //// token = map.get("x-csrf-token").toString(); // } catch (Exception e1) { // logger.error("调用下架完成接口,get请求获取cookie失败" + e1.getMessage()); // // SAP INFO-----调用上架完成接口,日志记录 // SapRequestLogBean logInfo = new SapRequestLogBean(); // logInfo.setMatnr(waitPakOut.getMatnr()); // logInfo.setRequest("获取cookie失败"); // logInfo.setResponse("调用出库完成接口,get请求获取cookie失败"); // logInfo.setCreate_time(new Date()); // logInfo.setType(2); //// sapRequestLogService.addSapLog(logInfo); //// e1.printStackTrace(); // }finally{ // if(connection1!=null){ // connection1.disconnect(); // } // } logger.info("TEST===>>4"); JSONObject jsObj = new JSONObject(); try { JSONArray arr = new JSONArray(); for(int i=0;i<1;i++) { JSONObject json = new JSONObject(); json.put("lgnum",waitPakOut.getLgnum()); json.put("tanum",Long.toString(waitPakOut.getTanum())); json.put("tapos",Integer.toString(waitPakOut.getTapos())); double nista = waitPakOut.getNista(); // if(nista>0) if(nista>=-1 && (int)nista!=0) { double vsolm = waitPakOut.getVsolm(); if( (int)nista == -1 ) { nista=0; } double ndifa = vsolm - nista; json.put("nista",Double.toString(nista)); //实际数量 json.put("ndifa",Double.toString(ndifa)); //差异数量 } json.put("altme",waitPakOut.getMeins()); json.put("nltyp","A01"); // json.put("nlpla",waitPakOut.getNlpla()); json.put("arbpl","A01-01"); arr.add(json); } int action = 1; if (waitPakOut.getAction() == 3){ action = waitPakOut.getAction(); } jsObj.put("trart", Integer.toString(action)); jsObj.put("item", arr); byte[] buff = jsObj.toString().getBytes(); int buffLen = buff.length; //创建连接 // HttpURLConnection connection = null; // try { //// String input = "ZHANGX:654321"; //// BASE64Encoder base = new BASE64Encoder(); //// String encodedPassword = base.encode(input.getBytes("UTF-8")); // // URL url = new URL(httpUrl); // connection = (HttpURLConnection) url.openConnection(); // connection.setDoOutput(true); // connection.setDoInput(true); // connection.setConnectTimeout(30000); // connection.setReadTimeout(30000); // connection.setRequestMethod("POST"); // // connection.setUseCaches(false); // // connection.setInstanceFollowRedirects(true); //// connection.setRequestProperty("Content-Type","text/json;charset=gb2312"); // connection.setRequestProperty("Cookie", session_value); // connection.setRequestProperty("Content-Type","application/json"); // connection.setRequestProperty("Accept","application/json"); // connection.setRequestProperty("Accept-Language","zh-CN,zh;q=0.9,en;q=0.8"); // connection.setRequestProperty("Content-Length","" + buffLen); //// connection.setRequestProperty("Authorization", "Basic " + encodedPassword); // connection.setRequestProperty("x-csrf-token",token); // // //POST请求 // OutputStream out = connection.getOutputStream(); // out.write(buff); // out.close(); // // //读取响应 // BufferedReader reader = new BufferedReader(new InputStreamReader( // connection.getInputStream())); // String lines; // StringBuffer sb = new StringBuffer(""); // while ((lines = reader.readLine()) != null) { // lines = new String(lines.getBytes(), "utf-8"); // sb.append(lines); // } // System.out.println(sb.toString()); JSONObject json = requestSAP(jsObj, httpUrl); // JSONObject json = JSONObject.fromObject(sb.toString()); String d = json.get("d").toString(); JSONObject jsonD = JSONObject.fromObject(d); String Item = jsonD.get("item").toString(); JSONObject jsonItem = JSONObject.fromObject(Item); String results = jsonItem.get("results").toString(); JSONArray array = JSONArray.fromObject(results); logger.info("出库通知档SAP返回数据集大小 ===>> " + array.size()); if(array.size()>0) { for(int i=0;i> map = connection1.getHeaderFields(); //// token = map.get("x-csrf-token").toString(); // } catch (Exception e1) { // logger.error("sendPrinCommand1-----调用打印接口请求cookie失败" + waitPakOut.getMaktx() + e1.getMessage()); // // 调用sap打印接口,记录日志 // SapRequestLogBean logInfo = new SapRequestLogBean(); // logInfo.setMatnr(waitPakOut.getMatnr()); // logInfo.setRequest("sendPrinCommand1-----调用打印接口请求cookie失败" + waitPakOut.getMaktx()); // logInfo.setResponse(e1.getMessage()); // logInfo.setCreate_time(new Date()); // logInfo.setType(2); // sapRequestLogService.addSapLog(logInfo); // e1.printStackTrace(); // }finally{ // if(connection1!=null){ // connection1.disconnect(); // } // } try { // logger.error("sendPrinCommand2-----开始调用打印接口" + waitPakOut.getMaktx()); JSONObject jsObj = new JSONObject(); JSONArray arr = new JSONArray(); for(int i=0;i<1;i++) { JSONObject json = new JSONObject(); json.put("lgnum",waitPakOut.getLgnum()); json.put("tanum",Long.toString(waitPakOut.getTanum())); json.put("tapos",Integer.toString(waitPakOut.getTapos())); double nista = waitPakOut.getNista(); if(nista>0) { double vsolm = waitPakOut.getVsolm(); double ndifa = vsolm - nista; json.put("nista",Double.toString(nista)); //实际数量 json.put("ndifa",Double.toString(ndifa)); //差异数量 } json.put("altme",waitPakOut.getMeins()); json.put("nltyp","A01"); // json.put("nlpla",waitPakOut.getNlpla()); json.put("arbpl","A01-01"); arr.add(json); } jsObj.put("trart", "2"); jsObj.put("item", arr); byte[] buff = jsObj.toString().getBytes(); int buffLen = buff.length; //创建连接 // HttpURLConnection connection = null; // try { //// String input = "ZHANGX:654321"; //// BASE64Encoder base = new BASE64Encoder(); //// String encodedPassword = base.encode(input.getBytes("UTF-8")); // // URL url = new URL(httpUrl); // connection = (HttpURLConnection) url.openConnection(); // connection.setDoOutput(true); // connection.setDoInput(true); // connection.setConnectTimeout(30000); // connection.setReadTimeout(30000); // connection.setRequestMethod("POST"); // // connection.setUseCaches(false); // // connection.setInstanceFollowRedirects(true); //// connection.setRequestProperty("Content-Type","text/json;charset=gb2312"); // connection.setRequestProperty("Cookie", session_value); // connection.setRequestProperty("Content-Type","application/json"); // connection.setRequestProperty("Accept","application/json"); // connection.setRequestProperty("Accept-Language","zh-CN,zh;q=0.9,en;q=0.8"); // connection.setRequestProperty("Content-Length","" + buffLen); //// connection.setRequestProperty("Authorization", "Basic " + encodedPassword); // connection.setRequestProperty("x-csrf-token",token); // // //POST请求 // OutputStream out = connection.getOutputStream(); // out.write(buff); // out.close(); //// logger.error("sendPrinCommand3-----调用打印接口" + waitPakOut.getMaktx()); // //读取响应 // BufferedReader reader = new BufferedReader(new InputStreamReader( // connection.getInputStream())); // String lines; // StringBuffer sb = new StringBuffer(""); // while ((lines = reader.readLine()) != null) { // lines = new String(lines.getBytes(), "utf-8"); // sb.append(lines); // } //// System.out.println(sb.toString()); // JSONObject json = JSONObject.fromObject(sb.toString()); JSONObject json = requestSAP(jsObj, httpUrl); String d = json.get("d").toString(); JSONObject jsonD = JSONObject.fromObject(d); String Item = jsonD.get("item").toString(); JSONObject jsonItem = JSONObject.fromObject(Item); String results = jsonItem.get("results").toString(); JSONArray array = JSONArray.fromObject(results); logger.error("sendPrinCommand4-----调用打印接口" + waitPakOut.getMaktx()); if(array.size()>0) { for(int i=0;i