wangxinhui
10 小时以前 b489f865bab00bedfce5e8f772095600b8034ac0
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Reloaction.cs
@@ -10,6 +10,7 @@
using WIDESEA_Common.TaskEnum;
using WIDESEA_Core;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Basic;
using WIDESEA_DTO.Task;
using WIDESEA_Model.Models;
@@ -138,6 +139,84 @@
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// æ‰‹åŠ¨ç§»åº“
        /// </summary>
        /// <returns></returns>
        public WebResponseContent ManualRelocation(RelocationDTO relocationDTO)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == relocationDTO.warehouseId);
                if (warehouse == null)
                {
                    return content.Error($"未找到对应的{relocationDTO.warehouseId}仓库信息");
                }
                Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == relocationDTO.locationStart && x.WarehouseId== warehouse.WarehouseId && x.RoadwayNo == relocationDTO.locationRoadway && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && x.EnableStatus == EnableStatusEnum.Normal.ObjToInt());
                Dt_LocationInfo locationInfoEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == relocationDTO.locationEnd && x.WarehouseId == warehouse.WarehouseId && x.RoadwayNo== relocationDTO.locationRoadway && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus==EnableStatusEnum.Normal.ObjToInt());
                if (locationInfoStart == null || locationInfoEnd==null)
                {
                    return content.Error($"未找到对应的货位信息或起点及终点货位条件不满足");
                }
                if (locationInfoStart.Column!= locationInfoEnd.Column || locationInfoStart.Layer != locationInfoEnd.Layer || locationInfoStart.Depth>= locationInfoEnd.Depth)
                {
                    return content.Error($"起点和终点移库货位需要满足同列同层终点货位深位需要大于起点货位");
                }
                Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == locationInfoStart.LocationCode);
                if (stockInfo == null)
                {
                    return content.Error($"未找到对应货位的库存信息");
                }
                Dt_Task taskTemp = Repository.QueryFirst(x => x.PalletCode == stockInfo.PalletCode);
                if (taskTemp != null)
                {
                    return content.Error($"托盘{stockInfo.PalletCode}任务已存在");
                }
                Dt_Task newTask = new Dt_Task()
                {
                    Roadway = locationInfoStart.RoadwayNo,
                    WarehouseId = locationInfoStart.WarehouseId,
                    CurrentAddress = locationInfoStart.LocationCode,
                    Grade = 99,
                    NextAddress = locationInfoEnd.LocationCode,
                    OrderNo = "",
                    PalletCode = stockInfo.PalletCode,
                    PalletType = stockInfo.PalletType,
                    SourceAddress = locationInfoStart.LocationCode,
                    TargetAddress = locationInfoEnd.LocationCode,
                    TaskNum = Repository.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                    TaskStatus = TaskStatusEnum.SC_Execute.ObjToInt(),
                    TaskType = TaskTypeEnum.Relocation.ObjToInt()
                };
                if (stockInfo.StockLength > 0)
                {
                    newTask.TaskLength = stockInfo.StockLength;
                }
                _unitOfWorkManage.BeginTran();
                Repository.AddData(newTask);
                LocationStatusEnum lastStatusEnd = (LocationStatusEnum)locationInfoEnd.LocationStatus;
                _basicService.LocationInfoService.UpdateLocationStatus(locationInfoEnd, newTask.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfoEnd, lastStatusEnd, LocationStatusEnum.Lock, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum);
                LocationStatusEnum lastStatusStart = (LocationStatusEnum)locationInfoStart.LocationStatus;
                _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, newTask.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfoStart, lastStatusStart, LocationStatusEnum.Lock, LocationChangeType.RelocationAssignLocation, taskNum: newTask.TaskNum);
                stockInfo.StockStatus = StockStatusEmun.移库锁定.ObjToInt();
                _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                _unitOfWorkManage.CommitTran();
                //推送任务
                PushTasksToWCS(new List<Dt_Task> { newTask });
                return content.OK(data: _mapper.Map<WMSTaskDTO>(newTask));
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return content.Error(ex.Message);
            }
        }
        public WebResponseContent RelocationTaskCompleted(Dt_Task task)
        {
@@ -161,7 +240,7 @@
                    return WebResponseContent.Instance.Error($"未找到对应的终点货位信息");
                }
                task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
                FeedBackWCSTaskCompleted(task.TaskNum);
                _unitOfWorkManage.BeginTran();
                stockInfo.LocationCode = locationInfoEnd.LocationCode;
                stockInfo.StockStatus = StockStatusEmun.入库完成.ObjToInt();
@@ -170,6 +249,7 @@
                _basicService.LocationInfoService.UpdateLocationStatus(locationInfoEnd, stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId);
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.人工完成 : WIDESEA_Core.Enums.OperateTypeEnum.自动完成);
                _unitOfWorkManage.CommitTran();
                FeedBackWCSTaskCompleted(task.TaskNum);
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)