using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using wcftest.EnumDefine;
using wcftest.Model;
using wcftest.orm;
namespace wcftest.BussinessExtension.Handle
{
///
/// 闲时移库管理表处理类
///
public class FreeTimeMoveLocationTaskHandler
{
///
/// 验证任务中的子任务的目标集合
///
///
///
public static bool ValidateExistPlaceTaskList(dbModel mod, Wms_FreeTimeMoveLocationTask freeTask, string place)
{
var existList = GetExistPlaceTaskList(mod, freeTask);
if (existList.Contains(place))
{
return false;
}
return true;
}
///
/// 获取任务中的子任务的目标集合
///
///
///
private static List GetExistPlaceTaskList(dbModel mod, Wms_FreeTimeMoveLocationTask freeTask)
{
List existList = new List();
var curTaskList = mod.Wms_FreeTimeMoveLocationTaskDetails.Where(x => x.MainFreeMoveId == freeTask.ID).ToList();
if (curTaskList != null && curTaskList.Count > 0)
{
existList.AddRange(curTaskList.Select(x => x.SoucePlace).ToList());
existList.AddRange(curTaskList.Select(x => x.ToPlace).ToList());
}
return existList;
}
///
/// 是否存在 正在执行的 闲时移库任务
///
///
///
public static bool IsExistRuningTask(dbModel mod)
{
var queryMoveStatus = (int)MoveStatusEnum.执行中;
var task = mod.Wms_FreeTimeMoveLocationTask.Where(x => x.MoveStatus == queryMoveStatus).FirstOrDefault();
if (task != null)
{
return true;
}
return false;
}
///
/// 新增 闲时移库管理
///
///
///
public static FunRetEntity Add(AddFoldingPlateMachineInput input)
{
try
{
if (input.RunTime <= 0)
{
return FunRetEntity.Fail("设定的运行时长不能小于等于0");
}
using (dbModel mod = new dbModel())
{
MoveStatusEnum moveStatusEnum = MoveStatusEnum.初始;
Wms_FreeTimeMoveLocationTask task = new Wms_FreeTimeMoveLocationTask()
{
TaskName = "闲时移库-" + DateTime.Now.ToString("yyyyMMddHHmmss"),
RunTime = input.RunTime,
FinishQuantity = 0,
ActualTime = 0,
MoveStatus = (int)moveStatusEnum,
MoveStatusName = moveStatusEnum.ToString(),
UserRemark = input.UserRemark,
Remark = "人工创建",
CreateTime = DateTime.Now,
LastModifyTime = DateTime.Now,
Creator = input.UserName,
LastModifier = input.UserName
};
mod.Wms_FreeTimeMoveLocationTask.Add(task);
mod.SaveChanges();
return FunRetEntity.Success("新增成功");
}
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 编辑 闲时移库管理
///
///
///
public static FunRetEntity Update(UpdateFoldingPlateMachineInput input)
{
try
{
if (input.RunTime <= 0)
{
return FunRetEntity.Fail("设定的运行时长不能小于等于0");
}
using (dbModel mod = new dbModel())
{
Wms_FreeTimeMoveLocationTask task = mod.Wms_FreeTimeMoveLocationTask.Find(input.ID);
if (task == null)
{
return FunRetEntity.Fail("没有找到闲时移库管理数据");
}
if (task.MoveStatus != (int)MoveStatusEnum.初始)
{
return FunRetEntity.Fail("状态不是'初始'状态,不允许编辑");
}
task.LastModifier = input.UserName;
task.LastModifyTime = DateTime.Now;
task.Remark = "编辑";
task.RunTime = input.RunTime;
task.UserRemark = input.UserRemark;
int i = mod.SaveChanges();
if (i == 1)
{
return FunRetEntity.Success("编辑成功");
}
return FunRetEntity.Fail("编辑失败");
}
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 执行 闲时移库管理
///
///
///
public static FunRetEntity Excute(ExcuteAndCancelFoldingPlateMachineInput input)
{
try
{
if (input.ID <= 0)
{
return FunRetEntity.Fail("闲时移库ID不能为空");
}
using (dbModel mod = new dbModel())
{
Wms_FreeTimeMoveLocationTask task = mod.Wms_FreeTimeMoveLocationTask.Find(input.ID);
if (task == null)
{
return FunRetEntity.Fail("没有找到闲时移库管理数据");
}
if (task.MoveStatus != (int)MoveStatusEnum.初始)
{
return FunRetEntity.Fail("状态不是'初始'状态,不允许执行闲时移库");
}
var queryMoveStatusEnum = (int)MoveStatusEnum.执行中;
var count = mod.Wms_FreeTimeMoveLocationTask.Where(x => x.MoveStatus == queryMoveStatusEnum).Count();
if (count > 0)
{
return FunRetEntity.Fail("已存在" + count + "条正在执行的闲时移库任务,不允许再次执行闲时移库");
}
task.LastModifier = input.UserName;
task.LastModifyTime = DateTime.Now;
task.Remark = "执行";
MoveStatusEnum moveStatusEnum = MoveStatusEnum.执行中;
task.MoveStatus = (int)moveStatusEnum;
task.MoveStatusName = moveStatusEnum.ToString();
task.UserRemark = input.UserRemark;
task.StartTime = DateTime.Now;
int i = mod.SaveChanges();
if (i == 1)
{
return FunRetEntity.Success("执行成功");
}
return FunRetEntity.Fail("执行失败");
}
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 取消 闲时移库管理
///
///
///
public static FunRetEntity Cancel(ExcuteAndCancelFoldingPlateMachineInput input)
{
try
{
if (input.ID <= 0)
{
return FunRetEntity.Fail("闲时移库ID不能为空");
}
using (dbModel mod = new dbModel())
{
Wms_FreeTimeMoveLocationTask task = mod.Wms_FreeTimeMoveLocationTask.Find(input.ID);
if (task == null)
{
return FunRetEntity.Fail("没有找到闲时移库管理数据");
}
if (task.MoveStatus != (int)MoveStatusEnum.初始)
{
return FunRetEntity.Fail("状态不是'初始'状态,不允许取消闲时移库");
}
task.LastModifier = input.UserName;
task.LastModifyTime = DateTime.Now;
task.Remark = "取消";
MoveStatusEnum moveStatusEnum = MoveStatusEnum.已取消;
task.MoveStatus = (int)moveStatusEnum;
task.MoveStatusName = moveStatusEnum.ToString();
task.UserRemark = input.UserRemark;
int i = mod.SaveChanges();
if (i == 1)
{
return FunRetEntity.Success("取消成功");
}
return FunRetEntity.Fail("取消失败");
}
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 人工结束 闲时移库管理
///
///
///
public static FunRetEntity PersonStop(PersonStopFoldingPlateMachineInput input)
{
try
{
if (input.ID <= 0)
{
return FunRetEntity.Fail("闲时移库ID不能为空");
}
if (string.IsNullOrEmpty(input.PersonStopRemark))
{
return FunRetEntity.Fail("人工结束原因不能为空");
}
using (dbModel mod = new dbModel())
{
Wms_FreeTimeMoveLocationTask task = mod.Wms_FreeTimeMoveLocationTask.Find(input.ID);
if (task == null)
{
return FunRetEntity.Fail("没有找到闲时移库管理数据");
}
if (task.MoveStatus != (int)MoveStatusEnum.执行中)
{
return FunRetEntity.Fail("状态不是'执行中'状态,不允许人工结束闲时移库");
}
task.LastModifier = input.UserName;
task.LastModifyTime = DateTime.Now;
task.Remark = "人工结束";
MoveStatusEnum moveStatusEnum = MoveStatusEnum.人工结束;
task.MoveStatus = (int)moveStatusEnum;
task.MoveStatusName = moveStatusEnum.ToString();
task.PersonStopRemark = input.PersonStopRemark;
var endTime = DateTime.Now;
task.EndTime = endTime;
//计算持续时长(分钟)
if (task.StartTime != null)
{
TimeSpan ts = ((DateTime)endTime - (DateTime)task.StartTime);
task.ActualTime = Convert.ToInt32(ts.TotalMinutes);
}
//计算已完成数量
var count = mod.Wms_FreeTimeMoveLocationTaskDetails.Where(x => x.MainFreeMoveId == task.ID).Count();
task.FinishQuantity = count;
int i = mod.SaveChanges();
if (i == 1)
{
return FunRetEntity.Success("人工结束成功");
}
return FunRetEntity.Fail("人工结束失败");
}
}
catch (Exception ex)
{
throw ex;
}
}
}
}