using HH.WMS.Entitys; using HH.WMS.Entitys.Common; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using HH.WMS.Entitys.Basic; using HH.WMS.DAL; using HH.WMS.Common; using HH.WMS.BLL; using HH.WMS.DAL.CoreServer; using HH.WMS.BLL.Interface; namespace HH.WMS.BLL.CoreServer { public class WaveServiceBLL : DapperBaseBLL { #region 生成波次分拣单 /// /// 生成波次分拣单 /// /// /// public OperateResult WaveCreate(BatchesResult r) { return UseTransaction(trans => { //生成波次主表 CreateDAL>().Add(r.WaveMst, trans); //生成波次子表 CreateDAL>().AddRange(r.WaveMst.WaveDtlList, trans); if (r.ShortageOutList.Any()) { //存缺件的生成新的发货单--主表 CreateDAL>().AddRange(r.ShortageOutList, trans); var shortageOutDtl = new List(); r.ShortageOutList.ForEach(f => shortageOutDtl.AddRange(f.OutDtlList)); //子表 CreateDAL>().AddRange(shortageOutDtl, trans); } //没有缺货的出库单,要改变状态 var stayOutMst = r.OutMstList.FindAll(f => !r.ShortageOutList.Exists(e => e.CN_S_OP_NO == f.CN_S_OP_NO)); if (stayOutMst.Any()) { //设置状态为待出库,赋值所属波次 CreateDAL().UpdateOutState(stayOutMst, trans); } //全部缺货和取消的出库单 CreateDAL().CancelAndAllShortageOut(r.CancelAndAllShortageOut, trans); //记录仓库库存锁定明细 CreateDAL>().AddRange(r.OutLockingDtlList, trans); //生成减少库存业务主表 CreateDAL>().AddRange(r.ReduceInventoryMstList, trans); //生成减少库存业务子表 r.ReduceInventoryMstList.ForEach(p => { //所有出库单子表数据 r.ReduceInventoryDtlList.AddRange(p.DTLEntity); }); CreateDAL>().AddRange(r.ReduceInventoryDtlList, trans); //生成分拣单主表 CreateDAL>().AddRange(r.SortingList, trans); //分拣单子表数据 var sortingDtlList = new List(); r.SortingList.ForEach(p => { sortingDtlList.AddRange(p.SortingDtlList); }); //生成分拣单子表 CreateDAL>().AddRange(sortingDtlList, trans); //库区量表分配量上升 CreateDAL().UpdateAreaAlloc(r.StockAreaList, trans); }); } #endregion #region 执行分拣 /// /// 执行分拣 /// /// /// public OperateResult ExecuteSorting(TN_WM_SORTING_LISTEntity sortingEntity) { return UseTransaction(trans => { //更新分拣单分拣中 CreateDAL>().Update(new { CN_S_STATE = Constants.Sorting_Being }, new { CN_S_SORTING_NO = sortingEntity.CN_S_SORTING_NO }, trans); //更新波次状态为分拣中 CreateDAL>().Update(new { CN_S_STATE = Constants.Sorting_Being }, new { CN_S_WAVE_NO = sortingEntity.CN_S_FROM_NO }, trans); //增加分拣明细 CreateDAL>().AddRange(sortingEntity.SortingLocationList, trans); if (sortingEntity.Tasks.Any()) { //增加出库任务 CreateDAL>().AddRange(sortingEntity.Tasks, trans); //起点置为预出库锁定,终点预入库锁定 foreach (var task in sortingEntity.Tasks) { if (task.EndAreaEntity.CN_C_IS_AUTO == Constants.Y) { CreateDAL>().Update(new { CN_S_LOCATION_STATE = Constants.Location_State_OutLock }, new { CN_S_LOCATION_CODE = task.CN_S_START_BIT }, trans); //存在终点 if (!string.IsNullOrEmpty(task.CN_S_END_BIT)) { CreateDAL>().Update(new { CN_S_LOCATION_STATE = Constants.Location_State_InLock }, new { CN_S_LOCATION_CODE = task.CN_S_END_BIT }, trans); //发送ams任务 var sendAms = BLLCreator.Create().SendAmsTask(task); if (!sendAms.Success) throw new Exception(sendAms.Msg); } } } } }); } #endregion #region 执行任务 /// /// 执行任务 /// /// /// public OperateResult ExecuteTask(TN_WM_TASKEntity entity) { return UseTransaction(trans => { //设置终点货位 CreateDAL>().Update(new { CN_S_END_BIT = entity.CN_S_END_BIT, CN_B_SENDAMS = true, }, new { CN_S_TASK_NO = entity.CN_S_TASK_NO }, trans); //货位状态 if (entity.EndAreaEntity.CN_C_IS_AUTO == Constants.Y) { CreateDAL>().Update(new { CN_S_LOCATION_STATE = Constants.Location_State_InLock }, new { CN_S_LOCATION_CODE = entity.CN_S_END_BIT }, trans); } //发送ams任务 var sendAms = BLLCreator.Create().SendAmsTask(entity); if (!sendAms.Success) throw new Exception(sendAms.Msg); }); } #endregion } }