From 1995bf7ac28f2648bd157692bf2f531ea1f6b6c9 Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期三, 14 一月 2026 08:02:17 +0800
Subject: [PATCH] #地图初始化

---
 src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java         |   11 +
 src/main/webapp/views/report/viewLocMap.html                    |   29 ++++-
 src/main/webapp/static/js/report/locMap.js                      |  120 ++++++++++++++---------
 src/main/java/com/zy/asrs/entity/ViewLocMapDto.java             |    8 +
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java     |    2 
 src/main/resources/application.yml                              |   10 +
 src/main/java/com/zy/asrs/controller/ReportQueryController.java |   94 +++++++++++++++---
 7 files changed, 192 insertions(+), 82 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/ReportQueryController.java b/src/main/java/com/zy/asrs/controller/ReportQueryController.java
index dc4f4ee..249a359 100644
--- a/src/main/java/com/zy/asrs/controller/ReportQueryController.java
+++ b/src/main/java/com/zy/asrs/controller/ReportQueryController.java
@@ -19,6 +19,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 鏃ュ織缁熻鎺у埗鍣ㄥ眰
@@ -93,28 +94,83 @@
 	public R queryViewLocMapRows(){
 		return R.ok().add(reportQueryMapper.getViewLocRowTotal());
 	}
+	@RequestMapping("/viewLocMapList/layers.action")
+	public R queryViewLocMapLevs(){
+		return R.ok().add(reportQueryMapper.getViewLocLevTotal());
+	}
 
 	@RequestMapping("/viewLocMapList.action")
-	public R queryViewLocMapListByPages(@RequestParam(defaultValue = "0")Integer row){
-		// 鑾峰彇鎺掔骇鏁版嵁
-		// 琛ㄦ牸鏍囬锛氬垪 ===>> 鍗囧簭
-		List<String> bays = reportQueryMapper.getViewLocBayCount(row);
-		// 锛佽〃鏍肩涓�鍒楁斁灞傜骇鏁�
-		bays.add(0, "");
-		// 琛ㄦ牸琛岋細灞� ====>> 鍊掑簭
-		List<String> levs = reportQueryMapper.getViewLocLevCount(row);
-		List<Map<String, Object>> body = new ArrayList<>();
-		for (String lev : levs){
-			// 鑾峰彇灞傜骇鏁版嵁
-			List<ViewLocMapDto> dtos = reportQueryMapper.getViewLocBays(row, Integer.parseInt(lev));
-			// 锛佽〃鏍肩涓�鍒楁斁灞傜骇鏁�
-			dtos.add(0, new ViewLocMapDto(null ,null, lev));
-			Map<String, Object> map = new HashMap<>();
-			map.put("loc", dtos);
-			body.add(map);
-		}
+	public R queryViewLocMapListByPages(
+			@RequestParam(required = false, defaultValue = "0") Integer row,
+			@RequestParam(required = false) Integer layer) {
+
 		Map<String, Object> result = new HashMap<>();
-		result.put("title", bays);
+		List<String> title = new ArrayList<>();
+		List<Map<String, Object>> body = new ArrayList<>();
+
+		if (layer != null && layer > 0) {
+			// 鈹�鈹� 鎸夊眰鏄剧ず鎵�鏈夋帓 脳 鎵�鏈夊垪 鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+
+			// 1. 琛ㄥご锛氭墍鏈� bay
+			List<String> allBays = reportQueryMapper.getAllBays(); // 鎴栫敓鎴� 1 鍒� maxBay
+			title.add(""); // 绗竴鍒楁斁鎺掑彿
+			title.addAll(allBays);
+
+			// 2. 鑾峰彇璇ュ眰鎵�鏈夊簱浣�
+			List<ViewLocMapDto> locs = reportQueryMapper.getLocMapByLayer(layer);
+
+			// 3. 鎸� row 鍒嗙粍锛堟帹鑽愮敤 Map 鎴� Stream 鍒嗙粍锛�
+			Map<Integer, List<ViewLocMapDto>> rowMap = locs.stream()
+					.collect(Collectors.groupingBy(ViewLocMapDto::getRow1));
+
+			// 4. 閬嶅巻鎵�鏈夋帓锛岀敓鎴愭瘡涓�琛�
+			List<Integer> allRows = reportQueryMapper.getAllRows();
+			for (Integer currentRow : allRows) {
+				List<ViewLocMapDto> rowData = rowMap.getOrDefault(currentRow, new ArrayList<>());
+
+				// 鎸� bay 鎺掑簭骞惰ˉ榻愮┖浣�
+				Map<Integer, ViewLocMapDto> bayMap = rowData.stream()
+						.collect(Collectors.toMap(ViewLocMapDto::getBay1, d -> d));
+
+				List<ViewLocMapDto> line = new ArrayList<>();
+				// 绗竴鍒楋細鎺掑彿
+				line.add(new ViewLocMapDto(null, null, String.valueOf(currentRow)));
+
+				// 濉厖鎵�鏈� bay
+				for (String bayStr : allBays) {
+					int bay = Integer.parseInt(bayStr);
+					ViewLocMapDto dto = bayMap.get(bay);
+					if (dto != null) {
+						line.add(dto);
+					} else {
+						// 鏃犲簱浣� 鈫� 琛ョ┖
+						line.add(new ViewLocMapDto(null, 0, null)); // 鎴栬嚜瀹氫箟绌虹姸鎬�
+					}
+				}
+
+				Map<String, Object> map = new HashMap<>();
+				map.put("loc", line);
+				body.add(map);
+			}
+		}
+		else {
+			// 鈹�鈹� 鎸夋帓妯″紡锛堝師鏈夐�昏緫锛� 鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+			title = reportQueryMapper.getViewLocBayCount(row);
+			title.add(0, "");
+
+			List<String> levs = reportQueryMapper.getViewLocLevCount(row);
+			body = new ArrayList<>();
+
+			for (String lev : levs) {
+				List<ViewLocMapDto> dtos = reportQueryMapper.getViewLocBays(row, Integer.parseInt(lev));
+				dtos.add(0, new ViewLocMapDto(null, null, lev));
+				Map<String, Object> map = new HashMap<>();
+				map.put("loc", dtos);
+				body.add(map);
+			}
+		}
+
+		result.put("title", title);
 		result.put("body", body);
 		return R.ok(result);
 	}
diff --git a/src/main/java/com/zy/asrs/entity/ViewLocMapDto.java b/src/main/java/com/zy/asrs/entity/ViewLocMapDto.java
index 6142f8c..31adb7e 100644
--- a/src/main/java/com/zy/asrs/entity/ViewLocMapDto.java
+++ b/src/main/java/com/zy/asrs/entity/ViewLocMapDto.java
@@ -15,6 +15,8 @@
     private String bgc = "#fff";
     // 瀛椾綋棰滆壊
     private String color = "#666";
+    private Integer row1;
+    private Integer lev1;
 
     public ViewLocMapDto() {
     }
@@ -36,6 +38,12 @@
     public Integer getBay1() {
         return bay1;
     }
+    public Integer getRow1() {
+        return row1;
+    }
+    public Integer getLev1() {
+        return lev1;
+    }
 
     public void setBay1(Integer bay1) {
         this.bay1 = bay1;
diff --git a/src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java b/src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java
index bc7ecf5..56fdfbf 100644
--- a/src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java
@@ -27,6 +27,9 @@
 //	// 搴撲綅Map
 	@Select("select distinct row1 from asr_loc_mast order by row1 asc")
 	List<Integer> getViewLocRowTotal();
+	//	// 搴撲綅Map
+	@Select("select distinct lev1 from asr_loc_mast order by lev1 asc")
+	List<Integer> getViewLocLevTotal();
 
 	@Select("select distinct lev1 from asr_loc_mast where row1=#{row1} order by lev1 desc")
 	public List<String> getViewLocLevCount(@Param("row1") int row1);
@@ -37,11 +40,15 @@
 	// 搴撲綅Map
 	@Select("select distinct bay1 from asr_loc_mast where row1=#{row1} order by bay1")
 	public List<String> getViewLocBayCount(@Param("row1") int row1);
-
 	@Select("select lev1,loc_sts as locSts from asr_loc_mast where row1=#{row1} and bay1=#{bay1} order by bay1")
 	public List<ViewLocMapDto> getViewLocLevs(@Param("row1") int row1, @Param("bay1") int bay1);
+	@Select("SELECT DISTINCT row1 FROM asr_loc_mast ORDER BY row1 ASC")
+	List<Integer> getAllRows();
+	@Select("SELECT DISTINCT bay1 FROM asr_loc_mast ORDER BY bay1 ASC")
+	List<String> getAllBays();
 
-
+	@Select("SELECT row1,lev1,bay1,loc_no as locNo,loc_sts as locSts FROM asr_loc_mast WHERE lev1 = #{layer} ORDER BY row1 ASC, bay1 ASC")
+	List<ViewLocMapDto> getLocMapByLayer(@Param("layer") Integer layer);
 	//鍒嗛〉鏌ヨ绔欑偣鍏ュ嚭搴撴鏁扮粺璁�
 	public List<ViewInOutBean> queryViewInOutList(ViewInOutBean viewInOut);
 	public int getViewInOutCount(ViewInOutBean viewInOut);
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 d1c5351..08ba104 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -255,7 +255,7 @@
 
                 // 璁$畻浼樺厛绾�
                 dto.setPriority(priority);
-                priority--; // 涓嬩竴涓换鍔′紭鍏堢骇閫掑
+                priority--;
 
                 // 鑾峰彇搴撲綅
                 LocMast locMast = locMastService.selectById(dto.getLocNo());
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 56e7370..c5963c1 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -55,10 +55,12 @@
   #groupCount: 4
   # 鐢辨祬鍏ユ繁
   locGroupAscOrder: [
-    {rowList: [6,5,4,3,2,1],minBay: 33,maxBay: 49},
-    {rowList: [8],minBay: 33,maxBay: 49},
-#    {rowList: [7],minBay: 33,maxBay: 49},
-#    {rowList: [8,9,10,11,12,13],minBay: 33,maxBay: 49},
+    {rowList: [1],minBay: 1,maxBay: 75},
+    {rowList: [3,4,5,6],minBay: 1,maxBay: 75},
+    {rowList: [10,9,8,7],minBay: 1,maxBay: 75},
+    {rowList: [12,13,14,15],minBay: 1,maxBay: 75},
+    {rowList: [18,17,16],minBay: 1,maxBay: 75},
+    {rowList: [20],minBay: 1,maxBay: 75},
   ]
   #鏄惁寮�鍚痺ms涓嬪彂浠诲姟缁檞cs
   workIssued-fig : false
diff --git a/src/main/webapp/static/js/report/locMap.js b/src/main/webapp/static/js/report/locMap.js
index 268a7f3..205cd7d 100644
--- a/src/main/webapp/static/js/report/locMap.js
+++ b/src/main/webapp/static/js/report/locMap.js
@@ -1,14 +1,17 @@
-layui.use(['table','laydate', 'form'], function(){
+layui.use(['table', 'laydate', 'form'], function(){
     var $ = layui.jquery;
     var layer = layui.layer;
     var form = layui.form;
 
-    getLocMapRows();
-    getLocTable(1);
+    // 鍒濆鍔犺浇
+    loadRowsOptions();       // 鍔犺浇銆屾帓銆嶉�夐」锛堝缁堥渶瑕侊級
+    loadLayersOptions();     // 鍔犺浇銆屽眰銆嶉�夐」锛堟彁鍓嶅噯澶囷級
+    getLocTable('byRow', 1); // 榛樿鎸夋帓 + 绗�1鎺�
 
-    function getLocMapRows() {
+    // 鍔犺浇鎵�鏈夊彲鐢ㄦ帓
+    function loadRowsOptions() {
         $.ajax({
-            url: baseUrl+"/report/viewLocMapList/rows.action",
+            url: baseUrl + "/report/viewLocMapList/rows.action",
             headers: {'token': localStorage.getItem('token')},
             method: 'POST',
             async: false,
@@ -16,70 +19,91 @@
                 if (res.code === 200) {
                     var tpl = $("#locMastRowTemplate").html();
                     var template = Handlebars.compile(tpl);
-                    var html = template(res);
-                    $('#rowSelect').append(html);
+                    $('#rowSelect').append(template(res));
                     form.render('select');
                 } else if (res.code === 403) {
-                    top.location.href = baseUrl+"/";
-                } else {
-                    layer.msg(res.msg)
+                    top.location.href = baseUrl + "/";
                 }
             }
         });
     }
 
-    function getLocTable(row){
+    // 鍔犺浇鎵�鏈夊彲鐢ㄥ眰锛堥渶瑕佸悗绔敮鎸佹柊鎺ュ彛锛�
+    function loadLayersOptions() {
         $.ajax({
-            url: baseUrl+"/report/viewLocMapList.action",
+            url: baseUrl + "/report/viewLocMapList/layers.action",  // 鈫� 闇�瑕佹柊澧炴帴鍙�
             headers: {'token': localStorage.getItem('token')},
-            data: {row: row},
+            method: 'POST',
+            async: false,
+            success: function (res) {
+                if (res.code === 200) {
+                    var tpl = $("#locMastRowTemplate").html(); // 澶嶇敤妯℃澘
+                    var template = Handlebars.compile(tpl);
+                    $('#layerSelect').append(template(res));
+                    form.render('select');
+                }
+            }
+        });
+    }
+
+    // 鏍稿績锛氭牴鎹ā寮忓姞杞藉簱浣嶈〃
+    function getLocTable(mode, value) {
+        var url = baseUrl + "/report/viewLocMapList.action";
+        var data = {};
+
+        if (mode === 'byRow') {
+            data.row = value;
+        } else if (mode === 'byLayer') {
+            data.layer = value;
+        }
+        $.ajax({
+            url: url,
+            headers: {'token': localStorage.getItem('token')},
+            data: data,
             method: 'POST',
             success: function (res) {
                 if (res.code === 200) {
                     var tpl = $("#locMapTemplate").html();
                     var template = Handlebars.compile(tpl);
-                    var html = template(res.data);
-                    $('#locMap').html(html);
+                    $('#locMap').html(template(res.data));
                 } else if (res.code === 403) {
-                    top.location.href = baseUrl+"/";
+                    top.location.href = baseUrl + "/";
                 } else {
-                    layer.msg(res.msg)
+                    layer.msg(res.msg || '鍔犺浇澶辫触');
                 }
             }
         });
     }
 
-    form.on('select(row)', function (data) {
-        getLocTable(data.value);
+    // 鐩戝惉 鏄剧ず妯″紡 鍒囨崲
+    form.on('select(viewMode)', function (data) {
+        var mode = data.value;
+
+        if (mode === 'byRow') {
+            $('#rowSelectBox').show();
+            $('#layerSelectBox').hide();
+            // 璇诲彇褰撳墠閫変腑鐨勬帓
+            var currentRow = $('#rowSelect').val() || 1;
+            getLocTable('byRow', currentRow);
+        } else if (mode === 'byLayer') {
+            $('#rowSelectBox').hide();
+            $('#layerSelectBox').show();
+            var currentLayer = $('#layerSelect').val() || 1;
+            getLocTable('byLayer', currentLayer);
+        }
     });
-});
 
-var locNo = '';
-function locDetl(el) {
-    var value = $(el).attr('title');
-    var html = $(el).html();
-    if (value===null
-        ||value === undefined
-        || value.trim()===''
-        || html.trim()==='S'
-        || html.trim()==='D'
-        || html.trim()==='O'
-        || html.trim()==='Z'
+    // 鐩戝惉 鎺� 鍙樺寲
+    form.on('select(row)', function (data) {
+        if ($('#viewMode').val() === 'byRow') {
+            getLocTable('byRow', data.value);
+        }
+    });
 
-    ){
-
-    } else {
-        layer.open({
-            type: 2,
-            title: '搴撲綅鐗╂枡',
-            maxmin: true,
-            area: [top.detailWidth, top.detailHeight],
-            shadeClose: true,
-            content: 'locDetl.html',
-            success: function(layero, index){
-                locNo = value;
-            }
-        });
-    }
-}
-
+    // 鐩戝惉 灞� 鍙樺寲
+    form.on('select(layer)', function (data) {
+        if ($('#viewMode').val() === 'byLayer') {
+            getLocTable('byLayer', data.value);
+        }
+    });
+});
\ No newline at end of file
diff --git a/src/main/webapp/views/report/viewLocMap.html b/src/main/webapp/views/report/viewLocMap.html
index 46c23fd..34bcfcb 100644
--- a/src/main/webapp/views/report/viewLocMap.html
+++ b/src/main/webapp/views/report/viewLocMap.html
@@ -56,16 +56,29 @@
 <!-- 鎼滅储鏍� -->
 <div id="search-box" class="layui-form layui-card-header">
     <div class="layui-inline" style="margin-left: 10px">
+        <label class="layui-form-label" style="width:80px">鏄剧ず妯″紡</label>
+        <div class="layui-input-inline" style="width:120px;">
+            <select id="viewMode" name="viewMode" lay-filter="viewMode">
+                <option value="byRow">鎸夋帓鏄剧ず</option>
+                <option value="byLayer">鎸夊眰鏄剧ず</option>
+            </select>
+        </div>
+    </div>
+
+    <!-- 鎸夋帓鏃剁殑涓嬫媺妗嗭紙榛樿鏄剧ず锛� -->
+    <div class="layui-inline" id="rowSelectBox" style="margin-left: 20px;">
         <div class="layui-input-inline">
             <select id="rowSelect" name="row" lay-filter="row">
-<!--                <option value="1">绗�1鎺�</option>-->
-<!--                <option value="2">绗�2鎺�</option>-->
-<!--                <option value="3">绗�3鎺�</option>-->
-<!--                <option value="4">绗�4鎺�</option>-->
-<!--                <option value="5">绗�5鎺�</option>-->
-<!--                <option value="6">绗�6鎺�</option>-->
-<!--                <option value="7">绗�7鎺�</option>-->
-<!--                <option value="8">绗�8鎺�</option>-->
+                <!-- 閫夐」鐢眏s鍔ㄦ�佺敓鎴� -->
+            </select>
+        </div>
+    </div>
+
+    <!-- 鎸夊眰鏃剁殑涓嬫媺妗嗭紙鍒濆闅愯棌锛� -->
+    <div class="layui-inline" id="layerSelectBox" style="margin-left: 20px; display:none;">
+        <div class="layui-input-inline">
+            <select id="layerSelect" name="layer" lay-filter="layer">
+                <!-- 閫夐」鐢眏s鍔ㄦ�佺敓鎴� -->
             </select>
         </div>
     </div>

--
Gitblit v1.9.1