From 1e1cedc70758a7c17ccf63ea11d1db70c409aa66 Mon Sep 17 00:00:00 2001
From: skyouc <958836976@qq.com>
Date: 星期五, 05 九月 2025 09:45:15 +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/manager/schedules/TaskSchedules.java | 172 ++++++++++++++----
rsf-admin/src/page/orders/wave/WaveList.jsx | 4
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java | 3
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskStsType.java | 1
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/BasStation.java | 29 --
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/StationTypeEnum.java | 33 +++
rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java | 5
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java | 104 -----------
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java | 52 ++++-
rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx | 53 ++---
rsf-admin/src/page/orders/wave/WaveItemList.jsx | 4
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/CallBackEvent.java | 24 ++
rsf-admin/src/i18n/zh.js | 1
rsf-admin/src/i18n/en.js | 1
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/WaveSchedules.java | 1
rsf-server/src/main/resources/application-dev.yml | 8
16 files changed, 274 insertions(+), 221 deletions(-)
diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js
index d908a9b..194a87e 100644
--- a/rsf-admin/src/i18n/en.js
+++ b/rsf-admin/src/i18n/en.js
@@ -233,6 +233,7 @@
stationName: 'stationName',
inAble: 'inAble',
outAble: 'outAble',
+ type: 'Site Type',
useStatus: 'useStatus',
status: 'status',
area: 'area',
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index 015c866..7de7d5e 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -254,6 +254,7 @@
},
basStation: {
stationName: '绔欑偣鍚嶇О',
+ type: '绔欑偣绫诲瀷',
inAble: '鑳藉叆',
outAble: '鑳藉嚭',
useStatus: '鐘舵��',
diff --git a/rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx b/rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx
index b757e28..7b02a1f 100644
--- a/rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx
+++ b/rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx
@@ -30,8 +30,8 @@
ReferenceInput,
ReferenceArrayInput,
AutocompleteInput,
- DeleteButton,
-
+ DeleteButton,
+
} from 'react-admin';
import { Box, Typography, Card, Stack } from '@mui/material';
import { styled } from '@mui/material/styles';
@@ -64,10 +64,10 @@
const filters = [
<SearchInput source="condition" alwaysOn />,
- <DateInput label='common.time.after' source="timeStart" />,
- <DateInput label='common.time.before' source="timeEnd" />,
+ <DateInput label='common.time.after' source="timeStart" />,
+ <DateInput label='common.time.before' source="timeEnd" />,
- <TextInput source="stationName" label="table.field.basStation.stationName" alwaysOn/>,
+ <TextInput source="stationName" label="table.field.basStation.stationName" alwaysOn />,
<NumberInput source="inAble" label="table.field.basStation.inAble" />,
<NumberInput source="outAble" label="table.field.basStation.outAble" />,
<TextInput source="useStatus" label="table.field.basStation.useStatus" />,
@@ -127,26 +127,26 @@
<StyledDatagrid
preferenceKey='basStation'
bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
- rowClick={(id, resource, record) => false}
+ rowClick={(id, resource, record) => false}
expandSingle={true}
- omit={['id', 'createTime', 'createBy', 'memo','updateBy','autoTransfer']}
+ omit={['id', 'createTime', 'createBy', 'memo', 'updateBy', 'autoTransfer']}
>
<NumberField source="id" />
+ <TextField source="type$" label="table.field.basStation.type" />
<TextField source="stationName" label="table.field.basStation.stationName" />
<TextField source="useStatus$" label="table.field.basStation.useStatus" />
- <TextField source="barcode" label="table.field.basStation.barcode" />
+ <TextField source="barcode" label="table.field.basStation.barcode" />
<FunctionField
source="inAble"
label="table.field.basStation.inAble"
render={record => record.inAble === 1 ? '鏄�' : '鍚�'}
- />
+ />
<FunctionField
source="outAble"
label="table.field.basStation.outAble"
render={record => record.inAble === 1 ? '鏄�' : '鍚�'}
/>
-
- <NumberField source="area$" label="table.field.basStation.area" />
+ <NumberField source="area$" label="table.field.basStation.area" />
<FunctionField
source="isCrossZone"
label="table.field.basStation.isCrossZone"
@@ -155,48 +155,43 @@
<WrapperField cellClassName="crossZoneArea" label="table.field.basStation.crossZoneArea">
<CrossZoneAreaField
open={areaFieldDialog}
- setOpen={setAreaFieldDialog}
- />
- </WrapperField>
+ setOpen={setAreaFieldDialog}
+ />
+ </WrapperField>
<FunctionField
source="isWcs"
label="table.field.basStation.isWcs"
render={record => record.inAble === 1 ? '鏄�' : '鍚�'}
- />
-
+ />
<WrapperField cellClassName="containerType" label="table.field.basStation.containerType">
<ContainerTypesField
open={areaFieldDialog2}
- setOpen={setAreaFieldDialog2}
- />
+ setOpen={setAreaFieldDialog2}
+ />
</WrapperField>
<FunctionField
source="autoTransfer"
label="table.field.basStation.autoTransfer"
render={record => record.inAble === 1 ? '鏄�' : '鍚�'}
/>
- <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
- <TextField source="nickname" />
- </ReferenceField>
+ <TextField source="updateBy$" label="common.field.updateBy" />
<DateField source="updateTime" label="common.field.updateTime" showTime />
- <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}>
- <TextField source="nickname" />
- </ReferenceField>
- <DateField source="createTime" label="common.field.createTime" showTime />
+ <TextField source="createBy$" label="common.field.createBy" />
+ <DateField source="createTime" label="common.field.createTime" showTime />
<BooleanField source="statusBool" label="common.field.status" sortable={false} />
<TextField source="memo" label="common.field.memo" sortable={false} />
- <WrapperField cellClassName="opt" label="common.field.opt">
+ <WrapperField cellClassName="opt" label="common.field.opt">
<EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
<DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
- </WrapperField>
+ </WrapperField>
</StyledDatagrid>
-
+
</List>
<BasStationCreate
open={createDialog}
setOpen={setCreateDialog}
/>
-
+
<PageDrawer
title='BasStation Detail'
drawerVal={drawerVal}
diff --git a/rsf-admin/src/page/orders/wave/WaveItemList.jsx b/rsf-admin/src/page/orders/wave/WaveItemList.jsx
index e5c302b..c7a9dcf 100644
--- a/rsf-admin/src/page/orders/wave/WaveItemList.jsx
+++ b/rsf-admin/src/page/orders/wave/WaveItemList.jsx
@@ -114,7 +114,7 @@
rowClick={(id, resource, record) => false}
expand={false}
expandSingle={false}
- omit={['id', 'createTime', 'matnrId', 'waveId', 'batch', 'orderItemId', 'fieldsIndex', 'createBy', 'memo']}
+ omit={['id', 'createTime', 'matnrId', 'waveId', 'batch', 'orderItemId', 'fieldsIndex', 'createBy']}
>
<NumberField source="id" />
<NumberField source="waveId" label="table.field.waveItem.waveId" />
@@ -132,8 +132,8 @@
<DateField source="updateTime" label="common.field.updateTime" showTime />
<TextField source="createBy$" label="common.field.createBy" />
<DateField source="createTime" label="common.field.createTime" showTime />
- <TextField source="memo" label="common.field.memo" sortable={false} />
<TextField source="exceStatus$" label="table.field.waveItem.exceStatus" />
+ <TextField source="memo" label="common.field.memo" sortable={false} />
</StyledDatagrid>
</List>
<WaveItemEdit
diff --git a/rsf-admin/src/page/orders/wave/WaveList.jsx b/rsf-admin/src/page/orders/wave/WaveList.jsx
index 9717a8a..a37fce6 100644
--- a/rsf-admin/src/page/orders/wave/WaveList.jsx
+++ b/rsf-admin/src/page/orders/wave/WaveList.jsx
@@ -152,7 +152,7 @@
rowClick={(id, resource, record) => false}
expand={<WavePannel />}
expandSingle={true}
- omit={['id', 'createTime', 'createBy', 'createBy$','memo']}
+ omit={['id', 'createTime', 'createBy', 'createBy$', 'memo']}
>
<NumberField source="id" />
<TextField source="code" label="table.field.wave.code" />
@@ -166,8 +166,8 @@
<DateField source="updateTime" label="common.field.updateTime" showTime />
<TextField source="createBy$" label="common.field.createBy" />
<CustomProcess source="progress" label="table.field.wave.progress" />
- <TextField source="memo" label="common.field.memo" sortable={false} />
<TextField source="exceStatus$" label="table.field.wave.exceStatus" sortable={false} />
+ <TextField source="memo" label="common.field.memo" sortable={false} />
<WrapperField cellClassName="opt" label="common.field.opt">
<PauseButton />
<ContinueButton />
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/CallBackEvent.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/CallBackEvent.java
new file mode 100644
index 0000000..30a6c32
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/CallBackEvent.java
@@ -0,0 +1,24 @@
+package com.vincent.rsf.server.api.entity.enums;
+
+/**
+ * @author Ryan
+ * @date 2025/9/4
+ * @description: 鍥炶皟浜嬩欢
+ * @version 1.0
+ */
+public enum CallBackEvent {
+ /**浠诲姟鍥炶皟浜嬩欢*/
+ CALL_BACK_EVENT_START("START", "鍙栫瀹屾垚"),
+ CALL_BACK_EVENT_OBIT("OTBIN", "鎼繍涓�"),
+ CALL_BACK_EVENT_END("END", "鏀剧瀹屾垚"),
+ ;
+
+ CallBackEvent( String event, String desc) {
+ this.event = event;
+ this.desc = desc;
+ }
+
+ public String event;
+
+ public String desc;
+}
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 a850147..3005f19 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
@@ -18,6 +18,7 @@
import com.vincent.rsf.server.api.entity.dto.LocTypeDto;
import com.vincent.rsf.server.api.controller.erp.params.TaskInParam;
import com.vincent.rsf.server.api.entity.dto.SyncLocsDto;
+import com.vincent.rsf.server.api.entity.enums.CallBackEvent;
import com.vincent.rsf.server.api.entity.params.CommonRequest;
import com.vincent.rsf.server.api.entity.params.ExMsgParams;
import com.vincent.rsf.server.api.entity.params.WcsTaskParams;
@@ -464,13 +465,51 @@
if (Objects.isNull(params)) {
return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
}
-
Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, params.getSeqNum()));
if (Objects.isNull(task)) {
throw new CoolException("浠诲姟涓嶅瓨鍦ㄥ彲宸茬粨鏉燂紒锛�");
}
- if (params.getEventType().equals("END")) {
+ /**鏂欑鎼繍涓紝 淇敼绔欑偣鐘舵��*/
+ if (params.getEventType().equals(CallBackEvent.CALL_BACK_EVENT_OBIT.event)) {
+ if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)
+ || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)
+ || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)
+ || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_IN.type)
+ || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type)
+ || task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
+ if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
+ BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getOrgSite()));
+ if (Objects.isNull(station)) {
+ throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒");
+ }
+ if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+ station.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
+ if (!basStationService.updateById(station)) {
+ throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
+ }
+ }
+ } else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)
+ || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)
+ || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type)
+ || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)
+ || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_OUT.type)) {
+ /**淇敼鍑哄簱绔欑偣鐘舵��*/
+ BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+ .eq(BasStation::getStationName, task.getTargSite()));
+ if (Objects.isNull(station)) {
+ throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒");
+ }
+ if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+ station.setUseStatus(LocStsType.LOC_STS_TYPE_F.type);
+ if (!basStationService.updateById(station)) {
+ throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
+ }
+ }
+ /**鍙栫瀹屾垚锛� 淇敼浠诲姟鐘舵��*/
+ } else if (params.getEventType().equals(CallBackEvent.CALL_BACK_EVENT_END.event)) {
if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)
@@ -482,14 +521,6 @@
.eq(Task::getTaskCode, task.getTaskCode())
.set(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id))) {
throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
- }
-
- if (!Objects.isNull(task.getOrgSite())) {
- if (!basStationService.update(new LambdaUpdateWrapper<BasStation>()
- .eq(BasStation::getStationName, task.getOrgSite())
- .set(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type))) {
- throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
- }
}
} else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)
@@ -503,7 +534,6 @@
}
}
}
-
log.info(JSONObject.toJSONString(params));
return R.ok(JSONObject.toJSONString(params));
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/BasStation.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/BasStation.java
index 24f3eea..6481ea9 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/BasStation.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/BasStation.java
@@ -7,6 +7,7 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.vincent.rsf.server.manager.enums.StationTypeEnum;
import com.vincent.rsf.server.manager.service.WarehouseAreasService;
import com.vincent.rsf.server.system.entity.DictData;
import com.vincent.rsf.server.system.service.DictDataService;
@@ -44,6 +45,9 @@
*/
@ApiModelProperty(value= "绔欑偣鍚嶇О")
private String stationName;
+
+ @ApiModelProperty("绔欑偣绫诲瀷: {0:鍏夌數锛� 1:鏃犲厜鐢祡")
+ private Integer type;
/**
* 鍙叆
@@ -165,27 +169,10 @@
public BasStation() {}
-
-
-// BasStation basStation = new BasStation(
-// null, // 绔欑偣鍚嶇О
-// null, // 鍙叆
-// null, // 鍙嚭
-// null, // 鐘舵��
-// null, // 鎵�灞炲簱鍖篿d
-// null, // 鏄惁鍙法鍖�
-// null, // 鍙法鍖哄尯鍩焛d
-// null, // 鏄惁wcs绔欑偣
-// null, // wcs绔欑偣淇℃伅
-// null, // 瀹瑰櫒绫诲瀷
-// null, // 鏉$爜
-// null, // 鏄惁鑷姩璋冩嫧
-// null, // 澶囨敞
-// null, // 鍒涘缓浜�
-// null, // 鍒涘缓鏃堕棿
-// null, // 鏇存柊浜�
-// null // 鏇存柊鏃堕棿
-// );
+ public String getType$() {
+ if (this.type == null) return null;
+ return StationTypeEnum.getStationDesc(this.type);
+ }
public List<Long> getContainerTypes$(){
if (Cools.isEmpty(this.containerType)){
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/StationTypeEnum.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/StationTypeEnum.java
new file mode 100644
index 0000000..9114759
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/StationTypeEnum.java
@@ -0,0 +1,33 @@
+package com.vincent.rsf.server.manager.enums;
+
+/**
+ * @author Ryan
+ * @date 2025/9/4
+ * @description: 绔欑偣绫诲瀷
+ * @version 1.0
+ */
+public enum StationTypeEnum {
+ //绔欑偣绫诲瀷
+ STATION_TYPE_MUTI(0, "鍏夌數绔欑偣"),
+ STATION_TYPE_NORMAL(1, "鏅�氱珯鐐�"),
+ ;
+ /**绔欑偣绫诲瀷*/
+ public Integer type;
+ /**绔欑偣璇存槑*/
+ public String desc;
+
+ StationTypeEnum(Integer type, String desc) {
+ this.type = type;
+ this.desc = desc;
+ }
+
+ public static String getStationDesc(Integer type) {
+ if (type.equals(STATION_TYPE_MUTI.type)) {
+ return STATION_TYPE_MUTI.desc;
+ } else if (type.equals(STATION_TYPE_NORMAL.type)) {
+ return STATION_TYPE_NORMAL.desc;
+ }
+ return null;
+ }
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskStsType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskStsType.java
index 08f92e4..4bcac1f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskStsType.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskStsType.java
@@ -1,7 +1,6 @@
package com.vincent.rsf.server.manager.enums;
public enum TaskStsType {
-
//浠诲姟鐘舵��
GENERATE_IN("1", "鍒涘缓鍏ュ簱浠诲姟"),
WCS_EXECUTE_IN("2", "RCS浠诲姟宸蹭笅鍙�"),
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java
index e934e40..40fb2c4 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java
@@ -245,7 +245,6 @@
}
}
-
// 鍏ュ簱 搴旇鏍规嵁宸ヤ綔妗e洖鍘�
// this.runStaToLoc(locGroupList, staGroupList, staTaskMemo);
@@ -259,14 +258,6 @@
private List<Loc> getAreaLocs(List<Integer> locGroupList, List<String> staGroupList, String memo) {
Integer startRow = Collections.min(locGroupList);
Integer endRow = Collections.max(locGroupList);
-
- // STA IDLE
-// LambdaQueryWrapper<BasStation> idleWrapper = new LambdaQueryWrapper<BasStation>().eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type).in(BasStation::getStationName, staGroupList);
-// List<BasStation> idleList = stationService.list(idleWrapper);
-// if (Cools.isEmpty(idleList)) {
-// return new ArrayList<>();
-// }
-// Collections.shuffle(idleList);
// LOC STOCK
LambdaQueryWrapper<Loc> stockWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type);
@@ -283,57 +274,8 @@
Collections.shuffle(stockList);
return stockList;
- //鐢熸垚鍏ュ簱宸ヤ綔妗�
-// generateTask(idleList.get(0).getStationName(), stockList.get(0).getCode(), idleList.get(0).getBarcode());
- }
-
-
- // 鍑哄簱
- private void runLocToSta(List<Integer> locGroupList, List<String> staGroupList, String memo) {
- Integer startRow = Collections.min(locGroupList);
- Integer endRow = Collections.max(locGroupList);
-
-
- // STA IDLE
- LambdaQueryWrapper<BasStation> idleWrapper = new LambdaQueryWrapper<BasStation>().eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type).in(BasStation::getStationName, staGroupList);
- List<BasStation> idleList = stationService.list(idleWrapper);
- if (Cools.isEmpty(idleList)) {
- return;
- }
- Collections.shuffle(idleList);
-
- // LOC STOCK
- LambdaQueryWrapper<Loc> stockWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type);
- if (null != startRow) {
- stockWrapper.ge(Loc::getRow, startRow);
- }
- if (null != endRow) {
- stockWrapper.le(Loc::getRow, endRow);
- }
- List<Loc> stockList = locService.list(stockWrapper);
- if (Cools.isEmpty(stockList)) {
- return;
- }
- Collections.shuffle(stockList);
-
-
- Loc loc = stockList.get(0);
- List<LocItem> list = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, loc.getId()));
- LocToTaskParams param = new LocToTaskParams();
- param.setType(Constants.TASK_TYPE_OUT_STOCK);
- param.setTarLoc(loc.getCode());
- param.setItems(list);
- param.setSiteNo(idleList.get(0).getStationName());
- param.setMemo(memo);
- //鐢熸垚鍑哄簱宸ヤ綔妗�
- try {
- locItemService.generateTask(TaskResouceType.TASK_RESOUCE_STOCK_TYPE.val, param, getLoginUserId());
- } catch (Exception e) {
- log.info("鐢熸垚鍑哄簱浠诲姟澶辫触", e);
- }
}
-
// 绉诲簱
private void runLocToLoc(List<Integer> locGroupList, String staTaskMemo) {
@@ -387,52 +329,6 @@
}
}
-
- private void generateTask(String sourceStaNo, String locNo, String barcode) {
- String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null);
- if (StringUtils.isBlank(ruleCode)) {
- throw new CoolException("缂栫爜閿欒锛氳纭缂栫爜銆孲YS_TASK_CODE銆嶆槸鍚﹀凡鐢熸垚!!");
- }
- Task task = new Task();
- task.setTaskCode(ruleCode)
- .setTaskStatus(TaskStsType.GENERATE_IN.id)
- .setTaskType(TaskType.TASK_TYPE_IN.type)
- .setResource(TaskResouceType.TASK_RESOUCE_PAKIN_TYPE.val)
- .setTargLoc(locNo)
- .setBarcode(barcode)
- .setOrgSite(sourceStaNo)
- .setCreateBy(6666L)
- .setUpdateBy(6666L);
-
- if (!taskService.save(task)) {
- throw new CoolException("浠诲姟淇濆瓨澶辫触锛侊紒");
- }
- LambdaQueryWrapper<Matnr> wrapper = new LambdaQueryWrapper<>();
- wrapper.eq(Matnr::getStatus, 1);
- wrapper.orderByAsc(Matnr::getUpdateTime);
- List<Matnr> list = matnrService.page(new Page<>(1, 100), wrapper).getRecords();
- Collections.shuffle(list);
- List<TaskItem> taskItems = new ArrayList<>();
- int i = 0;
- for (Matnr item : list) {
- if (i > 5) {
- break;
- }
- TaskItem taskItem = new TaskItem();
- BeanUtils.copyProperties(item, taskItem);
- taskItem.setTaskId(task.getId())
- .setOrderType(OrderType.ORDER_IN.type)
- .setCreateBy(6666L)
- .setUpdateBy(6666L)
- .setExtendFields(item.getExtendFields());
- taskItems.add(taskItem);
- item.setUpdateTime(new Date());
- matnrService.updateById(item);
- i++;
- }
- taskItemService.saveBatch(taskItems);
- }
-
public static List<String> getStaPrefixes(List<String> staGroupList) {
Set<String> rowSet = new HashSet<>();
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
index 33a663a..d18a1c3 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -85,12 +85,12 @@
private TransferOrderService transferOrderService;
@Autowired
private TransferService transferService;
-
@Autowired
private RestTemplate restTemplate;
-
@Autowired
private RemotesInfoProperties.RcsApi rcsApi;
+ @Autowired
+ private BasStationService basStationService;
/**
* @param
@@ -234,14 +234,9 @@
// }
}
- /**
- * 浠诲姟鑷姩涓嬪彂
- *
- * @throws Exception
- */
@Scheduled(cron = "0/5 * * * * ? ")
-
- public void taskToWCS() {
+ @Transactional(rollbackFor = Exception.class)
+ public void pubTaskToWcs() {
Long loginUserId = SystemAuthUtils.getLoginUserId();
List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_IN.type, TaskType.TASK_TYPE_OUT.type, TaskType.TASK_TYPE_LOC_MOVE.type, TaskType.TASK_TYPE_EMPITY_IN.type
, TaskType.TASK_TYPE_CHECK_IN.type, TaskType.TASK_TYPE_MERGE_IN.type, TaskType.TASK_TYPE_EMPITY_OUT.type,
@@ -252,36 +247,77 @@
.in(Task::getTaskStatus, integers)
.orderByDesc(Task::getSort));
for (Task task : tasks) {
-// Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, task.getBarcode()));
-// if (Objects.isNull(loc)) {
-// continue;
-// }
-// //鍒ゆ柇鏄惁娣卞簱浣�
-// if (!LocUtils.isShallowLoc(loc.getCode())) {
-// //鑾峰彇娣卞簱浣嶅搴旂殑娴呭簱浣�
-// String shallowLoc = LocUtils.getShallowLoc(loc.getCode());
-// if (StringUtils.isBlank(shallowLoc)) {
-// continue;
-// }
-// Loc shalloc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLoc));
-// if (Objects.isNull(shalloc) || !shalloc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) {
-// //濡傛灉娴呭簱浣嶄笉鍦ㄥ簱璺冲嚭寰幆
-// continue;
-// }
-// LocToTaskParams params = new LocToTaskParams();
-// params.setOrgLoc(shallowLoc).setType(TaskType.TASK_TYPE_LOC_MOVE.type + "");
-// //鐢熸垚绉诲簱浠诲姟
-// Task moveTask = locItemService.genMoveTask(params, loginUserId);
-// moveTask.setSort(!Objects.isNull(task.getSort()) ? task.getSort() + 1 : Constants.TASK_SORT_DEFAULT_VALUE + 1);
-// if (!taskService.updateById(moveTask)) {
-// throw new Exception("浠诲姟浼樺厛绾ф洿鏂板け璐ワ紒锛�");
-// }
-// }
- //TODO 璋冪敤涓嬪彂浠诲姟鎺ュ彛
+ /**绉诲簱涓嶅仛绔欑偣鎿嶄綔*/
+ if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
+ BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName,
+ task.getTaskStatus().equals(TaskStsType.GENERATE_IN.id) ? task.getOrgSite() : task.getTargSite()));
+ if (station.getType().equals(StationTypeEnum.STATION_TYPE_MUTI.type)) {
+ continue;
+ }
+ }
+ /**涓嬪彂鏅�氱珯鐐逛换鍔★紝鎶ラ敊鍥炴粴锛屼笉鍐嶅線涓嬫墽琛�*/
+ pubTaskToWcs(task);
+ }
+ }
+
+ /**
+ * @author Ryan
+ * @date 2025/9/4
+ * @description: 鍏夌數绔欑偣浠诲姟涓嬪彂
+ * @version 1.0
+ */
+ @Scheduled(cron = "0/5 * * * * ? ")
+ @Transactional(rollbackFor = Exception.class)
+ public void taskToWCS() throws Exception {
+ Long loginUserId = SystemAuthUtils.getLoginUserId();
+ List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_IN.type, TaskType.TASK_TYPE_OUT.type, TaskType.TASK_TYPE_LOC_MOVE.type, TaskType.TASK_TYPE_EMPITY_IN.type
+ , TaskType.TASK_TYPE_CHECK_IN.type, TaskType.TASK_TYPE_MERGE_IN.type, TaskType.TASK_TYPE_EMPITY_OUT.type,
+ TaskType.TASK_TYPE_PICK_AGAIN_OUT.type, TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_MERGE_OUT.type);
+ List<Integer> integers = Arrays.asList(TaskStsType.GENERATE_IN.id, TaskStsType.GENERATE_OUT.id);
+ List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
+ .in(Task::getTaskType, list)
+ .in(Task::getTaskStatus, integers)
+ .orderByDesc(Task::getSort));
+ for (Task task : tasks) {
+ /**绉诲簱涓嶅仛绔欑偣鎿嶄綔*/
+ if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
+ BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName,
+ task.getTaskStatus().equals(TaskStsType.GENERATE_IN.id) ? task.getOrgSite() : task.getTargSite()));
+ /**杩囨护鎺夋櫘閫氱珯鐐逛换鍔�*/
+ if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+ continue;
+ }
+ Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, task.getBarcode()));
+ if (Objects.isNull(loc)) {
+ continue;
+ }
+ //鍒ゆ柇鏄惁娣卞簱浣�
+ if (!LocUtils.isShallowLoc(loc.getCode())) {
+ //鑾峰彇娣卞簱浣嶅搴旂殑娴呭簱浣�
+ String shallowLoc = LocUtils.getShallowLoc(loc.getCode());
+ if (StringUtils.isBlank(shallowLoc)) {
+ continue;
+ }
+ Loc shalloc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLoc));
+ if (Objects.isNull(shalloc) || !shalloc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) {
+ //濡傛灉娴呭簱浣嶄笉鍦ㄥ簱璺冲嚭寰幆
+ continue;
+ }
+ LocToTaskParams params = new LocToTaskParams();
+ params.setOrgLoc(shallowLoc).setType(TaskType.TASK_TYPE_LOC_MOVE.type + "");
+ //鐢熸垚绉诲簱浠诲姟
+ Task moveTask = locItemService.genMoveTask(params, loginUserId);
+ moveTask.setSort(!Objects.isNull(task.getSort()) ? task.getSort() + 1 : Constants.TASK_SORT_DEFAULT_VALUE + 1);
+ if (!taskService.updateById(moveTask)) {
+ throw new Exception("浠诲姟浼樺厛绾ф洿鏂板け璐ワ紒锛�");
+ }
+ }
+ }
+ /**涓嬪彂浠诲姟*/
try {
pubTaskToWcs(task);
} catch (Exception e) {
- log.error(e.getMessage());
+ log.error("浠诲姟涓嬪彂澶辫触锛侊紒", e);
}
}
}
@@ -321,16 +357,36 @@
//浠诲姟绫诲瀷锛屼换鍔$紪鐮�
itemParam.setTaskType(RcsTaskType.getTypeDesc(task.getTaskType()))
.setSeqNum(task.getTaskCode());
-
//涓诲弬鏁�
taskParams.setBatch(task.getBarcode());
- if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)
+ BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getTargSite()));
+ if (Objects.isNull(station)) {
+ throw new CoolException("绔欑偣涓嶅瓨鍦紒锛�");
+ }
+ /**鍒ゆ柇鏄惁鍏夌數绔欑偣锛岄潪鍏夊簵绔欑偣闇�绠℃帶绔欑偣鐘舵��*/
+ if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+ if (task.getTaskType() <= TaskType.TASK_TYPE_CHECK_IN.type && task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
+ if (!station.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) {
+ throw new CoolException("褰撳墠绔欑偣涓嶆槸F.鍦ㄥ簱鐘舵�侊紒锛�");
+ }
+ } else if (task.getTaskType() >= TaskType.TASK_TYPE_OUT.type) {
+ if (!station.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
+ throw new CoolException("鐩爣绔欑偣涓嶆槸O.绌洪棽鐘舵�侊紒锛�");
+ }
+ }
+ }
+ /**绉诲簱鍙傛暟*/
+ if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
+ itemParam.setOriLoc(task.getOrgLoc()).setDestLoc(task.getTargLoc());
+ } else if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_IN.type)) {
+ /**鍏ㄦ澘鍏ュ簱鍙傛暟*/
itemParam.setDestLoc(task.getTargLoc())
.setOriSta(task.getOrgSite());
} else if (task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type) || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)) {
+ /**鎷f枡/鐩樼偣鍏ュ簱鍙傛暟*/
itemParam.setDestLoc(task.getTargLoc())
.setOriSta(task.getTargSite());
} else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)
@@ -338,13 +394,27 @@
|| task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_OUT.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type)) {
-
+ /**鍑哄簱鍙傛暟*/
itemParam.setOriLoc(task.getOrgLoc())
.setDestSta(task.getTargSite());
- } else if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
- itemParam.setOriLoc(task.getOrgLoc()).setDestLoc(task.getTargLoc());
} else {
+ /**绔欑偣闂寸Щ搴撳弬鏁�*/
itemParam.setOriSta(task.getOrgSite()).setDestSta(task.getTargSite());
+
+ BasStation curSta = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getOrgSite()));
+ if (Objects.isNull(curSta)) {
+ throw new CoolException("绔欑偣涓嶅瓨鍦紒锛�");
+ }
+ if (curSta.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+ if (!curSta.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) {
+ throw new CoolException("褰撳墠绔欑偣涓嶆槸F.鍦ㄥ簱鐘舵�侊紒锛�");
+ }
+ }
+ if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+ if (!station.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
+ throw new CoolException("鐩爣绔欑偣涓嶆槸O.绌洪棽鐘舵�侊紒锛�");
+ }
+ }
}
List<TaskItemParam> items = Arrays.asList(itemParam);
@@ -381,16 +451,32 @@
.set(Task::getTaskStatus, TaskStsType.WCS_EXECUTE_IN.id))) {
throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
}
+ /**鎺掗櫎绉诲簱鍔熻兘*/
+ if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
+ /**濡傛灉鏄櫘閫氱珯鐐癸紝淇敼绔欑偣鐘舵�佷负鍑哄簱棰勭害*/
+ if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+ station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
+ if (!basStationService.updateById(station)) {
+ throw new CoolException("绔欑偣棰勭害澶辫触锛侊紒");
+ }
+ }
+ }
} else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_OUT.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)
- ) {
+ || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)) {
if (!taskService.update(new LambdaUpdateWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode())
.set(Task::getTaskStatus, TaskStsType.WCS_EXECUTE_OUT.id))) {
throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
}
+ /**濡傛灉鏄櫘閫氱珯鐐癸紝淇敼绔欑偣鐘舵�佷负鍏ュ簱棰勭害*/
+ if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+ station.setUseStatus(LocStsType.LOC_STS_TYPE_S.type);
+ if (!basStationService.updateById(station)) {
+ throw new CoolException("绔欑偣棰勭害澶辫触锛侊紒");
+ }
+ }
}
} else {
throw new CoolException("浠诲姟涓嬪彂澶辫触锛侊紒");
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/WaveSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/WaveSchedules.java
index 198d13d..7c4d065 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/WaveSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/WaveSchedules.java
@@ -80,7 +80,6 @@
Map<String, Object> params = new HashMap<>();
params.put("ids", longs);
waveService.waveToTask(params, loginUserId);
-
}
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java
index b833343..f721dff 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java
@@ -129,7 +129,7 @@
throw new CoolException("鏁版嵁閿欒锛� 娉㈡涓嶅瓨鍦紒锛�");
}
for (Wave wave : waves) {
- if (wave.getExceStatus() >= WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val) {
+ if (wave.getExceStatus() > WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val) {
throw new CoolException("褰撳墠鐘舵�佹棤娉曚笅鍙戞墽琛岋紒锛�");
}
@@ -207,6 +207,7 @@
.set(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_TASK.val)
.set(Wave::getWorkQty, taskItems.stream().mapToDouble(TaskItem::getAnfme).sum())
.set(Wave::getUpdateBy, loginUserId)
+ .set(Wave::getMemo, null)
.set(Wave::getUpdateTime, new Date())
.eq(Wave::getId, wave.getId()))) {
throw new CoolException("娉㈡鐘舵�佷慨鏀瑰け璐ワ紒锛�");
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java
index 5bda303..aca7d0c 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java
@@ -96,7 +96,7 @@
public static List<LocItem> getFirstInFirstOutItemList(String matnrCode, String splrBatch, Double anfme) {
LambdaQueryWrapper<LocItem> locItemQueryWrapper = new LambdaQueryWrapper<>();
locItemQueryWrapper.eq(LocItem::getMatnrCode, matnrCode);
- locItemQueryWrapper.eq(LocItem::getBatch, splrBatch);
+ locItemQueryWrapper.eq(StringUtils.isNotEmpty(splrBatch), LocItem::getBatch, splrBatch);
locItemQueryWrapper.orderByAsc(LocItem::getCreateTime);
String applySql = String.format(
"EXISTS (SELECT 1 FROM man_loc ml " +
@@ -175,7 +175,8 @@
orderOutItemDto.setSiteNo(deviceSite.getSite());
}
- orderOutItemDto.setSource(item.getItemId()).setSourceId(item.getWaveId());
+ orderOutItemDto.setSource(item.getItemId())
+ .setSourceId(item.getWaveId());
list.add(orderOutItemDto);
diff --git a/rsf-server/src/main/resources/application-dev.yml b/rsf-server/src/main/resources/application-dev.yml
index a817733..72f5cf3 100644
--- a/rsf-server/src/main/resources/application-dev.yml
+++ b/rsf-server/src/main/resources/application-dev.yml
@@ -14,10 +14,10 @@
# url: jdbc:mysql://47.76.147.249:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
# username: rsf
username: root
- url: jdbc:mysql://10.10.10.200:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
- password: xltys1995
-# url: jdbc:mysql://127.0.0.1:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
-# password: 34821015
+# url: jdbc:mysql://10.10.10.200:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+# password: xltys1995
+ url: jdbc:mysql://127.0.0.1:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+ password: 34821015
type: com.alibaba.druid.pool.DruidDataSource
druid:
initial-size: 5
--
Gitblit v1.9.1