From b7b3328fdfa45cf13d1943fa79d47f1b6bb43f01 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期三, 28 五月 2025 18:22:17 +0800
Subject: [PATCH] 添加定时任务用户

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/utils/LocUtils.java |  260 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 251 insertions(+), 9 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/utils/LocUtils.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/utils/LocUtils.java
index b9668dc..811fbed 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/utils/LocUtils.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/utils/LocUtils.java
@@ -10,6 +10,7 @@
 import com.vincent.rsf.server.api.entity.dto.LocTypeDto;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.enums.LocStsType;
+import com.vincent.rsf.server.manager.enums.TaskStsType;
 import com.vincent.rsf.server.manager.enums.TaskType;
 import com.vincent.rsf.server.manager.service.*;
 import org.slf4j.Logger;
@@ -45,11 +46,11 @@
     /**
      * 鑾峰彇 娴呭簱浣嶅搴旂殑娣卞簱浣嶅彿
      */
-    public static String getDeepLoc(SlaveProperties slaveProperties, String shallowLoc) {
+    public static String getDeepLoc(String shallowLoc) {
         LocService locService = SpringUtils.getBean(LocService.class);
         Loc shaLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLoc));
         int row = shaLoc.getRow()-1;
-        boolean contains = slaveProperties.getDoubleLocs().contains(row);
+        boolean contains = doubleLocs.contains(row);
         Loc deepLoc = null;
         if (contains) {
             deepLoc = locService.getOne(new LambdaQueryWrapper<Loc>()
@@ -72,7 +73,7 @@
     /**
      * 鑾峰彇 娣卞簱浣嶅搴旂殑娴呭簱浣嶅彿
      */
-    public static String getShallowLoc(SlaveProperties slaveProperties, String deepLoc) {
+    public static String getShallowLoc(String deepLoc) {
         LocService locService = SpringUtils.getBean(LocService.class);
         Loc depLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, deepLoc));
         int row;
@@ -81,7 +82,7 @@
         } else {
             row = depLoc.getRow();
         }
-        boolean contains = slaveProperties.getDoubleLocs().contains(row);
+        boolean contains = doubleLocs.contains(row);
         Loc shallowLoc = null;
         if (!contains) {
             shallowLoc = locService.getOne(new LambdaQueryWrapper<Loc>()
@@ -104,10 +105,10 @@
     /**
      * 鍒ゆ柇鏄惁涓烘祬搴撲綅
      */
-    public static boolean isShallowLoc(SlaveProperties slaveProperties, String locNo) {
-        if (slaveProperties.isDoubleDeep()) {
+    public static boolean isShallowLoc(String locNo) {
+        if (isDoubleDeep) {
             int row = getRow(locNo);
-            return !slaveProperties.getDoubleLocs().contains(row);
+            return !doubleLocs.contains(row);
         } else {
             return false;
         }
@@ -213,8 +214,8 @@
     }
 
     public static String  getCrnLoc() {
-        SlaveProperties bean = SpringUtils.getBean(SlaveProperties.class);
-        System.out.println(bean.getDoubleLocs());
+//        SlaveProperties bean = SpringUtils.getBean(SlaveProperties.class);
+        System.out.println(doubleLocs);
 
         return null;
     }
@@ -233,4 +234,245 @@
             return msgBuilder.toString();
         }
     }
+
+    /**
+     * 鑾峰彇鍫嗗灈鏈哄簱浣嶄俊鎭�
+     * @param deviceBind
+     * @param area
+     * @param sourceStaNo
+     * @param matnr
+     * @param batch
+     * @param locTypeDto
+     * @param times
+     * @param ioType 浣滀笟绫诲瀷锛�*蹇呬紶鍙傛暟锛�
+     * @return
+     */
+    public static InTaskMsgDto getLocNoCrn(DeviceBind deviceBind, Long area, Integer sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) {
+        DeviceBindService deviceBindService = SpringUtils.getBean(DeviceBindService.class);
+        DeviceSiteService deviceSiteService = SpringUtils.getBean(DeviceSiteService.class);
+        LocService locService = SpringUtils.getBean(LocService.class);
+        LocItemService locItemService = SpringUtils.getBean(LocItemService.class);
+
+        if (Cools.isEmpty(matnr)) {  //鐗╂枡鍙�
+            matnr = "";
+        }
+        if (Cools.isEmpty(batch)) {  //鎵规
+            batch = "";
+        }
+        // 鍒濆鍖栧弬鏁�
+        int channel = 0;      //鍫嗗灈鏈哄彿
+        int nearRow = 0;    //鏈�娴呭簱浣嶆帓
+        int curRow = 0;     //鏈�娣卞簱浣嶆帓
+        int rowCount = 0;   //杞杞
+        Loc loc = null;     // 鐩爣搴撲綅
+
+        InTaskMsgDto inTaskMsgDto = new InTaskMsgDto();
+
+        int sRow = deviceBind.getStartRow();
+        int eRow = deviceBind.getEndRow();
+        int deviceQty = deviceBind.getDeviceQty();
+
+
+        // ===============>>>> 寮�濮嬫墽琛�
+        curRow = deviceBind.getCurrentRow();
+
+        //姝ょ▼搴忕敤浜庝紭鍖栧爢鍨涙満寮傚父鏃剁殑杩愯鏃堕棿
+        for (int i = times; i <= deviceQty * 2; i++) {
+            int[] locNecessaryParameters = LocUtils.LocNecessaryParameters(deviceBind, curRow, deviceQty);
+            curRow = locNecessaryParameters[1];
+            channel = locNecessaryParameters[2];
+            rowCount = locNecessaryParameters[0];
+            nearRow = locNecessaryParameters[3];
+            break;
+        }
+        if (nearRow == 0) {
+            throw new CoolException("鏃犲彲鐢ㄥ爢鍨涙満");
+        }
+        //鍏ュ簱闈犺繎鎽嗘斁
+        if (ioType == 1 && deviceBind.getBeSimilar().equals("1") && !Cools.isEmpty(matnr)) {
+            if (nearRow != curRow) {
+                List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getMatnrCode, matnr));
+                for (LocItem locItem : locItems) {
+                    Loc loc1 = locService.getById(locItem.getLocId());
+                    if (LocUtils.isShallowLoc(loc1.getCode())) {
+                        continue;
+                    }
+                    String shallowLocNo = LocUtils.getShallowLoc(loc1.getCode());
+                    // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
+                    Loc shallowLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLocNo));
+                    if (shallowLoc != null && shallowLoc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
+                        if (LocUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
+                            loc = shallowLoc;
+                            channel = shallowLoc.getChannel();
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+
+//        // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭 //浜掗�氱増
+//        if (ioType == 10 && deviceBind.getEmptySimilar().equals("1")) {
+//            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+//                    .eq("loc_sts", "D").ge("row1", sRow).le("row1", eRow).eq("whs_type", rowLastnoType.getType().longValue()));
+//            if (!locMasts.isEmpty()) {
+//                for (LocMast loc : locMasts) {
+//                    if (Utils.isShallowLoc(slaveProperties, loc.getLocNo())) {
+//                        continue;
+//                    }
+//                    String shallowLocNo = Utils.getShallowLoc(slaveProperties, loc.getLocNo());
+//                    // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
+//                    LocMast shallowLoc = locMastService.selectById(shallowLocNo);
+//                    if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) {
+//                        if (VersionUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
+//                            if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) {
+//                                locMast = shallowLoc;
+//                                crnNo = locMast.getCrnNo();
+//                                break;
+//                            }
+//                        }
+//                    }
+//                }
+//            }
+//        }
+        //鏌ユ壘璺緞
+        DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+                .eq(DeviceSite::getType, ioType)
+                .eq(DeviceSite::getSite, sourceStaNo)
+                .eq(DeviceSite::getChannel, channel)
+        );
+        if (Cools.isEmpty(deviceSite)) {
+            channel = 0;
+        } else {
+            inTaskMsgDto.setStaNo(Integer.parseInt(deviceSite.getDeviceSite()));
+        }
+
+        //鏇存柊褰撳墠鎺�
+        deviceBind.setCurrentRow(curRow);
+        deviceBindService.updateById(deviceBind);
+
+        // 寮�濮嬫煡鎵惧簱浣� ==============================>>
+
+        // 1.鎸夎鍒欐煡鎵惧簱浣�
+        if (Cools.isEmpty(loc) && channel != 0) {
+            List<Loc> locMasts = null;
+            locMasts = locService.list(new LambdaQueryWrapper<Loc>()
+                    .eq(Loc::getRow, nearRow)
+                    .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+                    .eq(Loc::getType, locTypeDto.getLocType1())
+                    .eq(Loc::getAreaId, area)
+                    .orderByAsc(Loc::getLev)
+                    .orderByAsc(Loc::getCol)
+            );
+            for (Loc locMast1 : locMasts) {
+                if (!LocUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
+                    continue;
+                }
+                String shallowLoc = LocUtils.getDeepLoc(locMast1.getCode());
+                if ((ioType == TaskStsType.GENERATE_IN.id && deviceBind.getBeSimilar().equals("1"))) {
+                    //鐩镐技鐗╂枡鎵撳紑锛屽垽鏂繁搴撲綅鏈夋病鏈夎揣锛屾病璐у氨鏀炬繁搴撲綅锛屾湁璐у氨涓嶆搷浣�
+                    Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
+                            .eq(Loc::getCode, shallowLoc)
+                            .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+                            .eq(Loc::getAreaId, area)
+                    );
+                    if (!Cools.isEmpty(locMast2)) {
+                        loc = locMast2;
+                        break;
+                    }
+                } else {
+                    //鐩镐技鐗╂枡鍏抽棴锛屽垽鏂繁搴撲綅鏈夋病鏈夎揣锛屾湁璐у氨鏀炬祬搴撲綅锛屾棤璐у氨涓嶆搷浣�
+                    Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
+                            .eq(Loc::getCode, shallowLoc)
+                            .in(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type, LocStsType.LOC_STS_TYPE_F.type)
+                            .eq(Loc::getAreaId, area)
+                    );
+                    if (!Cools.isEmpty(locMast2)) {
+                        loc = locMast1;
+                        break;
+                    } else {
+                        locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
+                                .eq(Loc::getCode, shallowLoc)
+                                .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+                                .eq(Loc::getAreaId, area)
+                        );
+                        if (!Cools.isEmpty(locMast2)) {
+                            loc = locMast2;
+                            break;
+                        }
+                    }
+                }
+            }
+            if (Cools.isEmpty(loc) && deviceBind.getBeSimilar().equals("1")) {
+                for (Loc locMast1 : locMasts) {
+                    if (!LocUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
+                        continue;
+                    }
+                    if (deviceBind.getBeSimilar().equals("1")) {
+                        String shallowLoc = LocUtils.getDeepLoc(locMast1.getCode());
+                        Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
+                                .eq(Loc::getCode, shallowLoc)
+                                .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+                                .eq(Loc::getAreaId, area)
+                        );
+                        if (!Cools.isEmpty(locMast2)) {
+                            loc = locMast2;
+                            break;
+                        } else {
+                            locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
+                                    .eq(Loc::getCode, shallowLoc)
+                                    .in(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type, LocStsType.LOC_STS_TYPE_D.type)
+                                    .eq(Loc::getAreaId, area)
+                            );
+                            if (!Cools.isEmpty(locMast2)) {
+                                loc = locMast1;
+                                break;
+                            }
+                        }
+                    } else {
+                        if (!Cools.isEmpty(locMast1)) {
+                            loc = locMast1;
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        //鏌ヨ褰撳墠搴撲綅绫诲瀷绌哄簱浣� 灏忎簬5涓垯locmast = null
+        List<Loc> locTypeLocMasts = locService.list(new LambdaQueryWrapper<Loc>()
+                .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+                .eq(Loc::getChannel, channel)
+                .eq(Loc::getType, locTypeDto.getLocType1())
+                .eq(Loc::getAreaId, area)
+        );
+        if (null != locTypeLocMasts && locTypeLocMasts.size() <= 5) {
+            loc = null;
+        }
+        // 閫掑綊鏌ヨ
+        if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
+            // 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
+            if (times < rowCount * 2) {
+                times = times + 1;
+                return getLocNoCrn(deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, times, ioType);
+
+            }
+            // 2.搴撲綅褰撳墠鎵�灞炲昂瀵告棤绌哄簱浣嶆椂锛岃皟鏁村昂瀵稿弬鏁帮紝鍚戜笂鍏煎妫�绱㈠簱浣�
+            if (locTypeDto.getLocType1() < 3) {
+                int i = locTypeDto.getLocType1() + 1;
+                locTypeDto.setLocType1(i);
+                return getLocNoCrn(deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, 0, ioType);
+            }
+            throw new CoolException("娌℃湁绌哄簱浣�");
+        }
+        String locNo = loc.getCode();
+
+        // 杩斿洖dto
+        inTaskMsgDto.setDeviceNo(channel);
+        inTaskMsgDto.setSourceStaNo(sourceStaNo);
+//        inTaskMsgDto.setStaNo();
+        inTaskMsgDto.setLocNo(locNo);
+        return inTaskMsgDto;
+    }
+
+
 }

--
Gitblit v1.9.1