From 3194da551027be67ec3285de7568e90bcfbf27ce Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期五, 05 一月 2024 08:20:10 +0800
Subject: [PATCH] #

---
 zy-asrs-common/src/main/java/com/zy/asrs/common/domain/param/SearchLocParam.java         |   22 ++++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/WcsController.java                  |  231 ++++++++++++++++++++++++++++++++++++++++++++++
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/BasDevpServiceImpl.java |   33 ++++++
 zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/BasDevpService.java          |    7 +
 4 files changed, 293 insertions(+), 0 deletions(-)

diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/domain/param/SearchLocParam.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/domain/param/SearchLocParam.java
new file mode 100644
index 0000000..bd935ec
--- /dev/null
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/domain/param/SearchLocParam.java
@@ -0,0 +1,22 @@
+package com.zy.asrs.common.domain.param;
+
+import lombok.Data;
+
+/**
+ * Created by vincent on 2020/10/30
+ */
+@Data
+public class SearchLocParam {
+
+    private Integer ioType;
+
+    private Integer sourceStaNo;
+
+    private String barcode;
+
+    // 搴撲綅瑙勬牸锛� 0:鏈煡, 1:浣庡簱浣�, 2:楂樺簱浣嶏級
+    private Short locType1;
+
+    private Long hostId;
+
+}
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/BasDevpService.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/BasDevpService.java
index 0e62fd5..8dbc6d9 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/BasDevpService.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/BasDevpService.java
@@ -26,4 +26,11 @@
      */
     List<Integer> getAvailableOutSite(Integer typeNo, Long hostId);
 
+    /**
+     * 鐩爣绔欑偣鐘舵�佹娴�
+     *
+     * @param pakin 鏄惁鍏ュ簱鎿嶄綔 true 鏄� 锛� false 涓嶆槸
+     */
+    BasDevp checkSiteStatus(Integer devpNo, boolean pakin, Long hostId);
+
 }
diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/BasDevpServiceImpl.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/BasDevpServiceImpl.java
index df9f99a..8bb4afd 100644
--- a/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/BasDevpServiceImpl.java
+++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/wms/service/impl/BasDevpServiceImpl.java
@@ -1,15 +1,23 @@
 package com.zy.asrs.common.wms.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.common.wms.entity.WrkMast;
 import com.zy.asrs.common.wms.mapper.BasDevpMapper;
 import com.zy.asrs.common.wms.entity.BasDevp;
 import com.zy.asrs.common.wms.service.BasDevpService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zy.asrs.common.wms.service.WrkMastService;
+import com.zy.asrs.framework.exception.CoolException;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
 
 @Service("basDevpService")
 public class BasDevpServiceImpl extends ServiceImpl<BasDevpMapper, BasDevp> implements BasDevpService {
+
+    @Autowired
+    private WrkMastService wrkMastService;
 
     @Override
     public List<Integer> getAvailableInSite(Long hostId) {
@@ -26,4 +34,29 @@
         return this.baseMapper.getAvailableOutSite(typeNo, hostId);
     }
 
+    @Override
+    public BasDevp checkSiteStatus(Integer devpNo, boolean pakin, Long hostId) {
+        BasDevp station = this.getOne(new LambdaQueryWrapper<BasDevp>().eq(BasDevp::getDevNo, devpNo).eq(BasDevp::getHostId, hostId));
+        if (station == null){
+            throw new CoolException(devpNo + "绔欑偣涓嶅瓨鍦�");
+        }
+        if (pakin) {
+            if(station.getAutoing()==null || !station.getAutoing().equals("Y")) {
+                throw new CoolException(devpNo + "绔欑偣涓嶆槸鑷姩鐘舵��");
+            }
+            if(station.getLoading()==null || !station.getLoading().equals("Y")) {
+                throw new CoolException(devpNo + "绔欑偣鏃犵墿");
+            }
+            if(station.getWrkNo()!=null && station.getWrkNo()>0 && station.getWrkNo() < 9990) {
+                throw new CoolException(devpNo + "绔欑偣宸叉湁宸ヤ綔鍙�");
+            }
+            if (wrkMastService.count(new LambdaQueryWrapper<WrkMast>()
+                    .eq(WrkMast::getSourceStaNo, devpNo)
+                    .in(WrkMast::getWrkSts, 1, 6)) > 0) {
+                throw new CoolException(devpNo + "绔欑偣涓嶈兘鍚屾椂鐢熸垚涓ょ瑪鍏ュ簱宸ヤ綔妗�");
+            }
+        }
+        return station;
+    }
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/WcsController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/WcsController.java
new file mode 100644
index 0000000..14ec09d
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/WcsController.java
@@ -0,0 +1,231 @@
+package com.zy.asrs.wms.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.common.domain.CodeRes;
+import com.zy.asrs.common.domain.dto.LocTypeDto;
+import com.zy.asrs.common.domain.dto.StartupDto;
+import com.zy.asrs.common.domain.param.SearchLocParam;
+import com.zy.asrs.common.web.BaseController;
+import com.zy.asrs.common.wms.entity.*;
+import com.zy.asrs.common.wms.service.*;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.R;
+import com.zy.asrs.framework.exception.CoolException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Created by vincent on 2020/10/30
+ */
+@Slf4j
+@RestController
+@RequestMapping("/rpc")
+public class WcsController extends BaseController {
+
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private BasDevpService basDevpService;
+    @Autowired
+    private CommonService commonService;
+    @Autowired
+    private WrkDetlService wrkDetlService;
+    @Autowired
+    private LocMastService locMastService;
+    @Autowired
+    private WaitPakinService waitPakinService;
+    @Autowired
+    private  LocDetlService locDetlService;
+
+    @PostMapping("/pakin/loc/v1")
+    @ResponseBody
+    public synchronized R getLocNo(@RequestBody SearchLocParam param) {
+        if (Cools.isEmpty(param.getIoType())) {
+            return R.error("鍏ュ嚭搴撶被鍨嬩笉鑳戒负绌�");
+        }
+        if (Cools.isEmpty(param.getSourceStaNo())) {
+            return R.error("婧愮珯缂栧彿涓嶈兘涓虹┖");
+        }
+        Long hostId = param.getHostId();
+        List<WaitPakin> waitPakins = null;
+        if (param.getIoType() == 1) {
+            if (Cools.isEmpty(param.getBarcode())) {
+                return R.error("鏉$爜涓嶈兘涓虹┖");
+            }
+            waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getZpallet, param.getBarcode()).eq(WaitPakin::getHostId, hostId));
+            if (Cools.isEmpty(waitPakins)) {
+                WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode(), hostId);
+                if (wrkMast != null && (wrkMast.getIoType() == 103 || wrkMast.getIoType() == 104 || wrkMast.getIoType() == 107)) {
+                    return R.parse(CodeRes.PICK_600);
+                }
+                return R.parse(CodeRes.NO_COMB_700);
+            }
+            int countLoc = locDetlService.count(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getZpallet, param.getBarcode()).eq(LocDetl::getHostId, hostId));
+            int countWrk = wrkDetlService.count(new LambdaQueryWrapper<WrkDetl>().eq(WrkDetl::getZpallet, param.getBarcode()).eq(WrkDetl::getHostId, hostId));
+            if (countLoc > 0 || countWrk > 0) {
+                return R.error("宸ヤ綔妗�/搴撳瓨鏉$爜鏁版嵁宸插瓨鍦�");
+            }
+        }
+        if (Cools.isEmpty(param.getLocType1())){
+            return R.error("楂樹綆妫�娴嬩俊鍙蜂笉鑳戒负绌�");
+        }
+
+        // 婧愮珯鐐圭姸鎬佹娴�
+        BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getSourceStaNo(), true, hostId);
+        sourceStaNo.setLocType1(param.getLocType1());
+        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
+
+        StartupDto dto = null;
+        switch (param.getIoType()) {
+            case 1://婊℃墭鐩樺叆搴�
+                assert waitPakins != null;
+                dto = startupFullPutStore(param.getSourceStaNo(), param.getBarcode(), locTypeDto, waitPakins, hostId);
+                break;
+            case 10://绌烘墭鐩樺叆搴�
+                dto = emptyPlateIn(param.getSourceStaNo(), locTypeDto, param.getBarcode(), hostId);
+                break;
+            default:
+                break;
+        }
+        log.info("/pakin/loc/v1:"+dto + "======鎵樼洏鐮�:"+param.getBarcode());
+        return R.ok().add(dto);
+    }
+
+
+    /**
+     * 鍏ㄦ澘鍏ュ簱
+     */
+    @Transactional
+    public StartupDto startupFullPutStore(Integer devpNo, String barcode, LocTypeDto locTypeDto, List<WaitPakin> waitPakins, Long hostId) {
+        // 婧愮珯鐐圭姸鎬佹娴�
+        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true, hostId);
+        // 妫�绱㈠簱浣�
+        List<String> matNos = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList());
+        StartupDto dto = commonService.getLocNo(1, devpNo, hostId, locTypeDto, 0);
+        int workNo = dto.getWorkNo();
+        Date now = new Date();
+        // 鐢熸垚宸ヤ綔妗�
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(new Date());
+        wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細1.鐢熸垚鍏ュ簱
+        wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱
+        wrkMast.setIoPri(13D); // 浼樺厛绾�
+        wrkMast.setSourceStaNo(dto.getSourceStaNo());
+        wrkMast.setStaNo(dto.getStaNo());
+        wrkMast.setLocNo(dto.getLocNo());
+        wrkMast.setBarcode(barcode); // 鎵樼洏鐮�
+        wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+        wrkMast.setPicking("N"); // 鎷f枡
+        wrkMast.setExitMk("N"); // 閫�鍑�
+        wrkMast.setEmptyMk("N"); // 绌烘澘
+        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷
+        // 鎿嶄綔浜哄憳鏁版嵁
+        wrkMast.setAppeTime(now);
+        wrkMast.setModiTime(now);
+        wrkMast.setHostId(hostId);
+        boolean res = wrkMastService.save(wrkMast);
+        if (!res) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+        // 鐢熸垚宸ヤ綔妗f槑缁�
+        waitPakins.forEach(waitPakin -> {
+            WrkDetl wrkDetl = new WrkDetl();
+            wrkDetl.sync(waitPakin);
+            wrkDetl.setWrkNo(wrkMast.getWrkNo());
+            wrkDetl.setIoTime(wrkMast.getIoTime());
+            wrkDetl.setAppeTime(now);
+            wrkDetl.setModiTime(now);
+            wrkDetl.setHostId(hostId);
+            if (!wrkDetlService.save(wrkDetl)) {
+                throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏澶辫触");
+            }
+        });
+        // 鏇存柊鍏ュ簱閫氱煡妗� ioStatus ===>> Y
+        LambdaQueryWrapper<WaitPakin> wrapper = new LambdaQueryWrapper<WaitPakin>()
+                .eq(WaitPakin::getZpallet, barcode)
+                .eq(WaitPakin::getHostId, hostId);
+        WaitPakin setParam = new WaitPakin();
+        setParam.setIoStatus("Y");
+        setParam.setModiTime(now);
+        if (!waitPakinService.update(setParam, wrapper)) {
+            throw new CoolException("鏇存柊閫氱煡妗eけ璐�");
+        }
+        // 鏇存柊婧愮珯鐐逛俊鎭�
+        sourceStaNo.setWrkNo(workNo);
+        sourceStaNo.setModiTime(now);
+        if (!basDevpService.updateById(sourceStaNo)) {
+            throw new CoolException("鏇存柊婧愮珯澶辫触");
+        }
+        // 鏇存柊鐩爣搴撲綅鐘舵��
+        LocMast locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, dto.getLocNo()).eq(LocMast::getHostId, hostId));
+        if (locMast.getLocSts().equals("O")) {
+            locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
+            locMast.setModiTime(now);
+            if (!locMastService.updateById(locMast)) {
+                throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤");
+        }
+        return dto;
+    }
+
+    @Transactional
+    public StartupDto emptyPlateIn(Integer devpNo, LocTypeDto locTypeDto, String barcode, Long hostId) {
+        // 婧愮珯鐐圭姸鎬佹娴�
+        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true, hostId);
+        // 妫�绱㈠簱浣�
+        StartupDto dto = commonService.getLocNo(10, devpNo, hostId, locTypeDto, 0);
+        int workNo = dto.getWorkNo();
+        // 鐢熸垚宸ヤ綔妗�
+        WrkMast wrkMast = new WrkMast();
+        wrkMast.setWrkNo(workNo);
+        wrkMast.setIoTime(new Date());
+        wrkMast.setWrkSts(1L); // 宸ヤ綔鐘舵�侊細1.鐢熸垚鍏ュ簱
+        wrkMast.setIoType(10); // 鍏ュ嚭搴撶姸鎬侊細10.绌烘澘鍏ュ簱
+        wrkMast.setIoPri(13D); // 浼樺厛绾�
+        wrkMast.setSourceStaNo(dto.getSourceStaNo());
+        wrkMast.setStaNo(dto.getStaNo());
+        wrkMast.setLocNo(dto.getLocNo());
+        wrkMast.setFullPlt("N"); // 婊℃澘
+        wrkMast.setPicking("N"); // 鎷f枡
+        wrkMast.setExitMk("N"); // 閫�鍑�
+        wrkMast.setEmptyMk("Y"); // 绌烘澘
+        wrkMast.setBarcode(barcode);
+        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷
+        // 鎿嶄綔浜哄憳鏁版嵁
+        wrkMast.setAppeTime(new Date());
+        wrkMast.setModiTime(new Date());
+        wrkMast.setHostId(hostId);
+        boolean res = wrkMastService.save(wrkMast);
+        if (!res) {
+            throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+        }
+        // 鏇存柊婧愮珯鐐逛俊鎭�
+        sourceStaNo.setWrkNo(workNo);
+        sourceStaNo.setModiTime(new Date());
+        if (!basDevpService.updateById(sourceStaNo)) {
+            throw new CoolException("鏇存柊婧愮珯澶辫触");
+        }
+        // 鏇存柊鐩爣搴撲綅鐘舵��
+        LocMast locMast = locMastService.getOne(new LambdaQueryWrapper<LocMast>().eq(LocMast::getLocNo, dto.getLocNo()).eq(LocMast::getHostId, hostId));
+        if (locMast.getLocSts().equals("O")) {
+            locMast.setLocSts("S"); // S.鍏ュ簱棰勭害
+            locMast.setModiTime(new Date());
+            if (!locMastService.updateById(locMast)) {
+                throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�");
+            }
+        } else {
+            throw new CoolException(dto.getLocNo() + "鐩爣搴撲綅宸茶鍗犵敤");
+        }
+        return dto;
+    }
+
+}

--
Gitblit v1.9.1