From 10776dd6f7f9ef9e47419427fcb1b692ed73d54d Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期二, 03 二月 2026 14:34:20 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/devlop-phyz' into devlop-phyz
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java | 2
.gitignore | 1
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java | 34
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskStsType.java | 40 -
rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java | 7
rsf-admin/src/page/basicInfo/basStation/CrossZoneAreaField.jsx | 22
rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/WmsServerFeignClient.java | 8
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java | 164 ++++++
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java | 33 +
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/CallBackEvent.java | 1
rsf-admin/src/page/components/PageDrawer.jsx | 30 +
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java | 22
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java | 182 +++++++
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/MissionStepType.java | 30 +
rsf-server/src/main/java/com/vincent/rsf/server/system/entity/FlowStepInstance.java | 6
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/InBoundServiceImpl.java | 3
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java | 25
rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/ERPController.java | 245 +++++++---
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/AgvServiceImpl.java | 2
rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/fallback/WmsServerFeignClientFallback.java | 85 +++
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/ErpQueryController.java | 18
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java | 6
rsf-server/src/main/java/com/vincent/rsf/server/common/domain/PageParam.java | 131 +++++
rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/InventorySummary.java | 2
rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx | 7
rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java | 3
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java | 232 ++++++----
rsf-admin/src/page/task/TaskList.jsx | 6
28 files changed, 1,069 insertions(+), 278 deletions(-)
diff --git a/.gitignore b/.gitignore
index 0a1a46b..28ca605 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,3 +39,4 @@
logs
logs/**
/log.path_IS_UNDEFINED/*.log
+/log.path_IS_UNDEFINED/*/*.log
diff --git a/rsf-admin/src/page/basicInfo/basStation/CrossZoneAreaField.jsx b/rsf-admin/src/page/basicInfo/basStation/CrossZoneAreaField.jsx
index 708d31b..f81d839 100644
--- a/rsf-admin/src/page/basicInfo/basStation/CrossZoneAreaField.jsx
+++ b/rsf-admin/src/page/basicInfo/basStation/CrossZoneAreaField.jsx
@@ -20,31 +20,32 @@
};
const fetchAreaNames = async () => {
- if (!record?.areas || record.areas.length === 0) return;
+ const areasData = record?.areaIds || record?.areas;
+ if (!areasData || areasData.length === 0) return;
setLoading(true);
try {
// 鎻愬彇鎺掑簭淇℃伅鍜孖D
// Old format: [1, 2, 3] (array of integers)
// New format: [{id: 1, sort: 1}, {id: 2, sort: 2}] (array of objects)
- const isObjectArray = record.areas.length > 0 &&
- typeof record.areas[0] === 'object' &&
- record.areas[0] !== null &&
- 'id' in record.areas[0];
+ const isObjectArray = areasData.length > 0 &&
+ typeof areasData[0] === 'object' &&
+ areasData[0] !== null &&
+ 'id' in areasData[0];
let areaIds = [];
let sortMap = new Map(); // 瀛樺偍 id -> sort 鐨勬槧灏�
if (isObjectArray) {
// 瀵硅薄鏁扮粍鏍煎紡锛屾彁鍙朓D鍜屾帓搴忎俊鎭�
- areaIds = record.areas.map(area => {
+ areaIds = areasData.map(area => {
const id = area.id;
sortMap.set(id, area.sort || 0);
return id;
});
} else {
// 绾疘D鏁扮粍鏍煎紡
- areaIds = record.areas.map(id => Number(id));
+ areaIds = areasData.map(id => Number(id));
}
const res = await request.post(`/warehouseAreas/many/${areaIds.join(',')}`);
@@ -70,7 +71,8 @@
};
useEffect(() => {
- if (record?.areas && record.areas.length !== 0 && record.areas.length > 0) {
+ const areasData = record?.areaIds || record?.areas;
+ if (areasData && areasData.length > 0) {
fetchAreaNames();
}
}, [record]);
@@ -101,10 +103,10 @@
label={`+${areaNames.length - 1}`}
/>
)}
- {areaNames.length === 0 && record.areas && record.areas.length > 0 && (
+ {areaNames.length === 0 && (record?.areaIds || record?.areas) && (record?.areaIds || record?.areas).length > 0 && (
<Chip
size="small"
- label={`${record.areas.length} 涓尯鍩焋}
+ label={`${(record?.areaIds || record?.areas).length} 涓尯鍩焋}
/>
)}
</Stack>
diff --git a/rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx b/rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx
index 0cf5299..8a1160e 100644
--- a/rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx
+++ b/rsf-admin/src/page/basicInfo/matnr/MatnrEdit.jsx
@@ -187,6 +187,13 @@
/>
</Grid>
<Grid item xs={6} display="flex" gap={1}>
+ <TextInput
+ label="table.field.matnr.model"
+ source="model"
+ parse={v => v}
+ />
+ </Grid>
+ <Grid item xs={6} display="flex" gap={1}>
<NumberInput
label="table.field.matnr.weight"
source="weight"
diff --git a/rsf-admin/src/page/components/PageDrawer.jsx b/rsf-admin/src/page/components/PageDrawer.jsx
index 521ee7e..a92a9f5 100644
--- a/rsf-admin/src/page/components/PageDrawer.jsx
+++ b/rsf-admin/src/page/components/PageDrawer.jsx
@@ -23,26 +23,46 @@
}
}
+ const isOpen = !!drawerVal;
+
return (
<Drawer
variant="persistent"
- open={!!drawerVal}
+ open={isOpen}
anchor="right"
onClose={handleClose}
sx={{
zIndex: 100,
'& .MuiDrawer-paper': {
- top: '86px', // AppBar(50px) + TabsBar(36px)
+ top: '86px', // AppBar(50px) + TabsBar(36px)
+ // 褰撳叧闂椂锛岀‘淇濆唴瀹逛笉鍙仛鐒�
+ ...(isOpen ? {} : {
+ pointerEvents: 'none',
+ visibility: 'hidden',
+ })
}
}}
+ // 瀵逛簬 persistent Drawer锛屼娇鐢� PaperProps 鏉ユ帶鍒跺彲璁块棶鎬�
+ PaperProps={{
+ 'aria-hidden': !isOpen,
+ tabIndex: isOpen ? 0 : -1,
+ }}
>
- {!!drawerVal && (
- <Box pt={2} width={{ xs: '100vW', sm: width }} mt={{ xs: 2, sm: 1 }}>
+ {isOpen && (
+ <Box
+ pt={2}
+ width={{ xs: '100vW', sm: width }}
+ mt={{ xs: 2, sm: 1 }}
+ >
<Stack direction="row" p={2}>
<Typography variant="h6" flex="1">
{title}
</Typography>
- <IconButton onClick={handleClose} size="small">
+ <IconButton
+ onClick={handleClose}
+ size="small"
+ aria-label="鍏抽棴"
+ >
<CloseIcon />
</IconButton>
</Stack>
diff --git a/rsf-admin/src/page/task/TaskList.jsx b/rsf-admin/src/page/task/TaskList.jsx
index 55d5af7..5fdfbb1 100644
--- a/rsf-admin/src/page/task/TaskList.jsx
+++ b/rsf-admin/src/page/task/TaskList.jsx
@@ -156,7 +156,7 @@
rowClick={false}
expand={<TaskPanel />}
expandSingle={true}
- omit={['id', 'createTime', 'createBy$', 'memo', 'robotCode', 'exceStatus', 'expDesc', 'expCode', 'status','warehType$']}
+ omit={['id', 'createTime', 'createBy$', 'memo', 'robotCode', 'exceStatus', 'expDesc', 'expCode', 'status','warehType$', 'orderType', 'order_type', 'orderType$']}
>
<NumberField source="id" />
<TextField source="taskCode" label="table.field.task.taskCode" />
@@ -164,9 +164,9 @@
<NumberField source="taskType$" label="table.field.task.taskType" />
<NumberField source="warehType$" label="table.field.task.warehType" />
<TextField source="orgLoc" label="table.field.task.orgLoc" />
- <TextField source="orgSite" label="table.field.task.orgSite" />
+ <TextField source="orgSite$" label="table.field.task.orgSite" />
<TextField source="targLoc" label="table.field.task.targLoc" />
- <TextField source="targSite" label="table.field.task.targSite" />
+ <TextField source="targSite$" label="table.field.task.targSite" />
<TextField source="barcode" label="table.field.task.barcode" />
<TextField source="robotCode" label="table.field.task.robotCode" />
<NumberField source="exceStatus" label="table.field.task.exceStatus" />
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/ERPController.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/ERPController.java
index 90edbd6..d2f59c7 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/ERPController.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/ERPController.java
@@ -2,17 +2,16 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.openApi.entity.dto.CommonResponse;
import com.vincent.rsf.openApi.entity.phyz.*;
import com.vincent.rsf.openApi.feign.wms.WmsServerFeignClient;
+import com.vincent.rsf.openApi.feign.wms.fallback.WmsServerFeignClientFallback;
import com.vincent.rsf.openApi.service.phyz.ErpReportService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -20,6 +19,7 @@
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -153,9 +153,23 @@
return CommonResponse.ok();
}
+ @ApiOperation("搴撳瓨鏌ヨ鏄庣粏锛堣〃鍗曟彁浜わ級")
+ @PostMapping(value = "/inventory/details", consumes = "application/x-www-form-urlencoded")
+ public CommonResponse queryInventoryDetailsForm(HttpServletRequest request) {
+ // 浠庤〃鍗曞弬鏁版瀯寤烘煡璇㈡潯浠�
+ InventoryQueryCondition condition = buildConditionFromRequestParams(request);
+ // 璋冪敤JSON澶勭悊鏂规硶
+ return queryInventoryDetails(condition);
+ }
+
@ApiOperation("搴撳瓨鏌ヨ鏄庣粏")
- @PostMapping("/inventory/details")
- public CommonResponse queryInventoryDetails(@RequestBody InventoryQueryCondition condition) {
+ @PostMapping(value = "/inventory/details", consumes = "application/json")
+ public CommonResponse queryInventoryDetails(@RequestBody(required = false) InventoryQueryCondition condition) {
+ // JSON鏂瑰紡锛氭敮鎸佷笉浼犻�掑弬鏁帮紙{}鎴杗ull鎴栫┖璇锋眰浣擄級锛屽垱寤洪粯璁ょ殑绌烘煡璇㈡潯浠跺璞�
+ if (condition == null) {
+ condition = new InventoryQueryCondition();
+ }
+
if (SIMULATED_DATA_ENABLE.equals("1")) {
String x = "[\n" +
" {\n" +
@@ -207,11 +221,6 @@
return CommonResponse.error("鏈嶅姟鏈垵濮嬪寲");
}
- // 鍙傛暟楠岃瘉
- if (condition == null) {
- return CommonResponse.error("鏌ヨ鏉′欢涓嶈兘涓虹┖");
- }
-
log.info("搴撳瓨鏌ヨ鏄庣粏璇锋眰鍙傛暟锛� {}", JSON.toJSONString(condition));
// 鐩存帴浼犻�掑疄浣撶被锛孎eign浼氳嚜鍔ㄥ簭鍒楀寲涓篔SON
@@ -247,87 +256,114 @@
}
} catch (Exception e) {
log.error("搴撳瓨鏌ヨ鏄庣粏澶辫触", e);
- // 杩囨护閿欒娑堟伅涓殑URL锛屽彧淇濈暀閿欒绫诲瀷
- String errorMessage = e.getMessage();
- if (errorMessage != null) {
- // 濡傛灉鍖呭惈"executing"锛岃鏄庢槸HTTP璇锋眰閿欒锛屽幓鎺塙RL閮ㄥ垎
- if (errorMessage.contains("executing")) {
- int executingIndex = errorMessage.indexOf("executing");
- if (executingIndex > 0) {
- // 鎻愬彇"executing"涔嬪墠鐨勯儴鍒嗭紙濡�"Read timed out"锛�
- errorMessage = errorMessage.substring(0, executingIndex).trim();
- } else {
- // 濡傛灉"executing"鍦ㄥ紑澶达紝浣跨敤榛樿閿欒娑堟伅
- errorMessage = "璇锋眰瓒呮椂";
- }
- }
- // 濡傛灉鍖呭惈"http://"鎴�"https://"锛屼篃灏濊瘯鍘绘帀URL閮ㄥ垎
- else if (errorMessage.contains("http://") || errorMessage.contains("https://")) {
- // 浣跨敤姝e垯琛ㄨ揪寮忓幓鎺塙RL
- errorMessage = errorMessage.replaceAll("https?://[^\\s]+", "").trim();
- if (errorMessage.isEmpty()) {
- errorMessage = "璇锋眰澶辫触";
- }
- }
- }
- return CommonResponse.error("鏌ヨ澶辫触锛�" + (errorMessage != null && !errorMessage.isEmpty() ? errorMessage : "鏈煡閿欒"));
+ String errorMessage = WmsServerFeignClientFallback.filterErrorMessage(e);
+ return CommonResponse.error(errorMessage);
}
}
+ @ApiOperation("搴撳瓨鏌ヨ姹囨�伙紙琛ㄥ崟鎻愪氦锛�")
+ @PostMapping(value = "/inventory/summary", consumes = "application/x-www-form-urlencoded")
+ public CommonResponse queryInventorySummaryForm(HttpServletRequest request) {
+ // 浠庤〃鍗曞弬鏁版瀯寤烘煡璇㈡潯浠�
+ InventoryQueryCondition condition = buildConditionFromRequestParams(request);
+ // 璋冪敤JSON澶勭悊鏂规硶
+ return queryInventorySummary(condition);
+ }
+
@ApiOperation("搴撳瓨鏌ヨ姹囨��")
- @PostMapping("/inventory/summary")
- public CommonResponse queryInventorySummary(@RequestBody JSONObject params) {
+ @PostMapping(value = "/inventory/summary", consumes = "application/json")
+ public CommonResponse queryInventorySummary(@RequestBody(required = false) InventoryQueryCondition condition) {
+ // JSON鏂瑰紡锛氭敮鎸佷笉浼犻�掑弬鏁帮紙{}鎴杗ull鎴栫┖璇锋眰浣擄級锛屽垱寤洪粯璁ょ殑绌烘煡璇㈡潯浠跺璞�
+ if (condition == null) {
+ condition = new InventoryQueryCondition();
+ }
+
if (SIMULATED_DATA_ENABLE.equals("1")) {
- String s = "{\n" +
- " \"code\": 200,\n" +
- " \"msg\": \"鎿嶄綔鎴愬姛\",\n" +
- " \"data\": [\n" +
- " {\n" +
- " \"wareHouseId\": \"WH001\",\n" +
- " \"wareHouseName\": \"鍘熸枡浠撳簱\",\n" +
- " \"matNr\": \"MAT10001\",\n" +
- " \"makTx\": \"閽㈡潗Q235\",\n" +
- " \"spec\": \"鍥芥爣GB/T700-2006\",\n" +
- " \"anfme\": 10.5,\n" +
- " \"unit\": \"鍚╘",\n" +
- " \"stockOrgId\": \"ORG001\",\n" +
- " \"batch\": \"BATCH20260106001\",\n" +
- " \"planNo\": \"Plan20260106006\"\n" +
- " },\n" +
- " {\n" +
- " \"wareHouseId\": \"WH001\",\n" +
- " \"wareHouseName\": \"鍘熸枡浠撳簱\",\n" +
- " \"matNr\": \"MAT10002\",\n" +
- " \"makTx\": \"閾濆瀷鏉�6061\",\n" +
- " \"spec\": \"鍥芥爣GB/T3190-2008\",\n" +
- " \"anfme\": 20.3,\n" +
- " \"unit\": \"鍚╘",\n" +
- " \"stockOrgId\": \"ORG001\",\n" +
- " \"batch\": \"BATCH20260106002\",\n" +
- " \"planNo\": \"Plan20260106005\"\n" +
- " },\n" +
- " {\n" +
- " \"wareHouseId\": \"WH002\",\n" +
- " \"wareHouseName\": \"鎴愬搧浠撳簱\",\n" +
- " \"matNr\": \"MAT30001\",\n" +
- " \"makTx\": \"鐢垫満鎴愬搧\",\n" +
- " \"spec\": \"380V 50Hz 15KW\",\n" +
- " \"anfme\": 100,\n" +
- " \"unit\": \"鍙癨",\n" +
- " \"stockOrgId\": \"ORG001\",\n" +
- " \"batch\": \"BATCH20260106003\",\n" +
- " \"planNo\": \"Plan20260106004\"\n" +
- " }\n" +
- " ]\n" +
- "}";
- return JSONObject.parseObject(s, CommonResponse.class);
+ String x = "[\n" +
+ " {\n" +
+ " \"wareHouseId\": \"WH001\",\n" +
+ " \"wareHouseName\": \"鍘熸枡浠撳簱\",\n" +
+ " \"matNr\": \"MAT10001\",\n" +
+ " \"matTx\": \"閽㈡潗Q235\",\n" +
+ " \"spec\": \"鍥芥爣GB/T700-2006\",\n" +
+ " \"anfme\": 10.5,\n" +
+ " \"unit\": \"鍚╘",\n" +
+ " \"stockOrgId\": \"ORG001\",\n" +
+ " \"batch\": \"BATCH20260106001\",\n" +
+ " \"planNo\": \"Plan20260106006\"\n" +
+ " },\n" +
+ " {\n" +
+ " \"wareHouseId\": \"WH001\",\n" +
+ " \"wareHouseName\": \"鍘熸枡浠撳簱\",\n" +
+ " \"matNr\": \"MAT10002\",\n" +
+ " \"matTx\": \"閾濆瀷鏉�6061\",\n" +
+ " \"spec\": \"鍥芥爣GB/T3190-2008\",\n" +
+ " \"anfme\": 20.3,\n" +
+ " \"unit\": \"鍚╘",\n" +
+ " \"stockOrgId\": \"ORG001\",\n" +
+ " \"batch\": \"BATCH20260106002\",\n" +
+ " \"planNo\": \"Plan20260106005\"\n" +
+ " },\n" +
+ " {\n" +
+ " \"wareHouseId\": \"WH002\",\n" +
+ " \"wareHouseName\": \"鎴愬搧浠撳簱\",\n" +
+ " \"matNr\": \"MAT30001\",\n" +
+ " \"matTx\": \"鐢垫満鎴愬搧\",\n" +
+ " \"spec\": \"380V 50Hz 15KW\",\n" +
+ " \"anfme\": 100,\n" +
+ " \"unit\": \"鍙癨",\n" +
+ " \"stockOrgId\": \"ORG001\",\n" +
+ " \"batch\": \"BATCH20260106003\",\n" +
+ " \"planNo\": \"Plan20260106004\"\n" +
+ " }\n" +
+ "]";
+ return CommonResponse.ok(JSONArray.parseArray(x, InventorySummary.class));
}
- InventoryQueryCondition condition = JSON.parseObject(params.toJSONString(), InventoryQueryCondition.class);
- // 鏁版嵁澶勭悊锛岃浆鍙憇erver
- List<InventorySummary> inventorySummaries = Lists.newArrayList();
- return new CommonResponse().setCode(200).setData(inventorySummaries);
-
+ try {
+ if (wmsServerFeignClient == null) {
+ log.warn("WmsServerFeignClient鏈敞鍏ワ紝鏃犳硶杩涜璋冪敤");
+ return CommonResponse.error("鏈嶅姟鏈垵濮嬪寲");
+ }
+
+ log.info("搴撳瓨鏌ヨ姹囨�昏姹傚弬鏁帮細 {}", JSON.toJSONString(condition));
+
+ // 鐩存帴浼犻�掑疄浣撶被锛孎eign浼氳嚜鍔ㄥ簭鍒楀寲涓篔SON
+ R result = wmsServerFeignClient.queryInventorySummary(condition);
+
+ log.info("搴撳瓨鏌ヨ姹囨�昏繑鍥炵粨鏋滐細 {}", JSON.toJSONString(result));
+
+ if (result != null) {
+ // R绫荤户鎵胯嚜HashMap锛屼娇鐢╣et鏂规硶鑾峰彇鍊�
+ Integer code = (Integer) result.get("code");
+ String msg = (String) result.get("msg");
+ Object data = result.get("data");
+
+ if (code != null && code == 200) {
+ // 灏哅ap鍒楄〃杞崲涓篒nventorySummary鍒楄〃
+ if (data != null) {
+ @SuppressWarnings("unchecked")
+ List<Map<String, Object>> dataList = (List<Map<String, Object>>) data;
+ List<InventorySummary> inventorySummaries = new ArrayList<>();
+ for (Map<String, Object> item : dataList) {
+ InventorySummary summary = JSON.parseObject(JSON.toJSONString(item), InventorySummary.class);
+ inventorySummaries.add(summary);
+ }
+ return CommonResponse.ok(inventorySummaries);
+ } else {
+ return CommonResponse.ok(new ArrayList<>());
+ }
+ } else {
+ return CommonResponse.error(msg != null ? msg : "鏌ヨ澶辫触");
+ }
+ } else {
+ return CommonResponse.error("鏌ヨ澶辫触锛氳繑鍥炵粨鏋滀负绌�");
+ }
+ } catch (Exception e) {
+ log.error("搴撳瓨鏌ヨ姹囨�诲け璐�", e);
+ String errorMessage = WmsServerFeignClientFallback.filterErrorMessage(e);
+ return CommonResponse.error(errorMessage);
+ }
}
@ApiOperation("鐩樼偣缁撴灉纭")
@@ -400,4 +436,47 @@
}
// endregion
+
+ /**
+ * 浠庤姹傚弬鏁帮紙琛ㄥ崟鏁版嵁锛夋瀯寤烘煡璇㈡潯浠跺璞�
+ * 鏀寔 application/x-www-form-urlencoded 鏍煎紡
+ */
+ private InventoryQueryCondition buildConditionFromRequestParams(HttpServletRequest request) {
+ InventoryQueryCondition condition = new InventoryQueryCondition();
+
+ // 浠庤姹傚弬鏁颁腑鑾峰彇瀛楁鍊�
+ String wareHouseId = request.getParameter("wareHouseId");
+ String locId = request.getParameter("locId");
+ String matNr = request.getParameter("matNr");
+ String matGroup = request.getParameter("matGroup");
+ String orderNo = request.getParameter("orderNo");
+ String planNo = request.getParameter("planNo");
+ String batch = request.getParameter("batch");
+
+ // 璁剧疆瀛楁鍊硷紙濡傛灉瀛樺湪锛�
+ if (wareHouseId != null && !wareHouseId.isEmpty()) {
+ condition.setWareHouseId(wareHouseId);
+ }
+ if (locId != null && !locId.isEmpty()) {
+ condition.setLocId(locId);
+ }
+ if (matNr != null && !matNr.isEmpty()) {
+ condition.setMatNr(matNr);
+ }
+ if (matGroup != null && !matGroup.isEmpty()) {
+ condition.setMatGroup(matGroup);
+ }
+ if (orderNo != null && !orderNo.isEmpty()) {
+ condition.setOrderNo(orderNo);
+ }
+ if (planNo != null && !planNo.isEmpty()) {
+ condition.setPlanNo(planNo);
+ }
+ if (batch != null && !batch.isEmpty()) {
+ condition.setBatch(batch);
+ }
+
+ return condition;
+ }
+
}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java
index f36148d..73da571 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java
@@ -43,5 +43,8 @@
//搴撳瓨鏌ヨ鏄庣粏锛圗RP鎺ュ彛锛屽搴攐pen-api鐨�/inventory/details锛�
public static final String QUERY_INVENTORY_DETAILS = "/rsf-server/erp/inventory/details";
+ //搴撳瓨鏌ヨ姹囨�伙紙ERP鎺ュ彛锛屽搴攐pen-api鐨�/inventory/summary锛�
+ public static final String QUERY_INVENTORY_SUMMARY = "/rsf-server/erp/inventory/summary";
+
}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/InventorySummary.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/InventorySummary.java
index 7d51252..1fcfd78 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/InventorySummary.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/InventorySummary.java
@@ -18,7 +18,7 @@
// 鐗╂枡缂栫爜
private String matNr;
// 鐗╂枡鍚嶇О
- private String makTx;
+ private String matTx;
// 瑙勬牸
private String spec;
// 鏁伴噺锛屽皬鏁扮偣鏈�闀�6浣�
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/WmsServerFeignClient.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/WmsServerFeignClient.java
index e48e236..299c917 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/WmsServerFeignClient.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/WmsServerFeignClient.java
@@ -31,4 +31,12 @@
*/
@PostMapping(WmsConstant.QUERY_INVENTORY_DETAILS)
R queryInventoryDetails(@RequestBody InventoryQueryCondition condition);
+
+ /**
+ * 搴撳瓨鏌ヨ姹囨�伙紙璋冪敤server绔殑erpQueryInventorySummary鏂规硶锛�
+ * @param condition 鏌ヨ鏉′欢瀹炰綋绫�
+ * @return 搴撳瓨姹囨�诲垪琛�
+ */
+ @PostMapping(WmsConstant.QUERY_INVENTORY_SUMMARY)
+ R queryInventorySummary(@RequestBody InventoryQueryCondition condition);
}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/fallback/WmsServerFeignClientFallback.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/fallback/WmsServerFeignClientFallback.java
index 0c846f7..2e33cf4 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/fallback/WmsServerFeignClientFallback.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/fallback/WmsServerFeignClientFallback.java
@@ -15,7 +15,88 @@
@Override
public R queryInventoryDetails(InventoryQueryCondition condition) {
- log.error("璋冪敤WMS Server搴撳瓨鏌ヨ鏄庣粏鎺ュ彛澶辫触锛岃Е鍙戦檷绾у鐞�");
- return R.error("鏈嶅姟璋冪敤澶辫触锛岃绋嶅悗閲嶈瘯");
+ return queryInventoryDetails(condition, null);
+ }
+
+ /**
+ * 搴撳瓨鏌ヨ鏄庣粏闄嶇骇澶勭悊锛堝甫寮傚父淇℃伅锛�
+ * @param condition 鏌ヨ鏉′欢
+ * @param throwable 寮傚父淇℃伅锛堝彲閫夛級
+ * @return 閿欒鍝嶅簲
+ */
+ public R queryInventoryDetails(InventoryQueryCondition condition, Throwable throwable) {
+ log.error("璋冪敤WMS Server搴撳瓨鏌ヨ鏄庣粏鎺ュ彛澶辫触锛岃Е鍙戦檷绾у鐞�", throwable);
+ String errorMessage = filterErrorMessage(throwable);
+ return R.error(errorMessage);
+ }
+
+ @Override
+ public R queryInventorySummary(InventoryQueryCondition condition) {
+ return queryInventorySummary(condition, null);
+ }
+
+ /**
+ * 搴撳瓨鏌ヨ姹囨�婚檷绾у鐞嗭紙甯﹀紓甯镐俊鎭級
+ * @param condition 鏌ヨ鏉′欢
+ * @param throwable 寮傚父淇℃伅锛堝彲閫夛級
+ * @return 閿欒鍝嶅簲
+ */
+ public R queryInventorySummary(InventoryQueryCondition condition, Throwable throwable) {
+ log.error("璋冪敤WMS Server搴撳瓨鏌ヨ姹囨�绘帴鍙eけ璐ワ紝瑙﹀彂闄嶇骇澶勭悊", throwable);
+ String errorMessage = filterErrorMessage(throwable);
+ return R.error(errorMessage);
+ }
+
+ /**
+ * 杩囨护閿欒娑堟伅涓殑URL锛屽彧淇濈暀閿欒绫诲瀷
+ * @param throwable 寮傚父瀵硅薄锛堝彲閫夛級
+ * @return 杩囨护鍚庣殑瀹屾暣閿欒娑堟伅锛堝寘鍚�"鏌ヨ澶辫触锛�"鍓嶇紑锛�
+ */
+ public static String filterErrorMessage(Throwable throwable) {
+ if (throwable == null) {
+ return "鏌ヨ澶辫触锛氭湇鍔¤皟鐢ㄥけ璐ワ紝璇风◢鍚庨噸璇�";
+ }
+ return filterErrorMessage(throwable.getMessage());
+ }
+
+ /**
+ * 杩囨护閿欒娑堟伅涓殑URL锛屽彧淇濈暀閿欒绫诲瀷
+ * @param errorMessage 閿欒娑堟伅瀛楃涓诧紙鍙�夛級
+ * @return 杩囨护鍚庣殑瀹屾暣閿欒娑堟伅锛堝寘鍚�"鏌ヨ澶辫触锛�"鍓嶇紑锛�
+ */
+ public static String filterErrorMessage(String errorMessage) {
+ if (errorMessage == null || errorMessage.isEmpty()) {
+ return "鏌ヨ澶辫触锛氭湭鐭ラ敊璇�";
+ }
+
+ String filteredMessage = errorMessage;
+
+ // 濡傛灉鍖呭惈"executing"锛岃鏄庢槸HTTP璇锋眰閿欒锛屽幓鎺塙RL閮ㄥ垎
+ if (filteredMessage.contains("executing")) {
+ int executingIndex = filteredMessage.indexOf("executing");
+ if (executingIndex > 0) {
+ // 鎻愬彇"executing"涔嬪墠鐨勯儴鍒嗭紙濡�"Read timed out"锛�
+ filteredMessage = filteredMessage.substring(0, executingIndex).trim();
+ } else {
+ // 濡傛灉"executing"鍦ㄥ紑澶达紝浣跨敤榛樿閿欒娑堟伅
+ filteredMessage = "璇锋眰瓒呮椂";
+ }
+ }
+ // 濡傛灉鍖呭惈"http://"鎴�"https://"锛屼篃灏濊瘯鍘绘帀URL閮ㄥ垎
+ else if (filteredMessage.contains("http://") || filteredMessage.contains("https://")) {
+ // 浣跨敤姝e垯琛ㄨ揪寮忓幓鎺塙RL
+ filteredMessage = filteredMessage.replaceAll("https?://[^\\s]+", "").trim();
+ if (filteredMessage.isEmpty()) {
+ filteredMessage = "璇锋眰澶辫触";
+ }
+ }
+
+ // 濡傛灉杩囨护鍚庣殑娑堟伅涓虹┖锛屼娇鐢ㄩ粯璁ら敊璇秷鎭�
+ if (filteredMessage.isEmpty()) {
+ filteredMessage = "鏈煡閿欒";
+ }
+
+ // 杩斿洖鍖呭惈"鏌ヨ澶辫触锛�"鍓嶇紑鐨勫畬鏁撮敊璇秷鎭�
+ return "鏌ヨ澶辫触锛�" + filteredMessage;
}
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java
index b5daeb8..8f328d5 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/WcsController.java
@@ -143,9 +143,9 @@
@OperationLog("WCS浠诲姟涓婃姤閫氱煡")
@PostMapping("/task/report")
public R wcsTaskReport(@RequestBody TaskReportParam params) {
- if (params.getType() != 0){
- return wcsService.wcsTaskReport2(params);
- }
+// if (params.getType() != 0){
+// return wcsService.wcsTaskReport2(params);
+// }
return wcsService.wcsTaskReport(params);
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/ErpQueryController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/ErpQueryController.java
index c70bf3d..36457c8 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/ErpQueryController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/ErpQueryController.java
@@ -121,4 +121,22 @@
return receiveMsgService.erpQueryInventoryDetails(condition);
}
+ /**
+ * ERP搴撳瓨鏌ヨ姹囨�伙紙渚沷pen-api妯″潡璋冪敤锛�
+ * 瀵瑰簲open-api鐨� /inventory/summary 鎺ュ彛
+ * @param condition 鏌ヨ鏉′欢
+ * @return 搴撳瓨姹囨�诲垪琛�
+ */
+ @PostMapping("/inventory/summary")
+ @ApiOperation(value = "ERP搴撳瓨鏌ヨ姹囨��", hidden = true)
+ @OperationLog("ERP搴撳瓨鏌ヨ姹囨��")
+ public R erpQueryInventorySummary(@RequestBody InventoryQueryConditionParam condition) {
+ // 鍙傛暟楠岃瘉
+ if (condition == null) {
+ return R.error("鏌ヨ鏉′欢涓嶈兘涓虹┖");
+ }
+
+ return receiveMsgService.erpQueryInventorySummary(condition);
+ }
+
}
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
index d7a2dcb..a633c0a 100644
--- 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
@@ -12,7 +12,6 @@
CALL_BACK_EVENT_OBIT("OTBIN", "鎼繍涓�"),
CALL_BACK_EVENT_BIN("BIN", "鍑虹珯"),
CALL_BACK_EVENT_END("END", "鏀剧瀹屾垚"),
- CALL_BACK_EVENT_TRANSFER("TRANSFER", "涓浆"),
;
CallBackEvent( String event, String desc) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java
index 78a0464..f9b7559 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java
@@ -159,4 +159,11 @@
* @return 搴撳瓨鏄庣粏鍒楄〃
*/
R erpQueryInventoryDetails(InventoryQueryConditionParam condition);
+
+ /**
+ * 搴撳瓨鏌ヨ姹囨�伙紙渚沷pen-api璋冪敤锛�
+ * @param condition 鏌ヨ鏉′欢
+ * @return 搴撳瓨姹囨�诲垪琛�
+ */
+ R erpQueryInventorySummary(InventoryQueryConditionParam condition);
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/AgvServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/AgvServiceImpl.java
index 7b7e4c9..adbcaeb 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/AgvServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/AgvServiceImpl.java
@@ -327,7 +327,7 @@
throw new CoolException("绔欑偣鐘舵�佷笉涓虹┖闂�");
}
if (basStation.getType().equals(StationTypeEnum.STATION_TYPE_MUTI.type)) {
- throw new CoolException("绔欑偣涓烘櫤鑳界珯鐐癸紝绂佹鍛煎彨AGV");
+ throw new CoolException("绔欑偣涓哄厜鐢电珯鐐癸紝绂佹鍛煎彨AGV");
}
List<String> areaList = JSONObject.parseArray(basStation.getCrossZoneArea(), String.class);
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/InBoundServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/InBoundServiceImpl.java
index c50d583..4ac1630 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/InBoundServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/InBoundServiceImpl.java
@@ -182,6 +182,9 @@
}
StringBuilder errorBuilder = new StringBuilder();
List<Long> areaTypeList = LocUtils.getAreaTypeList(station.getStationName());
+ if (areaTypeList.isEmpty()) {
+ throw new CoolException("鏈煡璇㈠埌璧风偣鍙叆搴撳尯锛堝簱浣嶈鍒欐湭閰嶇疆锛夛紒锛侊紒");
+ }
for (Long areaType : areaTypeList) {
if (errorBuilder.length() > 0) {
errorBuilder.append(",");
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
index f771b8f..cd0ab43 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
@@ -1200,4 +1200,186 @@
return details;
}
+
+ /**
+ * 搴撳瓨鏌ヨ姹囨�伙紙渚沷pen-api璋冪敤锛�
+ *
+ * @param condition 鏌ヨ鏉′欢瀹炰綋绫�
+ * @return 搴撳瓨姹囨�诲垪琛�
+ */
+ @Override
+ public R erpQueryInventorySummary(InventoryQueryConditionParam condition) {
+ try {
+ // 鍙傛暟楠岃瘉
+ if (condition == null) {
+ return R.error("鏌ヨ鏉′欢涓嶈兘涓虹┖");
+ }
+
+ // 灏咵RP鍙傛暟鏄犲皠涓烘暟鎹簱瀛楁鍚嶏紙涓嬪垝绾挎牸寮忥級
+ Map<String, Object> queryMap = new HashMap<>();
+
+ // 浠庡疄浣撶被涓彁鍙栨煡璇㈡潯浠讹紝鏄犲皠涓虹湡瀹炵殑鏁版嵁搴撳瓧娈靛悕
+ if (StringUtils.isNotBlank(condition.getMatNr())) {
+ queryMap.put("matnr_code", condition.getMatNr());
+ }
+ if (StringUtils.isNotBlank(condition.getPlanNo())) {
+ queryMap.put("track_code", condition.getPlanNo());
+ }
+ if (StringUtils.isNotBlank(condition.getBatch())) {
+ queryMap.put("batch", condition.getBatch());
+ }
+
+ BaseParam baseParam = new BaseParam();
+ baseParam.syncMap(queryMap);
+ PageParam<LocItem, BaseParam> pageParam = new PageParam<>(baseParam, LocItem.class);
+
+ QueryWrapper<LocItem> wrapper = pageParam.buildWrapper(false);
+
+ // 鐗╂枡缁勶紙闇�瑕侀�氳繃鐗╂枡琛ㄥ叧鑱旀煡璇級
+ if (StringUtils.isNotBlank(condition.getMatGroup())) {
+ // 璋冪敤鐗╂枡Service鏌ヨ鐗╂枡缁勫搴旂殑鐗╂枡ID鍒楄〃锛堝鐢ㄥ凡鏈夋柟娉曪級
+ LambdaQueryWrapper<Matnr> matnrWrapper = new LambdaQueryWrapper<>();
+ matnrWrapper.eq(Matnr::getGroupId, condition.getMatGroup());
+ List<Matnr> matnrs = matnrService.list(matnrWrapper);
+ if (!matnrs.isEmpty()) {
+ List<Long> matnrIds = matnrs.stream().map(Matnr::getId).collect(Collectors.toList());
+ wrapper.in("matnr_id", matnrIds);
+ } else {
+ // 濡傛灉娌℃湁鎵惧埌鐗╂枡锛岃繑鍥炵┖缁撴灉
+ return R.ok().add(new ArrayList<>());
+ }
+ }
+
+ // 鍙煡璇㈡甯哥姸鎬佺殑搴撳瓨锛坰tatus=1琛ㄧず姝e父锛�
+ wrapper.eq("status", 1);
+
+ // 璁剧疆鍒嗛〉鍙傛暟锛屾煡璇㈡墍鏈夋暟鎹敤浜庢眹鎬�
+ pageParam.setCurrent(1);
+ pageParam.setSize(Integer.MAX_VALUE);
+ PageParam<LocItem, BaseParam> pageResult = locItemService.page(pageParam, wrapper);
+ List<LocItem> locItems = pageResult.getRecords();
+
+ if (locItems.isEmpty()) {
+ return R.ok().add(new ArrayList<>());
+ }
+
+ // 鑾峰彇鎵�鏈夐渶瑕佸叧鑱旂殑ID
+ List<Long> locIds = locItems.stream()
+ .map(LocItem::getLocId)
+ .filter(Objects::nonNull)
+ .distinct()
+ .collect(Collectors.toList());
+
+ List<Long> warehouseIds = new ArrayList<>();
+
+ // 璋冪敤LocService鏌ヨ搴撲綅淇℃伅锛堝鐢⊿ervice灞傛柟娉曪級
+ Map<Long, Loc> locMap = new HashMap<>();
+ if (!locIds.isEmpty()) {
+ List<Loc> locs = locService.listByIds(locIds);
+ locMap = locs.stream().collect(Collectors.toMap(Loc::getId, loc -> loc));
+
+ // 鏀堕泦浠撳簱ID
+ warehouseIds = locs.stream()
+ .map(Loc::getWarehouseId)
+ .filter(Objects::nonNull)
+ .distinct()
+ .collect(Collectors.toList());
+ }
+
+ // 浠撳簱缂栫爜杩囨护
+ if (StringUtils.isNotBlank(condition.getWareHouseId())) {
+ String wareHouseId = condition.getWareHouseId();
+ LambdaQueryWrapper<Warehouse> whWrapper = new LambdaQueryWrapper<>();
+ whWrapper.eq(Warehouse::getCode, wareHouseId);
+ // 璋冪敤WarehouseService鏌ヨ浠撳簱淇℃伅锛堝鐢⊿ervice灞傛柟娉曪級
+ List<Warehouse> warehouses = warehouseService.list(whWrapper);
+ if (!warehouses.isEmpty()) {
+ Long targetWarehouseId = warehouses.get(0).getId();
+ // 杩囨护搴撲綅锛屽彧淇濈暀鐩爣浠撳簱鐨勫簱浣�
+ locMap = locMap.entrySet().stream()
+ .filter(entry -> Objects.equals(entry.getValue().getWarehouseId(), targetWarehouseId))
+ .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+
+ // 杩囨护locItems锛屽彧淇濈暀鐩爣浠撳簱鐨�
+ Set<Long> validLocIds = locMap.keySet();
+ locItems = locItems.stream()
+ .filter(item -> item.getLocId() != null && validLocIds.contains(item.getLocId()))
+ .collect(Collectors.toList());
+
+ warehouseIds = Collections.singletonList(targetWarehouseId);
+ } else {
+ return R.ok().add(new ArrayList<>());
+ }
+ }
+
+ // 璋冪敤WarehouseService鏌ヨ浠撳簱淇℃伅锛堝鐢⊿ervice灞傛柟娉曪級
+ Map<Long, Warehouse> warehouseMap = new HashMap<>();
+ if (!warehouseIds.isEmpty()) {
+ List<Warehouse> warehouses = warehouseService.listByIds(warehouseIds);
+ warehouseMap = warehouses.stream().collect(Collectors.toMap(Warehouse::getId, wh -> wh));
+ }
+
+ // 鎸変粨搴撱�佺墿鏂欍�佹壒鍙枫�佸簱瀛樼粍缁囧垎缁勬眹鎬�
+ // 浣跨敤Map鐨刱ey浣滀负鍒嗙粍閿細wareHouseId_matNr_batch_stockOrgId
+ Map<String, Map<String, Object>> summaryMap = new HashMap<>();
+
+ for (LocItem locItem : locItems) {
+ // 鑾峰彇浠撳簱淇℃伅
+ Loc loc = null;
+ if (locItem.getLocId() != null) {
+ loc = locMap.get(locItem.getLocId());
+ }
+
+ if (loc == null) {
+ continue;
+ }
+
+ Warehouse warehouse = null;
+ if (loc.getWarehouseId() != null && warehouseMap.containsKey(loc.getWarehouseId())) {
+ warehouse = warehouseMap.get(loc.getWarehouseId());
+ }
+
+ if (warehouse == null) {
+ continue;
+ }
+
+ // 鏋勫缓鍒嗙粍閿細wareHouseId_matNr_batch_stockOrgId
+ String wareHouseId = warehouse.getCode();
+ String matNr = locItem.getMatnrCode();
+ String batch = locItem.getBatch() != null ? locItem.getBatch() : "";
+ String stockOrgId = locItem.getUseOrgId() != null ? locItem.getUseOrgId() : "";
+ String groupKey = wareHouseId + "_" + matNr + "_" + batch + "_" + stockOrgId;
+
+ // 濡傛灉璇ュ垎缁勫凡瀛樺湪锛岀疮鍔犳暟閲�
+ if (summaryMap.containsKey(groupKey)) {
+ Map<String, Object> summary = summaryMap.get(groupKey);
+ Double currentAnfme = (Double) summary.get("anfme");
+ Double newAnfme = currentAnfme + (locItem.getAnfme() != null ? locItem.getAnfme() : 0.0);
+ summary.put("anfme", newAnfme);
+ } else {
+ // 鍒涘缓鏂扮殑姹囨�昏褰�
+ Map<String, Object> summary = new HashMap<>();
+ summary.put("wareHouseId", wareHouseId);
+ summary.put("wareHouseName", warehouse.getName());
+ summary.put("matNr", matNr);
+ summary.put("matTx", locItem.getMaktx());
+ summary.put("spec", locItem.getSpec());
+ summary.put("unit", locItem.getUnit());
+ summary.put("anfme", locItem.getAnfme() != null ? locItem.getAnfme() : 0.0);
+ summary.put("batch", locItem.getBatch());
+ summary.put("stockOrgId", locItem.getUseOrgId());
+ summary.put("planNo", locItem.getTrackCode());
+ summaryMap.put(groupKey, summary);
+ }
+ }
+
+ // 杞崲涓哄垪琛�
+ List<Map<String, Object>> result = new ArrayList<>(summaryMap.values());
+
+ return R.ok().add(result);
+ } catch (Exception e) {
+ log.error("搴撳瓨鏌ヨ姹囨�诲け璐�", e);
+ return R.error("鏌ヨ澶辫触锛�" + e.getMessage());
+ }
+ }
}
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 2d28fc9..fc647cb 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
@@ -31,8 +31,8 @@
import com.vincent.rsf.server.manager.service.impl.LocServiceImpl;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.manager.enums.LocStsType;
-import com.vincent.rsf.server.system.entity.User;
-import com.vincent.rsf.server.system.service.impl.UserServiceImpl;
+import com.vincent.rsf.server.system.entity.*;
+import com.vincent.rsf.server.system.service.impl.*;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -86,6 +86,14 @@
private RemotesInfoProperties.RcsApi rcsApi;
@Autowired
private UserServiceImpl userService;
+ @Autowired
+ private TaskInstanceServiceImpl taskInstanceService;
+ @Autowired
+ private TaskInstanceNodeServiceImpl taskInstanceNodeService;
+ @Autowired
+ private FlowStepInstanceServiceImpl flowStepInstanceService;
+ @Autowired
+ private FlowInstanceServiceImpl flowInstanceService;
@Override
@@ -477,9 +485,40 @@
if (Objects.isNull(task)) {
throw new CoolException("浠诲姟涓嶅瓨鍦ㄥ彲浠ョ粨鏉燂紒锛�");
}
+ FlowStepInstance flowStepInstance = flowStepInstanceService.getOne(new LambdaQueryWrapper<FlowStepInstance>()
+ .eq(FlowStepInstance::getTaskNo, task.getTaskCode())
+ .eq(FlowStepInstance::getWmsNowTaskStatus, task.getTaskStatus())
+ .eq(FlowStepInstance::getStatus, (short) 1).last("limit 1"));
+ if (Cools.isEmpty(flowStepInstance)){
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+ if (!MissionStepType.getTaskRECEIVE().contains(flowStepInstance.getStepType())){
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>鐩稿叧浠诲姟绫诲瀷闈炴帴鏀跺瀷锛屾楠ら敊涔憋紒锛侊紒");
+ }
+
+ FlowInstance flowInstance = flowInstanceService.getById(flowStepInstance.getFlowInstanceId());
+ if (Cools.isEmpty(flowInstance)) {
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+ List<FlowStepInstance> flowStepInstances = flowStepInstanceService.list(new LambdaQueryWrapper<FlowStepInstance>()
+ .eq(FlowStepInstance::getFlowInstanceId, flowInstance.getId()).eq(FlowStepInstance::getStatus, (short) 0));
+ flowInstance.setStatus(flowStepInstances.isEmpty()? (short) 2:(short) 1);
+ TaskInstanceNode taskInstanceNode = taskInstanceNodeService.getById(flowInstance.getNodeInstanceId());
+ if (Cools.isEmpty(taskInstanceNode)) {
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+ taskInstanceNode.setStatus(flowInstance.getStatus());
+ TaskInstance taskInstance = taskInstanceService.getById(flowInstance.getTaskId());
+ if (Cools.isEmpty(taskInstance)) {
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+
/**鏂欑鎼繍涓紝 淇敼绔欑偣鐘舵��*/
if (params.getEventType().equals(CallBackEvent.CALL_BACK_EVENT_BIN.event)) {
+ if (!flowStepInstance.getStepType().equals(MissionStepType.MISSION_STEP_TYPE_RECEIVE_BIN.type)) {
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
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)
@@ -504,92 +543,47 @@
|| task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_EMPTY_OUT.type)) {
-
-
- /**淇敼鍑哄簱绔欑偣鐘舵��*/
- BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
- .eq(BasStation::getStationName, task.getOrgLoc()));
- if (Objects.isNull(station)) {
- throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒");
- }
- if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
- station.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
- station.setBarcode(null);
- if (!basStationService.updateById(station)) {
- throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
- }
- }
+// /**淇敼鍑哄簱绔欑偣鐘舵��*/
+// BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+// .eq(BasStation::getStationName, task.getOrgLoc()));
+// if (Objects.isNull(station)) {
+// throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒");
+// }
+// if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) {
+// station.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
+// station.setBarcode(null);
+// 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)
- || task.getTaskType().equals(TaskType.TASK_TYPE_EMPTY_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("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
- }
- }
- }
-
- if (!taskService.update(new LambdaUpdateWrapper<Task>()
- .lt(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id)
- .eq(Task::getTaskCode, task.getTaskCode())
- .set(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id))) {
- 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_EMPTY_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("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
- }
- }
-
- if (!taskService.update(new LambdaUpdateWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode())
- .lt(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id)
- .set(Task::getTaskStatus, TaskStsType.AWAIT.id))) {
- throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
- }
+ } else if (params.getEventType().equals(CallBackEvent.CALL_BACK_EVENT_END.event)) {
+ if (flowStepInstance.getStepType().equals(MissionStepType.MISSION_STEP_TYPE_RECEIVE_BIN.type)) {
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>璇峰厛鍑虹珯璇锋眰锛侊紒锛�");
}
- } else if (params.getEventType().equals(CallBackEvent.CALL_BACK_EVENT_TRANSFER.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_EMPTY_IN.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
- if (!taskService.update(new LambdaUpdateWrapper<Task>()
- .lt(Task::getTaskStatus, TaskStsType.WCS_EXECUTE_IN.id)
- .eq(Task::getTaskCode, task.getTaskCode())
- .set(Task::getOrgSite, task.getTargSite())
- .set(Task::getTaskStatus, TaskStsType.WCS_EXECUTE_IN.id))) {
- throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
- }
+ }
+
+
+ task.setTaskStatus(flowStepInstance.getWmsNextTaskStatus());
+ flowStepInstance.setStatus((short)3);
+
+ flowStepInstanceService.updateById(flowStepInstance);
+ taskService.updateById(task);
+ if (flowStepInstance.getWmsNextTaskStatus() != 9999) {
+ FlowStepInstance nextFlowStepInstance = flowStepInstanceService.getOne(new LambdaQueryWrapper<FlowStepInstance>()
+ .eq(FlowStepInstance::getStatus, (short)0)
+ .eq(FlowStepInstance::getStepOrder, flowStepInstance.getStepOrder() + 1)
+ .eq(FlowStepInstance::getWmsNowTaskStatus, flowStepInstance.getWmsNextTaskStatus()));
+ if (Cools.isEmpty(nextFlowStepInstance)) {
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
}
+ nextFlowStepInstance.setStatus((short)1);
+
+ flowStepInstanceService.updateById(nextFlowStepInstance);
+ } else {
+ taskInstance.setStatus((short)2);
+ taskInstanceService.updateById(taskInstance);
}
log.info(JSONObject.toJSONString(params));
return R.ok(JSONObject.toJSONString(params));
@@ -999,8 +993,8 @@
}
Task one = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getBarcode()));
if (!Cools.isEmpty(one)) {
- if (!one.getTaskStatus().equals(TaskStsType.WCS_EXECUTE_IN.id)) {
- return R.error("浠诲姟宸插瓨鍦ㄤ絾鏄姸鎬佷笉涓�鑷达紒锛侊紒").add("浠诲姟宸插瓨鍦ㄤ絾鏄姸鎬佷笉涓�鑷达紒锛侊紒");
+ if (one.getTaskStatus().equals(TaskStsType.MISSION_TRANSFER.id)) {
+ return R.error("浠诲姟宸插瓨鍦ㄤ絾鏄姸鎬佷笉涓�鑷达紒锛侊紒").add("浠诲姟宸插瓨鍦ㄤ絾鏄姸鎬佷笉涓�鑷达紒锛侊紒浠诲姟宸插畬鎴愶紒锛侊紒");
}
InTaskWcsReportParam inTaskWcsReportParam = new InTaskWcsReportParam();
inTaskWcsReportParam.setTaskNo(one.getTaskCode());
@@ -1046,18 +1040,68 @@
if (Objects.isNull(params)) {
return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
}
- Task one = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, params.getSuperTaskNo()));
- if (Cools.isEmpty(one)) {
+ Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, params.getSuperTaskNo()));
+ if (Cools.isEmpty(task)) {
return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟锛侊紒锛�");
}
if (params.getMsgType().equals(WcsMsgTypeEvent.TASK_COMPLETE.event)){
- if (!Cools.isEmpty(one)) {
- one.setTaskStatus(one.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : TaskStsType.AWAIT.id);
- if (!taskService.updateById(one)) {
-// throw new CoolException("瀹屾垚浠诲姟澶辫触");
- return R.error("瀹屾垚浠诲姟澶辫触").add(one);
+ if (!Cools.isEmpty(task)) {
+ FlowStepInstance flowStepInstance = flowStepInstanceService.getOne(new LambdaQueryWrapper<FlowStepInstance>()
+ .eq(FlowStepInstance::getTaskNo, task.getTaskCode())
+ .eq(FlowStepInstance::getWmsNowTaskStatus, task.getTaskStatus())
+ .eq(FlowStepInstance::getStatus, (short) 1).last("limit 1"));
+ if (Cools.isEmpty(flowStepInstance)){
+ return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
}
- return R.ok("浠诲姟瀹屾垚鎴愬姛").add(one);
+
+ if (!MissionStepType.getTaskRECEIVE().contains(flowStepInstance.getStepType())){
+ return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鐩稿叧浠诲姟绫诲瀷闈炴帴鏀跺瀷锛屾楠ら敊涔憋紒锛侊紒");
+ }
+
+ FlowInstance flowInstance = flowInstanceService.getById(flowStepInstance.getFlowInstanceId());
+ if (Cools.isEmpty(flowInstance)) {
+ return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+ List<FlowStepInstance> flowStepInstances = flowStepInstanceService.list(new LambdaQueryWrapper<FlowStepInstance>()
+ .eq(FlowStepInstance::getFlowInstanceId, flowInstance.getId()).eq(FlowStepInstance::getStatus, (short) 0));
+ flowInstance.setStatus(flowStepInstances.isEmpty()? (short) 2:(short) 1);
+ TaskInstanceNode taskInstanceNode = taskInstanceNodeService.getById(flowInstance.getNodeInstanceId());
+ if (Cools.isEmpty(taskInstanceNode)) {
+ return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+ taskInstanceNode.setStatus(flowInstance.getStatus());
+ TaskInstance taskInstance = taskInstanceService.getById(flowInstance.getTaskId());
+ if (Cools.isEmpty(taskInstance)) {
+ return R.error(params.getSuperTaskNo()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+ task.setTaskStatus(flowStepInstance.getWmsNextTaskStatus());
+ flowStepInstance.setStatus((short)3);
+
+ flowStepInstanceService.updateById(flowStepInstance);
+ taskService.updateById(task);
+ if (flowStepInstance.getWmsNextTaskStatus() != 9999) {
+ FlowStepInstance nextFlowStepInstance = flowStepInstanceService.getOne(new LambdaQueryWrapper<FlowStepInstance>()
+ .eq(FlowStepInstance::getStatus, (short)0)
+ .eq(FlowStepInstance::getStepOrder, flowStepInstance.getStepOrder() + 1)
+ .eq(FlowStepInstance::getWmsNowTaskStatus, flowStepInstance.getWmsNextTaskStatus()));
+ if (Cools.isEmpty(nextFlowStepInstance)) {
+ return R.error(task.getTaskCode()+"浠诲姟鍙�==>鏈煡璇㈠埌鐩稿叧浠诲姟鎵ц娴佺▼锛侊紒锛�");
+ }
+ nextFlowStepInstance.setStatus((short)1);
+
+ flowStepInstanceService.updateById(nextFlowStepInstance);
+ } else {
+ taskInstance.setStatus((short)2);
+ taskInstanceService.updateById(taskInstance);
+ }
+ return R.ok("浠诲姟瀹屾垚鎴愬姛").add(task);
+
+
+// one.setTaskStatus(one.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : TaskStsType.AWAIT.id);
+// if (!taskService.updateById(one)) {
+//// throw new CoolException("瀹屾垚浠诲姟澶辫触");
+// return R.error("瀹屾垚浠诲姟澶辫触").add(one);
+// }
}
} else if (params.getMsgType().equals(WcsMsgTypeEvent.TASK_CANCEL.event)){
// if (!Cools.isEmpty(one)) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/PageParam.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/PageParam.java
index 01bb3f2..4c952c0 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/PageParam.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/PageParam.java
@@ -8,7 +8,11 @@
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.DateUtils;
import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
@@ -17,6 +21,7 @@
/**
* Created by vincent on 2/13/2024
*/
+@Slf4j
public class PageParam<T, U extends BaseParam> extends Page<T> {
private static final long serialVersionUID = 1L;
@@ -31,6 +36,11 @@
private final boolean isToUnderlineCase;
private final Class<T> cls;
+
+ /**
+ * 棰濆鐨勫瓧娈甸獙璇佺被鍒楄〃锛堢敤浜庢敮鎸� DTO銆乂O 绛夌被鐨勫瓧娈甸獙璇侊級
+ */
+ private List<Class<?>> additionalFieldClasses;
public PageParam() {
this(null);
@@ -129,7 +139,13 @@
if (!Cools.isEmpty(where.getOrderBy())) {
if (sortIsSQL(where.getOrderBy())) {
- setOrders(parseOrderSQL(where.getOrderBy()));
+ List<OrderItem> orders = parseOrderSQL(where.getOrderBy());
+ // 濡傛灉鎵�鏈夋帓搴忓瓧娈甸兘鏃犳晥锛屼娇鐢ㄩ粯璁ゆ帓搴�
+ if (orders.isEmpty()) {
+ queryWrapper.orderByDesc("create_time");
+ } else {
+ setOrders(orders);
+ }
}
} else {
// queryWrapper.orderByDesc("create_time");
@@ -221,7 +237,13 @@
if (!Cools.isEmpty(where.getOrderBy())) {
if (sortIsSQL(where.getOrderBy())) {
- setOrders(parseOrderSQL(where.getOrderBy()));
+ List<OrderItem> orders = parseOrderSQL(where.getOrderBy());
+ // 濡傛灉鎵�鏈夋帓搴忓瓧娈甸兘鏃犳晥锛屼娇鐢ㄩ粯璁ゆ帓搴�
+ if (orders.isEmpty()) {
+ queryWrapper.orderByDesc("create_time");
+ } else {
+ setOrders(orders);
+ }
}
} else {
// queryWrapper.orderByDesc("create_time");
@@ -282,10 +304,21 @@
private List<OrderItem> parseOrderSQL(String orderSQL) {
List<OrderItem> orders = new ArrayList<>();
if (!Cools.isEmpty(orderSQL)) {
+ // 鑾峰彇瀹炰綋绫荤殑鏈夋晥瀛楁鍒楄〃
+ Set<String> validColumns = getValidColumns();
+
for (String item : orderSQL.split(",")) {
String[] temp = item.trim().split(" ");
if (!temp[0].isEmpty()) {
String column = this.isToUnderlineCase ? Utils.toSymbolCase(temp[0], '_') : temp[0];
+ // 楠岃瘉瀛楁鏄惁瀛樺湪锛屽鏋滀笉瀛樺湪鍒欒烦杩�
+ if (validColumns != null && !validColumns.isEmpty() && !validColumns.contains(column)) {
+ // 鑾峰彇褰撳墠璇锋眰淇℃伅
+ String requestInfo = getRequestInfo();
+// log.warn("璺宠繃鏃犳晥鐨勬帓搴忓瓧娈�: '{}' (鍘熷鍊�: '{}')锛屽疄浣撶被: {}锛岃姹傚湴鍧�: {}",
+// column, temp[0], cls != null ? cls.getSimpleName() : "null", requestInfo);
+ continue;
+ }
boolean asc = temp.length == 1 || !temp[temp.length - 1].toLowerCase().equals(ORDER_DESC_VALUE);
orders.add(new OrderItem(column, asc));
}
@@ -294,6 +327,100 @@
return orders;
}
+ /**
+ * 鑾峰彇褰撳墠璇锋眰淇℃伅锛堣矾寰勫拰鏂规硶锛�
+ * @return 璇锋眰淇℃伅瀛楃涓诧紝鏍煎紡锛欻TTP鏂规硶 璇锋眰璺緞
+ */
+ private String getRequestInfo() {
+ try {
+ ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+ if (attributes != null) {
+ HttpServletRequest request = attributes.getRequest();
+ if (request != null) {
+ String method = request.getMethod();
+ String uri = request.getRequestURI();
+ return String.format("%s %s", method, uri);
+ }
+ }
+ } catch (Exception e) {
+ // 蹇界暐寮傚父锛岄伩鍏嶅奖鍝嶄富娴佺▼
+ log.debug("鑾峰彇璇锋眰淇℃伅澶辫触: {}", e.getMessage());
+ }
+ return "鏈煡";
+ }
+
+ /**
+ * 鑾峰彇瀹炰綋绫荤殑鏈夋晥瀛楁鍒楄〃锛堢敤浜庨獙璇佹帓搴忓瓧娈碉級
+ * 鍖呮嫭锛氬疄浣撶被瀛楁銆佷互鍙婇澶栨寚瀹氱殑DTO/VO绫诲瓧娈�
+ * 娉ㄦ剰锛欱aseParam 鐨勫瓧娈垫槸鏌ヨ鍙傛暟锛屼笉鐢ㄤ簬鏁版嵁搴撳瓧娈甸獙璇�
+ */
+ private Set<String> getValidColumns() {
+ Set<String> columns = new HashSet<>();
+
+ // 1. 鑾峰彇瀹炰綋绫伙紙cls锛夌殑瀛楁
+ if (cls != null) {
+ addFieldsFromClass(cls, columns);
+ }
+
+ // 2. 鑾峰彇棰濆鎸囧畾鐨勭被锛圖TO/VO绛夛級鐨勫瓧娈�
+ if (additionalFieldClasses != null && !additionalFieldClasses.isEmpty()) {
+ for (Class<?> clazz : additionalFieldClasses) {
+ addFieldsFromClass(clazz, columns);
+ }
+ }
+
+ return columns.isEmpty() ? null : columns;
+ }
+
+ /**
+ * 浠庢寚瀹氱被涓彁鍙栧瓧娈靛苟娣诲姞鍒伴泦鍚堜腑
+ * @param clazz 瑕佹彁鍙栧瓧娈电殑绫�
+ * @param columns 瀛楁闆嗗悎
+ */
+ private void addFieldsFromClass(Class<?> clazz, Set<String> columns) {
+ for (Field field : Cools.getAllFields(clazz)) {
+ // 璺宠繃 final銆乻tatic銆乼ransient 瀛楁
+ if (Modifier.isFinal(field.getModifiers())
+ || Modifier.isStatic(field.getModifiers())
+ || Modifier.isTransient(field.getModifiers())) {
+ continue;
+ }
+
+ // 璺宠繃鏍囪涓� exist=false 鐨勫瓧娈碉紙杩欎簺瀛楁涓嶅瓨鍦ㄤ簬鏁版嵁搴撲腑锛�
+ if (field.isAnnotationPresent(TableField.class)) {
+ TableField annotation = field.getAnnotation(TableField.class);
+ if (!annotation.exist()) {
+ continue;
+ }
+ }
+
+ String column = Utils.toSymbolCase(field.getName(), '_');
+ columns.add(column);
+ }
+ }
+
+ /**
+ * 璁剧疆棰濆鐨勫瓧娈甸獙璇佺被鍒楄〃锛堢敤浜庢敮鎸� DTO銆乂O 绛夌被鐨勫瓧娈甸獙璇侊級
+ * @param classes 棰濆鐨勭被鍒楄〃
+ * @return 褰撳墠瀹炰緥锛屾敮鎸侀摼寮忚皟鐢�
+ */
+ public PageParam<T, U> setAdditionalFieldClasses(Class<?>... classes) {
+ if (classes != null && classes.length > 0) {
+ this.additionalFieldClasses = Arrays.asList(classes);
+ }
+ return this;
+ }
+
+ /**
+ * 璁剧疆棰濆鐨勫瓧娈甸獙璇佺被鍒楄〃锛堢敤浜庢敮鎸� DTO銆乂O 绛夌被鐨勫瓧娈甸獙璇侊級
+ * @param classes 棰濆鐨勭被鍒楄〃
+ * @return 褰撳墠瀹炰緥锛屾敮鎸侀摼寮忚皟鐢�
+ */
+ public PageParam<T, U> setAdditionalFieldClasses(List<Class<?>> classes) {
+ this.additionalFieldClasses = classes;
+ return this;
+ }
+
public Map<String, Object> checkoutMap() {
Map<String, Object> map = where.getMap();
if (!Cools.isEmpty(where.getOrderBy())) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java
index eb42464..c5c7be2 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java
@@ -34,7 +34,7 @@
import java.io.Serializable;
import java.util.Date;
import java.util.stream.Collectors;
-
+import com.vincent.rsf.server.manager.service.BasStationService;
@Data
@Accessors(chain = true)
@TableName("man_task")
@@ -390,5 +390,36 @@
return null;
}
}
+ /**
+ * 鑾峰彇婧愮珯鐐瑰悕绉帮紙绔欑偣缂栧彿 + 绔欑偣鍚嶇О锛�
+ */
+ public String getOrgSite$(){
+ if (Cools.isEmpty(this.orgSite)) {
+ return this.orgSite;
+ }
+ BasStationService basStationService = SpringUtils.getBean(BasStationService.class);
+ BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+ .eq(BasStation::getStationName, this.orgSite));
+ if (!Cools.isEmpty(station) && !Cools.isEmpty(station.getStationId())) {
+ return this.orgSite + "(" + station.getStationId() + ")";
+ }
+ return this.orgSite;
+ }
+
+ /**
+ * 鑾峰彇鐩爣绔欑偣鍚嶇О锛堢珯鐐圭紪鍙� + 绔欑偣鍚嶇О锛�
+ */
+ public String getTargSite$(){
+ if (Cools.isEmpty(this.targSite)) {
+ return this.targSite;
+ }
+ BasStationService basStationService = SpringUtils.getBean(BasStationService.class);
+ BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+ .eq(BasStation::getStationName, this.targSite));
+ if (!Cools.isEmpty(station) && !Cools.isEmpty(station.getStationId())) {
+ return this.targSite + "(" + station.getStationId() + ")";
+ }
+ return this.targSite;
+ }
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/MissionStepType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/MissionStepType.java
index a417a16..76bbe56 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/MissionStepType.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/MissionStepType.java
@@ -1,5 +1,8 @@
package com.vincent.rsf.server.manager.enums;
+import java.util.Arrays;
+import java.util.List;
+
/**
* @author Ryan
* @version 1.0
@@ -10,13 +13,18 @@
public enum MissionStepType {
MISSION_STEP_TYPE_RESPONSE("RESPONSE", "鍝嶅簲"),
MISSION_STEP_TYPE_RECEIVE("RECEIVE", "鎺ユ敹"),
+
+ MISSION_STEP_TYPE_RECEIVE_BIN("RECEIVE_BIN", "鎺ユ敹-瑙g粦"),
+
MISSION_STEP_TYPE_REQUEST("REQUEST", "璇锋眰"),
- MISSION_STEP_TYPE_BIND("BIND", "缁戝畾"),
MISSION_STEP_TYPE_UNBIND("UNBIND", "瑙g粦"),
- MISSION_STEP_TYPE_VALIDATE("VALIDATE", "鏍¢獙"),
- MISSION_STEP_TYPE_TRANSFORM("TRANSFORM", "杞崲"),
+ MISSION_STEP_TYPE_BIND("BIND", "缁戝畾"),
MISSION_STEP_TYPE_OBTAIN("OBTAIN", "鑾峰彇"),
MISSION_STEP_TYPE_NO_EXECUTE("NO_EXECUTE", "瓒婅繃"),
+
+
+ MISSION_STEP_TYPE_VALIDATE("VALIDATE", "鏍¢獙"),
+ MISSION_STEP_TYPE_TRANSFORM("TRANSFORM", "杞崲"),
;
public String type;
public String desc;
@@ -26,4 +34,20 @@
this.desc = desc;
}
+ public static List<String> getTaskISSUE(){
+ return Arrays.asList(
+ MissionStepType.MISSION_STEP_TYPE_REQUEST.type,
+ MissionStepType.MISSION_STEP_TYPE_UNBIND.type,
+ MissionStepType.MISSION_STEP_TYPE_BIND.type,
+ MissionStepType.MISSION_STEP_TYPE_OBTAIN.type,
+ MissionStepType.MISSION_STEP_TYPE_NO_EXECUTE.type);
+ }
+
+ public static List<String> getTaskRECEIVE(){
+ return Arrays.asList(
+ MissionStepType.MISSION_STEP_TYPE_RESPONSE.type,
+ MissionStepType.MISSION_STEP_TYPE_RECEIVE_BIN.type,
+ MissionStepType.MISSION_STEP_TYPE_RECEIVE.type);
+ }
+
}
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 416fec2..6360354 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
@@ -36,38 +36,18 @@
- MISSION_TEMPLATE_EXECUTE_WCS_ONE1("1001", "1001.WCS璇锋眰涓嬪彂涓�"),
- MISSION_TEMPLATE_EXECUTE_WCS_ONE2("1002", "1002.WCS浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
- MISSION_TEMPLATE_EXECUTE_HK_RCS_ONE1("1003", "1003.RCS璇锋眰涓嬪彂涓�"),
- MISSION_TEMPLATE_EXECUTE_HK_RCS_ONE2("1004", "1004.RCS浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
- MISSION_TEMPLATE_EXECUTE_HK_RCS_TWO1("1005", "1005.RCS璇锋眰涓嬪彂涓�"),
- MISSION_TEMPLATE_EXECUTE_HK_RCS_TWO2("1006", "1006.RCS浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
- MISSION_TEMPLATE_EXECUTE_WCS_TWO1("1007", "1007.WCS璇锋眰涓嬪彂涓�"),
- MISSION_TEMPLATE_EXECUTE_WCS_TWO2("1008", "1008.WCS浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
- MISSION_TEMPLATE_EXECUTE_WCS_THREE1("1009", "1009.WCS璇锋眰涓嬪彂涓�"),
- MISSION_TEMPLATE_EXECUTE_WCS_THREE2("1010", "1010.WCS浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
- MISSION_TEMPLATE_EXECUTE_WCS_FOUR1("1011", "1011.WCS璇锋眰涓嬪彂涓�"),
- MISSION_TEMPLATE_EXECUTE_WCS_FOUR2("1012", "1012.WCS浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
- MISSION_TEMPLATE_EXECUTE_WCS_FIVE1("1013", "1013.WCS璇锋眰涓嬪彂涓�"),
- MISSION_TEMPLATE_EXECUTE_WCS_FIVE2("1014", "1014.WCS浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
- MISSION_TEMPLATE_EXECUTE_HK_RCS_THREE1("1015", "1015.RCS璇锋眰涓嬪彂涓�"),
- MISSION_TEMPLATE_EXECUTE_HK_RCS_THREE2("1016", "1016.RCS浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
- MISSION_TEMPLATE_EXECUTE_WCS_SIX1("1017", "1017.WCS璇锋眰涓嬪彂涓�"),
- MISSION_TEMPLATE_EXECUTE_WCS_SIX2("1018", "1018.WCS浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
- MISSION_TEMPLATE_EXECUTE_WCS_SEVEN1("1019", "1019.WCS璇锋眰涓嬪彂涓�"),
- MISSION_TEMPLATE_EXECUTE_WCS_SEVEN2("1020", "1020.WCS浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
- MISSION_TEMPLATE_EXECUTE_HK_RCS_FOUR1("1021", "1021.RCS璇锋眰涓嬪彂涓�"),
- MISSION_TEMPLATE_EXECUTE_HK_RCS_FOUR2("1022", "1022.RCS浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
- MISSION_TEMPLATE_EXECUTE_HK_RCS_FIVE1("1023", "1023.RCS璇锋眰涓嬪彂涓�"),
- MISSION_TEMPLATE_EXECUTE_HK_RCS_FIVE2("1024", "1024.RCS浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
- MISSION_TEMPLATE_EXECUTE_WCS_EIGHT1("1025", "1025.WCS璇锋眰涓嬪彂涓�"),
- MISSION_TEMPLATE_EXECUTE_WCS_EIGHT2("1026", "1026.WCS浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
- MISSION_TEMPLATE_NO_EXECUTE1("1027", "1027.涓嶆墽琛屼换鍔�"),
- MISSION_TEMPLATE_WEIGHING_ONE2("1028", "1028.绉伴噸浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
+ MISSION_TEMPLATE_EXECUTE_WCS_ONE11("1001", "WCS璇锋眰涓嬪彂涓�"),
+ MISSION_TEMPLATE_EXECUTE_WCS_ONE22("1002", "WCS浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
+ MISSION_TEMPLATE_EXECUTE_HK_RCS_ONE11("1003", "RCS璇锋眰涓嬪彂涓�"),
+ MISSION_TEMPLATE_EXECUTE_HK_RCS_ONE12("1004", "RCS浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
+ MISSION_TEMPLATE_EXECUTE_HK_RCS_ONE13("1005", "绛夊緟RCS鍑虹珯鍙嶉"),
- MISSION_TEMPLATE_EXECUTE_HK_RCS_ONE3("1029", "1029.RCS缁戝畾鏁版嵁"),
- MISSION_TEMPLATE_EXECUTE_HK_RCS_ONE4("1030", "1030.RCS瑙g粦鏁版嵁"),
+ MISSION_TEMPLATE_EXECUTE_HK_RCS_ONE3("1101", "RCS缁戝畾鏁版嵁"),
+ MISSION_TEMPLATE_EXECUTE_HK_RCS_ONE4("1102", "RCS瑙g粦鏁版嵁"),
+ MISSION_TEMPLATE_WEIGHING_ONE2("1901", "绉伴噸浣滀笟涓瓑寰呬笂鎶ュ畬鎴�"),
+
+ MISSION_TEMPLATE_NO_EXECUTE1("9998", "1005.涓嶆墽琛屼换鍔�"),
MISSION_TRANSFER("9999", "9999.浠诲姟瀹屾垚涓�"),
;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java
index d33430a..f096f84 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java
@@ -101,6 +101,10 @@
Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc()));
sou = loc.getAreaId().toString();
end = task.getTargSite();
+ } else if (task.getTaskType().equals(TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type)){
+ Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc()));
+ sou = loc.getAreaId().toString();
+ end = loc.getAreaId().toString();
}
List<TaskPathTemplateMerge> taskPathTemplateMergeList = taskPathTemplateMergeService.list(new LambdaQueryWrapper<TaskPathTemplateMerge>().eq(TaskPathTemplateMerge::getSourceType, sou).eq(TaskPathTemplateMerge::getTargetType, end));
if (Objects.isNull(taskPathTemplateMergeList) || taskPathTemplateMergeList.isEmpty()) {
@@ -156,7 +160,7 @@
}
List<TaskPathTemplateNode> taskPathTemplateNodeList = taskPathTemplateNodeService.list(
new LambdaQueryWrapper<TaskPathTemplateNode>()
- .eq(TaskPathTemplateNode::getTemplateId, taskPathTemplate.getId()));
+ .eq(TaskPathTemplateNode::getTemplateId, taskPathTemplate.getId()).orderByAsc(TaskPathTemplateNode::getNodeOrder));
for (TaskPathTemplateNode taskPathTemplateNode : taskPathTemplateNodeList) {
List<SubsystemFlowTemplate> subsystemFlowTemplateList = subsystemFlowTemplateService.list(
@@ -167,7 +171,7 @@
for (SubsystemFlowTemplate subsystemFlowTemplate : subsystemFlowTemplateList) {
List<FlowStepTemplate> flowStepTemplateList = flowStepTemplateService.list(
new LambdaQueryWrapper<FlowStepTemplate>()
- .eq(FlowStepTemplate::getFlowId, subsystemFlowTemplate.getId()));
+ .eq(FlowStepTemplate::getFlowId, subsystemFlowTemplate.getId()).orderByAsc(FlowStepTemplate::getStepOrder));
allFlowStepTemplates.addAll(flowStepTemplateList);
}
@@ -190,7 +194,7 @@
}
List<TaskPathTemplateNode> taskPathTemplateNodeList = taskPathTemplateNodeService.list(
new LambdaQueryWrapper<TaskPathTemplateNode>()
- .eq(TaskPathTemplateNode::getTemplateId, taskPathTemplate.getId()));
+ .eq(TaskPathTemplateNode::getTemplateId, taskPathTemplate.getId()).orderByAsc(TaskPathTemplateNode::getNodeOrder));
for (TaskPathTemplateNode taskPathTemplateNode : taskPathTemplateNodeList) {
TaskInstanceNode taskInstanceNode = new TaskInstanceNode(taskPathTemplateNode);
@@ -217,7 +221,7 @@
List<FlowStepTemplate> flowStepTemplateList = flowStepTemplateService.list(
new LambdaQueryWrapper<FlowStepTemplate>()
- .eq(FlowStepTemplate::getFlowId, subsystemFlowTemplate.getId()));
+ .eq(FlowStepTemplate::getFlowId, subsystemFlowTemplate.getId()).orderByAsc(FlowStepTemplate::getStepOrder));
for (FlowStepTemplate flowStepTemplate : flowStepTemplateList) {
j++;
@@ -227,21 +231,21 @@
flowStepInstance.setStepOrder(j);
flowStepInstance.setStepCode(String.valueOf(snowflakeIdWorker.nextId()));
flowStepInstance.setWmsNowTaskStatus(flowStepTemplate.getWmsNowTaskStatus());
+ flowStepInstance.setTaskNo(taskInstance.getTaskNo());
// 鍒ゆ柇鏄惁鏄渶鍚庝竴涓�
if (globalIndex < allFlowStepTemplates.size() - 1) {
// 涓嶆槸鏈�鍚庝竴涓紝鍙栦笅涓�涓殑WmsNowTaskStatus
FlowStepTemplate nextFlowStep = allFlowStepTemplates.get(globalIndex + 1);
flowStepInstance.setWmsNextTaskStatus(nextFlowStep.getWmsNowTaskStatus());
- if (globalIndex == 0){
- task.setTaskStatus(flowStepTemplate.getWmsNowTaskStatus());
- flowStepInstance.setStatus((short)1);
- }
} else {
// 鏄渶鍚庝竴涓紝璁剧疆涓�9999
flowStepInstance.setWmsNextTaskStatus(9999);
}
-
+ if (globalIndex == 0){
+ task.setTaskStatus(flowStepTemplate.getWmsNowTaskStatus());
+ flowStepInstance.setStatus((short)1);
+ }
flowStepInstanceService.save(flowStepInstance);
globalIndex++; // 鏇存柊鍏ㄥ眬绱㈠紩
}
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 bc90f6a..af89fb0 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
@@ -113,19 +113,17 @@
@Scheduled(cron = "0/2 * * * * ? ")
@Transactional(rollbackFor = Exception.class)
public void missionTaskEXECUTE() {
- List<String> typeList = Arrays.asList(
- MissionStepType.MISSION_STEP_TYPE_REQUEST.type,
- MissionStepType.MISSION_STEP_TYPE_UNBIND.type,
- MissionStepType.MISSION_STEP_TYPE_BIND.type,
- MissionStepType.MISSION_STEP_TYPE_OBTAIN.type,
- MissionStepType.MISSION_STEP_TYPE_NO_EXECUTE.type);
List<FlowStepInstance> flowStepInstanceList = flowStepInstanceService.list(new LambdaQueryWrapper<FlowStepInstance>()
- .eq(FlowStepInstance::getStatus, 1).in(FlowStepInstance::getStepType,typeList));
+ .eq(FlowStepInstance::getStatus, 1).in(FlowStepInstance::getStepType,MissionStepType.getTaskISSUE()));
for (FlowStepInstance flowStepInstance : flowStepInstanceList) {
FlowInstance flowInstance = flowInstanceService.getById(flowStepInstance.getFlowInstanceId());
if (Cools.isEmpty(flowInstance)) { continue;}
+ List<FlowStepInstance> flowStepInstances = flowStepInstanceService.list(new LambdaQueryWrapper<FlowStepInstance>()
+ .eq(FlowStepInstance::getFlowInstanceId, flowInstance.getId()).eq(FlowStepInstance::getStatus, (short) 0));
+ flowInstance.setStatus(flowStepInstances.isEmpty()? (short) 2:(short) 1);
TaskInstanceNode taskInstanceNode = taskInstanceNodeService.getById(flowInstance.getNodeInstanceId());
if (Cools.isEmpty(taskInstanceNode)) { continue;}
+ taskInstanceNode.setStatus(flowInstance.getStatus());
TaskInstance taskInstance = taskInstanceService.getById(flowInstance.getTaskId());
if (Cools.isEmpty(taskInstance)) { continue;}
Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, taskInstance.getTaskNo()));
@@ -147,14 +145,21 @@
if (flowStepInstance.getWmsNextTaskStatus() != 9999) {
FlowStepInstance nextFlowStepInstance = flowStepInstanceService.getOne(new LambdaQueryWrapper<FlowStepInstance>()
- .eq(FlowStepInstance::getFlowInstanceId, flowStepInstance.getFlowInstanceId())
- .eq(FlowStepInstance::getFlowInstanceNo, flowStepInstance.getFlowInstanceNo())
+ .eq(FlowStepInstance::getStatus, (short)0)
.eq(FlowStepInstance::getStepOrder, flowStepInstance.getStepOrder() + 1)
.eq(FlowStepInstance::getWmsNowTaskStatus, flowStepInstance.getWmsNextTaskStatus()));
+ if (Cools.isEmpty(nextFlowStepInstance)) {
+ throw new CoolException("浠诲姟鍙�"+task.getTaskCode()+"浠诲姟姝ラ涓㈠け锛侊紒锛�");
+ }
nextFlowStepInstance.setStatus((short)1);
flowStepInstanceService.updateById(nextFlowStepInstance);
+ } else {
+ taskInstance.setStatus((short)2);
+ taskInstanceService.updateById(taskInstance);
}
+ flowInstanceService.updateById(flowInstance);
+ taskInstanceNodeService.updateById(taskInstanceNode);
} catch (Exception e) {
throw new CoolException(e.getMessage());
}
@@ -192,13 +197,18 @@
if (flowStepInstance.getWmsNextTaskStatus() != 9999) {
FlowStepInstance nextFlowStepInstance = flowStepInstanceService.getOne(new LambdaQueryWrapper<FlowStepInstance>()
- .eq(FlowStepInstance::getFlowInstanceId, flowStepInstance.getFlowInstanceId())
- .eq(FlowStepInstance::getFlowInstanceNo, flowStepInstance.getFlowInstanceNo())
+ .eq(FlowStepInstance::getStatus, (short)0)
.eq(FlowStepInstance::getStepOrder, flowStepInstance.getStepOrder() + 1)
.eq(FlowStepInstance::getWmsNowTaskStatus, flowStepInstance.getWmsNextTaskStatus()));
+ if (Cools.isEmpty(nextFlowStepInstance)) {
+ throw new CoolException("浠诲姟鍙�"+task.getTaskCode()+"浠诲姟姝ラ涓㈠け锛侊紒锛�");
+ }
nextFlowStepInstance.setStatus((short)1);
flowStepInstanceService.updateById(nextFlowStepInstance);
+ } else {
+ taskInstance.setStatus((short)2);
+ taskInstanceService.updateById(taskInstance);
}
} else {
flowStepInstance.setRetryTimes(flowStepInstance.getRetryTimes() + 1);
@@ -237,7 +247,7 @@
public void completeStock9999() throws Exception {
try{
- List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskStatus, TaskStsType.MISSION_TRANSFER.id).select(Task::getId));
+ List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskStatus, TaskStsType.MISSION_TRANSFER.id));
if (tasks.isEmpty()) {
return;
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
index b2bcdf1..6b8cbcf 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
@@ -217,14 +217,25 @@
}
task.setTaskType(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type).setWarehType(deviceSite.getDevice());
} else {
- //鍏ㄦ澘鍑哄簱
- DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
- .eq(!Objects.isNull(loc.getChannel()), DeviceSite::getChannel, loc.getChannel())
- .eq(DeviceSite::getSite, siteNo).eq(DeviceSite::getType, TaskType.TASK_TYPE_OUT.type));
- if (Objects.isNull(deviceSite)) {
- throw new CoolException("绔欑偣涓嶆敮鎸佸叏鏉垮嚭搴擄紒锛�");
+ if (resouce.equals(TaskResouceType.TASK_RESOUCE_STOCK_UP.val)){
+ //鍏ㄦ澘鍑哄簱
+ DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+ .eq(DeviceSite::getSite, siteNo).eq(DeviceSite::getType, TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type));
+// .eq(!Objects.isNull(loc.getChannel()), DeviceSite::getChannel, loc.getChannel())
+ if (Objects.isNull(deviceSite)) {
+ throw new CoolException("绔欑偣涓嶆敮鎸佽秺搴擄紒锛�");
+ }
+ task.setTaskType(TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type).setWarehType(deviceSite.getDevice());//瓒婂簱
+ } else {
+ //鍏ㄦ澘鍑哄簱
+ DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+ .eq(DeviceSite::getSite, siteNo).eq(DeviceSite::getType, TaskType.TASK_TYPE_OUT.type));
+// .eq(!Objects.isNull(loc.getChannel()), DeviceSite::getChannel, loc.getChannel())
+ if (Objects.isNull(deviceSite)) {
+ throw new CoolException("绔欑偣涓嶆敮鎸佸叏鏉垮嚭搴擄紒锛�");
+ }
+ task.setTaskType(TaskType.TASK_TYPE_OUT.type).setWarehType(deviceSite.getDevice());
}
- task.setTaskType(TaskType.TASK_TYPE_OUT.type).setWarehType(deviceSite.getDevice());
}
} else if (map.getType().equals(Constants.TASK_TYPE_OUT_CHECK)) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
index fdc69e0..ddb8c49 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -518,8 +518,8 @@
WkOrderItem orderItem = outStockItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
.eq(WkOrderItem::getOrderId, outId)
.eq(StringUtils.isNotBlank(locItem.getBatch()), WkOrderItem::getSplrBatch, locItem.getBatch())
- .eq(StringUtils.isNotBlank(locItem.getFieldsIndex()), WkOrderItem::getFieldsIndex, locItem.getFieldsIndex())
.eq(WkOrderItem::getMatnrId, locItem.getMatnrId()));
+// .eq(StringUtils.isNotBlank(locItem.getFieldsIndex()), WkOrderItem::getFieldsIndex, locItem.getFieldsIndex())
if (Objects.isNull(orderItem)) {
throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�");
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
index 732a3fa..e0cc9ad 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -154,7 +154,7 @@
.setTaskType(TaskType.TASK_TYPE_IN.type)
.setWarehType(WarehType.WAREHOUSE_TYPE_AGV.val)
.setTargLoc(targetLoc)
- .setTargSite(targSite)
+ //.setTargSite(targSite)//鍏ュ簱娌℃湁鐩爣绔欑偣
.setOrgSite(orgSta)
.setBarcode(pakin.getBarcode())
.setCreateBy(loginUserId)
@@ -366,7 +366,7 @@
}
Task task = new Task();
task.setTaskCode(ruleCode)
- .setTaskStatus(TaskStsType.MISSION_INITIAL.id)
+ .setTaskStatus(TaskStsType.GENERATE_IN.id)
.setTaskType(TaskType.TASK_TYPE_IN.type)
.setResource(TaskResouceType.TASK_RESOUCE_PAKIN_TYPE.val)
.setTargLoc(targetLoc)
@@ -664,7 +664,7 @@
}
Task task = new Task();
task.setTaskCode(ruleCode)
- .setTaskStatus(TaskStsType.WCS_EXECUTE_IN.id)
+ .setTaskStatus(TaskStsType.MISSION_INITIAL.id)
.setTaskType(TaskType.TASK_TYPE_IN.type)
.setResource(TaskResouceType.TASK_RESOUCE_PAKIN_TYPE.val)
.setTargLoc(targetLoc)
@@ -761,6 +761,9 @@
} else if (task.getTaskType().equals(TaskType.TASK_TYPE_EMPTY_IN.type)) {
//绉诲簱
complateInstockE(task, loginUserId);
+ } else if (task.getTaskType().equals(TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type)) {
+ //瓒婂簱
+ complateInstockDocking(task, loginUserId);
}
}
}
@@ -776,7 +779,7 @@
@Override
@Transactional(rollbackFor = Exception.class)
public Task taskToTop(Long id, Long loginUserId) throws Exception {
- List<Integer> longs = Arrays.asList(TaskStsType.MISSION_INITIAL.id, TaskStsType.MISSION_INITIAL.id);
+ List<Integer> longs = Arrays.asList(TaskStsType.GENERATE_IN.id, TaskStsType.GENERATE_OUT.id);
Task tasks = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getId, id).in(Task::getTaskStatus, longs));
if (Objects.isNull(tasks)) {
throw new CoolException("浠诲姟宸插鎵ц鐘舵�佷笉鍙竴閿疆椤讹紒锛�");
@@ -800,7 +803,7 @@
@Override
@Transactional(rollbackFor = Exception.class)
public Task operateComplete(Long id, Long loginUserId) {
- List<Integer> longs = Arrays.asList(TaskStsType.MISSION_INITIAL.id, TaskStsType.MISSION_INITIAL.id);
+ List<Integer> longs = Arrays.asList(TaskStsType.GENERATE_IN.id, TaskStsType.GENERATE_OUT.id);
Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
.eq(Task::getId, id)
.in(Task::getTaskStatus, longs));
@@ -984,6 +987,9 @@
if (task.getTaskType().equals(TaskType.TASK_TYPE_EMPTY_OUT.type)) {
//110.绌烘澘鍑哄簱
complateOutStockEmpty(task, loginUserId);
+ } else if (task.getTaskType().equals(TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type)) {
+ //110.绌烘澘鍑哄簱
+ complateOutStockDocking(task, loginUserId);
} else {
complateOutStock(task, loginUserId);
}
@@ -1062,6 +1068,50 @@
}
/**
+ * 瓒婂簱鍥炲簱
+ *
+ * @param task
+ * @param loginUserId
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public void complateInstockDocking(Task task, Long loginUserId) {
+ if (Objects.isNull(task)) {
+ return;
+ }
+ Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getTargLoc()));
+ if (Objects.isNull(loc)) {
+ throw new CoolException("搴撳瓨涓嶅瓨鍦紒锛�");
+ }
+// if (!loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_S.type)) {
+// throw new CoolException("褰撳墠搴撲綅鐘舵�佷笉澶勪簬S.鍏ュ簱棰勭害锛屼笉鍙墽琛屽叆搴撴搷浣滐紒");
+// }
+ loc.setUseStatus(LocStsType.LOC_STS_TYPE_F.type)
+ .setBarcode(task.getBarcode())
+ .setUpdateBy(loginUserId).setUpdateTime(new Date());
+
+ if (!locService.updateById(loc)) {
+ throw new CoolException("搴撲綅淇℃伅鏇存柊澶辫触锛侊紒");
+ }
+
+ List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+ if (taskItems.isEmpty()) {
+ throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦紒锛�");
+ }
+
+ TaskItem taskItem = taskItems.stream().findFirst().get();
+ //淇濆瓨鍏ュ嚭搴撴祦姘�
+ saveStockItems(taskItems, task, null, null, taskItem.getWkType(), OrderType.ORDER_IN.type, loginUserId);
+
+ locItemWorkingService.remove(new LambdaQueryWrapper<LocItemWorking>().eq(LocItemWorking::getTaskId, task.getId()));
+
+ task.setTaskStatus(TaskStsType.UPDATED_IN.id).setUpdateTime(new Date()).setUpdateBy(loginUserId);
+ if (!taskService.updateById(task)) {
+ throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
+
+ }
+
+ /**
* 浠诲姟鍙栨秷
*
* @param ids
@@ -1071,7 +1121,7 @@
@Override
@Transactional(rollbackFor = Exception.class)
public R removeTask(Long[] ids, Long loginUserId) {
- List<Integer> longs = Arrays.asList(TaskStsType.MISSION_INITIAL.id, TaskStsType.MISSION_INITIAL.id);
+ List<Integer> longs = Arrays.asList(TaskStsType.GENERATE_IN.id, TaskStsType.GENERATE_OUT.id);
List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_IN.type, TaskType.TASK_TYPE_OUT.type, TaskType.TASK_TYPE_PICK_AGAIN_OUT.type,
TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_EMPTY_IN.type, TaskType.TASK_TYPE_LOC_MOVE.type,
TaskType.TASK_TYPE_EMPTY_OUT.type, TaskType.TASK_TYPE_MERGE_OUT.type);
@@ -1084,7 +1134,7 @@
}
for (Task task : tasks) {
//鍙栨秷绉诲簱浠诲姟
- if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type) && task.getTaskStatus().equals(TaskStsType.MISSION_INITIAL.id)) {
+ if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type) && task.getTaskStatus().equals(TaskStsType.GENERATE_IN.id)) {
if (!locService.update(new LambdaUpdateWrapper<Loc>()
.eq(Loc::getCode, task.getOrgLoc())
.set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type))) {
@@ -1312,7 +1362,7 @@
task.setTaskCode(ruleCode)
.setTaskType(type)
.setBarcode(task.getBarcode())
- .setTaskStatus(TaskStsType.MISSION_INITIAL.id);
+ .setTaskStatus(TaskStsType.GENERATE_IN.id);
TaskInParam param = new TaskInParam();
param.setSourceStaNo(task.getTargSite())
@@ -1572,6 +1622,100 @@
*/
@Synchronized
@Transactional(rollbackFor = Exception.class)
+ public void complateOutStockDocking(Task task, Long loginUserId) throws Exception {
+
+ if (Objects.isNull(task)) {
+ throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc()));
+ if (Objects.isNull(loc)) {
+ throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�");
+ }
+ if (!loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_R.type)) {
+ throw new CoolException("搴撲綅鐘舵�佷笉澶勭悊浜嶳.鍑哄簱棰勭害锛侊紒");
+ }
+
+ List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+ if (taskItems.isEmpty()) {
+ throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦紒锛�");
+ }
+
+ List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, loc.getId()));
+ if (locItems.isEmpty()) {
+ throw new CoolException("搴撲綅鏄庣粏涓嶅瓨鍦紒锛�");
+ }
+
+ List<LocItemWorking> workings = new ArrayList<>();
+ for (LocItem item : locItems) {
+ LocItemWorking working = new LocItemWorking();
+ BeanUtils.copyProperties(item, working);
+ working.setId(null)
+ .setTaskId(task.getId())
+ .setLocItemId(item.getId())
+ .setUpdateBy(loginUserId)
+ .setUpdateTime(new Date());
+ workings.add(working);
+ }
+
+
+ //娣诲姞鍑哄叆搴撹褰曚俊鎭�
+ Map<Short, List<TaskItem>> listMap = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getWkType));
+ /***鑾峰彇搴撳瓨鍑哄簱鍊硷紝濡傛灉涓虹┖琛ㄧず姝e父鍗曟嵁鍑哄簱锛岄潪绌鸿〃鏄庢槸搴撳瓨鍑哄簱
+ * 1. 搴撳瓨鍑哄簱娌℃湁鍗曟嵁淇℃伅锛屽崟鎹俊鎭粯璁や负绌�
+ * 2. 鍗曟嵁搴撳瓨闇�閫氳繃娉㈡鏌ヨ鍘熷鍗曟嵁淇℃伅锛屽皢鍗曟嵁淇℃伅濉叆stock涓�
+ * */
+ List<TaskItem> list = listMap.get(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_STOCK_OUT.type));
+ if (Objects.isNull(list) || list.isEmpty()) {
+ Map<Long, List<TaskItem>> maps = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getSource));
+ maps.keySet().forEach(key -> {
+ if (task.getResource().equals(TaskResouceType.TASK_RESOUCE_STOCK_UP.val)) {
+ WkOrderItem orderItem = asnOrderItemService.getById(key);
+ if (Objects.isNull(orderItem)) {
+ throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�");
+ }
+ try {
+ saveOutStockItem(maps.get(key), orderItem, loginUserId);
+ } catch (Exception e) {
+ throw new CoolException(e.getMessage());
+ }
+ }
+ });
+ } else {
+ try {
+ saveOutStockItem(taskItems, null, null, null, loginUserId);
+ } catch (Exception e) {
+ throw new CoolException(e.getMessage());
+ }
+ }
+
+ /**淇敼涓哄簱浣嶇姸鎬佷负O.绌哄簱*/
+ if (!locService.update(new LambdaUpdateWrapper<Loc>()
+ .set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_S.type)
+ .set(Loc::getBarcode, loc.getBarcode())
+ .set(Loc::getUpdateBy, loginUserId)
+ .set(Loc::getUpdateTime, new Date())
+ .eq(Loc::getId, loc.getId()))) {
+ throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
+
+ if (!this.update(new LambdaUpdateWrapper<Task>()
+ .eq(Task::getId, task.getId())
+ .set(Task::getUpdateBy, loginUserId)
+ .set(Task::getUpdateTime, new Date())
+ .set(Task::getTargLoc, task.getOrgLoc())
+ .set(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id))) {
+ throw new CoolException("搴撳瓨鐘舵�佹洿鏂板け璐ワ紒锛�");
+ }
+ }
+
+ /**
+ * @author Ryan
+ * @date 2025/5/20
+ * @description: 瀹屾垚鍑哄簱浠诲姟锛屾洿鏂板嚭搴撳簱瀛樹俊鎭�
+ * @version 1.0
+ */
+ @Synchronized
+ @Transactional(rollbackFor = Exception.class)
public void complateOutStockEmpty(Task task, Long loginUserId) throws Exception {
if (Objects.isNull(task)) {
throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
@@ -1693,7 +1837,7 @@
if (Objects.isNull(ids) || ids.isEmpty()) {
return R.error("浠诲姟缂栫爜涓嶈兘涓虹┖锛侊紒");
}
- List<Integer> integers = Arrays.asList(TaskStsType.MISSION_INITIAL.id, TaskStsType.MISSION_INITIAL.id);
+ List<Integer> integers = Arrays.asList(TaskStsType.GENERATE_IN.id, TaskStsType.GENERATE_OUT.id);
List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
.in(Task::getId, ids)
.in(Task::getTaskStatus, integers)
@@ -1739,7 +1883,7 @@
}
}
- /**鍒ゆ柇鏄惁鏅鸿兘绔欑偣锛岄潪鍏夊簵绔欑偣闇�绠℃帶绔欑偣鐘舵��*/
+ /**鍒ゆ柇鏄惁鍏夌數绔欑偣锛岄潪鍏夊簵绔欑偣闇�绠℃帶绔欑偣鐘舵��*/
if (!Objects.isNull(station) && 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)) {
station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/entity/FlowStepInstance.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/entity/FlowStepInstance.java
index 7167dc9..489e71b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/entity/FlowStepInstance.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/entity/FlowStepInstance.java
@@ -152,6 +152,12 @@
@ApiModelProperty(value= "wms褰撳墠浠诲姟绫诲瀷ID")
private Integer wmsNowTaskStatus;
+ /**
+ * 浠诲姟鍙�
+ */
+ @ApiModelProperty(value= "浠诲姟鍙�")
+ private String taskNo;
+
public FlowStepInstance() {}
public FlowStepInstance(FlowStepTemplate flowStepTemplate) {
this.stepTemplateId = flowStepTemplate.getId();
--
Gitblit v1.9.1