From 97d989a1f72e33c4640e2e13cb5cfe3a3a1130e9 Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期六, 10 一月 2026 11:19:59 +0800
Subject: [PATCH] 锁定周边库位信息 下发穿线任务

---
 src/main/java/com/zy/api/controller/params/PageRequestParams.java  |    3 
 src/main/java/com/zy/api/service/HmesApiService.java               |   11 ++
 src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java      |  112 ++++++++++++++++++++++++++++
 src/main/java/com/zy/api/controller/params/ReceviceTaskParams.java |   18 ++++
 src/main/java/com/zy/api/controller/HmesApiController.java         |   53 +++++++++++++
 5 files changed, 194 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/zy/api/controller/HmesApiController.java b/src/main/java/com/zy/api/controller/HmesApiController.java
index f79a237..d81a743 100644
--- a/src/main/java/com/zy/api/controller/HmesApiController.java
+++ b/src/main/java/com/zy/api/controller/HmesApiController.java
@@ -1,14 +1,67 @@
 package com.zy.api.controller;
 
 
+import com.core.annotations.ManagerAuth;
+import com.core.common.R;
+import com.zy.api.controller.params.ReceviceTaskParams;
+import com.zy.api.service.HmesApiService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Objects;
 
 @Api(value = "HMES瀵规帴")
 @RestController
 @RequestMapping("/api")
 public class HmesApiController {
 
+    @Autowired
+    private HmesApiService hmesApiService;
+
+    /**
+     * 浜哄伐绌跨嚎
+     * @author Ryan
+     * @date 2026/1/10 10:40
+     * @return com.core.common.R
+     */
+    @ManagerAuth
+    @ApiOperation("涓嬪彂鐢熶骇浠诲姟")
+    @PostMapping("/work/tasks")
+    public R menauWork(ReceviceTaskParams params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        if (Objects.isNull(params.getDeviceNo())) {
+            return R.error("鏈哄彴鍙蜂笉鑳戒负绌猴紒锛�");
+        }
+
+        return hmesApiService.pubWorkTask(params);
+    }
+
+    /**
+     * 绌跨嚎瀹屾垚锛岄噴鏀炬満鍙板懆杈瑰簱浣�
+     * @author Ryan
+     * @date 2026/1/10 11:06
+     * @param params
+     * @return com.core.common.R
+     */
+    @ManagerAuth
+    @ApiOperation("涓嬪彂鐢熶骇浠诲姟")
+    @PostMapping("/work/release/lock")
+    public R releaseLock(ReceviceTaskParams params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        if (Objects.isNull(params.getDeviceNo())) {
+            return R.error("鏈哄彴鍙蜂笉鑳戒负绌猴紒锛�");
+        }
+
+        return hmesApiService.releaseLock(params);
+    }
+
 
 }
diff --git a/src/main/java/com/zy/api/controller/params/PageRequestParams.java b/src/main/java/com/zy/api/controller/params/PageRequestParams.java
index 6723f32..07ca0b3 100644
--- a/src/main/java/com/zy/api/controller/params/PageRequestParams.java
+++ b/src/main/java/com/zy/api/controller/params/PageRequestParams.java
@@ -13,7 +13,4 @@
 
     private Integer limit = 50;
 
-    private String pro_komcode;
-
-    private String pro_id;
 }
diff --git a/src/main/java/com/zy/api/controller/params/ReceviceTaskParams.java b/src/main/java/com/zy/api/controller/params/ReceviceTaskParams.java
new file mode 100644
index 0000000..96a1ad0
--- /dev/null
+++ b/src/main/java/com/zy/api/controller/params/ReceviceTaskParams.java
@@ -0,0 +1,18 @@
+package com.zy.api.controller.params;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "ReceviceTaskParams", description = "绌跨嚎澧欏弬鏁�")
+public class ReceviceTaskParams implements Serializable {
+
+    @ApiModelProperty("鏈哄彴鍙�")
+    private String deviceNo;
+
+}
diff --git a/src/main/java/com/zy/api/service/HmesApiService.java b/src/main/java/com/zy/api/service/HmesApiService.java
new file mode 100644
index 0000000..d8b247c
--- /dev/null
+++ b/src/main/java/com/zy/api/service/HmesApiService.java
@@ -0,0 +1,11 @@
+package com.zy.api.service;
+
+import com.core.common.R;
+import com.zy.api.controller.params.ReceviceTaskParams;
+
+public interface HmesApiService {
+
+    R pubWorkTask(ReceviceTaskParams params);
+
+    R releaseLock(ReceviceTaskParams params);
+}
diff --git a/src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java b/src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java
new file mode 100644
index 0000000..f86c4cb
--- /dev/null
+++ b/src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java
@@ -0,0 +1,112 @@
+package com.zy.api.service.impl;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.R;
+import com.core.exception.CoolException;
+import com.zy.api.controller.params.ReceviceTaskParams;
+import com.zy.api.service.HmesApiService;
+import com.zy.asrs.entity.BasDevice;
+import com.zy.asrs.entity.LocAroundBind;
+import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.enums.LocStsType;
+import com.zy.asrs.service.BasDeviceService;
+import com.zy.asrs.service.LocAroundBindService;
+import com.zy.asrs.service.LocMastService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+@Service
+public class HmesApiServiceImpl implements HmesApiService {
+
+    @Autowired
+    private BasDeviceService basDeviceService;
+
+    @Autowired
+    private LocAroundBindService locAroundBindService;
+
+    @Autowired
+    private LocMastService locMastService;
+    /**
+     * 鎺ユ敹MES绌跨嚎浠诲姟
+     * @author Ryan
+     * @date 2026/1/10 10:54
+     * @param params
+     * @return com.core.common.R
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R pubWorkTask(ReceviceTaskParams params) {
+        if (Objects.isNull(params) || Objects.isNull(params.getDeviceNo())) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        BasDevice basDevice = basDeviceService.selectOne(new EntityWrapper<BasDevice>()
+                .eq("status", 1)
+                .eq("dev_no", params.getDeviceNo()));
+        if (Objects.isNull(basDevice)) {
+            throw new CoolException("鏈哄彴淇℃伅涓嶅瓨鍦ㄦ垨宸茬鐢紒锛�");
+        }
+        List<LocAroundBind> binds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>().eq("dev_no", basDevice.getDevNo()));
+        if (Objects.isNull(binds) || binds.isEmpty()) {
+            throw new CoolException("鏈哄彴鏈粦瀹氬伐浣滅珯鍙帮紒锛�");
+        }
+        Set<String> locs = binds.stream().map(LocAroundBind::getBLocNo).collect(Collectors.toSet());
+
+        LocMast locMasts = locMastService.selectOne(new EntityWrapper<LocMast>()
+                .in("loc_no", locs)
+                .eq("loc_sts", LocStsType.LOC_STS_TYPE_F.type)
+                .orderAsc(Arrays.asList("loc_no"))
+                .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
+
+        if (Objects.isNull(locMasts)) {
+            throw new CoolException("鏈煡鍒板彲宸ヤ綔绾胯酱锛侊紒");
+        }
+
+        //todo 閿佸簱浣嶉渶WCS閿佸畾锛堢浉鍏冲簱浣嶏紝涓嶅彲鎵ц浠诲姟鎿嶄綔锛屼笉鑳藉彧鍦╓MS閿佸畾锛�
+        List<LocMast> locMs = locMastService.selectList(new EntityWrapper<LocMast>()
+                .in("loc_no", locs)
+                .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type));
+        locMs.forEach(loc -> {
+            loc.setLocSts(LocStsType.LOC_STS_TYPE_X.type);
+            if (!locMastService.updateById(loc)) {
+                throw new CoolException("宸ヤ綔鍙板懆杈瑰簱浣嶇鐢ㄥけ璐ワ紝涓嶅彲鎵ц绌跨嚎鎿嶄綔锛侊紒");
+            }
+        });
+
+        return R.ok("鍙墽琛岀┛绾垮姩浣�!!");
+    }
+
+    /**
+     * 绌跨嚎瀹屾垚锛岄噴鏀炬満鍙板懆杈瑰簱浣�
+     * @author Ryan
+     * @date 2026/1/10 11:07
+     * @param params
+     * @return com.core.common.R
+     */
+    @Override
+    public R releaseLock(ReceviceTaskParams params) {
+        if (Objects.isNull(params) || Objects.isNull(params.getDeviceNo())) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        BasDevice basDevice = basDeviceService.selectOne(new EntityWrapper<BasDevice>()
+                .eq("status", 1)
+                .eq("dev_no", params.getDeviceNo()));
+        if (Objects.isNull(basDevice)) {
+            throw new CoolException("鏈哄彴淇℃伅涓嶅瓨鍦ㄦ垨宸茬鐢紒锛�");
+        }
+        List<LocAroundBind> binds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>().eq("dev_no", basDevice.getDevNo()));
+        if (Objects.isNull(binds) || binds.isEmpty()) {
+            throw new CoolException("鏈哄彴鏈粦瀹氬伐浣滅珯鍙帮紒锛�");
+        }
+        Set<String> locs = binds.stream().map(LocAroundBind::getBLocNo).collect(Collectors.toSet());
+
+
+        return null;
+    }
+}

--
Gitblit v1.9.1