1
huanghongfeng
3 天以前 279077bf41bc726b474ca5d76cd2b8393d41d867
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs
@@ -18,6 +18,11 @@
using WIDESEA_Common.TaskEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.CommonEnum;
using WIDESEA_DTO.ToMes;
using System.Diagnostics;
using WIDESEA_Common.OtherEnum;
using WIDESEA_Core.Const;
namespace WIDESEA_TaskInfoService
{
@@ -40,10 +45,12 @@
                    PushTasksToWCS(new List<Dt_Task> { task });
                    return WebResponseContent.Instance.OK($"该托盘已生成任务", _mapper.Map<WMSTaskDTO>(task));
                }
                if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null)
               /* if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == OutTaskStatusEnum.New.ObjToInt()) != null)
                {
                    return WebResponseContent.Instance.Error($"该站点已有未执行的任务");
                }
                }*/
                //Dt_StockInfo stockInfo = _stockRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
                //if (stockInfo == null)
@@ -63,7 +70,7 @@
                Dt_Warehouse warehouse = _warehouseRepository.QueryFirst(x => x.WarehouseCode == roadwayInfo.RoadwayNo);
                if (warehouse == null)
                {
                    return WebResponseContent.Instance.Error("未找到改仓库");
                    return WebResponseContent.Instance.Error("未找到该仓库");
                }
                Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayInfo.RoadwayNo, warehouse.WarehouseId, "");//
                if (locationInfo == null)
@@ -90,8 +97,8 @@
                    Roadway = "1",
                    SourceAddress = "",
                    TargetAddress = locationInfo.LocationCode,
                    TaskType = TaskTypeEnum.Inbound.ObjToInt(),
                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
                    TaskType = TaskInboundTypeEnum.Inbound.ObjToInt(),
                    TaskStatus = TaskInStatusEnum.Line_InExecuting.ObjToInt(),
                    WarehouseId = warehouse.WarehouseId,
                    //PalletType = GetPalletType(warehouse, palletCode),//GetPalletType(warehouse, palletCode)
                    Creater = "WCS",
@@ -118,5 +125,123 @@
            }
        }
        /// <summary>
        /// åˆ›å»ºå…¥åº“任务
        /// </summary>
        /// <param name="inboundTask"></param>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public ApiResponse<object> sendEnTask(InOutboundTaskReceived inboundTask)
        {
            WebResponseContent webResponseContent = new WebResponseContent();
            try
            {
                List<Dt_Task> AddtaskList = new List<Dt_Task>();
                List<Dt_LocationInfo> Adddt_Locations = new List<Dt_LocationInfo>();
                List<Dt_StockInfo> Adddtstockt = new List<Dt_StockInfo>();
                if (inboundTask.palletInfoList.Count > 0)
                {
                    List<Dt_Task> taskData = BaseDal.QueryData();
                    Dt_StationManger dt_Station = _stationMangerService.QueryPlatform(inboundTask.NodeCode);
                    if (dt_Station == null) return MESresponse($"未找到站台信息,站台编号:{inboundTask.NodeCode}", false);
                    foreach (PalletInfo palletInfo in inboundTask.palletInfoList)
                    {
                        Dt_LocationInfo location = null;
                        if (palletInfo.locationCode == null || palletInfo.locationCode == "")
                        {
                            Dt_Warehouse warehouse = _warehouseRepository.QueryFirst(x => x.WarehouseCode == dt_Station.StackerCraneCode);
                            location = _basicService.LocationInfoService.AssignLocation(dt_Station.StackerCraneCode, warehouse.WarehouseId, "");//获取到新库位
                        }
                        else
                        {
                            location = _locationInfoRepository.QueryFirst(x => x.LocationCode == palletInfo.locationCode);
                        }
                        if (location == null) return MESresponse($"未找到货位信息,条码:{palletInfo.palletCode}", false);
                        if (location.LocationStatus != (int)LocationStatusEnum.Free) return MESresponse($"托盘条码:{palletInfo.palletCode},查找到的货位:{location.LocationCode},不为空货位!", false);
                        //创建组盘信息
                        var dt_Stock = new Dt_StockInfo
                        {
                            PalletCode = palletInfo.palletCode,
                            PalletType = 1,
                            LocationCode = location.LocationCode,
                            StockStatus = (int)StockStatusEmun.组盘暂存,
                            Creater = "WMS",
                            CreateDate = DateTime.Now,
                            MESsubPalletCode = palletInfo.palletCode,
                        };
                        location.LocationStatus = (int)LocationStatusEnum.InStockLock;
                        //生成移动任务
                        Dt_Task dt_Task = new()
                        {
                            PalletCode = palletInfo.palletCode,
                            TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                            Roadway = location.RoadwayNo,
                            TaskType = TaskInboundTypeEnum.Inbound.ObjToInt(),
                            TaskStatus = TaskInStatusEnum.Line_InExecuting.ObjToInt(),
                            SourceAddress = dt_Station.StationCode,
                            TargetAddress = location.LocationCode,
                            CurrentAddress = dt_Station.StationCode,
                            NextAddress = location.LocationCode,
                            Grade = 1,
                            Creater = "MES",
                            Depth = location.Depth,
                            CreateDate = DateTime.Now,
                            MEStaskId = inboundTask.TaskId,
                            MESbusinessId = inboundTask.BusinessId,
                            MESsubPalletCode = palletInfo.subPalletCode
                        };
                        Adddtstockt.Add(dt_Stock);
                        Adddt_Locations.Add(location);
                        AddtaskList.Add(dt_Task);
                    }
                    if (Adddtstockt.Count > 0 && Adddt_Locations.Count > 0 && AddtaskList.Count > 0)
                    {
                        _unitOfWorkManage.BeginTran();
                        _stockRepository.AddData(Adddtstockt);
                        _locationInfoRepository.UpdateData(Adddt_Locations);
                        BaseDal.AddData(AddtaskList);
                        var respon = PushTasksToWCS(AddtaskList, "");
                        if (respon.Status)
                        {
                            _unitOfWorkManage.CommitTran();  //提交事务
                            return MESresponse("", true);
                        }
                        else
                        {
                            _unitOfWorkManage.RollbackTran();  //回滚事务
                            return MESresponse($"下发出库失败,原因:{respon.Message}!", false);
                        }
                    }
                    else
                    {
                        return MESresponse("任务生成失败!", false);
                    }
                }
                else
                {
                    return MESresponse("接收到MES托盘编码列表无数据!", false);
                }
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();  //回滚事务
                return MESresponse($"下发出库失败,原因:{ex.Message}!", false);
                throw;
            }
        }
    }
}