using HH.WMS.BLL.CoreServer;
|
using HH.WMS.BLL.Interface;
|
using HH.WMS.Common;
|
using HH.WMS.DAL;
|
using HH.WMS.DAL.Basic;
|
using HH.WMS.DAL.InStock;
|
using HH.WMS.DAL.OutStock;
|
using HH.WMS.Entitys;
|
using HH.WMS.Entitys.Basic;
|
using HH.WMS.Entitys.Common;
|
using HH.WMS.Entitys.Entitys.PrintDataSource;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace HH.WMS.BLL.OutStock
|
{
|
public class TN_WM_WAVE_MSTBLL : DapperBaseBLL
|
{
|
#region 打单
|
/// <summary>
|
/// 打单
|
/// </summary>
|
/// <param name="bResult"></param>
|
/// <returns></returns>
|
public OperateResult CreateBill(BatchesResult bResult)
|
{
|
return UseTransaction(trans =>
|
{
|
//生成波次主表
|
CreateDAL<DapperDAL<TN_WM_WAVE_MSTEntity>>().Add(bResult.WaveMst, trans);
|
//生成波次子表
|
CreateDAL<DapperDAL<TN_WM_WAVE_DTLEntity>>().AddRange(bResult.WaveMst.WaveDtlList, trans);
|
//修改出库订单主子表状态
|
CreateDAL<TN_WM_OUT_MSTDAL>().UpdateState(bResult.OutMstList, trans);
|
bResult.OutMstList.ForEach(x => x.CN_S_WAVE_CODE = bResult.WaveMst.CN_S_WAVE_NO);
|
//修改波次
|
CreateDAL<TN_WM_OUT_MSTDAL>().UpdateWave(bResult.OutMstList, trans);
|
//记录仓库库存锁定明细
|
CreateDAL<DapperDAL<TN_WM_B_OUTLOCKING_DTLEntity>>().AddRange(bResult.OutLockingDtlList, trans);
|
//生成出库单主表
|
CreateDAL<DapperDAL<TN_WM_REDUCE_INVENTORY_MSTEntity>>().AddRange(bResult.ReduceInventoryMstList, trans);
|
//生成出库单子表
|
CreateDAL<DapperDAL<TN_WM_REDUCE_INVENTORY_DTLEntity>>().AddRange(bResult.ReduceInventoryDtlList, trans);
|
//生成分拣单
|
CreateDAL<DapperDAL<TN_WM_SORTING_LISTEntity>>().AddRange(bResult.SortingList, trans);
|
var sortingDtlList = new List<TN_WM_SORTING_DTLEntity>();
|
var sortingLocationList = new List<TN_WM_SORTING_LOCATIONEntity>();
|
bResult.SortingList.ForEach(p =>
|
{
|
sortingDtlList.AddRange(p.SortingDtlList);
|
sortingLocationList.AddRange(p.SortingLocationList);
|
});
|
//生成分拣单子表
|
CreateDAL<DapperDAL<TN_WM_SORTING_DTLEntity>>().AddRange(sortingDtlList, trans);
|
////生成分拣单明细
|
CreateDAL<DapperDAL<TN_WM_SORTING_LOCATIONEntity>>().AddRange(sortingLocationList, trans);
|
//库区量表分配量上升
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().UpdateAreaAlloc(bResult.StockAreaList, trans);
|
//托盘物料分配量上升
|
CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().UpdateTrayItemAllocQty(bResult.TrayItemList, trans);
|
|
foreach (var sortingEntity in bResult.SortingList)
|
{
|
//生成任务
|
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
|
|
public OperateResult GenerateSorting(BatchesResult bResult)
|
{
|
return UseTransaction(trans =>
|
{
|
//生成波次主表
|
CreateDAL<DapperDAL<TN_WM_WAVE_MSTEntity>>().Add(bResult.WaveMst, trans);
|
//生成波次子表
|
CreateDAL<DapperDAL<TN_WM_WAVE_DTLEntity>>().AddRange(bResult.WaveMst.WaveDtlList, trans);
|
//修改出库订单主子表状态和子表数量
|
CreateDAL<TN_WM_OUT_MSTDAL>().UpdateStateAndQty(bResult.OutMstList, trans);
|
bResult.OutMstList.ForEach(x => x.CN_S_WAVE_CODE = bResult.WaveMst.CN_S_WAVE_NO);
|
//修改波次
|
CreateDAL<TN_WM_OUT_MSTDAL>().UpdateWave(bResult.OutMstList, trans);
|
//记录仓库库存锁定明细
|
CreateDAL<DapperDAL<TN_WM_B_OUTLOCKING_DTLEntity>>().AddRange(bResult.OutLockingDtlList, trans);
|
//生成出库单主表
|
CreateDAL<DapperDAL<TN_WM_REDUCE_INVENTORY_MSTEntity>>().AddRange(bResult.ReduceInventoryMstList, trans);
|
//生成出库单子表
|
CreateDAL<DapperDAL<TN_WM_REDUCE_INVENTORY_DTLEntity>>().AddRange(bResult.ReduceInventoryDtlList, trans);
|
//生成分拣单
|
CreateDAL<DapperDAL<TN_WM_SORTING_LISTEntity>>().AddRange(bResult.SortingList, trans);
|
var sortingDtlList = new List<TN_WM_SORTING_DTLEntity>();
|
var sortingLocationList = new List<TN_WM_SORTING_LOCATIONEntity>();
|
bResult.SortingList.ForEach(p =>
|
{
|
sortingDtlList.AddRange(p.SortingDtlList);
|
sortingLocationList.AddRange(p.SortingLocationList);
|
});
|
//生成分拣单子表
|
CreateDAL<DapperDAL<TN_WM_SORTING_DTLEntity>>().AddRange(sortingDtlList, trans);
|
//生成分拣单明细
|
CreateDAL<DapperDAL<TN_WM_SORTING_LOCATIONEntity>>().AddRange(sortingLocationList, trans);
|
//库区量表分配量上升
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().UpdateAreaAlloc(bResult.StockAreaList, trans);
|
//托盘物料分配量上升
|
CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().UpdateTrayItemAllocQty(bResult.TrayItemList, trans);
|
|
foreach (var sortingEntity in bResult.SortingList)
|
{
|
//生成任务
|
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);
|
}
|
}
|
}
|
}
|
}
|
});
|
}
|
|
#region 保存物流
|
/// <summary>
|
/// 保存物流
|
/// </summary>
|
/// <param name="param"></param>
|
/// <returns></returns>
|
public OperateResult SaveWayBill(object param)
|
{
|
return CreateDAL<TN_WM_WAVE_MSTDAL>().SaveWayBill(param);
|
}
|
#endregion
|
|
#region 保存打印信息
|
/// <summary>
|
/// 保存打印信息
|
/// </summary>
|
/// <param name="outMstList"></param>
|
/// <param name="printTask"></param>
|
/// <param name="printType"></param>
|
/// <param name="outPackList"></param>
|
/// <returns></returns>
|
public OperateResult SavePrinter(List<TN_WM_OUT_MSTEntity> outMstList, TN_WM_PRINT_TASKEntity printTask, PrintType printType,
|
List<TN_WM_B_OUT_PACKEntity> outPackList)
|
{
|
return UseTransaction(trans =>
|
{
|
//添加打印任务
|
CreateDAL<DapperDAL<TN_WM_PRINT_TASKEntity>>().Add(printTask, trans);
|
//更新物流单打印标识
|
CreateDAL<TN_WM_OUT_MSTDAL>().UpdatePrint(outMstList, printType, trans);
|
//添加包装码
|
if (outPackList != null && outPackList.Any())
|
CreateDAL<DapperDAL<TN_WM_B_OUT_PACKEntity>>().AddRange(outPackList, trans);
|
});
|
}
|
#endregion
|
|
#region 保存发货打印任务
|
/// <summary>
|
/// 保存发货打印任务
|
/// </summary>
|
/// <param name="outMstList"></param>
|
/// <param name="printTask"></param>
|
/// <returns></returns>
|
public OperateResult SaveInvoicePrint(List<TN_WM_OUT_MSTEntity> outMstList, TN_WM_PRINT_TASKEntity printTask)
|
{
|
return UseTransaction(trans =>
|
{
|
//添加打印任务
|
CreateDAL<DapperDAL<TN_WM_PRINT_TASKEntity>>().Add(printTask, trans);
|
//更新发货单打印标识
|
CreateDAL<TN_WM_OUT_MSTDAL>().UpdatePrint(outMstList, PrintType.Invoice, trans);
|
});
|
}
|
#endregion
|
|
#region 确认包装复验
|
/// <summary>
|
/// 确认包装复验
|
/// </summary>
|
/// <param name="reviewItems"></param>
|
/// <param name="boxDtlList"></param>
|
/// <returns></returns>
|
public OperateResult ConfirmReview(bool isAllReview, string outNo, List<TN_WM_ORDER_SORTING_RELEntity> reviewItems, List<TN_WM_B_BOX_DTLEntity> boxDtlList)
|
{
|
return UseTransaction(trans =>
|
{
|
CreateDAL<DapperDAL<TN_WM_ORDER_SORTING_RELEntity>>().AddRange(reviewItems, trans);
|
if (boxDtlList.Any())
|
CreateDAL<DapperDAL<TN_WM_B_BOX_DTLEntity>>().AddRange(boxDtlList, trans);
|
if (isAllReview)
|
{
|
//修改主表状态
|
CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().Update(new { CN_S_STATE = Constants.State_Rechecked }, new { CN_S_OP_NO = outNo }, trans);
|
//修改子表状态
|
CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().Update(new { CN_S_STATE = Constants.State_Rechecked }, new { CN_S_OP_NO = outNo }, trans);
|
}
|
});
|
}
|
#endregion
|
|
#region 确认发货
|
/// <summary>
|
/// 确认发货
|
/// </summary>
|
/// <param name="opNo"></param>
|
/// <returns></returns>
|
public OperateResult DeliverGoods(string opNo)
|
{
|
//K3对接,销售出库
|
string isUseK3 = "";
|
string stockCode = "";
|
|
var currentOutMst = CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().GetSingleEntity(new
|
{
|
CN_S_OP_NO = opNo
|
});
|
if (currentOutMst != null)
|
stockCode = currentOutMst.CN_S_STOCK_CODE;
|
|
// 出库发送K3-拼接销售出库实体
|
List<K3_SalesDeliveryEntity> K3SalesDeliveryList = new List<K3_SalesDeliveryEntity>();
|
|
//获取策略:是否需要与K3对接
|
isUseK3 = GetStrategy(stockCode, StrategyKey.IsUseK3);
|
//吉鑫祥项目需要反馈K3系统
|
if (Constants.SysConfig.APP_NAME== "JXX" && isUseK3.Equals("Y"))
|
{
|
//拼接实体
|
List<K3_SalesDeliveryEntity> returnEntity = new InfK3Request().GetSalesDeliveryData(opNo);
|
if (returnEntity.Any())
|
{
|
K3SalesDeliveryList.AddRange(returnEntity);
|
}
|
}
|
|
//库存锁定明细
|
var outLockDtl = CreateDAL<DapperDAL<TN_WM_B_OUTLOCKING_DTLEntity>>().GetList(new
|
{
|
CN_S_FROM_NO = opNo
|
});
|
|
OperateResult or = UseTransaction(trans =>
|
{
|
//吉鑫祥项目需要反馈K3系统
|
if (K3SalesDeliveryList.Any())
|
{
|
OperateResult re = new InfK3Request().sendK3_Sales_Delivery(K3SalesDeliveryList);
|
if (!re.Success)
|
{
|
throw new Exception(re.Msg);
|
}
|
}
|
|
//修改主表状态
|
CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().Update(new { CN_S_STATE = Constants.State_Completed }, new { CN_S_OP_NO = opNo }, trans);
|
//修改子表状态
|
CreateDAL<DapperDAL<TN_WM_OUT_DTLEntity>>().Update(new { CN_S_STATE = Constants.State_Completed }, new { CN_S_OP_NO = opNo }, trans);
|
//降库存
|
if (outLockDtl.Any())
|
{
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().UpdateAllocQtyByLock(Constants.Rule_OutOrder, outLockDtl, trans);
|
//删除锁定明细
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().DeleteOutLock(outLockDtl, trans);
|
}
|
|
//OperateResult or = new OutCommint().OutCommit(currentOutMst.CN_S_OP_TYPE, currentOutMst.CN_S_FROM_NO);
|
//OperateResult or = new OutCommint().UpdateRdrecordCheckFlag(currentOutMst.CN_S_FROM_NO, currentOutMst.CN_S_OP_TYPE);
|
//or = new OtherSysApi().OutOrderConmit(currentOutMst.CN_S_OP_TYPE, currentOutMst.CN_S_FROM_NO);
|
//if (or.Status == ResultStatus.Error)
|
// throw new Exception(or.Msg);
|
});
|
if (or.Status == ResultStatus.Success)
|
{
|
or = new OtherSysApi().OutOrderConmit(currentOutMst.CN_S_OP_TYPE, currentOutMst.CN_S_FROM_NO);
|
return or;
|
}
|
return or;
|
}
|
#endregion
|
|
#region 确认分播
|
/// <summary>
|
/// 确认分播
|
/// </summary>
|
/// <param name="waveNo"></param>
|
/// <returns></returns>
|
public OperateResult ConfirmSowing(string waveNo)
|
{
|
return UseTransaction(trans =>
|
{
|
CreateDAL<DapperDAL<TN_WM_WAVE_MSTEntity>>().Update(new
|
{
|
CN_S_STATE = Constants.Wave_Sowed
|
}, new
|
{
|
CN_S_WAVE_NO = waveNo
|
}, trans);
|
CreateDAL<DapperDAL<TN_WM_WAVE_DTLEntity>>().Update(new
|
{
|
CN_S_STATE = Constants.Wave_Sowed
|
}, new
|
{
|
CN_S_WAVE_NO = waveNo
|
}, trans);
|
});
|
}
|
#endregion
|
|
#region 波次列表
|
/// <summary>
|
/// 波次列表
|
/// </summary>
|
/// <param name="searchModel"></param>
|
/// <returns></returns>
|
public OperateResult WaveList(SearchModel searchModel)
|
{
|
return CreateDAL<TN_WM_WAVE_MSTDAL>().WaveList(searchModel);
|
}
|
#endregion
|
|
|
public OperateResult UpdateRdrecordCheckFlag(string opFromNo, string opType)
|
{
|
OperateResult updateState = new OperateResult() { Success = true, Msg = "" };
|
try
|
{
|
Log.Info("开始进入出库确认更新", opFromNo + "||" + opType);
|
string tableName = "";//表名
|
switch (opType)
|
{
|
case "其他出库":
|
tableName = "Rdrecord09$Rdrecords09";
|
break;
|
case "销售出库":
|
tableName = "Rdrecord32$Rdrecords32";
|
break;
|
default:
|
break;
|
}
|
|
Log.Info("确认tableName", tableName);
|
|
//string opDatastr = WebApiManager.HttpWMS_Get("Api/Out/GetOutU8Data?opNo=" + opFromNo);
|
|
//Log.Info("获取WMS数据", opDatastr);
|
|
//OperateResult opData = JsonConvert.DeserializeObject<OperateResult>(opDatastr);
|
|
TN_WM_OUT_MSTEntity outMst =CreateDAL<DapperDAL<TN_WM_OUT_MSTEntity>>().ExecuteSingleEntity<TN_WM_OUT_MSTEntity>("select * from TN_WM_OUT_MST where CN_S_FROM_NO='" + opFromNo + "'");
|
|
if (string.IsNullOrEmpty(tableName))
|
{
|
//updateState.Success = false;
|
//updateState.Msg = "更新失败,根据提供的业务类型,未定位到具体表!";
|
return OperateResult.Error("更新失败,根据提供的业务类型,未定位到具体表!");
|
}
|
|
Log.Info("解析WMS数据成功,开始更新中间表", "");
|
SqlExecuteResult result = BLLCreator.Create<OutDataBLL>().UpdateRdrecordCheckFlag(opFromNo, tableName, outMst);
|
//SqlExecuteResult result = new OutDataDAL().UpdateRdrecordCheckFlag(opFromNo, tableName, outMst);
|
if (!result.Success)
|
{
|
//updateState.Success = false;
|
//updateState.Msg = result.Exception.ToString();
|
Log.Info("出库确认更新", JsonConvert.SerializeObject(updateState));
|
return OperateResult.Error(result.Exception.ToString());
|
}
|
return updateState;
|
}
|
catch (Exception ex)
|
{
|
Log.Info("确认tableName", ex.Message.ToString());
|
return OperateResult.Error(ex.Message);
|
}
|
|
}
|
}
|
}
|