瀏覽代碼

重绕组盘入库任务取消

xu.lu 6 月之前
父節點
當前提交
897da68edf

+ 12 - 0
wms.api/Controllers/FjController.cs

@@ -562,6 +562,18 @@ namespace wms.api.Controllers
             return ConcurrencyReqControl<CreateMaterialPalletWarehouTaskRequest, SRes>(lockerCreateMaterialPalletWarehouTask, "CreateMaterialPalletWarehouTask", reqDto.SpoolNr, reqDto, _fjService.CreateMaterialPalletWarehouTask);
         }
 
+        /// <summary>
+        ///  人工创建UT满托入库任务
+        /// </summary>
+        /// <param name="reqDto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public SRes CreateMaterialUTPalletWarehouTask(CreateMaterialPalletWarehouTaskRequest reqDto)
+        {
+            return ConcurrencyReqControl<CreateMaterialPalletWarehouTaskRequest, SRes>(lockerCreateMaterialPalletWarehouTask, "CreateMaterialUTPalletWarehouTask", reqDto.SpoolNr, reqDto, _fjService.CreateMaterialUTPalletWarehouTask);
+        }
+        
+
         /// <summary>
         ///  芯股满托创建库存信息
         /// </summary>

+ 6 - 0
wms.dto/const/FJEnumClass.cs

@@ -120,6 +120,12 @@ namespace wms.dto
         /// </summary>
         [Description("帘线退料重绕")]
         帘线退料重绕 = 18,
+
+        /// <summary>
+        ///  UT人工满托入库
+        /// </summary>
+        [Description("UT人工满托入库")]
+        UT人工满托入库 = 19,
     }
 
     /// <summary>

+ 8 - 0
wms.service/IService/IFJService.cs

@@ -102,6 +102,14 @@ namespace wms.service.IService
         /// <returns></returns>
         public SRes CreateMaterialPalletWarehouTask(CreateMaterialPalletWarehouTaskRequest reqDto);
 
+        /// <summary>
+        ///  人工创建UT满托入库任务
+        /// </summary>
+        /// <param name="reqDto"></param>
+        /// <returns></returns>
+        public SRes CreateMaterialUTPalletWarehouTask(CreateMaterialPalletWarehouTaskRequest reqDto);
+        
+
         /// <summary>
         ///  芯股满托创建库存信息
         /// </summary>

+ 298 - 1
wms.service/Service/FJService.cs

@@ -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();