From ffc4d0526bf02e7e00a7872d05a1e67e520e59d6 Mon Sep 17 00:00:00 2001
From: yangyang
Date: 星期一, 02 六月 2025 12:06:40 +0800
Subject: [PATCH] 新增自动盘点功能
---
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/schedule/ScheduleJobs.java | 102 +++++++++++++++++++++++++++++++--
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java | 9 +-
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java | 2
zy-asrs-admin/src/views/task/task/index.vue | 3 +
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java | 7 +
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java | 19 ++++--
6 files changed, 121 insertions(+), 21 deletions(-)
diff --git a/zy-asrs-admin/src/views/task/task/index.vue b/zy-asrs-admin/src/views/task/task/index.vue
index 342cc03..6643796 100644
--- a/zy-asrs-admin/src/views/task/task/index.vue
+++ b/zy-asrs-admin/src/views/task/task/index.vue
@@ -401,6 +401,9 @@
<a-button v-if="record.taskType == 103" type="link" primary @click="handlePick(record)">{{
formatMessage('page.pick', '鎷f枡')
}}</a-button>
+ <a-button v-if="record.taskType == 107 && record.taskSts == 198" type="link" primary @click="handlePick(record)">{{
+ formatMessage('page.pick', '鐩樼偣')
+ }}</a-button>
<a-button type="link" primary @click="handleComplete(record)">{{ formatMessage('page.complete', '瀹屾垚')
}}</a-button>
<a-button type="link" danger @click="handleCancel(record)">{{ formatMessage('page.cancel', '鍙栨秷')
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/schedule/ScheduleJobs.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/schedule/ScheduleJobs.java
index b86c0bd..e962018 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/schedule/ScheduleJobs.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/schedule/ScheduleJobs.java
@@ -15,10 +15,13 @@
import com.zy.asrs.wms.apis.wcs.entity.request.TaskDescribe;
import com.zy.asrs.wms.apis.wcs.entity.request.TaskParam;
import com.zy.asrs.wms.apis.wcs.entity.response.CommonReponse;
-import com.zy.asrs.wms.asrs.entity.Task;
+import com.zy.asrs.wms.asrs.entity.*;
+import com.zy.asrs.wms.asrs.entity.dto.OrderOutMergeDto;
+import com.zy.asrs.wms.asrs.entity.enums.LocStsType;
import com.zy.asrs.wms.asrs.entity.enums.TaskStsType;
-import com.zy.asrs.wms.asrs.service.TaskService;
-import com.zy.asrs.wms.asrs.service.WorkService;
+import com.zy.asrs.wms.asrs.service.*;
+import com.zy.asrs.wms.asrs.service.impl.LocServiceImpl;
+import com.zy.asrs.wms.utils.Utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
@@ -49,9 +52,22 @@
private RestTemplate restTemplate;
@Autowired
private WorkService workService;
-
@Resource
private SystemProperties properties;
+ @Autowired
+ private LocServiceImpl locService;
+ @Autowired
+ private LocDetlService locDetlService;
+ @Autowired
+ private TaskDetlService taskDetlService;
+ @Autowired
+ private LocDetlFieldService locDetlFieldService;
+ @Autowired
+ private TaskDetlFieldService taskDetlFieldService;
+ @Autowired
+ private CacheSiteService cacheSiteService;
+ @Autowired
+ private OperationPortService operationPortService;
/***
* 鍏ュ簱浠诲姟---閫氱煡ESS杈撻�佺嚎娴佸姩
@@ -98,6 +114,78 @@
}
});
+ }
+
+ /**
+ * 鐢熸垚鑷姩鐩樼偣浠诲姟
+ */
+ @Scheduled(cron = "0/50 * * * * ?")
+ @Transactional(rollbackFor = Exception.class)
+ public void genCheckTask() {
+ Loc locs = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocStsId, LocStsType.F.val()).orderByAsc(Loc::getLocNo).last("limit 1"));
+ if (Objects.isNull(locs)) {
+ return;
+ }
+ List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().select(Task::getId).eq(Task::getTaskType, 107L));
+ if (!tasks.isEmpty() && tasks.size() >= 4) {
+ //榛樿鐢熸垚鍥涗釜鐩樼偣浠诲姟锛岃秴杩�4涓紝鍋滄鐢熸垚鐩樼偣浠诲姟;
+ return;
+ }
+ OperationPort operationPort = operationPortService.getOne(new LambdaQueryWrapper<OperationPort>().last("ORDER BY RAND() LIMIT 1;"));
+ if (operationPort == null || Objects.isNull(operationPort)) {
+ throw new CoolException("浣滀笟鍙d笉瀛樺湪");
+ }
+ Task task = new Task();
+ task.setTaskNo(workService.generateTaskNo(TaskStsType.GENERATE_OUT.id));
+ task.setTaskSts(TaskStsType.GENERATE_OUT.id);
+ task.setTaskType(107L); //榛樿107鐩樼偣浠诲姟锛岀洏鐐逛换鍔℃病鏈夛紝鎸�103澶勭悊
+ task.setIoPri(workService.generateIoPri(TaskStsType.GENERATE_OUT.id));
+ task.setOriginLoc(locs.getLocNo());
+ task.setTargetSite(operationPort.getFlag());
+ task.setBarcode(locs.getBarcode());
+
+ if (!taskService.save(task)) {
+ throw new CoolException("浠诲姟鐢熸垚澶辫触锛侊紒");
+ }
+
+ List<LocDetl> locDetls = locDetlService.list(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocId, locs.getId()));
+ if (locDetls.isEmpty()) {
+ throw new CoolException("鏄庣粏涓嶅瓨鍦紒锛�");
+ }
+
+ for (LocDetl locDetl : locDetls) {
+ TaskDetl taskDetl = new TaskDetl();
+ taskDetl.sync(locDetl);
+ taskDetl.setId(null);
+ taskDetl.setTaskId(task.getId());
+ taskDetl.setTaskNo(task.getTaskNo());
+ taskDetl.setAnfme(locDetl.getAnfme());
+ taskDetl.setStock(locDetl.getAnfme());
+ taskDetl.setWaveId(null);
+ taskDetl.setWaveNo(null);
+ taskDetl.setOrderId(null);
+ taskDetl.setOrderNo(null);
+ if (!taskDetlService.save(taskDetl)) {
+ throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+ }
+
+ List<LocDetlField> locDetlFields = locDetlFieldService.list(new LambdaQueryWrapper<LocDetlField>().eq(LocDetlField::getDetlId, locDetl.getId()));
+ for (LocDetlField locDetlField : locDetlFields) {
+ TaskDetlField taskDetlField = new TaskDetlField();
+ taskDetlField.sync(locDetlField);
+ taskDetlField.setId(null);
+ taskDetlField.setDetlId(taskDetl.getId());
+ if (!taskDetlFieldService.save(taskDetlField)) {
+ throw new CoolException("鏄庣粏鎵╁睍鐢熸垚澶辫触");
+ }
+ }
+ }
+
+ if (!locService.update(new LambdaUpdateWrapper<Loc>().eq(Loc::getId, locs.getId())
+ .set(Loc::getUpdateTime, new Date())
+ .set(Loc::getLocStsId, LocStsType.R.val()))) {
+ throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
}
@@ -211,7 +299,7 @@
// } else {
// CommonReponse commonReponse = JSON.toJavaObject(JSON.parseObject(exchange.getBody()), CommonReponse.class);
// if (commonReponse.getCode() == 0) {
- //娴佸姩閫氱煡涓嬪彂瀹屾垚鍚庯紝淇敼浠诲姟鐘舵�佷负杈撻�佺嚎娴佸姩涓�傘��
+ //娴佸姩閫氱煡涓嬪彂瀹屾垚鍚庯紝淇敼浠诲姟鐘舵�佷负杈撻�佺嚎娴佸姩涓�傘��
// taskService.update(new LambdaUpdateWrapper<Task>()
// .eq(Task::getId, task.getId())
// .set(Task::getTaskSts, TaskStsType.COMPLETE_OUT.id));
@@ -244,8 +332,8 @@
public void waveToTask() throws JsonProcessingException {
//鑾峰彇褰撳墠浠诲姟妗d腑锛屾墍鏈変负寰呭嚭搴撶姸鎬佺殑浠诲姟妗o紝鎸夋椂闂村崌搴忔帓鍒�
List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
- .ge(Task::getTaskType, 101) //TODO 濡備綍纭鏄�101锛岃繕鏄�103
- .eq(Task::getTaskSts, TaskStsType.GENERATE_OUT.id));
+ .ge(Task::getTaskType, 101) //TODO 濡備綍纭鏄�101锛岃繕鏄�103
+ .eq(Task::getTaskSts, TaskStsType.GENERATE_OUT.id));
if (tasks.isEmpty()) {
return;
}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
index e3cc7d2..2f98da3 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
@@ -584,7 +584,7 @@
locDto.setWorkQty(detl.getWorkQty());
locDtos.add(locDto);
//搴撲綅瀹為檯鍙敤鏁伴噺
- double surplusQty = detl.getAnfme() - detl.getWorkQty();
+ Double surplusQty = Math.round((detl.getAnfme() - detl.getWorkQty()) * 10000) / 10000.0;
if (surplusQty <= 0) {
continue;
}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
index 04a9034..a4255b7 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
@@ -441,13 +441,12 @@
} else {
//鍑哄簱
TaskDetl taskDetl = taskDetls.get(0); //TODO 鍑哄簱娴佺▼寰呯‘璁わ紝ESS鍙栬揣鍚庯紝杈撻�佺嚎娴佽浆鍒版壂鐮佸鐘舵��
- if (taskDetl.getWaveId() == null) {
+ if (taskDetl.getWaveId() == null && task.getTaskType() != 103 && task.getTaskType() != 107) {
task.setTaskSts(TaskStsType.COMPLETE_OUT.id);//199.鍑哄簱瀹屾垚
} else {
task.setTaskSts(TaskStsType.WAVE_SEED.id);//198.鎾涓�
}
}
-
task.setUpdateTime(new Date());
if (!taskService.updateById(task)) {
throw new CoolException("浠诲姟鏇存柊澶辫触");
@@ -639,7 +638,7 @@
throw new CoolException("浠诲姟涓嶅瓨鍦�");
}
- if (task.getTaskType() != 103) {
+ if (task.getTaskType() != 103 && task.getTaskType() != 107) {
throw new CoolException("浠诲姟绫诲瀷涓嶅彲鎷f枡");
}
@@ -654,7 +653,9 @@
}
//鑾峰彇婧愬簱浣嶉珮搴�
- LocTypeBind locTypeBind = locTypeBindService.getOne(new LambdaQueryWrapper<LocTypeBind>().eq(LocTypeBind::getLocId, originLoc.getId()).in(LocTypeBind::getTypeId, LocBindType.HEIGHT.list()));
+ LocTypeBind locTypeBind = locTypeBindService.getOne(new LambdaQueryWrapper<LocTypeBind>()
+ .eq(LocTypeBind::getLocId, originLoc.getId())
+ .in(LocTypeBind::getTypeId, LocBindType.HEIGHT.list()));
if (locTypeBind == null) {
throw new CoolException("搴撲綅绫诲瀷涓嶅瓨鍦�");
}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java
index fb292e4..6036add 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java
@@ -87,6 +87,7 @@
executeTask11(task);
break;
case 53://鎷f枡鍐嶅叆搴�
+ case 57:
executeTask53(task);
break;
default:
@@ -147,6 +148,7 @@
executeTask101(task);
break;
case 103://鎷f枡
+ case 107:
executeTask103(task);
break;
default:
@@ -323,7 +325,8 @@
* @param task
*/
//鎷f枡鍐嶅叆搴�
- private void executeTask53(Task task) {
+ @Transactional(rollbackFor = Exception.class)
+ public void executeTask53(Task task) {
Long hostId = task.getHostId();
Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, task.getTargetLoc()).eq(Loc::getHostId, hostId));
if (loc == null) {
@@ -431,7 +434,7 @@
if (loc == null) {
throw new CoolException("搴撲綅涓嶅瓨鍦�");
}
- if (loc.getLocStsId() != LocStsType.S.val()) {
+ if (loc.getLocStsId() != LocStsType.R.val()) {
throw new CoolException("搴撲綅鐘舵�佷笉澶勪簬R.鍑哄簱棰勭害");
}
List<TaskDetl> taskDetls = taskDetlService.getTaskDetlByTaskId(task.getId());
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java
index bf8d372..704f4c3 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java
@@ -63,7 +63,8 @@
}
//鏌ヨ鐘舵�佷负RCS浠诲姟瀹屾垚鎵�鏈変换鍔″崟鎹�
// List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.WAVE_SEED.id));
- List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.WCS_EXECUTE_OUT.id)); HashSet<String> sycMatnrs = new HashSet<>();
+ List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.WCS_EXECUTE_OUT.id));
+ HashSet<String> sycMatnrs = new HashSet<>();
if (taskList.isEmpty()) {
// throw new CoolException("娌℃湁鍙挱绉嶄换鍔★紒锛�");
} else {
@@ -84,7 +85,7 @@
//鍒嗛厤璁㈠崟
Long waveId = taskDetl.getWaveId();
//鍚屼竴涓墿鏂欏彧娣诲姞涓�娆℃挱绉嶄换鍔�
- if(sycMatnrs.contains(taskDetl.getMatnr())) {
+ if (sycMatnrs.contains(taskDetl.getMatnr())) {
continue;
}
sycMatnrs.add(taskDetl.getMatnr());
@@ -104,7 +105,7 @@
.in(OrderDetl::getOrderId, orderIds)
.eq(OrderDetl::getStockIndex, matUniqueKey)
.eq(OrderDetl::getHostId, hostId));
- if(orderDetls.isEmpty()){
+ if (orderDetls.isEmpty()) {
throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�");
}
@@ -112,11 +113,15 @@
for (OrderDetl orderDetl : orderDetls) {
//fixme 浣滀笟涓暟閲忚皟鏁存斁鑷筹紝鐢熸垚鍑哄簱浠诲姟鎴愬姛鍚�
double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty() - orderDetl.getWorkQty()).orElse(0.0D);
- if (issued <= 0.0D) { continue; }
- if (anfme <= 0.0D) { break; }
+ if (issued <= 0.0D) {
+ continue;
+ }
+ if (anfme <= 0.0D) {
+ break;
+ }
double workQty = issued;
- if(anfme - issued < 0){
+ if (anfme - issued < 0) {
workQty = anfme;
}
anfme -= workQty;
@@ -168,7 +173,7 @@
} catch (Exception e) {
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- }finally {
+ } finally {
InterceptorIgnoreHelper.clearIgnoreStrategy();
}
}
--
Gitblit v1.9.1