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
|
{
|
/// <summary>
|
/// 虚拟出库处理,并且不在出库计划任务中的线程
|
/// </summary>
|
public class VirtualTaskNoOutPlanTaskHandler
|
{
|
/// <summary>
|
/// 处理【虚拟出库处理】的出库计划任务
|
/// </summary>
|
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<Wms_VirtualStore> noPlanTaskList = new List<Wms_VirtualStore>();
|
//当前虚拟库存
|
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
|
{
|
//不予处理
|
}
|
}
|
}
|
|
/// <summary>
|
/// 单个处理出库-虚拟库存中处理 [Editby shaocx,2022-07-28]
|
/// </summary>
|
/// <param name="context"></param>
|
/// <param name="outTask"></param>
|
/// <param name="outDetailTask"></param>
|
/// <param name="errMsg"></param>
|
/// <returns></returns>
|
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
|
}
|
|
}
|
}
|