From 1c7184503554a6728895489b084cc4b523f261f2 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期五, 23 五月 2025 09:39:48 +0800
Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop
---
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java | 215 +++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 157 insertions(+), 58 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
index b2e2d4f..1ccabdd 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
@@ -7,19 +7,15 @@
import com.vincent.rsf.server.api.entity.dto.InTaskMsgDto;
import com.vincent.rsf.server.api.entity.dto.LocTypeDto;
import com.vincent.rsf.server.api.controller.params.TaskInParam;
-import com.vincent.rsf.server.api.entity.enums.OrderType;
-import com.vincent.rsf.server.api.entity.enums.TaskStsType;
-import com.vincent.rsf.server.api.entity.enums.TaskType;
+import com.vincent.rsf.server.manager.enums.*;
import com.vincent.rsf.server.api.service.WcsService;
import com.vincent.rsf.server.api.utils.LocUtils;
import com.vincent.rsf.server.api.utils.SlaveProperties;
import com.vincent.rsf.server.manager.entity.*;
-import com.vincent.rsf.server.manager.enums.PakinIOStatus;
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.manager.service.impl.LocServiceImpl;
-import com.vincent.rsf.server.manager.utils.LocManageUtil;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
-import com.vincent.rsf.server.system.enums.LocStsType;
+import com.vincent.rsf.server.manager.enums.LocStsType;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
@@ -27,7 +23,6 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -54,10 +49,41 @@
private TaskItemService taskItemService;
@Autowired
private WaitPakinItemService waitPakinItemService;
+ @Autowired
+ private BasStationService basStationService;
+
@Override
@Transactional(rollbackFor = Exception.class)
- public InTaskMsgDto createInTask(TaskInParam param, Long loginUserId) {
+ public void agvTaskPickUpComplete(TaskInParam param) {
+ Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
+ .eq(Task::getBarcode, param.getBarcode())
+ );
+ if (null == task) {
+ throw new CoolException("鏈壘鍒颁换鍔′俊鎭�");
+ }
+// if (!task.getTaskStatus().equals(TaskStsType.WCS_CONVEYOR_START.id)){
+// throw new CoolException("浠诲姟鐘舵�佹湁璇�");
+// }
+ BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+ .eq(BasStation::getStationName, param.getSourceStaNo())
+ );
+ if (null == basStation) {
+ throw new CoolException("鏈壘鍒扮珯鐐逛俊鎭�");
+ }
+ task.setTaskStatus(TaskStsType.WCS_EXECUTE_OUT_TOTE_LOAD.id);
+ taskService.updateById(task);
+
+ basStation.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
+ basStation.setBarcode(null);
+ basStationService.updateById(basStation);
+
+
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public InTaskMsgDto createInTask(TaskInParam param) {
// 鑾峰彇搴撲綅鍙�
InTaskMsgDto locNo = getLocNo(param);
@@ -72,7 +98,7 @@
// 鍒涘缓骞朵繚瀛樹换鍔�
Task task = createTask(ruleCode, locNo.getLocNo(), waitPakin.getBarcode(),
- deviceSite.getDeviceSite(), param.getSourceStaNo().toString(), loginUserId);
+ deviceSite.getDeviceSite(), param.getSourceStaNo().toString(), param.getUser());
// 鏇存柊搴撲綅鐘舵��
updateLocStatus(task.getTargLoc(), waitPakin.getBarcode());
@@ -81,15 +107,16 @@
List<WaitPakinItem> waitPakinItems = getWaitPakinItems(waitPakin.getId());
// 鍒涘缓骞朵繚瀛樹换鍔℃槑缁�
- saveTaskItems(task.getId(), waitPakinItems, loginUserId);
+ saveTaskItems(task.getId(), waitPakinItems, param.getUser());
// 鏇存柊缁勬墭鐘舵��
- updateWaitPakinStatus(param.getBarcode(), loginUserId);
+ updateWaitPakinStatus(param.getBarcode(), param.getUser());
// 璁剧疆宸ヤ綔鍗曞彿骞惰繑鍥�
locNo.setWorkNo(ruleCode);
return locNo;
}
+
/**
* 楠岃瘉璁惧绔欑偣
@@ -137,8 +164,9 @@
String targetSite, String sourceSiteNo, Long loginUserId) {
Task task = new Task();
task.setTaskCode(ruleCode)
- .setTaskStatus(TaskStsType.GENERATE_IN.id.shortValue())
- .setTaskType(TaskType.TASK_TYPE_IN.type.shortValue())
+ .setTaskStatus(TaskStsType.GENERATE_IN.id)
+ .setTaskType(TaskType.TASK_TYPE_IN.type)
+ .setWarehType(WarehType.WAREHOUSE_TYPE_CRN.id)
.setTargLoc(targetLoc)
.setBarcode(barcode)
.setTargSite(targetSite)
@@ -188,7 +216,7 @@
BeanUtils.copyProperties(item, taskItem);
return taskItem.setTaskId(taskId)
- .setOrderType(OrderType.ORDER_RECEIPT.type)
+ .setOrderType(OrderType.ORDER_IN.type)
.setSource(item.getId())
.setTrackCode(item.getTrackCode())
.setCreateBy(loginUserId)
@@ -269,10 +297,11 @@
// waitPakinItems.forEach(item -> {
// TaskItem taskItem = new TaskItem();
// BeanUtils.copyProperties(item, taskItem);
-//// AsnOrder order = asnOrderService.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, item.getAsnId()));
-//// if (Objects.isNull(order)) {
-//// throw new CoolException("鏁版嵁閿欒: 鍗曟嵁涓嶅瓨鍦紒锛�");
-//// }
+
+ /// / AsnOrder order = asnOrderService.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, item.getAsnId()));
+ /// / if (Objects.isNull(order)) {
+ /// / throw new CoolException("鏁版嵁閿欒: 鍗曟嵁涓嶅瓨鍦紒锛�");
+ /// / }
// taskItem.setTaskId(task.getId())
// .setOrderType(OrderType.ORDER_RECEIPT.type)
// .setSource(item.getId())
@@ -298,24 +327,29 @@
// locNo.setWorkNo(ruleCode);
// return locNo;
// }
-
+ @Override
public InTaskMsgDto getLocNo(TaskInParam param) {
- String matnr = null; String batch = null;
+ String matnr = null;
+ String batch = null;
List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, param.getBarcode()));
if (Cools.isEmpty(waitPakins) && param.getIoType().equals(TaskType.TASK_TYPE_IN.type)) {
throw new CoolException("鏈壘鍒扮粍鎵樹俊鎭紝璇风粍鎵�");
- }else if (!Cools.isEmpty(waitPakins)) {
+ } else if (!Cools.isEmpty(waitPakins)) {
matnr = waitPakins.get(0).getCode();
batch = waitPakins.get(0).getCode();
}
List<DeviceSite> deviceSites = deviceSiteService.list(new LambdaQueryWrapper<DeviceSite>()
.eq(DeviceSite::getSite, param.getSourceStaNo())
- .eq(DeviceSite::getType,param.getIoType())
+ .eq(DeviceSite::getType, param.getIoType())
);
if (Cools.isEmpty(deviceSites)) {
throw new CoolException("鏈壘鍒扮珯鐐硅矾寰勪俊鎭�");
}
- WarehouseAreas warehouseArea = warehouseAreasService.getById(param.getArea());
+ DeviceBind deviceBind = deviceBindService.getById(LocUtils.getAreaType(param.getSourceStaNo()));
+ if (Cools.isEmpty(deviceBind)) {
+ throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�===>搴撲綅瑙勫垯鏈煡");
+ }
+ WarehouseAreas warehouseArea = warehouseAreasService.getById(deviceBind.getTypeId());
if (Cools.isEmpty(warehouseArea)) {
throw new CoolException("鏈壘鍒版墍灞炲簱鍖轰俊鎭�");
}
@@ -323,17 +357,21 @@
InTaskMsgDto dto = null;
switch (warehouseArea.getType()) {
case "CRN": //鍫嗗灈鏈�
- dto = getLocNoCrn(param.getArea(), param.getSourceStaNo(), matnr,batch, locTypeDto, 0, param.getIoType());
+ dto = getLocNoCrn(deviceBind, warehouseArea.getId(), param.getSourceStaNo(), matnr, batch, locTypeDto, 0, param.getIoType());
break;
case "SXC": //鍥涘悜搴�
break;
- case "CTU": //鍥涘悜搴�
+ case "CTU": //ctu
+ dto = getLocNoCtu(deviceBind, warehouseArea.getId(), param.getSourceStaNo(), matnr, batch, locTypeDto, 0, param.getIoType());
+ break;
+ default:
+ dto = getLocNoCtu(deviceBind, warehouseArea.getId(), param.getSourceStaNo(), matnr, batch, locTypeDto, 0, param.getIoType());
break;
}
return dto;
}
- private InTaskMsgDto getLocNoCrn(Integer area,Integer sourceStaNo, String matnr, String batch,LocTypeDto locTypeDto, int times,Integer ioType){
+ private InTaskMsgDto getLocNoCrn(DeviceBind deviceBind, Long area, Integer sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) {
if (Cools.isEmpty(matnr)) { //鐗╂枡鍙�
matnr = "";
}
@@ -348,10 +386,7 @@
Loc loc = null; // 鐩爣搴撲綅
InTaskMsgDto inTaskMsgDto = new InTaskMsgDto();
- DeviceBind deviceBind = deviceBindService.getById(LocUtils.getAreaType(sourceStaNo));
- if (Cools.isEmpty(deviceBind)) {
- throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�===>搴撲綅瑙勫垯鏈煡");
- }
+
int sRow = deviceBind.getStartRow();
int eRow = deviceBind.getEndRow();
int deviceQty = deviceBind.getDeviceQty();
@@ -373,7 +408,7 @@
throw new CoolException("鏃犲彲鐢ㄥ爢鍨涙満");
}
//鍏ュ簱闈犺繎鎽嗘斁
- if (ioType== 1 && deviceBind.getBeSimilar().equals("1") && !Cools.isEmpty(matnr)) {
+ if (ioType == 1 && deviceBind.getBeSimilar().equals("1") && !Cools.isEmpty(matnr)) {
if (nearRow != curRow) {
List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getMatnrCode, matnr));
for (LocItem locItem : locItems) {
@@ -383,12 +418,12 @@
}
String shallowLocNo = LocUtils.getShallowLoc(slaveProperties, loc1.getCode());
// 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
- Loc shallowLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode,shallowLocNo));
- if (shallowLoc != null && shallowLoc.getUseStatus().equals("O")) {
+ Loc shallowLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLocNo));
+ if (shallowLoc != null && shallowLoc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
if (LocUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
- loc = shallowLoc;
- deviceNo = shallowLoc.getDeviceNo();
- break;
+ loc = shallowLoc;
+ deviceNo = shallowLoc.getDeviceNo();
+ break;
}
}
@@ -426,9 +461,9 @@
.eq(DeviceSite::getSite, sourceStaNo)
.eq(DeviceSite::getDeviceCode, deviceNo)
);
- if (Cools.isEmpty(deviceSite)){
+ if (Cools.isEmpty(deviceSite)) {
deviceNo = 0;
- }else {
+ } else {
inTaskMsgDto.setStaNo(Integer.parseInt(deviceSite.getDeviceSite()));
}
@@ -443,9 +478,9 @@
List<Loc> locMasts = null;
locMasts = locService.list(new LambdaQueryWrapper<Loc>()
.eq(Loc::getRow, nearRow)
- .eq(Loc::getUseStatus, "O")
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
.eq(Loc::getType, locTypeDto.getLocType1())
- .eq(Loc::getAreaId,area)
+ .eq(Loc::getAreaId, area)
.orderByAsc(Loc::getLev)
.orderByAsc(Loc::getCol)
);
@@ -454,12 +489,12 @@
continue;
}
String shallowLoc = LocUtils.getDeepLoc(slaveProperties, locMast1.getCode());
- if ((ioType== 1 && deviceBind.getBeSimilar().equals("1"))) {
+ if ((ioType == 1 && deviceBind.getBeSimilar().equals("1"))) {
//鐩镐技鐗╂枡鎵撳紑锛屽垽鏂繁搴撲綅鏈夋病鏈夎揣锛屾病璐у氨鏀炬繁搴撲綅锛屾湁璐у氨涓嶆搷浣�
Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
.eq(Loc::getRow, shallowLoc)
- .eq(Loc::getUseStatus, "O")
- .eq(Loc::getAreaId,area)
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+ .eq(Loc::getAreaId, area)
);
if (!Cools.isEmpty(locMast2)) {
loc = locMast2;
@@ -469,17 +504,17 @@
//鐩镐技鐗╂枡鍏抽棴锛屽垽鏂繁搴撲綅鏈夋病鏈夎揣锛屾湁璐у氨鏀炬祬搴撲綅锛屾棤璐у氨涓嶆搷浣�
Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
.eq(Loc::getCode, shallowLoc)
- .in(Loc::getUseStatus, "D","F")
- .eq(Loc::getAreaId,area)
+ .in(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type, LocStsType.LOC_STS_TYPE_F.type)
+ .eq(Loc::getAreaId, area)
);
if (!Cools.isEmpty(locMast2)) {
loc = locMast1;
break;
- }else{
+ } else {
locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
.eq(Loc::getCode, shallowLoc)
- .eq(Loc::getUseStatus, "O")
- .eq(Loc::getAreaId,area)
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+ .eq(Loc::getAreaId, area)
);
if (!Cools.isEmpty(locMast2)) {
loc = locMast2;
@@ -497,8 +532,8 @@
String shallowLoc = LocUtils.getDeepLoc(slaveProperties, locMast1.getCode());
Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
.eq(Loc::getCode, shallowLoc)
- .eq(Loc::getUseStatus, "O")
- .eq(Loc::getAreaId,area)
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+ .eq(Loc::getAreaId, area)
);
if (!Cools.isEmpty(locMast2)) {
loc = locMast2;
@@ -506,8 +541,8 @@
} else {
locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
.eq(Loc::getCode, shallowLoc)
- .in(Loc::getUseStatus, "D","F")
- .eq(Loc::getAreaId,area)
+ .in(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type, LocStsType.LOC_STS_TYPE_D.type)
+ .eq(Loc::getAreaId, area)
);
if (!Cools.isEmpty(locMast2)) {
loc = locMast1;
@@ -525,27 +560,27 @@
}
//鏌ヨ褰撳墠搴撲綅绫诲瀷绌哄簱浣� 灏忎簬5涓垯locmast = null
List<Loc> locTypeLocMasts = locService.list(new LambdaQueryWrapper<Loc>()
- .eq(Loc::getUseStatus, "O")
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
.eq(Loc::getDeviceNo, deviceNo)
.eq(Loc::getType, locTypeDto.getLocType1())
- .eq(Loc::getAreaId,area)
+ .eq(Loc::getAreaId, area)
);
- if (null !=locTypeLocMasts && locTypeLocMasts.size()<=5){
+ if (null != locTypeLocMasts && locTypeLocMasts.size() <= 5) {
loc = null;
}
// 閫掑綊鏌ヨ
- if (Cools.isEmpty(loc) || !loc.getUseStatus().equals("O")) {
+ if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
// 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
if (times < rowCount * 2) {
times = times + 1;
- return getLocNoCrn(area,sourceStaNo,matnr,batch,locTypeDto,times, ioType);
+ return getLocNoCrn(deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, times, ioType);
}
// 2.搴撲綅褰撳墠鎵�灞炲昂瀵告棤绌哄簱浣嶆椂锛岃皟鏁村昂瀵稿弬鏁帮紝鍚戜笂鍏煎妫�绱㈠簱浣�
if (locTypeDto.getLocType1() < 3) {
int i = locTypeDto.getLocType1() + 1;
locTypeDto.setLocType1(i);
- return getLocNoCrn(area,sourceStaNo,matnr,batch,locTypeDto,0, ioType);
+ return getLocNoCrn(deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, 0, ioType);
}
throw new CoolException("娌℃湁绌哄簱浣�");
}
@@ -558,4 +593,68 @@
inTaskMsgDto.setLocNo(locNo);
return inTaskMsgDto;
}
+
+ private InTaskMsgDto getLocNoCtu(DeviceBind deviceBind, Long area, Integer sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) {
+ if (Cools.isEmpty(matnr)) { //鐗╂枡鍙�
+ matnr = "";
+ }
+ if (Cools.isEmpty(batch)) { //鎵规
+ batch = "";
+ }
+ int deviceNo = 0;
+ Loc loc = new Loc();
+ InTaskMsgDto inTaskMsgDto = new InTaskMsgDto();
+ List<Loc> loc1 = locService.list(new LambdaQueryWrapper<Loc>()
+ .eq(Loc::getAreaId, area)
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+ .eq(Loc::getType, locTypeDto.getLocType1())
+ .orderByAsc(Loc::getLev)
+ .orderByAsc(Loc::getCol)
+ .orderByAsc(Loc::getRow)
+ );
+ for (Loc loc2 : loc1) {
+ if (!LocUtils.locMoveCheckLocTypeComplete(loc2, locTypeDto)) {
+ continue;
+ }
+ loc = loc2;
+ break;
+ }
+ //鏌ユ壘璺緞
+ DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+ .eq(DeviceSite::getType, ioType)
+ .eq(DeviceSite::getSite, sourceStaNo)
+ .eq(DeviceSite::getDeviceCode, loc.getDeviceNo())
+ );
+ if (Cools.isEmpty(deviceSite)) {
+ deviceNo = 0;
+ loc = null;
+ } else {
+ inTaskMsgDto.setStaNo(Integer.parseInt(deviceSite.getDeviceSite()));
+ }
+ // 閫掑綊鏌ヨ
+ if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
+ // 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
+ if (times < 5) {
+ times = times + 1;
+ return getLocNoCtu(deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, times, ioType);
+
+ }
+ // 2.搴撲綅褰撳墠鎵�灞炲昂瀵告棤绌哄簱浣嶆椂锛岃皟鏁村昂瀵稿弬鏁帮紝鍚戜笂鍏煎妫�绱㈠簱浣�
+ if (locTypeDto.getLocType1() < 3) {
+ int i = locTypeDto.getLocType1() + 1;
+ locTypeDto.setLocType1(i);
+ return getLocNoCtu(deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, 0, ioType);
+ }
+ throw new CoolException("娌℃湁绌哄簱浣�");
+ }
+
+ String locNo = loc.getCode();
+
+ // 杩斿洖dto
+ inTaskMsgDto.setDeviceNo(deviceNo);
+ inTaskMsgDto.setSourceStaNo(sourceStaNo);
+// inTaskMsgDto.setStaNo();
+ inTaskMsgDto.setLocNo(locNo);
+ return inTaskMsgDto;
+ }
}
--
Gitblit v1.9.1