| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308 | 
							- using System;
 
- using System.Collections.Generic;
 
- using WMS.Core._02Entity;
 
- using WMS.Info;
 
- using WMS.Info.Models;
 
- using WMS.Util;
 
- namespace WMS.Core.APPBLL
 
- {
 
-     public class EmptyTrayBLL : AppCoreBLL
 
-     {
 
-         public EmptyTrayBLL(bool isSkipOauth = false) : base(isSkipOauth)
 
-         {
 
-         }
 
-         public ResInfo StockOut(EmptyTrayRequestDto reqData)
 
-         {
 
-             using (var ctx = SysDbCore.GetDbCtx())
 
-             {
 
-                 ctx.BeginTran();
 
-                 try
 
-                 {
 
-                     if (string.IsNullOrWhiteSpace(reqData?.LocationNo))
 
-                         throw SysExCore.ThrowFailException("参数不能为空");
 
-                     var task = new WMS_TASK
 
-                     {
 
-                         F_addTime = DateTime.Now,
 
-                         F_addUserNo = LoginUser.UserNo,
 
-                         F_editTime = DateTime.Now,
 
-                         F_isBonded = reqData.IsBonded,
 
-                         F_posidTo = reqData.LocationNo,
 
-                         F_priority = (int)EPriority.NotUrgent,
 
-                         F_taskStatus = (int)ETaskStatus.NotIssued,
 
-                         F_taskType = (int)ETaskComType.OutStock
 
-                     };
 
-                     if (reqData.IsGroup)//空托盘组需要生成出库单和出库任务
 
-                     {
 
-                         if (ctx.Queryable<WMS_TASK>().Any(c => c.F_posidTo == reqData.LocationNo && c.F_taskStatus < (int)ETaskStatus.TaskFinish))
 
-                             return SysExCore.GetResSucc("请勿重复创建任务");
 
-                         var inventoryEntity = ctx.Queryable<BILL_INVENTORY>().Where(it => it.F_matType == (int)EMatType.Tary && it.F_isBonded == reqData.IsBonded).First();
 
-                         if (inventoryEntity == null)
 
-                             throw SysExCore.ThrowFailException("没有可用的空托盘组库存");
 
-                         var loctionEntity = ctx.Queryable<BASE_LOCATION>().Where(it => it.F_trayNo == inventoryEntity.F_trayNo).First();
 
-                         if (loctionEntity == null)
 
-                             throw SysExCore.ThrowFailException($"托盘{inventoryEntity.F_trayNo}货位数据状态异常!");
 
-                         if (loctionEntity.F_status != (int)EWareCellState.Stored)
 
-                             throw SysExCore.ThrowFailException($"当前已存在空托盘组出库任务!");
 
-                         var point = ctx.Queryable<BASE_POINT>().Where(c => c.F_no == reqData.LocationNo || c.F_agv == reqData.LocationNo).First();
 
-                         if (point == null)
 
-                             throw SysExCore.ThrowFailException($"当前点位信息无效!");
 
-                         if (point.F_type == (int)EPointType.BSCPJ || point.F_type == (int)EPointType.CPJ)
 
-                             task.F_posidNext = reqData.LocationNo;
 
-                         else
 
-                             task.F_posidNext = GetFreePointInfoByType((int)EPointType.YCK)?.F_no;//目标地址为agv点位从整盘口出
 
-                         var stockOut = new BILL_STOCKOUT
 
-                         {
 
-                             F_no = SerialNumberProvider.Instance.OrderNumber("wms", "CK"),
 
-                             F_addTime = DateTime.Now,
 
-                             F_addUserNo = LoginUser.UserNo,
 
-                             F_editTime = DateTime.Now,
 
-                             //F_locationNo = loctionEntity.F_no,
 
-                             F_orderStatus = (int)EOrderState.New,
 
-                             F_totalOrderLines = 0,
 
-                             F_orderType = (int)EStockOutOrderType.StockOutOrderTypeTray,
 
-                             F_warehouseNo = SysSetCore.GetSysSet().DefaultWarehouseNo
 
-                         };
 
-                         ctx.Insertable(stockOut).ExecuteReturnEntity();
 
-                         var stockOutLine = new BILL_STOCKOUTLINE
 
-                         {
 
-                             F_addTime = DateTime.Now,
 
-                             F_actualQty = 1,
 
-                             F_addUserNo = LoginUser.UserNo,
 
-                             F_matNo = inventoryEntity.F_matNo,
 
-                             F_matName = inventoryEntity.F_matName,
 
-                             F_matType = inventoryEntity.F_matType,
 
-                             F_orderLineNo = 1,
 
-                             F_pNo = stockOut.F_no,
 
-                             F_planQty = 1,
 
-                             F_warehouseNo = SysSetCore.GetSysSet().DefaultWarehouseNo
 
-                         };
 
-                         ctx.Insertable(stockOutLine).ExecuteReturnEntity();
 
-                         var stockOutLineDetail = new BILL_STOCKOUTLINEDETAIL
 
-                         {
 
-                             F_addTime = DateTime.Now,
 
-                             F_addUserNo = LoginUser.UserNo,
 
-                             F_locationNo = reqData.LocationNo,
 
-                             F_boxNo = inventoryEntity.F_boxNo,
 
-                             F_matName = SysSetCore.GetSysSet().DefaultEmptyTrayGroupName,
 
-                             F_matNo = SysSetCore.GetSysSet().DefaultEmptyTrayGroupNo,
 
-                             F_matType = (int)EMatType.Tary,
 
-                             F_quantity = 1,
 
-                             F_pNo = stockOut.F_no
 
-                         };
 
-                         ctx.Insertable(stockOutLine).ExecuteReturnEntity();
 
-                         task.F_orderNo = stockOut?.F_no;
 
-                         task.F_posidFrom = loctionEntity.F_no;
 
-                         task.F_posidcur = loctionEntity.F_no;
 
-                         task.F_orderType = (int)ETaskOrderType.StockOutOrderTypeEmptyTrayGroup;
 
-                         task.F_trayNo = inventoryEntity.F_trayNo;
 
-                         task.F_EquipmentType = (int)EEquipmentType.RGV;
 
-                         var upd = ctx.Updateable<BASE_LOCATION>().SetColumns(it => new BASE_LOCATION()
 
-                         {
 
-                             F_status = (int)EWareCellState.Out,
 
-                             F_editTime = DateTime.Now,
 
-                             F_editUserNo = LoginUser.UserNo,
 
-                             //F_isBonded = reqData.IsBonded
 
-                         }).Where(w => w.F_no == loctionEntity.F_no).ExecuteCommand();
 
-                         if (upd <= 0)
 
-                             throw SysExCore.ThrowFailException("更新货位状态失败,请重试。");
 
-                     }
 
-                     else
 
-                     {
 
-                         //验证拆盘机是否还有托盘
 
-                         var pointEntiry = GetFreePointInfoByType(reqData.IsBonded ? (int)EPointType.BSCPJ : (int)EPointType.CPJ);
 
-                         if (pointEntiry == null)
 
-                             throw SysExCore.ThrowFailException("获取拆盘机信息异常");
 
-                         PolicyHelper.GetRetryTimesPolicy(3, ex =>
 
-                         {
 
-                             throw ex;
 
-                         }).Execute(() =>
 
-                         {
 
-                             var resStr = httpClinet.Get(null, $"/api/Equipment/CheckState?equNo={ pointEntiry.F_no}");
 
-                             var result = resStr.ToObject<WCSResponse>();
 
-                             if (result == null || !result.isSuccess)
 
-                                 throw SysExCore.ThrowFailException($"调用wcs接口失败{result?.msg}!");
 
-                             if ((bool)result.data == true)
 
-                                 throw SysExCore.ThrowFailException($"任务创建失败,没有托盘库存!");
 
-                         });
 
-                         task.F_orderType = (int)ETaskOrderType.StockOutOrderTypeTray;
 
-                         task.F_posidFrom = pointEntiry.F_no;
 
-                         task.F_posidcur = pointEntiry.F_no;
 
-                         task.F_EquipmentType = (int)EEquipmentType.Convey;
 
-                     }
 
-                     ctx.Insertable(task).ExecuteReturnEntity();
 
-                     ctx.CommitTran();
 
-                     return SysExCore.GetResSucc();
 
-                 }
 
-                 catch (Exception ex)
 
-                 {
 
-                     ctx.RollbackTran();
 
-                     throw ex;
 
-                 }
 
-                 finally
 
-                 {
 
-                     ctx.Dispose();
 
-                 }
 
-             }
 
-         }
 
-         public ResInfo TrayEntry(ScanCodeRequest reqData)
 
-         {
 
-             using (var ctx = SysDbCore.GetDbCtx())
 
-             {
 
-                 try
 
-                 {
 
-                     if (string.IsNullOrWhiteSpace(reqData?.LocationNo) || string.IsNullOrWhiteSpace(reqData.TrayNo))
 
-                         throw SysExCore.ThrowFailException("参数不能为空!");
 
-                     var point = ctx.Queryable<BASE_POINT>().First(p => p.F_no == reqData.LocationNo);
 
-                     if (point == null || !(point.F_type >= (int)EPointType.YLCKJXK && point.F_type <= (int)EPointType.YLRKJXK))
 
-                         throw SysExCore.ThrowFailException("请扫码正确的位置码!");
 
-                     if (ctx.Queryable<BILL_INVENTORY>().Any(a => a.F_trayNo == reqData.TrayNo))
 
-                         throw SysExCore.ThrowFailException("当前托盘存在货位信息,无法生成空托盘入库任务!");
 
-                     var task = new WMS_TASK
 
-                     {
 
-                         F_addTime = DateTime.Now,
 
-                         F_addUserNo = LoginUser.UserNo,
 
-                         F_editTime = DateTime.Now,
 
-                         F_trayNo = reqData.TrayNo,
 
-                         F_posidTo = GetFreePointInfoByType(reqData.TrayNo.StartsWith("B") ? (int)EPointType.BSDPJ : (int)EPointType.DPJ).F_no,
 
-                         F_isBonded = reqData.TrayNo.StartsWith("B"),
 
-                         F_priority = (int)EPriority.NotUrgent,
 
-                         F_taskStatus = (int)ETaskStatus.NotIssued,
 
-                         F_taskType = (int)ETaskComType.InStock,
 
-                         F_EquipmentType = (int)EEquipmentType.Convey,
 
-                         F_posidFrom = reqData.LocationNo,
 
-                         F_posidcur = reqData.LocationNo,
 
-                         F_orderType = (int)ETaskOrderType.EntryOrderTypeTray,
 
-                     };
 
-                     task.F_posidNext = task.F_posidTo;
 
-                     ctx.Insertable(task).ExecuteReturnEntity();
 
-                     return SysExCore.GetResSucc("空托盘入库任务生成成功");
 
-                 }
 
-                 catch (Exception ex)
 
-                 {
 
-                     throw ex;
 
-                 }
 
-             }
 
-         }
 
-         public ResInfo TrayGroupEntry(ScanCodeRequest reqData, bool IsBonded = false)
 
-         {
 
-             using (var ctx = SysDbCore.GetDbCtx())
 
-             {
 
-                 try
 
-                 {
 
-                     if (string.IsNullOrWhiteSpace(reqData?.LocationNo))
 
-                         throw SysExCore.ThrowFailException("参数不能为空");
 
-                     if (ctx.Queryable<WMS_TASK>().Any(c => c.F_posidFrom == reqData.LocationNo && c.F_taskStatus < (int)ETaskStatus.TaskFinish))
 
-                         return SysExCore.GetResSucc("请勿重复创建任务");
 
-                     if (!string.IsNullOrWhiteSpace(reqData.TrayNo) && !IsBonded)
 
-                         IsBonded = reqData.TrayNo.StartsWith("B");
 
-                     reqData.TrayNo = string.IsNullOrWhiteSpace(reqData.TrayNo) ? Guid.NewGuid().ToString() : reqData.TrayNo;//界面传入托盘码只为了区分是否保税,托盘组默认生成guid以便存库操作
 
-                     var point = ctx.Queryable<BASE_POINT>().First(p => p.F_no == reqData.LocationNo && p.F_status == (int)EPointSatus.Idle);
 
-                     if (point.F_type == (int)EPointType.YCK)//异常口处理逻辑
 
-                     {
 
-                         var curTask = ctx.Queryable<WMS_TASK>().Where(f => f.F_taskStatus < (int)ETaskStatus.TaskFinish && f.F_trayNo == reqData.TrayNo).First();
 
-                         if (curTask == null)
 
-                             throw SysExCore.ThrowFailException("当前异常任务找不到对应的入库任务!");
 
-                         ctx.Updateable<WMS_TASK>().SetColumns(it => new WMS_TASK()
 
-                         {
 
-                             F_editTime = DateTime.Now,
 
-                             F_editUserNo = LoginUser.UserNo,
 
-                             F_posidFrom = reqData.LocationNo,
 
-                             F_posidcur = reqData.LocationNo,
 
-                             F_taskStatus = (int)ETaskStatus.NotIssued,
 
-                             F_posidNext = "1036"
 
-                         }).Where(w => w.F_taskNo == curTask.F_taskNo).ExecuteCommand();
 
-                         ctx.CommitTran();
 
-                         return SysExCore.GetResSucc("异常口任务生成成功"); ;
 
-                     }
 
-                     if (point == null || (point.F_type != (int)EPointType.DPJ && point.F_type != (int)EPointType.CPAGV && point.F_type != (int)EPointType.BSDPJ))
 
-                         throw SysExCore.ThrowFailException("点位信息无效!");
 
-                     ctx.BeginTran();
 
-                     var task = new WMS_TASK
 
-                     {
 
-                         F_addTime = DateTime.Now,
 
-                         F_addUserNo = LoginUser.UserNo,
 
-                         F_editTime = DateTime.Now,
 
-                         F_trayNo = reqData.TrayNo,
 
-                         F_isBonded = IsBonded,
 
-                         //F_posidNext = GetFreePointInfoByType((int)EPointType.RKDFPHWDW).F_no,
 
-                         F_priority = (int)EPriority.NotUrgent,
 
-                         F_taskStatus = (int)ETaskStatus.NotIssued,
 
-                         F_taskType = (int)ETaskComType.InStock,
 
-                         F_posidFrom = reqData.LocationNo,
 
-                         F_posidcur = reqData.LocationNo,
 
-                         F_orderType = (int)ETaskOrderType.EntryOrderTypeTrayGroup
 
-                     };
 
-                     //task.F_posidFrom = GetFreePointInfoByType(reqData.TrayNo.StartsWith("B") ? (int)EPointType.BSDPJ : (int)EPointType.DPJ).F_no;
 
-                     var entryorder = ctx.Insertable(new BILL_ENTRYORDER
 
-                     {
 
-                         F_addTime = DateTime.Now,
 
-                         F_addUserNo = LoginUser.UserNo,
 
-                         F_isBonded = IsBonded,
 
-                         F_orderStatus = (int)EOrderState.New,
 
-                         F_orderType = (int)EEntryOrderType.EntryOrderTypeTray,
 
-                         F_no = SerialNumberProvider.Instance.OrderNumber("wms", "RK"),
 
-                         F_totalOrderLines = 0,
 
-                         F_trayNo = reqData.TrayNo,
 
-                         F_warehouseNo = SysSetCore.GetSysSet().DefaultWarehouseNo
 
-                     }).ExecuteReturnEntity();
 
-                     task.F_orderNo = entryorder.F_no;
 
-                     //添加空托盘库存
 
-                     List<BILL_INVENTORY> lstInv = new List<BILL_INVENTORY>();
 
-                     lstInv.Add(new BILL_INVENTORY
 
-                     {
 
-                         F_addTime = DateTime.Now,
 
-                         F_addUserNo = LoginUser.UserNo,
 
-                         F_editTime = DateTime.Now,
 
-                         F_matNo = SysSetCore.GetSysSet().DefaultEmptyTrayGroupNo,
 
-                         F_matType = (int)EMatType.Tary,
 
-                         F_quantity = 1,
 
-                         F_trayNo = reqData.TrayNo,
 
-                         F_boxNo = Guid.NewGuid().ToString(),
 
-                         F_matName = SysSetCore.GetSysSet().DefaultEmptyTrayGroupName,
 
-                         F_warehouseNo = SysSetCore.GetSysSet().DefaultWarehouseNo
 
-                     });
 
-                     //更新库存
 
-                     UpdateInventory(lstInv, ctx);
 
-                     if (point.F_type == (int)EPointType.CPAGV)
 
-                     {
 
-                         var p = GetFreePointInfoByType((int)EPointType.SSXRK);
 
-                         task.F_EquipmentType = (int)EEquipmentType.AGV;
 
-                         task.F_posidNext = p.F_no;
 
-                     }
 
-                     else
 
-                     {
 
-                         var loc = ctx.Queryable<BASE_LOCATION>().OrderBy("F_layer ASC, F_line DESC,F_cell asc").First(f => f.F_status == (int)EWareCellState.Empty);
 
-                         if (loc == null)
 
-                             throw SysExCore.ThrowFailException($"没有可分配的货位!");
 
-                         ctx.Updateable<BASE_LOCATION>().SetColumns(it => new BASE_LOCATION()
 
-                         {
 
-                             F_editTime = DateTime.Now,
 
-                             F_editUserNo = LoginUser.UserNo,
 
-                             F_status = (int)EWareCellState.In,
 
-                             F_isBonded = IsBonded,
 
-                             F_trayNo = reqData.TrayNo
 
-                         }).Where(it => it.F_no == loc.F_no).ExecuteCommand();
 
-                         task.F_EquipmentType = (int)EEquipmentType.Convey;
 
-                         task.F_posidNext = loc.F_no;
 
-                         task.F_posidTo = loc.F_no;
 
-                     }
 
-                     ctx.Insertable(task).ExecuteReturnEntity();
 
-                     ctx.CommitTran();
 
-                     return SysExCore.GetResSucc("空托盘组入库任务生成成功");
 
-                 }
 
-                 catch (Exception ex)
 
-                 {
 
-                     ctx.RollbackTran();
 
-                     throw ex;
 
-                 }
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |