From 61814ecc0e12f8bb84eb4c8c7dc1478cf6ebd8e8 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期四, 17 十月 2024 16:14:32 +0800
Subject: [PATCH] agv申请组托,agv申请出库
---
src/main/java/com/zy/asrs/controller/OpenController.java | 39 +++++++++
src/main/java/com/zy/asrs/entity/param/AgvGroupingParam.java | 40 ++++++++++
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java | 136 +++++++++++++++++++++++++++++++++
src/main/java/com/zy/asrs/service/OpenService.java | 12 +++
4 files changed, 222 insertions(+), 5 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/OpenController.java b/src/main/java/com/zy/asrs/controller/OpenController.java
index 8ebafbe..ada1af4 100644
--- a/src/main/java/com/zy/asrs/controller/OpenController.java
+++ b/src/main/java/com/zy/asrs/controller/OpenController.java
@@ -2,11 +2,13 @@
import com.alibaba.fastjson.JSON;
import com.core.annotations.AppAuth;
-import com.core.common.*;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.service.OpenService;
-import com.zy.common.model.DetlDto;
+import com.zy.common.model.LocDto;
import com.zy.common.web.BaseController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -14,7 +16,6 @@
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
-import java.util.Date;
import java.util.List;
/**
@@ -33,6 +34,38 @@
@Autowired
private OpenService openService;
+ @PostMapping("/grouping")
+ @AppAuth(memo = "AGV缁勬墭璋冪敤")
+ public synchronized R grouping(@RequestHeader(required = false) String appkey,
+ @RequestBody(required = false) AgvGroupingParam param,
+ HttpServletRequest request){
+ auth(appkey, param, request);
+ if (Cools.isEmpty(param.getOrderNo())) {
+ param.setOrderNo(param.getBillNo());
+ }
+ List<AgvGroupingParam.CombMat> combMats = param.getCombMats();
+ combMats.forEach(elem -> {
+ if (Cools.isEmpty(elem.getBatch())) {
+ elem.setBatch(elem.getItemBatch());
+ }
+ });
+
+ return openService.grouping(param);
+ }
+
+ @PostMapping("/outbound")
+ @AppAuth(memo = "AGV鍑哄簱璋冪敤")
+ public synchronized R outbound(@RequestHeader(required = false) String appkey,
+ @RequestBody(required = false) List<LocDto> locDtos,
+ HttpServletRequest request) throws InterruptedException {
+ auth(appkey, locDtos, request);
+ if (Cools.isEmpty(locDtos)) {
+ return R.parse(BaseRes.PARAM);
+ }
+
+ return openService.outbound(locDtos);
+ }
+
@PostMapping("/order/matSync/default/v1")
@AppAuth(memo = "鍟嗗搧淇℃伅鍚屾鎺ュ彛")
public synchronized R syncMatInfo(@RequestHeader(required = false) String appkey,
diff --git a/src/main/java/com/zy/asrs/entity/param/AgvGroupingParam.java b/src/main/java/com/zy/asrs/entity/param/AgvGroupingParam.java
new file mode 100644
index 0000000..a0733df
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/param/AgvGroupingParam.java
@@ -0,0 +1,40 @@
+package com.zy.asrs.entity.param;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author pang.jiabao
+ * @description agv缁勬墭璋冪敤鍏ュ弬
+ * @createDate 2024/10/16 15:11
+ */
+@Data
+public class AgvGroupingParam {
+ // 鍗曟嵁缂栧彿
+ private String billNo;
+
+ // 鍗曟嵁缂栧彿
+ private String orderNo;
+
+ // 鎵樼洏鏉$爜
+ private String barcode;
+
+ private List<CombMat> combMats;
+
+ @Data
+ public static class CombMat {
+
+ private Long detlId;
+
+ // 搴忓垪鐮�
+ private String itemBatch;
+
+ // 搴忓垪鐮�
+ private String batch;
+
+ // 鐗╂枡鏁伴噺
+ private Double anfme;
+
+ }
+}
diff --git a/src/main/java/com/zy/asrs/service/OpenService.java b/src/main/java/com/zy/asrs/service/OpenService.java
index afd90b1..79e11cd 100644
--- a/src/main/java/com/zy/asrs/service/OpenService.java
+++ b/src/main/java/com/zy/asrs/service/OpenService.java
@@ -1,14 +1,26 @@
package com.zy.asrs.service;
+import com.core.common.R;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.OpenOrderCompeteResult;
import com.zy.asrs.entity.result.StockVo;
+import com.zy.common.model.LocDto;
import java.util.List;
public interface OpenService {
/**
+ * AGV缁勬墭璋冪敤
+ */
+ R grouping(AgvGroupingParam param);
+
+ /**
+ * AGV鍑哄簱璋冪敤
+ */
+ R outbound(List<LocDto> locDtos) throws InterruptedException;
+
+ /**
* 娣诲姞鍏ュ簱鍗�
*/
void pakinOrderCreate(OpenOrderPakinParam param);
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index 83d3856..f7a6ce8 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1,8 +1,9 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.BaseRes;
import com.core.common.Cools;
-import com.core.common.DateUtils;
+import com.core.common.R;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
@@ -12,13 +13,15 @@
import com.zy.asrs.mapper.TagMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.MatUtils;
-import com.zy.common.model.DetlDto;
+import com.zy.common.model.LocDto;
+import com.zy.common.model.TaskDto;
import com.zy.common.utils.NodeUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -49,6 +52,135 @@
@Autowired
private TagMapper tagMapper;
+ @Resource
+ private WaitPakinService waitPakinService;
+
+ @Resource
+ private WrkDetlService wrkDetlService;
+
+ @Resource
+ private WorkService workService;
+
+ @Resource
+ private BasDevpService basDevpService;
+
+
+ @Override
+ @Transactional
+ public R grouping(AgvGroupingParam param) {
+
+ if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
+ throw new CoolException(BaseRes.PARAM);
+ }
+
+ // 鍒ゆ柇鏄惁鏈夌浉鍚屾潯鐮佺殑鏁版嵁
+ if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
+ eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) {
+ throw new CoolException(param.getBarcode() + "鏁版嵁姝e湪杩涜鍏ュ簱");
+ }
+
+ if (param.getBarcode().length() != 8) {
+ throw new CoolException("鏉$爜闀垮害涓嶆槸8浣�===>>" + param.getBarcode());
+ }
+
+ int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", param.getBarcode()));
+ int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", param.getBarcode()));
+ int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
+ if (countLoc > 0 || countWrk > 0 || countwait > 0) {
+ throw new CoolException("缁勬墭妗�/宸ヤ綔妗�/搴撳瓨鏉$爜鏁版嵁宸插瓨鍦�===>>" + param.getBarcode());
+ }
+
+ Date now = new Date();
+
+ Order order = orderService.selectOne(new EntityWrapper<Order>().eq("temp1", param.getOrderNo()));
+ if (Cools.isEmpty(order) || order.getSettle() > 2) {
+ throw new CoolException("鍗曟嵁缂栧彿宸茶繃鏈�");
+ }
+ // 鐢熸垚鍏ュ簱閫氱煡妗�
+ param.getCombMats().forEach(elem -> {
+
+ // 璁㈠崟鏄庣粏鏁伴噺鏍¢獙
+ OrderDetl orderDetl = orderDetlService.selectById(elem.getDetlId());
+ if (elem.getAnfme() > orderDetl.getEnableQty()) {
+ throw new CoolException(orderDetl.getMatnr() + "鍏ュ簱鏁伴噺涓嶅悎娉�");
+ }
+ // 淇敼璁㈠崟浣滀笟鏁伴噺
+ if (!orderDetlService.increaseWorkQty(orderDetl, elem.getAnfme())) {
+ throw new CoolException("淇敼鍗曟嵁浣滀笟鏁伴噺澶辫触");
+ }
+
+ Mat mat = matService.selectByMatnr(orderDetl.getMatnr());
+ if (Cools.isEmpty(mat)) {
+ throw new CoolException(orderDetl.getMatnr() + "鍟嗗搧妗f涓嶅瓨鍦�");
+ }
+ WaitPakin waitPakin = new WaitPakin();
+ waitPakin.sync(mat);
+ waitPakin.setOrderNo(order.getOrderNo()); // 鍗曟嵁缂栧彿
+ waitPakin.setBatch(orderDetl.getBatch()); // 搴忓垪鐮�
+ waitPakin.setZpallet(param.getBarcode()); // 鎵樼洏鐮�
+ waitPakin.setIoStatus("N"); // 鍏ュ嚭鐘舵��
+ waitPakin.setAnfme(elem.getAnfme()); // 鏁伴噺
+ waitPakin.setStatus("Y"); // 鐘舵��
+ waitPakin.setAppeTime(now);
+ waitPakin.setModiTime(now);
+
+ waitPakin.setBatch(orderDetl.getBatch());
+ waitPakin.setSPgNO(orderDetl.getSPgNO());
+ waitPakin.setOutOrderNo(orderDetl.getOutOrderNo());
+ waitPakin.setProType(orderDetl.getProType());
+ waitPakin.setLuHao(orderDetl.getLuHao());
+ waitPakin.setPacking(orderDetl.getPacking());
+ if (!waitPakinService.insert(waitPakin)) {
+ throw new CoolException("淇濆瓨鍏ュ簱閫氱煡妗eけ璐�");
+ }
+ });
+
+ orderService.updateSettle(order.getId(), 2L, null);
+ return R.ok("缁勬墭鎴愬姛");
+ }
+
+ @Override
+ @Transactional
+ public R outbound(List<LocDto> locDtos) throws InterruptedException {
+ if (Cools.isEmpty(locDtos)) {
+ return R.parse(BaseRes.PARAM);
+ }
+ boolean lack = true;
+ for (LocDto locDto : locDtos) {
+ if (!locDto.isLack()) {
+ lack = false;
+ break;
+ }
+ }
+ if (lack) {
+ return R.error("搴撳瓨涓嶈冻");
+ }
+
+ Thread.sleep(1000L);
+
+ List<TaskDto> taskDtos = new ArrayList<>();
+ // 鏍规嵁 锛堝簱浣� & 鍑哄簱绔欙級 鍒嗙粍锛� 鐞嗘兂鐘舵�侊細涓�缁勪负涓�娆″嚭搴撲换鍔�
+ for (LocDto locDto : locDtos) {
+ if (locDto.isLack()) {
+ continue;
+ }
+ TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto);
+ if (TaskDto.has(taskDtos, taskDto)) {
+ TaskDto dto = TaskDto.find(taskDtos, taskDto);
+ assert dto != null;
+ dto.getLocDtos().addAll(taskDto.getLocDtos());
+ } else {
+ taskDtos.add(taskDto);
+ }
+ }
+ // -----------------------------------------------------------------------------------------------
+ for (TaskDto taskDto : taskDtos) {
+ BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
+ workService.stockOut(staNo, taskDto, null);
+ }
+ return R.ok("鍑哄簱鎴愬姛");
+ }
+
@Override
@Transactional
public void pakinOrderCreate(OpenOrderPakinParam param) {
--
Gitblit v1.9.1