yanjinhui
2026-03-17 17c97e7fb4f5c007887816168e89c107421e26c8
优化移库wms任务上报,优化前端
已修改9个文件
190 ■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Client/src/views/basicinfo/kLSLocationInfo.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Client/src/views/basicinfo/rGVLocationInfo.vue 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Client/src/views/taskinfo/task.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Client/src/views/taskinfo/taskHty.vue 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RGVTaskMethods.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/src/views/basicinfo/kLSLocationInfo.vue
@@ -195,13 +195,7 @@
      [
        { title: "巷道编号", field: "roadwayNo", type: "like" },
        { title: "货位类型", field: "locationType", type: "select",
            data: [
              { key: "0", value: "未定义" },
              { key: "1", value: "小托盘" },
              { key: "2", value: "中托盘" },
              { key: "3", value: "大托盘" },
              { key: "4", value: "特大托盘" },
            ],
          dataKey:"LocationTypeEnum",
        },
        { title: "货位状态", field: "locationStatus", type: "select",
            data: [
@@ -303,15 +297,7 @@
        type: "select",
        width: 100,
        align: "left",
        bind: {
          key: "value",
          data: [
            { key: "0", value: "未定义" },
            { key: "1", value: "小托盘" },
            { key: "2", value: "中托盘" },
            { key: "3", value: "大托盘" },
            { key: "4", value: "特大托盘" },
          ],
        bind: {key:"LocationTypeEnum",data:[]
        },
      },
      {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/src/views/basicinfo/rGVLocationInfo.vue
@@ -192,14 +192,7 @@
      ],
      [
        { title: "巷道编号", field: "roadwayNo", type: "like" },
        { title: "货位类型", field: "locationType", type: "select",
            data: [
              { key: "0", value: "未定义" },
              { key: "1", value: "小托盘" },
              { key: "2", value: "中托盘" },
              { key: "3", value: "大托盘" },
              { key: "4", value: "特大托盘" },
            ],
        { title: "货位类型", field: "locationType", type: "select",dataKey: "RGVLocationTypeEnum",data:[]
        },
        { title: "货位状态", field: "locationStatus", type: "select",
            data: [
@@ -301,16 +294,8 @@
        type: "select",
        width: 100,
        align: "left",
        bind: {
          key: "value",
          data: [
            { key: "0", value: "未定义" },
            { key: "1", value: "小托盘" },
            { key: "2", value: "中托盘" },
            { key: "3", value: "大托盘" },
            { key: "4", value: "特大托盘" },
          ],
        },
          bind: { key: "RGVLocationTypeEnum", data: [] },
      },
      {
        field: "locationStatus",
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/src/views/taskinfo/task.vue
@@ -167,7 +167,7 @@
        type: "string",
        width: 90,
        align: "left",
        hidden: true,
        // hidden: true,
      },
      {
        field: "grade",
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/src/views/taskinfo/taskHty.vue
@@ -68,7 +68,6 @@
        { title: "下一位置", field: "nextAddress", type: "like" },
      ],
      [
        { title: "巷道号", field: "roadway", type: "like" },
        {
          title: "任务类型",
          field: "taskType",
@@ -103,29 +102,6 @@
        align: "left",
      },
      {
        field: "sourceId",
        title: "源任务ID",
        type: "int",
        width: 100,
        align: "left",
        hidden: false,
      },
      {
        field: "operateType",
        title: "操作类型",
        type: "string",
        width: 100,
        align: "left",
        bind: { key: "OperateTypeEnum", data: [] },
      },
      {
        field: "insertTime",
        title: "插入时间",
        type: "datetime",
        width: 150,
        align: "left",
      },
      {
        field: "taskNum",
        title: "任务号",
        type: "int",
@@ -144,13 +120,6 @@
        title: "托盘编号",
        type: "string",
        width: 120,
        align: "left",
      },
      {
        field: "roadway",
        title: "区域",
        type: "string",
        width: 90,
        align: "left",
      },
      {
@@ -228,6 +197,13 @@
        align: "left",
      },
      {
        field: "insertTime",
        title: "插入时间",
        type: "datetime",
        width: 150,
        align: "left",
      },
      {
        field: "creater",
        title: "创建者",
        type: "string",
@@ -256,6 +232,14 @@
        align: "left",
      },
      {
        field: "operateType",
        title: "操作类型",
        type: "string",
        width: 100,
        align: "left",
        bind: { key: "OperateTypeEnum", data: [] },
      },
      {
        field: "remark",
        title: "备注",
        type: "string",
@@ -263,6 +247,7 @@
        align: "left",
        hidden: false,
      },
    ]);
    const detail = ref({
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs
@@ -438,6 +438,30 @@
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "LocationTypeEnum":
                        {
                            List<object> data = new List<object>();
                            Type type = typeof(LocationTypeEnum);
                            List<int> enums = Enum.GetValues(typeof(LocationTypeEnum)).Cast<int>().ToList();
                            int index = 0;
                            foreach (var item in enums)
                            {
                                FieldInfo? fieldInfo = typeof(LocationTypeEnum).GetField(((LocationTypeEnum)item).ToString());
                                DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                if (description != null)
                                {
                                    data.Add(new { key = item.ToString(), value = description.Description });
                                }
                                else
                                {
                                    data.Add(new { key = item.ToString(), value = item.ToString() });
                                }
                                index++;
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                }
                return result;
            }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -6,7 +6,7 @@
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "dics": "deviceType,devicePlcType,jobAssembly,jobClassName,deviceStatus,taskType,taskState,inOutType,TaskStatusEnum,TaskTypeEnum,RGVLocationTypeEnum",
  "dics": "deviceType,devicePlcType,jobAssembly,jobClassName,deviceStatus,taskType,taskState,inOutType,TaskStatusEnum,TaskTypeEnum,RGVLocationTypeEnum,LocationTypeEnum",
  "AllowedHosts": "*",
  "ConnectionStringsEncryption": false,
  "MainDB": "DB_WIDESEA", //当前项目的主库,所对应的连接字符串的Enabled必须为true 
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/RGVTaskMethods.cs
@@ -82,6 +82,11 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                var stationManger = _stationMangerService.GetOutStationInfo(taskDTO.toLocationCode);
                if (stationManger==null)
                {
                    return content.Error($"{taskDTO.toLocationCode}不是出库站台");
                }
                Dt_RGVLocationInfo rGVLocationInfo = _rGVLocationInfoService.Repository.QueryFirst(x => x.LocationCode == taskDTO.fromLocationCode) ?? throw new Exception($"未找到起点库位【{taskDTO.fromLocationCode}】!");
                if (rGVLocationInfo.LocationStatus != LocationStatusEnum.InStock.ObjToInt()) throw new Exception($"起点库位【{taskDTO.fromLocationCode}】当前库位状态不可出库!");
                if (rGVLocationInfo.PalletCode != taskDTO.containerCode) throw new Exception($"起点库位【{taskDTO.fromLocationCode}】绑定料箱号【{rGVLocationInfo.PalletCode}】与任务料箱号【{taskDTO.containerCode}】不匹配!");
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs
@@ -100,35 +100,8 @@
                    //var task = BaseDal.QueryFirst(x => x.RGVTaskId == Rgv.content.taskID);
                    var task = BaseDal.QueryFirst(x => x.PalletCode == Rgv.content.podID);
                    if (task == null) throw new Exception($"未找到任务,任务编号【{Rgv.content.taskID}】");
                    if (Rgv.messageType == 72)//小车顶起货物
                    {
                        if (task.TaskType == (int)TaskTypeEnum.CPInbound && task.TaskState == (int)TaskStatusEnum.Execut)
                        {
                            task.TaskState = (int)TaskStatusEnum.WaiCheckShape;
                            //BaseDal.UpdateData(task);//给质检门写入启动信号
                            var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "F1") as OtherDevice;
                            if (device == null) task.ExceptionMessage = "未找到1楼质检门设备信息";
                            else
                            {
                                if (device.IsConnected)
                                    device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, true, task.SourceAddress);
                                else
                                    task.ExceptionMessage = "1楼质检门设备连接失败";
                            }
                            TaskFeedback(task, 4);
                        }
                        else
                        {
                            TaskFromCompleted(task, deviceTypeEnum);
                        }
                    }
                    else if (Rgv.messageType == 10)
                    {
                        if (Rgv.content.status == 2) TaskFeedback(task, 1);
                        if (Rgv.content.status == 4)
                        {
                            if (task.TaskType == TaskTypeEnum.CPMoveInventory.ObjToInt())
                    //移库
                    if (task.TaskType == TaskTypeEnum.CPMoveInventory.ObjToInt() && Rgv.messageType == 10 && Rgv.content.status == 4)
                            {
                                deviceName += "移库";
                                WMSMoveLocationFeedback wMSMoveLocationFeedback = new WMSMoveLocationFeedback()
@@ -155,7 +128,38 @@
                                    BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.自动完成);
                                }
                            }
                            else if (task.TaskType == (int)TaskTypeEnum.CPInbound && task.TaskState == (int)TaskStatusEnum.TakeFinish)
                    else
                    {
                        //站台到质检台
                        if (Rgv.messageType == 72)//小车顶起货物
                        {
                            if (task.TaskType == (int)TaskTypeEnum.CPInbound && task.TaskState == (int)TaskStatusEnum.Execut)
                            {
                                task.TaskState = (int)TaskStatusEnum.WaiCheckShape;
                                //BaseDal.UpdateData(task);//给质检门写入启动信号
                                var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "F1") as OtherDevice;
                                if (device == null) task.ExceptionMessage = "未找到1楼质检门设备信息";
                                else
                                {
                                    if (device.IsConnected)
                                        device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, true, task.SourceAddress);
                                    else
                                        task.ExceptionMessage = "1楼质检门设备连接失败";
                                }
                                TaskFeedback(task, 4);
                            }
                            else
                            {
                                //这里出库,这个接口中也返回给了wms状态
                                TaskFromCompleted(task, deviceTypeEnum);
                            }
                        }
                        else if (Rgv.messageType == 10)//质检台到目标货位
                        {
                            if (Rgv.content.status == 2) TaskFeedback(task, 1);
                            if (Rgv.content.status == 4)
                            {
                                if (task.TaskType == (int)TaskTypeEnum.CPInbound && task.TaskState == (int)TaskStatusEnum.TakeFinish)
                            {
                                if (!string.IsNullOrEmpty(task.ExceptionMessage)) task.TaskState = TaskStatusEnum.CheckShapeingNG.ObjToInt();
                                else task.TaskState = (int)TaskStatusEnum.CheckShapeing;
@@ -168,13 +172,14 @@
                                else
                                    TaskCompleted(task, deviceTypeEnum);
                            }
                            else if (task.TaskType == (int)TaskTypeEnum.CPOutbound || task.TaskType == (int)TaskTypeEnum.CPMoveInventory)//出库、移库完成
                                else if (task.TaskType == (int)TaskTypeEnum.CPOutbound )//出库完成
                            {
                                TaskCompleted(task, deviceTypeEnum);
                            }
                        }
                    }
                }
                }
                content.OK();
            }
            catch (Exception ex)
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -258,6 +258,12 @@
                    deviceName = "四向车";
                    if (dt_Task.RGVTaskId==0)
                    {
                        if (dt_Task.TaskType == TaskTypeEnum.CPOutbound.ObjToInt()&&dt_Task.TaskState==TaskStatusEnum.RGV_WaitSend.ObjToInt())
                        {
                            //修改库位状态
                            var rgvlocaiion = _rGVLocationInfoService.Repository.QueryFirst(x => x.LocationCode == dt_Task.SourceAddress);
                            rgvlocaiion.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); //将库位状态改为有货
                        }
                        BaseDal.DeleteAndMoveIntoHty(dt_Task, OperateTypeEnum.自动删除);
                        content.OK($"取消{dt_Task.WMSTaskNum}任务成功", dt_Task);
                    }