From d8060afba15f67e443bb2f89410313905bdc7ebe Mon Sep 17 00:00:00 2001
From: pjb <pjb123456>
Date: 星期一, 23 六月 2025 08:58:13 +0800
Subject: [PATCH] 米多泉泉州wcs功能完善

---
 src/main/java/com/zy/utils/HttpHandler.java                  |    2 
 src/main/resources/mapper/LocDetlMapper.xml                  |   14 +
 src/main/java/com/zy/mapper/LocDetlMapper.java               |    1 
 src/main/java/com/zy/service/LocDetlService.java             |    1 
 src/main/resources/mapper/WrkMastMapper.xml                  |   18 ++
 src/main/java/com/zy/entity/LocDetl.java                     |   43 +++++
 src/main/java/com/zy/service/impl/MainServiceImpl.java       |  225 ++++++++++++++++++++++++---
 src/main/java/com/zy/entity/param/StockOutParam.java         |   79 +++++++++
 src/main/java/com/zy/core/model/protocol/StaProtocol.java    |    3 
 src/main/java/com/zy/service/impl/LocDetlServiceImpl.java    |    5 
 src/main/java/com/zy/core/thread/SiemensCrnThread.java       |    6 
 src/main/java/com/zy/common/model/CanningLineInLocParam.java |    3 
 src/main/java/com/zy/core/MainProcess.java                   |   13 
 src/main/java/com/zy/core/thread/SiemensDevpThread.java      |   17 +
 src/main/java/com/zy/entity/WrkMast.java                     |    8 +
 src/main/java/com/zy/mapper/WrkMastMapper.java               |    6 
 16 files changed, 400 insertions(+), 44 deletions(-)

diff --git a/src/main/java/com/zy/common/model/CanningLineInLocParam.java b/src/main/java/com/zy/common/model/CanningLineInLocParam.java
index 7c8c0b2..f20026b 100644
--- a/src/main/java/com/zy/common/model/CanningLineInLocParam.java
+++ b/src/main/java/com/zy/common/model/CanningLineInLocParam.java
@@ -28,6 +28,9 @@
     // 澶嶆閲嶉噺
     private double grossWeight;
 
+    // 缃愯閲�
+    private double cannedVolume;
+
     // 澶嶆鍚堟牸鍚�
     private boolean reinspection;
 
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 071347c..a9c795b 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -54,22 +54,18 @@
 
                     // 1090寮傚父鍙i噸鏂板叆搴撳垎閰嶅簱浣�
                     mainService.abnormalMouthWarehousing();
-                    Thread.sleep(1000);
 
                     // 鍏ュ簱  ===>> 鍏ュ簱绔欏埌鍫嗗灈鏈虹珯锛屾牴鎹潯鐮佹壂鎻忕敓鎴愬叆搴撳伐浣滄。
                     mainService.generateStoreWrkFile(1); // 缁勬墭
-
-                    Thread.sleep(1000);
 
                     // 鐢熸垚 绌哄瓙/姣嶆墭鐩樺嚭搴撲换鍔�
                     mainService.generateEmptyPalletStoreWrk();
 
                     // 鍏ュ簱 ===>> 姣嶆墭鐩樺彔婊″叆搴�
                     mainService.autoEmptyIn();
-                    Thread.sleep(1000);
 
                     // 瀛愭墭鐩樺簳涓嬫瘝鎵樼洏鍥炲彔鐩樻満
-//                    mainService.motherTrayReflow();
+                    mainService.motherTrayReflow();
 
                     // 鍑哄簱  ===>>  鍫嗗灈鏈哄嚭搴撶珯鍒板嚭搴撶珯
                     mainService.crnStnToOutStn(4);
@@ -80,12 +76,17 @@
                     // 鍏ュ簱  ===>> 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
                     mainService.storeFinished(6);
 
+                    // 鍫嗗灈鏈哄洖鍘熺偣
+                    mainService.originGo();
+
                     // 绌烘《鍒拌揪缃愯绾垮叆鍙� 鍛婅瘔缃愯绾垮叆搴撴《淇℃伅
                     mainService.inGzxBefore();
 
                     // 绌烘《缃愯瀹屾垚鍒拌揪缃愯绾垮嚭鍙� 瀹屾垚鐩翠緵缃愯绾夸换鍔″拰绌烘《鍑哄簱浠诲姟锛屽垱寤烘垚鍝佹《鍏ュ簱浠诲姟
                     mainService.canningLineTaskFinish();
-                    Thread.sleep(1000);
+
+                    // 璇昏妗朵俊鍙凤紝鑷姩鍑虹┖妗�
+                    mainService.autoOutEmptyBucket();
 
                     // 鍫嗗灈鏈哄紓甯镐俊鎭褰�
                     mainService.recCrnErr(7);
diff --git a/src/main/java/com/zy/core/model/protocol/StaProtocol.java b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
index a3f26f6..7a3f8cb 100644
--- a/src/main/java/com/zy/core/model/protocol/StaProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -108,6 +108,9 @@
     // 澶嶆鍚堟牸鍚�
     private boolean reinspection;
 
+    // 缃愯閲�
+    private double cannedVolume;
+
     // 鍑虹綈瑁呯嚎浠诲姟瀹屾垚锛岀粰缃愯绾垮啓鍙斁淇″彿 1鍙斁锛�2涓嶅彲鏀�-------------------------------------
     private int placeableFlag;
 
diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index 1b5e722..1d1b603 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -366,6 +366,12 @@
                     }
                 }while (writeCount2<5);
             }
+        } else {
+            BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class);
+            BasCrnp basCrnp = basCrnpService.selectById(slave.getId());
+            basCrnp.setModiTime(new Date());
+            basCrnpService.updateById(basCrnp);
+            log.info("鏇存柊{}鍙峰爢鍨涙満鎵ц浠诲姟瀹屾垚澶嶄綅鏃堕棿",slave.getId());
         }
 
         try {
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index a6d3c39..891c701 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -63,7 +63,7 @@
     }};
 
     public static final ArrayList<Integer> rgvSiteBackWrkNo2= new ArrayList<Integer>() {{
-        add(1044);
+        add(1044);add(1090);
     }};
 
     public static final ArrayList<Integer> rgvSiteBackWrkNo3= new ArrayList<Integer>() {{
@@ -224,7 +224,7 @@
         // 璇荤綈瑁呯嚎鍙嶉淇℃伅
         if (slave.getId() > 3) {
 //            log.info("璇诲彇{}鍙风綈瑁呯嚎plc淇℃伅鎴愬姛",slave.getId());
-            OperateResultExOne<byte[]> read = siemensS7Net.Read("DB101.0", (short) 60);
+            OperateResultExOne<byte[]> read = siemensS7Net.Read("DB101.0", (short) 64);
             if (read.IsSuccess) {
                 // 15绉掓墦鍗颁竴涓嬫棩蹇�
                 if (System.currentTimeMillis() - lastLogTime >= 15000) {
@@ -253,6 +253,7 @@
                     staProtocol.setBatch(siemensS7Net.getByteTransform().TransString(read.Content, 40,10,"UTF-8"));
                     staProtocol.setManuDate(siemensS7Net.getByteTransform().TransString(read.Content, 50,8,"UTF-8"));
                     staProtocol.setReinspection(siemensS7Net.getByteTransform().TransInt16(read.Content, 58) == 1);
+                    staProtocol.setCannedVolume(siemensS7Net.getByteTransform().TransSingle(read.Content, 60));
                 }
                 return;
             }
@@ -504,15 +505,17 @@
         do {
             write = siemensS7Net.Write("DB100.0", common);
             Thread.sleep(200);
-            OperateResultExOne<byte[]> read = siemensS7Net.Read("DB100.4", (short) 2);
+            OperateResultExOne<byte[]> read = siemensS7Net.Read("DB100.0", (short) 6);
             if(write.IsSuccess && read.IsSuccess){
-                short i = siemensS7Net.getByteTransform().TransInt16(read.Content, 0);
-                if ( i != staProtocol.getWorkNo().shortValue()) {
+                short bucketType = siemensS7Net.getByteTransform().TransInt16(read.Content, 0);
+                short bucketCount = siemensS7Net.getByteTransform().TransInt16(read.Content, 2);
+                short workNo = siemensS7Net.getByteTransform().TransInt16(read.Content, 4);
+                if ( workNo != common[2] || bucketCount != common[1] || bucketType != common[0]) {
                     writeCount++;
-                    log.error("缁欑綈瑁呯嚎鍐欏叆妗跺瀷淇℃伅鎴愬姛锛屼絾鍥炶澶辫触锛氬啓鍏ヤ换鍔″彿锛歿},鍥炶浠诲姟鍙凤細{}锛岃緭閫佺嚎plc缂栧彿={}锛屽啓鍏ユ鏁�={}",staProtocol.getWorkNo().shortValue(), i, slave.getId(), writeCount);
+                    log.error("缁欑綈瑁呯嚎鍐欏叆妗跺瀷淇℃伅鎴愬姛锛屼絾鍥炶澶辫触锛氬啓鍏ヤ换鍔″彿锛歿},鍥炶浠诲姟鍙凤細{}锛岃緭閫佺嚎plc缂栧彿={}锛屽啓鍏ユ鏁�={}", Arrays.toString(common), bucketType +"-" + bucketCount + "-" + workNo, slave.getId(), writeCount);
                     continue;
                 }
-                log.info("缁欑綈瑁呯嚎鍐欏叆妗跺瀷淇℃伅鎴愬姛锛屽洖璇绘垚鍔燂細浠诲姟鍙凤細{},鍥炶浠诲姟鍙凤細{}锛岃緭閫佺嚎plc缂栧彿={}锛屽啓鍏ユ鏁�={}",staProtocol.getWorkNo().shortValue(), i, slave.getId(), writeCount);
+                log.info("缁欑綈瑁呯嚎鍐欏叆妗跺瀷淇℃伅鎴愬姛锛屽洖璇绘垚鍔燂細浠诲姟鍙凤細{},鍥炶浠诲姟鍙凤細{}锛岃緭閫佺嚎plc缂栧彿={}锛屽啓鍏ユ鏁�={}",staProtocol.getWorkNo().shortValue(), Arrays.toString(common), slave.getId(), writeCount);
                 break;
             }
             else {
diff --git a/src/main/java/com/zy/entity/LocDetl.java b/src/main/java/com/zy/entity/LocDetl.java
index ba69072..b1ddc6d 100644
--- a/src/main/java/com/zy/entity/LocDetl.java
+++ b/src/main/java/com/zy/entity/LocDetl.java
@@ -98,9 +98,11 @@
     private Double weight;
 
     @ApiModelProperty(value= "闀垮害")
-    private Double length;
+    @TableField("man_length")
+    private Double manLength;
 
     @ApiModelProperty(value= "浣撶Н")
+    @TableField("volume")
     private Double volume;
 
     @ApiModelProperty(value= "涓夋柟缂栫爜")
@@ -154,6 +156,45 @@
     @ApiModelProperty(value= "澶囨敞")
     private String memo;
 
+    /**
+     * 澶囩敤1
+     */
+    @ApiModelProperty(value= "澶囩敤1")
+    private String standby1 = "";
+
+    /**
+     * 澶囩敤2
+     */
+    @ApiModelProperty(value= "澶囩敤2")
+    private String standby2 = "";
+
+    /**
+     * 澶囩敤3
+     */
+    @ApiModelProperty(value= "澶囩敤3")
+    private String standby3 = "";
+
+    /**
+     * 澶囩敤1
+     */
+    @ApiModelProperty(value= "澶囩敤1")
+    @TableField("box_type1")
+    private String boxType1 = "1";
+
+    /**
+     * 澶囩敤2
+     */
+    @ApiModelProperty(value= "澶囩敤2")
+    @TableField("box_type2")
+    private String boxType2 = "1";
+
+    /**
+     * 澶囩敤3
+     */
+    @ApiModelProperty(value= "澶囩敤3")
+    @TableField("box_type3")
+    private String boxType3 = "1";
+
     public String getLocNo$(){
         LocMastService service = SpringUtils.getBean(LocMastService.class);
         LocMast locMast = service.selectById(this.locNo);
diff --git a/src/main/java/com/zy/entity/WrkMast.java b/src/main/java/com/zy/entity/WrkMast.java
index 47285a4..0b2f717 100644
--- a/src/main/java/com/zy/entity/WrkMast.java
+++ b/src/main/java/com/zy/entity/WrkMast.java
@@ -310,6 +310,14 @@
     @TableField("rgv_dsta_no")
     private Integer rgvDstaNo;
 
+    @ApiModelProperty(value= "rgv鍛戒护涓嬪彂鏃堕棿")
+    @TableField("rgv_create_time")
+    private Date rgvCreateTime;
+
+    @ApiModelProperty(value= "rgv浠诲姟瀹屾垚鏃堕棿")
+    @TableField("rgv_finish_time")
+    private Date rgvFinishTime;
+
     @TableField("work_no_other")
     private Integer workNoOther;
 
diff --git a/src/main/java/com/zy/entity/param/StockOutParam.java b/src/main/java/com/zy/entity/param/StockOutParam.java
new file mode 100644
index 0000000..061eb27
--- /dev/null
+++ b/src/main/java/com/zy/entity/param/StockOutParam.java
@@ -0,0 +1,79 @@
+package com.zy.entity.param;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Created by vincent on 2020/6/13
+ */
+@Data
+public class StockOutParam {
+
+    // 鍑虹珯鍙�
+    private Integer outSite;
+
+    // 鐗╂枡缂栧彿闆嗗悎
+    private List<LocDetl> locDetls;
+
+    @Data
+    public static class LocDetl {
+
+        // 搴撲綅鍙�
+        private String locNo;
+
+        // 鍟嗗搧缂栧彿
+        private String matnr;
+
+        // 搴忓垪鐮�
+        private String batch;
+
+        // 鏁伴噺
+        private Double count;
+
+        private String brand;
+
+        /**
+         * 澶囩敤1
+         */
+        @ApiModelProperty(value= "澶囩敤1")
+        private String standby1 = "";
+
+        /**
+         * 澶囩敤2
+         */
+        @ApiModelProperty(value= "澶囩敤2")
+        private String standby2 = "";
+
+        /**
+         * 澶囩敤3
+         */
+        @ApiModelProperty(value= "澶囩敤3")
+        private String standby3 = "";
+
+        /**
+         * 澶囩敤1
+         */
+        @ApiModelProperty(value= "澶囩敤1")
+        @TableField("box_type1")
+        private String boxType1 = "1";
+
+        /**
+         * 澶囩敤2
+         */
+        @ApiModelProperty(value= "澶囩敤2")
+        @TableField("box_type2")
+        private String boxType2 = "1";
+
+        /**
+         * 澶囩敤3
+         */
+        @ApiModelProperty(value= "澶囩敤3")
+        @TableField("box_type3")
+        private String boxType3 = "1";
+
+    }
+
+}
diff --git a/src/main/java/com/zy/mapper/LocDetlMapper.java b/src/main/java/com/zy/mapper/LocDetlMapper.java
index 595007c..5880a7b 100644
--- a/src/main/java/com/zy/mapper/LocDetlMapper.java
+++ b/src/main/java/com/zy/mapper/LocDetlMapper.java
@@ -28,4 +28,5 @@
     @Select("SELECT ld.loc_no FROM asr_loc_detl ld LEFT JOIN asr_loc_mast lm ON ld.loc_no = lm.loc_no WHERE (1 = 1 AND ld.matnr = #{matnr} AND (lm.row1 >= #{start} AND lm.row1 <= #{end})  AND lm.loc_sts = 'F' AND DateDiff(dd, lm.modi_time, getdate()) = 0) ORDER BY lm.modi_time ASC")
     List<String> selectSameDetlToday(@Param("matnr") String matnr, @Param("start") Integer start, @Param("end") Integer end);
 
+    List<LocDetl> selectListByMatnr(@Param("bucketType") int bucketType);
 }
diff --git a/src/main/java/com/zy/mapper/WrkMastMapper.java b/src/main/java/com/zy/mapper/WrkMastMapper.java
index 4892ba1..b525888 100644
--- a/src/main/java/com/zy/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/mapper/WrkMastMapper.java
@@ -11,6 +11,12 @@
 @Repository
 public interface WrkMastMapper extends BaseMapper<WrkMast> {
 
+    /**
+     * 鏌ヨ鍏ョ亴瑁呯嚎绔欑偣鍦ㄩ�斾换鍔℃暟锛堟湭杩涚綈瑁呯嚎閲岄潰锛�
+     * @param site 鍏ョ綈瑁呯嚎绔欑偣
+     */
+    int selectInGzxCount(@Param("site") int site);
+
     WrkMast selectByLocNo(@Param("sourceLocNo") String sourceLocNo);
 
     WrkMast selectByLocNo1(@Param("sourceLocNo") String sourceLocNo);
diff --git a/src/main/java/com/zy/service/LocDetlService.java b/src/main/java/com/zy/service/LocDetlService.java
index 04ab78f..0e3d412 100644
--- a/src/main/java/com/zy/service/LocDetlService.java
+++ b/src/main/java/com/zy/service/LocDetlService.java
@@ -24,4 +24,5 @@
      */
     List<String> getSameDetlToday(String matnr, Integer start, Integer end);
 
+    List<LocDetl> selectListByMatnr(int bucketType);
 }
diff --git a/src/main/java/com/zy/service/impl/LocDetlServiceImpl.java b/src/main/java/com/zy/service/impl/LocDetlServiceImpl.java
index ecac30e..21a880b 100644
--- a/src/main/java/com/zy/service/impl/LocDetlServiceImpl.java
+++ b/src/main/java/com/zy/service/impl/LocDetlServiceImpl.java
@@ -40,4 +40,9 @@
         return this.baseMapper.selectSameDetlToday(matnr, start, end);
     }
 
+    @Override
+    public List<LocDetl> selectListByMatnr(int bucketType) {
+        return this.baseMapper.selectListByMatnr(bucketType);
+    }
+
 }
diff --git a/src/main/java/com/zy/service/impl/MainServiceImpl.java b/src/main/java/com/zy/service/impl/MainServiceImpl.java
index c550397..a300dec 100644
--- a/src/main/java/com/zy/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -26,8 +26,11 @@
 import com.zy.core.thread.LedThread;
 import com.zy.core.thread.SiemensDevpThread;
 import com.zy.entity.*;
+import com.zy.entity.param.StockOutParam;
 import com.zy.mapper.*;
 import com.zy.service.*;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
 import com.zy.utils.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +39,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
+import javax.annotation.Resource;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -136,6 +140,9 @@
     private WrkMastService wrkMastService;
     @Autowired
     private BasRgvMapService basRgvMapService;
+
+    @Resource
+    private ConfigService configService;
 
     @Value("${wms.url}")
     private String wmsUrl;
@@ -884,7 +891,7 @@
                         }
                         newLocNo = newLocNo + locNo.substring(2);
                         // 瀵瑰簲搴撲綅鏈夋棤浠诲姟
-                        WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_loc_no", newLocNo));
+                        WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_loc_no", newLocNo).eq("wrk_sts",11));
                         if(wrkMast1 == null) {
                              if(locNo.startsWith("10") || locNo.startsWith("11")){ // 娴呭簱浣�
 
@@ -1075,7 +1082,7 @@
             //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
             if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                 News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛屽宸ヤ綔妗g殑瀹屾垚鎿嶄綔");
-                if (crnProtocol.getTaskNo() == 9999) {
+                if (crnProtocol.getTaskNo() == 9999) { // 鍥炲師鐐逛换鍔″彿
                     // 鍫嗗灈鏈哄浣�
                     crnThread.setResetFlag(true);
                 } else {
@@ -1121,6 +1128,51 @@
 //        News.infoNoLog(""+mark+" - 0"+" - 瀵瑰伐浣滄。鐨勫畬鎴愭搷浣滄墽琛屽畬鎴�");
     }
 
+    /**
+     * 鍫嗗灈鏈哄洖鍘熺偣
+     */
+    public synchronized void originGo() {
+
+        for (CrnSlave crn : slaveProperties.getCrn()) {
+            // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+            CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if (crnProtocol == null) {
+                continue;
+            }
+            if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO
+                    && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) {
+                // 鍒ゆ柇鏄笉鏄凡鍦ㄥ師鐐�
+                if(crnProtocol.getBay() == 0 && crnProtocol.getLevel() == 1) {
+                    continue;
+                }
+                // 鍒ゆ柇鏄笉鏄┖闂蹭笁鍒嗛挓
+                BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
+                Date now = new Date();
+                Date modiTime = basCrnp.getModiTime();
+                long diffInMillis = now.getTime()-modiTime.getTime();
+                if(diffInMillis < 3 * 60 * 1000) {
+                    continue;
+                }
+
+                CrnCommand crnCommand = new CrnCommand();
+                crnCommand.setCrnNo(crn.getId()); // 鍫嗗灈鏈虹紪鍙�
+                crnCommand.setTaskNo((short) 9999); // 宸ヤ綔鍙�
+                crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡:  鍥炲師鐐�
+                crnCommand.setSourcePosX((short) (crn.getId() == 1 ? 4 : crn.getId() == 2 ? 6 : crn.getId() == 3 ? 7 : 11));     // 婧愬簱浣嶆帓
+                crnCommand.setSourcePosY((short) 0);     // 婧愬簱浣嶅垪
+                crnCommand.setSourcePosZ((short) 1);     // 婧愬簱浣嶅眰
+                crnCommand.setDestinationPosX((short) 0);     // 鐩爣搴撲綅鎺�
+                crnCommand.setDestinationPosY((short) 0);     // 鐩爣搴撲綅鍒�
+                crnCommand.setDestinationPosZ((short) 0);     // 鐩爣搴撲綅灞�
+                if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, crnCommand))) {
+                    News.error("鍥炲師鐐逛换鍔′笅鍙戝け璐�", crn.getId(), JSON.toJSON(crnCommand));
+                } else {
+                    log.info("{}鍙峰爢鍨涙満鍥炲師鐐逛换鍔′笅鍙戞垚鍔燂細{}", crn.getId(), JSON.toJSON(crnCommand));
+                }
+            }
+        }
+    }
     /**
      * 鍫嗗灈鏈哄紓甯镐俊鎭褰�
      */
@@ -1565,6 +1617,9 @@
                     case 1019:dismantlingMachine = 1020;break;
                     case 1034:dismantlingMachine = 1035;break;
                 }
+                if(staProtocol.getSiteId() == 1034 && staProtocol.isHigh()) {
+                    continue;
+                }
                 if (wrkMastService.selectList(new EntityWrapper<WrkMast>().in("io_type", 110).eq("sta_no", dismantlingMachine)).size() > 0) {
 //                    log.warn("{}绔欑偣宸茬粡瀛樺湪涓や釜绌烘澘鍑哄簱浠诲姟", entry.getKey());
                     continue;
@@ -1584,7 +1639,7 @@
                     if (jsonObject.getInteger("code").equals(200)) {
                         log.info("绌烘墭鍑哄簱璇锋眰鎴愬姛锛氳姹傚弬鏁皗}锛岃繑鍥炲��:{}", map, response);
                     } else {
-                        log.error("绌烘嫋鍑哄簱璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/auto/emptyOut/v1", map, response);
+//                        log.error("绌烘嫋鍑哄簱璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/auto/emptyOut/v1", map, response);
                     }
                 } catch (Exception e) {
                     log.error("绌烘嫋鍑哄簱璇锋眰鎺ュ彛寮傚父锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/auto/emptyOut/v1", map, response);
@@ -1615,10 +1670,17 @@
                     log.error("鍛煎彨rgv,浠诲姟鍙蜂笉瀛樺湪:{}",staProtocol.getWorkNo());
                     continue;
                 }
-                if (staProtocol.getSiteId() == 1090 && wrkMast.getLocNo() == null) {
+                if (staProtocol.getSiteId() == 1090 && wrkMast.getStaNo() == 1090) {
                     continue;
                 }
-                if ((wrkMast.getWrkSts() == 2 || wrkMast.getWrkSts() == 15) && wrkMast.getRgvNo() == null) {
+                if ((wrkMast.getWrkSts() == 2 || wrkMast.getWrkSts() == 15) && (wrkMast.getRgvNo() == null || wrkMast.getRgvDstaNo() == 1090)) {
+                    // 鏈�1090鐨勪换鍔¤烦杩噐gv鍒嗛厤
+                    if(wrkMast.getStaNo() == 1090) {
+                        int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().where("sta_no = 1090 or source_sta_no = 1090 "));
+                        if (count > 1) {
+                            continue;
+                        }
+                    }
                     wrkMast.setRgvNo(0);
                     wrkMast.setRgvSstaNo(site);
                     wrkMast.setRgvDstaNo(taskStaNoToRgvStaNoMap.get(wrkMast.getStaNo()));
@@ -1655,15 +1717,18 @@
 
                 if(wrkMast.getIoType() == 3 && (wrkMast.getStaNo() == 1024 || wrkMast.getStaNo() == 1016 || wrkMast.getStaNo() == 1043)) { // 鍒�1024鍑哄簱鍙o紝鏀惧埌杈撻�佺嚎鍚庝换鍔″畬鎴�
                     if(wrkMast.getWrkSts() != 2 ){
-                        log.warn("rgv鏀捐揣瀹屾垚锛宺gv鏈浣�:rgv鍙穥}锛屼换鍔″彿锛歿}锛屼换鍔$姸鎬亄}",wrkMast.getRgvNo(),wrkMast.getWrkNo(),wrkMast.getWrkSts());
+                        log.warn("rgv鏀捐揣瀹屾垚3锛宺gv鏈浣�:rgv鍙穥}锛屼换鍔″彿锛歿}锛屼换鍔$姸鎬亄}",wrkMast.getRgvNo(),wrkMast.getWrkNo(),wrkMast.getWrkSts());
                         continue;
                     }
                     wrkMast.setWrkSts(5L);
+//                    if(wrkMast.getStaNo() == 1090) {
+//                        wrkMast.setWrkSts(3L);
+//                    }
                     wrkMast.setModiTime(new Date());
                     wrkMastService.updateById(wrkMast);
                 } else if(wrkMast.getIoType() == 101 && (wrkMast.getStaNo() == 1024 || wrkMast.getStaNo() == 1016 || wrkMast.getStaNo() == 1043)) {
                     if(wrkMast.getWrkSts() != 2 ) {
-                        log.warn("rgv鏀捐揣瀹屾垚锛宺gv鏈浣�:rgv鍙穥}锛屼换鍔″彿锛歿}锛屼换鍔$姸鎬亄}", wrkMast.getRgvNo(), wrkMast.getWrkNo(), wrkMast.getWrkSts());
+                        log.warn("rgv鏀捐揣瀹屾垚101锛宺gv鏈浣�:rgv鍙穥}锛屼换鍔″彿锛歿}锛屼换鍔$姸鎬亄}", wrkMast.getRgvNo(), wrkMast.getWrkNo(), wrkMast.getWrkSts());
                         continue;
                     }
                     wrkMast.setWrkSts(15L);
@@ -1671,7 +1736,7 @@
                     wrkMastService.updateById(wrkMast);
                 } else if(wrkMast.getIoType() == 110 && (wrkMast.getStaNo() == 1002 || wrkMast.getStaNo() == 1020 ||wrkMast.getStaNo() == 1035)) {
                     if(wrkMast.getWrkSts() != 2 ){
-                        log.warn("rgv鏀捐揣瀹屾垚锛宺gv鏈浣�:rgv鍙穥}锛屼换鍔″彿锛歿}锛屼换鍔$姸鎬亄}",wrkMast.getRgvNo(),wrkMast.getWrkNo(),wrkMast.getWrkSts());
+                        log.warn("rgv鏀捐揣瀹屾垚110锛宺gv鏈浣�:rgv鍙穥}锛屼换鍔″彿锛歿}锛屼换鍔$姸鎬亄}",wrkMast.getRgvNo(),wrkMast.getWrkNo(),wrkMast.getWrkSts());
                         continue;
                     }
                     wrkMast.setWrkSts(15L);
@@ -1709,16 +1774,16 @@
                 log.error("寮傚父鍙e叆搴撲换鍔″彿鏃犱换鍔�:{}", staProtocol.getWorkNo());
                 return;
             } else if (wrkMast.getLocNo() != null) {
-                log.info("寮傚父鍙e叆搴撳簱浣嶅凡鍒嗛厤:{}", wrkMast.getLocNo());
+//                log.info("寮傚父鍙e叆搴撳簱浣嶅凡鍒嗛厤:{}", wrkMast.getLocNo());
                 return;
             } else if(wrkMast.getStaNo() != 1090) {
-                log.info("寮傚父鍙e叆搴撳叆搴撶洰鏍囩珯鐐瑰凡鍒嗛厤:{}", wrkMast.getStaNo());
+//                log.info("寮傚父鍙e叆搴撳叆搴撶洰鏍囩珯鐐瑰凡鍒嗛厤:{}", wrkMast.getStaNo());
                 return;
             }
 
             try {
                 CanningLineInLocParam param = new CanningLineInLocParam();
-                param.setWrkNo(staProtocol.getWrkNo());
+                param.setWrkNo(staProtocol.getWorkNo());
                 param.setSourceStaNo(1090);
                 param.setTbFlag(staProtocol.isInEnable()); // true鍏ユ垚鍝佸簱锛宖alse鍏ョ┖妗跺簱
 
@@ -1731,19 +1796,7 @@
                 log.info("寮傚父鍙e叆搴撹姹倃ms鍘熷杩斿洖锛�" + response);
                 JSONObject jsonObject = JSON.parseObject(response);
                 if (jsonObject.getInteger("code").equals(200)) {
-//                    StartupDto dto = jsonObject.getObject("data", StartupDto.class);
-//                    staProtocol.setWorkNo(dto.getWorkNo());
-//                    staProtocol.setStaNo(dto.getStaNo().shortValue());
-//                    devpThread.setPakMk(staProtocol.getSiteId(), false);
-//                    boolean result = MessageQueue.offer(SlaveType.Devp, 2, new Task(2, staProtocol));
-//                    if (result) {
-//                        log.info("寮傚父鍙e叆搴撴帹閫佽緭閫佺嚎鍛戒护鎴愬姛锛�" + dto.getWorkNo() + "," + 1090 + "," + dto.getStaNo());
-//                        News.info("寮傚父鍙e叆搴撴帹閫佽緭閫佺嚎鍛戒护鎴愬姛锛�" + dto.getWorkNo() + "," + 1090 + "," + dto.getStaNo());
-//                    } else {
-//                        log.error("寮傚父鍙e叆搴撴帹閫佽緭閫佺嚎鍛戒护澶辫触锛�" + dto.getWorkNo() + "," + 1090 + "," + dto.getStaNo());
-//                        News.error("寮傚父鍙e叆搴撴帹閫佽緭閫佺嚎鍛戒护澶辫触锛�" + dto.getWorkNo() + "," + 1090 + "," + dto.getStaNo());
-//                        throw new CoolException("寮傚父鍙e叆搴撴帹閫佽緭閫佺嚎鍛戒护澶辫触:" + 1090);
-//                    }
+                    log.error("寮傚父鍙e叆搴撹姹傛帴鍙f垚鍔熷父锛寀rl:{}锛宺equest:{},response:{}", wmsUrl + "/rpc/pakin/CanningLine/loc/v1", JSON.toJSONString(param), response);
                 } else {
                     log.error("寮傚父鍙e叆搴撹姹傛帴鍙e紓甯革紝url:{}锛宺equest:{},response:{}", wmsUrl + "/rpc/pakin/CanningLine/loc/v1", JSON.toJSONString(param), response);
                     News.error("寮傚父鍙e叆搴撹姹傛帴鍙e紓甯革紒锛侊紒url锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/CanningLine/loc/v1", JSON.toJSONString(param), response);
@@ -1821,7 +1874,12 @@
         }
 
         // 绔欑偣鏉′欢鍒ゆ柇
-        if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.getWrkNo() == 0) {
+        if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
+                 && staProtocol.getWorkNo() == 0 && staProtocol.isHigh()) {
+            WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 3).eq("source_sta_no", 1034).eq("sta_no", 1024));
+            if (wrkMast1 != null) {
+                return;
+            }
 
             Date now = new Date();
             // 淇濆瓨宸ヤ綔妗�
@@ -1830,6 +1888,7 @@
             wrkMast.setIoTime(now);
             wrkMast.setWrkSts(2L);
             wrkMast.setIoType(3);
+            wrkMast.setIoPri(15D);
             wrkMast.setSourceStaNo(1034); // 婧愮珯
             wrkMast.setStaNo(1024); // 鐩爣绔�
             wrkMast.setAppeTime(now);
@@ -1845,6 +1904,116 @@
                 log.error("瀛愭墭鐩樺簳搴ф瘝鎵樼洏鍥炴祦鍛戒护鎺ㄩ�侀槦鍒楀け璐ワ細" + wrkMast.getWrkNo() + "," + staProtocol.getSiteId());
             }
         }
+    }
+
+    public synchronized void autoOutEmptyBucket() {
+        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code","autoOutEmptyBucket").eq("status",1));
+        if (config == null || Cools.isEmpty(config.getValue())) {
+            return;
+        }
+
+        // 闇�瑕佽嚜鍔ㄨˉ绌烘《鐨勭珯鐐�
+        String[] split = config.getValue().split("=");
+
+        for (SearchLocParam.WantBucket wantBucket : getWantBucketFlag()) {
+            if (wantBucket.getBucketType() != 0) { // 缃愯绾挎湁瑕佹《淇″彿
+                boolean flag = true; // 鏄惁闇�瑕佽嚜鍔ㄨˉ锛宼rue涓嶉渶瑕侊紝false闇�瑕�
+                for(String item: split) {
+                    if(String.valueOf(wantBucket.getSite()).equals(item)) {
+                        flag = false;
+                        break;
+                    }
+                }
+                if(flag) {
+                    return;
+                }
+                // <4 < 2 < 4
+                int count = wrkMastMapper.selectInGzxCount(wantBucket.getSite());
+                if (wantBucket.getSite() == 1071 && count <= 2 || wantBucket.getSite() == 1064 && count == 0 || wantBucket.getSite() == 1078 && count <= 2) {
+                    // 鍒ゆ柇搴撻噷鏈夋棤绌烘《缁�
+                    List<LocDetl> locDetlList = locDetlService.selectListByMatnr(wantBucket.getBucketType());
+                    for (int i = 0; i < locDetlList.size(); i++) {
+                        LocDetl locDetl = locDetlList.get(i);
+                        String loc1 = locDetl.getLocNo();
+                        String aisle1 = loc1.substring(0, 2);
+                        String column1 = loc1.substring(2, 5);
+                        String level1 = loc1.substring(5, 7);
+
+                        for (int j = i + 1; j < locDetlList.size(); j++) {
+                            LocDetl locDetl1 = locDetlList.get(j);
+                            String loc2 = locDetl1.getLocNo();
+                            String aisle2 = loc2.substring(0, 2);
+                            String column2 = loc2.substring(2, 5);
+                            String level2 = loc2.substring(5, 7);
+
+                            // 妫�鏌ユ槸鍚︽弧瓒崇粍闃熸潯浠�
+                            if (isSameAisleGroup(aisle1, aisle2) && column1.equals(column2) && level1.equals(level2)) {
+                                // 鍒涘缓绌烘《鍑哄簱浠诲姟
+                                try {
+                                    StockOutParam param = new StockOutParam();
+                                    param.setOutSite(wantBucket.getSite());
+                                    List<StockOutParam.LocDetl> locDetls = new ArrayList<>();
+                                    StockOutParam.LocDetl locDetl2 = new StockOutParam.LocDetl();
+                                    locDetl2.setLocNo(locDetl.getLocNo());
+                                    locDetl2.setMatnr(locDetl.getMatnr());
+                                    locDetl2.setBatch(locDetl.getBatch());
+                                    locDetl2.setBrand(locDetl.getBrand());
+                                    locDetl2.setCount(locDetl.getAnfme());
+                                    locDetl2.setBoxType1(locDetl.getBoxType1());
+                                    locDetl2.setBoxType2(locDetl.getBoxType2());
+                                    locDetl2.setBoxType3(locDetl.getBoxType3());
+                                    locDetl2.setStandby1(locDetl.getStandby1());
+                                    locDetl2.setStandby2(locDetl.getStandby2());
+                                    locDetl2.setStandby3(locDetl.getStandby3());
+                                    locDetls.add(locDetl2);
+
+                                    StockOutParam.LocDetl locDetl3 = new StockOutParam.LocDetl();
+                                    locDetl3.setLocNo(locDetl1.getLocNo());
+                                    locDetl3.setMatnr(locDetl1.getMatnr());
+                                    locDetl3.setBatch(locDetl1.getBatch());
+                                    locDetl3.setBrand(locDetl1.getBrand());
+                                    locDetl3.setCount(locDetl1.getAnfme());
+                                    locDetl3.setBoxType1(locDetl1.getBoxType1());
+                                    locDetl3.setBoxType2(locDetl1.getBoxType2());
+                                    locDetl3.setBoxType3(locDetl1.getBoxType3());
+                                    locDetl3.setStandby1(locDetl1.getStandby1());
+                                    locDetl3.setStandby2(locDetl1.getStandby2());
+                                    locDetl3.setStandby3(locDetl1.getStandby3());
+                                    locDetls.add(locDetl3);
+                                    param.setLocDetls(locDetls);
+
+                                    String response = new HttpHandler.Builder()
+                                            .setUri(wmsUrl)
+                                            .setPath("/rpc/autoOutEmptyBucket")
+                                            .setJson(JSON.toJSONString(param))
+                                            .build()
+                                            .doPost();
+                                    log.info("鑷姩鍑虹┖妗惰姹倃ms鍘熷杩斿洖锛�" + response);
+                                    JSONObject jsonObject = JSON.parseObject(response);
+                                    if (jsonObject.getInteger("code").equals(200)) {
+                                        log.info("鑷姩鍑虹┖妗舵垚鍔�:{}",wantBucket.getSite());
+                                        return;
+                                    } else {
+                                        News.error("鑷姩绌烘《鍑哄簱" + ":璇锋眰鎺ュ彛澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
+                                    }
+                                } catch (Exception e) {
+                                    e.printStackTrace();
+                                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    // 鍒ゆ柇涓や釜鎺掓槸鍚﹀睘浜庡悓涓�缁�
+    private static boolean isSameAisleGroup(String aisle1, String aisle2) {
+        return (aisle1.equals("09") && aisle2.equals("10")) ||
+                (aisle1.equals("10") && aisle2.equals("09")) ||
+                (aisle1.equals("11") && aisle2.equals("12")) ||
+                (aisle1.equals("12") && aisle2.equals("11"));
     }
 
     /**
@@ -1885,12 +2054,12 @@
                     param.setMatnr(staProtocol.getMatnr().trim());
                     param.setBatch(staProtocol.getBatch().trim());
                     param.setManuDate(staProtocol.getManuDate());
-                    param.setWeight(staProtocol.getWeight());
-                    param.setGrossWeight(staProtocol.getGrossWeight());
+                    param.setWeight(Math.round(staProtocol.getWeight() * 100.0) / 100.0);
+                    param.setGrossWeight(Math.round(staProtocol.getGrossWeight() * 100.0) / 100.0);
                     param.setReinspection(staProtocol.isReinspection());
                     param.setSourceStaNo(site + 2);
                     param.setTbFlag(staProtocol2.isBarcodeErr());
-
+                    param.setCannedVolume(Math.round(staProtocol.getCannedVolume() * 100.0) / 100.0);
 //                    param.setWrkNo(57);
 //                    param.setMatnr("101");
 //                    param.setBatch("tt1");
diff --git a/src/main/java/com/zy/utils/HttpHandler.java b/src/main/java/com/zy/utils/HttpHandler.java
index eb9dacd..8d0d26c 100644
--- a/src/main/java/com/zy/utils/HttpHandler.java
+++ b/src/main/java/com/zy/utils/HttpHandler.java
@@ -15,7 +15,7 @@
  */
 public class HttpHandler {
 
-    private static final Integer DEFAULT_TIMEOUT_SECONDS = 5;
+    private static final Integer DEFAULT_TIMEOUT_SECONDS = 30;
     private static final MediaType MEDIA_TYPE = MediaType.parse("application/json;charset=utf-8");
 
     private String uri;
diff --git a/src/main/resources/mapper/LocDetlMapper.xml b/src/main/resources/mapper/LocDetlMapper.xml
index 48cfab8..58822f7 100644
--- a/src/main/resources/mapper/LocDetlMapper.xml
+++ b/src/main/resources/mapper/LocDetlMapper.xml
@@ -27,7 +27,7 @@
         <result column="item_num" property="itemNum" />
         <result column="safe_qty" property="safeQty" />
         <result column="weight" property="weight" />
-        <result column="length" property="length" />
+        <result column="man_length" property="manLength" />
         <result column="volume" property="volume" />
         <result column="three_code" property="threeCode" />
         <result column="supp" property="supp" />
@@ -44,6 +44,14 @@
         <result column="appe_user" property="appeUser" />
         <result column="appe_time" property="appeTime" />
         <result column="memo" property="memo" />
+        <result column="standby1" property="standby1" />
+        <result column="standby2" property="standby2" />
+        <result column="standby3" property="standby3" />
+        <result column="box_type1" property="boxType1" />
+        <result column="box_type2" property="boxType2" />
+        <result column="box_type3" property="boxType3" />
+        <result column="box_type2" property="boxType2" />
+        <result column="box_type3" property="boxType3" />
     </resultMap>
 
     <sql id="stockOutCondition">
@@ -81,6 +89,10 @@
         ) t where t.row between ((#{pageNumber}-1)*#{pageSize}+1) and (#{pageNumber}*#{pageSize})
     </select>
 
+    <select id="selectListByMatnr" resultMap="BaseResultMap">
+        select * from asr_loc_detl ald left join asr_loc_mast alm on ald.loc_no = alm.loc_no where alm.loc_sts = 'F' and ald.matnr = #{bucketType}
+    </select>
+
     <select id="getStockOutPageCount" parameterType="java.util.Map" resultType="java.lang.Integer">
         select
         count(1)
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index e1113c7..8efb41d 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -63,9 +63,27 @@
         <result column="rgv_no" property="rgvNo" />
         <result column="rgv_ssta_no" property="rgvSstaNo" />
         <result column="rgv_dsta_no" property="rgvDstaNo" />
+        <result column="rgv_create_time" property="rgvCreateTime" />
+        <result column="rgv_finish_time" property="rgvFinishTime" />
         <result column="work_no_other" property="workNoOther" />
     </resultMap>
 
+    <select id="selectInGzxCount" resultType="java.lang.Integer">
+        SELECT
+            count(DISTINCT m.wrk_no)
+        FROM
+            asr_wrk_mast m
+                LEFT JOIN asr_bas_devp d ON
+                m.wrk_no = d.wrk_no
+        WHERE
+            (m.wrk_sts IN (2, 9 ,10,14)
+                AND m.sta_no = #{site}
+                AND d.wrk_no IS NOT NULL)
+           OR (m.wrk_sts IN(10,11,12,14)
+            AND m.sta_no = #{site}
+            AND d.wrk_no IS NULL)
+    </select>
+
     <select id="selectByLocNo"  resultMap="BaseResultMap">
         select top 1 * from asr_wrk_mast where source_loc_no = #{sourceLocNo} and  (ctn_no is null or ctn_no != 'Y')
     </select>

--
Gitblit v1.9.1