From 681d5587c0d926711861269047d38e3502ff5fa3 Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期四, 27 三月 2025 10:36:43 +0800
Subject: [PATCH] #

---
 license.lic                                                 |    0 
 src/main/java/com/zy/asrs/service/WorkService.java          |    1 
 src/main/java/com/zy/asrs/task/WorkMastScheduler.java       |    2 
 src/main/java/com/zy/common/model/LocDto.java               |    3 
 pom.xml                                                     |    2 
 src/main/java/com/zy/asrs/utils/Utils.java                  |   32 +--
 src/main/webapp/static/js/order/out.js                      |    6 
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java |    6 
 src/main/java/com/zy/common/model/ExistDto.java             |    2 
 src/main/webapp/static/js/common.js                         |    2 
 src/main/java/com/zy/asrs/controller/OutController.java     |  281 ++++++++++++++++++++++++++++
 src/main/java/com/zy/common/service/CommonService.java      |  213 +++++++++++++++++++++
 src/main/resources/license.lic                              |    0 
 src/main/resources/application.yml                          |    4 
 14 files changed, 523 insertions(+), 31 deletions(-)

diff --git a/license.lic b/license.lic
index e881460..4940185 100644
--- a/license.lic
+++ b/license.lic
Binary files differ
diff --git a/pom.xml b/pom.xml
index aa3af82..ede5b05 100644
--- a/pom.xml
+++ b/pom.xml
@@ -124,7 +124,7 @@
     </dependencies>
 
     <build>
-        <finalName>gtSxkWms</finalName>
+        <finalName>fyxcwms</finalName>
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java
index 3a54e57..b9adff4 100644
--- a/src/main/java/com/zy/asrs/controller/OutController.java
+++ b/src/main/java/com/zy/asrs/controller/OutController.java
@@ -7,6 +7,7 @@
 import com.core.common.BaseRes;
 import com.core.common.Cools;
 import com.core.common.R;
+import com.core.exception.CoolException;
 import com.zy.asrs.entity.BasDevp;
 import com.zy.asrs.entity.LocDetl;
 import com.zy.asrs.entity.LocMast;
@@ -58,6 +59,286 @@
         return R.ok().add(orderDetlService.selectByOrderId(orderId).stream().map(OrderDetl::getId).distinct().collect(Collectors.toList()));
     }
 
+    @PostMapping("/out/pakout/OrderOutGetLoc/auth")
+    @ManagerAuth
+    public R OrderOutGetLoc(@RequestBody List<Long> ids) {
+        if (Cools.isEmpty(ids)) {
+            return R.parse(BaseRes.PARAM);
+        }
+        // 鑾峰彇璁㈠崟鏄庣粏骞跺鐞�
+        List<OrderDetl> orderDetls = orderDetlService.selectBatchIds(ids);
+        Set<String> processedLocs = new HashSet<>(); // 宸插鐞嗚揣浣嶇紦瀛�
+        Set<ExistDto> processedStock = new HashSet<>(); // 宸插鐞嗗簱瀛樼紦瀛�
+        List<LocDto> result = new ArrayList<>();
+
+        for (OrderDetl detl : orderDetls) {
+            result.addAll(processOrderDetl(detl, null, processedLocs, processedStock));
+        }
+
+        return R.ok().add(result);
+    }
+
+    /** 澶勭悊璁㈠崟鍑哄簱璐т綅鍒嗛厤
+     * @param jsonObject 璇锋眰鍙傛暟(鍖呭惈璁㈠崟鏄庣粏ID鍒楄〃鍜屽嚭搴撴暟閲�)
+     */
+    @PostMapping("/out/pakout/OrderOutGetLoc.number/auth")
+    @ManagerAuth
+    public R OrderOutGetLocNumber(@RequestBody JSONObject jsonObject) {
+        // 鍙傛暟鏍¢獙
+        if (!jsonObject.containsKey("ids") || !jsonObject.containsKey("amount")) {
+            return R.parse(BaseRes.PARAM);
+        }
+
+        // 鎻愬彇骞惰浆鎹㈠弬鏁�
+        List<Long> ids = jsonObject.getJSONArray("ids").toJavaList(Long.class);
+        Double amount = jsonObject.getDouble("amount");
+
+
+        // 鑾峰彇璁㈠崟鏄庣粏骞跺鐞�
+        List<OrderDetl> orderDetls = orderDetlService.selectBatchIds(ids);
+        Set<String> processedLocs = new HashSet<>(); // 宸插鐞嗚揣浣嶇紦瀛�
+        Set<ExistDto> processedStock = new HashSet<>(); // 宸插鐞嗗簱瀛樼紦瀛�
+        List<LocDto> result = new ArrayList<>();
+
+        for (OrderDetl detl : orderDetls) {
+            result.addAll(processOrderDetl(detl, amount, processedLocs, processedStock));
+        }
+
+        return R.ok().add(result);
+    }
+
+    /**
+     * 澶勭悊鍗曚釜璁㈠崟鏄庣粏鐨勮揣浣嶅垎閰�
+     * @param orderDetl 璁㈠崟鏄庣粏
+     * @param requiredAmount 闇�姹傚嚭搴撻噺
+     * @param processedLocs 宸插鐞嗙殑璐т綅闆嗗悎锛堢敤浜庡幓閲嶏級
+     * @param processedStock 宸插鐞嗙殑搴撳瓨璁板綍闆嗗悎锛堢敤浜庡幓閲嶏級
+     */
+    private List<LocDto> processOrderDetl(OrderDetl orderDetl, Double requiredAmount,
+                                            Set<String> processedLocs, Set<ExistDto> processedStock) {
+        List<LocDto> result = new ArrayList<>();
+        double remaining = Optional.ofNullable(orderDetl.getAnfme() - orderDetl.getWorkQty()).orElse(0.0D);
+
+        // 璋冩暣鏍¢獙閫昏緫锛氬綋requiredAmount涓嶄负null鏃舵墠鏍¢獙
+        if (requiredAmount != null) {
+            if (requiredAmount <= 0) {
+                throw new CoolException("鍑哄簱鏁伴噺蹇呴』澶т簬0");
+            }
+            if (requiredAmount > remaining) {
+                throw new CoolException("璁㈠崟"+orderDetl.getOrderNo()+"璇锋眰鏁伴噺瓒呰繃鍙嚭搴撴暟閲忥紝鍓╀綑鍙嚭锛�" + remaining);
+            }
+            // 褰撴寚瀹氭暟閲忔椂锛屼娇鐢ㄦ寚瀹氭暟閲忚鐩栧墿浣欓噺
+            remaining = Math.min(requiredAmount, remaining);
+        }
+
+        // 鑾峰彇鍙敤搴撳瓨璁板綍
+        List<LocDetl> stocks = locDetlService.queryStock(
+            orderDetl.getMatnr(), orderDetl.getBatch(), null,
+            processedLocs, orderDetl.getSupp(),
+            orderDetl.getTemp1(), orderDetl.getTemp2()
+        );
+
+        // 閬嶅巻澶勭悊姣忎釜搴撳瓨璁板綍
+        for (LocDetl stock : stocks) {
+            if (remaining <= 0) break;
+
+            LocMast locMast = locMastService.selectOne(
+                new EntityWrapper<LocMast>().eq("loc_no", stock.getLocNo()));
+
+            // 闈�7鍙峰爢鍨涙満澶勭悊閫昏緫
+            if (locMast.getCrnNo() != 7) {
+                processNormalLocation(stock, orderDetl, remaining, processedStock, result);
+            }
+            // 7鍙峰爢鍨涙満鐗规畩澶勭悊
+            else {
+                processCrn7Location(locMast, stock, orderDetl, remaining, processedStock, result);
+            }
+
+            remaining -= stock.getAnfme();
+        }
+
+        // 澶勭悊缂洪噺鎯呭喌
+        if (remaining > 0) {
+            result.add(createShortageDto(orderDetl, remaining));
+        }
+
+        return result;
+    }
+
+    /** 鍒涘缓缂洪噺DTO */
+    private LocDto createShortageDto(OrderDetl orderDetl, double qty) {
+        LocDto dto = new LocDto(null, orderDetl.getMatnr(),
+                              orderDetl.getMaktx(), orderDetl.getBatch(),
+                              orderDetl.getOrderNo(), qty);
+        dto.setLack(true);
+        return dto;
+    }
+
+    /** 澶勭悊鏅�氳揣浣� */
+    private void processNormalLocation(LocDetl stock, OrderDetl orderDetl, double remaining,
+                                      Set<ExistDto> processedStock, List<LocDto> result) {
+        ExistDto exist = new ExistDto()
+            .setLocNo(stock.getLocNo())
+            .setMatnr(stock.getMatnr())
+            .setBatch(stock.getBatch());
+
+        if (processedStock.add(exist)) {
+            double allocateQty = Math.min(remaining, stock.getAnfme());
+            result.add(buildLocDto(stock, orderDetl, allocateQty));
+        }
+    }
+
+    /** 澶勭悊7鍙峰爢鍨涙満璐т綅 */
+    private void processCrn7Location(LocMast baseLoc, LocDetl stock, OrderDetl orderDetl,
+                                    double remaining, Set<ExistDto> processedStock,
+                                    List<LocDto> result) {
+        // 鏋勫缓鏌ヨ鏉′欢
+        EntityWrapper<LocMast> wrapper = (EntityWrapper<LocMast>) new EntityWrapper<LocMast>()
+            .eq("gro1", baseLoc.getGro1())
+            .eq("crn_no", 7)
+            .eq("loc_type1", baseLoc.getLocType1())
+            .orderBy("bay1", (baseLoc.getBay1() == 6 || baseLoc.getBay1() == 5));
+
+        // 鑾峰彇鍚岀粍璐т綅骞跺鐞�
+        locMastService.selectList(wrapper).stream()
+            .filter(loc -> "F".equals(loc.getLocSts()))
+            .forEach(loc -> processCrn7SubLocation(loc, stock, orderDetl, remaining, processedStock, result));
+    }
+
+    /** 澶勭悊7鍙峰爢鍨涙満瀛愯揣浣� */
+    private void processCrn7SubLocation(LocMast loc, LocDetl stock, OrderDetl orderDetl,
+                                       double remaining, Set<ExistDto> processedStock,
+                                       List<LocDto> result) {
+        LocDetl subStock = locDetlService.selectOne(
+            new EntityWrapper<LocDetl>()
+                .eq("loc_No", loc.getLocNo())
+                .eq("matnr", stock.getMatnr())
+                .eq("batch", stock.getBatch()));
+
+        if (!Cools.isEmpty(subStock)) {
+            ExistDto exist = new ExistDto()
+                .setLocNo(subStock.getLocNo())
+                .setMatnr(subStock.getMatnr())
+                .setBatch(subStock.getBatch());
+
+            if (processedStock.add(exist) && remaining > 0) {
+                double allocateQty = Math.min(remaining, subStock.getAnfme());
+                result.add(buildLocDto(subStock, orderDetl, allocateQty));
+            }
+        }
+    }
+
+    /** 鏋勫缓璐т綅DTO閫氱敤鏂规硶 */
+    private LocDto buildLocDto(LocDetl stock, OrderDetl orderDetl, double qty) {
+        LocDto dto = new LocDto(
+            stock.getLocNo(), stock.getMatnr(), stock.getMaktx(),
+            stock.getBatch(), orderDetl.getOrderNo(), qty
+        );
+
+        // 鑾峰彇宸ヤ綔绔欏苟杞崲
+        List<Integer> staNos = staDescService.queryOutStaNosByLocNo(
+            stock.getLocNo(), qty >= stock.getAnfme() ? 101 : 103);
+
+        List<LocDto.staListDto> staList = staNos.stream()
+            .map(staNo -> new LocDto.staListDto()
+                 .setStaNo(staNo)
+                 .setStaName(Utils.getStaName(staNo)))
+            .collect(Collectors.toList());
+
+        dto.setStaNos(staList);
+        return dto;
+    }
+
+    // 鏂板鏂规硶
+//    private List<LocDto> processOrderDetl(OrderDetl orderDetl, Double amount, Set<String> exist, Set<ExistDto> existDtos) {
+//        List<LocDto> result = new ArrayList<>();
+//        double issued = Optional.ofNullable(orderDetl.getAnfme() - orderDetl.getWorkQty()).orElse(0.0D);
+//
+//        if (amount != null && amount > issued) {
+//            throw new CoolException("鏁伴噺楂樹簬鍙嚭搴撴暟閲�");
+//        }
+//
+//        List<LocDetl> locDetls = locDetlService.queryStockCrn(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist, orderDetl.getSupp(), orderDetl.getTemp1(), orderDetl.getTemp2());
+//        for (LocDetl locDetl : locDetls) {
+//            if (issued <= 0) break;
+//            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetl.getLocNo()));
+//            if (locMast.getCrnNo() != 7) {
+//                ExistDto existDto = new ExistDto();
+//                existDto.setLocNo(locDetl.getLocNo());
+//                existDto.setMatnr(locDetl.getMatnr());
+//                existDto.setBatch(locDetl.getBatch());
+//                if (existDtos.add(existDto)) {
+//                    LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
+//                            issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued);
+//                    List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103);
+//                    List<LocDto.staListDto> maps = new ArrayList<>();
+//                    for (Integer staNo : staNos) {
+//                        LocDto.staListDto staListDto = new LocDto.staListDto();
+//                        staListDto.setStaNo(staNo);
+//                        staListDto.setStaName(Utils.getStaName(staNo));
+//                        maps.add(staListDto);
+//                    }
+//                    locDto.setStaNos(maps);
+//                    result.add(locDto);
+//                    // 鍓╀綑寰呭嚭鏁伴噺閫掑噺
+//                    issued = issued - locDetl.getAnfme();
+//                }
+//            }else {
+//                List<LocMast> locMasts = new ArrayList<>();
+//                if (locMast.getBay1() ==6 || locMast.getBay1()==5){
+//                    locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+//                            .eq("gro1", locMast.getGro1())
+//                            .eq("crn_no", 7)
+//                            .eq("loc_type1",locMast.getLocType1())
+//                            .orderBy("bay1", true));
+//                }else{
+//                    locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+//                            .eq("gro1", locMast.getGro1())
+//                            .eq("crn_no", 7)
+//                            .eq("loc_type1",locMast.getLocType1())
+//                            .orderBy("bay1", false));
+//                }
+//                for (LocMast locMast1 : locMasts){
+//                    if (locMast1.getLocSts().equals("F")){
+//                        LocDetl locDetl1 = locDetlService.selectOne(new EntityWrapper<LocDetl>()
+//                                .eq("loc_No", locMast1.getLocNo())
+//                                .eq("matnr", locDetl.getMatnr()).eq("batch", locDetl.getBatch()));
+//                        if (!Cools.isEmpty(locDetl1)) {
+//                            ExistDto existDto = new ExistDto();
+//                            existDto.setLocNo(locDetl1.getLocNo());
+//                            existDto.setMatnr(locDetl1.getMatnr());
+//                            existDto.setBatch(locDetl1.getBatch());
+//                            if (existDtos.add(existDto)){
+//                                if (issued <= 0) break;
+//                                LocDto locDto = new LocDto(locDetl1.getLocNo(), locDetl1.getMatnr(), locDetl1.getMaktx(), locDetl1.getBatch(), orderDetl.getOrderNo(),
+//                                        issued >= locDetl1.getAnfme() ? locDetl1.getAnfme() : issued);
+//                                List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl1.getLocNo(), issued >= locDetl1.getAnfme() ? 101 : 103);
+//                                List<LocDto.staListDto> maps = new ArrayList<>();
+//                                for (Integer staNo : staNos) {
+//                                    LocDto.staListDto staListDto = new LocDto.staListDto();
+//                                    staListDto.setStaNo(staNo);
+//                                    staListDto.setStaName(Utils.getStaName(staNo));
+//                                    maps.add(staListDto);
+//                                }
+//                                locDto.setStaNos(maps);
+//                                result.add(locDto);
+//                                // 鍓╀綑寰呭嚭鏁伴噺閫掑噺
+//                                issued = issued - locDetl.getAnfme();
+//
+//                            }
+//                        }
+//                    }
+//                }
+//            }
+//        }
+//        if (issued > 0) {
+//            LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
+//            locDto.setLack(Boolean.TRUE);
+//            result.add(locDto);
+//        }
+//        return result;
+//    }
+
 
     /** 鍥涘悜搴撹鍗曞嚭搴� **/
     @PostMapping("/out/pakout/previewCustomQuantity/auth/sxk")
diff --git a/src/main/java/com/zy/asrs/service/WorkService.java b/src/main/java/com/zy/asrs/service/WorkService.java
index df6c1c3..dc0fe91 100644
--- a/src/main/java/com/zy/asrs/service/WorkService.java
+++ b/src/main/java/com/zy/asrs/service/WorkService.java
@@ -37,6 +37,7 @@
 
     void stockOut(BasDevp staNo, TaskDto taskDto, Long userId);
     void stockOutSxk(BasDevp staNo, TaskDto taskDto, Long userId);
+    void stockOutLibraryType(BasDevp staNo, TaskDto taskDto, Long userId);
 
     /**
      * 绌烘澘鍏ュ簱
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index 82a2642..fcf1a3f 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -419,6 +419,12 @@
 
     @Override
     @Transactional
+    public void stockOutLibraryType(BasDevp staNo, TaskDto taskDto, Long userId) {
+
+    }
+
+    @Override
+    @Transactional
     public void stockOut(BasDevp staNo, TaskDto taskDto, Long userId) {
         Date now = new Date();
         List<LocDto> locDtos = taskDto.getLocDtos();
diff --git a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
index 4d6a3d4..ec2cfee 100644
--- a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
+++ b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -154,7 +154,7 @@
 
     }
 
-    @Scheduled(cron = "0/3 * * * * ? ") //绉诲簱浠诲姟涓嬪彂
+//    @Scheduled(cron = "0/3 * * * * ? ") //绉诲簱浠诲姟涓嬪彂
     private void ShuttleMoveTaskSend(){
         List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 11).eq("io_type",11));
         if (wrkMasts.isEmpty()) {
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index 334f01b..dd84c73 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -40,7 +40,7 @@
 
         map.put(3010,"鍫嗗灈鏈哄簱鍗椾笁妤煎嚭鍏ュ簱鍙�");map.put(3012,"鍫嗗灈鏈哄簱鍗椾笁妤煎嚭搴撳彛");
 
-        return map.get(sta);
+        return map.get(sta)==null?sta.toString():map.get(sta);
     }
 
     public static boolean isNorth(Integer sourceStaNo){
@@ -527,34 +527,24 @@
         //婊℃澘姝e父鍏ュ簱
         switch (curRow){
             case 1:
+                necessaryParameters[1] = 4;    //curRow   鏈�娣卞簱浣嶆帓
+                necessaryParameters[2] = sCrnNo;     //crnNo     鍫嗗灈鏈哄彿
+                necessaryParameters[3] = 3;    //nearRow  鏈�娴呭簱浣嶆帓
+                break;
+            case 4:
                 necessaryParameters[1] = 5;    //curRow   鏈�娣卞簱浣嶆帓
                 necessaryParameters[2] = sCrnNo;     //crnNo     鍫嗗灈鏈哄彿
-                necessaryParameters[3] = 4;    //nearRow  鏈�娴呭簱浣嶆帓
+                necessaryParameters[3] = 6;    //nearRow  鏈�娴呭簱浣嶆帓
                 break;
             case 5:
-                necessaryParameters[1] = 6;    //curRow   鏈�娣卞簱浣嶆帓
+                necessaryParameters[1] = 8;    //curRow   鏈�娣卞簱浣嶆帓
                 necessaryParameters[2] = sCrnNo;     //crnNo     鍫嗗灈鏈哄彿
-                necessaryParameters[3] = 7;    //nearRow  鏈�娴呭簱浣嶆帓
+                necessaryParameters[3] = 8;    //nearRow  鏈�娴呭簱浣嶆帓
                 break;
-            case 6:
-                necessaryParameters[1] = 10;    //curRow   鏈�娣卞簱浣嶆帓
-                necessaryParameters[2] = sCrnNo;     //crnNo     鍫嗗灈鏈哄彿
-                necessaryParameters[3] = 9;    //nearRow  鏈�娴呭簱浣嶆帓
-                break;
-            case 10:
-                necessaryParameters[1] = 11;    //curRow   鏈�娣卞簱浣嶆帓
-                necessaryParameters[2] = sCrnNo;     //crnNo     鍫嗗灈鏈哄彿
-                necessaryParameters[3] = 12;    //nearRow  鏈�娴呭簱浣嶆帓
-                break;
-            case 11:
-                necessaryParameters[1] = 14;    //curRow   鏈�娣卞簱浣嶆帓
-                necessaryParameters[2] = sCrnNo;     //crnNo     鍫嗗灈鏈哄彿
-                necessaryParameters[3] = 14;    //nearRow  鏈�娴呭簱浣嶆帓
-                break;
-            case 14:
+            case 8:
                 necessaryParameters[1] = 1;    //curRow   鏈�娣卞簱浣嶆帓
                 necessaryParameters[2] = sCrnNo;     //crnNo     鍫嗗灈鏈哄彿
-                necessaryParameters[3] = 2;    //nearRow  鏈�娴呭簱浣嶆帓
+                necessaryParameters[3] = 1;    //nearRow  鏈�娴呭簱浣嶆帓
                 break;
             default:
                 throw new CoolException("搴撲綅鎺掑彿寮傚父锛氭帓鍙凤細" + curRow);
diff --git a/src/main/java/com/zy/common/model/ExistDto.java b/src/main/java/com/zy/common/model/ExistDto.java
index 6cbbcf8..286d4cb 100644
--- a/src/main/java/com/zy/common/model/ExistDto.java
+++ b/src/main/java/com/zy/common/model/ExistDto.java
@@ -1,8 +1,10 @@
 package com.zy.common.model;
 
 import lombok.Data;
+import lombok.experimental.Accessors;
 
 @Data
+@Accessors(chain = true)
 public class ExistDto {
     private String locNo;
     private String matnr;
diff --git a/src/main/java/com/zy/common/model/LocDto.java b/src/main/java/com/zy/common/model/LocDto.java
index 5399cce..78030ee 100644
--- a/src/main/java/com/zy/common/model/LocDto.java
+++ b/src/main/java/com/zy/common/model/LocDto.java
@@ -2,6 +2,7 @@
 
 import com.core.common.Cools;
 import lombok.Data;
+import lombok.experimental.Accessors;
 
 import java.util.List;
 import java.util.Map;
@@ -10,6 +11,7 @@
  * Created by vincent on 2022/3/28
  */
 @Data
+@Accessors(chain = true)
 public class LocDto {
 
     private String locNo;
@@ -48,7 +50,6 @@
         this.orderNo = orderNo;
         this.anfme = anfme;
     }
-
     public LocDto(String locNo, String matnr, String maktx, String batch, String orderNo, Double anfme) {
         this.locNo = locNo;
         this.matnr = matnr;
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index c6031f3..75f735c 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -127,7 +127,7 @@
             RowLastno rowLastno = rowLastnoService.selectById(whsType);
             RowLastnoType rowLastnoType = rowLastnoTypeService.selectById(rowLastno.getTypeId());
             /**
-             * 搴撳瀷 1: 鏍囧噯鍫嗗灈鏈哄簱  2: 骞冲簱  3: 绌挎鏉�  4: 鍥涘悜杞�  5: AGV  0: 鏈煡
+             * 搴撳瀷 1: 鏍囧噯鍫嗗灈鏈哄簱  2: 骞冲簱  3: 绌挎鏉�  4: 鍥涘悜杞︽贩杞�  5: AGV 6锛氬洓鍚戣溅涓嶆贩杞� 0: 鏈煡
              */
             switch (rowLastnoType.getType()){
                 case 1:
@@ -142,6 +142,8 @@
                     return getLocNoRun4(whsType,staDescId,sourceStaNo,matnr,batch,grade,4,locTypeDto,0,mixture);
                 case 5:
                     return getLocNoRun5(whsType,staDescId,sourceStaNo,matnr,batch,grade,0,locTypeDto,0);
+                case 6:
+                    return getLocNoRun6(whsType,staDescId,sourceStaNo,matnr,batch,grade,4,locTypeDto,0,mixture);
                 default:
                     log.error("绔欑偣={} 鏈煡璇㈠埌瀵瑰簲鐨勮鍒�",sourceStaNo);
                     break;
@@ -472,6 +474,9 @@
     }
 
     public StartupDto getLocNoRun4(Integer whsType, Integer staDescId, Integer sourceStaNo, String matnr, String batch, String grade, Integer moveCrnNo, LocTypeDto locTypeDto, int times,boolean mixture) {
+        if (mixture){
+            throw new CoolException("娣疯浇绂佹鍏ュ簱");
+        }
         if (Cools.isEmpty(matnr)) {  //鐗╂枡鍙�
             matnr = "";
         }
@@ -811,6 +816,212 @@
         return startupDto;
     }
 
+    public StartupDto getLocNoRun6(Integer whsType, Integer staDescId, Integer sourceStaNo, String matnr, String batch, String grade, Integer moveCrnNo, LocTypeDto locTypeDto, int times,boolean mixture) {
+        if (Cools.isEmpty(matnr)) {  //鐗╂枡鍙�
+            matnr = "";
+        }
+        if (Cools.isEmpty(batch)) {  //鎵规
+            batch = "";
+        }
+        if (Cools.isEmpty(grade)) {  //澶囩敤
+            grade = "";
+        }
+
+        // 鍒濆鍖栧弬鏁�
+        int crnNo = 0;      //鍫嗗灈鏈哄彿
+        int nearRow = 0;    //鏈�娴呭簱浣嶆帓
+        int curRow = 0;     //鏈�娣卞簱浣嶆帓
+        int rowCount = 0;   //杞杞
+        LocMast locMast = null;     // 鐩爣搴撲綅
+
+        StartupDto startupDto = new StartupDto();
+        RowLastno rowLastno = rowLastnoService.selectById(whsType);
+        if (Cools.isEmpty(rowLastno)) {
+            throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�===>搴撲綅瑙勫垯鏈煡");
+        }
+        RowLastnoType rowLastnoType = rowLastnoTypeService.selectById(rowLastno.getTypeId());
+        if (Cools.isEmpty(rowLastnoType)) {
+            throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�===銆嬪簱浣嶈鍒欑被鍨嬫湭鐭�");
+        }
+        int sRow = rowLastno.getsRow();
+        int eRow = rowLastno.geteRow();
+        int crnNumber = rowLastno.getCrnQty();
+
+        // ===============>>>> 寮�濮嬫墽琛�
+        curRow = rowLastno.getCurrentRow();
+
+        if (!Cools.isEmpty(moveCrnNo) && moveCrnNo!=0){
+            crnNumber = moveCrnNo;
+        }
+
+        //姝ょ▼搴忕敤浜庝紭鍖栧爢鍨涙満寮傚父鏃剁殑杩愯鏃堕棿
+        for (int i = times; i < crnNumber*2; i++) {
+            int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber,whsType);
+            rowCount =  locNecessaryParameters[0];
+            curRow = locNecessaryParameters[1];
+            crnNo = locNecessaryParameters[2];
+            nearRow = locNecessaryParameters[3];
+            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+                    .eq("crn_no", crnNo).eq("loc_sts", "O").eq("whs_type",rowLastnoType.getType().longValue()));
+            if (locMasts.size()<=5){
+                times++;
+                continue;
+            }
+            break;
+
+        }
+        if (crnNo == 0) {
+            throw new CoolException("鏃犲彲鐢ㄥ簱浣�");
+        }
+
+
+        // 鐩镐技宸ヤ綔妗f --- 鍚屽ぉ鍚岃鏍肩墿鏂�
+        if (!Cools.isEmpty(matnr) && (staDescId == 1 || staDescId == 11 || staDescId == 111) && !mixture ) {
+            //鏌ヨ鐩镐技宸ヤ綔妗f
+            List<WrkMast> wrkMasts = wrkMastService.selectWrkMastWrkDetlMatnrBatch(staDescId, matnr, batch,grade, crnNo);
+            int nearbay = 0;    //鐩镐技宸ヤ綔妗f 鐩爣搴撲綅鍒�
+            int nearlev = 0;    //鐩镐技宸ヤ綔妗f 鐩爣搴撲綅灞�
+            for (WrkMast wrkMast:wrkMasts){
+                LocMast locMastWrk = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", wrkMast.getLocNo()));
+                List<LocMast> locMasts = new ArrayList<>();
+                if (locMastWrk.getBay1() >=5 && locMastWrk.getBay1()<=6){
+                    locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+                            .eq("gro1", locMastWrk.getGro1())
+                            .eq("crn_no", 7)
+                            .eq("loc_type1",locTypeDto.getLocType1())
+                            .orderBy("bay1", true));
+                }else {
+                    locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+                            .eq("gro1", locMastWrk.getGro1())
+                            .eq("crn_no", 7)
+                            .eq("loc_type1",locTypeDto.getLocType1())
+                            .orderBy("bay1", false));
+                }
+                if (Cools.isEmpty(locMasts)) {
+                    continue;
+                }
+                for (LocMast locMastGro1 : locMasts) {
+                    if (locMastGro1.getLocSts().equals("P") || locMastGro1.getLocSts().equals("Q") || locMastGro1.getLocSts().equals("R") || locMastGro1.getLocSts().equals("X")) {
+                        break;
+                    }
+                    if (locMastGro1.getLocSts().equals("O")){
+                        locMast = locMastGro1;
+                        break;
+                    }
+                }
+
+
+            }
+
+        }
+
+        Wrapper<StaDesc> wrapper = null;
+        StaDesc staDesc = null;
+        BasDevp staNo = null;
+
+        if (Utils.BooleanWhsTypeSta(rowLastno, staDescId)) {
+            // 鑾峰彇鐩爣绔�
+            wrapper = new EntityWrapper<StaDesc>()
+                    .eq("type_no", staDescId)
+                    .eq("stn_no", sourceStaNo)
+                    .eq("crn_no", crnNo);
+            staDesc = staDescService.selectOne(wrapper);
+            if (Cools.isEmpty(staDesc)) {
+                log.error("鍏ュ簱璺緞涓嶅瓨鍦�:type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo);
+                crnNo = 0;
+            }else {
+                staNo = basDevpService.selectById(staDesc.getCrnStn());
+                if (!staNo.getAutoing().equals("Y")) {
+                    log.error("鐩爣绔�"+staDesc.getCrnStn()+"涓嶅彲鐢�");
+                    crnNo = 0;
+                }
+                startupDto.setStaNo(staNo.getDevNo());
+            }
+        }
+
+        // 鏇存柊搴撲綅鎺掑彿
+        if (Utils.BooleanWhsTypeSta(rowLastno, staDescId) && Cools.isEmpty(locMast)) {
+            rowLastno.setCurrentRow(curRow);
+            rowLastnoService.updateById(rowLastno);
+        }
+
+        // 寮�濮嬫煡鎵惧簱浣� ==============================>>
+
+        // 1.鎸夎鍒欐煡鎵惧簱浣�
+        if (Cools.isEmpty(locMast) && crnNo != 0) {
+            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+                    .eq("bay1", nearRow)
+                    .in("loc_sts", "O").eq("whs_type",rowLastnoType.getType().longValue())
+                    .eq("crn_no",7)
+                    .eq("loc_type1",locTypeDto.getLocType1())
+                    .orderBy("lev1",true).orderBy("row1",false));//鏈�娴呭簱浣�
+
+            for (LocMast locMast1 : locMasts) {
+                if (locMast != null){
+                    break;
+                }
+                if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
+                    continue;
+                }
+                if (Utils.BooleanWhsTypeStaIoType(rowLastno)){
+                    List<LocMast> locMasts1 = null;
+                    if (nearRow == 6){
+                        locMasts1 = locMastService.selectList(new EntityWrapper<LocMast>()
+                                .eq("gro1", locMast1.getGro1())
+                                .eq("crn_no",7)
+                                .eq("loc_type1",locTypeDto.getLocType1())
+                                .orderBy("bay1",true));
+                    }else {
+                        locMasts1 = locMastService.selectList(new EntityWrapper<LocMast>()
+                                .eq("gro1", locMast1.getGro1())
+                                .eq("crn_no",7)
+                                .eq("loc_type1",locTypeDto.getLocType1())
+                                .orderBy("bay1",false));
+                    }
+                    if (Cools.isEmpty(locMasts1)) {
+                        continue;
+                    }
+                    for (LocMast locMastGro1 : locMasts1) {
+                        if (locMastGro1.getLocSts().equals("F")){
+                            LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_No", locMastGro1.getLocNo()));
+                            if (!locDetl.getMatnr().equals(matnr) || !locDetl.getBatch().equals(batch)){
+                                break;
+                            }
+                        }
+                        if (locMastGro1.getLocSts().equals("P") || locMastGro1.getLocSts().equals("Q") || locMastGro1.getLocSts().equals("R")) {
+                            break;
+                        }
+                        if (locMastGro1.getLocSts().equals("O")){
+                            locMast = locMastGro1;
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+
+        // 閫掑綊鏌ヨ
+        if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("O")) {
+            // 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
+            if (times < rowCount*2) {
+                times = times + 1;
+                return getLocNoRun6(whsType, staDescId, sourceStaNo, matnr, batch, grade,moveCrnNo, locTypeDto, times,mixture);
+            }
+            log.error("绯荤粺娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", JSON.toJSONString(locTypeDto), times);
+            throw new CoolException("娌℃湁绌哄簱浣�");
+        }
+        String locNo = locMast.getLocNo();
+
+        // 鐢熸垚宸ヤ綔鍙�
+        int workNo = getWorkNo(0);
+        // 杩斿洖dto
+        startupDto.setWorkNo(workNo);
+        startupDto.setCrnNo(crnNo);
+        startupDto.setSourceStaNo(sourceStaNo);
+        startupDto.setLocNo(locNo);
+        return startupDto;
+    }
+
     public static String zerofill(String msg, Integer count) {
         if (msg.length() == count) {
             return msg;
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index e29eeec..ed42bb7 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -10,7 +10,7 @@
     enabled: false
   datasource:
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
-    url: jdbc:sqlserver://127.0.0.1:1433;databasename=jxgtasrs
+    url: jdbc:sqlserver://127.0.0.1:1433;databasename=fyxcasrs
     username: sa
     password: sa@123
   mvc:
@@ -39,7 +39,7 @@
 
 #License鐩稿叧閰嶇疆
 license:
-  subject: jxgtwms
+  subject: fyxcwms
   publicAlias: publicCert
   storePass: public_zhongyang_123456789
   licensePath: license.lic
diff --git a/src/main/resources/license.lic b/src/main/resources/license.lic
index e881460..4940185 100644
--- a/src/main/resources/license.lic
+++ b/src/main/resources/license.lic
Binary files differ
diff --git a/src/main/webapp/static/js/common.js b/src/main/webapp/static/js/common.js
index d9cc71f..df11990 100644
--- a/src/main/webapp/static/js/common.js
+++ b/src/main/webapp/static/js/common.js
@@ -1,4 +1,4 @@
-var baseUrl = "/gtSxkWms";
+var baseUrl = "/fyxcwms";
 
 // 璇︽儏绐楀彛-楂樺害
 var detailHeight = '80%';
diff --git a/src/main/webapp/static/js/order/out.js b/src/main/webapp/static/js/order/out.js
index 5365375..2338842 100644
--- a/src/main/webapp/static/js/order/out.js
+++ b/src/main/webapp/static/js/order/out.js
@@ -164,7 +164,7 @@
     function pakoutPreview(ids,amount) {
         let loadIndex = layer.load(2);
         $.ajax({
-            url: baseUrl + "/out/pakout/preview/auth/sxk",
+            url: baseUrl + "/out/pakout/OrderOutGetLoc/auth",
             headers: {'token': localStorage.getItem('token')},
             contentType: 'application/json;charset=UTF-8',
             data: JSON.stringify(ids),
@@ -324,7 +324,7 @@
         json.ids = ids
         json.amount = amount
         $.ajax({
-            url: baseUrl + "/out/pakout/previewCustomQuantity/auth/sxk",
+            url: baseUrl + "/out/pakout/OrderOutGetLoc.number/auth",
             headers: {'token': localStorage.getItem('token')},
             contentType: 'application/json;charset=UTF-8',
             data: JSON.stringify(json),
@@ -479,7 +479,7 @@
         // let loadIndex = layer.load(2);
         notice.msg('姝e湪鐢熸垚鍑哄簱浠诲姟......', {icon: 4});
         $.ajax({
-            url: baseUrl + "/out/pakout/auth/sxk",
+            url: baseUrl + "/out/pakout/auth",
             headers: {'token': localStorage.getItem('token')},
             contentType: 'application/json;charset=UTF-8',
             data: JSON.stringify(tableCache),

--
Gitblit v1.9.1