|
@@ -1087,6 +1087,280 @@ namespace wms.service.Service
|
|
|
return res;
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 人工创建UT满托入库任务
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="reqDto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public SRes CreateMaterialUTPalletWarehouTask(CreateMaterialPalletWarehouTaskRequest reqDto)
|
|
|
+ {
|
|
|
+ var res = new SRes { ResCode = ResponseStatusCodeEnum.Fail.GetHashCode(), ResMsg = "失败" };
|
|
|
+
|
|
|
+
|
|
|
+ var taskMax = Convert.ToInt32(_sysconfigrepository.AsQueryable().With(SqlWith.NoLock)
|
|
|
+ .First(x => x.Code == "UTFullPalletInMax").SContent);
|
|
|
+ var taskCount = _taskrepository.AsQueryable().With(SqlWith.NoLock).Count(x =>
|
|
|
+ x.BusType == FJTaskBusType.UT人工满托入库.GetDescription() && x.Status < TaskStatus.Finish);
|
|
|
+
|
|
|
+ if (string.IsNullOrEmpty(reqDto.LocCode))
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ res.ResMsg = "站台编号不可为空,请扫描站台编号!!!!!!";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (string.IsNullOrEmpty(reqDto.TrayCode))
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ res.ResMsg = "托盘条码不可为空,请扫描托盘条码!!!!!!";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取工字轮任务信息
|
|
|
+ var taskInfo = _taskrepository.AsQueryable().With(SqlWith.NoLock)
|
|
|
+ .First(x => x.BarCode == reqDto.TrayCode && x.Status < TaskStatus.Finish);
|
|
|
+ if (taskInfo != null)
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ res.ResMsg = reqDto.TrayCode + "已有任务,请联系智能制造人员进行处理!!!!!!";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ //托盘
|
|
|
+ var container = _baseContinfo.GetSingle(p => p.ContBarCode == reqDto.TrayCode);
|
|
|
+ if (container == null)
|
|
|
+ {
|
|
|
+ var insertcon = new BaseContinfo
|
|
|
+ {
|
|
|
+ ContBarCode = reqDto.TrayCode,
|
|
|
+ Name = reqDto.TrayCode,
|
|
|
+ TypeCode = ContainerType.ContainerType_Spool.ToString(),
|
|
|
+ PrintQty = 1,
|
|
|
+ IsStop = 0,
|
|
|
+ WarehouseId = 0,
|
|
|
+ WeightQty = 0,
|
|
|
+ AddWho = "wms",
|
|
|
+ AddTime = DateTime.Now
|
|
|
+ };
|
|
|
+ //新加载具信息
|
|
|
+ if (!_baseContinfo.Insert(insertcon))
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
|
|
|
+ res.ResMsg = "托盘载具初始化失败";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //工字轮
|
|
|
+ var spoolNr = _baseContinfo.GetSingle(p => p.ContBarCode == reqDto.SpoolNr);
|
|
|
+ if (spoolNr == null)
|
|
|
+ {
|
|
|
+ var insertcon = new BaseContinfo
|
|
|
+ {
|
|
|
+ ContBarCode = reqDto.TrayCode,
|
|
|
+ Name = reqDto.TrayCode,
|
|
|
+ TypeCode = ContainerType.ContainerType_Spool.ToString(),
|
|
|
+ PrintQty = 1,
|
|
|
+ IsStop = 0,
|
|
|
+ WarehouseId = 0,
|
|
|
+ WeightQty = 0,
|
|
|
+ AddWho = "wms",
|
|
|
+ AddTime = DateTime.Now
|
|
|
+ };
|
|
|
+ //新加载具信息
|
|
|
+ if (!_baseContinfo.Insert(insertcon))
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.ErrParam.GetHashCode();
|
|
|
+ res.ResMsg = "工字轮载具初始化失败";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //物料
|
|
|
+ var mater = _basematerrepository.GetSingle(p => p.Code == reqDto.InMaterialCode);
|
|
|
+ if (mater == null)
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.MaterInfoNotExist.GetHashCode();
|
|
|
+ res.ResMsg = ResponseStatusCodeEnum.MaterInfoNotExist.GetDescription();
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ //工字轮库存
|
|
|
+ var stock = _billInvnowrepository.GetSingle(p => p.HWBarCode == reqDto.SpoolNr);
|
|
|
+ if (stock != null && stock.InvStateCode == InvState.InvEcecState_In.ToString())
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ res.ResMsg = "该工字轮条码号已在库中,请检查RFID号是否重复";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (stock != null && stock.InvStateCode == InvState.InvEcecState_OutGoing.ToString())
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ res.ResMsg = "该工字轮条码号存在出库中任务,请检查上一个任务是否已经完成";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ //托盘库存
|
|
|
+ var trayCode = _billInvnowrepository.GetSingle(p => p.ContGrpBarCode == reqDto.TrayCode);
|
|
|
+ if (trayCode != null && trayCode.InvStateCode == InvState.InvEcecState_In.ToString())
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ res.ResMsg = "该工字轮条码号已在库中,请检查RFID号是否重复";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (trayCode != null && trayCode.InvStateCode == InvState.InvEcecState_OutGoing.ToString())
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ res.ResMsg = "该工字轮条码号存在出库中任务,请检查上一个任务是否已经完成";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ //通过投入物料找到垛型编码
|
|
|
+ var stackdetail =
|
|
|
+ _billBomsetinfoRepository.GetFirst(p => p.MatCode == reqDto.InMaterialCode && p.IsStop == 0);
|
|
|
+ if (stackdetail == null)
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ res.ResMsg = reqDto.SpoolNr + "没有对应的垛型信息,物料编码" + reqDto.InMaterialCode;
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取垛型主表
|
|
|
+ var stack = _BillBomsetgrpRepository.GetSingle(p => p.Id == stackdetail.BomSetHdrId && p.IsStop == 0);
|
|
|
+
|
|
|
+ //获取工字轮任务信息
|
|
|
+ var task = _taskrepository.AsQueryable().With(SqlWith.NoLock).First(x => x.BarCode == reqDto.SpoolNr);
|
|
|
+ if (task == null)
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ res.ResMsg = reqDto.SpoolNr + "没有组盘任务,请从新注册";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ //工字轮条码信息
|
|
|
+ var barInfo = _billInvinitrepository.GetFirst(p => p.HWBarCode == reqDto.SpoolNr);
|
|
|
+ if (barInfo == null)
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ res.ResMsg = reqDto.SpoolNr + "没有条码信息";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ _db.BeginTran();
|
|
|
+
|
|
|
+ //更新条码信息
|
|
|
+ _billInvinitrepository.UpdateModelColumns(p => new BillInvinit
|
|
|
+ {
|
|
|
+ ContGrpBarCode = reqDto.TrayCode,
|
|
|
+ EditTime = DateTime.Now
|
|
|
+ }, p => p.HWBarCode == reqDto.SpoolNr);
|
|
|
+ //删除因异常导致残留的对应库存信息
|
|
|
+ _billInvnowrepository.Delete(x => x.ContGrpBarCode == reqDto.TrayCode || x.HWBarCode == reqDto.SpoolNr);
|
|
|
+
|
|
|
+ barInfo.ContGrpBarCode = reqDto.TrayCode;
|
|
|
+
|
|
|
+ //创建库存信息
|
|
|
+ //将条码表映射到库存表
|
|
|
+ var invnow = _mapper.Map<BillInvnow>(barInfo);
|
|
|
+ invnow.IsTorsChk = true;
|
|
|
+ invnow.AddTime = DateTime.Now;
|
|
|
+ invnow.Id = IdFactory.NewId();
|
|
|
+
|
|
|
+ if (!_billInvnowrepository.Insert(invnow))
|
|
|
+ {
|
|
|
+ _db.RollbackTran();
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.DataSaveErr.GetHashCode();
|
|
|
+ res.ResMsg = "人工满轮入库存储库存失败";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ //删除这个任务的阻盘记录
|
|
|
+ var taskIdList = _taskrepository.AsQueryable().With(SqlWith.NoLock)
|
|
|
+ .Where(x => x.BarCode == reqDto.SpoolNr).Select(x => x.ID).ToList();
|
|
|
+ if (taskIdList != null)
|
|
|
+ {
|
|
|
+ //删除当前任务与更新历史任务
|
|
|
+ _taskrepository.Delete(x => taskIdList.Contains(x.ID));
|
|
|
+ _wcstaskoldrepository.UpdateSplitTableModelColumns(x => new WCS_TaskOld
|
|
|
+ {
|
|
|
+ Status = TaskStatus.Cancel,
|
|
|
+ ManualRemarks = "人工满托入库,清除信息"
|
|
|
+ }, x => taskIdList.Contains(x.Id));
|
|
|
+
|
|
|
+ //TODO:入库算法
|
|
|
+ //TODO:出库算法
|
|
|
+ //TODO:最优验证算法
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断对应仓库中空货位数量
|
|
|
+ var invnowCount_1N = _basewarecellrepository.AsQueryable().With(SqlWith.NoLock).Count(x =>
|
|
|
+ x.WarehouseCode == "1N" && x.IsStop == 0 && x.StateNum == FjLocationState.Empty && x.Layer < 9);
|
|
|
+ var invnowCount_2N = _basewarecellrepository.AsQueryable().With(SqlWith.NoLock).Count(x =>
|
|
|
+ x.WarehouseCode == "2N" && x.IsStop == 0 && x.StateNum == FjLocationState.Empty && x.Layer < 9);
|
|
|
+ var taskInfoCount_1N = _taskrepository.AsQueryable().With(SqlWith.NoLock).Count(x =>
|
|
|
+ x.Status < TaskStatus.Finish && x.BusType == FJTaskBusType.人工满托入库.GetDescription() &&
|
|
|
+ x.WarehouseCode == "1N");
|
|
|
+ var taskInfoCount_2N = _taskrepository.AsQueryable().With(SqlWith.NoLock).Count(x =>
|
|
|
+ x.Status < TaskStatus.Finish && x.BusType == FJTaskBusType.人工满托入库.GetDescription() &&
|
|
|
+ x.WarehouseCode == "2N");
|
|
|
+ //创建对应任务
|
|
|
+ var count_1N = invnowCount_1N - taskInfoCount_1N;
|
|
|
+ var count_2N = invnowCount_2N - taskInfoCount_2N;
|
|
|
+ var wCode = count_1N >= count_2N ? "1N" : "2N";
|
|
|
+ if (taskMax > 0 && taskCount > 0)
|
|
|
+ if ((wCode == "1N" && taskMax <= taskInfoCount_1N) ||
|
|
|
+ (wCode == "2N" && taskMax <= taskInfoCount_2N))
|
|
|
+ {
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ res.ResMsg = $"禁止入库,最大入库任务数量已达{taskMax}";
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ //创建入库记录
|
|
|
+ var createStockInWcsTaskReqest = new FJCreateStockInWcsTaskRequest
|
|
|
+ {
|
|
|
+ BusType = FJTaskBusType.UT人工满托入库.GetDescription(),
|
|
|
+ ContGrpBarCode = reqDto.TrayCode,
|
|
|
+ Qty = 1,
|
|
|
+ Floor = 2,
|
|
|
+ MatCode = reqDto.InMaterialCode,
|
|
|
+ EquCode = reqDto.LocCode,
|
|
|
+ Type = TaskType.EnterDepot,
|
|
|
+ DocCode = "",
|
|
|
+ WorkBench = task.WorkBench,
|
|
|
+ WarehouseCode = wCode /*(count_1N <= count_2N) ? "1N" : "2N"*/
|
|
|
+ };
|
|
|
+
|
|
|
+ //下发wcs任务 - 分解方法
|
|
|
+ var taskRes = CreateStockInWcsTask(createStockInWcsTaskReqest, task.Grade, true);
|
|
|
+ if (taskRes.ResCode != 200)
|
|
|
+ {
|
|
|
+ _db.RollbackTran();
|
|
|
+ res.ResCode = taskRes.ResCode;
|
|
|
+ res.ResMsg = taskRes.ResMsg;
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ _db.CommitTran();
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ _db.RollbackTran();
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
|
|
|
+ res.ResMsg = ex.StackTrace;
|
|
|
+
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ res.ResCode = ResponseStatusCodeEnum.Sucess.GetHashCode();
|
|
|
+ res.ResMsg = ResponseStatusCodeEnum.Sucess.ToString();
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 芯股满托创建库存信息
|
|
|
/// </summary>
|
|
@@ -7891,8 +8165,28 @@ namespace wms.service.Service
|
|
|
if (task.Type == TaskType.EnterDepot)
|
|
|
{
|
|
|
//验证组盘状态
|
|
|
+ if (task.BusType == FJTaskBusType.重绕满托入库.GetDescription())
|
|
|
+ {
|
|
|
+ //验证库存状态
|
|
|
+ var stocklist = _billInvnowrepository.GetList(p =>
|
|
|
+ (p.ContGrpBarCode == task.BarCode || p.HWBarCode == task.BarCode) &&
|
|
|
+ (p.InvStateCode == InvState.InvEcecState_OutGoing.ToString() ||
|
|
|
+ p.InvStateCode == InvState.InvEcecState_BuildUp.ToString()));
|
|
|
+ if (stocklist == null || !stocklist.Any())
|
|
|
+ {
|
|
|
+ res.ResMsg = reqDto.TaskNum + ResponseStatusCodeEnum.StockNotExist.GetDescription();
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+ var wareHouse = _basewarehouserepository.GetSingle(x => x.Id == stocklist.First().WarehouseId);
|
|
|
+ if (wareHouse.TypeNum == FjLocationType.Pingku)
|
|
|
+ {
|
|
|
+ _db.BeginTran();
|
|
|
+ _billInvinitrepository.Delete(x => x.ContGrpBarCode == task.BarCode && x.InvStateCode == InvState.InvEcecState_BuildUp.ToString());
|
|
|
+ _db.CommitTran();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- else if (task.Type == TaskType.OutDepot && (task.BusType == "车间叫料" || task.BusType == "芯股站台送空托"))
|
|
|
+ else if (task.Type == TaskType.OutDepot && (task.BusType == FJTaskBusType.车间叫料.GetDescription() || task.BusType == FJTaskBusType.芯股站台送空托.GetDescription()))
|
|
|
{
|
|
|
//验证库存信息
|
|
|
var stocklist = _billInvnowrepository.GetList(p =>
|
|
@@ -7946,6 +8240,9 @@ namespace wms.service.Service
|
|
|
|
|
|
case FjLocationType.RingLibrary: //环形库的库存信息变更是在SrmPickOutCompleted
|
|
|
break;
|
|
|
+ case FjLocationType.Pingku:
|
|
|
+
|
|
|
+ break;
|
|
|
|
|
|
default:
|
|
|
throw new ArgumentOutOfRangeException();
|