wangxinhui
2026-02-03 b2b779905bc8a71b52d0e14f91652309d9279878
一堆逻辑修改
已修改28个文件
936 ■■■■■ 文件已修改
项目代码/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/IPackaxisTaskService.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_TaskInfoService/PackaxisTaskService.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPH.cs 226 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/码垛/MDJob_CP.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/src/views/taskinfo/task.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSClient/src/views/taskinfo/task_hty.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Common/StockEnum/OutLockStockStatusEnum.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_DTO/ERP/BSTPickInfoDTO.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IStockService/IProStockViewService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_IStockService/IStockInfoService.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/MESProInOrderInfoService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_InboundService/ReturnBSTOrderService.cs 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutSGOrderDetailService.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_OutboundService/OutStockLockInfoService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_StockService/StockInfoService.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/MesTaskService.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService.cs 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs 75 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs 263 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/Controllers/ERP/ErpBSTController.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WMSServices/WIDESEA_WMSServer/appsettings.json 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/接口协议/博斯通利拓接口.V2.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/通信协议/原料库输送线故障读取.xls 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs
@@ -82,10 +82,16 @@
        OutCarton = 360,
        /// <summary>
        /// äºŒæ¥¼çº¸ç®±ä¾›æ–™
        /// </summary>
        [Description("纸杯纸片供料")]
        OutScrapsPaper = 370,
        /// <summary>
        /// æ— çººå¸ƒæ·‹è†œå‡ºåº“
        /// </summary>
        [Description("无纺布淋膜出库")]
        OutWFBLM = 370,
        OutWFBLM = 380,
        /// <summary>
        /// å†²åˆ‡åŒºå‡ºåº“
@@ -130,12 +136,6 @@
        InPick = 530,
        /// <summary>
        /// ç©ºæ‰˜å›žå ç›˜
        /// </summary>
        [Description("空托回叠盘")]
        EmptyPaletteBack = 535,
        /// <summary>
        /// æˆå“å…¥åº“
        /// </summary>
        [Description("成品入库")]
@@ -148,10 +148,34 @@
        EmptyProductBack = 630,
        /// <summary>
        /// åˆ†åˆ‡åŠæˆå“å…¥åº“
        /// </summary>
        [Description("分切半成品入库")]
        PartOffInbound = 680,
        /// <summary>
        /// æ¨¡åˆ‡åŠæˆå“å…¥åº“
        /// </summary>
        [Description("模切半成品入库")]
        DieCutInbound = 685,
        /// <summary>
        /// å†²åˆ‡åŠæˆå“å…¥åº“
        /// </summary>
        [Description("冲切半成品入库")]
        PunchingInbound = 690,
        /// <summary>
        /// æ— çººå¸ƒåŠæˆå“å…¥åº“
        /// </summary>
        [Description("无纺布半成品入库")]
        WFBYLInbound = 700,
        WFBYLInbound = 695,
        /// <summary>
        /// æ— çººå¸ƒæ·‹è†œåŠæˆå“å…¥åº“
        /// </summary>
        [Description("无纺布淋膜半成品入库")]
        WFBLMYLInbound = 700,
        /// <summary>
        /// çº¸å¼ æ·‹è†œåŠæˆå“å…¥åº“
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/IPackaxisTaskService.cs
@@ -13,8 +13,21 @@
{
    public interface IPackaxisTaskService : IService<Dt_PackaxisTask>
    {
        /// <summary>
        /// åˆ†é…ç åž›ä»»åŠ¡
        /// </summary>
        /// <param name="barCode"></param>
        /// <param name="deviceCode"></param>
        /// <returns></returns>
        WebResponseContent ReqPackTask(string barCode, string deviceCode);
        /// <summary>
        /// ç åž›ä»»åŠ¡å®Œæˆ
        /// </summary>
        /// <param name="taskNum"></param>
        /// <param name="packaxisTask"></param>
        /// <returns></returns>
        WebResponseContent TaskCompleted(int taskNum=0,Dt_PackaxisTask? packaxisTask=null);
        //码垛结托并上传码垛工位码垛明细数据
        WebResponseContent BoxingInBound(string stationCode);
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Server/Controllers/AGV/AGVController.cs
@@ -244,7 +244,7 @@
                        }
                        else
                        {
                            if (task.TaskType == TaskTypeEnum.PrintYLInbound.ObjToInt() || task.TaskType == TaskTypeEnum.PrintYLBackInbound.ObjToInt() || task.TaskType == TaskTypeEnum.EmptyPaletteBack.ObjToInt())
                            if (task.TaskType == TaskTypeEnum.PrintYLInbound.ObjToInt() || task.TaskType == TaskTypeEnum.PrintYLBackInbound.ObjToInt())
                            {
                                var content = TakeFinish(task.CurrentAddress);
                                if (!content.Status)
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_TaskInfoService/PackaxisTaskService.cs
@@ -39,6 +39,12 @@
            _stationMangerRepository = stationMangerRepository;
            _unitOfWorkManage = unitOfWorkManage;
        }
        /// <summary>
        /// åˆ†é…ç åž›ä»»åŠ¡
        /// </summary>
        /// <param name="barCode"></param>
        /// <param name="deviceCode"></param>
        /// <returns></returns>
        public WebResponseContent ReqPackTask(string barCode,string deviceCode)
        {
            WebResponseContent content= new WebResponseContent();
@@ -139,6 +145,11 @@
            }
            return content;
        }
        /// <summary>
        /// ç åž›ç»“托并上传码垛工位码垛明细数据
        /// </summary>
        /// <param name="stationCode"></param>
        /// <returns></returns>
        public WebResponseContent BoxingInBound(string stationCode)
        {
            WebResponseContent content = new WebResponseContent();
@@ -186,11 +197,17 @@
            }
            return content;
        }
        /// <summary>
        /// ç åž›ä»»åŠ¡å®Œæˆ
        /// </summary>
        /// <param name="taskNum"></param>
        /// <param name="packaxisTask"></param>
        /// <returns></returns>
        public WebResponseContent TaskCompleted(int taskNum=0,Dt_PackaxisTask? packaxisTask=null)
        {
            try
            {
                _unitOfWorkManage.BeginTran();
                Dt_PackaxisTask? packaxisTaskFinish = null;
                if (packaxisTask!=null)
                {
@@ -211,15 +228,16 @@
                        StationPackId = stationPackInfo.id,
                        BoxCode = packaxisTaskFinish.BarCode
                    };
                    _unitOfWorkManage.BeginTran();
                    _stationPackInfoRepository.UpdateData(stationPackInfo);
                    _stationPackDetailRepository.AddData(stationPackDetail);
                    BaseDal.DeleteAndMoveIntoHty(packaxisTaskFinish, App.User?.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                    _unitOfWorkManage.CommitTran();
                }
                else
                {
                    return WebResponseContent.Instance.Error("未找到任务");
                }
                _unitOfWorkManage.CommitTran();
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -102,6 +102,7 @@
                }
            }
        }
        private readonly static object lockerCompleted = new object();
        /// <summary>
        /// ä»»åŠ¡å®Œæˆ
        /// </summary>
@@ -109,22 +110,25 @@
        {
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task != null)
                lock (lockerCompleted)
                {
                    task.TaskState = TaskStatusEnum.Finish.ObjToInt();
                    BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                    Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                    if (task != null)
                    {
                        task.TaskState = TaskStatusEnum.Finish.ObjToInt();
                        BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                    }
                    string? url = apiInfos.FirstOrDefault(x => x.ApiCode == APIEnum.FeedBackWMSTaskCompleted.ToString())?.ApiAddress;
                    if (string.IsNullOrEmpty(url))
                    {
                        _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"未找到WMS任务完成接口,请检查接口配置");
                        UpdateTaskExceptionMessage(taskNum, $"未找到WMS任务完成接口,请检查接口配置");
                        return WebResponseContent.Instance.Error($"{taskNum},未找到WMS任务完成接口,请检查接口配置");
                    }
                    string responseStr = HttpHelper.Get(url + "?taskNum=" + taskNum);
                    WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? WebResponseContent.Instance.Error($"{taskNum},未接收到任务完成返回值");
                    return content;
                }
                string? url = apiInfos.FirstOrDefault(x => x.ApiCode == APIEnum.FeedBackWMSTaskCompleted.ToString())?.ApiAddress;
                if (string.IsNullOrEmpty(url))
                {
                    _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"未找到WMS任务完成接口,请检查接口配置");
                    UpdateTaskExceptionMessage(taskNum, $"未找到WMS任务完成接口,请检查接口配置");
                    return WebResponseContent.Instance.Error($"{taskNum},未找到WMS任务完成接口,请检查接口配置");
                }
                string responseStr = HttpHelper.Get(url + "?taskNum=" + taskNum);
                WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(responseStr) ?? WebResponseContent.Instance.Error($"{taskNum},未接收到任务完成返回值");
                return content;
            }
            catch (Exception ex)
            {
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/³ÉÆ·²Ö/ConveyorLineJob_CPH.cs
@@ -89,133 +89,151 @@
                            List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
                            Task.Run(() =>
                            {
                                try
                                bool shouldRestart = true;
                                while (shouldRestart)
                                {
                                    Dt_StationManger? RequestIn = stationMangers.FirstOrDefault(x => x.StationDeviceCode == device.DeviceCode && x.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt());
                                    while (true)
                                    try
                                    {
                                        if (RequestIn != null)
                                        shouldRestart = false;
                                        Dt_StationManger? RequestIn = stationMangers.FirstOrDefault(x => x.StationDeviceCode == device.DeviceCode && x.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt());
                                        WriteError($"线程 {Thread.CurrentThread.ManagedThreadId}","开始执行");
                                        while (true)
                                        {
                                            DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == RequestIn.StationCode && x.DeviceProParamType == nameof(R_CLineCPHDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                                            DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == RequestIn.StationCode && x.DeviceProParamType == nameof(W_CLineCPHDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                                            if (deviceProRead != null && deviceProWrite != null)
                                            if (RequestIn != 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)
                                                DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == RequestIn.StationCode && x.DeviceProParamType == nameof(R_CLineCPHDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                                                DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == RequestIn.StationCode && x.DeviceProParamType == nameof(W_CLineCPHDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                                                if (deviceProRead != null && deviceProWrite != null)
                                                {
                                                    //判断是否任务已经存在
                                                    Dt_PackaxisTask packaxisTask = _packaxisTaskRepository.QueryFirst(x => x.BarCode == conveyorLineInfoRead.R_BoxCode.Trim() && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt());
                                                    if (packaxisTask != 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)
                                                    {
                                                        //写入执行数据
                                                        device.SetValue(W_CLineCPHDB.W_TaskNo, packaxisTask.PackTaskNum, RequestIn.StationCode);
                                                        device.SetValue(W_CLineCPHDB.W_Channel, packaxisTask.NextAddress, RequestIn.StationCode);
                                                        device.SetValue(W_CLineCPHDB.W_Long, packaxisTask.PackLength, RequestIn.StationCode);
                                                        device.SetValue(W_CLineCPHDB.W_Wide, packaxisTask.PackWidth, RequestIn.StationCode);
                                                        device.SetValue(W_CLineCPHDB.W_High, packaxisTask.PackHeight, RequestIn.StationCode);
                                                        device.SetValue(W_CLineCPHDB.W_TMID, packaxisTask.BarCode, RequestIn.StationCode);
                                                        device.SetValue(W_CLineCPHDB.W_Request, 1, RequestIn.StationCode);
                                                    }
                                                    else
                                                    {
                                                        #region
                                                        WebResponseContent webResponse = _packaxisTaskService.ReqPackTask(conveyorLineInfoRead.R_BoxCode.Trim(), RequestIn.StationDeviceCode);
                                                        if (webResponse.Status)
                                                        //判断是否任务已经存在
                                                        Dt_PackaxisTask packaxisTask = _packaxisTaskRepository.QueryFirst(x => x.BarCode == conveyorLineInfoRead.R_BoxCode.Trim() && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt());
                                                        if (packaxisTask != null)
                                                        {
                                                            Dt_PackaxisTask _PackaxisTask = webResponse.Data as Dt_PackaxisTask;
                                                            //写入执行数据
                                                            device.SetValue(W_CLineCPHDB.W_TaskNo, _PackaxisTask.PackTaskNum, RequestIn.StationCode);
                                                            device.SetValue(W_CLineCPHDB.W_Channel, _PackaxisTask.NextAddress.ObjToInt(), RequestIn.StationCode);
                                                            device.SetValue(W_CLineCPHDB.W_Long, _PackaxisTask.PackLength, RequestIn.StationCode);
                                                            device.SetValue(W_CLineCPHDB.W_Wide, _PackaxisTask.PackWidth, RequestIn.StationCode);
                                                            device.SetValue(W_CLineCPHDB.W_High, _PackaxisTask.PackHeight, RequestIn.StationCode);
                                                            device.SetValue(W_CLineCPHDB.W_TMID, _PackaxisTask.BarCode, RequestIn.StationCode);
                                                            device.SetValue(W_CLineCPHDB.W_TaskNo, packaxisTask.PackTaskNum, RequestIn.StationCode);
                                                            device.SetValue(W_CLineCPHDB.W_Channel, packaxisTask.NextAddress, RequestIn.StationCode);
                                                            device.SetValue(W_CLineCPHDB.W_Long, packaxisTask.PackLength, RequestIn.StationCode);
                                                            device.SetValue(W_CLineCPHDB.W_Wide, packaxisTask.PackWidth, RequestIn.StationCode);
                                                            device.SetValue(W_CLineCPHDB.W_High, packaxisTask.PackHeight, RequestIn.StationCode);
                                                            device.SetValue(W_CLineCPHDB.W_TMID, packaxisTask.BarCode, RequestIn.StationCode);
                                                            device.SetValue(W_CLineCPHDB.W_Request, 1, RequestIn.StationCode);
                                                            WebResponseContent content = _taskService.MESBoxCodeNotice(conveyorLineInfoRead.R_BoxCode.Trim());
                                                            if (content.Status)
                                                            {
                                                                WriteInfo(RequestIn.StationName, content.Message);
                                                            }
                                                            else
                                                            {
                                                                WriteError(RequestIn.StationName, content.Message);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            WriteError(RequestIn.StationName, webResponse.Message);
                                                            #region
                                                            WebResponseContent webResponse = _packaxisTaskService.ReqPackTask(conveyorLineInfoRead.R_BoxCode.Trim(), RequestIn.StationDeviceCode);
                                                            if (webResponse.Status)
                                                            {
                                                                Dt_PackaxisTask _PackaxisTask = webResponse.Data as Dt_PackaxisTask;
                                                                //写入执行数据
                                                                device.SetValue(W_CLineCPHDB.W_TaskNo, _PackaxisTask.PackTaskNum, RequestIn.StationCode);
                                                                device.SetValue(W_CLineCPHDB.W_Channel, _PackaxisTask.NextAddress.ObjToInt(), RequestIn.StationCode);
                                                                device.SetValue(W_CLineCPHDB.W_Long, _PackaxisTask.PackLength, RequestIn.StationCode);
                                                                device.SetValue(W_CLineCPHDB.W_Wide, _PackaxisTask.PackWidth, RequestIn.StationCode);
                                                                device.SetValue(W_CLineCPHDB.W_High, _PackaxisTask.PackHeight, RequestIn.StationCode);
                                                                device.SetValue(W_CLineCPHDB.W_TMID, _PackaxisTask.BarCode, RequestIn.StationCode);
                                                                device.SetValue(W_CLineCPHDB.W_Request, 1, RequestIn.StationCode);
                                                                WebResponseContent content = _taskService.MESBoxCodeNotice(conveyorLineInfoRead.R_BoxCode.Trim());
                                                                if (content.Status)
                                                                {
                                                                    WriteInfo(RequestIn.StationName, content.Message);
                                                                }
                                                                else
                                                                {
                                                                    WriteError(RequestIn.StationName, content.Message);
                                                                }
                                                            }
                                                            else
                                                            {
                                                                WriteError(RequestIn.StationName, webResponse.Message);
                                                            }
                                                            #endregion
                                                        }
                                                        #endregion
                                                    }
                                                }
                                                else
                                                {
                                                    WriteError(RequestIn.StationName, $"未找到设备子编号{RequestIn.StationCode}的协议信息");
                                                }
                                            }
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        WriteError($"线程 {Thread.CurrentThread.ManagedThreadId}", $"异常:{ex.Message}");
                                        Thread.Sleep(1500);
                                        shouldRestart = true;
                                    }
                                }
                            });
                            Task.Run(() =>
                            {
                                bool shouldRestart = true;
                                while (shouldRestart)
                                {
                                    try
                                    {
                                        shouldRestart = false;
                                        //获取所有码垛口
                                        List<Dt_StationManger> stationMangersMD = stationMangers.Where(x => x.StationDeviceCode == device.DeviceCode && x.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt()).ToList();
                                        WriteError($"线程 {Thread.CurrentThread.ManagedThreadId}", "开始执行");
                                        while (true)
                                        {
                                            if (stationMangersMD.Count > 0)
                                            {
                                                foreach (var item in stationMangersMD)
                                                {
                                                    DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_CLineCPHDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                                                    if (deviceProRead != null)
                                                    {
                                                        R_CLineCPHChannelInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_CLineCPHChannelInfo>(deviceProRead.DeviceProAddress);
                                                        //获取码垛口任务更新任务状态
                                                        if (conveyorLineInfoRead != null && conveyorLineInfoRead.R_State == 5 && conveyorLineInfoRead.R_TaskNo > 0)
                                                        {
                                                            Dt_PackaxisTask packaxisTask = _packaxisTaskRepository.QueryFirst(x => x.PackTaskNum == conveyorLineInfoRead.R_TaskNo && x.NextAddress == item.StationCode && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt() && x.DeviceCode == item.StationDeviceCode);
                                                            if (packaxisTask != null)
                                                            {
                                                                Dt_PackaxisTask packaxisTaskOld = _packaxisTaskRepository.QueryFirst(x => x.TaskState == TaskStatusEnum.MD_Executing.ObjToInt() && x.DeviceCode == item.StackerCraneCode);
                                                                if (packaxisTaskOld != null)
                                                                {
                                                                    WriteError(item.StationName, $"码垛{item.StackerCraneCode}正执行任务{packaxisTaskOld.PackTaskNum},无法继续下发");
                                                                }
                                                                else
                                                                {
                                                                    packaxisTask.CurrentAddress = item.StationCode;
                                                                    packaxisTask.NextAddress = packaxisTask.TargetAddress;
                                                                    packaxisTask.DeviceCode = item.StackerCraneCode;
                                                                    packaxisTask.TaskState = TaskStatusEnum.MD_Executing.ObjToInt();
                                                                    _packaxisTaskRepository.UpdateData(packaxisTask);
                                                                }
                                                            }
                                                            else
                                                            {
                                                                WriteError(item.StationName, $"未找到任务{conveyorLineInfoRead.R_TaskNo}信息");
                                                            }
                                                            Thread.Sleep(2000);
                                                        }
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                WriteError(RequestIn.StationName, $"未找到设备子编号{RequestIn.StationCode}的协议信息");
                                                WriteError(nameof(ConveyorLineJob_CPH), $"错误信息:未找到码垛口信息");
                                            }
                                        }
                                    }
                                }
                                catch (Exception ex)
                                {
                                    Thread.Sleep(1000);
                                }
                            });
                            Task.Run(() =>
                            {
                                try
                                {
                                    //获取所有码垛口
                                    List<Dt_StationManger> stationMangersMD = stationMangers.Where(x => x.StationDeviceCode == device.DeviceCode && x.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt()).ToList();
                                    while (true)
                                    catch (Exception ex)
                                    {
                                        if (stationMangersMD.Count > 0)
                                        {
                                            foreach (var item in stationMangersMD)
                                            {
                                                DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_CLineCPHDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                                                if (deviceProRead != null)
                                                {
                                                    R_CLineCPHChannelInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_CLineCPHChannelInfo>(deviceProRead.DeviceProAddress);
                                                    //获取码垛口任务更新任务状态
                                                    if (conveyorLineInfoRead != null && conveyorLineInfoRead.R_State == 5 && conveyorLineInfoRead.R_TaskNo > 0)
                                                    {
                                                        Dt_PackaxisTask packaxisTask = _packaxisTaskRepository.QueryFirst(x => x.PackTaskNum == conveyorLineInfoRead.R_TaskNo && x.NextAddress == item.StationCode && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt() && x.DeviceCode == item.StationDeviceCode);
                                                        if (packaxisTask != null)
                                                        {
                                                            Dt_PackaxisTask packaxisTaskOld = _packaxisTaskRepository.QueryFirst(x => x.TaskState == TaskStatusEnum.MD_Executing.ObjToInt() && x.DeviceCode == item.StackerCraneCode);
                                                            if (packaxisTaskOld != null)
                                                            {
                                                                WriteError(item.StationName, $"码垛{item.StackerCraneCode}正执行任务{packaxisTaskOld.PackTaskNum},无法继续下发");
                                                            }
                                                            else
                                                            {
                                                                packaxisTask.CurrentAddress = item.StationCode;
                                                                packaxisTask.NextAddress = packaxisTask.TargetAddress;
                                                                packaxisTask.DeviceCode = item.StackerCraneCode;
                                                                packaxisTask.TaskState = TaskStatusEnum.MD_Executing.ObjToInt();
                                                                _packaxisTaskRepository.UpdateData(packaxisTask);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            WriteError(item.StationName, $"未找到任务{conveyorLineInfoRead.R_TaskNo}信息");
                                                        }
                                                        Thread.Sleep(2000);
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            WriteError(nameof(ConveyorLineJob_CPH), $"错误信息:未找到码垛口信息");
                                        }
                                        WriteError($"线程 {Thread.CurrentThread.ManagedThreadId}", $"异常:{ex.Message}");
                                        Thread.Sleep(1500);
                                        shouldRestart = true;
                                    }
                                }
                                catch (Exception ex)
                                {
                                    Thread.Sleep(1000);
                                }
                            });
                            
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/Âë¶â/MDJob_CP.cs
@@ -82,7 +82,6 @@
                    {
                        foreach (var item in stationMangers)
                        {
                            short Allow = device.GetValue<R_MDDB, short>(R_MDDB.R_MDAllow, item.StackerCraneCode);
                            #region è¯»å–工位状态
                            short R_MDStatus1 = device.GetValue<R_MDDB, short>(R_MDDB.R_MDStatus1, item.StackerCraneCode);
ÏîÄ¿´úÂë/WMS/WMSClient/src/views/taskinfo/task.vue
@@ -275,6 +275,13 @@
        width: 100,
        align: "left",
      },
      {
        field: "taskLength",
        title: "物料幅宽",
        type: "int",
        width: 100,
        align: "left",
      },
    ]);
    const detail = ref({
      cnName: "#detailCnName",
ÏîÄ¿´úÂë/WMS/WMSClient/src/views/taskinfo/task_hty.vue
@@ -274,6 +274,13 @@
        width: 100,
        align: "left",
      },
      {
        field: "taskLength",
        title: "物料幅宽",
        type: "int",
        width: 100,
        align: "left",
      }
    ]);
    const detail = ref({
      cnName: "#detailCnName",
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Common/StockEnum/OutLockStockStatusEnum.cs
@@ -14,6 +14,7 @@
    /// 2:出库完成<br/>
    /// 3:拣选完成<br/>
    /// 99:撤销<br/>
    /// 100:关闭<br/>
    /// </summary>
    public enum OutLockStockStatusEnum
    {
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs
@@ -82,10 +82,16 @@
        OutCarton = 360,
        /// <summary>
        /// äºŒæ¥¼çº¸ç®±ä¾›æ–™
        /// </summary>
        [Description("纸杯纸片供料")]
        OutScrapsPaper = 370,
        /// <summary>
        /// æ— çººå¸ƒæ·‹è†œå‡ºåº“
        /// </summary>
        [Description("无纺布淋膜出库")]
        OutWFBLM = 370,
        OutWFBLM = 380,
        /// <summary>
        /// å†²åˆ‡åŒºå‡ºåº“
@@ -145,15 +151,33 @@
        /// åˆ†åˆ‡åŠæˆå“å…¥åº“
        /// </summary>
        [Description("分切半成品入库")]
        PartOffInbound = 695,
        PartOffInbound = 680,
        /// <summary>
        /// æ¨¡åˆ‡åŠæˆå“å…¥åº“
        /// </summary>
        [Description("模切半成品入库")]
        DieCutInbound = 685,
        /// <summary>
        /// å†²åˆ‡åŠæˆå“å…¥åº“
        /// </summary>
        [Description("冲切半成品入库")]
        PunchingInbound = 690,
        /// <summary>
        /// æ— çººå¸ƒåŠæˆå“å…¥åº“
        /// </summary>
        [Description("无纺布半成品入库")]
        WFBYLInbound = 700,
        WFBYLInbound = 695,
        /// <summary>
        /// æ— çººå¸ƒæ·‹è†œåŠæˆå“å…¥åº“
        /// </summary>
        [Description("无纺布淋膜半成品入库")]
        WFBLMYLInbound = 700,
        /// <summary>
        /// çº¸å¼ æ·‹è†œåŠæˆå“å…¥åº“
        /// </summary>
        [Description("纸张淋膜半成品入库")]
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_DTO/ERP/BSTPickInfoDTO.cs
@@ -41,7 +41,7 @@
        /// é¢†ç”¨å‘˜å·¥
        /// </summary>
        [PropertyValidate("领用员工", NotNullAndEmpty = true)]
        public long EmployeeName { get; set; }
        public string EmployeeName { get; set; }
        /// <summary>
        /// é¢†ç”¨æ˜Žç»†
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IStockService/IProStockViewService.cs
@@ -13,5 +13,6 @@
        PageGridData<ProStockViewDTO> GetPageData(PageDataOptions options);
        object GetDetailPage(PageDataOptions pageData);
        WebResponseContent Export(PageDataOptions options);
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_IStockService/IStockInfoService.cs
@@ -34,6 +34,11 @@
        /// </summary>
        List<Dt_StockInfo> GetUseableStocks(string materielCode, decimal width, int warehoseId);
        /// <summary>
        /// èŽ·å–è€åŽ‚ç¼“å­˜å¯ç”¨åº“å­˜
        /// </summary>
        /// <returns></returns>
        List<Dt_StockInfo> GetUseOldCacheStocks(string materielCode, decimal width);
        /// <summary>
        /// èŽ·å–å¯ä½¿ç”¨åº“å­˜
        /// </summary>
        List<Dt_StockInfo> GetUseableStocks(string materielCode, int warehoseId);
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/MESProInOrderInfoService.cs
@@ -53,7 +53,7 @@
                List<Dt_MESProInOrderInfo>? mESProInOrderInfos = BaseDal.QueryData(x => x.ProductOrderNo == orderStopDTO.ProductOrderNo && x.MESProInStatus != InOrderStatusEnum.关闭.ObjToInt());
                if (mESProInOrderInfos == null || mESProInOrderInfos.Count <= 0)
                {
                    return content.Error($"成品或半成品工单{nameof(MESOrderStopDTO.ProductOrderNo)}{orderStopDTO.ProductOrderNo}不存在或已关闭");
                    return content.Error($"成品工单{nameof(MESOrderStopDTO.ProductOrderNo)}{orderStopDTO.ProductOrderNo}不存在或已关闭");
                }
                mESProInOrderInfos.ForEach(x =>
                {
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_InboundService/ReturnBSTOrderService.cs
@@ -4,6 +4,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.CommonEnum;
using WIDESEA_Common.MaterielEnum;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.StockEnum;
@@ -48,134 +49,99 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                List<Dt_ReturnBSTOrder> OldreturnBSTOrders = BaseDal.Db.Queryable<Dt_ReturnBSTOrder>().Includes(x => x.Details).ToList();
                List<Dt_StockInfo> ExiststockInfos = _stockInfoRepository.QueryData(x=>x.WarehouseId==WarehouseEnum.LLDOldCache.ObjToInt());
                //新增
                List<BSTReturnOrderDTO> bSTReturnOrderDTOsAdd = bSTReturnOrderDTOs.Where(x => x.Way == 1).ToList();
                List<BSTReturnOrderDTOItem>? bSTReturnOrderDTOItemsAdd = null;
                //修改
                List<BSTReturnOrderDTO> bSTReturnOrderDTOsUpdate = bSTReturnOrderDTOs.Where(x => x.Way == 2).ToList();
                //删除
                List<BSTReturnOrderDTO> bSTReturnOrderDTOsDel = bSTReturnOrderDTOs.Where(x => x.Way == 3).ToList();
                List<BSTReturnOrderDTOItem>? bSTReturnOrderDTOItemsUp = null;
                //获取所有物料 
                List<Dt_MaterielInfo> materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt() && x.MaterielInvOrgId == MaterielInvOrgEnum.老厂.ObjToInt() && x.MaterialSourceId != 0);
                List<Dt_ReturnBSTOrder> returnAddBSTOrders = new List<Dt_ReturnBSTOrder>();
                List<Dt_ReturnBSTOrder> returnUpdateBSTOrders  = new List<Dt_ReturnBSTOrder>();
                List<Dt_ReturnBSTOrder> returnDeleteBSTOrders = new List<Dt_ReturnBSTOrder>();
                List<Dt_ReturnBSTOrderDetail> returnBSTOrderDetailsDel = new List<Dt_ReturnBSTOrderDetail>();
                if (bSTReturnOrderDTOsAdd!=null && bSTReturnOrderDTOsAdd.Count>0)
                {
                    bSTReturnOrderDTOItemsAdd = bSTReturnOrderDTOsAdd.SelectMany(x => x.BstPaperWreturnDetails).ToList();
                }
                if (bSTReturnOrderDTOsUpdate != null && bSTReturnOrderDTOsUpdate.Count > 0)
                {
                    bSTReturnOrderDTOItemsUp = bSTReturnOrderDTOsUpdate.SelectMany(x => x.BstPaperWreturnDetails).ToList();
                }
                List<Dt_StockInfo> stockInfosUpdate = new List<Dt_StockInfo>();
                //新增
                if (bSTReturnOrderDTOsAdd.Count > 0)
                if (bSTReturnOrderDTOItemsAdd!=null && bSTReturnOrderDTOItemsAdd.Count > 0)
                {
                    //判断单据
                    Dt_ReturnBSTOrder? ExistAddReturn = OldreturnBSTOrders.FirstOrDefault(x => bSTReturnOrderDTOsAdd.Select(x => x.PaperWreturnId).Contains(x.PaperWreturnId));
                    if (ExistAddReturn != null)
                    {
                        return content.Error($"退料单{nameof(BSTReturnOrderDTO.PaperWreturnId)}:{ExistAddReturn.PaperWreturnId}已存在");
                    }
                    List<BSTReturnOrderDTOItem> bSTReturnOrderDTOItemsAdd = bSTReturnOrderDTOsAdd.SelectMany(x => x.BstPaperWreturnDetails).ToList();
                    //判断是否存在物料
                    BSTReturnOrderDTOItem? bSTReturnOrderDTOItem = bSTReturnOrderDTOItemsAdd.FirstOrDefault(x => !materielInfos.Select(x => x.MaterialSourceId).Contains(x.MaterialId));
                    if (bSTReturnOrderDTOItem != null)
                    {
                        return content.Error($"退料{nameof(bSTReturnOrderDTOItem.Barcode)}:{bSTReturnOrderDTOItem.Barcode}物料{nameof(BSTReturnOrderDTOItem.MaterialId)}:{bSTReturnOrderDTOItem.MaterialId}不存在");
                    }
                    //验证退料条码是否在库存中
                    var ExiststockInfo = bSTReturnOrderDTOItemsAdd.FirstOrDefault(x => !ExiststockInfos.Select(x => x.PalletCode).Contains(x.Barcode));
                    if (ExiststockInfo != null)
                    foreach (var item in bSTReturnOrderDTOItemsAdd)
                    {
                        return content.Error($"退料条码{nameof(ExiststockInfo.Barcode)}:{ExiststockInfo.Barcode}物料未在老厂暂存区");
                    }
                    //获取对应库存修正库存数量
                    List<Dt_StockInfo> returnStockinfos = ExiststockInfos.Where(x => bSTReturnOrderDTOItemsAdd.Select(x => x.Barcode).Contains(x.PalletCode)).ToList();
                    foreach (var item in bSTReturnOrderDTOsAdd)
                    {
                        if (bSTReturnOrderDTOsUpdate.FirstOrDefault(x => x.PaperWreturnId == item.PaperWreturnId) != null)
                        //将不存在的库存跳过
                        Dt_StockInfo? stockReturn = ExiststockInfos.FirstOrDefault(x => x.PalletCode == item.Barcode);
                        if (stockReturn == null)
                        {
                            continue;
                        }
                        List<Dt_ReturnBSTOrderDetail> bSTOrderDetails = item.BstPaperWreturnDetails.Select(x => _mapper.Map<Dt_ReturnBSTOrderDetail>(x)).ToList();
                        Dt_ReturnBSTOrder returnBSTOrder = _mapper.Map<Dt_ReturnBSTOrder>(item);
                        returnBSTOrder.Details = bSTOrderDetails;
                        foreach (var detail in bSTOrderDetails)
                        if (bSTReturnOrderDTOItemsUp!=null && bSTReturnOrderDTOItemsUp.FirstOrDefault(x => x.Barcode == item.Barcode) != null)
                        {
                            Dt_StockInfo stockReturn = stockInfosUpdate.FirstOrDefault(x => x.PalletCode == detail.Barcode);
                            stockReturn.MaterielId = detail.MaterialId;
                            stockReturn.MaterielCode = detail.MaterialNo;
                            stockReturn.MaterielWide=detail.MaterialWide;
                            stockReturn.MaterielThickness = detail.MaterialThick;
                            stockReturn.MaterielWeight = detail.Qty;
                            stockReturn.StockLength = detail.ProcurementLength;
                            stockReturn.StockStatus = StockStatusEmun.老厂退料暂存.ObjToInt();
                            stockInfosUpdate.Add(stockReturn);
                            continue;
                        }
                        returnAddBSTOrders.Add(returnBSTOrder);
                        stockReturn.MaterielId = item.MaterialId;
                        stockReturn.MaterielCode = item.MaterialNo;
                        stockReturn.MaterielWide = item.W;
                        stockReturn.MaterielThickness = item.Thick;
                        stockReturn.MaterielWeight = item.Qty;
                        stockReturn.StockLength = item.ProcurementLength;
                        stockReturn.StockOutLength = 0;
                        stockReturn.IsPick = WhetherEnum.False.ObjToInt();
                        stockReturn.IsFull = WhetherEnum.True.ObjToInt();
                        stockReturn.StockStatus = StockStatusEmun.老厂退料暂存.ObjToInt();
                        stockInfosUpdate.Add(stockReturn);
                    }
                }
                //更新
                if (bSTReturnOrderDTOsUpdate.Count > 0)
                if (bSTReturnOrderDTOItemsUp != null && bSTReturnOrderDTOItemsUp.Count > 0)
                {
                    //存在的采购单
                    List<Dt_ReturnBSTOrder>? ExistreturnBSTOrders = OldreturnBSTOrders.Where(x => bSTReturnOrderDTOsUpdate.Select(x => x.PaperWreturnId).Contains(x.PaperWreturnId)).Distinct().ToList();
                    foreach (var item in bSTReturnOrderDTOsUpdate)
                    //获取对应库存修正库存数量
                    List<Dt_StockInfo> returnStockinfos = ExiststockInfos.Where(x => bSTReturnOrderDTOItemsUp.Select(x => x.Barcode).Contains(x.PalletCode)).ToList();
                    foreach (var item in bSTReturnOrderDTOItemsUp)
                    {
                        Dt_ReturnBSTOrder? returnBSTOrderUpdate = ExistreturnBSTOrders.FirstOrDefault(x => x.PaperWreturnId == item.PaperWreturnId);
                        //如果订单已存在则进行更改
                        if (returnBSTOrderUpdate != null)
                        Dt_StockInfo? returnUpdate = stockInfosUpdate.FirstOrDefault(x => x.PalletCode == item.Barcode);
                        //如果修改已存在,在原基础上更新
                        if (returnUpdate != null)
                        {
                            if (returnBSTOrderUpdate.ReturnOrderStatus != InOrderStatusEnum.未开始.ObjToInt())
                            {
                                return content.Error($"退料{nameof(returnBSTOrderUpdate.PaperWreturnId)}:{returnBSTOrderUpdate.PaperWreturnId}订单退料入库中,不可更改");
                            }
                            returnBSTOrderDetailsDel.AddRange(returnBSTOrderUpdate.Details);
                            //更新
                            List<Dt_ReturnBSTOrderDetail> bSTOrderDetails = item.BstPaperWreturnDetails.Select(x => _mapper.Map<Dt_ReturnBSTOrderDetail>(x)).ToList();
                            bSTOrderDetails.ForEach(x =>
                            {
                                x.ReturnBSTOrderId = returnBSTOrderUpdate.Id;
                            });
                            returnBSTOrderUpdate.Details = bSTOrderDetails;
                            returnBSTOrderUpdate.PaperWreturnId = item.PaperWreturnId;
                            returnBSTOrderUpdate.PaperWreturnNo = item.PaperWreturnNo;
                            returnBSTOrderUpdate.EmployeeName = item.EmployeeName;
                            returnBSTOrderUpdate.WreturnDate = DateTimeOffset.FromUnixTimeMilliseconds(item.WreturnDate).DateTime;
                            returnUpdateBSTOrders.Add(returnBSTOrderUpdate);
                            returnUpdate.MaterielThickness = item.Thick;
                            returnUpdate.MaterielWeight = item.Qty;
                            returnUpdate.StockLength = item.ProcurementLength;
                        }
                        else //如果不存在则进行新增
                        else
                        {
                            List<Dt_ReturnBSTOrderDetail> bSTOrderDetails = item.BstPaperWreturnDetails.Select(x => _mapper.Map<Dt_ReturnBSTOrderDetail>(x)).ToList();
                            Dt_ReturnBSTOrder returnBSTOrder = _mapper.Map<Dt_ReturnBSTOrder>(item);
                            returnBSTOrder.Details = bSTOrderDetails;
                            foreach (var detail in bSTOrderDetails)
                            //将不存在的库存跳过
                            Dt_StockInfo? stockReturn = ExiststockInfos.FirstOrDefault(x => x.PalletCode == item.Barcode);
                            if (stockReturn == null)
                            {
                                Dt_StockInfo stockReturn = stockInfosUpdate.FirstOrDefault(x => x.PalletCode == detail.Barcode);
                                stockReturn.MaterielId = detail.MaterialId;
                                stockReturn.MaterielCode = detail.MaterialNo;
                                stockReturn.MaterielWide = detail.MaterialWide;
                                stockReturn.MaterielThickness = detail.MaterialThick;
                                stockReturn.MaterielWeight = detail.Qty;
                                stockReturn.StockLength = detail.ProcurementLength;
                                stockReturn.StockStatus = StockStatusEmun.老厂退料暂存.ObjToInt();
                                stockInfosUpdate.Add(stockReturn);
                                continue;
                            }
                            returnAddBSTOrders.Add(returnBSTOrder);
                            stockReturn.MaterielId = item.MaterialId;
                            stockReturn.MaterielCode = item.MaterialNo;
                            stockReturn.MaterielWide = item.W;
                            stockReturn.MaterielThickness = item.Thick;
                            stockReturn.MaterielWeight = item.Qty;
                            stockReturn.StockLength = item.ProcurementLength;
                            stockReturn.StockOutLength = 0;
                            stockReturn.IsPick = WhetherEnum.False.ObjToInt();
                            stockReturn.IsFull = WhetherEnum.True.ObjToInt();
                            stockReturn.StockStatus = StockStatusEmun.老厂退料暂存.ObjToInt();
                            stockInfosUpdate.Add(stockReturn);
                        }
                    }
                }
                //删除
                if (bSTReturnOrderDTOsDel.Count > 0)
                {
                }
                //更新数据
                _unitOfWorkManage.BeginTran();
                BaseDal.Db.InsertNav(returnAddBSTOrders).Include(x => x.Details).ExecuteCommand();
                _stockInfoRepository.UpdateData(stockInfosUpdate);
                _returnBSTOrderDetailRepository.DeleteData(returnBSTOrderDetailsDel);
                BaseDal.Db.UpdateNav(returnUpdateBSTOrders).Include(x => x.Details).ExecuteCommand();
                _unitOfWorkManage.CommitTran();
                content.OK("接收成功");
            }
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Model/Models/TaskInfo/Dt_Task.cs
@@ -196,7 +196,7 @@
        /// </summary>
        [ImporterHeader(Name = "物料数量")]
        [ExporterHeader(DisplayName = "物料数量")]
        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "物料数量")]
        [SugarColumn(IsNullable = true, ColumnDescription = "物料数量")]
        public decimal Quantity { get; set; }
    }
}
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutSGOrderDetailService.cs
@@ -5,8 +5,10 @@
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Helper;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
using WIDESEA_IOutboundRepository;
@@ -72,8 +74,10 @@
            foreach (var item in groupDetails)
            {
                decimal needQuantity = item.XqLen;
                //获取可用库存
                List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.GetUseableStocks(item.MaterialNo, item.Width, outBSTOrders.FirstOrDefault().WarehouseId).Where(x=>!outStocks.Select(x=>x.PalletCode).Contains(x.PalletCode)).ToList();
                //获取老厂缓存可用库存
                List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.GetUseOldCacheStocks(item.MaterialNo, item.Width) ?? new List<Dt_StockInfo>();
                //获取立库可用库存
                stockInfos.AddRange(_stockService.StockInfoService.GetUseableStocks(item.MaterialNo, item.Width, outBSTOrders.FirstOrDefault().WarehouseId).Where(x=>!outStocks.Select(x=>x.PalletCode).Contains(x.PalletCode)).ToList());
                if (!stockInfos.Any())
                {
                    continue;
@@ -132,7 +136,7 @@
                    
                }
                locationInfos.AddRange(_basicRepository.LocationInfoRepository.GetLocationInfos(outStocks.Select(x => x.LocationCode).ToList()));
                locationInfos.AddRange(_basicRepository.LocationInfoRepository.GetLocationInfos(outStocks.Where(x=>!x.LocationCode.IsNullOrEmpty() && !locationInfos.Select(x=>x.LocationCode).Contains(x.LocationCode)).Select(x => x.LocationCode).ToList()));
            }
            return (outStocks, outboundOrderDetails, outStockLockInfos, locationInfos);
@@ -144,6 +148,10 @@
        {
            try
            {
                stockInfos.Where(x => x.LocationCode.IsNullOrEmpty()).ToList().ForEach(x =>
                {
                    x.StockStatus = StockStatusEmun.出库完成.ObjToInt();
                });
                _stockService.StockInfoService.Repository.UpdateData(stockInfos);
                BaseDal.UpdateData(outboundOrderDetails);
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_OutboundService/OutStockLockInfoService.cs
@@ -136,7 +136,7 @@
                OrderType=OutOrderTypeEnum.OutSGPick.ObjToInt(),
                MaterielCode = outSGOrderDetail.MaterialNo,
                BatchNo = outSGOrderDetail.BoardFluteNo, //楞别批次
                LocationCode = outStock.LocationCode,
                LocationCode = outStock.LocationCode.IsNullOrEmpty() ? "老厂缓存区": outStock.LocationCode,
                MaterielName = outStock.MaterielName,
                OrderDetailId = outSGOrderDetail.Id,
                OrderNo = outSGOrder.OrderId,
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_StockService/StockInfoService.cs
@@ -206,6 +206,14 @@
            return BaseDal.GetStockInfos(materielCode, width, locationCodes);
        }
        /// <summary>
        /// èŽ·å–è€åŽ‚ç¼“å­˜å¯ç”¨åº“å­˜
        /// </summary>
        /// <returns></returns>
        public List<Dt_StockInfo> GetUseOldCacheStocks(string materielCode, decimal width)
        {
            return Db.Queryable<Dt_StockInfo>().Where(x => x.MaterielCode.StartsWith(materielCode) && x.StockStatus == StockStatusEmun.老厂退料暂存.ObjToInt() && x.MaterielWide == width && x.StockOutLength <= 0 && x.StockLength > 0).OrderBy(x => x.CreateDate).ToList();
        }
        public List<Dt_StockInfo> GetUseableStocks(string materielCode, int warehoseId)
        {
            List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehoseId);
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/MesTaskService.cs
@@ -244,13 +244,9 @@
                            return content.Error($"未找到条码{returnMaterial.BarCode}物料信息");
                        }
                        //判断
                        if (returnMaterial.Thickness <= 0 && materielInfo.WarehouseId==WarehouseEnum.LLDYL.ObjToInt())
                        if ((returnMaterial.Thickness <= 0 || returnMaterial.Wide <= 0)&& materielInfo.WarehouseId==WarehouseEnum.LLDYL.ObjToInt())
                        {
                            return content.Error($"物料{returnMaterial.MaterialCode}条码{returnMaterial.BarCode}直径不能小于0");
                        }
                        if (returnMaterial.Wide <= 0 && materielInfo.WarehouseId == WarehouseEnum.LLDYL.ObjToInt())
                        {
                            return content.Error($"物料{returnMaterial.MaterialCode}条码{returnMaterial.BarCode}直径不能小于0");
                            return content.Error($"物料{returnMaterial.MaterialCode}条码{returnMaterial.BarCode}直径或幅宽不能小于0");
                        }
                        Dt_StockInfo? stockInfoOld = stockInfosOld.FirstOrDefault(x => x.PalletCode == returnMaterial.BarCode);
                        if (stockInfoOld != null)
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService.cs
@@ -194,13 +194,24 @@
                    {
                        return content;
                    }
                    List<int> ints = _outboundRepository.OutSGOrderDetailRepository.QueryData(x=>x.Id>outDetailId).Select(x=>x.Id).ToList();
                    int[] reseponse= new int[ints.Count];
                    for (int i = 0; i < ints.Count; i++)
                    //获取所有的出库详情判断是否满足出库量小于5万且小于17卷
                    List<Dt_OutStockLockInfo> outStockLockInfos = _outboundRepository.OutStockLockInfoRepository.QueryData(x=>x.OrderType==OutOrderTypeEnum.OutSGPick.ObjToInt() && x.Status<=OutLockStockStatusEnum.关闭.ObjToInt());
                    decimal sumAssignQty = outStockLockInfos.Sum(x => x.AssignQuantity);
                    int outCount= outStockLockInfos.Select(x=>x.PalletCode).Distinct().Count();
                    if (sumAssignQty < AppSettings.Get("OutSGLength").ObjToInt() && outCount < AppSettings.Get("OutSGCount").ObjToInt())
                    {
                        reseponse[i] = ints[i];
                        List<int> ints = _outboundRepository.OutSGOrderDetailRepository.QueryData(x => x.Id > outDetailId).Select(x => x.Id).ToList();
                        int[] reseponse = new int[ints.Count];
                        for (int i = 0; i < ints.Count; i++)
                        {
                            reseponse[i] = ints[i];
                        }
                        content.Message = CreateSGOutboundTasks(reseponse).Message;
                    }
                    content.Message = CreateSGOutboundTasks(reseponse).Message;
                    else
                    {
                        return content.Error($"当前出库量:{sumAssignQty},当前出库卷数:{outCount},不满足小于5万且小于17卷出库条件");
                    }
                }
            }
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs
@@ -197,7 +197,7 @@
                        UpdateStock(stockInfoOld, weight, thickness, wide);
                        return content.OK($"临时入库{stockInfoOld.RfidCode}");
                    }
                    else if (stockInfoOld != null && stockInfoOld.MaterielInvOrgId == MaterielInvOrgEnum.老厂.ObjToInt() && stockInfoOld.StockStatus == StockStatusEmun.出库完成.ObjToInt() && stockInfoOld.IsPick==WhetherEnum.False.ObjToInt() && stationCode.IsNotEmptyOrNull())
                    else if (stockInfoOld != null && stockInfoOld.MaterielInvOrgId == MaterielInvOrgEnum.老厂.ObjToInt() && stockInfoOld.StockStatus == StockStatusEmun.出库完成.ObjToInt() &&  stationCode.IsNotEmptyOrNull())
                    {
                        decimal oldQty = stockInfoOld.StockLength;
                        //调用更新退料库存及上报重量
@@ -348,17 +348,17 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                if (thickness < 400)
                {
                    throw new Exception($"RFID{stockInfoOld.RfidCode}条码{stockInfoOld.PalletCode}直径小于400mm");
                }
                BSTResponse<BSTStockInfoDTO> bSTResponse = _invokeERPService.BSTStockAsync(stockInfoOld.PalletCode).DeserializeObject<BSTResponse<BSTStockInfoDTO>>();
                if (bSTResponse.Code == 500)
                {
                    throw new Exception($"未找到条码{stockInfoOld.PalletCode}一期ERP库存不存在");
                }
                BSTStockInfoDTO bSTStockInfoDTO = bSTResponse.Data ?? throw new Exception($"一期ERP未返回{stockInfoOld.PalletCode}的库存信息");
                if (stockInfoOld.StockStatus == StockStatusEmun.老厂退料暂存.ObjToInt())
                {
                    stockInfoOld.IsPick = WhetherEnum.False.ObjToInt();
                }
                stockInfoOld.IsPick = WhetherEnum.False.ObjToInt();
                decimal stockLength = bSTStockInfoDTO.StockMeter;
                if (weight != bSTStockInfoDTO.Qty && weight < stockInfoOld.InitialWeight)
                {
@@ -390,10 +390,6 @@
                stockInfoOld.StockLength = stockLength;
                stockInfoOld.StockOutLength = 0;
                stockInfoOld.WarehouseId = WarehouseEnum.LLDYL.ObjToInt();
                if (thickness < 400)
                {
                    throw new Exception($"RFID{stockInfoOld.RfidCode}条码{stockInfoOld.PalletCode}直径小于400mm");
                }
                content.OK("成功",data:stockInfoOld);
            }
            catch (Exception ex)
@@ -926,22 +922,6 @@
                        bool RoadwayType = stockInfo.PalletType == LocationTypeEnum.MediumPallet.ObjToInt();
                        //获取分配
                        List<LocationCount> locationCounts = Db.Queryable<Dt_LocationInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() && x.RoadwayNo.Contains("YLDual") && (stockInfo.PalletType == LocationTypeEnum.MediumPallet.ObjToInt() ? x.LocationType == LocationTypeEnum.MediumPallet.ObjToInt() : x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt())).GroupBy(x => x.RoadwayNo).Select(x => new LocationCount { RoadwayNo = x.RoadwayNo, Count = SqlFunc.AggregateCount(x) }).OrderBy(x => x.RoadwayNo).ToList();
                        if (RoadwayType)
                        {
                            foreach (var item in locationCounts)
                            {
                                if (item.RoadwayNo.Contains("YLDual"))
                                {
                                    int count = Db.Queryable<Dt_LocationInfo>()
                                    .Where(x => x.WarehouseId == warehouse.WarehouseId
                                        && x.LocationStatus == (int)LocationStatusEnum.Free
                                        && x.EnableStatus == (int)EnableStatusEnum.Normal
                                        && x.LocationType == LocationTypeEnum.MediumPallet.ObjToInt()
                                        && x.RoadwayNo == item.RoadwayNo).Count();
                                    item.Count = count;
                                }
                            }
                        }
                        roadwayNo = HandleRoadway(locationCounts, warehouse, ErrorRoadway ? roadways : null);
                    }
                }
@@ -1842,7 +1822,7 @@
                    return content.Error("传入信息为空");
                }
                //获取所有成品,半成品信息
                List<Dt_MESProInOrderInfo> proInOrderInfos = _inboundRepository.MESProInOrderInfoRepository.QueryData();
                List<Dt_MESProInOrderInfo> proInOrderInfosOld = _inboundRepository.MESProInOrderInfoRepository.QueryData();
                //获取所有物料信息
                List<Dt_MaterielInfo> materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.MaterielInvOrgId == MaterielInvOrgEnum.新厂.ObjToInt());
@@ -1855,12 +1835,12 @@
                List<Dt_AGVStationInfo> aGVStationInfos = _basicRepository.AGVStationInfoRepository.QueryData(x => !string.IsNullOrEmpty(x.MESPointCode));
                //判断是否存在重复
                MESProInDTO? proInDTO = proInDTOs.FirstOrDefault(x => x.IsMantissa == false && proInOrderInfos.Select(x => x.BarCode).Contains(x.BarCode));
                MESProInDTO? proInDTO = proInDTOs.FirstOrDefault(x => x.IsMantissa == false && proInOrderInfosOld.Select(x => x.BarCode).Contains(x.BarCode));
                if (proInDTO != null)
                {
                    return content.Error($"{proInDTO.ProductOrderNo}生产工单{proInDTO.BarCode}条码已存在");
                }
                Dt_MESProInOrderInfo? proInOrderInfo = proInOrderInfos.FirstOrDefault(x => x.MESProInStatus == InOrderStatusEnum.关闭.ObjToInt() && proInDTOs.Select(x => x.ProductOrderNo).Distinct().Contains(x.ProductOrderNo));
                Dt_MESProInOrderInfo? proInOrderInfo = proInOrderInfosOld.FirstOrDefault(x => x.MESProInStatus == InOrderStatusEnum.关闭.ObjToInt() && proInDTOs.Select(x => x.ProductOrderNo).Distinct().Contains(x.ProductOrderNo));
                if (proInOrderInfo != null)
                {
                    return content.Error($"{proInOrderInfo.ProductOrderNo}生产工单已关闭");
@@ -1869,6 +1849,11 @@
                foreach (var item in proInDTOs)
                {
                    Dt_MaterielInfo materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterialCode);
                    //判断
                    if ((item.Thickness <= 0 || item.Wide <= 0) && materielInfo.WarehouseId == WarehouseEnum.LLDYL.ObjToInt())
                    {
                        return content.Error($"物料{item.MaterialCode}条码{item.BarCode}直径或幅宽不能小于0");
                    }
                    if (materielInfo.MaterielSourceType != MaterielTypeEnum.成品.ObjToInt())
                    {
                        Dt_AGVStationInfo? CheckPointCode = aGVStationInfos.FirstOrDefault(x => x.MESPointCode == item?.PointCode);
@@ -1884,6 +1869,11 @@
                    Dt_MESProInOrderInfo AddproInOrderInfo = _mapper.Map<Dt_MESProInOrderInfo>(item);
                    AddproInOrderInfo.WarehouseId = materielInfo.WarehouseId;
                    AddproInOrderInfo.MESProOrderType = materielInfo.MaterielSourceType;
                    //小于550幅宽则不能搬运
                    if (item.Wide < 550 && materielInfo.WarehouseId == WarehouseEnum.LLDYL.ObjToInt())
                    {
                        AddproInOrderInfo.MESProInStatus=InOrderStatusEnum.入库完成.ObjToInt();
                    }
                    AddMESProInOrders.Add(AddproInOrderInfo);
                }
                List<Dt_Task> tasks = new List<Dt_Task>();
@@ -1910,21 +1900,26 @@
                                PB_INV_PRODUCT_IN= pRODUCT_INItems
                            }) ?? throw new Exception("半成品入库接口请求失败");
                    //生成半成品入库
                    WebResponseContent webResponse = SemiProInbound(AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.半成品.ObjToInt()).ToList());
                    if (!webResponse.Status)
                    List<Dt_MESProInOrderInfo> semiProInOrderInfos = mESProInOrderInfos.Where(x => x.MESProInStatus == InOrderStatusEnum.未开始.ObjToInt()).ToList();
                    if (semiProInOrderInfos.Count>0)
                    {
                        throw new Exception(webResponse.Message);
                    }
                    tasks = webResponse.Data as List<Dt_Task>;
                    WebResponseContent taskResponse = PushTasksToWCS(tasks);
                    if (!taskResponse.Status)
                    {
                        throw new Exception(taskResponse.Message);
                        WebResponseContent webResponse = SemiProInbound(AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.半成品.ObjToInt()).ToList());
                        if (!webResponse.Status)
                        {
                            throw new Exception(webResponse.Message);
                        }
                        tasks = webResponse.Data as List<Dt_Task>;
                        WebResponseContent taskResponse = PushTasksToWCS(tasks);
                        if (!taskResponse.Status)
                        {
                            throw new Exception(taskResponse.Message);
                        }
                    }
                }
                if (AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.成品.ObjToInt()).Count() > 0)
                List<Dt_MESProInOrderInfo> proInOrderInfos = AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.成品.ObjToInt()).ToList();
                if (proInOrderInfos.Count > 0)
                {
                    WebResponseContent webResponse = PushPackaxisTaskToWCS(AddMESProInOrders.Where(x => x.MESProOrderType == MaterielTypeEnum.成品.ObjToInt()).ToList());
                    WebResponseContent webResponse = PushPackaxisTaskToWCS(proInOrderInfos);
                    if (!webResponse.Status)
                    {
                        throw new Exception(webResponse.Message);
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs
@@ -741,7 +741,7 @@
            if (result.Item1 != null && result.Item1.Count > 0)
            {
                //获取任务
                tasks = GetTasks(result.Item1, TaskTypeEnum.OldYLOutbound);
                tasks = GetTasks(result.Item1.Where(x=> !x.LocationCode.IsNullOrEmpty()).ToList(), TaskTypeEnum.OldYLOutbound);
                result.Item2.ForEach(x =>
                {
                    if (result.Item3.FirstOrDefault(t=>t.OrderDetailId==x.Id)!=null)
@@ -751,7 +751,14 @@
                });
                result.Item3.ForEach(x =>
                {
                    x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                    if (x.LocationCode== "老厂缓存区")
                    {
                        x.Status = OutLockStockStatusEnum.出库完成.ObjToInt();
                    }
                    else
                    {
                        x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                    }
                });
                stockInfos = result.Item1;
@@ -829,42 +836,68 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                //新增
                List<BSTPickInfoDTO> bSTPickInfosAdd = bSTPickInfoDTOs.Where(x => x.Way == 1).ToList();
                //获取新增明细领料
                List<PaperMattakeDetailItem>? paperMattakeDetailItemsAdd = null;
                //修改
                List<BSTPickInfoDTO> bSTPickInfosUp = bSTPickInfoDTOs.Where(x => x.Way == 2).ToList();
                //获取新增明细领料
                List<PaperMattakeDetailItem>? paperMattakeDetailItemsUp = null;
                if (bSTPickInfosAdd != null && bSTPickInfosAdd.Count > 0)
                {
                    paperMattakeDetailItemsAdd = bSTPickInfosAdd.SelectMany(x => x.PaperMattakeDetails).ToList();
                }
                if (bSTPickInfosUp != null && bSTPickInfosUp.Count > 0)
                {
                    paperMattakeDetailItemsUp = bSTPickInfosUp.SelectMany(x => x.PaperMattakeDetails).ToList();
                }
                //获取所有待领料的出库详情
                List<Dt_OutStockLockInfo> outStockLockInfos = _outboundRepository.OutStockLockInfoRepository.QueryData(x => x.OrderType == OutOrderTypeEnum.OutSGPick.ObjToInt() && x.Status==OutLockStockStatusEnum.出库完成.ObjToInt());
                #region é¢†æ–™é€»è¾‘
                if (paperMattakeDetailItemsAdd != null && paperMattakeDetailItemsAdd.Count > 0)
                {
                    foreach (var item in paperMattakeDetailItemsAdd)
                    {
                        //获取对应的
                    }
                }
                
                if (paperMattakeDetailItemsUp != null && paperMattakeDetailItemsUp.Count > 0)
                //获取领料条码及库存
                List<string> lockCodes = bSTPickInfoDTOs.SelectMany(x => x.PaperMattakeDetails).Select(x=>x.Barcode).Distinct().ToList();
                List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.QueryData(x=> lockCodes.Contains(x.PalletCode));
                //获取待领料的出库详情
                List<Dt_OutStockLockInfo> outStockLockInfos = _outboundRepository.OutStockLockInfoRepository.QueryData(x => x.OrderType == OutOrderTypeEnum.OutSGPick.ObjToInt() && x.Status==OutLockStockStatusEnum.出库完成.ObjToInt() && lockCodes.Distinct().ToList().Contains(x.PalletCode));
                //出库详情状态更新
                if (outStockLockInfos.Count > 0)
                {
                    foreach (var item in paperMattakeDetailItemsUp)
                    outStockLockInfos.ForEach(x =>
                    {
                        x.Status = OutLockStockStatusEnum.关闭.ObjToInt();
                    });
                }
                List<int> BSTPickDetailsId = outStockLockInfos.Select(x => x.OrderDetailId).Distinct().ToList();
                //获取对应排程
                List<Dt_OutSGOrder> outSGOrders = BaseDal.Db.Queryable<Dt_OutSGOrder>().Where(x => x.OutSGOrderStatus < OutOrderStatusEnum.出库完成.ObjToInt()).Includes(x => x.Details)
                    .Where(x => x.Details
                    .Any(v =>
                        BSTPickDetailsId.Contains(v.Id))
                    ).OrderBy(x => x.CreateDate).ToList();
                List<Dt_OutSGOrderDetail> orderDetails = new List<Dt_OutSGOrderDetail>();
                //处理排程
                if (outSGOrders.Count>0)
                {
                    orderDetails = outSGOrders.SelectMany(x=>x.Details).Where(x=> BSTPickDetailsId.Contains(x.Id)).ToList();
                    orderDetails.ForEach(x =>
                    {
                        x.OutSGOrderDetailStatus = OutOrderStatusEnum.出库完成.ObjToInt();
                    });
                    foreach (var item in outSGOrders)
                    {
                        int overCount = item.Details.Where(x=>x.OutSGOrderDetailStatus==OutLockStockStatusEnum.出库完成.ObjToInt()).Count();
                        int thisCount = orderDetails.Where(x => x.OutSGOrderId == item.Id).Count();
                        if ((overCount + thisCount) == item.Details.Count)
                        {
                            item.OutSGOrderStatus = OutOrderStatusEnum.出库完成.ObjToInt();
                        }
                    }
                }
                //获取所有待领料的库存
                #region é¢†æ–™é€»è¾‘
                foreach (var item in stockInfos)
                {
                    if (item.StockStatus==StockStatusEmun.出库完成.ObjToInt())
                    {
                        item.StockLength = 0;
                        item.MaterielWeight = 0;
                        item.MaterielThickness = 0;
                        item.MaterielWide = 0;
                        item.StockOutLength = 0;
                        item.IsFull = WhetherEnum.True.ObjToInt();
                        item.IsPick = WhetherEnum.True.ObjToInt();
                    }
                }
                #endregion
                _unitOfWorkManage.BeginTran();
                _stockRepository.StockInfoRepository.UpdateData(stockInfos);
                _outboundRepository.OutStockLockInfoRepository.UpdateData(outStockLockInfos);
                _outboundRepository.OutSGOrderRepository.UpdateData(outSGOrders);
                _outboundRepository.OutSGOrderDetailRepository.UpdateData(orderDetails);
                _unitOfWorkManage.CommitTran();
            }
            catch (Exception ex)
            {
@@ -970,90 +1003,90 @@
                _unitOfWorkManage.BeginTran();
                //操作数据,并分配需求库存
                _outboundRepository.OutMESOrderRepository.AddData(AddoutMESOrders);
                List<Dt_OutMESOrder> mESOrders = _outboundRepository.OutMESOrderRepository.QueryData(x => AddoutMESOrders.Select(x => x.OutDetailId).Contains(x.OutDetailId));
                {
                    List<Dt_Task> tasks = new List<Dt_Task>();
                    List<Dt_ProStockInfo>? stockInfos = null;
                    List<Dt_OutMESOrder>? Orders = null;
                    List<Dt_OutStockLockInfo>? outStockLockInfos = null;
                    List<Dt_LocationInfo>? locationInfos = null;
                    {
                        if (mESOrders.Where(x => x.WarehouseId == WarehouseEnum.LLDFL.ObjToInt()).ToList().Count>0)
                        {
                            //分配库存
                            (List<Dt_ProStockInfo>, List<Dt_OutMESOrder>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutMESOrderService.AssignProStockOutbound(mESOrders.Where(x => x.WarehouseId == WarehouseEnum.LLDFL.ObjToInt()).ToList());
                            if (result.Item1 != null && result.Item1.Count > 0)
                            {
                                //创建任务
                                tasks = GetTasks(result.Item1, result.Item3);
                                result.Item3.ForEach(x =>
                                {
                                    x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                                });
                                stockInfos = result.Item1;
                                Orders = result.Item2;
                                outStockLockInfos = result.Item3;
                                locationInfos = result.Item4;
                            }
                        }
                    }
                    if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0 && tasks.Count>0)
                    {
                        BaseDal.AddData(tasks);
                        stockInfos.ForEach(x =>
                        {
                            x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                        });
                        WebResponseContent contentResponse = _outboundService.OutMESOrderService.LockOutboundStockDataUpdate(stockInfos, Orders, outStockLockInfos, locationInfos, tasks: tasks);
                //List<Dt_OutMESOrder> mESOrders = _outboundRepository.OutMESOrderRepository.QueryData(x => AddoutMESOrders.Select(x => x.OutDetailId).Contains(x.OutDetailId));
                //{
                //    List<Dt_Task> tasks = new List<Dt_Task>();
                //    List<Dt_ProStockInfo>? stockInfos = null;
                //    List<Dt_OutMESOrder>? Orders = null;
                //    List<Dt_OutStockLockInfo>? outStockLockInfos = null;
                //    List<Dt_LocationInfo>? locationInfos = null;
                //    {
                //        if (mESOrders.Where(x => x.WarehouseId == WarehouseEnum.LLDFL.ObjToInt()).ToList().Count>0)
                //        {
                //            //分配库存
                //            (List<Dt_ProStockInfo>, List<Dt_OutMESOrder>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutMESOrderService.AssignProStockOutbound(mESOrders.Where(x => x.WarehouseId == WarehouseEnum.LLDFL.ObjToInt()).ToList());
                //            if (result.Item1 != null && result.Item1.Count > 0)
                //            {
                //                //创建任务
                //                tasks = GetTasks(result.Item1, result.Item3);
                //                result.Item3.ForEach(x =>
                //                {
                //                    x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                //                });
                //                stockInfos = result.Item1;
                //                Orders = result.Item2;
                //                outStockLockInfos = result.Item3;
                //                locationInfos = result.Item4;
                //            }
                //        }
                //    }
                //    if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0 && tasks.Count>0)
                //    {
                //        BaseDal.AddData(tasks);
                //        stockInfos.ForEach(x =>
                //        {
                //            x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                //        });
                //        WebResponseContent contentResponse = _outboundService.OutMESOrderService.LockOutboundStockDataUpdate(stockInfos, Orders, outStockLockInfos, locationInfos, tasks: tasks);
                        if (!contentResponse.Status)
                        {
                            _unitOfWorkManage.RollbackTran();
                            return content.Error(contentResponse.Message);
                        }
                    }
                }
                {
                    List<Dt_Task> tasks = new List<Dt_Task>();
                    List<Dt_StockInfo>? stockInfos = null;
                    List<Dt_OutMESOrder>? Orders = null;
                    List<Dt_OutStockLockInfo>? outStockLockInfos = null;
                    List<Dt_LocationInfo>? locationInfos = null;
                    {
                        if (mESOrders.Where(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt()).ToList().Count > 0)
                        {
                            //分配库存
                            (List<Dt_StockInfo>, List<Dt_OutMESOrder>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutMESOrderService.AssignStockOutbound(mESOrders.Where(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt()).ToList());
                            if (result.Item1 != null && result.Item1.Count > 0)
                            {
                                //创建任务
                                tasks = GetTasks(result.Item1, result.Item3);
                                result.Item3.ForEach(x =>
                                {
                                    x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                                });
                                stockInfos = result.Item1;
                                Orders = result.Item2;
                                outStockLockInfos = result.Item3;
                                locationInfos = result.Item4;
                            }
                        }
                    }
                    if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0 && tasks.Count>0)
                    {
                        BaseDal.AddData(tasks);
                        stockInfos.ForEach(x =>
                        {
                            x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                        });
                        WebResponseContent contentResponse = _outboundService.OutMESOrderService.LockOutboundStockDataUpdate(stockInfos, Orders, outStockLockInfos, locationInfos, tasks: tasks);
                        if (!contentResponse.Status)
                        {
                            _unitOfWorkManage.RollbackTran();
                            return content.Error(contentResponse.Message);
                        }
                    }
                }
                //        if (!contentResponse.Status)
                //        {
                //            _unitOfWorkManage.RollbackTran();
                //            return content.Error(contentResponse.Message);
                //        }
                //    }
                //}
                //{
                //    List<Dt_Task> tasks = new List<Dt_Task>();
                //    List<Dt_StockInfo>? stockInfos = null;
                //    List<Dt_OutMESOrder>? Orders = null;
                //    List<Dt_OutStockLockInfo>? outStockLockInfos = null;
                //    List<Dt_LocationInfo>? locationInfos = null;
                //    {
                //        if (mESOrders.Where(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt()).ToList().Count > 0)
                //        {
                //            //分配库存
                //            (List<Dt_StockInfo>, List<Dt_OutMESOrder>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutMESOrderService.AssignStockOutbound(mESOrders.Where(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt()).ToList());
                //            if (result.Item1 != null && result.Item1.Count > 0)
                //            {
                //                //创建任务
                //                tasks = GetTasks(result.Item1, result.Item3);
                //                result.Item3.ForEach(x =>
                //                {
                //                    x.Status = OutLockStockStatusEnum.出库中.ObjToInt();
                //                });
                //                stockInfos = result.Item1;
                //                Orders = result.Item2;
                //                outStockLockInfos = result.Item3;
                //                locationInfos = result.Item4;
                //            }
                //        }
                //    }
                //    if (stockInfos != null && stockInfos.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0 && tasks.Count>0)
                //    {
                //        BaseDal.AddData(tasks);
                //        stockInfos.ForEach(x =>
                //        {
                //            x.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                //        });
                //        WebResponseContent contentResponse = _outboundService.OutMESOrderService.LockOutboundStockDataUpdate(stockInfos, Orders, outStockLockInfos, locationInfos, tasks: tasks);
                //        if (!contentResponse.Status)
                //        {
                //            _unitOfWorkManage.RollbackTran();
                //            return content.Error(contentResponse.Message);
                //        }
                //    }
                //}
                _unitOfWorkManage.CommitTran();
                
                return content.OK("接收成功");
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/ERP/ErpBSTController.cs
@@ -91,7 +91,7 @@
        /// æŽ¥æ”¶åšæ€é€šé¢†æ–™ä¿¡æ¯
        /// </summary>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("ReceivePicking"), AllowAnonymous]
        [HttpPost, HttpGet, Route("ReceivePicking")]
        public WebResponseContent ReceivePicking([FromBody] List<BSTPickInfoDTO> bSTPickInfoDTOs)
        {
            return _taskService.ReceivePicking(bSTPickInfoDTOs);
@@ -101,7 +101,7 @@
        /// æŽ¥æ”¶åšæ€é€šé€€æ–™ä¿¡æ¯
        /// </summary>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("ReceiveReturnOrder"), AllowAnonymous]
        [HttpPost, HttpGet, Route("ReceiveReturnOrder")]
        public WebResponseContent ReceiveReturnOrder([FromBody] List<BSTReturnOrderDTO> bSTReturnOrderDTOs)
        {
            return _returnBSTOrderService.ReceiveReturnOrder(bSTReturnOrderDTOs);
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/appsettings.json
@@ -13,7 +13,7 @@
  //连接字符串
  //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=",
  //"ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
"ConnectionString": "Data Source=.;Initial Catalog=WIDESEA_WMSLLD;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEA_WMSLLD;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //"ConnectionString": "Data Source=192.168.35.3;Initial Catalog=WIDESEA_WMSLLD;User ID=sa;Password=Sa123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //旧WMS数据库连接
  //"TeConnectionString": "Data Source=10.30.4.92;Initial Catalog=TeChuang;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
@@ -32,6 +32,8 @@
  "ApiName": "WIDESEA",
  "ExpMinutes": 360,
  "QuartzJobAutoStart": true,
  "OutSGLength": "50000",
  "OutSGCount": "17",
  "PDAVersion": "4",
  "WebSocketPort": 9296
}
ÏîÄ¿×ÊÁÏ/½Ó¿ÚЭÒé/²©Ë¹Í¨ÀûÍØ½Ó¿Ú.V2.xlsx
Binary files differ
ÏîÄ¿×ÊÁÏ/ͨÐÅЭÒé/Ô­ÁÏ¿âÊäËÍÏß¹ÊÕ϶ÁÈ¡.xls
Binary files differ