88676143aeceaeec3bd108f9cd609c4f3470ba96..7d180121d133a3f2400ca2870cfb6cacd605d6cf
10 天以前 wangxinhui
Merge branch 'master' of http://115.159.85.185:8098/r/MeiRuiAn/HuaiAn
7d1801 对比 | 目录
10 天以前 wangxinhui
更新代码,货位分配优化等
2c889b 对比 | 目录
2025-08-11 helongyang
功能增添优化
a9a3f9 对比 | 目录
已添加1个文件
已修改48个文件
1435 ■■■■ 文件已修改
代码管理/LargeScreen/CP-Screen/src/api/ajax.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/LargeScreen/CP-Screen/src/api/http.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/LargeScreen/CP-Screen/src/views/indexs/left-bottom.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/LargeScreen/CP-Screen/src/views/indexs/pass-two.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/ZH_AGVController.cs 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGV_CSJExtend.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGV_CSJob.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP仓/StackerCraneJob_PP.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/成品仓/AGV_CPExtend.cs 451 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/阻焊仓/AGV_ZHExtend.cs 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/阻焊仓/AGV_ZHJob.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/config/buttons.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/extension/taskinfo/task.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/receiveOrder.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/outbound/proOutOrder.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/stock/ProStockView.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSClient/src/views/stock/stockView.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_CSJ.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_GM.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_PP.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_ZH.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/proOutOrderTypeEnum.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/ProInStaticDTO.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/MesBagInfoModel.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ProInStatisticsService.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/PurchaseOrderService.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderService.cs 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrder.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockViewService.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Completed.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/LargeScreen/CP-Screen/src/api/ajax.js
@@ -3,7 +3,7 @@
// import { config } from 'vue/types/umd';
axios.defaults.withCredentials=true;
axios.defaults.crossDomain=true;
axios.defaults.baseURL = 'http://127.0.0.1:7081';//'http://192.168.2.51:8099'; //'http://localhost:8099'; //'http://192.168.2.51:8099';//
axios.defaults.baseURL = 'http://10.30.4.92:7081';//'http://192.168.2.51:8099'; //'http://localhost:8099'; //'http://192.168.2.51:8099';//
axios.defaults.headers.post["Content-Type"]="application/json;charset=utf-8";
// é”™è¯¯ä¿¡æ¯å¤„理
const  errorHandle = (status, other) => {
´úÂë¹ÜÀí/LargeScreen/CP-Screen/src/api/http.js
@@ -29,5 +29,5 @@
}
//成品近七天任务统计
export function  GetProWeekTasks (data) {
    return axios.post('/api/Large/GetProWeekTasks', data)//返回的时promies对象,所以直接return出去就好了
    return axios.post('/api/Large/GetProWeekTasks?id=7', data)//返回的时promies对象,所以直接return出去就好了
}
´úÂë¹ÜÀí/LargeScreen/CP-Screen/src/views/indexs/left-bottom.vue
@@ -55,7 +55,7 @@
          itemWidth: 10,
          itemHeight: 10,
          icon: 'circle',
          data: ['成品入库', '成品出库', '空框回流', '成品回库']
          data: ['成品入库', '成品出库', '成品调拨', '成品退库']
        },
        grid: {
          left: '8%',
@@ -126,7 +126,7 @@
            }
          },
          { 
            name: '空框回流',
            name: '成品调拨',
            type: 'line', 
            data: [],
            areaStyle: {
@@ -137,7 +137,7 @@
            }
          },
          { 
            name: '成品回库',
            name: '成品退库',
            type: 'line', 
            data: [],
            areaStyle: {
@@ -180,16 +180,16 @@
      const seriesData = {
        '成品入库': [],
        '成品出库': [],
        '空框回流': [],
        '成品回库': []
        '成品调拨': [],
        '成品退库': []
      };
      
      // æ ¹æ®å®žé™…数据格式调整字段名(小写开头)
      stats.forEach(day => {
        seriesData['成品入库'].push(day.inProduct || 0);
        seriesData['成品出库'].push(day.outProduct || 0);
        seriesData['空框回流'].push(day.emptyProductBack || 0);
        seriesData['成品回库'].push(day.inProductBack || 0);
        seriesData['成品调拨'].push(day.emptyProductBack || 0);
        seriesData['成品退库'].push(day.inProductBack || 0);
      });
      
      this.options = {
´úÂë¹ÜÀí/LargeScreen/CP-Screen/src/views/indexs/pass-two.vue
@@ -218,7 +218,7 @@
      // });
      var rep = await ProductionRanking();
      var cityLists= rep.map((item,index) => {
        return '#'+(index+1)+' äº§å“'+item.pCode;
        return 'TOP'+(index+1)+' äº§å“'+item.pCode;
      });
      var cityDatas= rep.map((item,index) => {
        return item.qtys;
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs
@@ -100,6 +100,12 @@
        AGV_TakeError = 335,
        /// <summary>
        /// AGV放货写入异常
        /// </summary>
        [Description("AGV取货写入异常")]
        AGV_PutError = 340,
        /// <summary>
        /// ä»»åŠ¡å®Œæˆ
        /// </summary>
        [Description("任务完成")]
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs
@@ -46,22 +46,22 @@
            {
                var task = _taskRepository.QueryFirst(x => secureApplyModel.TaskCode == x.AgvTaskNum);
                if (task == null) throw new Exception("未找到任务");
                if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
                {
                    var content = TakeRequest(task.CurrentAddress);
                    //if (!content.Status)
                    //{
                    //    throw new Exception(content.Message);
                    //}
                }
                else
                {
                    var content = PutRequest(task.NextAddress, task.PalletType);
                    //if (!content.Status)
                    //{
                    //    throw new Exception(content.Message);
                    //}
                }
                //if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
                //{
                //    var content = TakeRequest(task.CurrentAddress);
                //    //if (!content.Status)
                //    //{
                //    //    throw new Exception(content.Message);
                //    //}
                //}
                //else
                //{
                //    var content = PutRequest(task.NextAddress, task.PalletType);
                //    //if (!content.Status)
                //    //{
                //    //    throw new Exception(content.Message);
                //    //}
                //}
                task.TaskState = TaskStatusEnum.AGV_WaitToExecute.ObjToInt();
                var up = _taskRepository.UpdateData(task);
                agvResponseContent.Code = up ? "0" : "1";
@@ -114,16 +114,16 @@
                        break;
                    case "getSafetySignal"://安全信号申请
                        {
                            if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
                            {
                                var content = TakeRequest(task.CurrentAddress);
                                //if (!content.Status) throw new Exception(content.Message);
                            }
                            else
                            {
                                var content = PutRequest(task.NextAddress, task.PalletType);
                                //if (!content.Status) throw new Exception(content.Message);
                            }
                            //if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
                            //{
                            //    var content = TakeRequest(task.CurrentAddress);
                            //    //if (!content.Status) throw new Exception(content.Message);
                            //}
                            //else
                            //{
                            //    var content = PutRequest(task.NextAddress, task.PalletType);
                            //    //if (!content.Status) throw new Exception(content.Message);
                            //}
                            task.TaskState = TaskStatusEnum.AGV_WaitToExecute.ObjToInt();
                            var up = _taskRepository.UpdateData(task);
                            agvResponseContent.Code = up ? "0" : "1";
@@ -134,7 +134,12 @@
                        if (task.TaskType != TaskTypeEnum.Outbound.ObjToInt())
                        {
                            var content = PutFinish(task.NextAddress);
                            if (!content.Status) throw new Exception(content.Message);
                            if (!content.Status)
                            {
                                task.TaskState = TaskStatusEnum.AGV_PutError.ObjToInt();
                                _taskRepository.UpdateData(task);
                                throw new Exception(content.Message);
                            }
                            Dt_StationManger dt_Station = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == task.NextAddress);
                            if (dt_Station == null)
                            {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/ZH_AGVController.cs
@@ -46,22 +46,22 @@
            {
                var task = _taskRepository.QueryFirst(x => secureApplyModel.TaskCode == x.AgvTaskNum);
                if (task == null) throw new Exception("未找到任务");
                if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
                {
                    var content = TakeRequest(task.CurrentAddress);
                    //if (!content.Status)
                    //{
                    //    throw new Exception(content.Message);
                    //}
                }
                else
                {
                    var content = PutRequest(task.NextAddress, task.PalletType);
                    //if (!content.Status)
                    //{
                    //    throw new Exception(content.Message);
                    //}
                }
                //if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
                //{
                //    var content = TakeRequest(task.CurrentAddress);
                //    //if (!content.Status)
                //    //{
                //    //    throw new Exception(content.Message);
                //    //}
                //}
                //else
                //{
                //    var content = PutRequest(task.NextAddress, task.PalletType);
                //    //if (!content.Status)
                //    //{
                //    //    throw new Exception(content.Message);
                //    //}
                //}
                task.TaskState = TaskStatusEnum.AGV_WaitToExecute.ObjToInt();
                var up = _taskRepository.UpdateData(task);
                agvResponseContent.Code = up ? "0" : "1";
@@ -101,7 +101,12 @@
                        if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                        {
                            var content = TakeFinish(task.CurrentAddress);
                            if (!content.Status) throw new Exception(content.Message);
                            if (!content.Status)
                            {
                                task.TaskState = TaskStatusEnum.AGV_TakeError.ObjToInt();
                                _taskRepository.UpdateData(task);
                                throw new Exception(content.Message);
                            }
                            task.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt();
                            var up = _taskRepository.DeleteAndMoveIntoHty(task, OperateTypeEnum.自动完成);
                            _taskService.TaskCompleted(task.TaskNum);
@@ -112,16 +117,16 @@
                        break;
                    case "getSafetySignal"://安全信号申请
                        {
                            if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                            {
                                var content = TakeRequest(task.CurrentAddress);
                                //if (!content.Status) throw new Exception(content.Message);
                            }
                            else
                            {
                                var content = PutRequest(task.NextAddress, task.PalletType);
                                //if (!content.Status) throw new Exception(content.Message);
                            }
                            //if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                            //{
                            //    var content = TakeRequest(task.CurrentAddress);
                            //    //if (!content.Status) throw new Exception(content.Message);
                            //}
                            //else
                            //{
                            //    var content = PutRequest(task.NextAddress, task.PalletType);
                            //    //if (!content.Status) throw new Exception(content.Message);
                            //}
                            task.TaskState = TaskStatusEnum.AGV_WaitToExecute.ObjToInt();
                            var up = _taskRepository.UpdateData(task);
                            agvResponseContent.Code = up ? "0" : "1";
@@ -132,7 +137,12 @@
                        if (task.TaskType != TaskTypeEnum.Outbound.ObjToInt())
                        {
                            var content = PutFinish(task.NextAddress);
                            if (!content.Status) throw new Exception(content.Message);
                            if (!content.Status)
                            {
                                task.TaskState = TaskStatusEnum.AGV_PutError.ObjToInt();
                                _taskRepository.UpdateData(task);
                                throw new Exception(content.Message);
                            }
                            Dt_StationManger dt_Station = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == task.NextAddress);
                            if (dt_Station == null)
                            {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGV_CSJExtend.cs
@@ -13,6 +13,7 @@
using WIDESEAWCS_DTO.Agv;
using SqlSugar;
using static Dm.net.buffer.ByteArrayBuffer;
using WIDESEAWCS_Core.Enums;
namespace WIDESEAWCS_Tasks
{
@@ -190,6 +191,8 @@
                    }
                }
                _taskService.UpdateData(WaitToTasks);
                //取放货完成写入异常处理
                Dt_Task? TakeErroeTask = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.AGV_TakeError.ObjToInt() && nameof(AGV_CSJJob).Contains(x.DeviceCode)).First();
                if (TakeErroeTask!=null)
                {
@@ -207,8 +210,31 @@
                    otherDevice.SetValue(GroundStationDBName.W_TakeFinish, true, stationManger.StationCode);
                    Thread.Sleep(1000);
                    otherDevice.SetValue(GroundStationDBName.W_TakeFinish, false, stationManger.StationCode);
                    TakeErroeTask.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt();
                    var up = _taskRepository.DeleteAndMoveIntoHty(TakeErroeTask, OperateTypeEnum.自动完成);
                    _taskService.TaskCompleted(TakeErroeTask.TaskNum);
                }
                Dt_Task? PutErroeTask = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.AGV_PutError.ObjToInt() && nameof(AGV_CSJJob).Contains(x.DeviceCode)).First();
                if (PutErroeTask != null)
                {
                    Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == PutErroeTask.NextAddress);
                    if (stationManger == null)
                    {
                        throw new Exception($"未找到站台配置");
                    }
                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
                    if (device == null)
                    {
                        throw new Exception($"未找到站台配置");
                    }
                    OtherDevice otherDevice = (OtherDevice)device;
                    otherDevice.SetValue(GroundStationDBName.W_PutFinish, true, stationManger.StationCode);
                    PutErroeTask.CurrentAddress = stationManger.StationCode;
                    PutErroeTask.NextAddress = "";
                    PutErroeTask.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt();
                    PutErroeTask.DeviceCode = "SC01_CSJ";
                    var up = _taskRepository.UpdateData(PutErroeTask);
                }
            }
            catch (Exception ex)
            {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGV_CSJob.cs
@@ -13,6 +13,7 @@
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
@@ -28,14 +29,16 @@
        private readonly IRouterService _routerService;
        private readonly IStationMangerRepository _stationMangerRepository;
        private readonly IMapper _mapper;
        private readonly ITaskRepository _taskRepository;
        public AGV_CSJJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IStationMangerRepository stationMangerRepository, IMapper mapper)
        public AGV_CSJJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IStationMangerRepository stationMangerRepository, IMapper mapper, ITaskRepository taskRepository)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _routerService = routerService;
            _stationMangerRepository = stationMangerRepository;
            _mapper = mapper;
            _taskRepository = taskRepository;
        }
        public Task Execute(IJobExecutionContext context)
        {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP²Ö/StackerCraneJob_PP.cs
@@ -52,6 +52,20 @@
            _stationMangerRepository = stationMangerRepository;
            _cacheService = cacheService;
            _mapper=mapper;
            string? apiInfoStr = _cacheService.Get("apiInfos");
            if (!string.IsNullOrEmpty(apiInfoStr))
            {
                List<Dt_ApiInfo>? infos = JsonConvert.DeserializeObject<List<Dt_ApiInfo>>(apiInfoStr);
                if (infos == null || infos.Count == 0)
                {
                    apiInfos = new List<Dt_ApiInfo>();
                }
                else
                {
                    apiInfos = infos;
                }
            }
        }
        public Task Execute(IJobExecutionContext context)
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/³ÉÆ·²Ö/AGV_CPExtend.cs
@@ -21,122 +21,385 @@
        {
            try
            {
                var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()|| x.TaskState == TaskStatusEnum.New.ObjToInt()) && nameof(AGV_CPJob).Contains(x.DeviceCode) && !string.IsNullOrEmpty(x.DeviceCode) && x.TaskType!=999).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
                if (newTasks.Count>0)
                var AllTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => (nameof(AGV_CPJob).Contains(x.DeviceCode))).ToList();
                var stationMangers = _stationMangerRepository.QueryData();
                #region å…¥åº“任务推送
                {
                    foreach (var task in newTasks)
                    var newTasksIn = AllTasks.Where(x => (x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()) && x.TaskType>=TaskTypeEnum.Inbound.ObjToInt() && nameof(AGV_CPJob).Contains(x.DeviceCode) && !string.IsNullOrEmpty(x.DeviceCode) && x.TaskType!=999).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
                    if (newTasksIn.Count>0)
                    {
                        try
                        foreach (var task in newTasksIn)
                        {
                            if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                                task.CurrentAddress = GetAGVAddress(task.CurrentAddress);
                            else
                                task.NextAddress = GetAGVAddress(task.NextAddress);
                            AgvTaskDTO taskDTO = new AgvTaskDTO()
                            try
                            {
                                TaskCode = task.AgvTaskNum,
                                ReqCode = DateTime.Now.ToString("yyMMdd") + task.AgvTaskNum,
                                TaskTyp = task.TaskType < TaskTypeEnum.Inbound.ObjToInt() ? "CPC" : "CPR",
                                ctnrCode = task.PalletCode,
                                PositionCodePath = new List<CodePath>()
                                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                                    task.CurrentAddress = GetAGVAddress(task.CurrentAddress);
                                else
                                    task.NextAddress = GetAGVAddress(task.NextAddress);
                                AgvTaskDTO taskDTO = new AgvTaskDTO()
                                {
                                    new CodePath()
                                    TaskCode = task.AgvTaskNum,
                                    ReqCode = DateTime.Now.ToString("yyMMdd") + task.AgvTaskNum,
                                    TaskTyp = task.TaskType < TaskTypeEnum.Inbound.ObjToInt() ? "CPC" : "CPR",
                                    ctnrCode = task.PalletCode,
                                    PositionCodePath = new List<CodePath>()
                                    {
                                        type = "05",
                                        positionCode = task.CurrentAddress
                                    },
                                    new CodePath()
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.CurrentAddress
                                        },
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.NextAddress
                                        }
                                    }
                                };
                                if (taskDTO.TaskTyp== "CPC")
                                {
                                    taskDTO.Priority = task.Grade.ToString();
                                }
                                if (task.GroupId.IsNotEmptyOrNull())
                                {
                                    taskDTO.GroupId=task.GroupId;
                                }
                                if (task.TaskType==TaskTypeEnum.OutMesRworkProduct.ObjToInt())
                                {
                                    taskDTO.Priority = "127";
                                }
                                //发送AGV任务
                                WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_CPSendTask);
                                if (!content.Status)
                                    throw new Exception(content.Message);
                                if (taskDTO.TaskTyp == "CPC")
                                {
                                    task.Dispatchertime = DateTime.Now;
                                    _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
                                }
                                else
                                {
                                    task.Dispatchertime = DateTime.Now;
                                    _taskService.UpdateTask(task, TaskStatusEnum.AGV_Takeing);
                                }
                                Thread.Sleep(500);
                            }
                            catch (Exception ex)
                            {
                                task.TaskState = TaskStatusEnum.Exception.ObjToInt();
                                task.ExceptionMessage = ex.Message;
                            }
                        }
                        if (newTasksIn.Count > 0)
                        {
                            _taskService.UpdateData(newTasksIn);
                        }
                    }
                }
                #endregion
                #region å‡ºåº“推送任务1线
                {
                    var newTasksOut1 = AllTasks.Where(x => (x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress=="5236").OrderBy(x => x.Grade).ThenBy(x => x.GroupId).Take(5).ToList();
                    var downTasksOut1 = AllTasks.Where(x => (x.TaskState > TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == "5236").ToList();
                    Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x => x.AGVStationCode == "5236");
                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
                    if (device != null)
                    {
                        OtherDevice otherDevice = (OtherDevice)device;
                        short stationCurrentStatus = device.Communicator.Read<short>("DB29.112");
                        if (newTasksOut1.Count > 0 && downTasksOut1.Count <= 0 && stationCurrentStatus == 1)
                        {
                            foreach (var task in newTasksOut1)
                            {
                                try
                                {
                                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                                        task.CurrentAddress = GetAGVAddress(task.CurrentAddress);
                                    else
                                        task.NextAddress = GetAGVAddress(task.NextAddress);
                                    AgvTaskDTO taskDTO = new AgvTaskDTO()
                                    {
                                        type = "05",
                                        positionCode = task.NextAddress
                                        TaskCode = task.AgvTaskNum,
                                        ReqCode = DateTime.Now.ToString("yyMMdd") + task.AgvTaskNum,
                                        TaskTyp = task.TaskType < TaskTypeEnum.Inbound.ObjToInt() ? "CPC" : "CPR",
                                        ctnrCode = task.PalletCode,
                                        PositionCodePath = new List<CodePath>()
                                    {
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.CurrentAddress
                                        },
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.NextAddress
                                        }
                                    }
                                    };
                                    if (taskDTO.TaskTyp == "CPC")
                                    {
                                        taskDTO.Priority = task.Grade.ToString();
                                    }
                                    if (task.GroupId.IsNotEmptyOrNull())
                                    {
                                        taskDTO.GroupId = task.GroupId;
                                    }
                                    if (task.TaskType == TaskTypeEnum.OutMesRworkProduct.ObjToInt())
                                    {
                                        taskDTO.Priority = "127";
                                    }
                                    //发送AGV任务
                                    WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_CPSendTask);
                                    if (!content.Status)
                                        throw new Exception(content.Message);
                                    if (taskDTO.TaskTyp == "CPC")
                                    {
                                        task.Dispatchertime = DateTime.Now;
                                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
                                    }
                                    else
                                    {
                                        task.Dispatchertime = DateTime.Now;
                                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_Takeing);
                                    }
                                }
                            };
                            if (taskDTO.TaskTyp== "CPC")
                            {
                                taskDTO.Priority = task.Grade.ToString();
                                catch (Exception ex)
                                {
                                    task.TaskState = TaskStatusEnum.Exception.ObjToInt();
                                    task.ExceptionMessage = ex.Message;
                                }
                            }
                            if (task.GroupId.IsNotEmptyOrNull())
                            if (newTasksOut1.Count > 0)
                            {
                                taskDTO.GroupId=task.GroupId;
                                _taskService.UpdateData(newTasksOut1);
                            }
                            if (task.TaskType==TaskTypeEnum.OutMesRworkProduct.ObjToInt())
                        }
                    }
                }
                #endregion
                #region å‡ºåº“推送任务2线
                {
                    var newTasksOut2 = AllTasks.Where(x => (x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == "5243").OrderBy(x => x.Grade).ThenBy(x => x.GroupId).Take(5).ToList();
                    var downTasksOut2 = AllTasks.Where(x => (x.TaskState > TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == "5243").ToList();
                    Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x => x.AGVStationCode == "5243");
                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
                    if (device != null)
                    {
                        OtherDevice otherDevice = (OtherDevice)device;
                        short stationCurrentStatus = device.Communicator.Read<short>("DB29.126");
                        if (newTasksOut2.Count > 0 && downTasksOut2.Count <= 0 && stationCurrentStatus == 1)
                        {
                            foreach (var task in newTasksOut2)
                            {
                                taskDTO.Priority = "127";
                                try
                                {
                                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                                        task.CurrentAddress = GetAGVAddress(task.CurrentAddress);
                                    else
                                        task.NextAddress = GetAGVAddress(task.NextAddress);
                                    AgvTaskDTO taskDTO = new AgvTaskDTO()
                                    {
                                        TaskCode = task.AgvTaskNum,
                                        ReqCode = DateTime.Now.ToString("yyMMdd") + task.AgvTaskNum,
                                        TaskTyp = task.TaskType < TaskTypeEnum.Inbound.ObjToInt() ? "CPC" : "CPR",
                                        ctnrCode = task.PalletCode,
                                        PositionCodePath = new List<CodePath>()
                                    {
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.CurrentAddress
                                        },
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.NextAddress
                                        }
                                    }
                                    };
                                    if (taskDTO.TaskTyp == "CPC")
                                    {
                                        taskDTO.Priority = task.Grade.ToString();
                                    }
                                    if (task.GroupId.IsNotEmptyOrNull())
                                    {
                                        taskDTO.GroupId = task.GroupId;
                                    }
                                    if (task.TaskType == TaskTypeEnum.OutMesRworkProduct.ObjToInt())
                                    {
                                        taskDTO.Priority = "127";
                                    }
                                    //发送AGV任务
                                    WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_CPSendTask);
                                    if (!content.Status)
                                        throw new Exception(content.Message);
                                    if (taskDTO.TaskTyp == "CPC")
                                    {
                                        task.Dispatchertime = DateTime.Now;
                                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
                                    }
                                    else
                                    {
                                        task.Dispatchertime = DateTime.Now;
                                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_Takeing);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    task.TaskState = TaskStatusEnum.Exception.ObjToInt();
                                    task.ExceptionMessage = ex.Message;
                                }
                            }
                            //发送AGV任务
                            WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_CPSendTask);
                            if (!content.Status)
                                throw new Exception(content.Message);
                            if (taskDTO.TaskTyp == "CPC")
                            if (newTasksOut2.Count > 0)
                            {
                                task.Dispatchertime = DateTime.Now;
                                _taskService.UpdateData(newTasksOut2);
                            }
                        }
                        //else
                        //{
                        //    WriteInfo(nameof(AGV_CPJob), $"2线无任务,状态{stationCurrentStatus}");
                        //}
                    }
                }
                #endregion
                #region å‡ºåº“推送任务3线
                {
                    var newTasksOut3 = AllTasks.Where(x => (x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == "5250").OrderBy(x => x.Grade).ThenBy(x => x.GroupId).Take(5).ToList();
                    var downTasksOut3 = AllTasks.Where(x => (x.TaskState > TaskStatusEnum.New.ObjToInt()) && x.TaskType < TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == "5250").ToList();
                    Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x => x.AGVStationCode == "5250");
                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
                    if (device != null)
                    {
                        OtherDevice otherDevice = (OtherDevice)device;
                        short stationCurrentStatus = device.Communicator.Read<short>("DB29.140");
                        if (newTasksOut3.Count > 0 && downTasksOut3.Count <= 0 && stationCurrentStatus == 1)
                        {
                            foreach (var task in newTasksOut3)
                            {
                                try
                                {
                                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                                        task.CurrentAddress = GetAGVAddress(task.CurrentAddress);
                                    else
                                        task.NextAddress = GetAGVAddress(task.NextAddress);
                                    AgvTaskDTO taskDTO = new AgvTaskDTO()
                                    {
                                        TaskCode = task.AgvTaskNum,
                                        ReqCode = DateTime.Now.ToString("yyMMdd") + task.AgvTaskNum,
                                        TaskTyp = task.TaskType < TaskTypeEnum.Inbound.ObjToInt() ? "CPC" : "CPR",
                                        ctnrCode = task.PalletCode,
                                        PositionCodePath = new List<CodePath>()
                                    {
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.CurrentAddress
                                        },
                                        new CodePath()
                                        {
                                            type = "05",
                                            positionCode = task.NextAddress
                                        }
                                    }
                                    };
                                    if (taskDTO.TaskTyp == "CPC")
                                    {
                                        taskDTO.Priority = task.Grade.ToString();
                                    }
                                    if (task.GroupId.IsNotEmptyOrNull())
                                    {
                                        taskDTO.GroupId = task.GroupId;
                                    }
                                    if (task.TaskType == TaskTypeEnum.OutMesRworkProduct.ObjToInt())
                                    {
                                        taskDTO.Priority = "127";
                                    }
                                    //发送AGV任务
                                    WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_CPSendTask);
                                    if (!content.Status)
                                        throw new Exception(content.Message);
                                    if (taskDTO.TaskTyp == "CPC")
                                    {
                                        task.Dispatchertime = DateTime.Now;
                                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
                                    }
                                    else
                                    {
                                        task.Dispatchertime = DateTime.Now;
                                        _taskService.UpdateTask(task, TaskStatusEnum.AGV_Takeing);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    task.TaskState = TaskStatusEnum.Exception.ObjToInt();
                                    task.ExceptionMessage = ex.Message;
                                }
                            }
                            if (newTasksOut3.Count > 0)
                            {
                                _taskService.UpdateData(newTasksOut3);
                            }
                        }
                        //else
                        //{
                        //    WriteInfo(nameof(AGV_CPJob), $"3线无任务,状态{stationCurrentStatus}");
                        //}
                    }
                }
                #endregion
                #region ç©ºæ¡†æ¬è¿
                {
                    var newTasksLocations = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.New.ObjToInt() && nameof(AGV_CPJob).Contains(x.DeviceCode) && !string.IsNullOrEmpty(x.DeviceCode) && x.Remark == "测试空框").ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
                    if (newTasksLocations.Count>0)
                    {
                        foreach (var task in newTasksLocations)
                        {
                            try
                            {
                                string CurrentAddress = GetAGVAddress(task.CurrentAddress);
                                string NextAddress = GetAGVAddress(task.NextAddress);
                                AgvTaskDTO taskDTO = new AgvTaskDTO()
                                {
                                    TaskCode = task.AgvTaskNum,
                                    ReqCode = DateTime.Now.ToString("yyMMdd") + task.AgvTaskNum,
                                    TaskTyp = "CP",
                                    ctnrCode = task.PalletCode,
                                    PositionCodePath = new List<CodePath>()
                                    {
                                        new CodePath()
                                        {
                                            type="05",
                                            positionCode=CurrentAddress
                                        },
                                        new CodePath()
                                        {
                                            type="05",
                                            positionCode=NextAddress
                                        }
                                    },
                                };
                                //发送AGV任务
                                WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_CPSendTask);
                                if (!content.Status)
                                    throw new Exception(content.Message);
                                task.TaskState = TaskStatusEnum.AGV_Takeing.ObjToInt();
                                task.CurrentAddress = CurrentAddress;
                                task.NextAddress = NextAddress;
                                _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
                            }
                            else
                            catch (Exception ex)
                            {
                                task.Dispatchertime = DateTime.Now;
                                _taskService.UpdateTask(task, TaskStatusEnum.AGV_Takeing);
                                task.TaskState = TaskStatusEnum.Exception.ObjToInt();
                                task.ExceptionMessage = ex.Message;
                            }
                            Thread.Sleep(500);
                        }
                        catch (Exception ex)
                        {
                            task.TaskState = TaskStatusEnum.Exception.ObjToInt();
                            task.ExceptionMessage = ex.Message;
                        }
                    }
                    if (newTasks.Count > 0)
                    {
                        _taskService.UpdateData(newTasks);
                    }
                }
                var newTasksLocations = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.New.ObjToInt() && nameof(AGV_CPJob).Contains(x.DeviceCode) && !string.IsNullOrEmpty(x.DeviceCode) && x.Remark == "测试空框").ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
                if (newTasksLocations.Count>0)
                {
                    foreach (var task in newTasksLocations)
                    {
                        try
                        {
                            string CurrentAddress = GetAGVAddress(task.CurrentAddress);
                            string NextAddress = GetAGVAddress(task.NextAddress);
                            AgvTaskDTO taskDTO = new AgvTaskDTO()
                            {
                                TaskCode = task.AgvTaskNum,
                                ReqCode = DateTime.Now.ToString("yyMMdd") + task.AgvTaskNum,
                                TaskTyp = "CP",
                                ctnrCode = task.PalletCode,
                                PositionCodePath = new List<CodePath>()
                                {
                                    new CodePath()
                                    {
                                        type="05",
                                        positionCode=CurrentAddress
                                    },
                                    new CodePath()
                                    {
                                        type="05",
                                        positionCode=NextAddress
                                    }
                                },
                            };
                            //发送AGV任务
                            WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_CPSendTask);
                            if (!content.Status)
                                throw new Exception(content.Message);
                            task.TaskState = TaskStatusEnum.AGV_Takeing.ObjToInt();
                            task.CurrentAddress = CurrentAddress;
                            task.NextAddress = NextAddress;
                            _taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing);
                        }
                        catch (Exception ex)
                        {
                            task.TaskState = TaskStatusEnum.Exception.ObjToInt();
                            task.ExceptionMessage = ex.Message;
                        }
                    }
                }
                #endregion
            }
            catch (Exception ex)
            {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/×躸²Ö/AGV_ZHExtend.cs
@@ -7,6 +7,7 @@
using WIDESEAWCS_Common.APIEnum;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
@@ -176,6 +177,50 @@
                    }
                }
                _taskService.UpdateData(WaitToTasks);
                //取放货完成写入异常处理
                Dt_Task? TakeErroeTask = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.AGV_TakeError.ObjToInt() && nameof(AGV_ZHJob).Contains(x.DeviceCode)).First();
                if (TakeErroeTask != null)
                {
                    Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == TakeErroeTask.CurrentAddress);
                    if (stationManger == null)
                    {
                        throw new Exception($"未找到站台配置");
                    }
                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
                    if (device == null)
                    {
                        throw new Exception($"未找到对应设备");
                    }
                    OtherDevice otherDevice = (OtherDevice)device;
                    otherDevice.SetValue(GroundStationDBName.W_TakeFinish, true, stationManger.StationCode);
                    Thread.Sleep(1000);
                    otherDevice.SetValue(GroundStationDBName.W_TakeFinish, false, stationManger.StationCode);
                    TakeErroeTask.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt();
                    var up = _taskRepository.DeleteAndMoveIntoHty(TakeErroeTask, OperateTypeEnum.自动完成);
                    _taskService.TaskCompleted(TakeErroeTask.TaskNum);
                }
                Dt_Task? PutErroeTask = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.AGV_PutError.ObjToInt() && nameof(AGV_ZHJob).Contains(x.DeviceCode)).First();
                if (PutErroeTask != null)
                {
                    Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == PutErroeTask.NextAddress);
                    if (stationManger == null)
                    {
                        throw new Exception($"未找到站台配置");
                    }
                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode);
                    if (device == null)
                    {
                        throw new Exception($"未找到站台配置");
                    }
                    OtherDevice otherDevice = (OtherDevice)device;
                    otherDevice.SetValue(GroundStationDBName.W_PutFinish, true, stationManger.StationCode);
                    PutErroeTask.CurrentAddress = stationManger.StationCode;
                    PutErroeTask.NextAddress = "";
                    PutErroeTask.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt();
                    PutErroeTask.DeviceCode = "SC01_ZH";
                    var up = _taskRepository.UpdateData(PutErroeTask);
                }
            }
            catch (Exception ex)
            {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/×躸²Ö/AGV_ZHJob.cs
@@ -13,6 +13,7 @@
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
@@ -28,14 +29,16 @@
        private readonly IRouterService _routerService;
        private readonly IStationMangerRepository _stationMangerRepository;
        private readonly IMapper _mapper;
        private readonly ITaskRepository _taskRepository;
        public AGV_ZHJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IStationMangerRepository stationMangerRepository, IMapper mapper)
        public AGV_ZHJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IStationMangerRepository stationMangerRepository, IMapper mapper, ITaskRepository taskRepository)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _routerService = routerService;
            _stationMangerRepository = stationMangerRepository;
            _mapper = mapper;
            _taskRepository = taskRepository;
        }
        public Task Execute(IJobExecutionContext context)
        {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/config/buttons.js
@@ -105,6 +105,7 @@
    name: "取 æ¶ˆ ä»» åŠ¡",
    icon: '',
    class: '',
    type: 'danger',
    value: 'TaskHandCancel',
    onClick: function () {
    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/extension/taskinfo/task.js
@@ -24,8 +24,9 @@
          if (rows.length == 0) return this.$error("请选择数据!");
          if (rows.length > 1) return this.$error("请选择一条数据!");
          var param = rows[0].taskNum;
          var warehouseId = rows[0].warehouseId;
          this.http
            .post("api/Task/TaskCancel?taskNum="+param, "数据处理中...")
            .post("api/Task/TaskHandCancel?taskNum="+param+"&&warehouseId="+warehouseId, "数据处理中...")
            .then((x) => {
              if (x.status) {
                this.$Message.success('任务取消成功.');
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue
@@ -99,6 +99,10 @@
        { title: "创建时间", field: "createDate", type: "datetime" },
        { title: "所属仓库", field: "warehouseId",type: "selectList",dataKey: "warehouses",data: [],}
      ],
      [
        { title: "物料编号", field: "materielCode", type: "like" },
        { title: "批次号", field: "batchNo", type: "like" },
      ],
    ]);
    const columns = ref([
      {
@@ -115,7 +119,7 @@
        field: "inboundOrderNo",
        title: "单据编号",
        type: "string",
        width: 120,
        width: 180,
        align: "left",
        link: true,
      },
@@ -244,7 +248,7 @@
          field: "batchNo",
          title: "批次号",
          type: "decimal",
          width: 90,
          width: 130,
          align: "left",
          edit: { type: "" },
          required: true,
@@ -269,7 +273,7 @@
          field: "overInQuantity",
          title: "上架数量",
          type: "string",
          width: 200,
          width: 120,
          align: "left",
        },
        {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/inbound/purchaseOrder.vue
@@ -81,6 +81,16 @@
          dataKey: "purchaseOrderStatus",
          data: [],
        },
      ],
      [
        { title: "物料编号", field: "materielCode", type: "like" },
        {
          title: "所属仓库",
          field: "warehouseId",
          type: "select",
          dataKey: "warehouses",
          data: [],
        },
      ]
    ]);
    const columns = ref([
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/inbound/receiveOrder.vue
@@ -50,12 +50,17 @@
          dataKey: "receiveStatus",
          data: [],
        },
        {title: "物料编号",field: "materielCode",type: "like"},
      ],
      [
        { title: "供应商", field: "suppliersId", type: "select",dataKey:"suppliers",data:[]},
        {field: "lotNo",title: "批次号",type: "like",},
        { title: "供应商", field: "suppliersId", type: "selectList",dataKey:"suppliers",data:[]},
        { title: "创建者", field: "creater", type: "like" },
        { title: "所属仓库", field: "warehouseId",type: "selectList",dataKey: "warehouses",data: [],}
      ],
      [
        {field: "purchaseOrderNo",title: "采购单号",type: "like",},
      ],
    ]);
    const editFormFields = ref({
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue
@@ -118,6 +118,9 @@
        { title: "创建时间", field: "createDate", type: "datetime" },
        { title: "所属仓库", field: "warehouseId",type: "selectList",dataKey: "warehouses",data: [],}
      ],
      [
        { title: "物料编号", field: "materielCode", type: "like" },
      ],
    ]);
    const columns = ref([
      {
@@ -164,7 +167,7 @@
      {
        field: "orderStatus",
        title: "单据状态",
        type: "decimal",
        type: "string",
        width: 90,
        align: "left",
        bind: { key: "outboundStatusEnum", data: [] },
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/outbound/proOutOrder.vue
@@ -93,25 +93,19 @@
        { title: "上游单据编号", field: "upperOrderNo", type: "like" },
        {
          title: "单据类型",
          field: "orderType",
          field: "proOrderType",
          type: "select",
          dataKey: "outOrderType",
          dataKey: "proOutOrderTypeEnum",
          data: [],
        },
        {
          title: "单据状态",
          field: "orderStatus",
          type: "select",
          dataKey: "outboundStatusEnum",
          data: [],
        },
      ],
      [
        {
          title: "创建方式",
          field: "createType",
          title: "单据状态",
          field: "proOrderStatus",
          type: "select",
          dataKey: "createType",
          dataKey: "outboundStatusEnum",
          data: [],
        },
        { title: "创建者", field: "creater", type: "like" },
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/stock/ProStockView.vue
@@ -44,16 +44,18 @@
      const searchFormOptions = ref([
        [
          { title: "胶框号", field: "palletCode",type: "like" },
          // { title: "货位编号", field: "locationCode",type: "like" },
          { title: "货位状态", field: "locationStatus" ,type: "selectList",dataKey: "locationStatusEnum",data: [],},
          { title: "库存状态", field: "stockStatus",type: "selectList",dataKey: "stockStatusEmun",data: [],},
          { title: "产品编码", field: "productCode",type: "like"},
        ],
        [
          { title: "批次号", field: "lotNumber",type: "like"},
          { title: "产品版本", field: "productVersion",type: "like"},
          { title: "货位编号", field: "locationCode",type: "like" },
          { title: "指派版本", field: "specifyVer",type: "like"},
          { title: "所属仓库", field: "warehouseId",type: "selectList",dataKey: "warehouses",data: [],},
        ],
        [
          { title: "产品版本", field: "productVersion",type: "like"},
        ]
      ]);
      const columns = ref([
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue
@@ -117,9 +117,13 @@
    });
    const searchFormOptions = ref([
      [
        { title: "物料编号", field: "materielCode" },
        { title: "物料名称", field: "materielName" },
        { title: "单据编号", field: "orderNo" },
        { title: "物料编号", field: "materielCode",type :"like"},
        { title: "物料名称", field: "materielName",type :"like"},
        { title: "单据编号", field: "orderNo",type :"like"},
      ],
      [
        { title: "批次号", field: "batchNo",type :"like"},
        {title: "库存明细状态",field: "status",type: "select",dataKey:"stockStatusEmun", data: []},
      ],
    ]);
    const columns = ref([
´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/stock/stockView.vue
@@ -43,7 +43,7 @@
    const searchFormOptions = ref([
      [
        { title: "托盘编号", field: "palletCode",type: "like" },
        // { title: "货位编号", field: "locationCode",type: "like" },
        { title: "货位编号", field: "locationCode",type: "like" },
        { title: "货位状态", field: "locationStatus" ,type: "selectList",dataKey: "locationStatusEnum",data: [],},
        { title: "库存状态", field: "stockStatus",type: "selectList",dataKey: "stockStatusEmun",data: [],},
      ],
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_CSJ.cs
@@ -74,11 +74,13 @@
                    int maxDepth = locationInfos.Max(x => x.Depth);
                    if (beRelocation.Row <= maxDepth)
                    {
                        locationInfos = locationInfos.Where(x => x.Row <= maxDepth).ToList();
                        //过滤当前移库的同列同层
                        locationInfos = locationInfos.Where(x => x.Row <= maxDepth && x.Column!= beRelocation.Column && x.Layer!=beRelocation.Layer).ToList();
                    }
                    else if (beRelocation.Row > maxDepth)
                    {
                        locationInfos = locationInfos.Where(x => x.Row > maxDepth).ToList();
                        //过滤当前移库的同列同层
                        locationInfos = locationInfos.Where(x => x.Row > maxDepth && x.Column != beRelocation.Column && x.Layer != beRelocation.Layer).ToList();
                    }
                }
@@ -120,12 +122,14 @@
                                {
                                    continue;
                                }
                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                if (locationInfoExist.LocationType>0)
                                {
                                    continue;
                                    Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                    if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                    {
                                        continue;
                                    }
                                }
                            }
                            else
                            {
@@ -306,10 +310,10 @@
                        else
                        {
                            List<Dt_LocationInfo> moreDepth = locations.Where(x => x.Depth > emptyLocation.Depth).ToList();
                            moreDepthFlag = moreDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationType != emptyLocation.LocationType) == null;//查询大于当前货位深度的集合里是否有状态不为有货的货位,如果是true,则表示深货位有未被使用的情况
                            moreDepthFlag = moreDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt())) == null;//查询大于当前货位深度的集合里是否有状态不为有货的货位,如果是true,则表示深货位有未被使用的情况
                            List<Dt_LocationInfo> littleDepth = locations.Where(x => x.Depth <= emptyLocation.Depth).ToList();
                            littleDepthFlag = littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationType != emptyLocation.LocationType) == null; //查询小于当前货位深度的集合里是否有状态不为空,且禁用状态不为禁用以及只入的货位,如果是true,则表示浅货位被使用或者被禁用的情况
                            littleDepthFlag = littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt())) == null; //查询小于当前货位深度的集合里是否有状态不为空,且禁用状态不为禁用以及只入的货位,如果是true,则表示浅货位被使用或者被禁用的情况
                        }
                        //if (moreDepthFlag && littleDepthFlag)
                        //{
@@ -337,10 +341,10 @@
                        else
                        {
                            List<Dt_LocationInfo> moreDepth = locations.Where(x => x.Depth > emptyLocation.Depth).ToList();
                            moreDepthFlag = moreDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationType != emptyLocation.LocationType) == null;//查询大于当前货位深度的集合里是否有状态不为有货的货位,如果是true,则表示深货位有未被使用的情况
                            moreDepthFlag = moreDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt())) == null;//查询大于当前货位深度的集合里是否有状态不为有货的货位,如果是true,则表示深货位有未被使用的情况
                            List<Dt_LocationInfo> littleDepth = locations.Where(x => x.Depth <= emptyLocation.Depth).ToList();
                            littleDepthFlag = littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.LocationType != emptyLocation.LocationType) == null; //查询小于当前货位深度的集合里是否有状态不为空,且禁用状态不为禁用以及只入的货位,如果是true,则表示浅货位被使用或者被禁用的情况
                            littleDepthFlag = littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt())) == null; //查询小于当前货位深度的集合里是否有状态不为空,且禁用状态不为禁用以及只入的货位,如果是true,则表示浅货位被使用或者被禁用的情况
                        }
                        //List<Dt_LocationInfo> moreDepth = locations.Where(x => x.Depth > emptyLocation.Depth).ToList();
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_GM.cs
@@ -221,15 +221,20 @@
                                {
                                    continue;
                                }
                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                if (locationInfoExist.LocationType > 0)
                                {
                                    continue;
                                    Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                    if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                    {
                                        continue;
                                    }
                                }
                                if (locationInfoExist.LocationStatus != LocationStatusEnum.Free.ObjToInt() || locationInfoExist.EnableStatus != EnableStatusEnum.Normal.ObjToInt())
                                {
                                    continue;
                                }
                            }
                            locationCaches_GM.Add(new LocationCache { LocationCode = locationInfo.LocationCode, DateTime = DateTime.Now });
                            return locationInfo;
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_PP.cs
@@ -56,14 +56,15 @@
                        throw new Exception($"未找到货位信息");
                    }
                    int maxDepth = locationInfos.Max(x => x.Depth);
                    int mathCurrentRow = beRelocation.Row - Convert.ToInt32(Math.Ceiling(beRelocation.Row / maxDepth / 2.0)) * maxDepth * 2;
                    if (mathCurrentRow <= maxDepth)
                    if (beRelocation.Row <= maxDepth)
                    {
                        locationInfos = locationInfos.Where(x => x.Row - Convert.ToInt32(Math.Ceiling(x.Row / maxDepth / 2.0)) * maxDepth * 2 <= maxDepth).ToList();
                        //过滤当前移库的同列同层
                        locationInfos = locationInfos.Where(x => x.Row <= maxDepth && x.Column != beRelocation.Column && x.Layer != beRelocation.Layer).ToList();
                    }
                    else
                    else if (beRelocation.Row > maxDepth)
                    {
                        locationInfos = locationInfos.Where(x => x.Row - Convert.ToInt32(Math.Ceiling(x.Row / maxDepth / 2.0)) * maxDepth * 2 > maxDepth).ToList();
                        //过滤当前移库的同列同层
                        locationInfos = locationInfos.Where(x => x.Row > maxDepth && x.Column != beRelocation.Column && x.Layer != beRelocation.Layer).ToList();
                    }
                }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_ZH.cs
@@ -114,10 +114,13 @@
                                {
                                    continue;
                                }
                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                if (locationInfoExist.LocationType > 0)
                                {
                                    continue;
                                    Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                    if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                    {
                                        continue;
                                    }
                                }
                            }
                            else
@@ -137,10 +140,13 @@
                                {
                                    continue;
                                }
                                Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                if (locationInfoExist.LocationType > 0)
                                {
                                    continue;
                                    Dt_PalletTypeInfo palletTypeInfoDepth = _basicRepository.PalletTypeInfoRepository.QueryFirst(x => x.WarehouseId == locationInfoExist.WarehouseId && x.PalletType == locationInfoExist.LocationType);
                                    if (palletTypeInfoDepth != null && palletTypeInfoDepth.LocaitonCount != palletTypeInfo.LocaitonCount)
                                    {
                                        continue;
                                    }
                                }
                                if (locationInfoExist.LocationStatus != LocationStatusEnum.Free.ObjToInt() || locationInfoExist.EnableStatus != EnableStatusEnum.Normal.ObjToInt())
                                {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/LocationInfoService_Common.cs
@@ -465,10 +465,52 @@
            for (int j = location.Depth + 1; j <= maxDepth; j++)
            {
                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == (row + 1));
                if (j == 3 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 1 || row == 6))
                #region æµ‹è¯•架、PP判断同组货位
                if (j == 3 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 2 || row == 5))
                {
                    locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && (x.Row == row + 2 || x.Row == row - 2));
                    if (row <= maxDepth)
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row <= maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row - 1);
                    }
                    else
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row > maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row + 1);
                    }
                }
                if (j == 3 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 3 || row == 4))
                {
                    if (row <= maxDepth)
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row <= maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row - 2);
                    }
                    else
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row > maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row + 2);
                    }
                }
                if (j == 2 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 1 || row == 6))
                {
                    if (row <= maxDepth)
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row <= maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row + 1);
                    }
                    else
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row > maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row - 1);
                    }
                }
                if (j == 2 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 3 || row == 4))
                {
                    if (row <= maxDepth)
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row <= maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row - 1);
                    }
                    else
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row > maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row + 1);
                    }
                }
                #endregion
                if (locationInfo != null)
                {
                    groupLocations.Add(locationInfo);
@@ -478,10 +520,41 @@
            for (int j = location.Depth - 1; j >= 1; j--)
            {
                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == (row -1));
                if (j == 1 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 3 || row == 4))
                #region æµ‹è¯•架、PP判断同组货位
                if (j == 1 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 1 || row == 6))
                {
                    locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && (x.Row == row + 2 || x.Row == row - 2));
                    if (row <= maxDepth)
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row <= maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row + 2);
                    }
                    else
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row > maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row - 2);
                    }
                }
                if (j == 1 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 2 || row == 5))
                {
                    if (row <= maxDepth)
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row <= maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row + 1);
                    }
                    else
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row > maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row - 1);
                    }
                }
                if (j == 2 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 1 || row == 6))
                {
                    if (row <= maxDepth)
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row <= maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row + 1);
                    }
                    else
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row > maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row - 1);
                    }
                }
                #endregion
                if (locationInfo != null)
                {
                    groupLocations.Add(locationInfo);
@@ -505,10 +578,52 @@
            for (int j = location.Depth + 1; j <= maxDepth; j++)
            {
                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && (x.Row == row + 1 || x.Row == row - 1));
                if (j == 3 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 1 || row == 6))
                #region æµ‹è¯•架、PP判断同组货位
                if (j == 3 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 2 || row == 5))
                {
                    locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && (x.Row == row + 2 || x.Row == row - 2));
                    if (row <= maxDepth)
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row <= maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row - 1);
                    }
                    else
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row > maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row + 1);
                    }
                }
                if (j == 3 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 3 || row == 4))
                {
                    if (row <= maxDepth)
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row <= maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row - 2);
                    }
                    else
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row > maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row + 2);
                    }
                }
                if (j == 2 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 1 || row == 6))
                {
                    if (row <= maxDepth)
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row <= maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row + 1);
                    }
                    else
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row > maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row - 1);
                    }
                }
                if (j == 2 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 3 || row == 4))
                {
                    if (row <= maxDepth)
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row <= maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row - 1);
                    }
                    else
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row > maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row + 1);
                    }
                }
                #endregion
                if (locationInfo != null)
                {
                    groupLocations.Add(locationInfo);
@@ -518,10 +633,41 @@
            for (int j = location.Depth - 1; j >= 1; j--)
            {
                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && (x.Row == row + 1 || x.Row == row - 1));
                if (j == 1 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 3 || row == 4))
                #region æµ‹è¯•架、PP判断同组货位
                if (j == 1 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 1 || row == 6))
                {
                    locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && (x.Row == row + 2 || x.Row == row - 2));
                    if (row <= maxDepth)
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row <= maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row + 2);
                    }
                    else
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row > maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row - 2);
                    }
                }
                if (j == 1 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 2 || row == 5))
                {
                    if (row <= maxDepth)
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row <= maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row + 1);
                    }
                    else
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row > maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row - 1);
                    }
                }
                if (j == 2 && (location.RoadwayNo.Contains("CSJ") || location.RoadwayNo.Contains("PP")) && (row == 1 || row == 6))
                {
                    if (row <= maxDepth)
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row <= maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row + 1);
                    }
                    else
                    {
                        locationInfo = locationInfos.FirstOrDefault(x => x.Row > maxDepth && x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row - 1);
                    }
                }
                #endregion
                if (locationInfo != null)
                {
                    groupLocations.Add(locationInfo);
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/proOutOrderTypeEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_Common.OrderEnum
{
    public enum ProOutOrderTypeEnum
    {
        /// <summary>
        /// è®¢å•出货
        /// </summary>
        [Description("订单出货")]
        è®¢å•出货 = 1,
        /// <summary>
        /// é”€å”®å‡ºåº“
        /// </summary>
        [Description("销售出库")]
        é”€å”®å‡ºåº“ = 2,
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs
@@ -53,6 +53,7 @@
        public virtual PageGridData<TEntity> GetPageData(PageDataOptions options)
        {
            string wheres = options.ValidatePageOptions(TProperties);
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/ProInStaticDTO.cs
@@ -11,8 +11,21 @@
    /// </summary>
    public class ProInStaticDTO
    {
        /// <summary>
        /// äº§å“ç¼–码
        /// </summary>
        public string ProductCode { get; set; }
        /// <summary>
        /// äº§å“ç‰ˆæœ¬
        /// </summary>
        public string ProductVersion { get; set; }
        /// <summary>
        /// æ€»PCS数
        /// </summary>
        public float SumPcs { get; set; }
        /// <summary>
        /// æ€»é¢ç§¯
        /// </summary>
        public float SumPcsArea { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/MesBagInfoModel.cs
@@ -76,6 +76,10 @@
        /// </summary>
        public float OKPCSQTY { get; set; }
        /// <summary>
        /// å†…包总面积
        /// </summary>
        public float OKPCSArea { get; set; }
        /// <summary>
        /// å‘¨æœŸ
        /// </summary>
        public string DateCode { get; set; }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -391,5 +391,12 @@
        /// </summary>
        WebResponseContent OutProductSelect(int orderDetailId, List<ProStockViewDTO> proStockViews);
        WebResponseContent GetZHMesMaterialLot(string materialLot);
        /// <summary>
        /// ä»»åŠ¡å–æ¶ˆ
        /// </summary>
        /// <param name="taskNum"></param>
        /// <param name="warehouseId"></param>
        /// <returns></returns>
        public Task<WebResponseContent> TaskHandCancel(int taskNum, int warehouseId);
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs
@@ -78,6 +78,42 @@
            _warehouseService = warehouseService;
            _palletTypeInfoRepository = palletTypeInfoRepository;
        }
        public override PageGridData<Dt_InboundOrder> GetPageData(PageDataOptions options)
        {
            PageGridData<Dt_InboundOrder> pageGridData = base.GetPageData(options);
            ISugarQueryable<Dt_InboundOrder> sugarQueryable1 = BaseDal.Db.Queryable<Dt_InboundOrder>().Includes(x => x.Details);
            if (!string.IsNullOrEmpty(options.Wheres))
            {
                List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
                int totalCount = 0;
                if (searchParametersList.Count > 0)
                {
                    {
                        SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_InboundOrderDetail.MaterielCode).FirstLetterToLower());
                        if (searchParameters != null)
                        {
                            sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.MaterielCode.Contains(searchParameters.Value)));
                            List<Dt_InboundOrder> dataList = sugarQueryable1.ToPageList(options.Page, options.Rows, ref totalCount);
                            return new PageGridData<Dt_InboundOrder>(totalCount, dataList);
                        }
                    }
                    {
                        SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_InboundOrderDetail.BatchNo).FirstLetterToLower());
                        if (searchParameters != null)
                        {
                            sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.BatchNo.Contains(searchParameters.Value)));
                            List<Dt_InboundOrder> dataList = sugarQueryable1.ToPageList(options.Page, options.Rows, ref totalCount);
                            return new PageGridData<Dt_InboundOrder>(totalCount, dataList);
                        }
                    }
                }
            }
            return pageGridData;
        }
        public override object GetDetailPage(PageDataOptions pageData)
        {
            Type t = typeof(Dt_InboundOrder);
@@ -1813,6 +1849,10 @@
                }
                return palletTypeInfo.PalletType;
            }
            else if (warehouse.WarehouseCode == WarehouseEnum.HA60.ObjToString())
            {
                return 4;
            }
            return -1;
        }
        /// <summary>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ProInStatisticsService.cs
@@ -30,33 +30,29 @@
            _invokeERPService = invokeERPService;
            _basicRepository = basicRepository;
        }
        /// <summary>
        /// ä¿å­˜æ•°æ®
        /// </summary>
        public void SaveStatic(MesBagInfoModel mesBagInfoModel)
        {
            List<ProInStaticDTO> mESBagDetails = mesBagInfoModel.BagDetails.GroupBy(x=>new { x.ProductCode, x.ProductVersion }).Select(x=>new ProInStaticDTO
            List<ProInStaticDTO> mESBagDetails = mesBagInfoModel.BagDetails.GroupBy(x => new { x.ProductCode, x.ProductVersion }).Select(x => new ProInStaticDTO
            {
                ProductCode= x.Key.ProductCode,
                ProductVersion= x.Key.ProductVersion,
                SumPcs=x.Sum(x => x.OKPCSQTY)
                ProductCode = x.Key.ProductCode,
                ProductVersion = x.Key.ProductVersion,
                SumPcs = x.Sum(x => x.OKPCSQTY),
                SumPcsArea = x.Sum(x=>x.OKPCSArea)
            }).ToList();
            List<Dt_ProInStatistics> proInStatistics= new List<Dt_ProInStatistics>();
            Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==mesBagInfoModel.WarehouseCode);
            foreach (var m in mESBagDetails)
            {
                string response = _invokeERPService.InvokeProInErpStatic(m.ProductCode, m.ProductCode + m.ProductVersion);
                ErpProInErpStaticResponseContent erpProInErpStatic = response.DeserializeObject<ErpProInErpStaticResponseContent>();
                if (erpProInErpStatic.Code != 200)
                {
                    return;
                }
                float adjusted = (float)Math.Round(erpProInErpStatic.Data[0].UnitArea, 3);
                Dt_ProInStatistics inStatistics = new Dt_ProInStatistics()
                {
                    WarehouseId = warehouse.WarehouseId,
                    ProductCode = m.ProductCode,
                    ProductRev = m.ProductVersion,
                    PcsQty = m.SumPcs,
                    SquareMeter = (float)Math.Round((adjusted * m.SumPcs), 3),
                    SquareMeter = (float)Math.Round(m.SumPcsArea, 3),
                    Remark = mesBagInfoModel.BatchNo
                };
                proInStatistics.Add(inStatistics);
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/PurchaseOrderService.cs
@@ -1,4 +1,5 @@
using System;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -36,6 +37,42 @@
            _supplierInfoRepository = supplierInfoRepository;
            _materielInfoRepository = materielInfoRepository;
        }
        public override PageGridData<Dt_PurchaseOrder> GetPageData(PageDataOptions options)
        {
            PageGridData<Dt_PurchaseOrder> pageGridData = base.GetPageData(options);
            ISugarQueryable<Dt_PurchaseOrder> sugarQueryable1 = BaseDal.Db.Queryable<Dt_PurchaseOrder>().Includes(x => x.Details);
            if (!string.IsNullOrEmpty(options.Wheres))
            {
                List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
                int totalCount = 0;
                if (searchParametersList.Count > 0)
                {
                    {
                        SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_PurchaseOrderDetail.MaterielCode).FirstLetterToLower());
                        if (searchParameters != null)
                        {
                            sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.MaterielCode.Contains(searchParameters.Value)));
                            List<Dt_PurchaseOrder> dataList = sugarQueryable1.ToPageList(options.Page, options.Rows, ref totalCount);
                            return new PageGridData<Dt_PurchaseOrder>(totalCount, dataList);
                        }
                    }
                    {
                        SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_PurchaseOrderDetail.WarehouseId).FirstLetterToLower());
                        if (searchParameters != null && int.TryParse(searchParameters.Value, out int warehouseId))
                        {
                            sugarQueryable1 = sugarQueryable1.Where(x =>x.Details.Any(v => v.WarehouseId == warehouseId));
                            List<Dt_PurchaseOrder> dataList = sugarQueryable1.ToPageList(options.Page, options.Rows, ref totalCount);
                            return new PageGridData<Dt_PurchaseOrder>(totalCount, dataList);
                        }
                    }
                }
            }
            return pageGridData;
        }
        public WebResponseContent GetPurchaseOrderInfo(string purchaseOrderNo)
        {
            try
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs
@@ -17,6 +17,7 @@
using WIDESEA_DTO;
using WIDESEA_DTO.Basic;
using WIDESEA_DTO.ERP;
using WIDESEA_DTO.Stock;
using WIDESEA_External.ERPService;
using WIDESEA_External.Model;
using WIDESEA_IBasicRepository;
@@ -48,11 +49,46 @@
        public override PageGridData<Dt_ReceiveOrder> GetPageData(PageDataOptions options)
        {
            PageGridData<Dt_ReceiveOrder> pageGridData = base.GetPageData(options);
            //foreach (var item in pageGridData.Rows)
            //{
            //    //获取收货明细
            //    item.PurchaseOrderNo
            //}
            ISugarQueryable<Dt_ReceiveOrder> sugarQueryable1 = BaseDal.Db.Queryable<Dt_ReceiveOrder>().Includes(x => x.Details);
            if (!string.IsNullOrEmpty(options.Wheres))
            {
                List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
                int totalCount = 0;
                if (searchParametersList.Count > 0)
                {
                    {
                        SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_ReceiveOrderDetail.MaterielCode).FirstLetterToLower());
                        if (searchParameters != null)
                        {
                            sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.MaterielCode.Contains(searchParameters.Value)));
                            List<Dt_ReceiveOrder> dataList = sugarQueryable1.ToPageList(options.Page, options.Rows, ref totalCount);
                            return new PageGridData<Dt_ReceiveOrder>(totalCount, dataList);
                        }
                    }
                    {
                        SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_ReceiveOrderDetail.LotNo).FirstLetterToLower());
                        if (searchParameters != null)
                        {
                            sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.LotNo.Contains(searchParameters.Value)));
                            List<Dt_ReceiveOrder> dataList = sugarQueryable1.ToPageList(options.Page, options.Rows, ref totalCount);
                            return new PageGridData<Dt_ReceiveOrder>(totalCount, dataList);
                        }
                    }
                    {
                        SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_ReceiveOrderDetail.PurchaseOrderNo).FirstLetterToLower());
                        if (searchParameters != null)
                        {
                            sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.PurchaseOrderNo.Contains(searchParameters.Value)));
                            List<Dt_ReceiveOrder> dataList = sugarQueryable1.ToPageList(options.Page, options.Rows, ref totalCount);
                            return new PageGridData<Dt_ReceiveOrder>(totalCount, dataList);
                        }
                    }
                }
            }
            return pageGridData;
        }
        public override WebResponseContent AddData(SaveModel saveModel)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderService.cs
@@ -285,39 +285,39 @@
                    _takeStockOrderDetailRepository.UpdateData(takeStockOrderDetail);
                    BaseDal.UpdateData(takeStockOrder);
                    //提交ERP逻辑
                    //if (takeStockOrder.TakeStockStatus== TakeStockStatusEnum.盘点完成.ObjToInt())
                    //{
                    //    ERPTakeStockModel eRPTakeStock = new ERPTakeStockModel()
                    //    {
                    //        Way = 1,
                    //        UniqueTag = takeStockOrder.Id.ToString(),
                    //        Code = takeStockOrder.OrderNo,
                    //        FiscalPeriotime = takeStockOrder.CreateDate.ToString("yyyy-MM-dd"),
                    //        Name=takeStockOrder.OrderNo,
                    //        WarehouseCode= warehouse.WarehouseCode,
                    //        Createuser=takeStockOrder.Creater,
                    //        Createtime= takeStockOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"),
                    //        Details=new List<TakeDetailsItem>()
                    //    };
                    //    foreach (var item in takeStockOrderDetails)
                    //    {
                    //        TakeDetailsItem takeDetailsItem = new TakeDetailsItem()
                    //        {
                    //            MaterialsCode=item.MaterielCode,
                    //            LocationCode=item.LocationCode,
                    //            Lotno=item.BatchNo,
                    //            Sysqty=item.SysQty.ObjToDecimal(),
                    //            Qty=item.Qty.ObjToDecimal()
                    //        };
                    //        eRPTakeStock.Details.Add(takeDetailsItem);
                    //    }
                    //    string response = _invokeERPService.InvokeTakeStockApi(eRPTakeStock);
                    //    ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>();
                    //    if (erpRequestContent.res != 1)
                    //    {
                    //        throw new Exception("同步ERP失败,错误信息:" + erpRequestContent.Data);
                    //    }
                    //}
                    if (takeStockOrder.TakeStockStatus == TakeStockStatusEnum.盘点完成.ObjToInt())
                    {
                        ERPTakeStockModel eRPTakeStock = new ERPTakeStockModel()
                        {
                            Way = 1,
                            UniqueTag = takeStockOrder.Id.ToString(),
                            Code = takeStockOrder.OrderNo,
                            FiscalPeriotime = takeStockOrder.CreateDate.ToString("yyyy-MM-dd"),
                            Name = takeStockOrder.OrderNo,
                            WarehouseCode = warehouse.WarehouseCode,
                            Createuser = takeStockOrder.Creater,
                            Createtime = takeStockOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"),
                            Details = new List<TakeDetailsItem>()
                        };
                        foreach (var item in takeStockOrderDetails)
                        {
                            TakeDetailsItem takeDetailsItem = new TakeDetailsItem()
                            {
                                MaterialsCode = item.MaterielCode,
                                LocationCode = item.LocationCode,
                                Lotno = item.BatchNo,
                                Sysqty = item.SysQty.ObjToDecimal(),
                                Qty = item.Qty.ObjToDecimal()
                            };
                            eRPTakeStock.Details.Add(takeDetailsItem);
                        }
                        string response = _invokeERPService.InvokeTakeStockApi(eRPTakeStock);
                        ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>();
                        if (erpRequestContent.res != 1)
                        {
                            throw new Exception("同步ERP失败,错误信息:" + erpRequestContent.Data);
                        }
                    }
                    _unitOfWorkManage.CommitTran();
                    content.OK("盘点成功");
                }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrder.cs
@@ -95,7 +95,5 @@
        [Navigate(NavigateType.OneToMany, nameof(Dt_ReceiveOrderDetail.ReceiveOrderId), nameof(ReceiveOrderId))]
        public List<Dt_ReceiveOrderDetail> Details { get; set; }
        [SugarColumn(IsIgnore = true)]
        public string? PurchaseOrderNo { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs
@@ -61,6 +61,31 @@
            _outStockLockInfoService = outStockLockInfoService;
            _outboundOrderRepository = outboundOrderRepository;
        }
        public override PageGridData<Dt_OutboundOrder> GetPageData(PageDataOptions options)
        {
            PageGridData<Dt_OutboundOrder> pageGridData = base.GetPageData(options);
            ISugarQueryable<Dt_OutboundOrder> sugarQueryable1 = BaseDal.Db.Queryable<Dt_OutboundOrder>().Includes(x => x.Details);
            if (!string.IsNullOrEmpty(options.Wheres))
            {
                List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
                int totalCount = 0;
                if (searchParametersList.Count > 0)
                {
                    {
                        SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_OutboundOrderDetail.MaterielCode).FirstLetterToLower());
                        if (searchParameters != null)
                        {
                            sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.MaterielCode.Contains(searchParameters.Value)));
                            List<Dt_OutboundOrder> dataList = sugarQueryable1.ToPageList(options.Page, options.Rows, ref totalCount);
                            return new PageGridData<Dt_OutboundOrder>(totalCount, dataList);
                        }
                    }
                }
            }
            return pageGridData;
        }
        public override WebResponseContent AddData(SaveModel saveModel)
        {
            if (saveModel.MainData.TryGetValue(nameof(Dt_OutboundOrder.UpperOrderNo).FirstLetterToLower(), out object? upperOrderNo) && upperOrderNo != null && !string.IsNullOrEmpty(upperOrderNo.ToString()))
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockViewService.cs
@@ -86,6 +86,13 @@
                                    sugarQueryable1 = sugarQueryable1.Where(x => x.proStockInfoDetails.Any(v => v.LotNumber.Contains(searchParameters.Value)));
                                }
                            }
                            {
                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_ProStockInfo.LocationCode).FirstLetterToLower());
                                if (searchParameters != null)
                                {
                                    sugarQueryable1 = sugarQueryable1.Where(x => x.LocationCode == searchParameters.Value);
                                }
                            }
                        }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs
@@ -72,6 +72,13 @@
                                    sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.BatchNo.Contains(searchParameters.Value)));
                                }
                            }
                            {
                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfo.LocationCode).FirstLetterToLower());
                                if (searchParameters != null)
                                {
                                    sugarQueryable1 = sugarQueryable1.Where(x => x.LocationCode == searchParameters.Value);
                                }
                            }
                        }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs
@@ -1289,6 +1289,32 @@
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "proOutOrderTypeEnum":
                        {
                            List<object> data = new List<object>();
                            {
                                Type type = typeof(ProOutOrderTypeEnum);
                                List<int> enums = Enum.GetValues(typeof(ProOutOrderTypeEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(ProOutOrderTypeEnum).GetField(((ProOutOrderTypeEnum)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;
            }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs
@@ -525,6 +525,7 @@
        /// <returns></returns>
        public MesResponseContent SubstrateOut(SubstrateOutModel model)
        {
            MesResponseContent content = new MesResponseContent();
            try
            {
                string line = string.Empty;
@@ -539,15 +540,15 @@
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == line);
                if (warehouse == null)
                {
                    return MesResponseContent.Instance.Error($"仓库基础信息未配置");
                    return content.Error($"仓库基础信息未配置");
                }
                Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == model.MaterialCode);
                if (materielInfo == null)
                {
                    return MesResponseContent.Instance.Error($"未找到该物料信息");
                    return content.Error($"未找到该物料信息");
                }
                //生成MES板料出库单据
                Dt_MesOutboundOrder mesOutboundOrder = new Dt_MesOutboundOrder()
                {
                    CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
@@ -563,7 +564,6 @@
                };
                List<Dt_Task> tasks = new List<Dt_Task>();
                List<Dt_StockInfo>? stockInfos = null;
                List<Dt_OutStockLockInfo>? outStockLockInfos = null;
                List<Dt_LocationInfo>? locationInfos = null;
@@ -606,23 +606,26 @@
                _outboundService.MesOutboundOrderService.Repository.AddData(mesOutboundOrder);
                if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
                {
                    WebResponseContent content = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks);
                    WebResponseContent contentResponse = _outboundService.MesOutboundOrderService.LockOutboundStockDataUpdate(stockInfos, outStockLockInfos, locationInfos, tasks: tasks);
                    if (!content.Status)
                    if (!contentResponse.Status)
                    {
                        _unitOfWorkManage.RollbackTran();
                        return MesResponseContent.Instance.Error(content.Message);
                        return content.Error(contentResponse.Message);
                    }
                }
                _unitOfWorkManage.CommitTran();
                PushTasksToWCS(tasks);
                return MesResponseContent.Instance.OK();
                //将开料分配的库存托盘返回给MES
                content.Content = new
                {
                    VehicleCode = stockInfos?.Select(x => x.PalletCode).ToList()
                };
                return content.OK();
            }
            catch (Exception ex)
            {
                return MesResponseContent.Instance.Error(ex.Message);
                return content.Error(ex.Message);
            }
        }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Completed.cs
@@ -136,5 +136,37 @@
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        public async Task<WebResponseContent> TaskHandCancel(int taskNum,int warehouseId)
        {
            try
            {
                Dt_Task task = await Repository.QueryFirstAsync(x => x.TaskNum == taskNum);
                if (task == null)
                {
                    return await Task.FromResult(WebResponseContent.Instance.Error($"未找到任务信息"));
                }
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    return await Task.FromResult(InboundTaskCompleted(taskNum));
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    return await Task.FromResult(OutboundTaskCompleted(taskNum));
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup)
                {
                    return await Task.FromResult(RelocationTaskCompleted(task));
                }
                else
                {
                    return await Task.FromResult(WebResponseContent.Instance.Error($"未找到该类型任务,任务类型:{task.TaskType}"));
                }
            }
            catch (Exception ex)
            {
                return await Task.FromResult(WebResponseContent.Instance.Error(ex.Message));
            }
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs
@@ -853,7 +853,7 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                //获取测试架原库存信息
                //获取阻焊库存信息
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA154.ToString());
                //获取库存记录
                List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
@@ -872,21 +872,21 @@
                {
                    return content.Error($"托盘类型信息不存在");
                }
                ////获取阻焊批次
                //WebResponseContent requestLotInfo = GetZHMesMaterialLot(materialLot);
                //if (!requestLotInfo.Status)
                //{
                //    return content.Error($"请求阻焊批次信息失败,{requestLotInfo.Message}");
                //}
                //MesLotInfoModel mesLotInfo = JsonConvert.DeserializeObject<MesLotInfoModel>(requestLotInfo.Data.ToString());
                MesLotInfoModel mesLotInfo = new MesLotInfoModel()
                //获取阻焊批次
                WebResponseContent requestLotInfo = GetZHMesMaterialLot(materialLot);
                if (!requestLotInfo.Status)
                {
                    Product="FH001",
                    ProductVersion="A1",
                    Qty=20,
                    LotNo= materialLot,
                    IsFullNumber=true
                };
                    return content.Error($"请求阻焊批次信息失败,{requestLotInfo.Message}");
                }
                MesLotInfoModel mesLotInfo = JsonConvert.DeserializeObject<MesLotInfoModel>(requestLotInfo.Data.ToString());
                //MesLotInfoModel mesLotInfo = new MesLotInfoModel()
                //{
                //    Product="FH001",
                //    ProductVersion="A1",
                //    Qty=20,
                //    LotNo= materialLot,
                //    IsFullNumber=true
                //};
                Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
                {
                    MaterielSpec = mesLotInfo.ProductVersion,
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs
@@ -94,6 +94,15 @@
                            TaskStatus = 0,
                            TaskType = TaskTypeEnum.Relocation.ObjToInt()
                        };
                        string MaterielCode = stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode;
                        float Quantity = (float)stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity);
                        string BatchNo = stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.BatchNo;
                        if (MaterielCode != null && Quantity != null && BatchNo != null)
                        {
                            newTask.MaterielCode = MaterielCode;
                            newTask.Quantity = Quantity;
                            newTask.BatchNo = BatchNo;
                        }
                        if (stockInfo.StockLength>0)
                        {
                            newTask.TaskLength = stockInfo.StockLength;
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs
@@ -197,7 +197,7 @@
            return _taskService.BoxStockin(model.Content);
        }
        /// <summary>
        /// MES成品出库接口调用
        /// MWMS同步成品出库信息至MES
        /// </summary>
        /// <returns></returns>
        [HttpPost, Route("ShipmentOrderSync"), AllowAnonymous]
@@ -206,7 +206,7 @@
            return _taskService.ShipmentOrderSync(model);
        }
        /// <summary>
        /// MES成品出库接口调用
        /// WMS同步成品出库信息至MES外包装机
        /// </summary>
        /// <returns></returns>
        [HttpPost, Route("ShipmentOrderMESSync"), AllowAnonymous]
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -408,5 +408,15 @@
        {
            return Service.TakeOutbound(stockViews);
        }
        /// <summary>
        /// ä»»åŠ¡å–æ¶ˆ
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("TaskHandCancel"), AllowAnonymous]
        public async Task<WebResponseContent> TaskHandCancel(int taskNum ,int warehouseId)
        {
            return await Service.TaskHandCancel(taskNum,warehouseId);
        }
    }
}