From c96b149557eb570ec3ae28e0d0c03adef734766a Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期二, 21 四月 2026 15:20:35 +0800
Subject: [PATCH] feat: 添加机械手选择功能并优化MES请求处理
---
Code/WMS/WIDESEA_WMSClient/src/extension/stock/extend/RobotSelect.vue | 125 +++++++++++++++++++++++++
Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Outbound.cs | 3
Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs | 16 ++-
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/QuartzLogHelper.cs | 14 ++
Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/MesUploadHelper.cs | 20 +++
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs | 19 +--
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj | 2
Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs | 6
Code/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMesUploadHelper.cs | 2
Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MesService.cs | 2
Code/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMesService.cs | 7 +
Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs | 3
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Filter/ApiAuthorizeFilter.cs | 3
Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs | 7 +
Code/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.jsx | 53 +---------
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/QuartzLogger.cs | 2
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs | 2
Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/UnbindContainerRequestDto.cs | 5 +
Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/BindContainerRequestDto.cs | 5 +
Code/.omc/state/subagent-tracking.json | 2
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Middlewares/HttpRequestMiddleware.cs | 2
21 files changed, 221 insertions(+), 79 deletions(-)
diff --git a/Code/.omc/state/subagent-tracking.json b/Code/.omc/state/subagent-tracking.json
index ccae26c..585696f 100644
--- a/Code/.omc/state/subagent-tracking.json
+++ b/Code/.omc/state/subagent-tracking.json
@@ -1459,5 +1459,5 @@
"total_spawned": 135,
"total_completed": 157,
"total_failed": 0,
- "last_updated": "2026-04-20T17:02:18.739Z"
+ "last_updated": "2026-04-21T06:46:41.255Z"
}
\ No newline at end of file
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Filter/ApiAuthorizeFilter.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Filter/ApiAuthorizeFilter.cs
index 36e0e7a..2591142 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Filter/ApiAuthorizeFilter.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Filter/ApiAuthorizeFilter.cs
@@ -7,6 +7,7 @@
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Hosting;
using WIDESEAWCS_Core.Authorization;
@@ -112,7 +113,7 @@
int ExpMinutes = AppSettings.Get("ExpMinutes").ObjToInt();
if ((expDate.GetValueOrDefault() - DateTime.Now).TotalMinutes < ExpMinutes / 3 && context.HttpContext.Request.Path != replaceTokenPath)
{
- context.HttpContext.Response.Headers.Add("wideseawcs_exp", "1");
+ context.HttpContext.Response.Headers.Append("wideseawcs_exp", "1");
}
}
}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/QuartzLogger.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/QuartzLogger.cs
index 8789c83..a9baa03 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/QuartzLogger.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/LogHelper/QuartzLogger.cs
@@ -166,7 +166,7 @@
string fileName = GetLogFileName(entry.Source);
string filePath = Path.Combine(_logFolder, fileName);
string content = entry.ToFormattedString() + Environment.NewLine;
- ConsoleHelper.WriteInfoLine(content);
+ //ConsoleHelper.WriteInfoLine(content);
File.AppendAllText(filePath, content);
}
}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Middlewares/HttpRequestMiddleware.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Middlewares/HttpRequestMiddleware.cs
index 9e651d3..2060a13 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Middlewares/HttpRequestMiddleware.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Middlewares/HttpRequestMiddleware.cs
@@ -25,7 +25,7 @@
public async Task InvokeAsync(HttpContext context)
{
- context.Response.Headers.Add("Access-Control-Expose-Headers", "wideseawcs_exp");
+ context.Response.Headers.Append("Access-Control-Expose-Headers", "wideseawcs_exp");
await _next(context);
}
}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj
index 3d0d2f9..c9b8993 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj
@@ -65,7 +65,7 @@
</ItemGroup>
<ItemGroup>
- <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
+ <PackageReference Include="Swashbuckle.AspNetCore" Version="8.0.0" />
</ItemGroup>
<ItemGroup>
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/QuartzLogHelper.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/QuartzLogHelper.cs
index f09f4b6..cc0c9a5 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/QuartzLogHelper.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/QuartzLogHelper.cs
@@ -95,4 +95,18 @@
logger.Debug(loggerMessage, args);
QuartzLogger.Debug(quartzMessage, deviceCode);
}
+
+ /// <summary>
+ /// 璁板綍璋冭瘯鏃ュ織
+ /// </summary>
+ /// <param name="logger">ILogger 瀹炰緥</param>
+ /// <param name="loggerMessage">ILogger 鐨勭粨鏋勫寲鏃ュ織妯℃澘锛堟敮鎸佸崰浣嶇锛�</param>
+ /// <param name="quartzMessage">QuartzLogger 鐨勬棩蹇楁秷鎭�</param>
+ /// <param name="deviceCode">璁惧缂栫爜</param>
+ /// <param name="args">ILogger 缁撴瀯鍖栨棩蹇楃殑鍙傛暟</param>
+ public static void LogDebug(ILogger logger, string loggerMessage, string deviceCode)
+ {
+ logger.Debug(loggerMessage);
+ QuartzLogger.Debug(loggerMessage, deviceCode);
+ }
}
\ No newline at end of file
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
index 648454e..cba170a 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -210,6 +210,8 @@
return Task.CompletedTask;
}
+
+
// ========== 鏋勫缓鍛戒护 ==========
// 鍛戒护鏋勫缓涓嬫矇鍒颁笓鐢ㄦ瀯寤哄櫒
object? stackerCraneTaskCommand = _commandBuilder.ConvertToStackerCraneTaskCommand(task);
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
index 5d14c3f..80771a1 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneTaskSelector.cs
@@ -100,15 +100,14 @@
Dt_Task? candidateTask;
var deviceCode = commonStackerCrane.DeviceCode;
- //_logger.LogInformation("SelectTask锛氬紑濮嬮�夋嫨浠诲姟锛岃澶�: {DeviceCode}锛屼笂涓�浠诲姟绫诲瀷: {LastTaskType}", deviceCode, commonStackerCrane.LastTaskType);
- //QuartzLogger.Info($"寮�濮嬮�夋嫨浠诲姟锛岃澶�: {deviceCode}锛屼笂涓�浠诲姟绫诲瀷: {commonStackerCrane.LastTaskType}", deviceCode);
+ QuartzLogHelper.LogDebug(_logger, $"寮�濮嬮�夋嫨浠诲姟锛岃澶�: {deviceCode}锛屼笂涓�浠诲姟绫诲瀷: {commonStackerCrane.LastTaskType}",commonStackerCrane.DeviceName);
// 鏍规嵁涓婁竴浠诲姟绫诲瀷鍐冲畾鏌ヨ绛栫暐
if (commonStackerCrane.LastTaskType == null || commonStackerCrane.LastTaskType == TaskRelocationTypeEnum.Relocation.GetHashCode())
{
// 娌℃湁涓婁竴浠诲姟绫诲瀷锛屾煡璇㈡櫘閫氫换鍔�
candidateTask = _taskService.QueryStackerCraneTask(deviceCode);
- //QuartzLogHelper.LogDebug(_logger, "SelectTask锛氭煡璇㈡櫘閫氫换鍔★紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", $"鏌ヨ鏅�氫换鍔★紝璁惧: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum);
+ QuartzLogHelper.LogDebug(_logger, $"鏌ヨ鏅�氫换鍔★紝璁惧: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", commonStackerCrane.DeviceName);
}
else if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
{
@@ -116,26 +115,26 @@
candidateTask = _taskService.QueryStackerCraneInTask(deviceCode);
// 濡傛灉娌℃湁鍏ュ簱浠诲姟锛屽啀鏌ヤ竴涓嬪嚭搴撲换鍔�
candidateTask ??= _taskService.QueryStackerCraneOutTask(deviceCode);
- //QuartzLogHelper.LogDebug(_logger, "SelectTask锛氬嚭搴撳悗浼樺厛鏌ュ叆搴擄紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", $"鍑哄簱鍚庝紭鍏堟煡鍏ュ簱锛岃澶�: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum);
+ QuartzLogHelper.LogDebug(_logger, $"鍑哄簱鍚庝紭鍏堟煡鍏ュ簱锛岃澶�: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", commonStackerCrane.DeviceName);
}
else
{
// 涓婁竴浠诲姟鏄叆搴擄紙闈炲嚭搴擄級锛屼紭鍏堟煡鍑哄簱浠诲姟
candidateTask = _taskService.QueryStackerCraneOutTask(deviceCode);
- //QuartzLogHelper.LogDebug(_logger, "SelectTask锛氬叆搴撳悗浼樺厛鏌ュ嚭搴擄紝璁惧: {DeviceCode}锛岀粨鏋�: {TaskNum}", $"鍏ュ簱鍚庝紭鍏堟煡鍑哄簱锛岃澶�: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum);
+ QuartzLogHelper.LogDebug(_logger, $"鍏ュ簱鍚庝紭鍏堟煡鍑哄簱锛岃澶�: {deviceCode}锛岀粨鏋�: {candidateTask?.TaskNum}", commonStackerCrane.DeviceName);
}
// 濡傛灉娌℃湁鍊欓�変换鍔★紝杩斿洖 null
if (candidateTask == null)
{
- //QuartzLogHelper.LogDebug(_logger, "SelectTask锛氭病鏈夊�欓�変换鍔★紝璁惧: {DeviceCode}", $"娌℃湁鍊欓�変换鍔★紝璁惧: {deviceCode}", deviceCode, deviceCode);
+ QuartzLogHelper.LogDebug(_logger, $"娌℃湁鍊欓�変换鍔★紝璁惧: {deviceCode}", commonStackerCrane.DeviceName);
return null;
}
// 濡傛灉涓嶆槸鍑哄簱浠诲姟锛岀洿鎺ヨ繑鍥�
if (candidateTask.TaskType.GetTaskTypeGroup() != TaskTypeGroup.OutbondGroup)
{
- QuartzLogHelper.LogInfo(_logger, "SelectTask锛氶�変腑闈炲嚭搴撲换鍔★紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}锛屼换鍔$被鍨�: {TaskType}", $"閫変腑闈炲嚭搴撲换鍔★紝浠诲姟鍙�: {candidateTask.TaskNum}锛屼换鍔$被鍨�: {candidateTask.TaskType}", deviceCode, deviceCode, candidateTask.TaskNum, candidateTask.TaskType);
+ QuartzLogHelper.LogDebug(_logger, $"閫変腑闈炲嚭搴撲换鍔★紝浠诲姟鍙�: {candidateTask.TaskNum}锛屼换鍔$被鍨�: {candidateTask.TaskType}", commonStackerCrane.DeviceName);
return candidateTask;
}
@@ -143,7 +142,7 @@
Dt_Task? selectedTask = TrySelectOutboundTask(candidateTask);
if (selectedTask != null)
{
- QuartzLogHelper.LogInfo(_logger, "SelectTask锛氶�変腑鍑哄簱浠诲姟锛岃澶�: {DeviceCode}锛屼换鍔″彿: {TaskNum}", $"閫変腑鍑哄簱浠诲姟锛屼换鍔″彿: {selectedTask.TaskNum}", deviceCode, deviceCode, selectedTask.TaskNum);
+ QuartzLogHelper.LogDebug(_logger, $"閫変腑鍑哄簱浠诲姟锛屼换鍔″彿: {selectedTask.TaskNum}", commonStackerCrane.DeviceName);
return selectedTask;
}
@@ -160,14 +159,14 @@
selectedTask = TrySelectOutboundTask(alternativeTask);
if (selectedTask != null)
{
- QuartzLogHelper.LogInfo(_logger, "SelectTask锛氶�変腑澶囬�夊嚭搴撲换鍔★紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", $"閫変腑澶囬�夊嚭搴撲换鍔★紝浠诲姟鍙�: {selectedTask.TaskNum}", deviceCode, deviceCode, selectedTask.TaskNum);
+ QuartzLogHelper.LogDebug(_logger, $"閫変腑澶囬�夊嚭搴撲换鍔★紝浠诲姟鍙�: {selectedTask.TaskNum}", commonStackerCrane.DeviceName);
return selectedTask;
}
}
// 娌℃湁鍙敤鍑哄簱浠诲姟锛屽皾璇曡繑鍥炲叆搴撲换鍔�
var inboundTask = _taskService.QueryStackerCraneInTask(deviceCode);
- QuartzLogHelper.LogInfo(_logger, "SelectTask锛氳繑鍥炲叆搴撲换鍔★紝璁惧: {DeviceCode}锛屼换鍔″彿: {TaskNum}", $"杩斿洖鍏ュ簱浠诲姟锛屼换鍔″彿: {inboundTask?.TaskNum}", deviceCode, deviceCode, inboundTask?.TaskNum);
+ QuartzLogHelper.LogDebug(_logger, $"杩斿洖鍏ュ簱浠诲姟锛屼换鍔″彿: {inboundTask?.TaskNum}", commonStackerCrane.DeviceName);
return inboundTask;
}
diff --git a/Code/WMS/WIDESEA_WMSClient/src/extension/stock/extend/RobotSelect.vue b/Code/WMS/WIDESEA_WMSClient/src/extension/stock/extend/RobotSelect.vue
new file mode 100644
index 0000000..80bd972
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMSClient/src/extension/stock/extend/RobotSelect.vue
@@ -0,0 +1,125 @@
+<template>
+ <div>
+ <vol-box
+ v-model="showDetialBox"
+ :lazy="true"
+ width="400px"
+ :padding="15"
+ title="閫夋嫨鏈烘鎵�"
+ >
+ <div>
+ <el-form>
+ <el-form-item required label="鏈烘鎵嬶細">
+ <el-select v-model="selectedRobot" placeholder="璇烽�夋嫨鏈烘鎵�" style="width: 100%">
+ <el-option
+ v-for="item in robotList"
+ :key="item.robotCode"
+ :label="item.robotName"
+ :value="item.robotCode"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-form>
+ </div>
+ <template #footer>
+ <el-button type="primary" size="small" @click="submit">纭</el-button>
+ <el-button type="danger" size="small" @click="close">鍏抽棴</el-button>
+ </template>
+ </vol-box>
+ </div>
+</template>
+
+<script>
+import VolBox from "@/components/basic/VolBox.vue";
+export default {
+ components: { VolBox },
+ data() {
+ return {
+ showDetialBox: false,
+ robotList: [
+ { robotCode: '娉ㄦ恫缁勭洏鏈烘鎵�', robotName: '娉ㄦ恫缁勭洏鏈烘鎵�' },
+ { robotCode: '楂樻俯鎹㈢洏鏈烘鎵�', robotName: '楂樻俯鎹㈢洏鏈烘鎵�' },
+ { robotCode: '鍖栨垚鎹㈢洏鏈烘鎵�', robotName: '鍖栨垚鎹㈢洏鏈烘鎵�' },
+ { robotCode: '鎷嗙洏鏈烘鎵�', robotName: '鎷嗙洏鏈烘鎵�' },
+ { robotCode: '鎴愬搧缁勭洏鏈烘鎵�', robotName: '鎴愬搧缁勭洏鏈烘鎵�' }
+ ],
+ selectedRobot: '',
+ currentRow: null,
+ actionType: null // 'bind' or 'unbind'
+ };
+ },
+ methods: {
+ open(action, row) {
+ this.actionType = action;
+ this.currentRow = row;
+ this.selectedRobot = '';
+ this.showDetialBox = true;
+ },
+ close() {
+ this.showDetialBox = false;
+ },
+ async submit() {
+ if (!this.selectedRobot) {
+ return this.$message.error("璇烽�夋嫨鏈烘鎵�");
+ }
+
+ this.showDetialBox = false;
+
+ try {
+ if (this.actionType === 'bind') {
+ // 缁勭洏纭
+ await this.$confirm(
+ `纭鎵ц鎵樼洏缁勭洏鎿嶄綔锛焅n鎵樼洏缂栧彿锛�${this.currentRow.palletCode}\n鏈烘鎵嬶細${this.selectedRobot}`,
+ "缁勭洏纭",
+ {
+ confirmButtonText: "纭",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ }
+ );
+
+ const result = await this.http.post("/api/StockInfoDetail/BindContainer", {
+ palletCode: this.currentRow.palletCode,
+ robotCode: this.selectedRobot
+ }, "姝e湪璋冪敤MES鎺ュ彛...");
+
+ if (result.status) {
+ this.$Message.success(result.message || "鎵樼洏缁勭洏鎴愬姛");
+ this.$parent.$refs.table.load();
+ } else {
+ this.$error(result.message || "鎵樼洏缁勭洏澶辫触");
+ }
+ } else if (this.actionType === 'unbind') {
+ // 鎷嗙洏纭
+ await this.$confirm(
+ `纭鎵ц鎵樼洏鎷嗙洏鎿嶄綔锛焅n鎵樼洏缂栧彿锛�${this.currentRow.palletCode}\n鏈烘鎵嬶細${this.selectedRobot}`,
+ "鎷嗙洏纭",
+ {
+ confirmButtonText: "纭",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ }
+ );
+
+ const result = await this.http.post("/api/StockInfoDetail/UnbindContainer", {
+ palletCode: this.currentRow.palletCode,
+ robotCode: this.selectedRobot
+ }, "姝e湪璋冪敤MES鎺ュ彛...");
+
+ if (result.status) {
+ this.$Message.success(result.message || "鎵樼洏鎷嗙洏鎴愬姛");
+ this.$parent.$refs.table.load();
+ } else {
+ this.$error(result.message || "鎵樼洏鎷嗙洏澶辫触");
+ }
+ }
+ } catch (error) {
+ if (error !== "cancel") {
+ this.$error(error.message || "缃戠粶閿欒锛岃绋嶅悗閲嶈瘯");
+ }
+ }
+ }
+ }
+};
+</script>
diff --git a/Code/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.jsx b/Code/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.jsx
index 0885fc8..6d53e9c 100644
--- a/Code/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.jsx
+++ b/Code/WMS/WIDESEA_WMSClient/src/extension/stock/stockInfo.jsx
@@ -1,10 +1,11 @@
//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+import RobotSelect from './extend/RobotSelect.vue';
let extension = {
components: {
//鏌ヨ鐣岄潰鎵╁睍缁勪欢
gridHeader: '',
- gridBody: '',
+ gridBody: RobotSelect,
gridFooter: '',
//鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
modelHeader: '',
@@ -54,29 +55,8 @@
},
// 鎵樼洏缁勭洏鎿嶄綔
- async handleBind(row) {
- try {
- await this.$confirm(`纭鎵ц鎵樼洏缁勭洏鎿嶄綔锛焅n鎵樼洏缂栧彿锛�${row.palletCode}`, "缁勭洏纭", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- });
-
- const result = await this.http.post("/api/StockInfoDetail/BindContainer", {
- palletCode: row.palletCode
- }, "姝e湪璋冪敤MES鎺ュ彛...");
-
- if (result.status) {
- this.$Message.success(result.message || "鎵樼洏缁勭洏鎴愬姛");
- this.$refs.table.load();
- } else {
- this.$error(result.message || "鎵樼洏缁勭洏澶辫触");
- }
- } catch (error) {
- if (error !== "cancel") {
- this.$error(error.message || "缃戠粶閿欒锛岃绋嶅悗閲嶈瘯");
- }
- }
+ handleBind(row) {
+ this.$refs.gridBody.open('bind', row);
},
// 鎵樼洏杩涚珯鎿嶄綔
@@ -134,29 +114,8 @@
},
// 鎵樼洏鎷嗙洏鎿嶄綔
- async handleUnbind(row) {
- try {
- await this.$confirm(`纭鎵ц鎵樼洏鎷嗙洏鎿嶄綔锛焅n鎵樼洏缂栧彿锛�${row.palletCode}`, "鎷嗙洏纭", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- });
-
- const result = await this.http.post("/api/StockInfoDetail/UnbindContainer", {
- palletCode: row.palletCode,
- }, "姝e湪璋冪敤MES鎺ュ彛...");
-
- if (result.status) {
- this.$Message.success(result.message || "鎵樼洏鎷嗙洏鎴愬姛");
- this.$refs.table.load();
- } else {
- this.$error(result.message || "鎵樼洏鎷嗙洏澶辫触");
- }
- } catch (error) {
- if (error !== "cancel") {
- this.$error(error.message || "缃戠粶閿欒锛岃绋嶅悗閲嶈瘯");
- }
- }
+ handleUnbind(row) {
+ this.$refs.gridBody.open('unbind', row);
},
onInited() {
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MesService.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MesService.cs
index 8f1d43f..6092fa3 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MesService.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/MesService.cs
@@ -43,7 +43,7 @@
};
}
- private HttpRequestConfig BuildConfig(string token)
+ public HttpRequestConfig BuildConfig(string token)
{
return new HttpRequestConfig
{
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/BindContainerRequestDto.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/BindContainerRequestDto.cs
index 2e9d728..8d70be1 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/BindContainerRequestDto.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/BindContainerRequestDto.cs
@@ -18,6 +18,11 @@
public List<string> SfcList { get; set; }
/// <summary>
+ /// 璁惧鍚嶇О
+ /// </summary>
+ public string DeviceName { get; set; }
+
+ /// <summary>
/// 浣嶇疆淇℃伅
/// </summary>
public string Location { get; set; }
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/UnbindContainerRequestDto.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/UnbindContainerRequestDto.cs
index f994036..9812d84 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/UnbindContainerRequestDto.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/UnbindContainerRequestDto.cs
@@ -13,6 +13,11 @@
public string PalletCode { get; set; }
/// <summary>
+ /// 璁惧鍚嶇О
+ /// </summary>
+ public string DeviceName { get; set; }
+
+ /// <summary>
/// 鐢佃姱鐮佸垪琛�
/// </summary>
public List<string> SfcList { get; set; }
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMesService.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMesService.cs
index 3118962..a7a40b0 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMesService.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMesService.cs
@@ -53,5 +53,12 @@
/// 鎵樼洏鍑虹珯锛堟敮鎸佸姩鎬乀oken锛�
/// </summary>
HttpResponseResult<MesResponse> OutboundInContainer(OutboundInContainerRequest request, string token);
+
+ /// <summary>
+ /// 璇锋眰澶撮厤缃�
+ /// </summary>
+ /// <param name="token"> 璇锋眰Token</param>
+ /// <returns></returns>
+ HttpRequestConfig BuildConfig(string token);
}
}
\ No newline at end of file
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMesUploadHelper.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMesUploadHelper.cs
index 705c340..1f9aac5 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMesUploadHelper.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_IBasicService/IMesUploadHelper.cs
@@ -22,7 +22,7 @@
MesUploadStatusEnum successStatus,
string apiType,
string requestJson,
- Func<(bool isSuccess, string responseJson, string errorMessage)> mesCall,
+ Func<(bool isSuccess, string responseJson, string errorMessage, string httpRequest)> mesCall,
string creator = "System");
}
}
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/MesUploadHelper.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/MesUploadHelper.cs
index 52672b6..6ef6023 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/MesUploadHelper.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/MesUploadHelper.cs
@@ -1,9 +1,10 @@
+using Newtonsoft.Json.Linq;
using System.Diagnostics;
using WIDESEA_Common.StockEnum;
using WIDESEA_Core;
using WIDESEA_DTO.MES;
-using WIDESEA_IStockService;
using WIDESEA_IBasicService;
+using WIDESEA_IStockService;
namespace WIDESEA_StockService
{
@@ -34,7 +35,7 @@
MesUploadStatusEnum successStatus,
string apiType,
string requestJson,
- Func<(bool isSuccess, string responseJson, string errorMessage)> mesCall,
+ Func<(bool isSuccess, string responseJson, string errorMessage, string httpRequest)> mesCall,
string creator = "System")
{
_ = Task.Run(async () =>
@@ -42,12 +43,14 @@
var stopwatch = Stopwatch.StartNew();
try
{
- var (isSuccess, responseJson, errorMessage) = mesCall();
+ var (isSuccess, responseJson, errorMessage, httpRequest) = mesCall();
stopwatch.Stop();
// 濂囨暟=鎴愬姛锛屽伓鏁�=澶辫触
int status = isSuccess ? (int)successStatus : (int)successStatus + 1;
await _stockInfoService.UpdateMesUploadStatusAsync(palletCode, status);
+
+ requestJson = MergeJsonObjects(requestJson, httpRequest);
await LogAsync(palletCode, apiType, requestJson, responseJson,
stopwatch.ElapsedMilliseconds, isSuccess, errorMessage, creator);
@@ -89,5 +92,16 @@
// 鏃ュ織璁板綍澶辫触涓嶅奖鍝嶄富娴佺▼
}
}
+
+ public static string MergeJsonObjects(string json1, string json2)
+ {
+ var obj1 = JObject.Parse(json1);
+ var obj2 = JObject.Parse(json2);
+ obj1.Merge(obj2, new JsonMergeSettings
+ {
+ MergeArrayHandling = MergeArrayHandling.Union // 鏁扮粍鍚堝苟鏂瑰紡锛屽彲鎸夐渶淇敼
+ });
+ return obj1.ToString();
+ }
}
}
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
index 1e37368..4e7212c 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs
@@ -463,7 +463,8 @@
return (
result?.Data?.IsSuccess ?? false,
System.Text.Json.JsonSerializer.Serialize(result),
- result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒"
+ result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒",
+ _mesService.BuildConfig(token ?? string.Empty).ToJson()
);
});
@@ -548,7 +549,8 @@
return (
result?.Data?.IsSuccess ?? false,
System.Text.Json.JsonSerializer.Serialize(result),
- result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒"
+ result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒",
+ _mesService.BuildConfig(token ?? string.Empty).ToJson()
);
});
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs
index 1a731c9..4cbd519 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Inbound.cs
@@ -206,7 +206,8 @@
return (
result?.Data?.IsSuccess ?? false,
JsonConvert.SerializeObject(result),
- result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒"
+ result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒",
+ _mesService.BuildConfig(token ?? string.Empty).ToJson()
);
});
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Outbound.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Outbound.cs
index 3f0f31d..ead9c74 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Outbound.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/WCS/TaskService_Outbound.cs
@@ -153,7 +153,8 @@
return (
result?.Data?.IsSuccess ?? false,
Newtonsoft.Json.JsonConvert.SerializeObject(result),
- result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒"
+ result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒",
+ _mesService.BuildConfig(token ?? string.Empty).ToJson()
);
});
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs
index ec09348..3c66a24 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs
@@ -11,6 +11,7 @@
using WIDESEA_Model.Models;
using WIDESEA_Common.Constants;
using WIDESEA_Common.StockEnum;
+using WIDESEA_Core.Helper;
namespace WIDESEA_WMSServer.Controllers.Stock
{
@@ -115,7 +116,8 @@
return (
result.Data?.IsSuccess ?? false,
System.Text.Json.JsonSerializer.Serialize(result),
- result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒"
+ result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒",
+ _mesService.BuildConfig(token ?? string.Empty).ToJson()
);
},
App.User.UserName);
@@ -205,7 +207,8 @@
return (
result?.Data?.IsSuccess ?? false,
System.Text.Json.JsonSerializer.Serialize(result),
- result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒"
+ result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒",
+ _mesService.BuildConfig(token ?? string.Empty).ToJson()
);
},
App.User.UserName);
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs
index de85b5f..a3cf0df 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs
@@ -3,6 +3,7 @@
using WIDESEA_Common.StockEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseController;
+using WIDESEA_Core.Helper;
using WIDESEA_DTO.MES;
using WIDESEA_IBasicService;
using WIDESEA_IStockService;
@@ -66,7 +67,7 @@
var stockInfo = await _stockInfoService.Repository.QueryDataNavFirstAsync(x => x.PalletCode == dto.PalletCode);
// 3. 鍔ㄦ�佽幏鍙朚ES鍑瘉
- var mesConfig = _mesDeviceConfigService.GetByDeviceName("缁勭洏鏈烘鎵�");
+ var mesConfig = _mesDeviceConfigService.GetByDeviceName(dto.DeviceName);
string equipmentCode = mesConfig?.EquipmentCode ?? StockConstants.MES_EQUIPMENT_CODE;
string resourceCode = mesConfig?.ResourceCode ?? StockConstants.MES_RESOURCE_CODE;
string token = mesConfig?.Token;
@@ -102,7 +103,8 @@
return (
result?.Data?.IsSuccess ?? false,
System.Text.Json.JsonSerializer.Serialize(result),
- result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒"
+ result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒",
+ _mesService.BuildConfig(token ?? string.Empty).ToJson()
);
},
App.User.UserName);
@@ -143,7 +145,7 @@
var stockInfo = await _stockInfoService.Repository.QueryDataNavFirstAsync(x => dto.PalletCode == x.PalletCode);
// 3. 鍔ㄦ�佽幏鍙朚ES鍑瘉
- var mesConfig = _mesDeviceConfigService.GetByDeviceName("缁勭洏鏈烘鎵�");
+ var mesConfig = _mesDeviceConfigService.GetByDeviceName(dto.DeviceName);
string equipmentCode = mesConfig?.EquipmentCode ?? StockConstants.MES_EQUIPMENT_CODE;
string resourceCode = mesConfig?.ResourceCode ?? StockConstants.MES_RESOURCE_CODE;
string token = mesConfig?.Token;
@@ -174,7 +176,8 @@
return (
result?.Data?.IsSuccess ?? false,
System.Text.Json.JsonSerializer.Serialize(result),
- result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒"
+ result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒",
+ _mesService.BuildConfig(token ?? string.Empty).ToJson()
);
},
App.User.UserName);
@@ -253,9 +256,10 @@
{
var result = _mesService.ContainerNgReport(mesRequest);
return (
- result?.IsSuccess ?? false,
+ result?.Data?.IsSuccess ?? false,
System.Text.Json.JsonSerializer.Serialize(result),
- result?.ErrorMessage ?? "鏈煡閿欒"
+ result?.Data?.Msg ?? result?.ErrorMessage ?? "鏈煡閿欒",
+ _mesService.BuildConfig(mesConfig?.Token ?? string.Empty).ToJson()
);
},
App.User.UserName);
--
Gitblit v1.9.3