1
xiazhengtongxue
3 天以前 25611a36139bbe39f0ede830c589e5d67036111b
1
已添加1个文件
已修改4个文件
377 ■■■■ 文件已修改
Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/extend/AddRobotTask.vue 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/robotTask.jsx 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/RobotTaskController.cs 122 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs 134 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RobotJob/Workflow/RobotSimpleCommandHandler.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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)
                                {