|
@@ -1,12 +1,21 @@
|
|
|
-using SqlSugar;
|
|
|
+using AutoMapper;
|
|
|
+using Microsoft.Extensions.Logging;
|
|
|
+using SqlSugar;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Data;
|
|
|
using System.Globalization;
|
|
|
using System.Linq;
|
|
|
+using WCS.Entity.sx;
|
|
|
+using wms.dto;
|
|
|
+using wms.dto.request.sx;
|
|
|
+using wms.dto.response;
|
|
|
+using wms.dto.response.hj;
|
|
|
using wms.dto.response.sx;
|
|
|
+using wms.service.Service;
|
|
|
using wms.sqlsugar;
|
|
|
using wms.sqlsugar.model.sx;
|
|
|
+using wms.util.Ext;
|
|
|
|
|
|
namespace wms.service.Extensions
|
|
|
{
|
|
@@ -180,5 +189,626 @@ namespace wms.service.Extensions
|
|
|
}
|
|
|
|
|
|
#endregion 获取码垛位
|
|
|
+
|
|
|
+ #region 分配货位
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 申请入库货位
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="reqEntity">申请信息</param>
|
|
|
+ /// <param name="_wcstaskoldrepository">任务表</param>
|
|
|
+ /// <param name="_basewarehouserepository">仓库表</param>
|
|
|
+ /// <param name="_billInvnowrepository">库存表</param>
|
|
|
+ /// <param name="_basewarecellrepository">货位表</param>
|
|
|
+ /// <param name="_db">数据库连接</param>
|
|
|
+ /// <param name="_mapper">映射器</param>
|
|
|
+ /// <param name="_logger">日志</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static SRes<List<ApplyStockInLocResponse>> ApplyStockInLocTemp(
|
|
|
+ this SxApplyStockInLocRequest reqEntity,
|
|
|
+ RepositoryTask<WCS_TaskOld> _wcstaskoldrepository,
|
|
|
+ Repository<BaseWarehouse> _basewarehouserepository,
|
|
|
+ Repository<BillInvnow> _billInvnowrepository,
|
|
|
+ Repository<BaseWarecell> _basewarecellrepository,
|
|
|
+ ITenant _db,
|
|
|
+ IMapper _mapper,
|
|
|
+ ILogger<SXService> _logger)
|
|
|
+ {
|
|
|
+ var result = new SRes<List<ApplyStockInLocResponse>>() { ResData = new List<ApplyStockInLocResponse>() };
|
|
|
+ var wcstask = _wcstaskoldrepository.AsQueryable().With(SqlWith.NoLock).Where(p => reqEntity.TaskNum.Contains(p.Id) && p.Status < TaskStatus.Finish).SplitTable(tabs => tabs.Take(2)).ToList();
|
|
|
+ if (!wcstask.Any())
|
|
|
+ {
|
|
|
+ result.ResCode = ResponseStatusCodeEnum.WcsTaskNotExist.GetHashCode();
|
|
|
+ result.ResMsg = string.Join(",", reqEntity.TaskNum) + ResponseStatusCodeEnum.WcsTaskNotExist.GetDescription();
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ if (wcstask.Any(p => p.Type == TaskType.OutDepot))
|
|
|
+ {
|
|
|
+ result.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
|
|
|
+ result.ResMsg = "该任务是出库任务,不能分配货位;wms任务号" + string.Join(",", reqEntity.TaskNum);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ if (reqEntity.TaskNum.Count != wcstask.Count)
|
|
|
+ {
|
|
|
+ result.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ result.ResMsg = string.Join(',', reqEntity.TaskNum) + "申请的任务数与实际任务数不符";
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ var warehouse = _basewarehouserepository.GetFirst(p => p.Code == "sxhouse");
|
|
|
+ if (warehouse == null)
|
|
|
+ {
|
|
|
+ result.ResCode = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetHashCode();
|
|
|
+ result.ResMsg = ResponseStatusCodeEnum.WarehouseCodeNotExist.GetDescription();
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ var stocklist = _billInvnowrepository.GetList(p => wcstask.Select(p => p.BarCode).Contains(p.ContGrpBarCode) && p.InvStateCode == InvState.InvEcecState_BuildUp.ToString());
|
|
|
+ if (!stocklist.Any())
|
|
|
+ {
|
|
|
+ result.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();
|
|
|
+ result.ResMsg = string.Join(",", reqEntity.TaskNum) + ResponseStatusCodeEnum.StockNotExist.GetDescription();
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ if (reqEntity.TaskNum.Count != stocklist.Count)
|
|
|
+ {
|
|
|
+ result.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();
|
|
|
+ result.ResMsg = string.Join(",", reqEntity.TaskNum) + "申请的任务数与库存数量不符";
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ if (wcstask.Count > 1)
|
|
|
+ {
|
|
|
+ List<ApplyStockInLocResponse> list = new List<ApplyStockInLocResponse>();
|
|
|
+ var code = string.Empty;
|
|
|
+ var num = new List<int>() { reqEntity.TaskNum[1], reqEntity.TaskNum[0] };
|
|
|
+ foreach (var item in num)
|
|
|
+ {
|
|
|
+ //验证库存
|
|
|
+ var task = wcstask.Where(p => p.Id == item).First();
|
|
|
+ var stock = stocklist.Where(p => p.ContGrpBarCode == task.BarCode).First();
|
|
|
+ if (!string.IsNullOrEmpty(task.AddrTo) && task.Fork != 0)
|
|
|
+ {
|
|
|
+ var applyCell = new ApplyStockInLocResponse()
|
|
|
+ {
|
|
|
+ TunnelNum = reqEntity.TunnelNum.ToString(),
|
|
|
+ CellNo = task.AddrTo,
|
|
|
+ Row = task.AddrTo.Split('-')[0] != null ? int.Parse(task.AddrTo.Split('-')[0]) : 0,
|
|
|
+ Colomn = task.AddrTo.Split('-')[1] != null ? int.Parse(task.AddrTo.Split('-')[1]) : 0,
|
|
|
+ Layer = task.AddrTo.Split('-')[2] != null ? int.Parse(task.AddrTo.Split('-')[2]) : 0,
|
|
|
+ Fork = task.Fork,
|
|
|
+ TaskNo = task.Id
|
|
|
+ };
|
|
|
+ result.ResData.Add(applyCell);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!string.IsNullOrEmpty(code))
|
|
|
+ {
|
|
|
+ var cell2 = ApplyLoc(new ApplyLocRequest()
|
|
|
+ {
|
|
|
+ MaterialId = stock.MatId,
|
|
|
+ MaterialCode = stock.MatCode,
|
|
|
+ TunnelNum = reqEntity.TunnelNum,
|
|
|
+ WarehuoseId = warehouse.Id,
|
|
|
+ IsMove = task.Type == TaskType.TransferDepot,
|
|
|
+ Floor = reqEntity.Floor,
|
|
|
+ CellCode = code,
|
|
|
+ Fork = 2,
|
|
|
+ Wind = stock.Wind,
|
|
|
+ IsControlpanel = stock.IsControlpanel,
|
|
|
+ IsTorsChk = stock.IsTorsChk,
|
|
|
+ TorsChkQty = stock.TorsChkQty,
|
|
|
+ ProductTime = stock.ProductTime,
|
|
|
+ Wbgroup = stock.WbGroupCode
|
|
|
+ }, _basewarecellrepository, _basewarehouserepository, _billInvnowrepository, _logger);
|
|
|
+ if (cell2.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode())
|
|
|
+ {
|
|
|
+ result.ResCode = cell2.ResCode;
|
|
|
+ result.ResMsg = item + cell2.ResMsg;
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ try
|
|
|
+ {
|
|
|
+ cell2.ResData.Fork = 2;
|
|
|
+ cell2.ResData.TaskNo = item;
|
|
|
+ _db.BeginTran();
|
|
|
+ _wcstaskoldrepository.AsUpdateable().SetColumns(p => new WCS_TaskOld()
|
|
|
+ {
|
|
|
+ AddrTo = cell2.ResData.CellNo,
|
|
|
+ Fork = cell2.ResData.Fork
|
|
|
+ }).Where(p => p.Id == item).SplitTable(p => p.Take(2)).ExecuteCommand();
|
|
|
+ _basewarecellrepository.UpdateModelColumns(p => new BaseWarecell() { StateNum = LocationState.LocationState_StockIn, ContGrpBarCode = "", ContGrpId = 0, EditTime = DateTime.Now },
|
|
|
+ p => cell2.ResData.CellNo == p.Code);
|
|
|
+
|
|
|
+ _db.CommitTran();
|
|
|
+ result.ResData.Add(_mapper.Map<ApplyStockInLocResponse>(cell2.ResData));
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ _db.RollbackTran();
|
|
|
+ result.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ result.ResMsg = item + ResponseStatusCodeEnum.DataSaveErr.GetDescription() + ex.Message;
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ #region 处理两个任务都是一货叉情况
|
|
|
+
|
|
|
+ if (item == reqEntity.TaskNum[0])
|
|
|
+ {
|
|
|
+ var cell2 = ApplyLoc(new ApplyLocRequest()
|
|
|
+ {
|
|
|
+ MaterialId = stock.MatId,
|
|
|
+ MaterialCode = stock.MatCode,
|
|
|
+ TunnelNum = reqEntity.TunnelNum,
|
|
|
+ WarehuoseId = warehouse.Id,
|
|
|
+ IsMove = task.Type == TaskType.TransferDepot,
|
|
|
+ Floor = reqEntity.Floor,
|
|
|
+ Fork = 2,
|
|
|
+ Wind = stock.Wind,
|
|
|
+ IsControlpanel = stock.IsControlpanel,
|
|
|
+ IsTorsChk = stock.IsTorsChk,
|
|
|
+ TorsChkQty = stock.TorsChkQty,
|
|
|
+ ProductTime = stock.ProductTime,
|
|
|
+ Wbgroup = stock.WbGroupCode
|
|
|
+ }, _basewarecellrepository, _basewarehouserepository, _billInvnowrepository, _logger);
|
|
|
+ if (cell2.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode())
|
|
|
+ {
|
|
|
+ result.ResCode = cell2.ResCode;
|
|
|
+ result.ResMsg = item + cell2.ResMsg;
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ try
|
|
|
+ {
|
|
|
+ cell2.ResData.Fork = 2;
|
|
|
+ cell2.ResData.TaskNo = item;
|
|
|
+ _db.BeginTran();
|
|
|
+ _wcstaskoldrepository.AsUpdateable().SetColumns(p => new WCS_TaskOld()
|
|
|
+ {
|
|
|
+ AddrTo = cell2.ResData.CellNo,
|
|
|
+ Fork = cell2.ResData.Fork
|
|
|
+ }).Where(p => p.Id == item).SplitTable(p => p.Take(2)).ExecuteCommand();
|
|
|
+ _basewarecellrepository.UpdateModelColumns(p => new BaseWarecell() { StateNum = LocationState.LocationState_StockIn, ContGrpBarCode = "", ContGrpId = 0, EditTime = DateTime.Now },
|
|
|
+ p => cell2.ResData.CellNo == p.Code);
|
|
|
+
|
|
|
+ _db.CommitTran();
|
|
|
+ result.ResData.Add(_mapper.Map<ApplyStockInLocResponse>(cell2.ResData));
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ _db.RollbackTran();
|
|
|
+ result.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ result.ResMsg = item + ResponseStatusCodeEnum.DataSaveErr.GetDescription() + ex.Message;
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion 处理两个任务都是一货叉情况
|
|
|
+
|
|
|
+ var cell1 = ApplyLoc(new ApplyLocRequest()
|
|
|
+ {
|
|
|
+ MaterialId = stock.MatId,
|
|
|
+ MaterialCode = stock.MatCode,
|
|
|
+ TunnelNum = reqEntity.TunnelNum,
|
|
|
+ WarehuoseId = warehouse.Id,
|
|
|
+ IsMove = task.Type == TaskType.TransferDepot,
|
|
|
+ Floor = reqEntity.Floor,
|
|
|
+ Fork = 1,
|
|
|
+ Wind = stock.Wind,
|
|
|
+ IsControlpanel = stock.IsControlpanel,
|
|
|
+ IsTorsChk = stock.IsTorsChk,
|
|
|
+ TorsChkQty = stock.TorsChkQty,
|
|
|
+ ProductTime = stock.ProductTime,
|
|
|
+ Wbgroup = stock.WbGroupCode
|
|
|
+ }, _basewarecellrepository, _basewarehouserepository, _billInvnowrepository, _logger);
|
|
|
+ if (cell1.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode())
|
|
|
+ {
|
|
|
+ result.ResCode = cell1.ResCode;
|
|
|
+ result.ResMsg = item + cell1.ResMsg;
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ try
|
|
|
+ {
|
|
|
+ cell1.ResData.Fork = 1;
|
|
|
+ cell1.ResData.TaskNo = item;
|
|
|
+ code = cell1.ResData.CellNo;
|
|
|
+ _db.BeginTran();
|
|
|
+ _wcstaskoldrepository.AsUpdateable().SetColumns(p => new WCS_TaskOld()
|
|
|
+ {
|
|
|
+ AddrTo = cell1.ResData.CellNo,
|
|
|
+ Fork = cell1.ResData.Fork
|
|
|
+ }).Where(p => p.Id == item).SplitTable(p => p.Take(2)).ExecuteCommand();
|
|
|
+ _basewarecellrepository.UpdateModelColumns(p => new BaseWarecell() { StateNum = LocationState.LocationState_StockIn, ContGrpBarCode = "", ContGrpId = 0, EditTime = DateTime.Now },
|
|
|
+ p => cell1.ResData.CellNo == p.Code);
|
|
|
+
|
|
|
+ _db.CommitTran();
|
|
|
+ result.ResData.Add(_mapper.Map<ApplyStockInLocResponse>(cell1.ResData));
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ _db.RollbackTran();
|
|
|
+ result.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ result.ResMsg = item + ResponseStatusCodeEnum.DataSaveErr.GetDescription() + ex.Message;
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //验证库存
|
|
|
+ var stock = stocklist.Where(p => p.ContGrpBarCode == wcstask.First().BarCode).First();
|
|
|
+ if (stock == null)
|
|
|
+ {
|
|
|
+ result.ResCode = ResponseStatusCodeEnum.StockNotExist.GetHashCode();
|
|
|
+ result.ResMsg = wcstask.First().Id + ResponseStatusCodeEnum.StockNotExist.GetDescription();
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!string.IsNullOrEmpty(wcstask.First().AddrTo) && wcstask.First().Fork != 0)
|
|
|
+ {
|
|
|
+ var applyCell = new ApplyStockInLocResponse()
|
|
|
+ {
|
|
|
+ TunnelNum = reqEntity.TunnelNum.ToString(),
|
|
|
+ CellNo = wcstask.First().AddrTo,
|
|
|
+ Row = wcstask.First().AddrTo.Split('-')[0] != null ? int.Parse(wcstask.First().AddrTo.Split('-')[0]) : 0,
|
|
|
+ Colomn = wcstask.First().AddrTo.Split('-')[1] != null ? int.Parse(wcstask.First().AddrTo.Split('-')[1]) : 0,
|
|
|
+ Layer = wcstask.First().AddrTo.Split('-')[2] != null ? int.Parse(wcstask.First().AddrTo.Split('-')[2]) : 0,
|
|
|
+ Fork = wcstask.First().Fork,
|
|
|
+ TaskNo = wcstask.First().Id
|
|
|
+ };
|
|
|
+ result.ResData.Add(applyCell);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ var cell1 = ApplyLoc(new ApplyLocRequest()
|
|
|
+ {
|
|
|
+ MaterialId = stock.MatId,
|
|
|
+ MaterialCode = stock.MatCode,
|
|
|
+ TunnelNum = reqEntity.TunnelNum,
|
|
|
+ WarehuoseId = warehouse.Id,
|
|
|
+ IsMove = wcstask.First().Type == TaskType.TransferDepot,
|
|
|
+ Floor = reqEntity.Floor,
|
|
|
+ Fork = 2,
|
|
|
+ Wind = stock.Wind,
|
|
|
+ IsControlpanel = stock.IsControlpanel,
|
|
|
+ IsTorsChk = stock.IsTorsChk,
|
|
|
+ TorsChkQty = stock.TorsChkQty,
|
|
|
+ ProductTime = stock.ProductTime,
|
|
|
+ Wbgroup = stock.WbGroupCode
|
|
|
+ }, _basewarecellrepository, _basewarehouserepository, _billInvnowrepository, _logger);
|
|
|
+ if (cell1.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode())
|
|
|
+ {
|
|
|
+ result.ResCode = cell1.ResCode;
|
|
|
+ result.ResMsg = wcstask.First().Id + cell1.ResMsg;
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ try
|
|
|
+ {
|
|
|
+ cell1.ResData.TaskNo = wcstask.First().Id;
|
|
|
+ cell1.ResData.Fork = 2;
|
|
|
+ _db.BeginTran();
|
|
|
+ _wcstaskoldrepository.AsUpdateable().SetColumns(p => new WCS_TaskOld()
|
|
|
+ {
|
|
|
+ AddrTo = cell1.ResData.CellNo,
|
|
|
+ Fork = cell1.ResData.Fork,
|
|
|
+ }).Where(p => p.Id == wcstask.First().Id).SplitTable(p => p.Take(2)).ExecuteCommand();
|
|
|
+ _basewarecellrepository.UpdateModelColumns(p => new BaseWarecell() { StateNum = LocationState.LocationState_StockIn, ContGrpBarCode = "", ContGrpId = 0, EditTime = DateTime.Now },
|
|
|
+ p => p.Code == cell1.ResData.CellNo);
|
|
|
+
|
|
|
+ _db.CommitTran();
|
|
|
+ result.ResData.Add(_mapper.Map<ApplyStockInLocResponse>(cell1.ResData));
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ _db.RollbackTran();
|
|
|
+ result.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ result.ResMsg = wcstask.First().Id + ResponseStatusCodeEnum.DataSaveErr.GetDescription() + ex.Message;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 申请货位
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="reqEntity">申请信息</param>
|
|
|
+ /// <param name="_basewarecellrepository">货位表</param>
|
|
|
+ /// <param name="_basewarehouserepository">仓库表</param>
|
|
|
+ /// <param name="_billInvnowrepository">库存表</param>
|
|
|
+ /// <param name="_logger">日志</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private static SRes<ApplyStockInLocResponse> ApplyLoc(
|
|
|
+ ApplyLocRequest reqEntity,
|
|
|
+ Repository<BaseWarecell> _basewarecellrepository,
|
|
|
+ Repository<BaseWarehouse> _basewarehouserepository,
|
|
|
+ Repository<BillInvnow> _billInvnowrepository,
|
|
|
+ ILogger<SXService> _logger)
|
|
|
+ {
|
|
|
+ var result = new SRes<ApplyStockInLocResponse>()
|
|
|
+ {
|
|
|
+ ResCode = ResponseStatusCodeEnum.Sucess.GetHashCode(),
|
|
|
+ ResMsg = ResponseStatusCodeEnum.Sucess.GetDescription(),
|
|
|
+ ResData = new ApplyStockInLocResponse(),
|
|
|
+ };
|
|
|
+ //预留货位数量
|
|
|
+ var emptyLoc = _basewarecellrepository.GetList(p => p.IsStop == 0
|
|
|
+ && p.StateNum == LocationState.LocationState_Empty
|
|
|
+ && p.TypeNum == LocationType.LocationType_StorageLocation
|
|
|
+ && p.Tunnel == reqEntity.TunnelNum
|
|
|
+ && p.WarehouseId == reqEntity.WarehuoseId
|
|
|
+ && p.Floor == reqEntity.Floor
|
|
|
+ );
|
|
|
+
|
|
|
+ //判断是否移库
|
|
|
+ if (!reqEntity.IsMove && (emptyLoc == null || emptyLoc.Count < 10))
|
|
|
+ {
|
|
|
+ result.ResCode = ResponseStatusCodeEnum.NotEnoughLocation.GetHashCode();
|
|
|
+ result.ResMsg = ResponseStatusCodeEnum.NotEnoughLocation.GetDescription();
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ var loc1ist = from loct1 in _basewarecellrepository.GetList(loc1 => loc1.IsStop == 0 && loc1.StateNum == LocationState.LocationState_Empty
|
|
|
+ && loc1.TypeNum == LocationType.LocationType_StorageLocation
|
|
|
+ && loc1.Tunnel == reqEntity.TunnelNum
|
|
|
+ && loc1.WarehouseId == reqEntity.WarehuoseId
|
|
|
+ && loc1.Floor == reqEntity.Floor && loc1.Depth == 1).ToList()
|
|
|
+ join loct2 in _basewarecellrepository.GetList(loc2 => loc2.IsStop == 0 && loc2.IsStop == 0 && loc2.Depth == 2 && loc2.StateNum == LocationState.LocationState_Full
|
|
|
+ && loc2.Tunnel == reqEntity.TunnelNum && loc2.Floor == reqEntity.Floor).ToList()
|
|
|
+ on new { loct1.Shelf, loct1.Col, loct1.Layer } equals new { loct2.Shelf, loct2.Col, loct2.Layer }
|
|
|
+ join stock in _billInvnowrepository.GetList(inv => inv.InvStateCode == InvState.InvEcecState_In.ToString() && string.IsNullOrEmpty(inv.PreStock))
|
|
|
+ on loct2.ContGrpBarCode equals stock.ContGrpBarCode
|
|
|
+ where loct1.Tunnel == reqEntity.TunnelNum && loct1.Floor == reqEntity.Floor
|
|
|
+ select new stocktemp1
|
|
|
+ {
|
|
|
+ Code = loct1.Code.ToString(),
|
|
|
+ Id = loct1.Id,
|
|
|
+ Row = loct1.Row,
|
|
|
+ Col = loct1.Col,
|
|
|
+ Layer = loct1.Layer,
|
|
|
+ Tunnel = loct1.Tunnel,
|
|
|
+ Floor = loct1.Floor,
|
|
|
+ ContGrpBarCode = loct2.ContGrpBarCode,
|
|
|
+ Shelf = loct2.Shelf,
|
|
|
+ MatCode = stock.MatCode,
|
|
|
+ MatId = stock.MatId,
|
|
|
+ WbGroupCode = stock.WbGroupCode,
|
|
|
+ InDocsNo = stock.InDocsNo,
|
|
|
+ Wind = stock.Wind,
|
|
|
+ IsControlpanel = stock.IsControlpanel,
|
|
|
+ IsTorsChk = stock.IsTorsChk,
|
|
|
+ TorsChkQty = stock.TorsChkQty,
|
|
|
+ ProductTime = stock.ProductTime
|
|
|
+ };
|
|
|
+
|
|
|
+ #region 非控制盘、已扭转的控制盘
|
|
|
+
|
|
|
+ if (reqEntity.IsControlpanel == false)
|
|
|
+ {
|
|
|
+ if (loc1ist != null && loc1ist.ToList().Where(p => p.MatId == reqEntity.MaterialId && p.Wind == reqEntity.Wind && p.IsControlpanel == reqEntity.IsControlpanel
|
|
|
+ && p.WbGroupCode == reqEntity.Wbgroup && Math.Abs((p.ProductTime - reqEntity.ProductTime).TotalHours) < 1).Any())
|
|
|
+ {
|
|
|
+ if (reqEntity.Fork == 1)
|
|
|
+ {
|
|
|
+ if (loc1ist.ToList().Where(p => p.MatId == reqEntity.MaterialId && p.Col < 70 && p.Wind == reqEntity.Wind && p.IsControlpanel == reqEntity.IsControlpanel
|
|
|
+ && p.WbGroupCode == reqEntity.Wbgroup && Math.Abs((p.ProductTime - reqEntity.ProductTime).TotalHours) < 1).Any())
|
|
|
+ {
|
|
|
+ var resloc = loc1ist.ToList().Where(p => p.MatId == reqEntity.MaterialId && p.Col < 70 && p.Wind == reqEntity.Wind && p.IsControlpanel == reqEntity.IsControlpanel
|
|
|
+ && p.WbGroupCode == reqEntity.Wbgroup && Math.Abs((p.ProductTime - reqEntity.ProductTime).TotalHours) < 1).OrderBy(p => p.ProductTime).ThenBy(p => p.Col).ThenBy(p => p.Layer).ThenBy(p => p.Row).First();
|
|
|
+ result.ResData.TunnelNum = resloc.Tunnel.ToString();
|
|
|
+ result.ResData.CellNo = resloc.Code;
|
|
|
+ result.ResData.Row = resloc.Row;
|
|
|
+ result.ResData.Colomn = resloc.Col;
|
|
|
+ result.ResData.Layer = resloc.Layer;
|
|
|
+ _logger.LogInformation("分货位埋点1:" + result.ResData.CellNo);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var resloc = loc1ist.ToList().Where(p => p.MatId == reqEntity.MaterialId && p.Wind == reqEntity.Wind && p.IsControlpanel == reqEntity.IsControlpanel
|
|
|
+ && p.WbGroupCode == reqEntity.Wbgroup && Math.Abs((p.ProductTime - reqEntity.ProductTime).TotalHours) < 1).OrderBy(p => p.ProductTime).ThenBy(p => p.Col).ThenBy(p => p.Layer).ThenBy(p => p.Row).First();
|
|
|
+ result.ResData.TunnelNum = resloc.Tunnel.ToString();
|
|
|
+ result.ResData.CellNo = resloc.Code;
|
|
|
+ result.ResData.Row = resloc.Row;
|
|
|
+ result.ResData.Colomn = resloc.Col;
|
|
|
+ result.ResData.Layer = resloc.Layer;
|
|
|
+ _logger.LogInformation("分货位埋点2:" + result.ResData.CellNo);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (reqEntity.IsControlpanel == true && reqEntity.IsTorsChk == true && reqEntity.TorsChkQty > 0) //已扭转完
|
|
|
+ {
|
|
|
+ //var starttime = reqEntity.ProductTime.Date.AddHours(13);
|
|
|
+ //var endtime = reqEntity.ProductTime.Date.AddDays(1).AddHours(8);
|
|
|
+ if (loc1ist != null && loc1ist.ToList().Where(p => p.MatId == reqEntity.MaterialId && p.Wind == reqEntity.Wind && p.IsControlpanel == reqEntity.IsControlpanel
|
|
|
+ && p.WbGroupCode == reqEntity.Wbgroup && reqEntity.IsTorsChk == p.IsTorsChk && p.TorsChkQty > 0).Any())// && p.ProductTime >= starttime && p.ProductTime <= endtime
|
|
|
+ {
|
|
|
+ if (reqEntity.Fork == 1)
|
|
|
+ {
|
|
|
+ if (loc1ist.ToList().Where(p => p.MatId == reqEntity.MaterialId && p.Col < 70 && p.Wind == reqEntity.Wind && p.IsControlpanel == reqEntity.IsControlpanel
|
|
|
+ && p.WbGroupCode == reqEntity.Wbgroup && reqEntity.IsTorsChk == p.IsTorsChk && p.TorsChkQty > 0).Any())//&& p.ProductTime >= starttime && p.ProductTime <= endtime
|
|
|
+ {
|
|
|
+ var resloc = loc1ist.ToList().Where(p => p.MatId == reqEntity.MaterialId && p.Col < 70 && p.Wind == reqEntity.Wind && p.IsControlpanel == reqEntity.IsControlpanel
|
|
|
+ && p.WbGroupCode == reqEntity.Wbgroup && reqEntity.IsTorsChk == p.IsTorsChk && p.TorsChkQty > 0).OrderBy(p => p.Col).ThenBy(p => p.Layer).ThenBy(p => p.Row).First();//&& p.ProductTime >= starttime && p.ProductTime <= endtime
|
|
|
+ result.ResData.TunnelNum = resloc.Tunnel.ToString();
|
|
|
+ result.ResData.CellNo = resloc.Code;
|
|
|
+ result.ResData.Row = resloc.Row;
|
|
|
+ result.ResData.Colomn = resloc.Col;
|
|
|
+ result.ResData.Layer = resloc.Layer;
|
|
|
+ _logger.LogInformation("分货位埋点3:" + result.ResData.CellNo);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var resloc = loc1ist.ToList().Where(p => p.MatId == reqEntity.MaterialId && p.Wind == reqEntity.Wind && p.IsControlpanel == reqEntity.IsControlpanel
|
|
|
+ && p.WbGroupCode == reqEntity.Wbgroup && reqEntity.IsTorsChk == p.IsTorsChk && p.TorsChkQty > 0).OrderBy(p => p.Col).ThenBy(p => p.Layer).ThenBy(p => p.Row).First();//&& p.ProductTime >= starttime && p.ProductTime <= endtime
|
|
|
+ result.ResData.TunnelNum = resloc.Tunnel.ToString();
|
|
|
+ result.ResData.CellNo = resloc.Code;
|
|
|
+ result.ResData.Row = resloc.Row;
|
|
|
+ result.ResData.Colomn = resloc.Col;
|
|
|
+ result.ResData.Layer = resloc.Layer;
|
|
|
+ _logger.LogInformation("分货位埋点4:" + result.ResData.CellNo);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion 非控制盘、已扭转的控制盘
|
|
|
+
|
|
|
+ //再找二深位空的
|
|
|
+ if (emptyLoc.Where(p => p.Depth == 2).Any())
|
|
|
+ {
|
|
|
+ //一深位必须空
|
|
|
+
|
|
|
+ var templist = from loc1 in _basewarecellrepository.GetList(p => p.Depth == 1 && p.StateNum == LocationState.LocationState_Empty && p.IsStop == 0 && p.Floor == reqEntity.Floor && p.Tunnel == reqEntity.TunnelNum)
|
|
|
+ join loc2 in emptyLoc.Where(p => p.Depth == 2) on new { loc1.Col, loc1.Layer } equals new { loc2.Col, loc2.Layer }
|
|
|
+ select loc2;
|
|
|
+
|
|
|
+ if (templist == null || !templist.Any())
|
|
|
+ {
|
|
|
+ result.ResCode = ResponseStatusCodeEnum.NotEnoughLocation.GetHashCode();
|
|
|
+ result.ResMsg = ResponseStatusCodeEnum.NotEnoughLocation.GetDescription() + "没有可用的二升位";
|
|
|
+ _logger.LogInformation("分货位埋点5:" + result.ResData.CellNo);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ if (!string.IsNullOrEmpty(reqEntity.CellCode))
|
|
|
+ {
|
|
|
+ var cell = reqEntity.CellCode.Split('-');
|
|
|
+ if (cell[4] == "2")
|
|
|
+ {
|
|
|
+ var cell2 = templist.Where(p => p.Depth == 2 && p.Shelf == cell[3]).OrderBy(p => p.Layer).ThenBy(p => p.Col).ThenBy(p => p.Row); //优先同货架相邻同层货位
|
|
|
+ if (cell2.Where(p => p.Depth == 2 && p.Shelf == cell[3] && p.Layer == int.Parse(cell[2])).Any())
|
|
|
+ {
|
|
|
+ var cell3 = templist.Where(p => p.Depth == 2 && p.Shelf == cell[3] && p.Layer == int.Parse(cell[2])).OrderBy(p => p.Col).ThenBy(p => p.Row).First();
|
|
|
+ result.ResData.TunnelNum = cell3.Tunnel.ToString();
|
|
|
+ result.ResData.CellNo = cell3.Code;
|
|
|
+ result.ResData.Row = cell3.Row;
|
|
|
+ result.ResData.Colomn = cell3.Col;
|
|
|
+ result.ResData.Layer = cell3.Layer;
|
|
|
+ result.ResData.Fork = 2;
|
|
|
+ _logger.LogInformation("分货位埋点6:" + result.ResData.CellNo);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (cell2.Any())
|
|
|
+ {
|
|
|
+ var cell4 = cell2.First();
|
|
|
+ result.ResData.TunnelNum = cell4.Tunnel.ToString();
|
|
|
+ result.ResData.CellNo = cell4.Code;
|
|
|
+ result.ResData.Row = cell4.Row;
|
|
|
+ result.ResData.Colomn = cell4.Col;
|
|
|
+ result.ResData.Layer = cell4.Layer;
|
|
|
+ result.ResData.Fork = 2;
|
|
|
+ _logger.LogInformation("分货位埋点7:" + result.ResData.CellNo);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var cell4 = templist.OrderBy(p => p.Col).ThenBy(p => p.Layer).ThenBy(p => p.Row).First();
|
|
|
+ result.ResData.TunnelNum = cell4.Tunnel.ToString();
|
|
|
+ result.ResData.CellNo = cell4.Code;
|
|
|
+ result.ResData.Row = cell4.Row;
|
|
|
+ result.ResData.Colomn = cell4.Col;
|
|
|
+ result.ResData.Layer = cell4.Layer;
|
|
|
+ result.ResData.Fork = 2;
|
|
|
+ _logger.LogInformation("分货位埋点8:" + result.ResData.CellNo);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (reqEntity.Fork == 2)
|
|
|
+ {
|
|
|
+ //var resloc = templist.Where(p => p.Depth == 2).OrderBy(p => p.Layer).ThenBy(p => p.Col).ThenBy(p => p.Row).First();
|
|
|
+ var resloc = templist.Where(p => p.Depth == 2).OrderBy(p => p.Col).ThenBy(p => p.Layer).ThenBy(p => p.Row).First();
|
|
|
+ result.ResData.TunnelNum = resloc.Tunnel.ToString();
|
|
|
+ result.ResData.CellNo = resloc.Code;
|
|
|
+ result.ResData.Row = resloc.Row;
|
|
|
+ result.ResData.Colomn = resloc.Col;
|
|
|
+ result.ResData.Layer = resloc.Layer;
|
|
|
+ _logger.LogInformation("分货位埋点9:" + result.ResData.CellNo);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //templist.Where(p => p.Depth == 2 && p.Col < 70).OrderBy(p => p.Layer).ThenBy(p => p.Col).ThenBy(p => p.Row).Any()
|
|
|
+ if (templist.Where(p => p.Depth == 2 && p.Col < 70).OrderBy(p => p.Col).ThenBy(p => p.Layer).ThenBy(p => p.Row).Any())
|
|
|
+ {
|
|
|
+ //var resloc = templist.Where(p => p.Depth == 2 && p.Col < 70).OrderBy(p => p.Layer).ThenBy(p => p.Col).ThenBy(p => p.Row).First();
|
|
|
+ var resloc = templist.Where(p => p.Depth == 2 && p.Col < 70).OrderBy(p => p.Col).ThenBy(p => p.Layer).ThenBy(p => p.Row).First();
|
|
|
+ result.ResData.TunnelNum = resloc.Tunnel.ToString();
|
|
|
+ result.ResData.CellNo = resloc.Code;
|
|
|
+ result.ResData.Row = resloc.Row;
|
|
|
+ result.ResData.Colomn = resloc.Col;
|
|
|
+ result.ResData.Layer = resloc.Layer;
|
|
|
+ _logger.LogInformation("分货位埋点10:" + result.ResData.CellNo);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (loc1ist == null || !loc1ist.Any())
|
|
|
+ {
|
|
|
+ result.ResCode = ResponseStatusCodeEnum.NotEnoughLocation.GetHashCode();
|
|
|
+ result.ResMsg = ResponseStatusCodeEnum.NotEnoughLocation.GetDescription() + "没有可用的一升位货位";
|
|
|
+ _logger.LogInformation("分货位埋点11:" + result.ResData.CellNo);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ if (reqEntity.Fork == 1)
|
|
|
+ {
|
|
|
+ if (loc1ist.ToList().Where(p => p.Col < 70).Any())
|
|
|
+ {
|
|
|
+ var aa = loc1ist.ToList();
|
|
|
+ var code = aa.Where(p => p.Col < 70).OrderBy(p => p.Col).ThenBy(p => p.Layer).ThenBy(p => p.Row).First();
|
|
|
+ result.ResData.TunnelNum = code.Tunnel.ToString();
|
|
|
+ result.ResData.CellNo = code.Code;
|
|
|
+ result.ResData.Row = code.Row;
|
|
|
+ result.ResData.Colomn = code.Col;
|
|
|
+ result.ResData.Layer = code.Layer;
|
|
|
+ _logger.LogInformation("分货位埋点12:" + result.ResData.CellNo);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ result.ResCode = ResponseStatusCodeEnum.NotEnoughLocation.GetHashCode();
|
|
|
+ result.ResMsg = "一货叉没有可用库位";
|
|
|
+ _logger.LogInformation("分货位埋点13:" + result.ResData.CellNo);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var loc1ist11 = from loct1 in _basewarecellrepository.GetList(loc1 => loc1.IsStop == 0 && loc1.StateNum == LocationState.LocationState_Empty
|
|
|
+ && loc1.TypeNum == LocationType.LocationType_StorageLocation
|
|
|
+ && loc1.Tunnel == reqEntity.TunnelNum
|
|
|
+ && loc1.WarehouseId == reqEntity.WarehuoseId
|
|
|
+ && loc1.Floor == reqEntity.Floor && loc1.Depth == 1 && loc1.Floor == reqEntity.Floor).ToList()
|
|
|
+ join loct2 in _basewarecellrepository.GetList(loc2 => loc2.IsStop == 0 && loc2.Depth == 2 && loc2.StateNum == LocationState.LocationState_Full
|
|
|
+ && loc2.Tunnel == reqEntity.TunnelNum && loc2.Floor == reqEntity.Floor
|
|
|
+ ).ToList()
|
|
|
+
|
|
|
+ on new { loct1.Shelf, loct1.Col, loct1.Layer } equals new { loct2.Shelf, loct2.Col, loct2.Layer }
|
|
|
+ select loct1;
|
|
|
+
|
|
|
+ var loc = loc1ist11.ToList().OrderBy(p => p.Col).ThenBy(p => p.Layer).ThenBy(p => p.Row).First();
|
|
|
+ //var loc = loc1ist.First();
|
|
|
+ result.ResData.TunnelNum = loc.Tunnel.ToString();
|
|
|
+ result.ResData.CellNo = loc.Code;
|
|
|
+ result.ResData.Row = loc.Row;
|
|
|
+ result.ResData.Colomn = loc.Col;
|
|
|
+ result.ResData.Layer = loc.Layer;
|
|
|
+
|
|
|
+ _logger.LogInformation("分货位埋点14:" + result.ResData.CellNo);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion 分配货位
|
|
|
}
|
|
|
}
|