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, // 注æåæ®µåæ¹ä¸ºforwardï¼ç±»åä¸ºæ´æ° }, "å建æ¢çæºæ¢°æä»»å¡ä¸...") .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> Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/robotTask.jsx
@@ -3,11 +3,12 @@ // åæ°å«ä¹ï¼ç±æ¡æ¶æçå½å¨æä¼ å ¥ï¼å 嫿¥è¯¢åæ°ãè¡¨åæ°æ®ãè¡æ°æ®çä¸ä¸æã // è¿åå¼è¯´æï¼è¿å true 代表继ç»é»è®¤è¡ä¸ºï¼è¿å false ä»£è¡¨ä¸æé»è®¤è¡ä¸ºã // å¼å¸¸å¤ç说æï¼å½åæªå¼å ¥å¤é¨è°ç¨ï¼è¥åç»æ°å¢æ¥å£è°ç¨ï¼é卿¹æ³å è¡¥å 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(); }, }); }, // æ¹æ³ç®çï¼é¡µé¢åå§å宿忧è¡èªå®ä¹é»è¾ã // åæ°ï¼æ ã Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/RobotTaskController.cs
@@ -1,32 +1,96 @@ 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) { using 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; } } Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
@@ -1,70 +1,70 @@ using 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); using 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); } } } 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) {