package com.slcf.filter; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.Date; import javax.annotation.Resource; import com.slcf.pojo.SapRequestLogBean; import com.slcf.service.SapRequestLogService; 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(5000); } catch (InterruptedException e) { e.printStackTrace(); } } } /** * 处理入库通知档数据 */ 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_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(); } } try { JSONObject jsObj = new JSONObject(); 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; //创建连接 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(); } } try { 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) 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 = 3; if(waitPakOut.getAction()==1 && waitPakOut.getPrnstatus()==2) { action = 1; } 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 = 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("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()); 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