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