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 生成波次分拣单
|
/// <summary>
|
/// 生成波次分拣单
|
/// </summary>
|
/// <param name="r"></param>
|
/// <returns></returns>
|
public OperateResult WaveCreate(BatchesResult r)
|
{
|
return UseTransaction(trans =>
|
{
|
//生成波次主表
|
CreateDAL<DapperDAL<TN_WM_WAVE_MSTEntity>>().Add(r.WaveMst, trans);
|
//生成波次子表
|
CreateDAL<DapperDAL<TN_WM_WAVE_DTLEntity>>().AddRange(r.WaveMst.WaveDtlList, trans);
|
|
if (r.ShortageOutList.Any())
|
{
|
//存缺件的生成新的发货单--主表
|
CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().AddRange(r.ShortageOutList, trans);
|
var shortageOutDtl = new List<TN_WM_OUT_DTLEntity>();
|
r.ShortageOutList.ForEach(f => shortageOutDtl.AddRange(f.OutDtlList));
|
//子表
|
CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().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<WaveServiceDAL>().UpdateOutState(stayOutMst, trans);
|
}
|
//全部缺货和取消的出库单
|
CreateDAL<WaveServiceDAL>().CancelAndAllShortageOut(r.CancelAndAllShortageOut, trans);
|
//记录仓库库存锁定明细
|
CreateDAL<DapperDAL<TN_WM_B_OUTLOCKING_DTLEntity>>().AddRange(r.OutLockingDtlList, trans);
|
//生成减少库存业务主表
|
CreateDAL<DapperDAL<TN_WM_REDUCE_INVENTORY_MSTEntity>>().AddRange(r.ReduceInventoryMstList, trans);
|
//生成减少库存业务子表
|
r.ReduceInventoryMstList.ForEach(p =>
|
{
|
//所有出库单子表数据
|
r.ReduceInventoryDtlList.AddRange(p.DTLEntity);
|
});
|
CreateDAL<DapperDAL<TN_WM_REDUCE_INVENTORY_DTLEntity>>().AddRange(r.ReduceInventoryDtlList, trans);
|
//生成分拣单主表
|
CreateDAL<DapperDAL<TN_WM_SORTING_LISTEntity>>().AddRange(r.SortingList, trans);
|
//分拣单子表数据
|
var sortingDtlList = new List<TN_WM_SORTING_DTLEntity>();
|
r.SortingList.ForEach(p =>
|
{
|
sortingDtlList.AddRange(p.SortingDtlList);
|
});
|
//生成分拣单子表
|
CreateDAL<DapperDAL<TN_WM_SORTING_DTLEntity>>().AddRange(sortingDtlList, trans);
|
//库区量表分配量上升
|
CreateDAL<WaveServiceDAL>().UpdateAreaAlloc(r.StockAreaList, trans);
|
});
|
}
|
#endregion
|
|
#region 执行分拣
|
/// <summary>
|
/// 执行分拣
|
/// </summary>
|
/// <param name="sortingEntity"></param>
|
/// <returns></returns>
|
public OperateResult ExecuteSorting(TN_WM_SORTING_LISTEntity sortingEntity)
|
{
|
return UseTransaction(trans =>
|
{
|
//更新分拣单分拣中
|
CreateDAL<DapperDAL<TN_WM_SORTING_LISTEntity>>().Update(new
|
{
|
CN_S_STATE = Constants.Sorting_Being
|
}, new
|
{
|
CN_S_SORTING_NO = sortingEntity.CN_S_SORTING_NO
|
}, trans);
|
//更新波次状态为分拣中
|
CreateDAL<DapperDAL<TN_WM_WAVE_MSTEntity>>().Update(new
|
{
|
CN_S_STATE = Constants.Sorting_Being
|
}, new
|
{
|
CN_S_WAVE_NO = sortingEntity.CN_S_FROM_NO
|
}, trans);
|
//增加分拣明细
|
CreateDAL<DapperDAL<TN_WM_SORTING_LOCATIONEntity>>().AddRange(sortingEntity.SortingLocationList, trans);
|
if (sortingEntity.Tasks.Any())
|
{
|
//增加出库任务
|
CreateDAL<DapperDAL<TN_WM_TASKEntity>>().AddRange(sortingEntity.Tasks, trans);
|
//起点置为预出库锁定,终点预入库锁定
|
foreach (var task in sortingEntity.Tasks)
|
{
|
if (task.EndAreaEntity.CN_C_IS_AUTO == Constants.Y)
|
{
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().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<DapperDAL<TN_WM_LOCATION_EXTEntity>>().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<OtherSysApi>().SendAmsTask(task);
|
if (!sendAms.Success)
|
throw new Exception(sendAms.Msg);
|
}
|
}
|
}
|
}
|
});
|
}
|
#endregion
|
|
#region 执行任务
|
/// <summary>
|
/// 执行任务
|
/// </summary>
|
/// <param name="entity"></param>
|
/// <returns></returns>
|
public OperateResult ExecuteTask(TN_WM_TASKEntity entity)
|
{
|
return UseTransaction(trans =>
|
{
|
//设置终点货位
|
CreateDAL<DapperDAL<TN_WM_TASKEntity>>().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<DapperDAL<TN_WM_LOCATION_EXTEntity>>().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<OtherSysApi>().SendAmsTask(entity);
|
if (!sendAms.Success)
|
throw new Exception(sendAms.Msg);
|
});
|
}
|
#endregion
|
}
|
}
|