From 25611a36139bbe39f0ede830c589e5d67036111b Mon Sep 17 00:00:00 2001
From: xiazhengtongxue <133085197+xiazhengtongxue@users.noreply.github.com>
Date: 星期三, 29 四月 2026 08:52:22 +0800
Subject: [PATCH] 1

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs            |  134 +++++++++---------
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/RobotTaskController.cs       |  122 +++++++++++++----
 Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/robotTask.jsx                            |   15 +
 Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/extend/AddRobotTask.vue                  |   98 ++++++++++++++
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs |    8 
 5 files changed, 275 insertions(+), 102 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/extend/AddRobotTask.vue b/Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/extend/AddRobotTask.vue
new file mode 100644
index 0000000..0146166
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/extend/AddRobotTask.vue
@@ -0,0 +1,98 @@
+<template>
+  <div>
+    <!-- 鎵嬪姩鍒涘缓鎹㈢洏鏈烘鎵嬩换鍔″脊绐� -->
+    <vol-box v-model="showManualCreate" :lazy="true" width="500px" :padding="15" title="鎵嬪姩鍒涘缓鎹㈢洏鏈烘鎵嬩换鍔�">
+      <el-form :model="manualFormData" ref="form" label-width="120px">
+        <el-form-item label="鏉ユ簮鍦板潃鎵樼洏鐮�" prop="robotSourceAddressPalletCode" required>
+          <el-input v-model="manualFormData.robotSourceAddressPalletCode" placeholder="璇疯緭鍏ユ潵婧愬湴鍧�鎵樼洏鐮�"></el-input>
+        </el-form-item>
+        <el-form-item label="鐩爣鍦板潃鎵樼洏鐮�" prop="robotTargetAddressPalletCode" required>
+          <el-input v-model="manualFormData.robotTargetAddressPalletCode" placeholder="璇疯緭鍏ョ洰鏍囧湴鍧�鎵樼洏鐮�"></el-input>
+        </el-form-item>
+        <el-form-item label="鏂瑰悜" prop="forward" required>
+          <el-radio-group v-model="manualFormData.forward">
+            <el-radio :label="1">鍘诲寲鎴�(婧�:1鈫掔洰鏍�:3)</el-radio>
+            <el-radio :label="2">鍘诲寲鎴�(婧�:2鈫掔洰鏍�:4)</el-radio>
+            <el-radio :label="3">鍥為珮娓�(婧�:3鈫掔洰鏍�:1)</el-radio>
+            <el-radio :label="4">鍥為珮娓�(婧�:4鈫掔洰鏍�:2)</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <el-button type="primary" size="small" @click="submitManualCreate">纭畾</el-button>
+        <el-button type="danger" size="small" @click="showManualCreate = false">鍏抽棴</el-button>
+      </template>
+    </vol-box>
+  </div>
+</template>
+
+<script>
+import VolBox from "@/components/basic/VolBox.vue";
+
+export default {
+  components: { VolBox },
+  emits: ["parentCall"],
+  data() {
+    return {
+      showManualCreate: false,
+      manualFormData: {
+        robotSourceAddressPalletCode: "",
+        robotTargetAddressPalletCode: "",
+        forward: 1, // 1=鍘诲寲鎴�(1鈫�3), 2=鍘诲寲鎴�(2鈫�4), 3=鍥為珮娓�(3鈫�1), 4=鍥為珮娓�(4鈫�2)
+      },
+    };
+  },
+  methods: {
+    // 鎵撳紑寮圭獥
+    open() {
+      this.showManualCreate = true;
+      this.resetManualForm();
+    },
+    
+    // 閲嶇疆琛ㄥ崟
+    resetManualForm() {
+      this.manualFormData = {
+        robotSourceAddressPalletCode: "",
+        robotTargetAddressPalletCode: "",
+        forward: 1,
+      };
+    },
+    
+    // 鎻愪氦鎵嬪姩鍒涘缓浠诲姟
+    submitManualCreate() {
+      // 琛ㄥ崟楠岃瘉
+      if (!this.manualFormData.robotSourceAddressPalletCode) {
+        return this.$message.error("璇疯緭鍏ユ潵婧愬湴鍧�鎵樼洏鐮�");
+      }
+      if (!this.manualFormData.robotTargetAddressPalletCode) {
+        return this.$message.error("璇疯緭鍏ョ洰鏍囧湴鍧�鎵樼洏鐮�");
+      }
+      if (this.manualFormData.forward === undefined || this.manualFormData.forward === null) {
+        return this.$message.error("璇烽�夋嫨鏂瑰悜");
+      }
+
+      // 璋冪敤鍚庣API鍒涘缓鎹㈢洏鏈烘鎵嬩换鍔�
+      this.http
+        .post("api/RobotTask/AddRobotTask", {
+          robotSourceAddressPalletCode: this.manualFormData.robotSourceAddressPalletCode,
+          robotTargetAddressPalletCode: this.manualFormData.robotTargetAddressPalletCode,
+          forward: this.manualFormData.forward,  // 娉ㄦ剰瀛楁鍚嶆敼涓篺orward锛岀被鍨嬩负鏁存暟
+        }, "鍒涘缓鎹㈢洏鏈烘鎵嬩换鍔′腑...")
+        .then((res) => {
+          if (!res.status) {
+            return this.$message.error(res.message);
+          }
+          this.$message.success("鎹㈢洏鏈烘鎵嬩换鍔″垱寤烘垚鍔�");
+          this.showManualCreate = false;
+          // 鍒锋柊鐖堕〉闈㈡暟鎹�
+          this.$emit("parentCall", ($vue) => {
+            $vue.refresh();
+          });
+        })
+        .catch((err) => {
+          this.$message.error("鍒涘缓鎹㈢洏鏈烘鎵嬩换鍔″け璐ワ細" + (err.message || "鏈煡閿欒"));
+        });
+    },
+  },
+};
+</script>
\ No newline at end of file
diff --git a/Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/robotTask.jsx b/Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/robotTask.jsx
index 642855b..fd08890 100644
--- a/Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/robotTask.jsx
+++ b/Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/robotTask.jsx
@@ -3,11 +3,12 @@
 // 鍙傛暟鍚箟锛氱敱妗嗘灦鎸夌敓鍛藉懆鏈熶紶鍏ワ紝鍖呭惈鏌ヨ鍙傛暟銆佽〃鍗曟暟鎹�佽鏁版嵁绛変笂涓嬫枃銆�
 // 杩斿洖鍊艰鏄庯細杩斿洖 true 浠h〃缁х画榛樿琛屼负锛岃繑鍥� false 浠h〃涓柇榛樿琛屼负銆�
 // 寮傚父澶勭悊璇存槑锛氬綋鍓嶆湭寮曞叆澶栭儴璋冪敤锛涜嫢鍚庣画鏂板鎺ュ彛璋冪敤锛岄渶鍦ㄦ柟娉曞唴琛ュ厖 try-catch 骞惰褰曞叧閿笟鍔″弬鏁般��
+import AddRobotTask from "./extend/AddRobotTask.vue";
 
 let extension = {
   components: {
     gridHeader: "",
-    gridBody: "",
+    gridBody: AddRobotTask,
     gridFooter: "",
     modelHeader: "",
     modelBody: "",
@@ -19,7 +20,17 @@
     // 鏂规硶鐩殑锛氶〉闈㈠垵濮嬪寲鏃舵墽琛岃嚜瀹氫箟閫昏緫銆�
     // 鍙傛暟锛氭棤銆�
     // 杩斿洖鍊硷細鏃犮��
-    onInit() {},
+    onInit() {
+      this.buttons.push({
+        name: "鎵嬪姩鍒涘缓鎹㈢洏鏈烘鎵嬩换鍔�",
+        icon: "",
+        type: "primary",
+        value: "ManualCreateRobotTask",
+        onClick: () => {
+          this.$refs.gridBody.open();
+        },
+      });
+    },
 
     // 鏂规硶鐩殑锛氶〉闈㈠垵濮嬪寲瀹屾垚鍚庢墽琛岃嚜瀹氫箟閫昏緫銆�
     // 鍙傛暟锛氭棤銆�
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/RobotTaskController.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/RobotTaskController.cs
index fc22a70..5ccc081 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/RobotTaskController.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/RobotTaskController.cs
@@ -1,32 +1,96 @@
-锘縰sing Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using System.Threading.Tasks;
-using WIDESEAWCS_Core;
-using WIDESEAWCS_Core.BaseController;
-using WIDESEAWCS_Core.Enums;
-using WIDESEAWCS_DTO.TaskInfo;
-using WIDESEAWCS_ISystemServices;
-using WIDESEAWCS_ITaskInfoService;
-using WIDESEAWCS_Model.Models;
-
-namespace WIDESEAWCS_Server.Controllers.Task
-{
-    [Route("api/RobotTask")]
-    [ApiController]
-    public class RobotTaskController : ApiBaseController<IRobotTaskService, Dt_RobotTask>
-    {
-        public RobotTaskController(IRobotTaskService service) : base(service)
-        {
-            
+锘縰sing Autofac.Core;
+using Masuit.Tools;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using System.Threading.Tasks;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.BaseController;
+using WIDESEAWCS_Core.Enums;
+using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_ISystemServices;
+using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.Models;
+
+namespace WIDESEAWCS_Server.Controllers.Task
+{
+    [Route("api/RobotTask")]
+    [ApiController]
+    public class RobotTaskController : ApiBaseController<IRobotTaskService, Dt_RobotTask>
+    {
+        public RobotTaskController(IRobotTaskService service) : base(service)
+        {
+            
         }
-        [HttpGet, HttpPost, Route("DeleteRobotTask"), AllowAnonymous]
-        public WebResponseContent DeleteRobotTask(int id)
-        {
+        [HttpGet, HttpPost, Route("DeleteRobotTask"), AllowAnonymous]
+        public WebResponseContent DeleteRobotTask(int id)
+        {
             if (Service.DeleteRobotTask(id)){
                 return WebResponseContent.Instance.OK();
-            }
-            return WebResponseContent.Instance.Error();
-        }
-
-    }
-}
+            }
+            return WebResponseContent.Instance.Error();
+        }
+
+        // 鏆傛椂鍒涘缓鎹㈢洏鏈烘鎵嬩换鍔�
+        [HttpGet, HttpPost, Route("AddRobotTask"), AllowAnonymous]
+        public WebResponseContent AddRobotTask([FromBody] RobotMoveRequest request) 
+        {
+            try
+            {
+                Dt_RobotTask robotTask = new Dt_RobotTask();
+                robotTask.RobotTaskNum = Random.Shared.StrictNext();
+                robotTask.RobotRoadway = "鎹㈢洏鏈烘鎵�";
+                robotTask.RobotTaskType = 510;
+                robotTask.RobotTaskState = 300;
+                robotTask.RobotTaskTotalNum = 48;
+                robotTask.RobotGrade = 1;
+                robotTask.RobotDispatchertime = DateTime.Now;
+                robotTask.RobotRemark = "浜哄伐鎵嬪姩鍒涘缓";
+                robotTask.RobotSourceAddressPalletCode = request.robotSourceAddressPalletCode;
+                robotTask.RobotTargetAddressPalletCode = request.robotTargetAddressPalletCode;
+                // 鏍规嵁鏂瑰悜璁剧疆婧愬拰鐩爣
+                switch (request.Forward)
+                {
+                    case 1:
+                        robotTask.RobotSourceAddress = "1";
+                        robotTask.RobotSourceAddressLineCode = "11010";
+                        robotTask.RobotTargetAddress = "3";
+                        robotTask.RobotTargetAddressLineCode = "2103";
+                        break;
+                    case 2:
+                        robotTask.RobotSourceAddress = "2";
+                        robotTask.RobotSourceAddressLineCode = "11001";
+                        robotTask.RobotTargetAddress = "4";
+                        robotTask.RobotTargetAddressLineCode = "2101";
+                        break;
+                    case 3:
+                        robotTask.RobotSourceAddress = "3";
+                        robotTask.RobotSourceAddressLineCode = "2103";
+                        robotTask.RobotTargetAddress = "1";
+                        robotTask.RobotTargetAddressLineCode = "11010";
+                        break;
+                    case 4:
+                        robotTask.RobotSourceAddress = "4";
+                        robotTask.RobotSourceAddressLineCode = "2101";
+                        robotTask.RobotTargetAddress = "2";
+                        robotTask.RobotTargetAddressLineCode = "11001";
+                        break;
+                    default:
+                        return WebResponseContent.Instance.Error($"娣诲姞鏈哄櫒浜轰换鍔″け璐�");
+                }
+
+                return Service.AddData(robotTask);
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error($"娣诲姞鏈哄櫒浜轰换鍔″け璐�: {ex.Message}");
+            }
+        }
+
+    }
+}
+public class RobotMoveRequest
+{
+    public int Forward { get; set; }
+    public String robotSourceAddressPalletCode { get; set; }
+    public String robotTargetAddressPalletCode { get; set; }
+}
\ No newline at end of file
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
index 5b2143f..23355d3 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
@@ -1,70 +1,70 @@
-锘縰sing Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using System.Threading.Channels;
-using WIDESEAWCS_Core;
-using WIDESEAWCS_Core.BaseController;
-using WIDESEAWCS_DTO.TaskInfo;
-using WIDESEAWCS_ITaskInfoService;
-using WIDESEAWCS_Model.Models;
-
-namespace WIDESEAWCS_WCSServer.Controllers.Task
-{
-    [Route("api/Task")]
-    [ApiController]
-    public class TaskController : ApiBaseController<ITaskService, Dt_Task>
-    {
-        private readonly IHttpContextAccessor _httpContextAccessor;
-        public TaskController(ITaskService service, IHttpContextAccessor httpContextAccessor) : base(service)
-        {
-            _httpContextAccessor = httpContextAccessor;
-        }
-
-        [HttpPost, Route("ReceiveTask"), AllowAnonymous]
-        public WebResponseContent ReceiveWMSTask([FromBody] List<WMSTaskDTO> taskDTOs)
-        {
-            return Service.ReceiveWMSTask(taskDTOs);
-        }
-
-        [HttpPost, Route("ReceiveManualTask"), AllowAnonymous]
-        public WebResponseContent ReceiveManualTask([FromBody] List<WMSTaskDTO> taskDTOs)
-        {
-            return Service.ReceiveManualTask(taskDTOs);
-        }
-
-        [HttpPost, HttpGet(), Route("UpdateTaskExceptionMessage")]
-        public WebResponseContent UpdateTaskExceptionMessage(int taskNum, string message)
-        {
-            return Service.UpdateTaskExceptionMessage(taskNum, message);
-        }
-
-        [HttpPost, HttpGet, Route("UpdateTaskStatusToNext")]
-        public WebResponseContent UpdateTaskStatusToNext(int taskNum)
-        {
-            return Service.UpdateTaskStatusToNext(taskNum);
-        }
-
-        [HttpPost, HttpGet, Route("TaskStatusRecovery")]
-        public WebResponseContent TaskStatusRecovery(int taskNum)
-        {
-            return Service.TaskStatusRecovery(taskNum);
-        }
-
-        [HttpPost, HttpGet, Route("RollbackTaskStatusToLast")]
-        public WebResponseContent RollbackTaskStatusToLast(int taskNum)
-        {
-            return Service.RollbackTaskStatusToLast(taskNum);
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using System.Threading.Channels;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.BaseController;
+using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_ITaskInfoService;
+using WIDESEAWCS_Model.Models;
+
+namespace WIDESEAWCS_WCSServer.Controllers.Task
+{
+    [Route("api/Task")]
+    [ApiController]
+    public class TaskController : ApiBaseController<ITaskService, Dt_Task>
+    {
+        private readonly IHttpContextAccessor _httpContextAccessor;
+        public TaskController(ITaskService service, IHttpContextAccessor httpContextAccessor) : base(service)
+        {
+            _httpContextAccessor = httpContextAccessor;
         }
 
-        /// <summary>
-        /// 浠诲姟鍙栨秷
-        /// </summary>
-        /// <param name="taskNum"></param>
+        [HttpPost, Route("ReceiveTask"), AllowAnonymous]
+        public WebResponseContent ReceiveWMSTask([FromBody] List<WMSTaskDTO> taskDTOs)
+        {
+            return Service.ReceiveWMSTask(taskDTOs);
+        }
+
+        [HttpPost, Route("ReceiveManualTask"), AllowAnonymous]
+        public WebResponseContent ReceiveManualTask([FromBody] List<WMSTaskDTO> taskDTOs)
+        {
+            return Service.ReceiveManualTask(taskDTOs);
+        }
+
+        [HttpPost, HttpGet(), Route("UpdateTaskExceptionMessage")]
+        public WebResponseContent UpdateTaskExceptionMessage(int taskNum, string message)
+        {
+            return Service.UpdateTaskExceptionMessage(taskNum, message);
+        }
+
+        [HttpPost, HttpGet, Route("UpdateTaskStatusToNext")]
+        public WebResponseContent UpdateTaskStatusToNext(int taskNum)
+        {
+            return Service.UpdateTaskStatusToNext(taskNum);
+        }
+
+        [HttpPost, HttpGet, Route("TaskStatusRecovery")]
+        public WebResponseContent TaskStatusRecovery(int taskNum)
+        {
+            return Service.TaskStatusRecovery(taskNum);
+        }
+
+        [HttpPost, HttpGet, Route("RollbackTaskStatusToLast")]
+        public WebResponseContent RollbackTaskStatusToLast(int taskNum)
+        {
+            return Service.RollbackTaskStatusToLast(taskNum);
+        }
+
+        /// <summary>
+        /// 浠诲姟鍙栨秷
+        /// </summary>
+        /// <param name="taskNum"></param>
         /// <returns></returns>
-        [HttpPost, Route("CancelTask"), AllowAnonymous]
-        public WebResponseContent CancelTask(int taskNum)
-        {
-            return Service.CancelTask(taskNum);
-        }
-    }
-}
+        [HttpPost, Route("CancelTask"), AllowAnonymous]
+        public WebResponseContent CancelTask(int taskNum)
+        {
+            return Service.CancelTask(taskNum);
+        }
+    }
+}
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs
index d60d160..01239cb 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs
@@ -206,10 +206,10 @@
                             if (state.ChangePalletPhase == 5)
                             {
                                 // FlowB 鏈�缁堥樁娈碉細鍋囩數鑺彇瀹岋紝婧愮┖鎵樼洏鍥炲簱 HCSC1
-                                if (!await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: true, isRoadway: "HCSC1"))
-                                {
-                                    return false;
-                                }
+                                //if (!await _taskProcessor.HandleInboundTaskAsync(state, useSourceAddress: true, isRoadway: "HCSC1"))
+                                //{
+                                //    return false;
+                                //}
 
                                 if (_taskProcessor.DeleteTask(currentTask.RobotTaskId) != true)
                                 {

--
Gitblit v1.9.3