From dcd2e9ad65580de56147956e718059f50f1691d2 Mon Sep 17 00:00:00 2001
From: skyouc <958836976@qq.com>
Date: 星期五, 30 一月 2026 08:36:12 +0800
Subject: [PATCH] no message

---
 src/main/java/com/zy/api/controller/params/WorkTaskParams.java      |   42 ++
 src/main/java/com/zy/asrs/entity/param/CompleteParam.java           |    7 
 src/main/java/com/zy/api/controller/params/ReceviceTaskParams.java  |   46 ++
 src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java        |  233 +++++++++++++
 src/main/java/com/zy/api/entity/dto/LocMastDto.java                 |   27 +
 src/main/java/com/zy/asrs/entity/WrkMast.java                       |    3 
 src/main/java/com/zy/asrs/task/WorkMastScheduler.java               |   45 ++
 src/main/java/com/zy/asrs/controller/MobileController.java          |    3 
 src/main/java/com/zy/api/service/WcsApiService.java                 |   71 ++++
 src/main/java/com/zy/api/controller/WcsApiController.java           |   83 ++++
 src/main/java/com/zy/asrs/service/impl/BasContainerServiceImpl.java |    9 
 src/main/java/com/zy/common/constant/MesConstant.java               |   14 
 src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java       |  102 ++---
 src/main/java/com/zy/common/service/CommonService.java              |  283 ----------------
 src/main/java/com/zy/asrs/service/MobileService.java                |    2 
 15 files changed, 637 insertions(+), 333 deletions(-)

diff --git a/src/main/java/com/zy/api/controller/WcsApiController.java b/src/main/java/com/zy/api/controller/WcsApiController.java
new file mode 100644
index 0000000..fd804c6
--- /dev/null
+++ b/src/main/java/com/zy/api/controller/WcsApiController.java
@@ -0,0 +1,83 @@
+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.controller.params.WorkTaskParams;
+import com.zy.api.service.WcsApiService;
+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.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+import java.util.Objects;
+
+@Api("WCS浜や簰鎺ュ彛")
+@RequestMapping("/wcs")
+@RestController
+public class WcsApiController {
+
+    @Autowired
+    private WcsApiService wcsApiService;
+
+
+    /**
+     * 鐛插彇搴綅淇℃伅
+     * @param params
+     * @return
+     */
+    @ManagerAuth
+    @ApiOperation("鍚屾搴撲綅淇℃伅")
+    @PostMapping("/sync/locs")
+    public R getAllLocs(@RequestBody Map<String, String> params) {
+        return wcsApiService.getLocs(params);
+    }
+
+
+    /**
+     * 鑾峰彇绔欑偣淇℃伅
+     * @param params
+     * @return
+     */
+    @ManagerAuth
+    @ApiOperation("鑾峰彇绔欑偣淇℃伅")
+    @PostMapping("sync/stations")
+    public R getAllStation(@RequestBody Map<String, String> params) {
+        return wcsApiService.getStations(params);
+    }
+
+    /**
+     * 涓嬪彂浠诲姟鑷砏CS
+     * @author Ryan
+     * @date 2026/1/10 13:57
+     * @param params
+     * @return com.core.common.R
+     */
+    @ManagerAuth
+    @ApiOperation("涓嬪彂浠诲姟鑷砏CS")
+    @PostMapping("/pub/wrks")
+    public R pubWrkToWcs(@RequestBody WorkTaskParams params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return wcsApiService.pubWrkToWcs(params);
+    }
+
+    @ManagerAuth
+    @ApiOperation("璁惧鎵ц鐘舵�佸洖鍐�")
+    @PostMapping("/openapi/report")
+    public R receviceTaskFromWcs(@RequestBody ReceviceTaskParams params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return wcsApiService.receviceTaskFromWcs(params);
+
+    }
+
+
+}
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..c5349a6
--- /dev/null
+++ b/src/main/java/com/zy/api/controller/params/ReceviceTaskParams.java
@@ -0,0 +1,46 @@
+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;
+
+    @ApiModelProperty("娴佹按鍙�")
+    private Integer id;
+
+    @ApiModelProperty("閫氱煡绫诲瀷锛歵ask")
+    private String notifyType;
+
+    @ApiModelProperty("鍫嗗灈鏈哄彿")
+    private Integer device;
+
+    @ApiModelProperty("WCS浠诲姟鍙�")
+    private String taskNo;
+
+    @ApiModelProperty("WMS浠诲姟鍙�")
+    private String wrkNo;
+
+    @ApiModelProperty("娑堟伅绫诲瀷锛歵ask_complete銆乼ask_cancel")
+    private String msgType;
+
+    @ApiModelProperty("娑堟伅鎻忚堪")
+    private String msgDesc;
+
+    @ApiModelProperty("娑堟伅鏁版嵁")
+    private String data;
+
+    @ApiModelProperty("閲嶉噺")
+    private Double weight;
+
+}
diff --git a/src/main/java/com/zy/api/controller/params/WorkTaskParams.java b/src/main/java/com/zy/api/controller/params/WorkTaskParams.java
new file mode 100644
index 0000000..010893b
--- /dev/null
+++ b/src/main/java/com/zy/api/controller/params/WorkTaskParams.java
@@ -0,0 +1,42 @@
+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 = "WorkTaskParams", description = "鎵ц浠诲姟鍙傛暟")
+public class WorkTaskParams implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("鍗忚浠诲姟缂栧彿(瀵瑰簲鍑哄簱浠诲姟鍙�)")
+    private String taskNo;
+
+    @ApiModelProperty("宸ヤ綔妗d换鍔″彿")
+    private String wrkNo;
+
+    @ApiModelProperty("搴撲綅缂栫爜")
+    private String locNo;
+
+    @ApiModelProperty("鏉$爜")
+    private String barcode;
+
+    @ApiModelProperty("浼樺厛绾�")
+    private Integer taskPri;
+
+    @ApiModelProperty("鍑哄簱绔欑偣")
+    private String staNo;
+
+    @ApiModelProperty("浣滀笟绫诲瀷锛宨n: 鍏ュ簱锛� out:鍑哄簱")
+    private String type;
+
+    @ApiModelProperty("鏄惁浣欐枡")
+    private Integer isSuplus;
+
+}
diff --git a/src/main/java/com/zy/api/entity/dto/LocMastDto.java b/src/main/java/com/zy/api/entity/dto/LocMastDto.java
new file mode 100644
index 0000000..a842c44
--- /dev/null
+++ b/src/main/java/com/zy/api/entity/dto/LocMastDto.java
@@ -0,0 +1,27 @@
+package com.zy.api.entity.dto;
+
+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 = "LocMastDto", description = "搴撲綅淇℃伅")
+public class LocMastDto implements Serializable {
+
+    @ApiModelProperty("搴撲綅淇℃伅")
+    private String locNo;
+
+    private String locSts;
+
+    private String barcode;
+
+    private Integer row;
+
+    private Integer bay;
+
+    private Integer lev;
+}
diff --git a/src/main/java/com/zy/api/service/WcsApiService.java b/src/main/java/com/zy/api/service/WcsApiService.java
new file mode 100644
index 0000000..30c842c
--- /dev/null
+++ b/src/main/java/com/zy/api/service/WcsApiService.java
@@ -0,0 +1,71 @@
+package com.zy.api.service;
+
+import com.core.common.R;
+import com.zy.api.controller.params.ReceviceTaskParams;
+import com.zy.api.controller.params.WorkTaskParams;
+
+import java.util.Map;
+import java.util.Set;
+
+public interface WcsApiService {
+
+    /**
+     * 閿佸畾搴撲綅淇℃伅
+     * @author Ryan
+     * @date 2026/1/10 11:17
+     * @param params
+     * @return com.core.common.R
+     */
+    R lockLocs(ReceviceTaskParams params);
+
+//    /**
+//     * 鍥炲簱鎼繍鎸囦护
+//     * @author Ryan
+//     * @date 2026/1/10 13:08
+//     * @param params
+//     * @return com.core.common.R
+//     */
+//    R backLocs(WorkTaskParams params);
+
+    /**
+     * 涓嬪彂浠诲姟鑷砏CS
+     * @author Ryan
+     * @date 2026/1/10 13:57
+     * @param params
+     * @return com.core.common.R
+     */
+    R pubWrkToWcs(WorkTaskParams params);
+
+//
+//    /**
+//     * 閿佸畾鎴栭噴鏀惧簱浣�
+//     * @author Ryan
+//     * @date 2026/1/10 14:35
+//     * @param locs
+//     * @param type
+//     */
+//    void reportLockLocs(Set<String> locs, String type);
+
+    /**
+     * 鍫嗗灈鏈轰换鍔″畬鎴愮姸鎬佷笂鎶�
+     * @author Ryan
+     * @date 2026/1/10 16:29
+     * @param params
+     * @return com.core.common.R
+     */
+    R receviceTaskFromWcs(ReceviceTaskParams params);
+
+    /**
+     * 鐛插彇搴綅淇℃伅
+     * @param params
+     * @return
+     */
+    R getLocs(Map<String, String> params);
+
+    /**
+     * 鑾峰彇绔欑偣淇℃伅
+     * @param params
+     * @return
+     */
+    R getStations(Map<String, String> params);
+}
diff --git a/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java b/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
new file mode 100644
index 0000000..994112b
--- /dev/null
+++ b/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
@@ -0,0 +1,233 @@
+package com.zy.api.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.core.exception.CoolException;
+import com.zy.api.controller.params.ReceviceTaskParams;
+import com.zy.api.controller.params.WorkTaskParams;
+import com.zy.api.entity.dto.LocMastDto;
+import com.zy.api.service.WcsApiService;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.service.*;
+import com.zy.asrs.service.impl.LocDetlServiceImpl;
+import com.zy.asrs.service.impl.MatServiceImpl;
+import com.zy.asrs.service.impl.WrkDetlServiceImpl;
+import com.zy.common.constant.MesConstant;
+import com.zy.common.utils.HttpHandler;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class WcsApiServiceImpl implements WcsApiService {
+
+    @Autowired
+    private LocMastService locMastService;
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private WorkService workService;
+    @Autowired
+    private WrkDetlService wrkDetlService;
+    @Autowired
+    private MatService matService;
+    @Autowired
+    private LocDetlService locDetlService;
+
+    /**
+     * 閫氱煡WCS閿佸畾搴撲綅锛屽強绂佹褰撳墠搴撲綅鐨勪竴鍒囨搷浣�
+     *
+     * @param params
+     * @return com.core.common.R
+     * @author Ryan
+     * @date 2026/1/10 11:18
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R lockLocs(ReceviceTaskParams params) {
+//        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());
+//
+//        reportLockLocs(locs, "lock");
+
+        return R.ok("涓婃姤鎴愬姛锛侊紒");
+    }
+
+//    /**
+//     * 浣欐枡鍥炲簱 锛堟惉杩愪綑鏂欏洖搴擄級
+//     *
+//     * @param params
+//     * @return com.core.common.R
+//     * @author Ryan
+//     * @date 2026/1/10 13:19
+//     */
+//    @Override
+//    @Transactional(rollbackFor = Exception.class)
+//    public R backLocs(WorkTaskParams params) {
+//        if (Objects.isNull(params.getWrkNo())) {
+//            throw new CoolException("宸ヤ綔鍙蜂笉鑳戒负绌猴紒锛�");
+//        }
+////        String wrkCode = params.getTaskNo();
+////       if (wrkCode.contains("-1")) {
+////           throw new CoolException("閰嶅浠诲姟缂栫爜閿欒锛岃妫�鏌ュ悗閲嶆柊涓婁紶锛侊紒");
+////       }
+//        WrkMast mast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", params.getWrkNo()));
+//        if (Objects.isNull(mast)) {
+//            throw new CoolException("浠诲姟涓嶅瓨鍦紒锛�");
+//        }
+////       if (!mast.getWrkSts().equals(103L)) {
+////           throw new CoolException("褰撳墠浠诲姟骞堕潪浣欐枡鍑哄簱浠诲姟锛侊紒");
+////       }
+////       if (params.getIsSuplus() == 1) {
+////           mast.setIsSuplus(1);
+////       }
+////
+////       if (!wrkMastService.updateById(mast)) {
+////           throw new CoolException("浠诲姟鐘舵�佹洿鏂板け璐ワ紒锛�");
+////       }
+//        workService.backLocOperation(mast.getWrkNo() + "", mast.getAppeUser());
+//
+//        return R.ok("鎺ユ敹鎴愬姛锛屾墽琛屽洖搴撲腑...");
+//    }
+
+    /**
+     * 涓嬪彂浠诲姟鑷砏CS
+     *
+     * @param params
+     * @return com.core.common.R
+     * @author Ryan
+     * @date 2026/1/10 13:58
+     */
+    @Override
+    public R pubWrkToWcs(WorkTaskParams params) {
+        if (Objects.isNull(params.getTaskNo())) {
+            return R.error("浠诲姟鍙蜂笉鑳戒负绌猴紒锛�");
+        }
+        if (Objects.isNull(params.getBarcode())) {
+            return R.error("鎵樼洏鐮佷笉鑳戒负绌猴紒锛�");
+        }
+        if (Objects.isNull(params.getLocNo())) {
+            return R.error("鐩爣搴撲綅涓嶈兘涓虹┖锛侊紒");
+        }
+        String url = MesConstant.PUB_TASK_IN;
+        if (Objects.isNull(params.getType()) && params.getType().equals("out")) {
+            url = MesConstant.PUB_TASK_OUT;
+        }
+        String response;
+        try {
+            response = new HttpHandler.Builder()
+                    .setUri(MesConstant.URL)
+                    .setPath(url)
+                    .setJson(JSON.toJSONString(params))
+                    .build()
+                    .doPost();
+            R result = JSON.parseObject(response, R.class);
+
+            if (result.get("code").equals("200")) {
+                //TODO 涓婃姤鏄惁鎴愬姛
+            }
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return R.ok();
+    }
+    /**
+     * 鍫嗗灈鏈烘墽琛岀姸鎬佷笂鎶�
+     *
+     * @param params
+     * @return com.core.common.R
+     * @author Ryan
+     * @date 2026/1/10 16:30
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R receviceTaskFromWcs(ReceviceTaskParams params) {
+        if (Objects.isNull(params.getWrkNo())) {
+            throw new CoolException("WMS浠诲姟鍙蜂笉鑳戒负绌猴紒锛�");
+        }
+        if (Objects.isNull(params.getNotifyType())) {
+            throw new CoolException("鍔ㄤ綔绫诲瀷涓嶈兘涓虹┖锛侊紒");
+        }
+        WrkMast mast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", params.getWrkNo()));
+        if (Objects.isNull(mast)) {
+            throw new CoolException("浠诲姟妗d笉瀛樺湪锛侊紒");
+        }
+        if (params.getNotifyType().equals("task")) {
+            //浠诲姟
+            if (params.getMsgType().equals("task_complete")) {
+                if (mast.getIoType() == 1) {
+                    mast.setWrkSts(4L);
+                } else if (mast.getIoType() == 101) {
+                    mast.setWrkSts(14L);
+                }
+                if (!wrkMastService.updateById(mast)) {
+                    throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                }
+            } else if (params.getMsgType().equals("task_cancel")) {
+                //todo 鍙栨秷浠诲姟
+            }
+        }
+        return R.ok();
+    }
+
+    /**
+     * 鐛插彇搴綅淇℃伅
+     * @param params
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R getLocs(Map<String, String> params) {
+        String url = MesConstant.SYN_LOCS;
+        String response;
+        try {
+            response = new HttpHandler.Builder()
+                    .setUri(MesConstant.WCS_URL)
+                    .setPath(url)
+                    .setJson(JSON.toJSONString(params))
+                    .build()
+                    .doPost();
+            JSONObject jsonObject = JSONObject.parseObject(response);
+            if (jsonObject.get("code").equals(200)) {
+                List<LocMastDto> dtos = JSONArray.parseArray(jsonObject.get("data").toString(), LocMastDto.class);
+                dtos.forEach(e -> {
+                    LocMast locMast = new LocMast();
+                    BeanUtils.copyProperties(e, locMast);
+                    locMast.setRow1(e.getRow());
+                    locMast.setLev1(e.getLev());
+                    locMast.setBay1(e.getBay());
+                    System.out.println(JSONObject.toJSON(locMast));
+                    if (!locMastService.insert(locMast)) {
+                        throw new CoolException("搴撲綅淇濆瓨澶辫触锛侊紒");
+                    }
+                });
+            }
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        return R.ok();
+    }
+
+    @Override
+    public R getStations(Map<String, String> params) {
+        return null;
+    }
+}
diff --git a/src/main/java/com/zy/asrs/controller/MobileController.java b/src/main/java/com/zy/asrs/controller/MobileController.java
index 4b3cb11..ae128b7 100644
--- a/src/main/java/com/zy/asrs/controller/MobileController.java
+++ b/src/main/java/com/zy/asrs/controller/MobileController.java
@@ -374,8 +374,7 @@
         if (Objects.isNull(combParam)) {
             return R.error("鍙傛暟涓嶈兘涓虹┖!!");
         }
-        mobileService.combInPub(combParam, 10031L);
-        return R.ok("涓婃灦鎴愬姛");
+       return mobileService.combInPub(combParam, 10031L);
     }
 
     @RequestMapping("/pack/get/auth")
diff --git a/src/main/java/com/zy/asrs/entity/WrkMast.java b/src/main/java/com/zy/asrs/entity/WrkMast.java
index 7018855..582c7b9 100644
--- a/src/main/java/com/zy/asrs/entity/WrkMast.java
+++ b/src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -15,6 +15,7 @@
 import java.io.Serializable;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.Objects;
 
 @Data
 @TableName("asr_wrk_mast")
@@ -391,8 +392,8 @@
         }
     }
 
-
     public String getStaNo$(){
+        if (Objects.isNull(this.staNo) || this.staNo.equals("null")) {return  null; }
         BasDevpService service = SpringUtils.getBean(BasDevpService.class);
         BasDevp basDevp = service.selectById(this.staNo);
         if (!Cools.isEmpty(basDevp)){
diff --git a/src/main/java/com/zy/asrs/entity/param/CompleteParam.java b/src/main/java/com/zy/asrs/entity/param/CompleteParam.java
index 427e3e4..b98f007 100644
--- a/src/main/java/com/zy/asrs/entity/param/CompleteParam.java
+++ b/src/main/java/com/zy/asrs/entity/param/CompleteParam.java
@@ -3,6 +3,7 @@
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.List;
 
 @Data
 public class CompleteParam implements Serializable {
@@ -12,7 +13,11 @@
     // 搴撲綅瑙勬牸锛� 0:鏈煡, 1:浣庡簱浣�, 2:楂樺簱浣嶏級
     private Short locType1;
 
-    private String station;
+    //绔欓粸
+    private String sourceStaNo;
+
+    //鍙敤鎺�
+    private List<Integer> rowList;
 
     private String carBarcode;
 
diff --git a/src/main/java/com/zy/asrs/service/MobileService.java b/src/main/java/com/zy/asrs/service/MobileService.java
index 3d2864f..6cb47c8 100644
--- a/src/main/java/com/zy/asrs/service/MobileService.java
+++ b/src/main/java/com/zy/asrs/service/MobileService.java
@@ -147,7 +147,7 @@
      * @author Ryan
      * @date 2025/12/9 15:04
      */
-    void combInPub(CompleteParam combParam, Long userId);
+    R combInPub(CompleteParam combParam, Long userId);
 
     /**
      * SO/EO 鍖虹粍鎵�
diff --git a/src/main/java/com/zy/asrs/service/impl/BasContainerServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasContainerServiceImpl.java
index 836d7fd..6b314c5 100644
--- a/src/main/java/com/zy/asrs/service/impl/BasContainerServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/BasContainerServiceImpl.java
@@ -10,7 +10,9 @@
 import com.zy.asrs.entity.BasContainer;
 import com.zy.asrs.service.BasContainerService;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
-import org.apache.tika.utils.StringUtils;
+import org.apache.commons.codec.binary.StringUtils;
+import org.apache.poi.util.StringUtil;
+
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -58,7 +60,10 @@
                 prefix = "TC5";
                 basContainer.setMixMax(1.0);
             }
-            ruleCode = prefix + StringUtils.leftPad(i + "", length, "0");
+
+
+            String padded = String.format("%07d", Integer.parseInt(i + ""));
+            ruleCode = prefix + padded;//StringUtils.leftPad(i + "", length, "0");
             basContainer.setType(container.getType())
                     .setCreateTime(new Date())
                     .setUpdateTime(new Date())
diff --git a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
index d998706..f8d4fbf 100644
--- a/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -1760,53 +1760,44 @@
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void combInPub(CompleteParam param, Long userId) {
+    public R combInPub(CompleteParam param, Long userId) {
         if (Objects.isNull(param.getBarcode())) {
             throw new CoolException("鎵樼洏鐮佷笉鑳戒负绌猴紒锛�");
         }
-        if (Objects.isNull(param.getStation())) {
+        if (Objects.isNull(param.getSourceStaNo())) {
             throw new CoolException("绔欑偣涓嶈兘涓虹┖!!");
         }
-//        // TODO 淇敼缂撳瓨绔欑偣鐘舵�佸強鏁版嵁
-//        Task task = taskService.selectOne(new EntityWrapper<Task>()
-//                .eq("wrk_sts", 14L)
-//                .eq("barcode", param.getCarBarcode()));
-//        if (Objects.isNull(task)) {
-//            throw new CoolException("鏁版嵁閿欒,浠诲姟涓嶅瓨鍦�!!");
-//        }
-//        List<TaskDetl> taskDetls = taskDetlService
-//                .selectList(new EntityWrapper<TaskDetl>().eq("wrk_no", task.getWrkNo()));
-//        if (Objects.isNull(taskDetls) || taskDetls.isEmpty()) {
-//            throw new CoolException("鏁版嵁閿欒,浠诲姟鏄庣粏涓嶅瓨鍦�!!");
-//        }
+        if (Objects.isNull(param.getLocType1())) {
+            param.setLocType1((short)1);
+        }
 
-        BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>()
-                .eq("dev_no", param.getStation()));
+
+        log.info("WCS浠诲姟鐢熸垚璇锋眰鍙傛暟锛�", JSONObject.toJSONString(param));
+
+
+        BasDevp station = basDevpService.selectOne(new EntityWrapper<BasDevp>()
+                .eq("dev_no", param.getSourceStaNo()));
         if (Objects.isNull(station)) {
             throw new CoolException("绔欑偣涓嶅瓨鍦�!!");
         }
 
-        station.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
-        station.setBarcode("");
-        if (!basStationService.updateById(station)) {
-            throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐�!");
-        }
-        basStationDetlService.delete(new EntityWrapper<BasStationDetl>().eq("dev_no", station.getDevNo()));
-
-//        // 浠诲姟瀹屾垚
-//        task.setWrkSts(15L);
-//
-//        if (!taskService.updateById(task)) {
-//            throw new CoolException("AGV浠诲姟瀹屾垚澶辫触!!");
-//        }
-
         List<WaitPakin> waitPakins = waitPakinService
-                .selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
+                .selectList(new EntityWrapper<WaitPakin>()
+                        .eq("io_status" , "N")
+                        .eq("zpallet", param.getBarcode()));
         if (Objects.isNull(waitPakins) || waitPakins.isEmpty()) {
             throw new CoolException("鏁版嵁閿欒,缁勬嫋妗e凡涓嶅瓨鍦�!!");
         }
 
-        generateCrnInTask(waitPakins, station, param.getLocType1(), userId);
+        WrkMast wrkMast = generateCrnInTask(waitPakins, station, param.getLocType1(), userId);
+
+        Map<String, Object> response = new HashMap<>();
+        response.put("taskNo", wrkMast.getWrkNo());
+        response.put("locNo", wrkMast.getLocNo());
+        response.put("taskPri", wrkMast.getIoPri());
+
+        return R.ok("浠诲姟鐢熸垚鎴愬姛").add(response);
+
     }
 
     /**
@@ -1946,18 +1937,18 @@
      * @date 2025/12/9 13:54
      */
     @Transactional(rollbackFor = Exception.class)
-    public void generateCrnInTask(List<WaitPakin> waitPakins, BasStation station, Short locType, Long userId) {
+    public WrkMast generateCrnInTask(List<WaitPakin> waitPakins, BasDevp station, Short locType, Long userId) {
         Date now = new Date();
-        StationRela rela = stationRelaService.selectOne(new EntityWrapper<StationRela>()
-                .eq("agv_sta", station.getDevNo())
-                .orderAsc(Arrays.asList("crn_sta"))
-                .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
+//        StationRela rela = stationRelaService.selectOne(new EntityWrapper<StationRela>()
+//                .eq("agv_sta", station.getDevNo())
+//                .orderAsc(Arrays.asList("crn_sta"))
+//                .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
+//
+//        if (Objects.isNull(rela)) {
+//            throw new CoolException("鏈粦瀹氫綔涓氱珯鐐�!!");
+//        }
 
-        if (Objects.isNull(rela)) {
-            throw new CoolException("鏈粦瀹氫綔涓氱珯鐐�!!");
-        }
-
-        BasDevp sourceStaNo = basDevpService.checkSiteStatus(Integer.parseInt(rela.getCrnSta()), true);
+        BasDevp sourceStaNo = basDevpService.checkSiteStatus(station.getDevNo(), true);
         sourceStaNo.setLocType1(locType);
         LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
         WaitPakin pakin = waitPakins.stream().findFirst().get();
@@ -1965,6 +1956,7 @@
 
         WrkMast mast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode", pakin.getZpallet()));
         WrkMast wrkMast = new WrkMast();
+        String locNo;
         if (!Objects.isNull(mast)) {
             if (mast.getIoType().equals(TaskIOType.MERGE_OUT.type) || mast.getIoType().equals(TaskIOType.PICK_OUT.type) || mast.getIoType().equals(TaskIOType.CHECK_OUT.type)) {
                 int ioType = mast.getIoType() - 50;
@@ -1978,6 +1970,7 @@
                 if (!res) {
                     throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
                 }
+                locNo = mast.getLocNo();
                 // 鏇存柊婧愮珯鐐逛俊鎭�
                 sourceStaNo.setWrkNo(mast.getWrkNo());
                 sourceStaNo.setModiTime(now);
@@ -1998,8 +1991,10 @@
             } else {
                 throw new CoolException("鎵樼洏宸插瓨鍦ㄤ换鍔℃。锛侊紒");
             }
+
         } else {
             StartupDto dto = commonService.getLocNo(1, sourceStaNo.getDevNo(), findLocNoAttributeVo, locTypeDto);
+
             int workNo = dto.getWorkNo();
             // 鐢熸垚宸ヤ綔妗�
             wrkMast.setWrkNo(workNo);
@@ -2027,6 +2022,7 @@
             if (!res) {
                 throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
             }
+            locNo = dto.getLocNo();
             // 鏇存柊婧愮珯鐐逛俊鎭�
             sourceStaNo.setWrkNo(workNo);
             sourceStaNo.setModiTime(now);
@@ -2060,16 +2056,18 @@
         });
 
 
-//        // 鏇存柊鍏ュ簱閫氱煡妗� ioStatus ===>> Y
-//        Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
-//                .eq("zpallet", pakin.getZpallet());
-//        WaitPakin setParam = new WaitPakin();
-//        setParam.setLocNo(dto.getLocNo());
-//        setParam.setIoStatus("Y");
-//        setParam.setModiTime(now);
-//        if (!waitPakinService.update(setParam, wrapper)) {
-//            throw new CoolException("鏇存柊閫氱煡妗eけ璐�");
-//        }
+        // 鏇存柊鍏ュ簱閫氱煡妗� ioStatus ===>> Y
+        Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
+                .eq("zpallet", pakin.getZpallet());
+        WaitPakin setParam = new WaitPakin();
+        setParam.setLocNo(locNo);
+        setParam.setIoStatus("Y");
+        setParam.setModiTime(now);
+        if (!waitPakinService.update(setParam, wrapper)) {
+            throw new CoolException("鏇存柊閫氱煡妗eけ璐�");
+        }
+
+        return wrkMast;
     }
 
     /**
diff --git a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
index 0d39e15..33112bc 100644
--- a/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
+++ b/src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -1,5 +1,8 @@
 package com.zy.asrs.task;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.api.controller.params.WorkTaskParams;
+import com.zy.api.service.WcsApiService;
 import com.zy.asrs.entity.Task;
 import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.service.TaskService;
@@ -12,6 +15,8 @@
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
@@ -28,10 +33,12 @@
     @Autowired
     private WorkMastHandler workMastHandler;
     @Autowired
+    private WcsApiService wcsApiService;
+    @Autowired
     private TaskService taskService;
 
     @Scheduled(cron = "0/3 * * * * ? ")
-    private void execute(){
+    private void execute() {
         List<WrkMast> wrkMasts = wrkMastService.selectToBeCompleteData();
         if (wrkMasts.isEmpty()) {
             return;
@@ -50,7 +57,7 @@
     }
 
     @Scheduled(cron = "0/3 * * * * ? ")
-    private void executeTask(){
+    private void executeTask() {
         List<Task> wrkMasts = taskService.selectToBeCompleteData();
         if (wrkMasts.isEmpty()) {
             return;
@@ -68,4 +75,38 @@
         }
     }
 
+
+    /**
+     * 浠诲姟鑷姩涓嬪彂
+     *
+     * @author Ryan
+     * @date 2026/1/10 14:42
+     */
+    @Scheduled(cron = "0/15 * * * * ? ")
+    private void autoPubTasks() {
+        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", Arrays.asList(1L, 11L)));
+        if (wrkMasts.isEmpty()) {
+            return;
+        }
+        Collections.shuffle(wrkMasts);
+        wrkMasts.forEach(wrkMast -> {
+            WorkTaskParams params = new WorkTaskParams();
+            if (wrkMast.getIoType().equals(1)) {
+                params.setType("in");
+                params.setTaskNo(wrkMast.getWrkNo() + "")
+                        .setLocNo(wrkMast.getLocNo())
+                        .setBarcode(wrkMast.getBarcode())
+                        .setTaskPri(wrkMast.getIoPri().intValue());
+            } else {
+                params.setType("out")
+                        .setTaskNo(wrkMast.getWrkNo() + "")
+                        .setLocNo(wrkMast.getLocNo())
+                        .setStaNo(wrkMast.getStaNo())
+                        .setTaskPri(wrkMast.getIoPri().intValue());
+                wcsApiService.pubWrkToWcs(params);
+            }
+        });
+    }
+
+
 }
diff --git a/src/main/java/com/zy/common/constant/MesConstant.java b/src/main/java/com/zy/common/constant/MesConstant.java
index 09762d3..04cb668 100644
--- a/src/main/java/com/zy/common/constant/MesConstant.java
+++ b/src/main/java/com/zy/common/constant/MesConstant.java
@@ -8,6 +8,10 @@
     //灏忕郴缁熸帴鍙e湴鍧�
     public static final String URL = "http://webservice.kopen.com.cn:1482/kc-api/api/wms/ ";
 
+    //WCS绯荤粺鎺ュ彛鍦板潃
+    public static final String WCS_URL = "http://192.168.238.244:9090/wcs";
+
+
     //涓婃灦娲惧伐鍗曞弽棣�
     public static final String IN_DISPATCH_RESULT = "getInDispatchResult";
     //澶囪揣鎸囩ず娲惧伐鍗曞弽棣�
@@ -16,6 +20,16 @@
     public static final String OUT_DETAILS_RESULT = "getOutDetailsResult";
 
 
+
+    /***鐢宠鍏ュ簱浠诲姟*/
+    public static final String PUB_TASK_IN = "/openapi/createInTask";
+
+    /***鐢宠鍑哄簱浠诲姟*/
+    public static final String PUB_TASK_OUT = "/openapi/createOutTask";
+
+    /***鍚屾搴綅淇℃伅*/
+    public static final String SYN_LOCS = "/openapi/getAllLocInformation";
+
     /**
      * token閫氳繃header浼犻�掔殑鍚嶇О
      */
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index e659ad1..8f8280f 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -25,6 +25,7 @@
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -170,292 +171,31 @@
      */
     @Transactional
     public StartupDto getLocNoRun(Integer whsType, Integer staDescId, Integer sourceStaNo, FindLocNoAttributeVo findLocNoAttributeVo, Integer moveCrnNo, LocTypeDto locTypeDto, int times) {
-
+        staDescId = 1;
         // 鍒濆鍖栧弬鏁�
         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;
-            if (times == 0) {
-                curRow = moveCrnNo * 4 - 1;
-            } else {
-                curRow = moveCrnNo * 4 - 2;
-            }
-        }
-
-        //姝ょ▼搴忕敤浜庝紭鍖栧爢鍨涙満寮傚父鏃剁殑杩愯鏃堕棿
-        for (int i = times; i < crnNumber * 2; i++) {
-            int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber);
-            curRow = locNecessaryParameters[1];
-            crnNo = locNecessaryParameters[2];
-            if (basCrnpService.checkSiteError(crnNo, true)) {
-                rowCount = locNecessaryParameters[0];
-                nearRow = locNecessaryParameters[3];
-                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
-                        .eq("row1", nearRow).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()));
-                int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).le("io_type", 100));
-                if (locMasts.size() - crnCountO <= 2) {
-                    log.error(crnNo + "鍙峰爢鍨涙満娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", JSON.toJSONString(locTypeDto), times);
-                    nearRow = 0;
-                    times++;
-                    continue;
-                }
-                break;
-            } else {
-                times++;
-            }
-        }
-        if (nearRow == 0) {
-            throw new CoolException("鏃犲彲鐢ㄥ爢鍨涙満");
-        }
-
-        boolean signRule1 = false;
-        boolean signRule2 = false;
-
-
-        if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
-            // 闈犺繎鎽嗘斁瑙勫垯 --- 鍚屽ぉ鍚岃鏍肩墿鏂� //鍒嗙鐗�
-            if (!Cools.isEmpty(findLocNoAttributeVo.getMatnr()) && staDescId == 1) {
-                signRule1 = true;
-            }
-            // 闈犺繎鎽嗘斁瑙勫垯 --- 鍚屽ぉ鍚岃鏍肩墿鏂� //浜掗�氱増
-            if (!Cools.isEmpty(findLocNoAttributeVo.getMatnr()) && staDescId == 1) {
-                signRule2 = true;
-            }
-
-            if (!Cools.isEmpty(findLocNoAttributeVo.getMatnr()) && (staDescId == 11 || staDescId == 111)) {
-                signRule1 = true;
-            }
-        }
-
-        if (signRule1) {
-            if (nearRow != curRow) {
-                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
-                        .eq("row1", nearRow).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()));
-                for (LocMast locMast1 : locMasts) {
-                    //鑾峰彇宸烽亾
-//                    List<String> groupOutsideLocCrn = Utils.getGroupOutLocCrn(curRow,nearRow,locMast1.getLocNo(), curRow>nearRow);
-//                    LocMast locMastGro = locMastService.selectById(wrkMast.getLocNo());
-                    //鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娴呴潪绌哄簱浣�
-                    LocMast locMastF = locMastService.selectLocByLocStsPakInF(curRow, nearRow, locMast1, rowLastnoType.getType().longValue());
-                    if (!Cools.isEmpty(locMastF) && locMastF.getLocSts().equals("F")) {
-                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMastF.getLocNo()));
-                        if (!Cools.isEmpty(locDetl) && findLocNoAttributeVo.beSimilar(locDetl)) {
-                            //鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娣辩┖搴撲綅
-                            locMast = locMastService.selectLocByLocStsPakInO(curRow, nearRow, locMast1, rowLastnoType.getType().longValue());
-                            break;
-                        }
-                    }
-                }
-            }
-        } else if (signRule2) {
-            List<String> locNos = locDetlService.getSameDetlToday(findLocNoAttributeVo.getMatnr(), sRow, eRow);
-            for (String locNo : locNos) {
-                if (Utils.isShallowLoc(slaveProperties, locNo)) {
-                    continue;
-                }
-                String shallowLocNo = Utils.getShallowLoc(slaveProperties, locNo);
-                // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
-                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;
-                        }
-                    }
-                }
-            }
-        }
-
-//        // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭  //鍒嗙鐗�
-//        if (staDescId == 10 && Utils.BooleanWhsTypeStaIoType(whsType)) {
-//            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("row1", nearRow).eq("loc_sts", "O"));
-//            for (LocMast locMast1:locMasts){
-//                if (VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
-//                    continue;
-//                }
-//                String shallowLoc = Utils.getDeepLoc(slaveProperties,locMast1.getLocNo());
-//                LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",shallowLoc));
-//                if (!Cools.isEmpty(locMast2) && locMast2.getLocSts().equals("D")){
-//                    locMast = locMast1;
-//                    break;
-//                }
-//            }
-//        }
-
-        // 闈犺繎鎽嗘斁瑙勫垯 --- 绌烘墭 //浜掗�氱増
-        if (staDescId == 10 && Utils.BooleanWhsTypeStaIoType(rowLastno)) {
-            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;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        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);
-//                throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
-                crnNo = 0;
-            } else {
-                staNo = basDevpService.selectById(staDesc.getCrnStn());
-                if (!staNo.getAutoing().equals("Y")) {
-                    log.error("鐩爣绔�" + staDesc.getCrnStn() + "涓嶅彲鐢�");
-//                throw new CoolException("鐩爣绔�"+staDesc.getCrnStn()+"涓嶅彲鐢�");
-                    crnNo = 0;
-                }
-                startupDto.setStaNo(staNo.getDevNo());
-            }
-            // 鏇存柊搴撲綅鎺掑彿
-            if (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("row1", nearRow)
-                    .eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue())
-                    .orderBy("lev1", true).orderBy("bay1", true));
-            for (LocMast locMast1 : locMasts) {
-                if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
-                    continue;
-                }
-                if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
-                    String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast1.getLocNo());
-                    LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
-                            .eq("loc_no", shallowLoc).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()));
-                    if (!Cools.isEmpty(locMast2)) {
-                        locMast = locMast2;
-                        break;
-                    }
-                } else {
-                    if (!Cools.isEmpty(locMast1)) {
-                        locMast = locMast1;
-                        break;
-                    }
-                }
-            }
-
-            if (Cools.isEmpty(locMast) && Utils.BooleanWhsTypeStaIoType(rowLastno)) {
-                for (LocMast locMast1 : locMasts) {
-                    if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
-                        continue;
-                    }
-                    if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
-                        String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast1.getLocNo());
-                        LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
-                                .eq("loc_no", shallowLoc).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()));
-                        if (!Cools.isEmpty(locMast2)) {
-                            locMast = locMast2;
-                            break;
-                        } else {
-                            locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
-                                    .eq("loc_no", shallowLoc).eq("loc_sts", "F").eq("whs_type", rowLastnoType.getType().longValue()));
-                            if (!Cools.isEmpty(locMast2)) {
-                                locMast = locMast1;
-                                break;
-                            } else {
-                                locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
-                                        .eq("loc_no", shallowLoc).eq("loc_sts", "D").eq("whs_type", rowLastnoType.getType().longValue()));
-                                if (!Cools.isEmpty(locMast2)) {
-                                    locMast = locMast1;
-                                    break;
-                                }
-                            }
-                        }
-                    } else {
-                        if (!Cools.isEmpty(locMast1)) {
-                            locMast = locMast1;
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-
-        if (!Cools.isEmpty(locMast) && !basCrnpService.checkSiteError(crnNo, true)) {
-            locMast = null;
-        }
-
-        // 閫掑綊鏌ヨ
-        if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("O")) {
-            // 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
-            if (times < rowCount * 2) {
-                times = times + 1;
-                return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, moveCrnNo, locTypeDto, times);
-            }
-//            // 2.搴撲綅褰撳墠鎵�灞炲昂瀵告棤绌哄簱浣嶆椂锛岃皟鏁村昂瀵稿弬鏁帮紝鍚戜笂鍏煎妫�绱㈠簱浣�
-//            if (locTypeDto.getLocType1() < 2) {
-//                int i = locTypeDto.getLocType1() + 1;
-//                locTypeDto.setLocType1((short)i);
-//                return getLocNo(1, staDescId, sourceStaNo, matnr,batch,grade, locTypeDto, 0);
-//            }
-            log.error("绯荤粺娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", JSON.toJSONString(locTypeDto), times);
-            throw new CoolException("娌℃湁绌哄簱浣�");
-        }
-        String locNo = locMast.getLocNo();
+        StartupDto startupDto = new StartupDto();
+         locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
+                .ne("row1", rowLastno.getsRow())
+                .le("row1", rowLastno.geteRow())
+                .eq("loc_sts", "O")
+                .orderAsc(Arrays.asList("row1", "bay1", "lev1")));
+//        int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).le("io_type", 100));
 
         // 鐢熸垚宸ヤ綔鍙�
         int workNo = getWorkNo(0);
         // 杩斿洖dto
         startupDto.setWorkNo(workNo);
-        startupDto.setCrnNo(crnNo);
+        startupDto.setCrnNo(locMast.getCrnNo());
         startupDto.setSourceStaNo(sourceStaNo);
-        startupDto.setLocNo(locNo);
+        startupDto.setLocNo(locMast.getLocNo());
         return startupDto;
     }
 
@@ -846,7 +586,6 @@
                         locMast = locMast2;
                         break;
                     }
-
                 }
             }
 

--
Gitblit v1.9.1