Admin
2026-01-29 4e051ed24849863a068c66b72c4c883985b2ec23
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MESTaskService.cs
@@ -23,6 +23,8 @@
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.Task;
using WIDESEA_IStockService;
using WIDESEA_ITaskInfoService;
using WIDESEA_Model.Models;
using static WIDESEA_ITaskInfoService.ITaskService;
@@ -30,6 +32,7 @@
{
    public partial class TaskService
    {
        public static List<string> InStationareaList = new List<string>() { "1113", "1114", "1115", "1116", "1117", "1118", "1119", "1120", "1121", "1122" };
        //入库,空盘回库
        public ApiResponse AddInStoreDoc(MES_InTask mES_In)
        {
@@ -50,6 +53,8 @@
                Dt_Task setask = BaseDal.QueryData(x => x.PalletCode == mES_In.containerNo).FirstOrDefault();
                if (setask != null) return apiResponse.Error($"WMS已有当前任务,不可重复下发,托盘编号:{mES_In.containerNo}");
                // åˆ¤æ–­ä¸‹å‘的托盘编号是否库存托盘编号有重复
                if (_stockInfoService.IsContainerNoExist(mES_In.containerNo)) return apiResponse.Error($"当前库位已有该托盘编号,托盘编号:{mES_In.containerNo}");
                Dt_Warehouse dt_Warehouse = _warehouseService.QueryWarehouse(mES_In.warehouseNo);
                int LocationType = 1;
                string Roadway = "0";
@@ -108,20 +113,42 @@
                task.Creater = "MES";
                task.CreateDate = DateTime.Now;
                /*Dt_StockInfo dt_StockInfo = new Dt_StockInfo();
                dt_StockInfo.PalletCode = task.PalletCode;
                dt_StockInfo.PalletType = task.PalletType;
                dt_StockInfo.WarehouseId = task.WarehouseId;
                dt_StockInfo.StockStatus = (int)StockStatusEmun.入库中;
                dt_StockInfo.Creater = "MWS";
                dt_StockInfo.CreateDate = DateTime.Now;*/
                int taskid=BaseDal.AddData(task);
                _unitOfWorkManage.BeginTran();
                BaseDal.AddData(task);
                //_stockInfoService.Repository.AddData(dt_StockInfo);
                _unitOfWorkManage.CommitTran();
                WriteLog.Write_Log("MES_接收入库任务下发", $"反馈信息", "成功", $"任务添加成功,托盘条码:{task.PalletCode}");
                return apiResponse.OK();
                //创建任务后,判断是否是产线回库的任务
                if (!InStationareaList.Contains(task.SourceAddress))
                {
                    WriteLog.Write_Log("MES_接收入库任务下发", $"反馈信息", "成功", $"任务添加成功,托盘条码:{task.PalletCode}");
                    return apiResponse.OK();
                }
                else
                {
                    WCSginseng result = PLC_IssueTasks(
                        taskid, // ä¸æ˜¯task.Taskid
                        task.WarehouseId,
                        task.TaskNum,
                        task.PalletCode,
                        int.Parse(task.PalletType),
                        task.CurrentAddress,
                        task.NextAddress,
                        "");
                    if (result.IsSuccess)
                    {
                        Dt_Task deltaskin = BaseDal.QueryData(x => x.TaskId == taskid).FirstOrDefault();
                        deltaskin.TaskStatus = (int)InTaskStatusEnum.PLC_InExecuting;
                        string Result = MesInTaskStatusEnum.Start.GetDescription();
                        BaseDal.UpdateData(deltaskin);
                        //调取上游系统反馈开始任务
                        InStoreDocCallback(task.TaskNum, Result, "操作成功", task.PalletCode, "");
                        return apiResponse.OK();
                    }
                    else
                    {
                        Dt_Task deltask= BaseDal.QueryData(x => x.TaskId == taskid).FirstOrDefault();
                        BaseDal.DeleteData(deltask);
                        return apiResponse.Error($"下发任务失败,下发WCS失败,原因:{result.Message}");
                    }
                }
            }
            catch (Exception ex)
            {
@@ -150,46 +177,86 @@
                if (string.IsNullOrWhiteSpace(mES_In.endPosition)) return apiResponse.Error("目标位置不能为空");
                Dt_StockInfo dt_Stock=_stockInfoService.Repository.QueryData(x=>x.PalletCode== mES_In.containerNo && x.StockStatus== (int)StockStatusEmun.已入库).FirstOrDefault();
                Dt_StockInfo dt_Stock=_stockInfoService.Repository.QueryData(x=>x.PalletCode== mES_In.containerNo).FirstOrDefault();
                if (dt_Stock == null) return apiResponse.Error($"WMS未能查找道该托盘条码的库存货位信息,条码:{mES_In.containerNo}");
                Dt_LocationInfo dt_LocationInfo = _locationInfoService.Repository.QueryData(x => x.LocationCode == dt_Stock.LocationCode && x.LocationStatus== (int)LocationStatusEnum.InStock).FirstOrDefault();
                if (dt_LocationInfo == null) return apiResponse.Error($"WMS未能查找道该托盘条码的库存货位信息,条码:{mES_In.containerNo},未找到货位号:{dt_Stock.LocationCode}");
                if(dt_Stock.StockStatus == (int)StockStatusEmun.已入库)
                {
                    Dt_LocationInfo dt_LocationInfo = _locationInfoService.Repository.QueryData(x => x.LocationCode == dt_Stock.LocationCode && x.LocationStatus == (int)LocationStatusEnum.InStock).FirstOrDefault();
                    if (dt_LocationInfo == null) return apiResponse.Error($"WMS未能查找道该托盘条码的库存货位信息,条码:{mES_In.containerNo},未找到货位号:{dt_Stock.LocationCode}");
                Dt_roadwayinfo _Roadwayinfo = _roadWayinfoService.QbtainPlatform(dt_LocationInfo.RoadwayNo);
                    Dt_roadwayinfo _Roadwayinfo = _roadWayinfoService.QbtainPlatform(dt_LocationInfo.RoadwayNo);
                Dt_Task setask = BaseDal.QueryData(x => x.PalletCode == mES_In.containerNo).FirstOrDefault();
                if (setask != null) return apiResponse.Error($"WMS已有当前任务,不可重复下发,托盘编号:{mES_In.containerNo}");
                    Dt_Task setask = BaseDal.QueryData(x => x.PalletCode == mES_In.containerNo).FirstOrDefault();
                    if (setask != null) return apiResponse.Error($"WMS已有当前任务,不可重复下发,托盘编号:{mES_In.containerNo}");
                Dt_Task task = new Dt_Task();
                task.TaskNum = mES_In.transNo;
                task.PalletCode = dt_Stock.PalletCode;
                task.PalletType = dt_Stock.PalletType;
                task.Roadway = dt_LocationInfo.RoadwayNo;
                task.TaskType = (int)TaskTypeEnum.Outbound;
                task.TaskStatus = (int)OutTaskStatusEnum.OutNew;
                task.SourceAddress = dt_LocationInfo.LocationCode;
                task.TargetAddress = mES_In.endPosition;
                task.CurrentAddress = dt_LocationInfo.LocationCode;
                task.NextAddress = _Roadwayinfo.OutSCStationCode;
                task.WarehouseId = dt_LocationInfo.WarehouseId;
                task.OrderNo = mES_In.transDate.ToString();
                task.Grade = 1;
                task.Creater = "MES";
                task.CreateDate = DateTime.Now;
                    Dt_Task task = new Dt_Task();
                    task.TaskNum = mES_In.transNo;
                    task.PalletCode = dt_Stock.PalletCode;
                    task.PalletType = dt_Stock.PalletType;
                    task.Roadway = dt_LocationInfo.RoadwayNo;
                    task.TaskType = (int)TaskTypeEnum.Outbound;
                    task.TaskStatus = (int)OutTaskStatusEnum.OutNew;
                    task.SourceAddress = dt_LocationInfo.LocationCode;
                    task.TargetAddress = mES_In.endPosition;
                    task.CurrentAddress = dt_LocationInfo.LocationCode;
                    task.NextAddress = _Roadwayinfo.OutSCStationCode;
                    task.WarehouseId = dt_LocationInfo.WarehouseId;
                    task.OrderNo = mES_In.transDate.ToString();
                    task.Grade = 1;
                    task.Creater = "MES";
                    task.CreateDate = DateTime.Now;
                dt_Stock.StockStatus = (int)StockStatusEmun.出库中;
                dt_LocationInfo.LocationStatus = (int)LocationStatusEnum.Lock;
                    dt_Stock.StockStatus = (int)StockStatusEmun.出库中;
                    dt_LocationInfo.LocationStatus = (int)LocationStatusEnum.Lock;
                _unitOfWorkManage.BeginTran();
                BaseDal.AddData(task);
                _stockInfoService.Repository.UpdateData(dt_Stock);
                _locationInfoService.Repository.UpdateData(dt_LocationInfo);
                _unitOfWorkManage.CommitTran();
                    _unitOfWorkManage.BeginTran();
                    BaseDal.AddData(task);
                    _stockInfoService.Repository.UpdateData(dt_Stock);
                    _locationInfoService.Repository.UpdateData(dt_LocationInfo);
                    _unitOfWorkManage.CommitTran();
                WriteLog.Write_Log("MES_接收MES出库任务下发", $"出库任务添加", "成功", $"添加成功,托盘条码:{dt_Stock.PalletCode}");
                return apiResponse.OK();
                    WriteLog.Write_Log("MES_接收MES出库任务下发", $"出库任务添加", "成功", $"添加成功,托盘条码:{dt_Stock.PalletCode}");
                    return apiResponse.OK();
                }else if(dt_Stock.StockStatus == (int)StockStatusEmun.移库锁定)
                {
                    Dt_LocationInfo dt_LocationInfo = _locationInfoService.Repository.QueryData(x => x.LocationCode == dt_Stock.LocationCode && x.LocationStatus == (int)LocationStatusEnum.Lock).FirstOrDefault();
                    if (dt_LocationInfo == null) return apiResponse.Error($"WMS未能查找道该托盘条码的库存货位信息,条码:{mES_In.containerNo},未找到货位号:{dt_Stock.LocationCode}");
                    Dt_roadwayinfo _Roadwayinfo = _roadWayinfoService.QbtainPlatform(dt_LocationInfo.RoadwayNo);
                    Dt_Task task = new Dt_Task();
                    task.TaskNum = mES_In.transNo;
                    task.PalletCode = dt_Stock.PalletCode;
                    task.PalletType = dt_Stock.PalletType;
                    task.Roadway = dt_LocationInfo.RoadwayNo;
                    task.TaskType = (int)TaskTypeEnum.Outbound;
                    task.TaskStatus = (int)OutTaskStatusEnum.OutWait;
                    task.SourceAddress = dt_LocationInfo.LocationCode;
                    task.TargetAddress = mES_In.endPosition;
                    task.CurrentAddress = dt_LocationInfo.LocationCode;
                    task.NextAddress = _Roadwayinfo.OutSCStationCode;
                    task.WarehouseId = dt_LocationInfo.WarehouseId;
                    task.OrderNo = mES_In.transDate.ToString();
                    task.Grade = 1;
                    task.Creater = "MES";
                    task.CreateDate = DateTime.Now;
                    _unitOfWorkManage.BeginTran();
                    BaseDal.AddData(task);
                    _unitOfWorkManage.CommitTran();
                    WriteLog.Write_Log("MES_接收MES出库任务下发", $"出库任务添加", "成功", $"添加成功,托盘条码:{dt_Stock.PalletCode}");
                    return apiResponse.OK();
                }
                else
                {
                    WriteLog.Write_Log("MES_接收MES出库任务下发", $"出库任务添加", $"失败,托盘条码:{dt_Stock.PalletCode}", $"库存状态错误,请查看WMS系统库存,库存状态:{dt_Stock.StockStatus}");
                    return apiResponse.Error("库存状态错误,请查看WMS系统库存");
                }
            }
            catch (Exception ex)
            {