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 打单 /// /// 打单 /// /// /// public OperateResult CreateBill(BatchesResult bResult) { return UseTransaction(trans => { //生成波次主表 CreateDAL>().Add(bResult.WaveMst, trans); //生成波次子表 CreateDAL>().AddRange(bResult.WaveMst.WaveDtlList, trans); //修改出库订单主子表状态 CreateDAL().UpdateState(bResult.OutMstList, trans); bResult.OutMstList.ForEach(x => x.CN_S_WAVE_CODE = bResult.WaveMst.CN_S_WAVE_NO); //修改波次 CreateDAL().UpdateWave(bResult.OutMstList, trans); //记录仓库库存锁定明细 CreateDAL>().AddRange(bResult.OutLockingDtlList, trans); //生成出库单主表 CreateDAL>().AddRange(bResult.ReduceInventoryMstList, trans); //生成出库单子表 CreateDAL>().AddRange(bResult.ReduceInventoryDtlList, trans); //生成分拣单 CreateDAL>().AddRange(bResult.SortingList, trans); var sortingDtlList = new List(); var sortingLocationList = new List(); bResult.SortingList.ForEach(p => { sortingDtlList.AddRange(p.SortingDtlList); sortingLocationList.AddRange(p.SortingLocationList); }); //生成分拣单子表 CreateDAL>().AddRange(sortingDtlList, trans); ////生成分拣单明细 CreateDAL>().AddRange(sortingLocationList, trans); //库区量表分配量上升 CreateDAL().UpdateAreaAlloc(bResult.StockAreaList, trans); //托盘物料分配量上升 CreateDAL().UpdateTrayItemAllocQty(bResult.TrayItemList, trans); foreach (var sortingEntity in bResult.SortingList) { //生成任务 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 public OperateResult GenerateSorting(BatchesResult bResult) { return UseTransaction(trans => { //生成波次主表 CreateDAL>().Add(bResult.WaveMst, trans); //生成波次子表 CreateDAL>().AddRange(bResult.WaveMst.WaveDtlList, trans); //修改出库订单主子表状态和子表数量 CreateDAL().UpdateStateAndQty(bResult.OutMstList, trans); bResult.OutMstList.ForEach(x => x.CN_S_WAVE_CODE = bResult.WaveMst.CN_S_WAVE_NO); //修改波次 CreateDAL().UpdateWave(bResult.OutMstList, trans); //记录仓库库存锁定明细 CreateDAL>().AddRange(bResult.OutLockingDtlList, trans); //生成出库单主表 CreateDAL>().AddRange(bResult.ReduceInventoryMstList, trans); //生成出库单子表 CreateDAL>().AddRange(bResult.ReduceInventoryDtlList, trans); //生成分拣单 CreateDAL>().AddRange(bResult.SortingList, trans); var sortingDtlList = new List(); var sortingLocationList = new List(); bResult.SortingList.ForEach(p => { sortingDtlList.AddRange(p.SortingDtlList); sortingLocationList.AddRange(p.SortingLocationList); }); //生成分拣单子表 CreateDAL>().AddRange(sortingDtlList, trans); //生成分拣单明细 CreateDAL>().AddRange(sortingLocationList, trans); //库区量表分配量上升 CreateDAL().UpdateAreaAlloc(bResult.StockAreaList, trans); //托盘物料分配量上升 CreateDAL().UpdateTrayItemAllocQty(bResult.TrayItemList, trans); foreach (var sortingEntity in bResult.SortingList) { //生成任务 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); } } } } } }); } #region 保存物流 /// /// 保存物流 /// /// /// public OperateResult SaveWayBill(object param) { return CreateDAL().SaveWayBill(param); } #endregion #region 保存打印信息 /// /// 保存打印信息 /// /// /// /// /// /// public OperateResult SavePrinter(List outMstList, TN_WM_PRINT_TASKEntity printTask, PrintType printType, List outPackList) { return UseTransaction(trans => { //添加打印任务 CreateDAL>().Add(printTask, trans); //更新物流单打印标识 CreateDAL().UpdatePrint(outMstList, printType, trans); //添加包装码 if (outPackList != null && outPackList.Any()) CreateDAL>().AddRange(outPackList, trans); }); } #endregion #region 保存发货打印任务 /// /// 保存发货打印任务 /// /// /// /// public OperateResult SaveInvoicePrint(List outMstList, TN_WM_PRINT_TASKEntity printTask) { return UseTransaction(trans => { //添加打印任务 CreateDAL>().Add(printTask, trans); //更新发货单打印标识 CreateDAL().UpdatePrint(outMstList, PrintType.Invoice, trans); }); } #endregion #region 确认包装复验 /// /// 确认包装复验 /// /// /// /// public OperateResult ConfirmReview(bool isAllReview, string outNo, List reviewItems, List boxDtlList) { return UseTransaction(trans => { CreateDAL>().AddRange(reviewItems, trans); if (boxDtlList.Any()) CreateDAL>().AddRange(boxDtlList, trans); if (isAllReview) { //修改主表状态 CreateDAL>().Update(new { CN_S_STATE = Constants.State_Rechecked }, new { CN_S_OP_NO = outNo }, trans); //修改子表状态 CreateDAL>().Update(new { CN_S_STATE = Constants.State_Rechecked }, new { CN_S_OP_NO = outNo }, trans); } }); } #endregion #region 确认发货 /// /// 确认发货 /// /// /// public OperateResult DeliverGoods(string opNo) { //K3对接,销售出库 string isUseK3 = ""; string stockCode = ""; var currentOutMst = CreateDAL>().GetSingleEntity(new { CN_S_OP_NO = opNo }); if (currentOutMst != null) stockCode = currentOutMst.CN_S_STOCK_CODE; // 出库发送K3-拼接销售出库实体 List K3SalesDeliveryList = new List(); //获取策略:是否需要与K3对接 isUseK3 = GetStrategy(stockCode, StrategyKey.IsUseK3); //吉鑫祥项目需要反馈K3系统 if (Constants.SysConfig.APP_NAME== "JXX" && isUseK3.Equals("Y")) { //拼接实体 List returnEntity = new InfK3Request().GetSalesDeliveryData(opNo); if (returnEntity.Any()) { K3SalesDeliveryList.AddRange(returnEntity); } } //库存锁定明细 var outLockDtl = CreateDAL>().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>().Update(new { CN_S_STATE = Constants.State_Completed }, new { CN_S_OP_NO = opNo }, trans); //修改子表状态 CreateDAL>().Update(new { CN_S_STATE = Constants.State_Completed }, new { CN_S_OP_NO = opNo }, trans); //降库存 if (outLockDtl.Any()) { CreateDAL().UpdateAllocQtyByLock(Constants.Rule_OutOrder, outLockDtl, trans); //删除锁定明细 CreateDAL().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 确认分播 /// /// 确认分播 /// /// /// public OperateResult ConfirmSowing(string waveNo) { return UseTransaction(trans => { CreateDAL>().Update(new { CN_S_STATE = Constants.Wave_Sowed }, new { CN_S_WAVE_NO = waveNo }, trans); CreateDAL>().Update(new { CN_S_STATE = Constants.Wave_Sowed }, new { CN_S_WAVE_NO = waveNo }, trans); }); } #endregion #region 波次列表 /// /// 波次列表 /// /// /// public OperateResult WaveList(SearchModel searchModel) { return CreateDAL().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(opDatastr); TN_WM_OUT_MSTEntity outMst =CreateDAL>().ExecuteSingleEntity("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().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); } } } }