From 522f6806cde91d524e196626fdfe5ab4b5e3c9e2 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期一, 17 八月 2020 17:04:15 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/controller/CrnController.java |  297 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 262 insertions(+), 35 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/CrnController.java b/src/main/java/com/zy/asrs/controller/CrnController.java
index dd1872d..cbc1d78 100644
--- a/src/main/java/com/zy/asrs/controller/CrnController.java
+++ b/src/main/java/com/zy/asrs/controller/CrnController.java
@@ -1,42 +1,76 @@
 package com.zy.asrs.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
 import com.core.common.R;
+import com.core.exception.CoolException;
 import com.zy.asrs.domain.enums.CrnStatusType;
 import com.zy.asrs.domain.param.CrnOperatorParam;
 import com.zy.asrs.domain.vo.CommandLogVo;
 import com.zy.asrs.domain.vo.CrnMsgTableVo;
 import com.zy.asrs.domain.vo.CrnStateTableVo;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.WrkMastService;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.OutputQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.CrnModeType;
+import com.zy.core.enums.CrnTaskModeType;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.CrnSlave;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.CrnCommand;
+import com.zy.core.model.protocol.CrnProtocol;
+import com.zy.core.properties.SlaveProperties;
+import com.zy.core.thread.CrnThread;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
-import java.util.UUID;
 import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * 鍫嗗灈鏈烘帴鍙�
  * Created by vincent on 2020-06-01
  */
+@Slf4j
 @RestController
 @RequestMapping("/crn")
 public class CrnController {
-
-    public static AtomicInteger integer = new AtomicInteger();
+    private static AtomicInteger integer = new AtomicInteger();
+    @Autowired
+    private SlaveProperties slaveProperties;
+    @Autowired
+    private WrkMastService wrkMastService;
 
     @ManagerAuth(memo = "杩涜涓殑鍛戒护")
     @PostMapping("/command/ongoing")
     public R ongoingCommand(){
         List<CommandLogVo> list = new ArrayList<>();
-        for (int i=1;i<=4;i++){
+        for (CrnSlave crn : slaveProperties.getCrn()) {
             CommandLogVo vo = new CommandLogVo();
-            vo.setCrnNo(String.valueOf(i));
-            vo.setStatus(1);
-            vo.setCommand(UUID.randomUUID().toString());
+            vo.setCrnNo(crn.getId());   //  鍫嗗灈鏈哄彿
+            vo.setStatus(0);    //  鐘舵��
             list.add(vo);
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+            if (crnThread == null) {
+                continue;
+            }
+            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if (crnProtocol == null) {
+                continue;
+            }
+            vo.setStatus(1);    //  鐘舵��
+            Task task = MessageQueue.peek(SlaveType.Crn, crn.getId());
+            if (task != null) {
+                vo.setCommand(JSON.toJSONString((CrnCommand)task.getData()));
+            }
         }
         return R.ok().add(list);
     }
@@ -45,16 +79,39 @@
     @ManagerAuth(memo = "鍫嗗灈鏈轰俊鎭〃")
     public R crnStateTable(){
         List<CrnStateTableVo> list = new ArrayList<>();
-        for (int i=1;i<=4;i++){
-            CrnStateTableVo vo = new CrnStateTableVo(String.valueOf(i), CrnStatusType.AUTO, "姝e父", "鏈夌墿", "99", "3", "涓綅", "18233", "422", "0", "1204", "鍏抽棴", "0");
-            if (integer.get()%5 == 0) {
-                vo.setWorkNo("0000");
-            } else {
-                vo.setWorkNo("9998");
+        for (CrnSlave crn : slaveProperties.getCrn()) {
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+            if (crnThread == null) {
+                log.error("{}鍙峰爢鍨涙満杩炴帴澶辫触", crn.getId());
+                continue;
             }
+            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if (crnProtocol == null) {
+                log.error("{}鍙峰爢鍨涙満杩炴帴澶辫触", crn.getId());
+                continue;
+            }
+            // 琛ㄦ牸琛�
+            CrnStateTableVo vo = new CrnStateTableVo();
+            vo.setCrnNo(crn.getId());   //  鍫嗗灈鏈哄彿
+            vo.setWorkNo(crnProtocol.getTaskNo());  //  浠诲姟鍙�
+            if (crnProtocol.getTaskNo()>0) {
+                WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo());
+                if (wrkMast != null) {
+                    vo.setStatusType(CrnStatusType.process(wrkMast.getIoType()).getDesc());   //  妯″紡鐘舵��
+                }
+            } else {
+                vo.setStatusType(crnProtocol.modeType.equals(CrnModeType.AUTO)? CrnStatusType.AUTO.getDesc(): CrnStatusType.UN_AUTO.getDesc());   //  妯″紡鐘舵��
+            }
+            vo.setStatus(crnProtocol.getStatusType().desc);     //  鐘舵��
+            vo.setWarn(""); //  鎶ヨ todo
+            vo.setLoading(crnProtocol.getLoaded()==1?"Y":"N");  //  鏈夌墿
+            vo.setBay(crnProtocol.getBay());    //  鍒�
+            vo.setLev(crnProtocol.getLevel());  //  灞�
+            vo.setForkOffset(crnProtocol.getForkPosType().desc);    //  璐у弶浣嶇疆
+            vo.setLiftPos(crnProtocol.getLiftPosType().desc);   //  杞借揣鍙颁綅缃�
             list.add(vo);
         }
-        integer.getAndIncrement();
         return R.ok().add(list);
     }
 
@@ -62,34 +119,52 @@
     @ManagerAuth(memo = "鍫嗗灈鏈烘暟鎹〃")
     public R crnMsgTable(){
         List<CrnMsgTableVo> list = new ArrayList<>();
-        for (int i=1;i<=4;i++){
+        for (CrnSlave crn : slaveProperties.getCrn()) {
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+            if (crnThread == null) {
+                continue;
+            }
+            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if (crnProtocol == null) {
+                continue;
+            }
+            // 琛ㄦ牸琛�
             CrnMsgTableVo vo = new CrnMsgTableVo();
-            vo.setCrnNo(String.valueOf(i));
-            vo.setCommand("28283E23132D23");
-            vo.setError("");
-            vo.setLocNo("0601812");
-            vo.setOrigin("0");
-            vo.setSourceLocNo("");
-            vo.setSourceStaNo("0");
-            vo.setStaNo("2112");
-            vo.setStatus("绌洪棽");
-            if (integer.get()%5 == 0) {
-                vo.setWorkNo("0000");
+            vo.setCrnNo(crn.getId());   //  鍫嗗灈鏈哄彿
+            vo.setWorkNo(crnProtocol.getTaskNo());  //  浠诲姟鍙�
+            if (crnProtocol.getTaskNo()>0) {
+                WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo());
+                if (wrkMast != null) {
+                    vo.setStatus(CrnStatusType.process(wrkMast.getIoType()).getDesc());   //  妯″紡鐘舵��
+                    vo.setSourceStaNo(wrkMast.getSourceStaNo$());    //  婧愮珯
+                    vo.setStaNo(wrkMast.getStaNo$());   //  鐩爣绔�
+                    vo.setSourceLocNo(wrkMast.getSourceLocNo());    //  婧愬簱浣�
+                    vo.setLocNo(wrkMast.getLocNo());    //  鐩爣搴撲綅
+                }
             } else {
-                vo.setWorkNo("9998");
+                vo.setStatus(crnProtocol.modeType.equals(CrnModeType.AUTO)? CrnStatusType.AUTO.getDesc(): CrnStatusType.UN_AUTO.getDesc());   //  妯″紡鐘舵��
             }
             list.add(vo);
+
         }
-        integer.getAndIncrement();
         return R.ok().add(list);
     }
 
     @PostMapping("/output/site")
     @ManagerAuth(memo = "鍫嗗灈鏈烘姤鏂囨棩蹇楄緭鍑�")
     public R crnOutput(){
-        String str = "\n" +new Date().toLocaleString() + "銆�2020-5-29 13:14:22銆戞壂鎻弍lcA 鐩爣绔�--273283723728327636432343234323422732837237283276364323432343234227328372372832763643234323432342";
-        return R.ok().add(str);
+        StringBuilder str = new StringBuilder();
+        String s;
+        int i = 0;
+        while( (s = OutputQueue.CRN.poll()) != null && i <=10) {
+            str.append("\n").append(s);
+            i++;
+        }
+//        str = new StringBuilder("\n" + new Date().toLocaleString() + "銆�2020-5-29 13:14:22銆戞壂鎻弍lcA 鐩爣绔�--273283723728327636432343234323422732837237283276364323432343234227328372372832763643234323432342");
+        return R.ok().add(str.toString());
     }
+
 
     /****************************************************************/
     /************************** 鎵嬪姩鎿嶄綔 ******************************/
@@ -98,19 +173,130 @@
     @ManagerAuth(memo = "鍏ュ簱")
     @PostMapping("/operator/put")
     public R crnPut(CrnOperatorParam param){
-        return R.ok("鍏ュ簱鎴愬姛");
+        if (param.getCrnNo() == null) {
+            return R.error(BaseRes.PARAM);
+        }
+        for (CrnSlave crn : slaveProperties.getCrn()) {
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            if (param.getCrnNo().equals(crn.getId())) {
+                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+                if (crnThread == null) {
+                    break;
+                }
+                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                if (crnProtocol == null) {
+                    break;
+                }
+                // 绌洪棽鍒ゆ柇
+                if (crnProtocol.getStatusType().equals(com.zy.core.enums.CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) {
+                    CrnCommand command = new CrnCommand();
+                    command.setCrnNo(param.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+                    command.setTaskNo((short) 0); // 宸ヤ綔鍙�
+                    command.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                    command.setTaskMode(CrnTaskModeType.PAKIN); // 浠诲姟妯″紡
+                    command.setSourcePosX(param.getSourceRow());     // 婧愬簱浣嶆帓
+                    command.setSourcePosY(param.getSourceBay());     // 婧愬簱浣嶅垪
+                    command.setSourcePosZ(param.getSourceLev());     // 婧愬簱浣嶅眰
+                    command.setDestinationPosX(param.getRow());     // 鐩爣搴撲綅鎺�
+                    command.setDestinationPosY(param.getBay());     // 鐩爣搴撲綅鍒�
+                    command.setDestinationPosZ(param.getLev());     // 鐩爣搴撲綅灞�
+                    if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, command))) {
+                        return R.error("鍛戒护涓嬪彂澶辫触");
+                    } else {
+                        return R.ok();
+                    }
+                } else {
+                    return R.error("鍫嗗灈鏈洪潪绌洪棽鐘舵��");
+                }
+            }
+        }
+        return R.error("鍫嗗灈鏈轰笉鍦ㄧ嚎");
     }
 
     @ManagerAuth(memo = "鍑哄簱")
     @PostMapping("/operator/take")
     public R crnTake(CrnOperatorParam param){
-        return R.ok("鍑哄簱鎴愬姛");
+        if (param.getCrnNo() == null) {
+            return R.error(BaseRes.PARAM);
+        }
+        for (CrnSlave crn : slaveProperties.getCrn()) {
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            if (param.getCrnNo().equals(crn.getId())) {
+                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+                if (crnThread == null) {
+                    break;
+                }
+                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                if (crnProtocol == null) {
+                    break;
+                }
+                // 绌洪棽鍒ゆ柇
+                if (crnProtocol.getStatusType().equals(com.zy.core.enums.CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) {
+                    CrnCommand command = new CrnCommand();
+                    command.setCrnNo(param.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+                    command.setTaskNo((short) 0); // 宸ヤ綔鍙�
+                    command.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                    command.setTaskMode(CrnTaskModeType.PAKOUT); // 浠诲姟妯″紡
+                    command.setSourcePosX(param.getSourceRow());     // 婧愬簱浣嶆帓
+                    command.setSourcePosY(param.getSourceBay());     // 婧愬簱浣嶅垪
+                    command.setSourcePosZ(param.getSourceLev());     // 婧愬簱浣嶅眰
+                    command.setDestinationPosX(param.getRow());     // 鐩爣搴撲綅鎺�
+                    command.setDestinationPosY(param.getBay());     // 鐩爣搴撲綅鍒�
+                    command.setDestinationPosZ(param.getLev());     // 鐩爣搴撲綅灞�
+                    if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, command))) {
+                        return R.error("鍛戒护涓嬪彂澶辫触");
+                    } else {
+                        return R.ok();
+                    }
+                } else {
+                    return R.error("鍫嗗灈鏈洪潪绌洪棽鐘舵��");
+                }
+            }
+        }
+        return R.error("鍫嗗灈鏈轰笉鍦ㄧ嚎");
     }
 
     @ManagerAuth(memo = "搴撲綅杞Щ")
     @PostMapping("/operator/stockMove")
     public R crnStockMove(CrnOperatorParam param){
-        return R.ok("搴撲綅杞Щ鎴愬姛");
+        if (param.getCrnNo() == null) {
+            return R.error(BaseRes.PARAM);
+        }
+        for (CrnSlave crn : slaveProperties.getCrn()) {
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            if (param.getCrnNo().equals(crn.getId())) {
+                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+                if (crnThread == null) {
+                    break;
+                }
+                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                if (crnProtocol == null) {
+                    break;
+                }
+                // 绌洪棽鍒ゆ柇
+                if (crnProtocol.getStatusType().equals(com.zy.core.enums.CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) {
+                    CrnCommand command = new CrnCommand();
+                    command.setCrnNo(param.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+                    command.setTaskNo((short) 0); // 宸ヤ綔鍙�
+                    command.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+                    command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡
+                    command.setSourcePosX(param.getSourceRow());     // 婧愬簱浣嶆帓
+                    command.setSourcePosY(param.getSourceBay());     // 婧愬簱浣嶅垪
+                    command.setSourcePosZ(param.getSourceLev());     // 婧愬簱浣嶅眰
+                    command.setDestinationPosX(param.getRow());     // 鐩爣搴撲綅鎺�
+                    command.setDestinationPosY(param.getBay());     // 鐩爣搴撲綅鍒�
+                    command.setDestinationPosZ(param.getLev());     // 鐩爣搴撲綅灞�
+                    if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, command))) {
+                        return R.error("鍛戒护涓嬪彂澶辫触");
+                    } else {
+                        return R.ok();
+                    }
+                } else {
+                    return R.error("鍫嗗灈鏈洪潪绌洪棽鐘舵��");
+                }
+            }
+        }
+        return R.error("鍫嗗灈鏈轰笉鍦ㄧ嚎");
     }
 
     @ManagerAuth(memo = "绔欏埌绔�")
@@ -128,7 +314,18 @@
     @ManagerAuth(memo = "鍥炲師鐐�")
     @PostMapping("/operator/bacOrigin")
     public R crnBacOrigin(CrnOperatorParam param){
-        return R.ok("鍥炲師鐐规垚鍔�");
+        CrnCommand command = new CrnCommand();
+        command.setCrnNo(param.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+        command.setTaskNo((short) 0); // 宸ヤ綔鍙�
+        command.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡
+        command.setSourcePosX(param.getSourceRow());     // 婧愬簱浣嶆帓
+        command.setSourcePosY(param.getSourceBay());     // 婧愬簱浣嶅垪
+        command.setSourcePosZ(param.getSourceLev());     // 婧愬簱浣嶅眰
+        command.setDestinationPosX(param.getRow());     // 鐩爣搴撲綅鎺�
+        command.setDestinationPosY(param.getBay());     // 鐩爣搴撲綅鍒�
+        command.setDestinationPosZ(param.getLev());     // 鐩爣搴撲綅灞�
+        return crnControl(command)?R.ok():R.error();
     }
 
     @ManagerAuth(memo = "浠诲姟瀹屾垚")
@@ -155,4 +352,34 @@
         return R.ok("娓呴櫎鍛戒护鎴愬姛");
     }
 
+    private boolean crnControl(CrnCommand command){
+        if (command.getCrnNo() == null) {
+            throw new CoolException("璇烽�夋嫨鍫嗗灈鏈�");
+        }
+        for (CrnSlave crn : slaveProperties.getCrn()) {
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            if (command.getCrnNo().equals(crn.getId())) {
+                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+                if (crnThread == null) {
+                    throw new CoolException("鍫嗗灈鏈轰笉鍦ㄧ嚎");
+                }
+                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+                if (crnProtocol == null) {
+                    throw new CoolException("鍫嗗灈鏈轰笉鍦ㄧ嚎");
+                }
+                // 绌洪棽鍒ゆ柇
+                if (crnProtocol.getStatusType().equals(com.zy.core.enums.CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) {
+                    if (MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, command))) {
+                        return true;
+                    } else {
+                        throw new CoolException("鍛戒护涓嬪彂澶辫触");
+                    }
+                } else {
+                    throw new CoolException("鍫嗗灈鏈轰笉鍦ㄧ┖闂茬姸鎬�");
+                }
+            }
+        }
+        return false;
+    }
+
 }

--
Gitblit v1.9.1