From 6876084ffc4a01c1eca6a609dec8c176efc59aae Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期四, 22 一月 2026 15:16:45 +0800
Subject: [PATCH] 1

---
 zy-acs-cv/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java |  121 ++++++++++++++++++++++++++++++++++++----
 1 files changed, 109 insertions(+), 12 deletions(-)

diff --git a/zy-acs-cv/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java b/zy-acs-cv/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java
index e040e4b..20af2ee 100644
--- a/zy-acs-cv/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java
+++ b/zy-acs-cv/src/main/java/com/zy/asrs/service/impl/CtuMainServiceImpl.java
@@ -3,9 +3,12 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.core.common.DateUtils;
 import com.core.exception.CoolException;
 import com.zy.asrs.controller.requestParam.StationRequestParam;
+import com.zy.asrs.controller.vo.OpenBusSubmitParam;
 import com.zy.asrs.controller.vo.StationStatus;
+import com.zy.asrs.controller.vo.TaskDto;
 import com.zy.asrs.entity.Job;
 import com.zy.asrs.enums.WorkNoTypeType;
 import com.zy.asrs.mapper.JobMapper;
@@ -30,6 +33,7 @@
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
@@ -54,6 +58,9 @@
     @Value("${ctu.station}")
     private String station;
 
+    @Value("${ctu.sendTask}")
+    private String sendTask;
+
 
     @Autowired
     private SlaveProperties slaveProperties;
@@ -67,6 +74,7 @@
     /**
      * 鍑哄簱鐨勬椂鍊欙紝璁惧涓婅蛋
      */
+    @Transactional
     public synchronized void out(Integer mark) {
         try {
             // 鏍规嵁杈撻�佺嚎plc閬嶅巻
@@ -86,7 +94,7 @@
                         continue;
                     }
                     //&& staProtocol.isOutEnable()
-                    if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0 ) {
+                    if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0) {
                         String seqNum = checkStationStatus(releaseSta.getStaNo());
                         if (seqNum != null) {
                             Job jobBySeqNum = jobMapper.getJobBySeqNum(seqNum);
@@ -95,7 +103,11 @@
                                 // 涓嬪彂绉诲姩 涓� 涓嬪彂plc鍛戒护
                                 staProtocol.setWorkNo(workNo);
                                 staProtocol.setStaNo(releaseSta.getTargetSta());
-                                if (jobMapper.insert(new Job(seqNum, workNo)) == 0) {
+                                Job job = new Job();
+                                job.setSeqNum(seqNum);
+                                job.setJobNo(workNo);
+                                job.setJobSts(2);
+                                if (jobMapper.insert(job) == 0) {
                                     throw new CoolException("鎻掑叆杈撻�佺嚎浠诲姟澶辫触," + jobBySeqNum + " - " + workNo);
                                 }
                                 devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -124,6 +136,7 @@
     /**
      * 浠庢嫞鏂欑珯鍒板叆搴撶珯锛圕TU鍙栬揣绔欙級
      */
+    @Transactional
     public synchronized void fake(Integer mark) {
         try {
             // 鏍规嵁杈撻�佺嚎plc閬嶅巻
@@ -139,12 +152,13 @@
                 return;
             }
             if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
-                Job jobByWorkNo = jobMapper.getJobByWorkNo(staProtocol.getWorkNo());
+                Job jobByWorkNo = jobMapper.getJobByJobNo(staProtocol.getWorkNo());
                 if (jobByWorkNo != null && jobByWorkNo.getJobSts() == 1) {
                     staProtocol.setStaNo(1006);
                     boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
                     if (result) {
-                        jobByWorkNo.setJobSts(2);
+                        jobByWorkNo.setJobSts(3);
+                        jobByWorkNo.setMemo("妯℃嫙鎸夋寜閽�");
                         jobMapper.updateById(jobByWorkNo);
                         log.info("鍏ュ簱杈撻�佺嚎涓嬪彂锛歿},{}", staProtocol.getWorkNo(), 1006);
                     }
@@ -175,7 +189,8 @@
                         return;
                     }
                     if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
-                        if (checkStationStatus(takeSta.getStaNo()) != null) {
+                        Job job = jobMapper.getJobByJobNo(staProtocol.getWorkNo());
+                        if (job != null && job.getJobSts() >= 5) {
                             staProtocol.setWorkNo(0);
                             staProtocol.setStaNo(0);
                             boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
@@ -192,7 +207,7 @@
         }
     }
 
-
+    @Transactional
     public synchronized void waitTake(Integer mark) {
         try {
             // 鏍规嵁杈撻�佺嚎plc閬嶅巻
@@ -214,11 +229,21 @@
                     if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
                         StaProtocol targetStaProtocol = devpThread.getStation().get(inSta.getTargetSta());
                         if (targetStaProtocol.getWorkNo() == 0 && targetStaProtocol.isAutoing() && !targetStaProtocol.isLoading()) {
-                            staProtocol.setWorkNo(staProtocol.getWorkNo());
-                            staProtocol.setStaNo(inSta.getTargetSta());
-                            boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
-                            if (result) {
-                                log.info("" + (mark + LOG_STEP) + "鍏ュ簱鍓嶈繘锛歿},{}", staProtocol.getWorkNo(), inSta.getTargetSta());
+                            Job job = jobMapper.getJobByJobNoAndJobSts(staProtocol.getWorkNo(), 2);
+                            if (job != null) {
+                                staProtocol.setWorkNo(staProtocol.getWorkNo());
+                                staProtocol.setStaNo(inSta.getTargetSta());
+                                boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
+                                if (result) {
+                                    job.setJobSts(4);
+                                    job.setInTime(new Date());
+                                    if (jobMapper.updateById(job) == 0) {
+                                        throw new CoolException("鏇存柊杈撻�佺嚎浠诲姟澶辫触," + " - " + staProtocol.getWorkNo());
+                                    }
+                                    log.info("" + (mark + LOG_STEP) + "鍏ュ簱鍓嶈繘锛歿},{}", staProtocol.getWorkNo(), inSta.getTargetSta());
+                                }
+                            } else {
+                                // 妯℃嫙鎿嶄綔閫昏緫
                             }
                         }
                     }
@@ -230,6 +255,78 @@
         }
     }
 
+    @Transactional
+    public synchronized void createTake(Integer mark) {
+        try {
+            // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+            for (DevpSlave devp : slaveProperties.getDevp()) {
+                // 閬嶅巻鍏ュ簱鍙�
+                for (DevpSlave.Sta inSta : devp.getInSta()) {
+                    // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                    StaProtocol staProtocol = devpThread.getStation().get(inSta.getTargetSta());
+                    if (staProtocol == null) {
+                        return;
+                    } else {
+                        staProtocol = staProtocol.clone();
+                    }
+                    // 鍒ゆ柇鏄惁婊¤冻鏉′欢
+                    if (!staProtocol.isLoading()) {
+                        return;
+                    }
+                    if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) {
+                        Job job = jobMapper.getJobByJobNo(staProtocol.getWorkNo());
+                        if (job != null && job.getJobSts() == 4) {
+                            job.setJobSts(5);
+                            job.setRcsTime(new Date());
+                            jobMapper.updateById(job);
+                            if (!fakeWms(staProtocol)) {
+                                throw new CoolException("浠诲姟鍙戦�佺粰RCS澶辫触," + job.getSeqNum() + " - " + job.getSeqNum());
+                            }
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+        }
+    }
+
+    public boolean fakeWms(StaProtocol staProtocol) {
+        OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam();
+        openBusSubmitParam.setBatch(DateUtils.convert(new Date()));
+        List<TaskDto> taskList = new ArrayList<>();
+        TaskDto taskDto = new TaskDto();
+        taskDto.setSeqNum("SSX-RK" + staProtocol.getWorkNo());
+        taskDto.setOriSta("1007");
+        taskDto.setPriority(9527);
+        taskList.add(taskDto);
+        openBusSubmitParam.setTaskList(taskList);
+        return sendTask(openBusSubmitParam, staProtocol);
+    }
+
+    @Transactional
+    public boolean sendTask(OpenBusSubmitParam openBusSubmitParam, StaProtocol staProtocol) {
+        String response = "";
+        try {
+            response = new HttpHandler.Builder()
+                    .setUri(ctuUrl)
+                    .setPath(sendTask)
+                    .setTimeout(1200, TimeUnit.SECONDS)
+                    .setJson(JSON.toJSONString(openBusSubmitParam))
+                    .build()
+                    .doPost();
+            JSONObject jsonObject = JSON.parseObject(response);
+            if (jsonObject.getInteger("code").equals(200)) {
+                log.info("涓嬪彂浠诲姟杩斿洖鏁版嵁锛歿}", response);
+                return true;
+            }
+        } catch (Exception e) {
+            log.error("璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", ctuUrl + sendTask, JSON.toJSONString(openBusSubmitParam), response);
+        }
+        return false;
+    }
 
     /**
      * 妫�鏌ョ珯鐐圭姸鎬�
@@ -259,7 +356,7 @@
                 for (StationStatus object : stationStatuses) {
                     if (object.getStaNo().equals(staNo + "")) {
                         if (object.getConveyable()) {
-                            return object.getSeqNum();
+                            return object.getSeqNum() == null ? System.currentTimeMillis() + "" : object.getSeqNum();
                         } else {
                             log.info("绔欑偣锛歿}鐘舵�佷笉瀵�", staNo);
                             return null;

--
Gitblit v1.9.1