From fa3303ec0e60325f7e0cafeac8fe9a2a7de0652c Mon Sep 17 00:00:00 2001
From: Administrator <1051256694@qq.com>
Date: 星期六, 28 三月 2026 19:57:52 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/task/WorkMastScheduler.java |  227 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 224 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
index 67a2abb..94eb0d1 100644
--- a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
+++ b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -1,21 +1,242 @@
 package com.zy.asrs.task;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.core.exception.CoolException;
+import com.zy.api.controller.params.WorkTaskParams;
+import com.zy.api.service.WcsApiService;
+import com.zy.asrs.entity.LocAroundBind;
+import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.LocAroundBindService;
+import com.zy.asrs.service.TaskService;
+import com.zy.asrs.service.WrkMastService;
+import com.zy.asrs.service.impl.LocMastServiceImpl;
+import com.zy.asrs.task.core.ReturnT;
 import com.zy.asrs.task.handler.WorkMastHandler;
+import com.zy.asrs.utils.Utils;
+import com.zy.common.model.enums.WorkNoType;
+import com.zy.common.service.CommonService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
 
 /**
  * Created by vincent on 2020/7/7
  */
-//@Component
+@Component
 public class WorkMastScheduler {
 
+    private static final Logger log = LoggerFactory.getLogger(WorkMastScheduler.class);
+
+    @Autowired
+    private WrkMastService wrkMastService;
     @Autowired
     private WorkMastHandler workMastHandler;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private WcsApiService wcsApiService;
+    @Autowired
+    private LocMastServiceImpl locMastService;
+    @Autowired
+    private CommonService commonService;
+    @Autowired
+    private LocAroundBindService locAroundBindService;
 
     @Scheduled(cron = "0/3 * * * * ? ")
-    private void execute(){
-        workMastHandler.start();
+    private void execute() {
+        List<WrkMast> wrkMasts = wrkMastService.selectToBeCompleteData();
+        if (wrkMasts.isEmpty()) {
+            return;
+        }
+        for (WrkMast wrkMast : wrkMasts) {
+            ReturnT<String> returnT = workMastHandler.start(wrkMast);
+            if (!returnT.isSuccess()) {
+                wrkMast.setUpdMk("X");
+                wrkMast.setErrorMemo(returnT.getMsg());
+                wrkMast.setErrorTime(new Date());
+                if (!wrkMastService.updateById(wrkMast)) {
+                    log.error("宸ヤ綔妗workNo={}]鏍囪寰呭鐞嗗け璐�", wrkMast.getWrkNo());
+                }
+            }
+        }
     }
 
+
+    /**
+     * 浠诲姟鑷姩涓嬪彂
+     *
+     * @author Ryan
+     * @date 2026/1/10 14:42
+     */
+    @Scheduled(cron = "0/3 * * * * ? ")
+    private synchronized void autoPubTasks() {
+        for (int i = 1 ;i<=4;i++){
+            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no",i).in("wrk_sts", 1L, 11L).orderBy("io_pri",false).orderBy("appe_time", true));
+            if (wrkMasts.isEmpty()) {
+                continue;
+            }
+//            Collections.shuffle(wrkMasts);
+            for (WrkMast wrkMast : wrkMasts) {
+                try {
+                    //鏌ョ湅涓嬪彂浠诲姟鏄惁涓哄喕缁撳簱浣嶏紝鏄喕缁撳簱浣嶅垯璺宠繃涓嬪彂浠诲姟
+                    LocAroundBind locAroundBind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>()
+                            .eq("b_loc_no", wrkMast.getLocNo())
+                            .eq("freeze", 1));
+                    if (Cools.isEmpty(locAroundBind)) {
+                        locAroundBind = locAroundBindService.selectOne(new EntityWrapper<LocAroundBind>()
+                                .eq("b_loc_no", wrkMast.getSourceLocNo())
+                                .eq("freeze", 1));
+                        if (!Cools.isEmpty(locAroundBind)) {
+                            markPublishError(wrkMast.getWrkNo(), String.valueOf("婧愬簱浣嶈鍐荤粨"));
+                            continue;
+                        }
+                    } else {
+                        markPublishError(wrkMast.getWrkNo(), String.valueOf("鐩爣搴撲綅琚喕缁�"));
+                        continue;
+                    }
+                    Integer crnNo = wrkMast.getCrnNo();
+                    //濡傛灉浠诲姟鏄Щ搴撲换鍔℃椂锛氳鍫嗗灈鏈哄凡缁忎笅鍙戜换鍔$粰wcs鍚庝笉鍐嶄笅鍙戞柊鐨勬惉杩愪换鍔�
+                    if(wrkMast.getIoType()==101&&!Cools.isEmpty(wrkMast.getLocNo())){
+                        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("crn_no", crnNo).eq("loc_no", wrkMast.getLocNo()));
+                        if (!Cools.isEmpty(locMast)) {
+                            List<WrkMast> wrkMasts1 = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).in("wrk_sts", 12L,13L,14L));
+                            if (!wrkMasts1.isEmpty()) {
+                                continue;
+                            }
+                        }
+
+                    }
+
+                    //婧愬簱浣嶄负鍐荤粨搴撲綅鏃剁姝笅鍙戞惉杩愪换鍔$粰鍫嗗灈鏈�
+                    if (!Cools.isEmpty(wrkMast.getSourceLocNo())) {
+                        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                                .eq("loc_no", wrkMast.getSourceLocNo())
+                                .eq("frozen", 0));
+                        if (Cools.isEmpty(locMast)) {
+                            continue;
+                        }
+                    }
+
+                    //鐩爣搴撲綅涓哄喕缁撳簱浣嶆椂绂佹涓嬪彂鎼繍浠诲姟缁欏爢鍨涙満
+                    if (!Cools.isEmpty(wrkMast.getLocNo())) {
+                        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                                .eq("loc_no", wrkMast.getLocNo())
+                                .eq("frozen", 0));
+                        if (Cools.isEmpty(locMast)) {
+                            continue;
+                        }
+                    }
+
+                    String wcsSourceLocNo = Cools.isEmpty(wrkMast.getSourceLocNo()) ? "" : Utils.WMSLocToWCSLoc(wrkMast.getSourceLocNo());
+                    String wcsLocNo = Cools.isEmpty(wrkMast.getLocNo()) ? "" : Utils.WMSLocToWCSLoc(wrkMast.getLocNo());
+                    Integer taskPri = wrkMast.getIoPri() == null ? null : wrkMast.getIoPri().intValue();
+                    WorkTaskParams params = new WorkTaskParams();
+                    //鍑哄簱鍜岀Щ搴�
+                    if ((wrkMast.getIoType() == 101 || wrkMast.getIoType() == 110) && !Cools.isEmpty(wrkMast.getStaNo()) && !wrkMast.getStaNo().equals("0")) {
+                        params.setType("out")
+                                .setTaskNo(wrkMast.getWrkNo() + "")
+                                .setSourceLocNo(wcsSourceLocNo)
+                                .setLocNo(wcsLocNo)
+                                .setStaNo(wrkMast.getStaNo())
+                                .setTaskPri(taskPri)
+                                .setBarcode(wrkMast.getBarcode());
+                    } else if (wrkMast.getIoType() == 2 && !Cools.isEmpty(wrkMast.getSourceStaNo())) {
+                        params.setType("in")
+                                .setTaskNo(wrkMast.getWrkNo() + "")
+                                .setSourceStaNo(wrkMast.getSourceStaNo())
+                                .setStaNo(wrkMast.getStaNo())
+                                .setLocNo(wcsLocNo)
+                                .setTaskPri(taskPri)
+                                .setBarcode(wrkMast.getBarcode());
+                    } else {
+                        params.setType("move")
+                                .setTaskNo(wrkMast.getWrkNo() + "")
+                                .setSourceLocNo(wcsSourceLocNo)
+                                .setLocNo(wcsLocNo)
+                                .setBarcode(wrkMast.getBarcode());
+                    }
+                    R r = wcsApiService.pubWrkToWcs(params);
+                    if (isSuccess(r)) {
+                        clearPublishError(wrkMast.getWrkNo());
+                        break;
+                    }
+                    markPublishError(wrkMast.getWrkNo(), String.valueOf(r.get("msg")));
+                } catch (Exception e) {
+                    log.error("宸ヤ綔妗wrkNo={}]涓嬪彂浠诲姟寮傚父", wrkMast.getWrkNo(), e);
+                    markPublishError(wrkMast.getWrkNo(), e.getMessage());
+                }
+            }
+        }
+
+    }
+
+    private boolean isSuccess(R r) {
+        return r != null && "200".equals(String.valueOf(r.get("code")));
+    }
+
+    private void markPublishError(Integer wrkNo, String msg) {
+        if (wrkMastService.updatePublishError(wrkNo, "X", new Date(), buildPublishErrorMsg(msg)) <= 0) {
+            log.error("宸ヤ綔妗wrkNo={}]鍥炲啓涓嬪彂寮傚父澶辫触", wrkNo);
+        }
+    }
+
+    private void clearPublishError(Integer wrkNo) {
+        if (wrkMastService.updatePublishError(wrkNo, null, null, null) <= 0) {
+            log.error("宸ヤ綔妗wrkNo={}]娓呯悊涓嬪彂寮傚父澶辫触", wrkNo);
+        }
+    }
+
+    private String buildPublishErrorMsg(String msg) {
+        return Cools.isEmpty(msg) || "null".equalsIgnoreCase(msg) ? "涓嬪彂浠诲姟澶辫触" : "涓嬪彂浠诲姟澶辫触锛�" + msg;
+    }
+
+    /**
+     * 鑷姩鐢熸垚璺ㄥ尯鍏ヤ换鍔�
+     *
+     * @author Ryan
+     * @date 2026/1/10 14:42
+     */
+    @Scheduled(cron = "0/3 * * * * ? ")
+    private void autoInStack() {
+        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 15).eq("online_yn","N"));
+        if (wrkMasts.isEmpty()) {
+            return;
+        }
+        for (WrkMast wrkMast : wrkMasts) {
+            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wrkMast.getLocNo()));
+            // 鏋勯�犺法鍖哄叆搴撲换鍔�
+            WrkMast inMast = new WrkMast();
+            // 鐢熸垚宸ヤ綔鍙�
+            int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(1));
+            inMast.setWrkNo(workNo);          // 鐢熸垚鏂颁换鍔″彿
+            inMast.setBarcode(wrkMast.getBarcode());                // 鎵樼洏鐮佷繚鎸佷竴鑷�
+            inMast.setIoType(2);                                 // 璺ㄥ尯鍏ュ簱绫诲瀷
+            inMast.setWrkSts(1L);                                // 寰呬笅鍙�
+            inMast.setLocNo(wrkMast.getLocNo());              // 鍘熺洰鏍囧簱浣�
+            inMast.setIoPri(13.0);
+            inMast.setSourceStaNo(wrkMast.getStaNo());
+            inMast.setWrkCode(wrkMast.getWrkNo()+"");                  // 鍏宠仈鍘熷嚭搴撲换鍔�
+            inMast.setAppeUser(wrkMast.getAppeUser());              // 鐢宠浜�
+            inMast.setAppeTime(new Date());
+            inMast.setIoTime(new Date());
+            inMast.setCrnNo(locMast.getCrnNo());
+            if(!wrkMastService.insert(inMast)){
+                throw new CoolException("璺ㄥ尯鍏ュ簱浠诲姟鐢熸垚澶辫触锛�");
+            }else {
+                wrkMast.setOnlineYn("Y");
+                wrkMastService.updateById(wrkMast);
+            }
+        }
+
+    }
 }

--
Gitblit v1.9.1