1
huanghongfeng
2024-11-21 4cfeced9bc8985cdd89fdb540e6fe984f8469481
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs
@@ -16,6 +16,7 @@
using System.Security.Policy;
using static WIDESEA_ITaskInfoService.ITaskService;
using MailKit.Search;
using WIDESEA_Common.Log;
namespace WIDESEA_TaskInfoService
{
@@ -424,7 +425,16 @@
                            {
                                Dt_LocationInfo newLocation;
                                //查走货位,进行生成移库任务 
                                newLocation = _basicService.LocationInfoService.GetLocation(locationInfos.RoadwayNo); //拿到了移库后的货位
                                int Locationtype = 9;   //默认为9
                                if (dt_StockInfo.MaterialType == (int)InventoryMaterialType.成品)
                                {
                                    Locationtype = 11;
                                }
                                else if (dt_StockInfo.MaterialType == (int)InventoryMaterialType.原材料)
                                {
                                    Locationtype = 10;
                                }
                                newLocation = _basicService.LocationInfoService.GetLocation(locationInfos.RoadwayNo,Locationtype); //拿到了移库后的货位
                                if (newLocation != null)
                                {
                                    Dt_Task dt_Task = new()
@@ -635,6 +645,7 @@
                return content = WebResponseContent.Instance.Error($"未找到出库的库存信息");
            }
        }
        /// <summary>
        /// æ‰‹åŠ¨ç”Ÿæˆå‡ºåº“ä»»åŠ¡
        /// </summary>
@@ -653,7 +664,7 @@
                for (int i = 0; i < saveModel.DelKeys.Count; i++)
                {
                    Dt_StockInfo stockt = _stockService.StockInfoService.Repository.QueryFirst(x => x.PalletCode == saveModel.DelKeys[i].ToString());
                    if (stockt.StockStatus != (int)StockStatusEmun.已入库)
                    if (stockt.StockStatus == (int)StockStatusEmun.已入库)
                    {
                        Dt_StockInfoDetail stocktdetail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == stockt.Id);
                        stockt.StockStatus = (int)StockStatusEmun.出库锁定;
@@ -675,11 +686,11 @@
                        {
                            if (locationinfo.RoadwayNo == "1")
                            {
                                LocationName = "R01-003-041-011-01";
                                LocationName = "R01-002-041-011-01";
                            }
                            else
                            {
                                LocationName = "R02-003-027-011-01";
                                LocationName = "R02-002-027-011-01";
                            }
                        }
                        Dt_LocationInfo newTargetAddress;
@@ -928,5 +939,131 @@
            }
            return (null, LocationStatusEnum.Free.ObjToInt());
        }
        /// <summary>
        /// äººå·¥æ‰‹åŠ¨å‡ºåº“ï¼ˆåˆ é™¤åº“å­˜ï¼‰
        /// </summary>
        /// <param name="saveModel"></param>
        /// <returns></returns>
        public WebResponseContent ManualOutboundDeleteinventory(SaveModel saveModel)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                List<Dt_StockInfo> dtstockt = new List<Dt_StockInfo>();
                List<Dt_LocationInfo> locations = new List<Dt_LocationInfo>();
                List<Dt_StockInfoDetail> dtstocktdetail = new List<Dt_StockInfoDetail>();
                for (int i = 0; i < saveModel.DelKeys.Count; i++)
                {
                    Dt_StockInfo stockt = _stockService.StockInfoService.Repository.QueryFirst(x => x.PalletCode == saveModel.DelKeys[i].ToString());
                    if (stockt.StockStatus == (int)StockStatusEmun.已入库)
                    {
                        Dt_StockInfoDetail stocktdetail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == stockt.Id);
                        Dt_LocationInfo locationinfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockt.LocationCode);
                        locationinfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
                        dtstockt.Add(stockt);
                        locations.Add(locationinfo);
                        if (stockt.MaterialType == (int)InventoryMaterialType.空托)
                        {
                            dtstocktdetail.Add(stocktdetail);
                        }
                        WriteLog.GetLog("人工手动删除库存信息").Write($"托盘条码:{stockt.PalletCode},库位编号:{stockt.LocationCode}", $"人工出库库存");
                    }
                    else
                    {
                        return content = WebResponseContent.Instance.Error($"出库失败,该库存信息不可进行出库");
                    }
                }
                _unitOfWorkManage.BeginTran();
                _stockService.StockInfoService.Repository.DeleteData(dtstockt);
                if(dtstocktdetail.Count==0)
                {
                    _stockService.StockInfoDetailService.Repository.DeleteData(dtstocktdetail);
                }
                _basicService.LocationInfoService.Repository.UpdateData(locations);
                _unitOfWorkManage.CommitTran();
                content = WebResponseContent.Instance.OK();
                return content;
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return content = WebResponseContent.Instance.Error($"手动出库信息失败,报错信息:{ex.Message}");
                throw;
            }
        }
        /// <summary>
        /// ä»»åŠ¡å–æ¶ˆ
        /// </summary>
        /// <param name="saveModel"></param>
        /// <returns></returns>
        public WebResponseContent Cancelinventory(int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
            Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
            if(task != null)
            {
                if(task.TaskType== (int)TaskTypeEnum.Outbound || task.TaskType == (int)TaskTypeEnum.PalletOutbound)
                {
                    //处理出库的逻辑
                    Dt_LocationInfo locationinfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
                    if (locationinfo.LocationStatus == LocationStatusEnum.Lock.ObjToInt())
                    {
                        locationinfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
                    }
                    if (locationinfo.LocationStatus == LocationStatusEnum.PalletLock.ObjToInt())
                    {
                        locationinfo.LocationStatus = LocationStatusEnum.Pallet.ObjToInt();
                    }
                    _basicService.LocationInfoService.Repository.UpdateData(locationinfo);
                    Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.PalletCode == task.PalletCode);
                    stockInfo.StockStatus = (int)StockStatusEmun.已入库;
                    _stockService.StockInfoService.Repository.UpdateData(stockInfo);
                    Dt_StockInfoDetail stocktdetail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == stockInfo.Id);
                    if(stocktdetail != null)
                    {
                        stocktdetail.Status = (int)StockStatusEmun.已入库;
                        _stockService.StockInfoDetailService.Repository.UpdateData(stocktdetail);
                    }
                    BaseDal.DeleteData(task);
                    BaseDal.DeleteAndMoveIntoHty(task, OperateType.人工删除);
                    WriteLog.GetLog("任务日志").Write($"出库任务取消成功,托盘条码:{task.PalletCode}", $"任务取消");
                    return content = WebResponseContent.Instance.Error($"出库任务取消成功");
                }
                else if(task.TaskType == (int)TaskTypeEnum.Inbound || task.TaskType == (int)TaskTypeEnum.PalletInbound)
                {
                    //处理出库的逻辑
                    Dt_LocationInfo locationinfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
                    if (locationinfo.LocationStatus == LocationStatusEnum.Lock.ObjToInt() || locationinfo.LocationStatus == LocationStatusEnum.PalletLock.ObjToInt())
                    {
                        locationinfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
                    }
                    _basicService.LocationInfoService.Repository.UpdateData(locationinfo);
                    Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.PalletCode == task.PalletCode);
                    _stockService.StockInfoService.Repository.DeleteData(stockInfo);
                    Dt_StockInfoDetail stocktdetail = _stockService.StockInfoDetailService.Repository.QueryFirst(x => x.StockId == stockInfo.Id);
                    if (stocktdetail != null)
                    {
                        _stockService.StockInfoDetailService.Repository.DeleteData(stocktdetail);
                    }
                    BaseDal.DeleteData(task);
                    BaseDal.DeleteAndMoveIntoHty(task, OperateType.人工删除);
                    WriteLog.GetLog("任务日志").Write($"入库任务取消成功,托盘条码:{task.PalletCode}", $"任务取消");
                    return content = WebResponseContent.Instance.Error($"入库任务取消成功");
                }
                else
                {
                    return content = WebResponseContent.Instance.Error($"该任务的任务类型异常,取消失败");
                }
            }
            else
            {
                return content = WebResponseContent.Instance.Error($"未找到任务号");
            }
        }
    }
}