using System;
using iWareSql.DBModel;
using System.Linq;
using XiGang.Core.Model;
using iWareCommon;
using iWareCommon.Common.Globle;
namespace iWareSql.DataAccess
{
///
/// 出库计划
///
public class PlanOutTaskHandler
{
///
/// 是否需要插队
///
///
/// true:需要,false:不需要插队
public static bool IsNeedChaDuiCommonTaskSequenceGuid(DbModel context, string taskSequenceGuid)
{
if (string.IsNullOrEmpty(taskSequenceGuid))
{
return false;//不需要插队
}
var queryState1 = (int)OutTaskDetailStateEnum.完成;
var queryState2 = (int)OutTaskDetailStateEnum.缺料;
var queryState3 = (int)OutTaskDetailStateEnum.已取消;
var detaiList = context.Plan_OutTaskDetail.Where(x =>
(x.OutTaskDetailState != queryState1 && x.OutTaskDetailState != queryState2 && x.OutTaskDetailState != queryState3)
&& x.TaskSequenceGuid == taskSequenceGuid
).ToList();
if (detaiList != null && detaiList.Count > 0)
{//如果有,表示还有一些未结束,就认为 不需要插队
return false;//不需要插队
}
else
{
return true;//需要插队
}
}
///
/// 是否存在 还在下发的计划
///
///
/// true:存在,false:不存在
public static bool IsExistRuningOutTaskDetail(DbModel context)
{
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)
{
var allCount = detaiList.Count;
var queLiaoCount = detaiList.Where(x => x.OperationRemark == SysGloble.QUELIAO_STR).Count();
if (queLiaoCount == allCount)
{
return false;
}
return true;
}
else
{
return false;
}
}
///
/// 当出库任务rgv任务完成后,更新状态
///
///
///
///
///
public static void UpdatePlanStateToFinished(DbModel context, Task_Main mainTask, string remark)
{
//获取主表任务
Plan_OutTaskDetail outDetailTask = context.Plan_OutTaskDetail.Where(x => x.Id == mainTask.Plan_OutTaskDetail_Id).FirstOrDefault();
if (outDetailTask != null)
{
Plan_OutTask outTask = context.Plan_OutTask.Where(x => x.Id == outDetailTask.M_PlanId).First();
var changeOutTaskDetailState = OutTaskDetailStateEnum.完成;
PlanOutTaskHandler.UpdateStateForOutTaskDetail(outDetailTask, changeOutTaskDetailState, remark);
//这里暂时不处理主表的状态
}
}
//private static OutPlanStateEnum GetChangeStateForPlan_OutTask(DbModel context, Plan_OutTask outTask, OutTaskDetailStateEnum currnetChange, string remark)
//{
// var queryState1 = (int)OutTaskDetailStateEnum.完成;
// var queryState2 = (int)OutTaskDetailStateEnum.执行中;
// var allPlanList = context.Plan_OutTaskDetail.Where(x => x.M_PlanId == outTask.Id).ToList();
// var issued_planList = allPlanList.Where(x => x.OutTaskDetailState == queryState1 || x.OutTaskDetailState == queryState2).ToList();
// int issued_planListCount = issued_planList.Count();
// if (currnetChange == OutTaskDetailStateEnum.完成 || currnetChange == OutTaskDetailStateEnum.执行中)
// {
// //计入本次要修改的条数
// issued_planListCount += 1;
// }
// OutPlanStateEnum changeOutTaskDetailState;
// if (allPlanList.Count() == issued_planListCount)
// {//更新主表状态为 全部下发
// changeOutTaskDetailState = OutPlanStateEnum.全部下发;
// PlanOutTaskHandler.UpdateStateForOutTask(outTask, changeOutTaskDetailState, remark);
// }
// else if (issued_planListCount > 0)
// {
// changeOutTaskDetailState = OutPlanStateEnum.部分下发;
// PlanOutTaskHandler.UpdateStateForOutTask(outTask, changeOutTaskDetailState, remark);
// }
//}
///
/// 更新明细表的状态
///
///
///
///
public static void UpdateStateForOutTaskDetail(Plan_OutTaskDetail outDetailTask, OutTaskDetailStateEnum changeOutTaskDetailState, string remark)
{
outDetailTask.OutTaskDetailState = (int)changeOutTaskDetailState;
outDetailTask.OutTaskDetailStateName = changeOutTaskDetailState.ToString();
if (changeOutTaskDetailState == OutTaskDetailStateEnum.完成)
{
outDetailTask.FinishTime = DateTime.Now;//增加计划子表完成时间 【EditBy shaocx,2022-06-20】
}
outDetailTask.ModifyBy = SysGloble.WCSSystem;
outDetailTask.ModifyTime = DateTime.Now;
outDetailTask.OperationRemark = remark + ",更改状态为" + changeOutTaskDetailState.ToString();
}
///
/// 更新主表的状态
///
///
///
///
public static void UpdateStateForOutTask(Plan_OutTask outTask, OutPlanStateEnum changeOutTaskDetailState, string remark)
{
outTask.PlanState = (int)changeOutTaskDetailState;
outTask.PlanStateName = changeOutTaskDetailState.ToString();
outTask.ModifyBy = SysGloble.WCSSystem;
outTask.ModifyTime = DateTime.Now;
outTask.OperationRemark = remark + ",更改状态为" + changeOutTaskDetailState.ToString();
}
}
}