wangxinhui
22 小时以前 9ce6731460179c71f0f2c636b2a1598324d5194e
最新代码更新
已修改44个文件
已删除1个文件
已添加15个文件
1432 ■■■■ 文件已修改
项目代码/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/W_CLineCPHDBName.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/原料库/ConveyorLineJob_YLOld.cs 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/原料库/StackerCraneJob_YLSC2.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/原料库/StackerCraneJob_YLSC3.cs 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPH.cs 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/config/buttons.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/public/webconfig.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/src/extension/stock/stockInfo.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/src/views/basic/locationInfo.vue 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/src/views/stock/ProStockView.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/src/views/stock/stockInfo.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_BasicRepository/LocationInfoRepository.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_BasicService/Base/LocationInfoService.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Common/LocationEnum/LocationStatusEnum.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Common/StockEnum/StockStatusMenu.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Core/BaseModels/PageDataOptions.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Core/BaseModels/WebResponseContent.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Core/Const/HtmlElementType.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Core/Helper/UtilConvert.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_DTO/ERP/BSTOutOrderDTO.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_DTO/MES/MESAutoIssueDTO.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_DTO/MES/OutMESOrderDTO.cs 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_External/IMESService/IInvokeMESService.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_External/MESService/InvokeMESService.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_External/Model/ERPBaseModel.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_External/Model/MESDispatchModel.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_External/Model/MESResponse.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundRepository/IOutMESOrderRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IOutboundService/IOutMESOrderService.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_AGVStationInfo.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_LocationInfo.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutMESOrder.cs 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundRepository/OutMESOrderRepository.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutBSTOrderService.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutMESOrderService.cs 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_RecordService/Service/LocationStatusChangeRecordService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_StockService/ProStockViewService.cs 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/MesTaskService.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Reloaction.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Basic/LocationInfoRowController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/MES/MesController.cs 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/OutMESOrderController.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Filter/CustomProfile.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/技术协议/AGV作业流程0911.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/接口协议/博思通利拓接口.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/接口协议/龙利得MES接口.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/通信协议/原料库输送线通讯协议.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/项目图纸/龙利得纸卷库——纸卷库货架——总图——2025-05-20现场更改端部网架出图.dwg 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs
@@ -112,6 +112,12 @@
        PaperYLBackInbound = 730,
        /// <summary>
        /// åŽŸæ–™è€åŽ‚é€€åº“
        /// </summary>
        [Description("原料老厂退库")]
        PaperOldYLBackInbound = 740,
        /// <summary>
        /// å··é“内移库
        /// </summary>
        [Description("巷道内移库")]
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs
@@ -54,6 +54,10 @@
            AgvResponse agvResponse = new AgvResponse();
            try
            {
                if (secureApplyModel.ReceiveTaskID=="100")
                {
                    return agvResponse.OK("成功", "0");
                }
                var task = _taskRepository.QueryFirst(x => secureApplyModel.ReceiveTaskID.ObjToInt() == x.TaskNum);
                if (task == null) throw new Exception("未找到任务");
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -320,6 +320,10 @@
                        content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
                    }
                }
                else
                {
                    content = responseContent ?? content.Error("结果错误");
                }
            }
            catch (Exception ex)
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/W_CLineCPHDBName.cs
@@ -20,10 +20,23 @@
        /// </summary>
        W_Channel,
        /// <summary>
        /// é•¿
        /// </summary>
        W_Long,
        /// <summary>
        /// å®½
        /// </summary>
        W_Wide,
        /// <summary>
        /// é«˜
        /// </summary>
        W_High,
        /// <summary>
        /// è¯·æ±‚确认<br/>
        /// 1:任务下发<br/>
        /// 2:清除确认<br/>
        /// </summary>
        W_Request
        W_Request,
        W_TMID,
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/Ô­ÁÏ¿â/ConveyorLineJob_YLOld.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,102 @@
using Microsoft.AspNetCore.Components.Routing;
using Newtonsoft.Json;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class ConveyorLineJob_YLOld : JobBase, IJob
    {
        private readonly ICacheService _cacheService;
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly ITaskRepository _taskRepository;
        private readonly IStationMangerRepository _stationMangerRepository;
        private readonly IRouterRepository _routerRepository;
        private readonly IRouterService _routerService;
        private readonly IRouterExtension _routerExtension;
        private readonly List<Dt_WarehouseDevice> warehouseDevices;
        public ConveyorLineJob_YLOld(ICacheService cacheService, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IRouterService routerService, IRouterExtension routerExtension)
        {
            _cacheService = cacheService;
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _taskRepository = taskRepository;
            _stationMangerRepository = stationMangerRepository;
            _routerRepository = routerRepository;
            _routerService = routerService;
            _routerExtension = routerExtension;
            string? warehouseDevicesStr = _cacheService.Get<string>(nameof(Dt_WarehouseDevice));
            if (!string.IsNullOrEmpty(warehouseDevicesStr))
            {
                warehouseDevices = JsonConvert.DeserializeObject<List<Dt_WarehouseDevice>>(warehouseDevicesStr) ?? new List<Dt_WarehouseDevice>();
            }
            else
            {
                warehouseDevices = new List<Dt_WarehouseDevice>();
            }
        }
        public Task Execute(IJobExecutionContext context)
        {
            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
            if (flag && value != null)
            {
                OtherDevice device = (OtherDevice)value;
                //获取所有协议的输送线站台
                List<string> deviceStations = device.DeviceProDTOs.Select(x => x.DeviceChildCode).ToList();
                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
                foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode)))
                {
                    DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(WR_CLineYLDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                    if (deviceProRead != null)
                    {
                        R_ConveyorLineYLInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineYLInfo>(deviceProRead.DeviceProAddress);
                        if (conveyorLineInfoRead != null && item.StationType == StationTypeEnum.StationType_InStartAndOutEnd.ObjToInt() && conveyorLineInfoRead.WR_ToHode <= 0 && conveyorLineInfoRead.WR_Request == 86 && !string.IsNullOrEmpty(conveyorLineInfoRead.WR_TMID)) //老厂申请入库
                        {
                            WebResponseContent content = _taskService.YLPurchaseBoxing(conveyorLineInfoRead.WR_TMID);
                            if (content.Status)
                            {
                                device.SetValue(WR_CLineYLDB.WR_Reresult, 86, item.StationCode);
                                WriteInfo(item.StationCode, $"请求退料条码:{conveyorLineInfoRead.WR_TMID}");
                            }
                            else
                            {
                                WriteError(item.StationCode, $"请求退料失败:{content.Message}");
                            }
                        }
                    }
                    else
                    {
                        WriteError(item.StationName, $"未找到设备子编号{item.StationCode}的协议信息");
                    }
                }
            }
            return Task.CompletedTask;
        }
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/Ô­ÁÏ¿â/StackerCraneJob_YLSC2.cs
@@ -253,6 +253,11 @@
                        _taskRepository.UpdateData(task);
                        return task;
                    }
                    else
                    {
                        task.ExceptionMessage = "出库站台无法下发";
                        _taskRepository.UpdateData(task);
                    }
                }
                else
                {
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/Ô­ÁÏ¿â/StackerCraneJob_YLSC3.cs
@@ -282,6 +282,11 @@
                            _taskRepository.UpdateData(task);
                            return task;
                        }
                        else
                        {
                            task.ExceptionMessage = "出库站台无法下发";
                            _taskRepository.UpdateData(task);
                        }
                    }
                    else
                    {
@@ -300,6 +305,11 @@
                            task.NextAddress = stationManger.StackerCraneStationCode;
                            _taskRepository.UpdateData(task);
                            return task;
                        }
                        else
                        {
                            task.ExceptionMessage = "出库站台无法下发";
                            _taskRepository.UpdateData(task);
                        }
                    }
                    else
@@ -327,9 +337,9 @@
        {
            YLStackerCraneTaskCommand stackerCraneTaskCommand = new YLStackerCraneTaskCommand();
            stackerCraneTaskCommand.PalletType = Convert.ToInt16(task.PalletType);
            stackerCraneTaskCommand.TaskNum = task.TaskNum;
            stackerCraneTaskCommand.WorkType = 5;
            stackerCraneTaskCommand.PalletType = Convert.ToInt16(task.PalletType);
            if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//判断是否是入库任务
            {
@@ -364,9 +374,9 @@
                string[] targetCodes = task.NextAddress.Split("-");
                if (targetCodes.Length == 3)
                {
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]);
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]);
                    stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]);
                    stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]);
                    stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]);
                }
                else
                {
@@ -377,9 +387,9 @@
                string[] sourceCodes = task.CurrentAddress.Split("-");
                if (sourceCodes.Length == 5)
                {
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]);
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]);
                    stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[1]);
                    stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[2]);
                    stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[3]);
                }
                else
                {
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/³ÉÆ·²Ö/ConveyorLineJob_CPH.cs
@@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Components.Routing;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
using Org.BouncyCastle.Tls;
using Quartz;
using SqlSugar.Extensions;
using System;
@@ -39,6 +40,7 @@
        private readonly IRouterService _routerService;
        private readonly IRouterExtension _routerExtension;
        private readonly List<Dt_WarehouseDevice> warehouseDevices;
        private static object lockObj = 0;//
        public ConveyorLineJob_CPH(ICacheService cacheService, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IRouterService routerService, IRouterExtension routerExtension)
        {
@@ -64,53 +66,87 @@
        public Task Execute(IJobExecutionContext context)
        {
            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
            if (flag && value != null)
            lock (lockObj)
            {
                //获取当前设备
                OtherDevice device = (OtherDevice)value;
                List<string> deviceStations = device.DeviceProDTOs.Select(x => x.DeviceChildCode).Distinct().ToList();
                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
                foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode)))
                if (lockObj.ToString()=="0")
                {
                    DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_CLineCPHDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                    DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(W_CLineCPHDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                    if (item.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt() && deviceProRead != null && deviceProWrite != null)
                    lockObj = 1;
                    Task task = Task.Run(() =>
                    {
                        R_CLineCPHInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_CLineCPHInfo>(deviceProRead.DeviceProAddress);
                        //码垛环线请求任务
                        if (conveyorLineInfoRead != null && (conveyorLineInfoRead.R_State == 2 || conveyorLineInfoRead.R_State == 3) && conveyorLineInfoRead.R_TaskNo <= 0 && !string.IsNullOrEmpty(conveyorLineInfoRead.R_BoxCode) && conveyorLineInfoRead.R_Request==1)
                        try
                        {
                            //WebResponseContent content = _taskService.RequestWMSTaskSimple(conveyorLineInfoRead.R_BoxCode, item.StationCode);
                            ////向WMS请求任务
                            //if (true)
                            //{
                            //}
                        }
                    }
                    else if(item.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt() && deviceProRead != null)
                    {
                        R_CLineCPHInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_CLineCPHInfo>(deviceProRead.DeviceProAddress);
                        //获取码垛口任务更新任务状态
                        if (conveyorLineInfoRead != null && (conveyorLineInfoRead.R_State == 2 || conveyorLineInfoRead.R_State == 3) && conveyorLineInfoRead.R_TaskNo > 0)
                        {
                            Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.R_TaskNo && x.NextAddress==item.StationCode && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt());
                            if (task != null)
                            while (true)
                            {
                                task.CurrentAddress = item.StationCode;
                                task.NextAddress = task.TargetAddress;
                                task.DeviceCode = item.StackerCraneCode;
                                _taskService.UpdateTask(task, TaskStatusEnum.MD_Executing);
                                bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
                                if (flag && value != null)
                                {
                                    //获取当前设备
                                    OtherDevice device = (OtherDevice)value;
                                    List<string> deviceStations = device.DeviceProDTOs.Select(x => x.DeviceChildCode).Distinct().ToList();
                                    List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
                                    foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode)))
                                    {
                                        DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_CLineCPHDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                                        DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(W_CLineCPHDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                                        if (item.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt() && deviceProRead != null && deviceProWrite != null)
                                        {
                                            R_CLineCPHInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_CLineCPHInfo>(deviceProRead.DeviceProAddress);
                                            //码垛环线请求任务
                                            if (conveyorLineInfoRead != null && (conveyorLineInfoRead.R_State == 2 || conveyorLineInfoRead.R_State == 3) && conveyorLineInfoRead.R_TaskNo <= 0 && !string.IsNullOrEmpty(conveyorLineInfoRead.R_BoxCode) && conveyorLineInfoRead.R_Request == 1)
                                            {
                                                //WebResponseContent content = _taskService.RequestWMSTaskSimple(conveyorLineInfoRead.R_BoxCode, item.StationCode);
                                                ////向WMS请求任务
                                                //if (true)
                                                //{
                                                //}
                                                //写入执行数据
                                                device.SetValue(W_CLineCPHDB.W_TaskNo, 1002, item.StationCode);
                                                device.SetValue(W_CLineCPHDB.W_Channel, 5, item.StationCode);
                                                device.SetValue(W_CLineCPHDB.W_Long, 400, item.StationCode);
                                                device.SetValue(W_CLineCPHDB.W_Wide, 370, item.StationCode);
                                                device.SetValue(W_CLineCPHDB.W_High, 300, item.StationCode);
                                                device.SetValue(W_CLineCPHDB.W_TMID, conveyorLineInfoRead.R_BoxCode, item.StationCode);
                                                device.SetValue(W_CLineCPHDB.W_Request, 1, item.StationCode);
                                            }
                                        }
                                        else if (item.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt() && deviceProRead != null)
                                        {
                                            R_CLineCPHInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_CLineCPHInfo>(deviceProRead.DeviceProAddress);
                                            //获取码垛口任务更新任务状态
                                            if (conveyorLineInfoRead != null && (conveyorLineInfoRead.R_State == 2 || conveyorLineInfoRead.R_State == 3) && conveyorLineInfoRead.R_TaskNo > 0)
                                            {
                                                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.R_TaskNo && x.NextAddress == item.StationCode && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt());
                                                if (task != null)
                                                {
                                                    task.CurrentAddress = item.StationCode;
                                                    task.NextAddress = task.TargetAddress;
                                                    task.DeviceCode = item.StackerCraneCode;
                                                    _taskService.UpdateTask(task, TaskStatusEnum.MD_Executing);
                                                }
                                            }
                                        }
                                        else
                                        {
                                            WriteError(item.StationName, $"未找到设备子编号{item.StationCode}的协议信息");
                                        }
                                    }
                                }
                                Thread.Sleep(100);
                            }
                        }
                    }
                    else
                    {
                        WriteError(item.StationName, $"未找到设备子编号{item.StationCode}的协议信息");
                    }
                        catch (Exception ex)
                        {
                            lockObj = 0;
                            WriteError(nameof(ConveyorLineJob_CPH), $"错误信息:{ex.Message}");
                        }
                    });
                }
            }
            return Task.CompletedTask;
        }
ÏîÄ¿´úÂë/WMS/WMSClient/config/buttons.js
@@ -174,7 +174,7 @@
    }
},
{
    name: "指 å®š åº“ å­˜ å‡º åº“",
    name: "指 å®š è€ åŽ‚ åº“ å­˜ å‡º åº“",
    icon: '',
    class: '',
    value: 'StockOutbound',
ÏîÄ¿´úÂë/WMS/WMSClient/public/webconfig.js
@@ -1,4 +1,5 @@
window.webConfig = {
    // "webApiBaseUrl": "http://192.168.35.3:9283/",
    "webApiBaseUrl": "http://127.0.0.1:9293/",
    "webApiProduction":"http://192.168.35.3:9283/"
}
ÏîÄ¿´úÂë/WMS/WMSClient/src/extension/stock/stockInfo.js
@@ -17,7 +17,30 @@
    methods: {
       //下面这些方法可以保留也可以删除
      onInit() {  
        //指定出库
        let OutOrder = this.buttons.find(x => x.value == 'StockOutbound');
        if (OutOrder) {
          OutOrder.onClick = function () {
            let rows = this.$refs.table.getSelected();
            if (rows.length == 0) return this.$error("请选择数据!");
            this.$confirm("确认要选择的数据出库嘛吗?", "警告", {
              confirmButtonText: "确定",
              cancelButtonText: "取消",
              type: "warning",
              center: true,
            }).then(() => {
              var keys = rows.map((x) => x.id);
              this.http
                .post("api/Task/OldYLOutbound?", keys, "数据处理中")
                .then((x) => {
                  if (!x.status) return this.$message.error(x.message);
                  this.$message.success("操作成功");
                  this.refresh();
                });
            });
          }
        }
      },
      onInited() {
        //框架初始化配置后
ÏîÄ¿´úÂë/WMS/WMSClient/src/views/basic/locationInfo.vue
@@ -41,20 +41,20 @@
      enableStatus: "",
      locationStatus: "",
      row: "",
      column: "",
      columns: "",
      layer: "",
    });
    const searchFormOptions = ref([
      [
        { title: "货位编号", field: "locationCode", type: "like" },
        { title: "巷道编号", field: "roadwayNo",type:"like" },
        { title: "巷道编号", field: "roadwayNo",type: "select",dataKey: "Roadways" },
        { title: "货位类型", field: "locationType",type: "select",dataKey: "locationTypeEnum",data: [], },
        { title: "禁用状态", field: "enableStatus" ,type: "select",dataKey: "enableStatusEnum",data: [],},
      ],
      [
        { title: "货位状态", field: "locationStatus" ,type: "selectList",dataKey: "locationStatusEnum",data: [],},
        { title: "行", field: "row" ,type: "int"},
        { title: "列", field: "column" ,type: "int"},
        { title: "列", field: "columns" ,type: "int"},
        { title: "层", field: "layer" ,type: "int"}
      ],
    ]);
@@ -81,21 +81,21 @@
        field: "locationCode",
        title: "货位编号",
        type: "string",
        width: 200,
        width: 240,
        align: "left",
      },
      {
        field: "locationName",
        title: "货位名称",
        type: "string",
        width: 280,
        width: 300,
        align: "left",
      },
      {
        field: "roadwayNo",
        title: "巷道编号",
        type: "decimal",
        width: 100,
        width: 110,
        align: "left",
      },
      {
@@ -104,23 +104,20 @@
        type: "string",
        width: 90,
        align: "left",
        hidden: true,
      },
      {
        field: "column",
        field: "columns",
        title: "货位列",
        type: "int",
        width: 120,
        type: "string",
        width: 90,
        align: "left",
        hidden: true,
      },
      {
        field: "layer",
        title: "货位层",
        type: "string",
        width: 200,
        width: 90,
        align: "left",
        hidden: true,
      },
      {
        field: "depth",
@@ -177,6 +174,7 @@
        type: "string",
        width: 100,
        align: "left",
        hidden: true
      },
      {
        field: "modifyDate",
@@ -185,6 +183,7 @@
        width: 160,
        align: "left",
        sort: true,
        hidden: true
      },
      {
        field: "remark",
ÏîÄ¿´úÂë/WMS/WMSClient/src/views/stock/ProStockView.vue
@@ -47,6 +47,10 @@
          { title: "货位状态", field: "locationStatus" ,type: "selectList",dataKey: "locationStatusEnum",data: [],},
          { title: "库存状态", field: "stockStatus",type: "selectList",dataKey: "stockStatusEmun",data: [],},
        ],
        [
          { title: "所属仓库", field: "warehouseId",type: "select",dataKey: "warehouses",data: []},
          { title: "库存属性", field: "proStockAttribute" ,type: "selectList",dataKey: "proStockAttributeEnum",data: [],},
        ],
      ]);
      const columns = ref([
        {
ÏîÄ¿´úÂë/WMS/WMSClient/src/views/stock/stockInfo.vue
@@ -45,6 +45,8 @@
      const searchFormFields = ref({
        palletCode: "",
        locationCode: "",
        materielCode: "",
        materielWide: "",
      });
      const searchFormOptions = ref([
        [
@@ -53,6 +55,11 @@
          {title: "库存组织", field:"materielInvOrgId",type:"select",dataKey:"materielInvOrgEnum",data:[]},
          {title: "物料编号", field:"materielCode",type:"like"},
        ],
        [
          {title: "物料幅宽", field:"materielWide",type:"int"},
          {title: "库存状态", field:"stockStatus",type:"select",dataKey:"stockStatusEmun",data:[]},
          { title: "创建时间", field: "createDate", type: "datetime" },
        ],
      ]);
      const columns = ref([
        {
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_BasicRepository/LocationInfoRepository.cs
@@ -31,7 +31,7 @@
        /// <returns></returns>
        public List<LocationGroupDTO> GetAllLocationGroups(string roadway)
        {
            return QueryTabs<Dt_LocationInfo, Dt_LocationInfo, LocationGroupDTO>((a, b) => a.Column == b.Column && a.Layer == b.Layer && a.Row != b.Row && SqlFunc.Abs(a.Row - b.Row) == 1, (a, b) => new LocationGroupDTO { DepthA = a.Depth, DepthB = b.Depth, EnableStatusA = a.EnableStatus, EnableStatusB = b.EnableStatus, IdA = a.Id, IdB = b.Id, LocationCodeA = a.LocationCode, LocationCodeB = b.LocationCode, LocationStatusA = a.LocationStatus, LocationStatusB = b.LocationStatus, LocationTypeA = a.LocationType, LocationTypeB = b.LocationType }, a => a.Depth == 1 && a.RoadwayNo == roadway, b => b.Depth == 2 && b.RoadwayNo == roadway, x => true);
            return QueryTabs<Dt_LocationInfo, Dt_LocationInfo, LocationGroupDTO>((a, b) => a.Columns == b.Columns && a.Layer == b.Layer && a.Row != b.Row && SqlFunc.Abs(a.Row - b.Row) == 1, (a, b) => new LocationGroupDTO { DepthA = a.Depth, DepthB = b.Depth, EnableStatusA = a.EnableStatus, EnableStatusB = b.EnableStatus, IdA = a.Id, IdB = b.Id, LocationCodeA = a.LocationCode, LocationCodeB = b.LocationCode, LocationStatusA = a.LocationStatus, LocationStatusB = b.LocationStatus, LocationTypeA = a.LocationType, LocationTypeB = b.LocationType }, a => a.Depth == 1 && a.RoadwayNo == roadway, b => b.Depth == 2 && b.RoadwayNo == roadway, x => true);
        }
        /// <summary>
@@ -44,7 +44,7 @@
        public List<LocationGroupDTO> GetLocationGroups(string roadway, LocationStatusEnum locationAStatus, LocationStatusEnum locationBStatus)
        {
            return QueryTabs<Dt_LocationInfo, Dt_LocationInfo, LocationGroupDTO>(
                (a, b) => a.Column == b.Column && a.Layer == b.Layer && a.Row != b.Row && SqlFunc.Abs(a.Row - b.Row) == 1,
                (a, b) => a.Columns == b.Columns && a.Layer == b.Layer && a.Row != b.Row && SqlFunc.Abs(a.Row - b.Row) == 1,
                (a, b) => new LocationGroupDTO { DepthA = a.Depth, DepthB = b.Depth, EnableStatusA = a.EnableStatus, EnableStatusB = b.EnableStatus, IdA = a.Id, IdB = b.Id, LocationCodeA = a.LocationCode, LocationCodeB = b.LocationCode, LocationStatusA = a.LocationStatus, LocationStatusB = b.LocationStatus, LocationTypeA = a.LocationType, LocationTypeB = b.LocationType },
                a => a.Depth == 1 && a.RoadwayNo == roadway && a.LocationStatus == locationAStatus.ObjToInt(),
                b => b.Depth == 2 && b.RoadwayNo == roadway && b.LocationStatus == locationBStatus.ObjToInt(),
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_BasicService/Base/LocationInfoService.cs
@@ -133,7 +133,7 @@
                            Dt_LocationInfo locationInfo = new Dt_LocationInfo()
                            {
                                WarehouseId = 0,
                                Column = j + 1,
                                Columns = j + 1,
                                EnableStatus = EnableStatusEnum.Normal.ObjToInt(),
                                Layer = k + 1,
                                LocationStatus = LocationStatusEnum.Free.ObjToInt(),
@@ -142,8 +142,8 @@
                                Row = i + 1,
                                Depth = depth,
                            };
                            locationInfo.LocationCode = $"{locationInfo.RoadwayNo}-{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Column.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(3, '0')}-{locationInfo.Depth.ToString().PadLeft(2, '0')}";
                            locationInfo.LocationName = $"{locationInfo.RoadwayNo}巷道{locationInfo.Row.ToString().PadLeft(3, '0')}行{locationInfo.Column.ToString().PadLeft(3, '0')}列{locationInfo.Layer.ToString().PadLeft(3, '0')}层{locationInfo.Depth.ToString().PadLeft(2, '0')}æ·±";
                            locationInfo.LocationCode = $"{locationInfo.RoadwayNo}-{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Columns.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(3, '0')}-{locationInfo.Depth.ToString().PadLeft(2, '0')}";
                            locationInfo.LocationName = $"{locationInfo.RoadwayNo}巷道{locationInfo.Row.ToString().PadLeft(3, '0')}行{locationInfo.Columns.ToString().PadLeft(3, '0')}列{locationInfo.Layer.ToString().PadLeft(3, '0')}层{locationInfo.Depth.ToString().PadLeft(2, '0')}æ·±";
                            locationInfos.Add(locationInfo);
                        }
                    }
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService.cs
@@ -60,13 +60,13 @@
                List<Dt_LocationInfo> definedTypeLocations = locationInfos.Where(x => x.LocationType == palletType.ObjToInt()).ToList();
                //未定义类型的空货位
                List<Dt_LocationInfo> undefinedTypeEmptyLocations = locationInfos.Where(x => (x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() || x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode)).OrderByDescending(x => x.Depth).ThenBy(x => x.Layer).ThenBy(x => x.Row).ThenBy(x => x.Column).ToList();
                List<Dt_LocationInfo> undefinedTypeEmptyLocations = locationInfos.Where(x => (x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() || x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.LocationType == LocationTypeEnum.Undefined.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode)).OrderByDescending(x => x.Depth).ThenBy(x => x.Layer).ThenBy(x => x.Row).ThenBy(x => x.Columns).ToList();
                if (locationInfos.Count * weightValue >= definedTypeLocations.Count && undefinedTypeEmptyLocations.Count > 0)//如果已定义类型货位未超过比例,且有未定义类型的货位
                {
                    if (palletType == PalletTypeEnum.LargePallet)
                    {
                        undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Column % 2 == 1).ToList();
                        undefinedTypeEmptyLocations = undefinedTypeEmptyLocations.Where(x => x.Columns % 2 == 1).ToList();
                    }
                    for (int i = 0; i < undefinedTypeEmptyLocations.Count; i++)
                    {
@@ -82,7 +82,7 @@
                }
                else
                {
                    List<Dt_LocationInfo> definedTypeEmptyLocations = locationInfos.Where(x => (x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() || x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.LocationType == palletType.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode)).OrderByDescending(x => x.Depth).ThenBy(x => x.Layer).ThenBy(x => x.Row).ThenBy(x => x.Column).ToList();
                    List<Dt_LocationInfo> definedTypeEmptyLocations = locationInfos.Where(x => (x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() || x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.LocationType == palletType.ObjToInt() && !lockLocationCodes.Contains(x.LocationCode)).OrderByDescending(x => x.Depth).ThenBy(x => x.Layer).ThenBy(x => x.Row).ThenBy(x => x.Columns).ToList();
                    for (int i = 0; i < definedTypeEmptyLocations.Count; i++)
                    {
@@ -106,7 +106,7 @@
            {
                case PalletTypeEnum.LargePallet:
                    {
                        Dt_LocationInfo? nearLocation = locationInfos.FirstOrDefault(x => x.Row == undefinedTypeEmptyLocation.Row && x.Layer == undefinedTypeEmptyLocation.Layer && x.Depth == undefinedTypeEmptyLocation.Depth && x.Column == undefinedTypeEmptyLocation.Column + 1);
                        Dt_LocationInfo? nearLocation = locationInfos.FirstOrDefault(x => x.Row == undefinedTypeEmptyLocation.Row && x.Layer == undefinedTypeEmptyLocation.Layer && x.Depth == undefinedTypeEmptyLocation.Depth && x.Columns == undefinedTypeEmptyLocation.Columns + 1);
                        if (nearLocation != null && nearLocation.LocationStatus == LocationStatusEnum.Free.ObjToInt() && DepthLocationIsEmpty(locationInfos, undefinedTypeEmptyLocation) != null)
                        {
                            Dt_LocationInfo? locationInfo = DepthLocationIsEmpty(locationInfos, undefinedTypeEmptyLocation);
@@ -175,7 +175,7 @@
                    locations[i].LocationType = palletType.ObjToInt();
                }
                Dt_LocationInfo? nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1);
                Dt_LocationInfo? nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Columns == location.Columns + 1);
                if (nearLocation != null)
                {
                    List<Dt_LocationInfo> nearLocations = GetGroupLocations(locationInfos, nearLocation);
@@ -220,7 +220,7 @@
                    locations[i].LocationType = palletType.ObjToInt();
                }
                Dt_LocationInfo? nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1);
                Dt_LocationInfo? nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Columns == location.Columns + 1);
                if (nearLocation != null)
                {
                    List<Dt_LocationInfo> nearLocations = GetGroupLocations(locationInfos, nearLocation);
@@ -252,7 +252,7 @@
            int maxDepth = locationInfos.Max(x => x.Depth);
            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);
                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Columns == location.Columns && x.Layer == location.Layer);
                if (locationInfo != null)
                {
                    groupLocations.Add(locationInfo);
@@ -261,7 +261,7 @@
            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);
                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Columns == location.Columns && x.Layer == location.Layer);
                if (locationInfo != null)
                {
                    groupLocations.Add(locationInfo);
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs
@@ -76,7 +76,7 @@
                Dictionary<string, OrderByType> orderBy = new Dictionary<string, OrderByType>()
                {
                    { nameof(Dt_LocationInfo.Column),OrderByType.Desc },
                    { nameof(Dt_LocationInfo.Columns),OrderByType.Desc },
                    { nameof(Dt_LocationInfo.Layer),OrderByType.Asc },
                    { nameof(Dt_LocationInfo.Depth),OrderByType.Desc },
                    { nameof(Dt_LocationInfo.Row),OrderByType.Asc }
@@ -106,7 +106,7 @@
                
                Dictionary<string, OrderByType> orderBy = new Dictionary<string, OrderByType>()
                {
                    { nameof(Dt_LocationInfo.Column),OrderByType.Desc },
                    { nameof(Dt_LocationInfo.Columns),OrderByType.Desc },
                    { nameof(Dt_LocationInfo.Layer),OrderByType.Asc },
                    { nameof(Dt_LocationInfo.Depth),OrderByType.Desc },
                    { nameof(Dt_LocationInfo.Row),OrderByType.Asc }
@@ -128,8 +128,8 @@
                            Dt_LocationInfo? nearLocation1;
                            Dt_LocationInfo? nearLocation2;
                            nearLocation1 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.Row == item.Row && x.Layer == item.Layer && x.Depth == item.Depth && x.Column == item.Column - 1);
                            nearLocation2 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.Row == item.Row && x.Layer == item.Layer && x.Depth == item.Depth && x.Column == item.Column + 1);
                            nearLocation1 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.Row == item.Row && x.Layer == item.Layer && x.Depth == item.Depth && x.Columns == item.Columns - 1);
                            nearLocation2 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.Row == item.Row && x.Layer == item.Layer && x.Depth == item.Depth && x.Columns == item.Columns + 1);
                            if (nearLocation1!=null && nearLocation2!=null)
                            {
                                locationInfo = item;
@@ -162,159 +162,6 @@
            UpdateLocationStatus(location, palletType, locationStatus, warehousId);
        }
        /// <summary>
        /// ä¿®æ”¹è´§ä½çŠ¶æ€åŠç±»åž‹
        /// </summary>
        /// <param name="location">货位对象</param>
        /// <param name="palletType">托盘类型</param>
        /// <param name="locationStatus">货位状态</param>
        //public void UpdateLocationStatus2(Dt_LocationInfo location, int palletType, LocationStatusEnum locationStatus, int warehousId)
        //{
        //    List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => x.RoadwayNo == location.RoadwayNo);
        //    List<Dt_LocationInfo> locations = GetGroupLocations(locationInfos, location);
        //    if (locationInfos.Max(x => x.Depth) < 3)
        //    {
        //        for (int i = 0; i < locations.Count; i++)
        //        {
        //            if (locations[i].LocationType != palletType.ObjToInt())
        //            {
        //                locations[i].LocationType = palletType.ObjToInt();
        //            }
        //            if (locations[i].LocationCode == location.LocationCode)
        //            {
        //                locations[i].LocationStatus = locationStatus.ObjToInt();
        //            }
        //            else
        //            {
        //                if (locationStatus == LocationStatusEnum.Lock)
        //                {
        //                    if (locations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt())
        //                    {
        //                        locations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt();
        //                    }
        //                    else if (locations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt())
        //                    {
        //                        locations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt();
        //                    }
        //                }
        //                else if (locationStatus == LocationStatusEnum.Free || locationStatus == LocationStatusEnum.InStock)
        //                {
        //                    if (locations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt())
        //                    {
        //                        locations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt();
        //                    }
        //                    else if (locations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt())
        //                    {
        //                        locations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt();
        //                    }
        //                }
        //            }
        //        }
        //        Dt_LocationInfo? nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1);
        //        if(location.RoadwayNo == "SC01_BC")
        //        {
        //            nearLocation = locationInfos.FirstOrDefault(x => x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1);
        //        }
        //        if (nearLocation != null)
        //        {
        //            List<Dt_LocationInfo> nearLocations = GetGroupLocations(locationInfos, nearLocation);
        //            for (int i = 0; i < nearLocations.Count; i++)
        //            {
        //                if (nearLocations[i].LocationType != palletType.ObjToInt())
        //                {
        //                    nearLocations[i].LocationType = palletType.ObjToInt();
        //                }
        //                if (palletType.ObjToInt() >= PalletTypeEnum.LargePallet.ObjToInt())
        //                {
        //                    if (nearLocations[i].LocationCode == nearLocation.LocationCode)
        //                    {
        //                        nearLocations[i].LocationStatus = locationStatus.ObjToInt();
        //                    }
        //                    else
        //                    {
        //                        if (locationStatus == LocationStatusEnum.Lock)
        //                        {
        //                            if (nearLocations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt())
        //                            {
        //                                nearLocations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt();
        //                            }
        //                            else if (nearLocations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt())
        //                            {
        //                                nearLocations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt();
        //                            }
        //                        }
        //                        else if (locationStatus == LocationStatusEnum.InStock)
        //                        {
        //                            if (nearLocations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt())
        //                            {
        //                                nearLocations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt();
        //                            }
        //                            else if (nearLocations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt())
        //                            {
        //                                nearLocations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt();
        //                            }
        //                        }
        //                    }
        //                }
        //            }
        //            locations.AddRange(nearLocations);
        //        }
        //    }
        //    else
        //    {
        //        for (int i = 0; i < locations.Count; i++)
        //        {
        //            if (locations[i].LocationCode == location.LocationCode)
        //            {
        //                locations[i].LocationStatus = locationStatus.ObjToInt();
        //            }
        //            else
        //            {
        //                if (locationStatus == LocationStatusEnum.Lock)
        //                {
        //                    if (locations[i].LocationStatus == LocationStatusEnum.InStock.ObjToInt())
        //                    {
        //                        locations[i].LocationStatus = LocationStatusEnum.InStockLock.ObjToInt();
        //                    }
        //                    else if (locations[i].LocationStatus == LocationStatusEnum.Free.ObjToInt())
        //                    {
        //                        locations[i].LocationStatus = LocationStatusEnum.FreeLock.ObjToInt();
        //                    }
        //                }
        //                else if (locationStatus == LocationStatusEnum.Free || locationStatus == LocationStatusEnum.InStock)
        //                {
        //                    if (locations[i].LocationStatus == LocationStatusEnum.InStockLock.ObjToInt())
        //                    {
        //                        locations[i].LocationStatus = LocationStatusEnum.InStock.ObjToInt();
        //                    }
        //                    else if (locations[i].LocationStatus == LocationStatusEnum.FreeLock.ObjToInt())
        //                    {
        //                        locations[i].LocationStatus = LocationStatusEnum.Free.ObjToInt();
        //                    }
        //                }
        //            }
        //            if (locations[i].LocationType != palletType.ObjToInt())
        //            {
        //                locations[i].LocationType = palletType.ObjToInt();
        //            }
        //        }
        //    }
        //    if (locations.Where(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt()).Count() == locations.Count && locationStatus == LocationStatusEnum.Free)
        //    {
        //        locations.ForEach(x =>
        //        {
        //            x.LocationType = 0;
        //        });
        //    }
        //    Repository.UpdateData(locations);
        //}
        public void UpdateLocationStatus(Dt_LocationInfo location, int palletType, LocationStatusEnum locationStatus, int warehouseId)
        {
@@ -378,8 +225,8 @@
                    Dt_LocationInfo? nearLocation1;
                    Dt_LocationInfo? nearLocation2;
                    nearLocation1 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column - 1);
                    nearLocation2 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Column == location.Column + 1);
                    nearLocation1 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Columns == location.Columns - 1);
                    nearLocation2 = locationInfos.FirstOrDefault(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.Row == location.Row && x.Layer == location.Layer && x.Depth == location.Depth && x.Columns == location.Columns + 1);
                    if (nearLocation1 != null && nearLocation2 != null)
@@ -467,7 +314,7 @@
            for (int j = location.Depth + 1; j <= maxDepth; j++)
            {
                row += 1;
                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row);
                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Columns == location.Columns && x.Layer == location.Layer && x.Row == row);
                if (locationInfo != null)
                {
                    groupLocations.Add(locationInfo);
@@ -477,7 +324,7 @@
            for (int j = location.Depth - 1; j >= 1; j--)
            {
                row -= 1;
                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Column == location.Column && x.Layer == location.Layer && x.Row == row);
                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Columns == location.Columns && x.Layer == location.Layer && x.Row == row);
                if (locationInfo != null)
                {
                    groupLocations.Add(locationInfo);
@@ -500,7 +347,7 @@
            int row = location.Row;
            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));
                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Columns == location.Columns && x.Layer == location.Layer && (x.Row == row + 1 || x.Row == row - 1));
                if (locationInfo != null)
                {
                    groupLocations.Add(locationInfo);
@@ -509,7 +356,7 @@
            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));
                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.Depth == j && x.Columns == location.Columns && x.Layer == location.Layer && (x.Row == row + 1 || x.Row == row - 1));
                if (locationInfo != null)
                {
                    groupLocations.Add(locationInfo);
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Common/LocationEnum/LocationStatusEnum.cs
@@ -40,11 +40,5 @@
        /// </summary>
        [Description("有货")]
        InStock = 100,
        /// <summary>
        /// æ‰˜ç›˜é”å®š
        /// </summary>
        [Description("托盘锁定")]
        PalletLock = 99
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Common/StockEnum/StockStatusMenu.cs
@@ -47,6 +47,9 @@
        [Description("拣选完成")]
        æ‹£é€‰å®Œæˆ =14,
        [Description("老厂退库")]
        è€åŽ‚é€€åº“ = 15,
        [Description("MES余料退库")]
        MES余料退库 = 21,
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskStatusEnum.cs
@@ -107,6 +107,12 @@
        MD_Executing = 520,
        /// <summary>
        /// ç­‰å¾…配送呼叫
        /// </summary>
        [Description("等待配送呼叫")]
        CallPending = 610,
        /// <summary>
        /// ä»»åŠ¡å®Œæˆ
        /// </summary>
        [Description("任务完成")]
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs
@@ -112,6 +112,12 @@
        PaperYLBackInbound = 730,
        /// <summary>
        /// åŽŸæ–™è€åŽ‚é€€åº“
        /// </summary>
        [Description("原料老厂退库")]
        PaperOldYLBackInbound = 740,
        /// <summary>
        /// å··é“内移库
        /// </summary>
        [Description("巷道内移库")]
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Core/BaseModels/PageDataOptions.cs
@@ -79,11 +79,11 @@
                    }
                    else if (expressionType == LinqExpressionType.ThanOrEqual)
                    {
                        where += $"{searchParametersList[i].Name} {HtmlElementType.thanorequal} '{searchParametersList[i].Value}'";
                        where += $"{searchParametersList[i].Name} {HtmlElementType.thanOrEqual} '{searchParametersList[i].Value}'";
                    }
                    else if (expressionType == LinqExpressionType.LessThanOrEqual)
                    {
                        where += $"{searchParametersList[i].Name} {HtmlElementType.lessOrequal} '{searchParametersList[i].Value}'";
                        where += $"{searchParametersList[i].Name} {HtmlElementType.lessOrEqual} '{searchParametersList[i].Value}'";
                    }
                    else if (expressionType == LinqExpressionType.GreaterThan)
                    {
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Core/BaseModels/WebResponseContent.cs
@@ -25,9 +25,12 @@
        public string DevMessage { get; set; }
        public string Datetime { get; set; }
        public WebResponseContent OK()
        {
            Status = true;
            Datetime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
            return this;
        }
@@ -40,6 +43,7 @@
            Status = true;
            Message = message;
            Data = data;
            Datetime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
            return this;
        }
@@ -47,6 +51,7 @@
        {
            Status = false;
            Message = message;
            Datetime= DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
            return this;
        }
    }
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Core/Const/HtmlElementType.cs
@@ -25,7 +25,7 @@
        public const string like = "like";
        public const string thanOrEqual = ">=";
        public const string lessOrequal = "<=";
        public const string lessOrEqual = "<=";
        public const string Contains = "in";
        public const string Equal = "=";
    }
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Core/Helper/UtilConvert.cs
@@ -958,10 +958,10 @@
                case HtmlElementType.Contains:
                    linqExpression = LinqExpressionType.In;
                    break;
                case HtmlElementType.thanOrEqual:
                case HtmlElementType.thanorequal:
                    linqExpression = LinqExpressionType.ThanOrEqual;
                    break;
                case HtmlElementType.lessOrequal:
                case HtmlElementType.lessorequal:
                    linqExpression = LinqExpressionType.LessThanOrEqual;
                    break;
                case HtmlElementType.GT:
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_DTO/ERP/BSTOutOrderDTO.cs
@@ -9,7 +9,7 @@
namespace WIDESEA_DTO.ERP
{
    /// <summary>
    /// åšæ€é€šé‡‡è´­å…¥åº“单接收实体
    /// åšæ€é€šç”Ÿäº§æŽ’程接收实体
    /// </summary>
    [ModelValidate]
    public class BSTOutOrderDTO
@@ -45,7 +45,7 @@
        public List<BstBoardMpsDetailItem> BstBoardMpsDetails { get; set; }
    }
    /// <summary>
    /// é‡‡è´­æ”¶è´§æ˜Žç»†
    /// ç”Ÿäº§æŽ’程明细
    /// </summary>
    public class BstBoardMpsDetailItem
    {
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_DTO/MES/MESAutoIssueDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Attributes;
namespace WIDESEA_DTO.MES
{
    /// <summary>
    /// MES领料自动叫料接收实体
    /// </summary>
    [ModelValidate]
    public class MESAutoIssueDTO
    {
        /// <summary>
        /// å‡ºåº“来源明细ID
        /// </summary>
        [PropertyValidate("出库来源明细ID", NotNullAndEmpty = true)]
        public int OutDetailId { get; set; }
        /// <summary>
        /// æœºå°ä½™æ–™å¯ç”¨æ—¶é•¿
        /// </summary>
        [PropertyValidate("机台余料可用时长", NotNullAndEmpty = true)]
        public int OddsTime { get; set; }
        /// <summary>
        /// ä¸Šæ–™å‘¨è½¬ä½ä½™æ–™æ•°é‡
        /// </summary>
        [PropertyValidate("上料周转位余料数量", NotNullAndEmpty = true)]
        public decimal OddsQuantity { get; set; }
        /// <summary>
        /// å‘¨è½¬ä½ç½®ç¼–号
        /// </summary>
        [PropertyValidate("周转位置编号", NotNullAndEmpty = true)]
        public string PointCode { get; set; }
        /// <summary>
        /// å‘¨è½¬ä½æ˜¯å¦å­˜åœ¨ç©ºæ‰˜
        /// </summary>
        [PropertyValidate("周转位是否存在空托", NotNullAndEmpty = true)]
        public int IsEmptyPallet { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_DTO/MES/OutMESOrderDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Attributes;
namespace WIDESEA_DTO.MES
{
    /// <summary>
    /// MES领料计划接收实体
    /// </summary>
    [ModelValidate]
    public class OutMESOrderDTO
    {
        /// <summary>
        /// å‡ºåº“来源明细ID
        /// </summary>
        [PropertyValidate("出库来源明细ID", NotNullAndEmpty = true)]
        public int OutDetailId { get; set; }
        /// <summary>
        /// ä»“库代号
        /// </summary>
        [PropertyValidate("纸质收货单主表ID", NotNullAndEmpty = false)]
        public string WarehouseCode { get; set; }
        /// <summary>
        /// ç”Ÿäº§è®¢å•编码
        /// </summary>
        [PropertyValidate("生产订单编码", NotNullAndEmpty = true)]
        public string ProductOrderNo { get; set; }
        /// <summary>
        /// æ´¾å•工单编码
        /// </summary>
        [PropertyValidate("派单工单编码", NotNullAndEmpty = true)]
        public string SendOrderNo { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–码
        /// </summary>
        [PropertyValidate("物料编码", NotNullAndEmpty = true)]
        public string MaterialCode { get; set; }
        /// <summary>
        /// ç‰©æ–™æ‰¹æ¬¡
        /// </summary>
        [PropertyValidate("物料批次", NotNullAndEmpty = false)]
        public string MaterialLot { get; set; }
        /// <summary>
        /// ç‰©æ–™ç­‰çº§
        /// </summary>
        [PropertyValidate("物料等级", NotNullAndEmpty = false)]
        public string GradeCode { get; set; }
        /// <summary>
        /// ç‰©æ–™éœ€æ±‚数量
        /// </summary>
        [PropertyValidate("物料需求数量", NotNullAndEmpty = true)]
        public decimal ReqQuantity { get; set; }
        /// <summary>
        /// åŠ å·¥ä¸­å¿ƒç¼–ç (机台)
        /// </summary>
        [PropertyValidate("加工中心编码(机台)", NotNullAndEmpty = true)]
        public string MakeCode { get; set; }
        /// <summary>
        /// è®¡åˆ’领料时间
        /// </summary>
        [PropertyValidate("计划领料时间", NotNullAndEmpty = true)]
        public DateTime PlanDate { get; set; }
        /// <summary>
        /// ç»“束时间
        /// </summary>
        [PropertyValidate("结束时间", NotNullAndEmpty = true)]
        public DateTime EndDate { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_External/IMESService/IInvokeMESService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core;
using WIDESEA_External.Model;
namespace WIDESEA_External.MESService
{
    /// <summary>
    /// è°ƒç”¨MES接口
    /// </summary>
    public interface IInvokeMESService : IDependency
    {
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_External/MESService/InvokeMESService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.APIEnum;
using WIDESEA_Core.Helper;
using WIDESEA_External.Model;
using WIDESEA_IBasicRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_External.MESService
{
    /// <summary>
    /// è°ƒç”¨MES接口
    /// </summary>
    public class InvokeMESService : IInvokeMESService
    {
        private readonly IApiInfoRepository _apiInfoRepository;
        public InvokeMESService(IApiInfoRepository apiInfoRepository)
        {
            _apiInfoRepository = apiInfoRepository;
        }
        // åˆ›å»ºä¸€ä¸ªä½¿ç”¨å°é©¼å³°å‘½åæ³•的序列化设置
        JsonSerializerSettings settings = new JsonSerializerSettings
        {
            ContractResolver = new CamelCasePropertyNamesContractResolver()
        };
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_External/Model/ERPBaseModel.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_External/Model/MESDispatchModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_External.Model
{
    internal class MESDispatchModel
    {
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_External/Model/MESResponse.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEA_External.Model
{
    /// <summary>
    /// MES返回
    /// </summary>
    public class MESResponse
    {
        /// <summary>
        /// æˆåŠŸç»“æžœ
        /// </summary>
        public bool Result { get; set; }
        /// <summary>
        /// è¿”回信息
        /// </summary>
        public string Msg { get; set; }
        /// <summary>
        /// è¿”回对象
        /// </summary>
        public object Obj { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundRepository/IOutMESOrderRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_IOutboundRepository
{
    /// <summary>
    /// MES领料计划单仓储接口层
    /// </summary>
    public interface IOutMESOrderRepository : IRepository<Dt_OutMESOrder>
    {
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IOutboundService/IOutMESOrderService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core;
using WIDESEA_IOutboundRepository;
using WIDESEA_Model.Models;
using WIDESEA_DTO.MES;
namespace WIDESEA_IOutboundService
{
    public interface IOutMESOrderService : IService<Dt_OutMESOrder>
    {
        IOutMESOrderRepository Repository { get; }
        /// <summary>
        /// æŽ¥æ”¶MES领料计划
        /// </summary>
        WebResponseContent ReceiveOutBound(OutMESOrderDTO outMESOrderDTO);
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -29,6 +29,7 @@
using WIDESEA_Core.Enums;
using WIDESEA_DTO;
using WIDESEA_DTO.ERP;
using WIDESEA_DTO.MES;
using WIDESEA_DTO.Stock;
using WIDESEA_DTO.Task;
using WIDESEA_ITaskInfoRepository;
@@ -113,7 +114,7 @@
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        WebResponseContent Outbound(int id);
        WebResponseContent Outbound(List<int> ids);
        /// <summary>
        /// ä¿®æ”¹ä»»åŠ¡çŠ¶æ€
@@ -195,5 +196,10 @@
        /// <param name="keys"></param>
        /// <returns></returns>
        WebResponseContent CreateBSTOutboundTasks(int[] keys);
        /// <summary>
        /// MES自动叫料接口
        /// </summary>
        /// <returns></returns>
        WebResponseContent ReceiveAutoIssue(MESAutoIssueDTO autoIssueDTO);
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_AGVStationInfo.cs
@@ -37,9 +37,14 @@
        /// <summary>
        /// åŒºåŸŸ
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "区域")]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "区域")]
        public int StationArea { get; set; }
        /// <summary>
        /// MES对应周转位
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "MES对应周转位")]
        public string MESPointCode { get; set; }
        /// <summary>
        /// æ˜¯å¦å ç”¨
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "是否占用")]
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Basic/Dt_LocationInfo.cs
@@ -54,7 +54,7 @@
        /// è´§ä½åˆ—
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "货位列")]
        public int Column { get; set; }
        public int Columns { get; set; }
        /// <summary>
        /// è´§ä½å±‚
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/Outbound/Dt_OutMESOrder.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,122 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Attributes;
using WIDESEA_Core.CodeConfigEnum;
using WIDESEA_Core.DB.Models;
namespace WIDESEA_Model.Models
{
    /// <summary>
    /// MES领料计划单
    /// </summary>
    [SugarTable(nameof(Dt_OutMESOrder), "MES领料计划单"), ModelValidate]
    public class Dt_OutMESOrder : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        ///// <summary>
        ///// ä»“库主键
        ///// </summary>
        //[SugarColumn(IsNullable = false, ColumnDescription = "仓库主键")]
        //public int WarehouseId { get; set; }
        /// <summary>
        /// å‡ºåº“来源明细ID
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "出库来源明细ID")]
        public int OutDetailId { get; set; }
        /// <summary>
        /// WMS单据编号
        /// </summary>
        [CodeRule(RuleCodeEnum.OutboundOrderRule)]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "WMS单据编号", IsOnlyIgnoreUpdate = true)]
        public string OutMESOrderNo { get; set; }
        /// <summary>
        /// ç”Ÿäº§è®¢å•编码(上游)
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "生产订单编码(上游)")]
        public string ProductOrderNo { get; set; }
        /// <summary>
        /// æ´¾å•工单编码
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "派单工单编码")]
        public string SendOrderNo { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–码
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "物料编码")]
        public string MaterialCode { get; set; }
        /// <summary>
        /// ç‰©æ–™æ‰¹æ¬¡
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "物料批次")]
        public string MaterialLot { get; set; }
        /// <summary>
        /// ç‰©æ–™ç­‰çº§
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "物料等级")]
        public string GradeCode { get; set; }
        /// <summary>
        /// ç‰©æ–™éœ€æ±‚数量
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "物料需求数量")]
        public decimal ReqQuantity { get; set; }
        /// <summary>
        /// åŠ å·¥ä¸­å¿ƒç¼–ç (机台)
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "加工中心编码(机台)")]
        public string MakeCode { get; set; }
        /// <summary>
        /// ç”Ÿäº§è®¢å•状态
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "生产订单状态")]
        public int OutMESOrderStatus { get; set; }
        /// <summary>
        /// è®¡åˆ’领料时间
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "计划领料时间")]
        public DateTime PlanDate { get; set; }
        /// <summary>
        /// ç»“束时间
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "结束时间")]
        public DateTime EndDate { get; set; }
        /// <summary>
        /// åˆ†é…éœ€æ±‚数量
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "分配需求数量")]
        public decimal AssignTotalUsage { get; set; }
        /// <summary>
        /// å·²å‡ºéœ€æ±‚数量
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "已出需求数量")]
        public decimal OutTotalUsage { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "备注")]
        public string Remark { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundRepository/OutMESOrderRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.BaseRepository;
using WIDESEA_IOutboundRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_OutboundRepository
{
    /// <summary>
    /// MES领料计划单仓储实现层
    /// </summary>
    public class OutMESOrderRepository : RepositoryBase<Dt_OutMESOrder>, IOutMESOrderRepository
    {
        public OutMESOrderRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutBSTOrderService.cs
@@ -42,14 +42,18 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                //获取所有出库单
                List<Dt_OutBSTOrder> OldoutBSTOrders = BaseDal.Db.Queryable<Dt_OutBSTOrder>().Includes(x => x.Details).ToList();
                //新增
                List<BSTOutOrderDTO> outOrderDTOsAdd = bSTOutOrderDTOs.Where(x => x.Way == 1).ToList();
                //修改
                List<BSTOutOrderDTO> outOrderDTOsUpdate = bSTOutOrderDTOs.Where(x => x.Way == 2).ToList();
                //删除
                List<BSTOutOrderDTO> outOrderDTOsDel = bSTOutOrderDTOs.Where(x => x.Way == 3).ToList();
                if (outOrderDTOsAdd.Count==0 && outOrderDTOsUpdate.Count==0 && outOrderDTOsDel.Count==0)
                {
                    return content.Error($"出库排程信息传入为空");
                }
                //获取所有出库单
                List<Dt_OutBSTOrder> OldoutBSTOrders = BaseDal.Db.Queryable<Dt_OutBSTOrder>().Includes(x => x.Details).ToList();
                //获取所有物料 
                List<Dt_MaterielInfo> materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt() && x.MaterielInvOrgId == MaterielInvOrgEnum.老厂.ObjToInt() && x.MaterialSourceId != 0);
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutMESOrderService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
using AutoMapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.MaterielEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.MES;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
using WIDESEA_IOutboundRepository;
using WIDESEA_IOutboundService;
using WIDESEA_IRecordService;
using WIDESEA_IStockService;
using WIDESEA_Model.Models;
namespace WIDESEA_OutboundService
{
    public class OutMESOrderService : ServiceBase<Dt_OutMESOrder, IOutMESOrderRepository>, IOutMESOrderService
    {
        public IOutMESOrderRepository Repository => BaseDal;
        private IBasicRepository _basicRepository;
        private IStockService _stockService;
        private IOutStockLockInfoService _outStockLockInfoService;
        private IBasicService _basicService;
        private ILocationStatusChangeRecordService _locationStatusChangeRecordService;
        private readonly IMapper _mapper;
        public OutMESOrderService(IOutMESOrderRepository BaseDal,IBasicRepository basicRepository, IStockService stockService, IOutStockLockInfoService outStockLockInfoService, IBasicService basicService, ILocationStatusChangeRecordService locationStatusChangeRecordService,IMapper mapper) : base(BaseDal)
        {
            _basicRepository = basicRepository;
            _stockService = stockService;
            _outStockLockInfoService = outStockLockInfoService;
            _basicService = basicService;
            _locationStatusChangeRecordService = locationStatusChangeRecordService;
            _mapper = mapper;
        }
        /// <summary>
        /// æŽ¥æ”¶MES领料计划
        /// </summary>
        /// <returns></returns>
        public WebResponseContent ReceiveOutBound(OutMESOrderDTO outMESOrderDTO)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                if (outMESOrderDTO==null)
                {
                    return content.Error("领料计划传入信息为空");
                }
                if (outMESOrderDTO.OutDetailId <= 0)
                {
                    return content.Error($"领料计划{nameof(OutMESOrderDTO.OutDetailId)}:{outMESOrderDTO.OutDetailId}需要大于0");
                }
                if (outMESOrderDTO.ReqQuantity <= 0)
                {
                    return content.Error($"领料计划{nameof(OutMESOrderDTO.ReqQuantity)}:{outMESOrderDTO.ReqQuantity}需要大于0");
                }
                //获取所有物料信息
                List<Dt_MaterielInfo> materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x=>x.MaterielInvOrgId==MaterielInvOrgEnum.新厂.ObjToInt());
                //获取所有临料计划
                List<Dt_OutMESOrder> outMESOrders = BaseDal.QueryData();
                Dt_MaterielInfo? ExistmaterielInfo = materielInfos.FirstOrDefault(x=>x.MaterielCode== outMESOrderDTO.MaterialCode);
                if (ExistmaterielInfo == null)
                {
                    return content.Error($"物料编码{nameof(OutMESOrderDTO.MaterialCode)}:{outMESOrderDTO.MaterialCode}信息不存在");
                }
                Dt_OutMESOrder? OldoutMESOrder = outMESOrders.FirstOrDefault(x=>x.OutDetailId==outMESOrderDTO.OutDetailId);
                if (OldoutMESOrder!=null)
                {
                    return content.Error($"领料计划{nameof(OutMESOrderDTO.OutDetailId)}:{outMESOrderDTO.OutDetailId}信息已存在");
                }
                return content.Error($"领料计划{nameof(OutMESOrderDTO.ProductOrderNo)}:{outMESOrderDTO.ProductOrderNo},物料{outMESOrderDTO.MaterialCode}无可分配库存");
                Dt_OutMESOrder outMESOrder = _mapper.Map<Dt_OutMESOrder>(outMESOrderDTO);
                BaseDal.AddData(outMESOrder);
                return content.OK("接收成功");
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_RecordService/Service/LocationStatusChangeRecordService.cs
@@ -43,7 +43,7 @@
                throw new Exception($"{ex.Message}");
            }
        }
        //货位变动记录添加
        public void AddLocationStatusChangeRecord(List<Dt_LocationInfo> locationInfos, LocationStatusEnum newStatus, LocationChangeType changeType, string? orderNo = null, List<int>? taskNums = null)
        {
            try
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_StockService/ProStockViewService.cs
@@ -54,14 +54,11 @@
                        List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
                        if (searchParametersList.Count > 0)
                        {
                            SearchParameters? searchParameters1 = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_ProStockInfoDetail.ProductCode).FirstLetterToLower());
                            if (searchParameters1 != null)
                            {
                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_ProStockInfoDetail.ProductCode).FirstLetterToLower());
                                if (searchParameters != null)
                                {
                                    sugarQueryable1 = sugarQueryable1.Where(x => x.proStockInfoDetails.Any(v => v.ProductCode.Contains(searchParameters.Value)));
                                }
                                sugarQueryable1 = sugarQueryable1.Where(x => x.proStockInfoDetails.Any(v => v.ProductCode.Contains(searchParameters1.Value)));
                            }
                        }
                    }
@@ -81,7 +78,7 @@
                    {
                        ProStockAttribute=b.ProStockAttribute,
                        LocationCode = b.LocationCode,
                        Column = a.Column,
                        Column = a.Columns,
                        WarehouseId = b.WarehouseId,
                        CreateDate = b.CreateDate,
                        Creater = b.Creater,
@@ -100,29 +97,10 @@
                        SumStocks=b.proStockInfoDetails.Sum(x=>x.StockQty)
                    });
                var pklist = sugarQueryable1.Where(b => b.LocationCode == "成品待发货区" || b.LocationCode == "成品包装拣货区").Select(b => new ProStockViewDTO
                {
                    ProStockAttribute = b.ProStockAttribute,
                    LocationCode = b.LocationCode,
                    WarehouseId = b.WarehouseId,
                    CreateDate = b.CreateDate,
                    Creater = b.Creater,
                    LocationName = b.LocationCode,
                    Modifier = b.Modifier,
                    ModifyDate = b.ModifyDate,
                    PalletCode = b.PalletCode,
                    StockRemark = b.Remark,
                    ProStockId = b.Id,
                    StockStatus = b.StockStatus,
                    Details = b.proStockInfoDetails,
                    SumStocks = b.proStockInfoDetails.Sum(x => x.StockQty)
                });
                int totalCount = 0;
                int pktotalCount = 0;
                stockViewDTOs = list.ToPageList(options.Page, options.Rows, ref totalCount);
                stockViewDTOs.AddRange(pklist.ToPageList(options.Page, options.Rows, ref pktotalCount));
                stockViewDTOs.ForEach(x =>
                    {
@@ -214,7 +192,7 @@
                    {
                        ProStockAttribute = b.ProStockAttribute,
                        LocationCode = b.LocationCode,
                        Column = a.Column,
                        Column = a.Columns,
                        WarehouseId = b.WarehouseId,
                        CreateDate = b.CreateDate,
                        Creater = b.Creater,
@@ -294,7 +272,7 @@
                {
                    if (userRole.WarehouseIds.Count > 0)
                    {
                        return $"{nameof(BaseWarehouseEntity.WarehouseId)} in ({userRole.WarehouseIds.Serialize().Replace("[", "").Replace("]", "")})";
                        return $"{nameof(BaseWarehouseEntity.WarehouseId)} in ({userRole.WarehouseIds.OrderBy(x=>x).Serialize().Replace("[", "").Replace("]", "")})";
                    }
                    else
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/MesTaskService.cs
@@ -29,11 +29,54 @@
using WIDESEA_DTO.Stock;
using SqlSugar;
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
using WIDESEA_DTO.MES;
namespace WIDESEA_TaskInfoService
{
    public partial class TaskService
    {
        static object lock_out = new object();
        /// <summary>
        /// MES自动叫料接口
        /// </summary>
        /// <returns></returns>
        public WebResponseContent ReceiveAutoIssue(MESAutoIssueDTO autoIssueDTO)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                //获取对应单据
                Dt_OutMESOrder? outMESOrder = _outMESOrderRepository.QueryFirst(x=>x.OutDetailId==autoIssueDTO.OutDetailId);
                if (outMESOrder==null)
                {
                    return content.Error($"领料计划{nameof(MESAutoIssueDTO.OutDetailId)}{autoIssueDTO.OutDetailId}不存在");
                }
                //获取周转位置编号
                Dt_AGVStationInfo? stationInfo = _agvStationInfoRepository.QueryFirst(x=>x.MESPointCode==autoIssueDTO.PointCode);
                if (stationInfo == null)
                {
                    return content.Error($"领料计划周转位{nameof(MESAutoIssueDTO.PointCode)}{autoIssueDTO.PointCode}不存在");
                }
                if (autoIssueDTO.IsEmptyPallet>0)
                {
                    return content.Error($"领料计划周转位{nameof(MESAutoIssueDTO.PointCode)}{autoIssueDTO.PointCode}存在空托");
                }
                Dt_Task? task = BaseDal.QueryData(x => x.OrderNo == outMESOrder.OutMESOrderNo && x.TaskStatus==TaskStatusEnum.CallPending.ObjToInt()).OrderByDescending(x=>x.Grade).ThenBy(x=>x.TaskNum).FirstOrDefault();
                //获取任务
                if (task==null)
                {
                    return content.Error($"未找到领料计划编号{outMESOrder.ProductOrderNo}可配送任务");
                }
                task.TaskStatus = TaskStatusEnum.New.ObjToInt();
                task.TargetAddress= stationInfo.AGVStationCode;
                PushTasksToWCS(new List<Dt_Task> { task });
                return content.OK("叫料成功");
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService.cs
@@ -72,6 +72,8 @@
        private readonly IOutBSTOrderDetailRepository _outBSTOrderDetailRepository;
        private readonly IOutBSTOrderRepository _outBSTOrderRepository;
        private readonly IOutBSTOrderDetailService _outBSTOrderDetailService;
        private readonly IOutMESOrderService _outMESOrderService;
        private readonly IOutMESOrderRepository _outMESOrderRepository;
        public ITaskRepository Repository => BaseDal;
        private Dictionary<string, OrderByType> _taskOrderBy = new()
@@ -84,7 +86,7 @@
        public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 100 && x < 500).ToList();
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IPalletTypeInfoRepository palletTypeInfoRepository, IAGVStationInfoRepository agvStationInfoRepository, IPurchaseBSTOrderRepository purchaseBSTOrderRepository, IPurchaseBSTOrderDetailRepository purchaseBSTOrderDetailRepository, IOutBSTOrderDetailRepository outBSTOrderDetailRepository, IOutBSTOrderRepository outBSTOrderRepository,IOutBSTOrderDetailService outBSTOrderDetailService) : base(BaseDal)
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IPalletTypeInfoRepository palletTypeInfoRepository, IAGVStationInfoRepository agvStationInfoRepository, IPurchaseBSTOrderRepository purchaseBSTOrderRepository, IPurchaseBSTOrderDetailRepository purchaseBSTOrderDetailRepository, IOutBSTOrderDetailRepository outBSTOrderDetailRepository, IOutBSTOrderRepository outBSTOrderRepository,IOutBSTOrderDetailService outBSTOrderDetailService, IOutMESOrderService outMESOrderService, IOutMESOrderRepository outMESOrderRepository) : base(BaseDal)
        {
            _mapper = mapper;
            _unitOfWorkManage = unitOfWorkManage;
@@ -99,9 +101,11 @@
            _agvStationInfoRepository = agvStationInfoRepository;
            _purchaseBSTOrderRepository = purchaseBSTOrderRepository;
            _purchaseBSTOrderDetailRepository = purchaseBSTOrderDetailRepository;
            _outBSTOrderRepository= outBSTOrderRepository;
            _outBSTOrderDetailRepository= outBSTOrderDetailRepository;
            _outBSTOrderDetailService= outBSTOrderDetailService;
            _outBSTOrderRepository = outBSTOrderRepository;
            _outBSTOrderDetailRepository = outBSTOrderDetailRepository;
            _outBSTOrderDetailService = outBSTOrderDetailService;
            _outMESOrderService = outMESOrderService;
            _outMESOrderRepository = outMESOrderRepository;
        }
        /// <summary>
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs
@@ -132,10 +132,11 @@
                {
                    return content.Error($"未找到组盘信息");
                }
                if (stockInfo.StockStatus != StockStatusEmun.手动组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt())
                if (stockInfo.StockStatus != StockStatusEmun.手动组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.组盘暂存.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.老厂退库.ObjToInt())
                {
                    return content.Error($"该托盘状态不正确,不可申请入库");
                }
                //分配巷道
                string rowWay = AssignYLRoadwayNo(stockInfo.PalletCode);
                if (string.IsNullOrEmpty(rowWay))
                {
@@ -151,13 +152,13 @@
                    Roadway = rowWay,
                    SourceAddress = stationCode,
                    TargetAddress = "",
                    TaskType = TaskTypeEnum.Inbound.ObjToInt(),
                    TaskType = stationCode=="307" ? TaskTypeEnum.PaperOldYLBackInbound.ObjToInt() : TaskTypeEnum.Inbound.ObjToInt(),
                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
                    WarehouseId = stockInfo.WarehouseId,
                    PalletType = stockInfo.PalletType,
                    TaskLength = (int)stockInfo.MaterielWide
                };
                //更新状态
                if (stockInfo.StockStatus == StockStatusEmun.手动组盘暂存.ObjToInt())
                {
                    stockInfo.StockStatus = StockStatusEmun.手动组盘入库确认.ObjToInt();
@@ -166,6 +167,7 @@
                {
                    stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt();
                }
                //数据更新
                _unitOfWorkManage.BeginTran();
                int taskId = BaseDal.AddData(newTask);
                newTask.TaskId = taskId;
@@ -196,10 +198,15 @@
                {
                    return content.OK($"新厂临时入库{stockInfoOld.PalletCode}");
                }
                else if (stockInfoOld != null && stockInfoOld.MaterielInvOrgId==MaterielInvOrgEnum.老厂.ObjToInt() && stockInfoOld.StockStatus == StockStatusEmun.老厂退库.ObjToInt())
                {
                    return content.OK($"老厂临时退库{stockInfoOld.PalletCode}");
                }
                else if (stockInfoOld != null)
                {
                    return content.Error($"条码{stockInfoOld.PalletCode}信息已存在");
                }
                //获取采购信息
                Dt_PurchaseBSTOrderDetail purchaseBSTOrderDetail = _purchaseBSTOrderDetailRepository.QueryFirst(x=>x.Barcode== palletCode);
                if (purchaseBSTOrderDetail == null)
@@ -283,8 +290,13 @@
                if (stockInfo.MaterielInvOrgId==MaterielInvOrgEnum.新厂.ObjToInt())
                {
                    //限制直径
                    if (stockInfo.MaterielThickness <= 1250)
                    if (stockInfo.MaterielThickness >= 300 && stockInfo.MaterielThickness <= 1300 && stockInfo.MaterielWide >= 700 && stockInfo.MaterielWide <= 2700)
                    {
                        bool LayerLimit = false;
                        if (stockInfo.MaterielThickness >= 800)
                        {
                            LayerLimit = true;
                        }
                        //获取分配
                        List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("YLDual")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
@@ -293,14 +305,19 @@
                }
                else
                {
                    //限制直径
                    if (stockInfo.MaterielThickness >= 800 && stockInfo.MaterielThickness <= 1450)
                    //限制
                    if (stockInfo.MaterielThickness >= 800 && stockInfo.MaterielThickness <= 1500 && stockInfo.MaterielWide >= 700 && stockInfo.MaterielWide <= 2500)
                    {
                        bool LayerLimit = false;
                        if (stockInfo.MaterielThickness>1300)
                        {
                            LayerLimit = true;
                        }
                        //获取分配
                        List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("YL") && !x.RoadwayNo.Contains("YLDual")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                        List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("YL") && !x.RoadwayNo.Contains("YLDual") && (LayerLimit ? x.Columns>=56 : x.Columns<=55)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                        if (stockInfo.MaterielWide > 2200)
                        {
                            locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo == "SC02_YL").GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                            locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo == "SC02_YL" && (LayerLimit ? x.Columns >= 56 : x.Columns <= 55)).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                        }
                        roadwayNo = HandleRoadway(locationCounts, warehouse);
@@ -330,7 +347,7 @@
                    item.Count -= count.Count;
                }
            }
            return locationCounts.OrderByDescending(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
            return locationCounts.Where(x => x.Count > 0).OrderByDescending(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
        }
        /// <summary>
        /// å…¥åº“完成
@@ -462,7 +479,7 @@
                List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == WarehouseEnum.LLDCP.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && x.RoadwayNo.Contains("CP")).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).ToList();
                //筛选当前入库任务中已分配巷道任务数量
                List<LocationCount> useLocationCounts = Db.Queryable<Dt_Task>().Where(x => (x.WarehouseId == WarehouseEnum.LLDCP.ObjToInt()|| x.WarehouseId == WarehouseEnum.LLDFL.ObjToInt())
                && locationCounts.Select(j=>j.RoadwayNo).Contains(x.Roadway)
                && locationCounts.Select(j=>j.RoadwayNo).Distinct().Contains(x.Roadway)
                && TaskInboundTypes.Contains(x.TaskType)).GroupBy(x => x.Roadway).Select(x => new LocationCount { RoadwayNo = x.Roadway, Count = SqlFunc.AggregateCount(x) }).ToList();
                foreach (var item in locationCounts)
                {
@@ -473,7 +490,7 @@
                    }
                }
                //通过可用货位数量排序,最多的优先分配
                roadwayNo = locationCounts.OrderByDescending(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
                roadwayNo = locationCounts.Where(x=>x.Count>0).OrderByDescending(x => x.Count).FirstOrDefault()?.RoadwayNo ?? "";
                return !string.IsNullOrEmpty(roadwayNo) ? (roadwayNo) : throw new Exception("未找到可分配巷道");
            }
            catch (Exception ex)
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs
@@ -32,46 +32,45 @@
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public WebResponseContent Outbound(int id)
        public WebResponseContent Outbound(List<int> ids)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.Id == id).First();
                if (stockInfo == null)
                //获取选定库存
                List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => ids.Contains(x.Id) && x.StockStatus == StockStatusEmun.入库完成.ObjToInt() && x.MaterielInvOrgId == MaterielInvOrgEnum.老厂.ObjToInt()).ToList();
                if (stockInfos == null || stockInfos.Count != ids.Count)
                {
                    return content.Error($"未找到库存");
                }
                Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode);
                if (locationInfo != null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && stockInfo.StockStatus == StockStatusEmun.入库完成.ObjToInt())
                //获取库存货位
                List<Dt_LocationInfo> locationInfos = _basicRepository.LocationInfoRepository.QueryData(x =>x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt() && stockInfos.Select(x=>x.LocationCode).Contains(x.LocationCode) && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()));
                if (locationInfos == null || locationInfos.Count != stockInfos.Count)
                {
                    List<Dt_Task> tasks = GetTasks(new List<Dt_StockInfo>() { stockInfo }, TaskTypeEnum.Outbound);
                    if (tasks == null || tasks.Count <= 0)
                    {
                        return content.Error($"生成任务失败");
                    }
                    //处理库存数据
                    stockInfo.StockStatus = (int)StockStatusEmun.出库锁定;
                    LocationStatusEnum locationStatus = (LocationStatusEnum)locationInfo.LocationStatus;
                    locationInfo.LocationStatus = (int)LocationStatusEnum.Lock;
                    //判断是否有出库单信息
                    _unitOfWorkManage.BeginTran();
                    //更新库存状态
                    _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                    //更新货位状态
                    _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
                    //新建任务
                    BaseDal.AddData(tasks);
                    //加入货位变动记录
                    _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, locationStatus, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, stockInfo.OrderNo ?? "", tasks[0].TaskNum);
                    _unitOfWorkManage.CommitTran();
                    PushTasksToWCS(tasks);
                    content.OK();
                    return content.Error($"货位出库条件不满足");
                }
                else
                //任务生成
                List<Dt_Task> tasks = GetTasks(stockInfos, TaskTypeEnum.OldYLOutbound);
                if (tasks == null || tasks.Count <= 0)
                {
                    content.Error($"货位出库条件不满足");
                    return content.Error($"生成任务失败");
                }
                stockInfos.ForEach(x =>
                {
                    x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                });
                _unitOfWorkManage.BeginTran();
                //更新库存状态
                _stockRepository.StockInfoRepository.UpdateData(stockInfos);
                //更新货位状态
                _basicRepository.LocationInfoRepository.UpdateLocationStatus(locationInfos, LocationStatusEnum.Lock);
                //加入货位变动记录
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, taskNums: tasks.Select(x => x.TaskNum).ToList());
                //新建任务
                BaseDal.AddData(tasks);
                _unitOfWorkManage.CommitTran();
                PushTasksToWCS(tasks);
                content.OK();
            }
            catch (Exception ex)
            {
@@ -146,7 +145,7 @@
            }
        }
        /// <summary>
        /// åº“存数据转出库任务
        /// åº“存数据转出库任务(原料/半成品)
        /// </summary>
        /// <param name="stockInfos"></param>
        /// <returns></returns>
@@ -189,6 +188,9 @@
            }
            return tasks;
        }
        /// <summary>
        /// åº“存数据转出库任务(辅料/成品)
        /// </summary>
        public List<Dt_Task> GetTasks(List<Dt_ProStockInfo> stockInfos, TaskTypeEnum taskType,List<Dt_LocationInfo> locationInfos)
        {
            List<Dt_Task> tasks = new List<Dt_Task>();
@@ -245,7 +247,7 @@
                .Where(x => x.proStockInfoDetails
                .Any(v =>
                    v.ProductCode == materialCode)
                ).ToList();
                ).Take(Count).ToList();
                if (stockInfos.Count!=Count)
                {
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Reloaction.cs
@@ -45,7 +45,7 @@
                List<Dt_LocationInfo> littleDepthLocations = _basicService.LocationInfoService.GetGroupLocations(locationInfo);
                Dt_LocationInfo? needRelocationItem = littleDepthLocations.Where(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && x.LocationStatus != LocationStatusEnum.PalletLock.ObjToInt() && x.LocationStatus != LocationStatusEnum.FreeLock.ObjToInt() && x.Depth < locationInfo.Depth).OrderBy(x => x.Depth).FirstOrDefault();
                Dt_LocationInfo? needRelocationItem = littleDepthLocations.Where(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && x.LocationStatus != LocationStatusEnum.FreeLock.ObjToInt() && x.Depth < locationInfo.Depth).OrderBy(x => x.Depth).FirstOrDefault();
                if (needRelocationItem == null)
                {
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Basic/LocationInfoRowController.cs
@@ -81,7 +81,7 @@
                            //列
                            row = data_col.Row,
                            layer = data_col.Layer,
                            index = data_col.Column,
                            index = data_col.Columns,
                            locationCode = data_col.LocationCode,
                            location_state = data_col.LocationStatus,
                            location_lock = data_col.EnableStatus,
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/MES/MesController.cs
@@ -10,6 +10,10 @@
using WIDESEA_Core.Helper;
using Autofac.Core;
using WIDESEA_DTO.Stock;
using WIDESEA_BasicService;
using WIDESEA_DTO.Basic;
using WIDESEA_DTO.MES;
using WIDESEA_IOutboundService;
namespace WIDESEA_WMSServer.Controllers.MES
{
@@ -21,11 +25,76 @@
    public class MesController : ControllerBase
    {
        private readonly ITaskService _taskService;
        private readonly IOutMESOrderService _outMESOrderService;
        public MesController(ITaskService taskService)
        public MesController(ITaskService taskService,IOutMESOrderService outMESOrderService)
        {
            _taskService = taskService;
            _outMESOrderService = outMESOrderService;
        }
        /// <summary>
        /// æŽ¥æ”¶MES领料计划
        /// </summary>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("ReceiveOutBound"), AllowAnonymous]
        public WebResponseContent ReceiveOutBound([FromBody] OutMESOrderDTO outMESOrderDTO)
        {
            return _outMESOrderService.ReceiveOutBound(outMESOrderDTO);
        }
        /// <summary>
        /// MES自动叫料接口
        /// </summary>
        /// <returns></returns>
        /// <summary>
        [HttpPost, HttpGet, Route("ReceiveAutoIssue"), AllowAnonymous]
        public WebResponseContent ReceiveAutoIssue([FromBody] MESAutoIssueDTO autoIssueDTO)
        {
            return _taskService.ReceiveAutoIssue(autoIssueDTO);
        }
        /// <summary>
        /// MES手动叫料接口
        /// </summary>
        /// <returns></returns>
        /// <summary>
        [HttpPost, HttpGet, Route("ReceiveManualIssue"), AllowAnonymous]
        public WebResponseContent ReceiveManualIssue([FromBody] MESAutoIssueDTO autoIssueDTO)
        {
            return _taskService.ReceiveAutoIssue(autoIssueDTO);
        }
        /// <summary>
        /// MES空托/余料呼叫接口
        /// </summary>
        /// <returns></returns>
        /// <summary>
        [HttpPost, HttpGet, Route("ReceiveReturnIssue"), AllowAnonymous]
        public WebResponseContent ReceiveReturnIssue([FromBody] MESAutoIssueDTO autoIssueDTO)
        {
            return _taskService.ReceiveAutoIssue(autoIssueDTO);
        }
        /// <summary>
        /// æˆå“/半成品信息同步接口
        /// </summary>
        /// <returns></returns>
        /// <summary>
        [HttpPost, HttpGet, Route("ReceiveProCodeInfo"), AllowAnonymous]
        public WebResponseContent ReceiveProCodeInfo([FromBody] MESAutoIssueDTO autoIssueDTO)
        {
            return _taskService.ReceiveAutoIssue(autoIssueDTO);
        }
        /// <summary>
        /// MES工单停止接口
        /// </summary>
        /// <returns></returns>
        /// <summary>
        [HttpPost, HttpGet, Route("ReceiveProOrderStop"), AllowAnonymous]
        public WebResponseContent ReceiveProOrderStop([FromBody] MESAutoIssueDTO autoIssueDTO)
        {
            return _taskService.ReceiveAutoIssue(autoIssueDTO);
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/Outbound/OutMESOrderController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Core.BaseController;
using WIDESEA_IOutboundService;
using WIDESEA_Model.Models;
namespace WIDESEA_WMSServer.Controllers.Outbound
{
    /// <summary>
    /// MES领料计划单
    /// </summary>
    [Route("api/OutMESOrder")]
    [ApiController]
    public class OutMESOrderController : ApiBaseController<IOutMESOrderService, Dt_OutMESOrder>
    {
        public OutMESOrderController(IOutMESOrderService service) : base(service)
        {
        }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -45,7 +45,7 @@
        {
            return Service.AssignInboundTaskLocation(taskNum, roadwayNo);
        }
        /// <summary>
        /// æˆå“ç©ºæ¡†å›žåº“
        /// </summary>
@@ -104,14 +104,13 @@
        }
        /// <summary>
        /// é€‰æ‹©åº“存生成出库任务
        /// é€‰æ‹©åº“存生成老厂出库任务
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpPost, Route("Outbound"), AllowAnonymous]
        public WebResponseContent Outbound(int id)
        [HttpPost, Route("OldYLOutbound"), AllowAnonymous]
        public WebResponseContent Outbound([FromBody] List<int> ids)
        {
            return Service.Outbound(id);
            return Service.Outbound(ids);
        }
        /// <summary>
@@ -203,9 +202,6 @@
        /// <summary>
        /// åŽŸæ–™ç§»åº“ä»»åŠ¡
        /// </summary>
        /// <param name="startAddress"></param>
        /// <param name="endAddress"></param>
        /// <param name="roadWay"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("Relocation"), AllowAnonymous]
        public WebResponseContent IsRelocation(string startAddress, string endAddress, string roadWay)
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Filter/CustomProfile.cs
@@ -15,6 +15,7 @@
using WIDESEA_DTO.Basic;
using WIDESEA_DTO.ERP;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.MES;
using WIDESEA_DTO.System;
using WIDESEA_DTO.Task;
using WIDESEA_Model.Models;
@@ -43,6 +44,8 @@
            //BST退料单实体转换
            CreateMap<BSTReturnOrderDTO, Dt_ReturnBSTOrder>().ForMember(x => x.ReturnOrderStatus, b => b.MapFrom(b => InOrderStatusEnum.未开始.ObjToInt())).ForMember(x => x.WreturnDate, b => b.MapFrom(b => DateTimeOffset.FromUnixTimeMilliseconds(b.WreturnDate).DateTime)).ForMember(x => x.WarehouseId, b => b.MapFrom(b => WarehouseEnum.LLDYL.ObjToInt()));
            CreateMap<BSTReturnOrderDTOItem, Dt_ReturnBSTOrderDetail>().ForMember(x => x.ReturnBSTOrderDetailStatus, b => b.MapFrom(b => OutOrderStatusEnum.未开始.ObjToInt())).ForMember(x => x.MaterialWide, b => b.MapFrom(b => b.W)).ForMember(x => x.MaterialThick, b => b.MapFrom(b => b.Thick));
            //MES领料计划实体转换
            CreateMap<OutMESOrderDTO, Dt_OutMESOrder>().ForMember(x => x.OutMESOrderStatus, b => b.MapFrom(b => OutOrderStatusEnum.未开始.ObjToInt()));
        }
    }
}
ÏîÄ¿×ÊÁÏ/¼¼ÊõЭÒé/AGV×÷ÒµÁ÷³Ì0911.xlsx
Binary files differ
ÏîÄ¿×ÊÁÏ/½Ó¿ÚЭÒé/²©Ë¼Í¨ÀûÍØ½Ó¿Ú.xlsx
Binary files differ
ÏîÄ¿×ÊÁÏ/½Ó¿ÚЭÒé/ÁúÀûµÃMES½Ó¿Ú.xlsx
Binary files differ
ÏîÄ¿×ÊÁÏ/ͨÐÅЭÒé/Ô­ÁÏ¿âÊäËÍÏßͨѶЭÒé.xlsx
Binary files differ
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/ÁúÀûµÃÖ½¾í¿â¡ª¡ªÖ½¾í¿â»õ¼Ü¡ª¡ª×Üͼ¡ª¡ª2025-05-20ÏÖ³¡¸ü¸Ä¶Ë²¿Íø¼Ü³öͼ.dwg
Binary files differ