From c48e3aabf2947e45a9db2eac3ef91190e8647655 Mon Sep 17 00:00:00 2001
From: skyouc <958836976@qq.com>
Date: 星期二, 02 九月 2025 17:03:34 +0800
Subject: [PATCH] agv站点功能调整

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java |  221 +++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 191 insertions(+), 30 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java
index 2728d00..01fdedd 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java
@@ -1,6 +1,7 @@
 package com.vincent.rsf.server.manager.schedules;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.exception.CoolException;
@@ -11,6 +12,7 @@
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.enums.*;
 import com.vincent.rsf.server.manager.service.*;
+import com.vincent.rsf.server.manager.service.impl.BasStationServiceImpl;
 import com.vincent.rsf.server.system.constant.SerialRuleCode;
 import com.vincent.rsf.server.system.service.ConfigService;
 import com.vincent.rsf.server.system.utils.SerialRuleUtils;
@@ -18,7 +20,9 @@
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 
@@ -33,27 +37,144 @@
 
     @Autowired
     private LocService locService;
-
     @Autowired
     private ConfigService configService;
-
     @Autowired
     private BasStationService stationService;
-
     @Autowired
     private TaskService taskService;
-
-
     @Autowired
     private TaskItemService taskItemService;
-
     @Autowired
     private MatnrService matnrService;
-
     @Autowired
     private LocItemService locItemService;
+    @Autowired
+    private DeviceSiteService deviceSiteService;
 
+
+    /**
+     * 鑷姩鐢熸垚搴撲綅鏄庣粏
+     */
+    @Transactional(rollbackFor = Exception.class)
+//    @Scheduled(cron = "0/25 * * * * ?")
+    public void insertRandomMats() {
+        List<Loc> list = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type));
+        for (Loc loc : list) {
+            List<LocItem> items = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, loc.getId()));
+            if (!items.isEmpty()) {
+                continue;
+            }
+            List<Matnr> matnrs = matnrService.list(new LambdaQueryWrapper<Matnr>().orderByAsc(Matnr::getBarcode).last("limit 100"));
+            Collections.shuffle(matnrs);
+            Matnr matnr = matnrs.stream().findFirst().get();
+            LocItem locItem = new LocItem();
+            BeanUtils.copyProperties(matnr, locItem);
+            locItem.setBarcode(loc.getBarcode())
+                    .setLocId(loc.getId())
+                    .setMatnrCode(matnr.getCode())
+                    .setMaktx(matnr.getName())
+                    .setMatnrId(matnr.getId())
+                    .setId(null)
+                    .setAnfme(45.0)
+                    .setLocCode(loc.getCode());
+            locItemService.save(locItem);
+        }
+    }
+
+//    /**
+//     * @author Ryan
+//     * @date 2025/9/1
+//     * @description: 鑷姩鐢熸垚鐩樼偣璺戝簱鍗�
+//     * @version 1.0
+//     */
+//    @Scheduled(cron = "0/25 * * * * ?")
+//    public void autoCheckOrders() {
+//
+//
+//    }
+
+    /**
+     * @author Ryan
+     * @date 2025/9/1
+     * @description: 鑷姩瀹屾垚鐩樼偣鍔熻兘
+     * @version 1.0
+     */
+    @Scheduled(cron = "0/35 * * * * ?")
+    public void autoCheckComplete() {
+        Boolean autoRunArea = configService.getVal("AUTO_RUN_CHECK_ORDERS", Boolean.class);
+        if (!autoRunArea) {
+            return;
+        }
+        //鑾峰彇浠诲姟鍒楄〃涓紝涓虹洏鐐瑰嚭搴撶殑浠诲姟
+        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
+                .in(Task::getTaskType, Arrays.asList(TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_CHECK_IN.type)));
+
+        if (tasks.size() >= 5) {
+            return;
+        }
+        if (!tasks.isEmpty()) {
+            tasks.forEach(task -> {
+                if (task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)) {
+                    if (task.getTaskStatus().equals(TaskStsType.COMPLETE_IN.id)) {
+                        if (!stationService.update(new LambdaUpdateWrapper<BasStation>()
+                                .eq(BasStation::getStationName, task.getOrgSite())
+                                .set(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type))) {
+                            throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                        }
+                    }
+                } else {
+                    //鍒涘缓鍑哄簱浠诲姟鐘舵��
+//                    if (task.getTaskStatus().equals(TaskStsType.WCS_EXECUTE_OUT.id)) {
+//                        task.setTaskStatus(TaskStsType.COMPLETE_OUT.id);
+//                        if (!taskService.updateById(task)) {
+//                            throw new CoolException("鐩樼偣鍑哄簱浠诲姟瀹屾垚澶辫触锛侊紒");
+//                        }
+//                        //鍑哄簱宸插畬鎴愶紝绛夊緟鐩樼偣涓�
+//                    } else
+
+                    if (task.getTaskStatus().equals(TaskStsType.WAVE_SEED.id)) {
+                        if (!stationService.update(new LambdaUpdateWrapper<BasStation>()
+                                .eq(BasStation::getStationName, task.getOrgSite())
+                                .set(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_F.type))) {
+                            throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                        }
+                        try {
+                            taskService.pickOrCheckTask(task.getId(), Constants.TASK_TYPE_OUT_CHECK);
+
+                            if (!stationService.update(new LambdaUpdateWrapper<BasStation>()
+                                    .eq(BasStation::getStationName, task.getOrgSite())
+                                    .set(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_R.type))) {
+                                throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                            }
+                        } catch (Exception e) {
+                            throw new CoolException(e.getMessage());
+                        }
+                    }
+                }
+            });
+        }
+    }
+
+
+    /**
+     * @author Ryan
+     * @date 2025/9/1
+     * @description: 鑷姩瀹屾垚鐩樼偣鍔熻兘
+     * @version 1.0
+     */
+    @Scheduled(cron = "0/25 * * * * ?")
     public void genRun() {
+        Boolean flagAuto = configService.getVal("AUTO_RUN_CHECK_ORDERS", Boolean.class);
+        if (!flagAuto) {
+            return;
+        }
+        //鑾峰彇浠诲姟鍒楄〃涓紝涓虹洏鐐瑰嚭搴撶殑浠诲姟
+        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
+                .in(Task::getTaskType, Arrays.asList(TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_CHECK_IN.type)));
+        if (tasks.size() >= 6) {
+            return;
+        }
         String autoRunArea = configService.getVal("AUTO_RUN_AREA", String.class);
         if (Cools.isEmpty(autoRunArea)) {
             return;
@@ -79,45 +200,84 @@
                     break;
             }
         }
-
     }
-
 
     private void autoRun(List<Integer> locGroupList, List<String> staGroupList) {
-
         List<String> staPreNos = getStaPrefixes(staGroupList);
         String staTaskMemo = "DEMO_STA_" + String.join("-", staPreNos);
-
         List<Task> list = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getMemo, staTaskMemo));
-        if (!Cools.isEmpty(list) && list.size() > 30) {
+        if (!Cools.isEmpty(list) && list.size() >= 1) {
             return;
         }
-        // 鍏ュ簱 搴旇鏍规嵁宸ヤ綔妗e洖鍘�
-        this.runStaToLoc(locGroupList, staGroupList, staTaskMemo);
-        // 鍑哄簱,闇�瑕佹牎楠屽伐浣滄。鏄惁瀛樺湪锛屽瓨鍦ㄥ氨璇存槑绔欑偣澶勪簬蹇欑鐘舵��
-        this.runLocToSta(locGroupList, staGroupList, staTaskMemo);
 
-        // 绉诲簱
-        this.runLocToLoc(locGroupList, staTaskMemo);
+        List<Loc> locs = getAreaLocs(locGroupList, staGroupList, staTaskMemo);
+
+        for (Loc loc : locs) {
+            List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, loc.getId()));
+            if (!locItems.isEmpty()) {
+                locItems.forEach(locItem -> {
+                    locItem.setOutQty(locItem.getAnfme());
+                });
+                List<BasStation> stations = stationService.list(new LambdaQueryWrapper<BasStation>().eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type));
+                if (Cools.isEmpty(stations)) {
+                    throw new CoolException("鏃犲彲鐢ㄧ珯鐐癸紒锛�");
+                }
+                DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+                        .in(DeviceSite::getSite, stations)
+                        .eq(DeviceSite::getType, TaskType.TASK_TYPE_CHECK_OUT.type), false);
+                if (Cools.isEmpty(deviceSite)) {
+                    throw new CoolException("鏃犲彲鐢ㄨ矾寰勶紒锛�");
+                }
+                //鐢熸垚鐩樼偣浠诲姟鍙傛暟
+                LocToTaskParams locToTaskParams = new LocToTaskParams();
+                locToTaskParams.setType(Constants.TASK_TYPE_OUT_CHECK)
+                        .setItems(locItems)
+                        .setSiteNo(deviceSite.getSite())
+                        .setOrgLoc(loc.getCode());
+
+                List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTargSite, deviceSite.getSite()));
+                if (!tasks.isEmpty()) {
+                    continue;
+                }
+                try {
+                    //鐢熸垚鐩樼偣鍑哄簱浠诲姟锛岀珯鐐归绾�
+                    if (!stationService.update(new LambdaUpdateWrapper<BasStation>()
+                            .eq(BasStation::getStationName, deviceSite.getSite())
+                            .set(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_S.type))) {
+                        throw new CoolException("绔欑偣鐘舵�佹洿鏂板け璐ワ紒锛�");
+                    }
+                    locItemService.generateTask(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val, locToTaskParams, getLoginUserId());
+                } catch (Exception e) {
+                    throw new CoolException(e.getMessage());
+                }
+            }
+        }
+
+
+        // 鍏ュ簱 搴旇鏍规嵁宸ヤ綔妗e洖鍘�
+//        this.runStaToLoc(locGroupList, staGroupList, staTaskMemo);
+
+//        // 鍑哄簱,闇�瑕佹牎楠屽伐浣滄。鏄惁瀛樺湪锛屽瓨鍦ㄥ氨璇存槑绔欑偣澶勪簬蹇欑鐘舵��
+//        this.runLocToSta(locGroupList, staGroupList, staTaskMemo);
+//        // 绉诲簱
+//        this.runLocToLoc(locGroupList, staTaskMemo);
     }
 
 
-    // 鍏ュ簱
-    private void runStaToLoc(List<Integer> locGroupList, List<String> staGroupList, String memo) {
+    private List<Loc> getAreaLocs(List<Integer> locGroupList, List<String> staGroupList, String memo) {
         Integer startRow = Collections.min(locGroupList);
         Integer endRow = Collections.max(locGroupList);
 
-
         // STA IDLE
-        LambdaQueryWrapper<BasStation> idleWrapper = new LambdaQueryWrapper<BasStation>().eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_F.type).in(BasStation::getStationName, staGroupList);
-        List<BasStation> idleList = stationService.list(idleWrapper);
-        if (Cools.isEmpty(idleList)) {
-            return;
-        }
-        Collections.shuffle(idleList);
+//        LambdaQueryWrapper<BasStation> idleWrapper = new LambdaQueryWrapper<BasStation>().eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type).in(BasStation::getStationName, staGroupList);
+//        List<BasStation> idleList = stationService.list(idleWrapper);
+//        if (Cools.isEmpty(idleList)) {
+//            return new ArrayList<>();
+//        }
+//        Collections.shuffle(idleList);
 
         // LOC STOCK
-        LambdaQueryWrapper<Loc> stockWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type);
+        LambdaQueryWrapper<Loc> stockWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type);
         if (null != startRow) {
             stockWrapper.ge(Loc::getRow, startRow);
         }
@@ -126,12 +286,13 @@
         }
         List<Loc> stockList = locService.list(stockWrapper);
         if (Cools.isEmpty(stockList)) {
-            return;
+            return new ArrayList<>();
         }
         Collections.shuffle(stockList);
 
+        return stockList;
         //鐢熸垚鍏ュ簱宸ヤ綔妗�
-        generateTask(idleList.get(0).getStationName(), stockList.get(0).getCode(), idleList.get(0).getBarcode());
+//        generateTask(idleList.get(0).getStationName(), stockList.get(0).getCode(), idleList.get(0).getBarcode());
     }
 
 

--
Gitblit v1.9.1