|
@@ -508,6 +508,206 @@ namespace wms.service.Extensions
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 申请移库库位及创建移库任务
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="Cell">目标货位</param>
|
|
|
+ /// <param name="_wcstaskoldrepository">历史任务表</param>
|
|
|
+ /// <param name="_basewarehouserepository">仓库表</param>
|
|
|
+ /// <param name="_billInvnowrepository">库存表</param>
|
|
|
+ /// <param name="_basewarecellrepository">货位表</param>
|
|
|
+ /// <param name="_taskrepository">任务表</param>
|
|
|
+ /// <param name="_taskdetailrepository">任务明细表</param>
|
|
|
+ /// <param name="_db">数据库链接</param>
|
|
|
+ /// <param name="_logger">日志</param>
|
|
|
+ /// <param name="_mapper">映射器</param>
|
|
|
+ /// <param name="lockerPalletizingPackTask">装箱任务锁</param>
|
|
|
+ /// <param name="lockerApplyLoc">申请货位锁</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static SRes MoveTask(
|
|
|
+ this string Cell,
|
|
|
+ RepositoryTask<WCS_TaskOld> _wcstaskoldrepository,
|
|
|
+ Repository<BaseWarehouse> _basewarehouserepository,
|
|
|
+ Repository<BillInvnow> _billInvnowrepository,
|
|
|
+ Repository<BaseWarecell> _basewarecellrepository,
|
|
|
+ RepositoryTask<WCS_TaskInfo> _taskrepository,
|
|
|
+ RepositoryTask<WCS_TaskDtl> _taskdetailrepository,
|
|
|
+ ITenant _db,
|
|
|
+ ILogger<SXService> _logger,
|
|
|
+ IMapper _mapper,
|
|
|
+ object lockerPalletizingPackTask,
|
|
|
+ object lockerApplyLoc)
|
|
|
+ {
|
|
|
+ lock (lockerPalletizingPackTask)
|
|
|
+ {
|
|
|
+ var res = new SRes() { Memo1 = "1" };
|
|
|
+
|
|
|
+ var cellform = _basewarecellrepository.GetFirst(p => p.Code == Cell && p.Depth == 2);
|
|
|
+ if (cellform == null)
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.WareLocationCodeNotExist.GetHashCode();
|
|
|
+ res.ResMsg = "该任务所在货位不是二深货位";
|
|
|
+ res.Memo1 = "1";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+ var cellTo = _basewarecellrepository.GetFirst(p => p.Col == cellform.Col && p.Layer == cellform.Layer && p.Shelf == cellform.Shelf && p.Depth == 1 && p.IsStop == 0 && p.Floor == cellform.Floor && p.Tunnel == cellform.Tunnel);
|
|
|
+ if (cellTo == null)
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.WareLocationCodeNotExist.GetHashCode();
|
|
|
+ res.ResMsg = Cell + "对应一深位货位被禁用或者不存在";
|
|
|
+ res.Memo1 = "1"; //1:不允许生成出库任务;2:允许
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+ lock (lockerApplyLoc)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (cellTo.StateNum == LocationState.LocationState_Empty)
|
|
|
+ {
|
|
|
+ res.Memo1 = "2";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+ else if (cellTo.StateNum == LocationState.LocationState_Full)
|
|
|
+ {
|
|
|
+ var stock = _billInvnowrepository.GetFirst(p => p.ContGrpBarCode == cellTo.ContGrpBarCode && p.InvStateCode == InvState.InvEcecState_In.ToString());
|
|
|
+ if (stock == null)
|
|
|
+ {
|
|
|
+ res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
|
|
|
+ res.ResMsg = "一深位库存信息异常,没有查到库存信息";
|
|
|
+ res.Memo1 = "1";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ //库位
|
|
|
+ var cell = ApplyLoc(new ApplyLocRequest()
|
|
|
+ {
|
|
|
+ IsMove = true,
|
|
|
+ MaterialId = stock.MatId,
|
|
|
+ MaterialCode = stock.MatCode,
|
|
|
+ TunnelNum = cellTo.Tunnel,
|
|
|
+ WarehuoseId = cellTo.WarehouseId,
|
|
|
+ Floor = cellTo.Floor,
|
|
|
+ Fork = 2,
|
|
|
+ Wbgroup = stock.WbGroupCode,
|
|
|
+ Wind = stock.Wind,
|
|
|
+ IsControlpanel = stock.IsControlpanel,
|
|
|
+ IsTorsChk = stock.IsTorsChk,
|
|
|
+ TorsChkQty = stock.TorsChkQty,
|
|
|
+ ProductTime = stock.ProductTime
|
|
|
+ }, _basewarecellrepository, _basewarehouserepository, _billInvnowrepository, _logger);
|
|
|
+ if (string.IsNullOrEmpty(cell.ResData.CellNo))
|
|
|
+ {
|
|
|
+ res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
|
|
|
+ res.ResMsg = cell.ResMsg;
|
|
|
+ res.Memo1 = "1";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+ if (!_basewarecellrepository.IsAny(p => p.Code == cell.ResData.CellNo && p.Row == cell.ResData.Row && p.Col == cell.ResData.Colomn && p.Layer == cell.ResData.Layer && p.StateNum == LocationState.LocationState_Empty && p.IsStop == 0))
|
|
|
+ {
|
|
|
+ res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
|
|
|
+ res.ResMsg = cell.ResData.CellNo + "已被使用";
|
|
|
+ res.Memo1 = "1";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (_wcstaskoldrepository.AsQueryable().Where(p => p.Status < TaskStatus.Finish && (p.Type == TaskType.EnterDepot || p.Type == TaskType.TransferDepot) && p.AddrTo == cell.ResData.CellNo).SplitTable(p => p.Take(2)).Any())
|
|
|
+ {
|
|
|
+ res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
|
|
|
+ res.ResMsg = cell.ResData.CellNo + "存在未结束的入库任务或移库任务,不允许使用";
|
|
|
+ res.Memo1 = "1";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+ var wcs = new WCS_TaskInfo()
|
|
|
+ {
|
|
|
+ Type = TaskType.TransferDepot,
|
|
|
+ Status = TaskStatus.NewBuild,
|
|
|
+ Priority = 0,
|
|
|
+ Device = cellTo.SCRel,
|
|
|
+ SrmStation = "",
|
|
|
+ AddrFrom = cellTo.Code,
|
|
|
+ AddrTo = cell.ResData.CellNo,
|
|
|
+ LastInteractionPoint = "",
|
|
|
+ BarCode = stock.ContGrpBarCode,
|
|
|
+ Length = stock.LengthQty,
|
|
|
+ AddTime = DateTime.Now,
|
|
|
+ StartTime = DateTime.Now,
|
|
|
+ DocID = 0,
|
|
|
+ PalletType = 1,
|
|
|
+ ProdLine = 0,
|
|
|
+ AddWho = "wms",
|
|
|
+ WarehouseCode = cellTo.WarehouseCode,
|
|
|
+ Enabled = true,
|
|
|
+ WorkBench = "",
|
|
|
+ Tunnel = cellTo.Tunnel.ToString(),
|
|
|
+ Floor = cellTo.Floor,
|
|
|
+ BusType = CpTaskBusType.TaskBusType_CP_Move.GetDescription()
|
|
|
+ };
|
|
|
+
|
|
|
+ _db.BeginTran();
|
|
|
+
|
|
|
+ var celltemp = _basewarecellrepository.GetSingle(p => p.Code == cell.ResData.CellNo);
|
|
|
+ if (celltemp.StateNum != LocationState.LocationState_Empty || celltemp.ContGrpId > 0 || !string.IsNullOrEmpty(celltemp.ContGrpBarCode))
|
|
|
+ {
|
|
|
+ _db.RollbackTran();
|
|
|
+ res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
|
|
|
+ res.ResMsg = cell.ResData.CellNo + "已被使用";
|
|
|
+ res.Memo1 = "1";
|
|
|
+ _logger.LogInformation("货位状态1:" + celltemp.StateNum + ",code:" + cell.ResData.CellNo);
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+ _logger.LogInformation("货位状态2:" + celltemp.StateNum + ",code:" + cell.ResData.CellNo);
|
|
|
+ var task = _taskrepository.InsertReturnEntity(wcs);
|
|
|
+ _wcstaskoldrepository.InsertableSplitTable(_mapper.Map<WCS_TaskOld>(task));
|
|
|
+ var taskdlt = new WCS_TaskDtl()
|
|
|
+ {
|
|
|
+ ID = Guid.NewGuid(),
|
|
|
+ CurPoint = task.AddrFrom,
|
|
|
+ AddTime = DateTime.Now,
|
|
|
+ AddWho = "wms",
|
|
|
+ Enabled = true,
|
|
|
+ ParentTaskCode = task.ID,
|
|
|
+ Desc = task.AddrFrom + "移库至" + task.AddrTo,
|
|
|
+ };
|
|
|
+ _taskdetailrepository.InsertableSplitTable(taskdlt);
|
|
|
+ _basewarecellrepository.UpdateModelColumns(p => new BaseWarecell() { StateNum = LocationState.LocationState_StockMove, EditTime = DateTime.Now }, p => p.Code == task.AddrFrom);
|
|
|
+ _basewarecellrepository.UpdateModelColumns(p => new BaseWarecell() { StateNum = LocationState.LocationState_StockMove, EditTime = DateTime.Now }, p => p.Code == task.AddrTo);
|
|
|
+ _db.CommitTran();
|
|
|
+ res.Memo1 = "2";
|
|
|
+ }
|
|
|
+ else if (cellTo.StateNum == LocationState.LocationState_StockIn)
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ res.ResMsg = "一升位有入库任务,二升位不允许出库";
|
|
|
+ res.Memo1 = "1";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+ else if (cellTo.StateNum == LocationState.LocationState_StockOut)
|
|
|
+ {
|
|
|
+ res.Memo1 = "2";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+ else if (cellTo.StateNum == LocationState.LocationState_StockMove)
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ res.ResMsg = "一升位有移库任务,二升位不允许出库";
|
|
|
+ res.Memo1 = "1";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ _db.RollbackTran();
|
|
|
+ _logger.LogInformation("移库任务创建失败" + ex.ToString());
|
|
|
+ res.ResCode = WcsContractWcsMoveTaskEnum.失败.GetHashCode();
|
|
|
+ res.ResMsg = WcsContractWcsMoveTaskEnum.失败.GetDescription();
|
|
|
+ res.Memo1 = "1";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 申请货位
|
|
|
/// </summary>
|
|
@@ -517,7 +717,7 @@ namespace wms.service.Extensions
|
|
|
/// <param name="_billInvnowrepository">库存表</param>
|
|
|
/// <param name="_logger">日志</param>
|
|
|
/// <returns></returns>
|
|
|
- private static SRes<ApplyStockInLocResponse> ApplyLoc(
|
|
|
+ public static SRes<ApplyStockInLocResponse> ApplyLoc(
|
|
|
ApplyLocRequest reqEntity,
|
|
|
Repository<BaseWarecell> _basewarecellrepository,
|
|
|
Repository<BaseWarehouse> _basewarehouserepository,
|