callm 3 жил өмнө
parent
commit
bcd79c1299

+ 1 - 0
WebContent/resource/i18n/messages_zh_CN.js

@@ -640,6 +640,7 @@ var $I18N = {
                 erpConfirmYFYFButton:'预付-应付明细确认',
                 erpConfirmYSYSButton:'预收-应收明细确认',
                 erpModifyCommonButton:'更新数据',
+				erpSendSop:'下放SOP',
                 erpVastLockBatchButton:'批量锁库',
                 erpVastUnLockBatchButton:'批量解锁',
                 erpGetStandardUUIdButton:'维护标准料号',

+ 68 - 0
src/com/uas/mes/api/pda/PdaGetESOPController.java

@@ -0,0 +1,68 @@
+package com.uas.mes.api.pda;
+
+import com.uas.mes.api.core.BaseApiController;
+import com.uas.mes.core.exception.APIErrorException;
+import com.uas.mes.core.exception.APIErrorException.APIErrorCode;
+import com.uas.mes.api.core.BaseApiController;
+import com.uas.mes.pda.service.PdaGetESOPService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * @date  2022-11-16
+ * @author XiaoST
+ *  安卓sop获取的接口
+ *
+ */
+@RestController("api.pdaGetESOPController")
+@RequestMapping("/api/pda/ESOP")
+public class PdaGetESOPController extends BaseApiController {
+
+    @Autowired
+    private PdaGetESOPService pdaGetESOPService;
+
+    /**
+     * 传参:sourcecode岗位资源编号,makecode 工单号
+     * 返回:从productsop表获取对应sourcecode和makecode对应产品匹配的sop记录
+     *     (最好用个函数或者存储过程方便维护取数规则)的附件字段,返回结果:是否成功,版本号PS_CODE,附件文件数组
+     * @return
+     */
+    @RequestMapping(value = "/getESOP.action", method = RequestMethod.GET)
+    public ModelMap getESOP(String ps_code,String ss_code) throws Exception {
+        if (StringUtils.isEmpty(ps_code))
+            throw new APIErrorException(APIErrorCode.ILLEGAL_ARGUMENTS, "请输入产品SOP编号");
+        if (StringUtils.isEmpty(ss_code))
+            throw new APIErrorException(APIErrorCode.ILLEGAL_ARGUMENTS, "请输入站点编号");
+        return success(pdaGetESOPService.getESOP(ps_code,ss_code));
+    }
+    /*
+     *
+     *
+     * */
+    @RequestMapping(value = "/getSopSource.action")
+    public ModelMap getSopSource() throws Exception {
+        return success(pdaGetESOPService.getSopSource());
+    }
+
+    @RequestMapping(value = "/getProductSOP.action")
+    public ModelMap getProductSOP() throws Exception {
+        return success(pdaGetESOPService.getProductSOP());
+    }
+
+    @RequestMapping(value = "/getSOPAddress.action")
+    public ModelMap getSOPAddress(String ps_code, String ss_code) throws Exception {
+        if (StringUtils.isEmpty(ps_code))
+            throw new APIErrorException(APIErrorCode.ILLEGAL_ARGUMENTS, "请输入SOP编号");
+        return success(pdaGetESOPService.getSOPAddress(ps_code,ss_code));
+    }
+
+    @RequestMapping(value = "/sendSop.action")
+    public ModelMap sendSop(String data) throws Exception {
+        return success(pdaGetESOPService.sendSop(data));
+    }
+}

+ 20 - 0
src/com/uas/mes/pda/service/PdaGetESOPService.java

@@ -0,0 +1,20 @@
+package com.uas.mes.pda.service;
+
+import org.apache.poi.hslf.record.CString;
+
+import java.util.List;
+import java.util.Map;
+
+public interface PdaGetESOPService {
+
+    public Map<String, Object> getESOP(String ps_code,String ss_code) throws Exception;
+
+    public List<Map<String, String>> getSopSource() throws Exception;
+
+    public List<Map<String, String>> getProductSOP() throws Exception;
+
+    public Map<String, Object> getSOPAddress(String ps_code,String ss_code) throws Exception;
+
+    public Map<String, Object> sendSop(String data) throws Exception;
+
+}

+ 2 - 1
src/com/uas/mes/pda/service/impl/PdaFeederUseServiceImpl.java

@@ -3,6 +3,7 @@ package com.uas.mes.pda.service.impl;
 import java.util.List;
 import java.util.Map;
 
+import com.uas.mes.common.util.BaseUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -60,7 +61,7 @@ public class PdaFeederUseServiceImpl implements PdaFeederUseService {
 		if (rs.next()) {
 			return pdaCommonDao.changeKeyToLowerCase(rs.getResultList());
 		} else {
-			// BaseUtil.showError("不存在需要领取的飞达!");
+			BaseUtil.showError("不存在需要领取的飞达!");
 		}
 		return null;
 	}

+ 201 - 0
src/com/uas/mes/pda/service/impl/PdaGetESOPServiceImpl.java

@@ -0,0 +1,201 @@
+package com.uas.mes.pda.service.impl;
+
+import com.uas.mes.core.exception.APIErrorException;
+import com.uas.mes.core.util.CollectionUtil;
+import com.uas.mes.core.util.StringUtil;
+import com.uas.mes.pda.service.PdaGetESOPService;
+import sun.misc.BASE64Encoder;
+import com.uas.mes.common.util.BaseUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.uas.mes.common.data.BaseDao;
+import com.uas.mes.core.data.SqlRowList;
+import com.uas.mes.core.exception.SystemException;
+import com.uas.mes.core.util.FlexJsonUtil;
+import com.uas.mes.pda.dao.PdaCommonDao;
+import com.uas.mes.pda.service.PdaFeederUseService;
+import com.uas.mes.pm.service.FeederUseService;
+import sun.misc.BASE64Decoder;
+import sun.misc.BASE64Encoder;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author xiaost
+ * @date 2022/11/17 10:39
+ **/
+@Service("pdaGetESOPService")
+public class PdaGetESOPServiceImpl implements PdaGetESOPService {
+
+
+    @Autowired
+    private BaseDao baseDao;
+
+    @Override
+    public Map<String, Object> getESOP(String ps_code, String ss_code) throws Exception {
+
+        /* 传参:sourcecode岗位资源编号,makecode 工单号
+         * 返回:从productsop表获取对应sourcecode和makecode对应产品匹配的sop记录
+         *     (最好用个函数或者存储过程方便维护取数规则)的附件字段,返回结果:是否成功,版本号PS_CODE,附件文件数组
+         */
+        List<String> list = baseDao.callProcedureWithOut("GETSOP",new Object[]{ps_code},new Integer[]{1},new Integer[]{2,3,4});
+        if(StringUtil.hasText(list.get(0))) {
+            throw new APIErrorException(APIErrorException.APIErrorCode.BUSINESS_FAILED,list.get(0));
+        }else{
+            Map<String, Object> map = new HashMap<>();
+            map.put("ps_code", list.get(1));
+            if(StringUtil.hasText(list.get(2))) {
+                //;分割
+                String[] pathids =  list.get(2).split(";");
+                String pathroot = baseDao.getDBSetting("filePathUrl");
+                SqlRowList rs = baseDao.queryForRowSet("select fp_path,fp_name from filepath where fp_id in (" + CollectionUtil.toString(pathids) + ") and nvl(fp_path,' ')<>' '");
+                if(rs.next()){
+                    List<Map<String,Object>> listr = new ArrayList<>();
+                    for(Map<String,Object> mp :rs.getResultList()){
+                        //盐加密
+                        Map<String, Object> mp1 = new HashMap<>();
+                        String path = mp.get("fp_path").toString();
+                        path = path.replaceAll("/app/mes/webapps/postattach",pathroot);
+                        // mp1.put("path",MD5Encode(path+"{"+SystemSession.getUser().getEm_code()+"}" ));   //MD5加密,盐
+                        mp1.put("path",encryptBASE64(path));
+                        String pa = decryBASE64(mp1.get("path").toString().replaceAll("\\s*|\r|\n|\t",""));
+                        mp1.put("filename",mp.get("fp_name"));
+                        listr.add(mp1);
+                    }
+                    map.put("url",listr);
+                }else {
+                    map.put("url", null);
+                }
+            }
+            return map;
+        }
+    }
+
+    @Override
+    public List<Map<String, String>> getSopSource() throws Exception {
+        List<Map<String, String>>  maps =   new ArrayList<Map<String, String>>();
+        SqlRowList rs=baseDao.queryForRowSet("select * from SOPSOURCE");
+        while (rs.next()){
+            Map<String, String>  map =    new HashMap<>();
+            map.put("SS_CODE",rs.getString("SS_CODE"));
+            map.put("SS_NAME",rs.getString("SS_NAME"));
+            map.put("SS_LINECODE",rs.getString("SS_LINECODE"));
+            map.put("SS_WCCODE",rs.getString("SS_WCCODE"));
+            map.put("SS_STEPCODE",rs.getString("SS_STEPCODE"));
+            map.put("ss_brdip",rs.getString("ss_brdip"));
+            map.put("ss_brdport",rs.getString("ss_brdport"));
+            maps.add(map);
+        }
+        return  maps;
+    }
+    TcpServer tcpServer = new TcpServer(9999);
+    @Override
+    public  List<Map<String, String>> getProductSOP() throws Exception {
+        List<Map<String, String>>  maps =   new ArrayList<Map<String, String>>();
+        SqlRowList rs=baseDao.queryForRowSet("select * from productsop");
+        while (rs.next()){
+            Map<String, String>  map =    new HashMap<>();
+            map.put("PS_CODE",rs.getString("PS_CODE"));
+            map.put("PS_PRODCODE",rs.getString("PS_PRODCODE"));
+            map.put("PS_STEPCODE",rs.getString("PS_STEPCODE"));
+            maps.add(map);
+        }
+        return  maps;
+    }
+
+    @Override
+    public Map<String, Object> getSOPAddress(String ps_code, String ss_code) throws Exception {
+
+        return null;
+    }
+
+    @Override
+    public Map<String, Object> sendSop(String data) throws Exception {
+        //使用独立线程进行开启端口
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                tcpServer.start();
+            }
+        }).start();
+        List<Map<Object, Object>> maps = BaseUtil.parseGridStoreToMaps(data);
+        List<Map<String,Object>> listr = new ArrayList<>();
+        Thread.sleep(5000);
+        for (Map<Object, Object> m : maps) {
+
+            SqlRowList rs=baseDao.queryForRowSet("select ps_code,PS_ATTACHSOP,PS_SOURCECODE,ps_prodcode from productsop where ps_code='"+m.get("ss_pscode").toString()+"'");
+            if(rs.next()){
+                String attach=rs.getString("PS_ATTACHSOP");
+                String sourcecode=rs.getString("PS_SOURCECODE");
+                String prodcode=rs.getString("ps_prodcode");
+                String ps_code=rs.getString("ps_code");
+                String[] pathids = attach.split(";");
+                String pathroot = baseDao.getDBSetting("filePathUrl");
+                rs = baseDao.queryForRowSet("select fp_path,fp_name from filepath where fp_id in (" + CollectionUtil.toString(pathids) + ") and nvl(fp_path,' ')<>' '");
+                if(rs.next()){
+
+                    String path;
+                    String filename;
+                    for(Map<String,Object> mp :rs.getResultList()){
+                        //盐加密
+                        Map<String, Object> mp1 = new HashMap<>();
+                        path = mp.get("fp_path").toString();
+                        path = path.replaceAll("/app/mes/webapps/postattach",pathroot);
+                        // mp1.put("path",MD5Encode(path+"{"+SystemSession.getUser().getEm_code()+"}" ));   //MD5加密,盐
+                        mp1.put("path",encryptBASE64(path).replaceAll("\\s*|\r|\n|\t",""));
+                        mp1.put("filename",mp.get("fp_name"));
+                        mp1.put("ss_code",m.get("ss_code"));
+                        mp1.put("ps_sourcecode",sourcecode);
+                        mp1.put("ps_prodcode",prodcode);
+                        mp1.put("ps_code",ps_code);
+                        listr.add(mp1);
+                    }
+                }
+            }
+        }
+        tcpServer.Send(listr.toString());
+        tcpServer.stop();
+        return null;
+    }
+
+
+
+    /***
+
+     * BASE64解密
+
+     * @param key
+
+     * @return
+
+     * @throws Exception
+
+     */
+    public static String decryBASE64(String key) throws Exception{
+
+        return new String((new BASE64Decoder()).decodeBuffer(key));
+
+    }
+
+    /***
+
+     * BASE64加密
+
+     * @param key
+
+     * @return
+
+     * @throws Exception
+
+     */
+
+    public static String encryptBASE64(String key) throws Exception{
+
+        return (new BASE64Encoder()).encode(key.getBytes());
+
+    }
+}

+ 138 - 0
src/com/uas/mes/pda/service/impl/TcpServer.java

@@ -0,0 +1,138 @@
+package com.uas.mes.pda.service.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.ArrayList;
+
+public class TcpServer {
+    private int port;
+    private boolean isFinished;
+    private ServerSocket serverSocket;
+    private ArrayList<SocketThread> socketThreads;
+
+
+    public TcpServer(int port) {
+        this.port = port;
+        socketThreads = new ArrayList<>();
+    }
+
+    public void start() {
+        isFinished = false;
+        try {
+            //创建服务器套接字,绑定到指定的端口
+            serverSocket = new ServerSocket(port);
+
+            //等待客户端连接
+            while (!isFinished) {
+                Socket socket = serverSocket.accept();//接受连接
+                //创建线程处理连接
+                SocketThread socketThread = new SocketThread(socket);
+                socketThreads.add(socketThread);
+                socketThread.start();
+            }
+        } catch (IOException e) {
+            System.out.printf(e.getMessage());
+            isFinished = true;
+        }
+    }
+
+    public void Send(String data) throws IOException {
+        for (SocketThread socketThread : socketThreads) {
+            try{
+                socketThread.Send(data);
+            }catch (Exception e){
+                socketThread.socket.close();
+                System.out.printf(e.getMessage());
+            }
+        }
+    }
+
+
+    public void stop() {
+        isFinished = true;
+        for (SocketThread socketThread : socketThreads) {
+            socketThread.interrupt();
+            socketThread.close();
+        }
+        try {
+            if (serverSocket != null) {
+                serverSocket.setReuseAddress(true);
+                serverSocket.close();
+                serverSocket = null;
+            }
+        } catch (IOException e) {
+            System.out.printf(e.getMessage());
+            e.printStackTrace();
+        }
+    }
+
+    private class SocketThread extends Thread {
+
+        private Socket socket;
+        private InputStream in;
+        private OutputStream out;
+
+        SocketThread(Socket socket) {
+            this.socket = socket;
+            try {
+                in = socket.getInputStream();
+                out = socket.getOutputStream();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+        public  void Send(String Data) throws IOException {
+            out.write(Data.getBytes());
+            out.flush();
+        }
+
+        @Override
+        public void run() {
+            while (!isInterrupted()) {
+                if (in == null) {
+                    return;
+                }
+                try {
+                    int available = in.available();
+                    if (available > 0) {
+                        byte[] buffer = new byte[available];
+                        int size = in.read(buffer);
+                        if (size > 0) {
+                            String data = new String(buffer,0,size);
+                            System.out.println("TCPClient say :" + data);
+                            //返回结果给TcpClient
+                            String response = "TCPServer response:" + data;
+                            out.write(response.getBytes());
+                            out.flush();
+                        }
+                    }
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+
+        void close() {
+
+            try {
+                if (in != null) {
+                    in.close();
+                }
+
+                if (out != null) {
+                    out.close();
+                }
+
+                if (socket != null) {
+                    socket.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}