using iWareSql; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using iWareSql.DBModel; using XiGang.Core.Model; using iWareSql.DataAccess; using iWareCommon.Common.Globle; using System.Threading; using iWareCommon.Utils; using iWareModel; namespace iWareCC { /// /// 虚拟出库处理,并且不在出库计划任务中的线程 /// public class VirtualTaskNoOutPlanTaskHandler { /// /// 处理【虚拟出库处理】的出库计划任务 /// public static void Handler() { var errMsg = ""; while (true) { try { if (SystemValue.isAllowRuning_VirtualTaskNoOutPlanTaskHandler && SystemValue.isStartedModel) { errMsg = "";//重置 using (DbModel mycontext = new DbModel()) { try { SingleOutPlanTaskHandler(mycontext, ref errMsg); if (string.IsNullOrEmpty(errMsg)) { SystemWarningMsg._lbl_Alert_VirtualTaskNoOutPlanTaskHandler = "成功处理"; } else { SystemWarningMsg._lbl_Alert_VirtualTaskNoOutPlanTaskHandler = errMsg; } } catch (Exception ex) { Log4NetHelper.WriteErrorLog(LogType.OutPlanTask, "处理【虚拟出库处理】的出库计划任务=>" + errMsg + ",异常:" + ex.Message, ex); SystemWarningMsg._lbl_Alert_VirtualTaskNoOutPlanTaskHandler = "处理【虚拟出库处理】的出库计划任务=>" + errMsg + ",异常:" + ex.Message; } } } } catch (Exception ex) { SystemWarningMsg._lbl_Alert_VirtualTaskNoOutPlanTaskHandler = "出现异常:" + ex.Message; Log4NetHelper.WriteErrorLog(LogType.VirtualTaskNoOutPlanTaskHandler, "VirtualTaskNoOutPlanTaskHandler出现异常:" + ex.Message, ex); } Thread.Sleep(10 * 1000);//休眠10秒 } } private static void SingleOutPlanTaskHandler(DbModel context, ref string errMsg) { errMsg = ""; List noPlanTaskList = new List(); //当前虚拟库存 var virtualStroeList = context.Wms_VirtualStore.ToList(); if (virtualStroeList != null && virtualStroeList.Count > 0) { var queryState1 = (int)OutTaskDetailStateEnum.等待中; var queryState2 = (int)OutTaskDetailStateEnum.缺料; var detaiList = context.Plan_OutTaskDetail.Where(x => x.OutTaskDetailState == queryState1 || x.OutTaskDetailState == queryState2).ToList(); if (detaiList != null && detaiList.Count > 0) { foreach (var virtualStroe in virtualStroeList) { var isExist = false; //判断这些计划是否有符合 虚拟库存中的 foreach (var planDetail in detaiList) { var queliaoReason = ""; var findStore = StoreHandler.FindStoreForOutPlan(context, planDetail, ref errMsg, ref queliaoReason); if (findStore != null) { isExist = true; break; } } if (isExist == false) { noPlanTaskList.Add(virtualStroe); } } //处理 不再出库计划中的虚拟库存,将他们统统认定为人工出库 foreach (var item in noPlanTaskList) { SingleTaskHandlerForVirtual(context, item, ref errMsg); } } else { //不予处理 } } } /// /// 单个处理出库-虚拟库存中处理 [Editby shaocx,2022-07-28] /// /// /// /// /// /// private static bool SingleTaskHandlerForVirtual(DbModel context, Wms_VirtualStore findVirtualStore, ref string errMsg) { errMsg = ""; var remark = "消费虚拟库存,让他人工出库"; #region 事务处理 using (var trans = context.Database.BeginTransaction()) { try { //1、库存移除 context.Wms_VirtualStore.Remove(findVirtualStore); //findVirtualStore.IsDeleted = true; //findVirtualStore.ModifyBy = ""; //findVirtualStore.OperationRemark = remark + "[锁定库存]"; //findVirtualStore.ModifyTime = DateTime.Now; //2、创建虚拟出库任务,注意:任务状态必须是已完成,因为是虚拟出库 FunRetEntity addOutStoreTaskResult = MainTaskHandler.AddOutStoreTaskForVirtual(null, findVirtualStore, context, MainTaskTypeEnum.手动出库, new SysUser() { ID = 0, Name = SysGloble.WCSSystem }); if (addOutStoreTaskResult.result == false) { errMsg = addOutStoreTaskResult.resMsg; throw new Exception(errMsg); } //4、更新出库明细表 var mainTask = addOutStoreTaskResult.resData as Task_Main; if (mainTask == null) { errMsg = "新建的主任务对象为NULL"; throw new Exception(errMsg); } //保存数据库 context.SaveChanges(); trans.Commit(); return true; } catch (Exception ex) { trans.Rollback(); SystemWarningMsg._lbl_Alert_VirtualTaskNoOutPlanTaskHandler = "SingleTaskHandlerForVirtual出现异常:" + ex.Message; Log4NetHelper.WriteErrorLog(LogType.VirtualTaskNoOutPlanTaskHandler, "SingleTaskHandlerForVirtual 出现异常:" + ex.Message, ex); throw ex; } } #endregion } } }