wcs_server_kate_suzhou/WcsMain/DataBase/Dao/AppWcsTaskDao.cs

483 lines
17 KiB
C#
Raw Normal View History

2024-05-14 16:30:56 +08:00
using System.Text;
using WcsMain.ApiServe.Controllers.Dto.WcsDto.WcsTask;
using WcsMain.Common;
using WcsMain.DataBase.TableEntity;
2024-06-12 07:37:08 +08:00
using WcsMain.Enum.Stacker;
2024-05-14 16:30:56 +08:00
using WcsMain.Enum.TaskEnum;
using WcsMain.WcsAttribute.AutoFacAttribute;
namespace WcsMain.DataBase.Dao;
/// <summary>
/// tbl_app_wcs_task 表操作类
/// </summary>
[Component]
public class AppWcsTaskDao
{
/// <summary>
/// 新增一条记录
/// </summary>
/// <param name="appWcsTask"></param>
/// <returns></returns>
public int Insert(params AppWcsTask[] appWcsTask)
{
try
{
return CommonTool.DbServe.Insertable(appWcsTask).ExecuteCommand();
}
catch (Exception ex)
{
_ = ex;
return 0;
}
}
/// <summary>
/// 更新一条记录根据主键主键PlcId
/// </summary>
/// <param name="appWcsTask"></param>
/// <returns></returns>
public int Update(AppWcsTask appWcsTask)
{
try
{
var sqlFuc = CommonTool.DbServe.Updateable(appWcsTask).IgnoreColumns(ignoreAllNullColumns: true);
return sqlFuc.ExecuteCommand();
}
catch (Exception ex)
{
_ = ex;
return 0;
}
}
/// <summary>
/// 删除一条记录根据主键主键PlcId
/// </summary>
/// <param name="appWcsTask"></param>
/// <returns></returns>
public int Delete(AppWcsTask appWcsTask)
{
try
{
var sqlFuc = CommonTool.DbServe.Deleteable(appWcsTask);
return sqlFuc.ExecuteCommand();
}
catch (Exception ex)
{
_ = ex;
return 0;
}
}
/// <summary>
/// 查找数据
/// </summary>
/// <param name="appWcsTask"></param>
/// <returns></returns>
/// <remarks>
/// 时间不在筛选行列
/// </remarks>
public List<AppWcsTask>? Select(AppWcsTask appWcsTask)
{
try
{
var sqlFuc = CommonTool.DbServe.Queryable<AppWcsTask>()
.WhereIF(appWcsTask.PlcId != default, w => w.PlcId == appWcsTask.PlcId)
.WhereIF(appWcsTask.NextPlcId != default, w => w.NextPlcId == appWcsTask.NextPlcId)
.WhereIF(appWcsTask.TaskCategory != default, w => w.TaskCategory == appWcsTask.TaskCategory)
.WhereIF(appWcsTask.TaskId != default, w => w.TaskId == appWcsTask.TaskId)
.WhereIF(appWcsTask.TaskType != default, w => w.TaskType == appWcsTask.TaskType)
.WhereIF(appWcsTask.TaskSort != default, w => w.TaskSort == appWcsTask.TaskSort)
.WhereIF(appWcsTask.TaskStatus != default, w => w.TaskStatus == appWcsTask.TaskStatus)
.WhereIF(appWcsTask.Origin != default, w => w.Origin == appWcsTask.Origin)
.WhereIF(appWcsTask.Destination != default, w => w.Destination == appWcsTask.Destination)
.WhereIF(appWcsTask.PlcVehicleNo != default, w => w.PlcVehicleNo == appWcsTask.PlcVehicleNo)
.WhereIF(appWcsTask.VehicleNo != default, w => w.VehicleNo == appWcsTask.VehicleNo)
.WhereIF(appWcsTask.VehicleSize != default, w => w.VehicleSize == appWcsTask.VehicleSize)
.WhereIF(appWcsTask.Weight != default, w => w.Weight == appWcsTask.Weight)
.OrderByDescending(o => o.CreateTime).OrderBy(o => o.TaskSort);
return sqlFuc.ToList();
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
/// <summary>
/// 查找所有数据
/// </summary>
/// <returns></returns>
public List<AppWcsTask>? Select() => Select(new AppWcsTask());
/// <summary>
/// 根据 TaskId 删除任务
/// </summary>
/// <param name="taskId"></param>
/// <returns></returns>
public int DeleteWithTaskId(string taskId)
{
try
{
var sqlFuc = CommonTool.DbServe.Deleteable<AppWcsTask>().Where(w => w.TaskId == taskId);
return sqlFuc.ExecuteCommand();
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
/// <summary>
/// 带参数分页查询
/// </summary>
/// <param name="pageRequest"></param>
/// <returns></returns>
public (List<AppWcsTask>? wcsTasks, int totalRows) SelectPage(GetWcsTaskWithPageRequest pageRequest)
{
try
{
int totalRows = 0;
var sqlFuc = CommonTool.DbServe.Queryable<AppWcsTask>()
.WhereIF(!string.IsNullOrEmpty(pageRequest.SearchStr),
w => w.Destination!.Contains(pageRequest.SearchStr!)
|| w.PlcId.ToString()!.Contains(pageRequest.SearchStr!)
|| w.Origin!.Contains(pageRequest.SearchStr!)
|| w.VehicleNo!.Contains(pageRequest.SearchStr!)
|| w.TaskId!.Contains(pageRequest.SearchStr!)
|| w.Remark!.Contains(pageRequest.SearchStr!)); // 模糊查询
if (pageRequest.TaskType != default) // 查询任务类型
{
List<int?> taskTypes = [];
foreach (var taskType in pageRequest.TaskType)
{
if (taskType == "入库任务") { taskTypes.Add((int)TaskTypeEnum.inTask); }
if (taskType == "出库任务") { taskTypes.Add((int)TaskTypeEnum.outTask); }
if (taskType == "拣选任务") { taskTypes.Add((int)TaskTypeEnum.pick); }
if (taskType == "盘点任务") { taskTypes.Add((int)TaskTypeEnum.check); }
if (taskType == "移库任务") { taskTypes.Add((int)TaskTypeEnum.moveTask); }
}
sqlFuc.Where(w => taskTypes.Contains(w.TaskType));
}
if (pageRequest.TaskStatus != default) // 查询任务状态
{
List<int?> taskStatuss = [];
foreach (var taskStatus in pageRequest.TaskStatus)
{
if (taskStatus == "待执行") { taskStatuss.Add((int)WcsTaskStatusEnum.create); }
if (taskStatus == "离开起点") { taskStatuss.Add((int)WcsTaskStatusEnum.leaveOrigin); }
if (taskStatus == "执行中") { taskStatuss.Add((int)WcsTaskStatusEnum.running); }
if (taskStatus == "到达终点") { taskStatuss.Add((int)WcsTaskStatusEnum.arriveDestination); }
if (taskStatus == "执行完成") { taskStatuss.Add((int)WcsTaskStatusEnum.complete); }
if (taskStatus == "执行异常") { taskStatuss.Add((int)WcsTaskStatusEnum.err); }
}
sqlFuc.Where(w => taskStatuss.Contains(w.TaskStatus));
}
if (pageRequest.TimeRange is { Count: 2 }) // 时间范围
{
sqlFuc.Where(w => w.CreateTime > pageRequest.TimeRange[0] && w.CreateTime < pageRequest.TimeRange[1]);
}
sqlFuc.OrderByDescending(o => new { o.CreateTime });
var queryResult = sqlFuc.ToPageList(pageRequest.Page!.PageIndex, pageRequest.Page!.PageSize, ref totalRows);
return (queryResult, totalRows);
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
/******************************************************************** 业务方法 *********************************************/
/// <summary>
/// 保留多少天前数据 ---- 删除的是备份表
/// </summary>
/// <param name="days"></param>
/// <returns></returns>
public int ClearData(int days)
{
try
{
var sqlFuc = CommonTool.DbServe.Deleteable<AppWcsTask>().AS("[tbl_app_wcs_task_bak]").Where(w => w.CreateTime < DateTime.Now.AddDays(-days));
return sqlFuc.ExecuteCommand();
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
/// <summary>
/// 转换WMS任务到WCS任务
/// </summary>
/// <param name="wcsTasks"></param>
/// <returns></returns>
public string TransWmsTaskToWcsTask(params AppWcsTask[]? wcsTasks)
{
if (wcsTasks == default || wcsTasks.Length < 1)
{
return "传入的任务为空";
}
var result = CommonTool.DbServe.Ado.UseTran(() =>
{
CommonTool.DbServe.Insertable(wcsTasks).ExecuteCommand();
foreach (var wcsTask in wcsTasks)
{
CommonTool.DbServe.Updateable(new AppWmsTask()
{ TaskId = wcsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.queuing })
.IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();
}
});
return result.Data ? string.Empty : result.ErrorException.Message;
}
/// <summary>
/// 查找各组 taskId 中最前的任务
/// </summary>
/// <returns></returns>
public List<AppWcsTask>? GetNeedExecuteTasks()
{
try
{
const string sql = "SELECT * FROM tbl_app_wcs_task a WHERE task_sort = (SELECT MIN(task_sort) from tbl_app_wcs_task where a.task_id = task_id) and task_status = 0 ORDER BY create_time asc";
List<AppWcsTask> tasks = CommonTool.DbServe.Ado.SqlQuery<AppWcsTask>(sql);
return tasks;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
/// <summary>
/// 校验除了这个任务以外,该组是否有其他任务
/// </summary>
/// <param name="wcsTask"></param>
/// <returns></returns>
public List<AppWcsTask>? CheckIsHaveOtherTask(AppWcsTask wcsTask)
{
try
{
List<AppWcsTask> wcsTasks = CommonTool.DbServe.Queryable<AppWcsTask>()
.Where(w => w.TaskId == wcsTask.TaskId && w.TaskSort != wcsTask.TaskSort).ToList();
return wcsTasks;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
/// <summary>
/// 根据任务ID查询所有的wcs任务数据包括备份表内的数据
/// </summary>
/// /// <param name="taskId"></param>
/// <returns></returns>
public List<AppWcsTask>? GetAllTasksWithBakData(string taskId)
{
try
{
string selectSql = $"select * from (select * from tbl_app_wcs_task union all select * from tbl_app_wcs_task_bak) as a where task_id = '{taskId}' order by create_time asc ";
List<AppWcsTask> wcsTasks = CommonTool.DbServe.SqlQueryable<AppWcsTask>(selectSql).ToList();
return wcsTasks;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
/// <summary>
/// 根据 PlcId 查找任务数据,包括备份表
/// </summary>
/// <param name="plcId"></param>
/// <returns></returns>
public List<AppWcsTask>? GetAllTasksWithBakDataUsePlcId(int? plcId)
{
try
{
string selectSql = $"select * from (select * from tbl_app_wcs_task union all select * from tbl_app_wcs_task_bak) as a where plc_id = '{plcId}' order by create_time asc ";
List<AppWcsTask> wcsTasks = CommonTool.DbServe.SqlQueryable<AppWcsTask>(selectSql).ToList();
return wcsTasks;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
/// <summary>
/// 根据堆垛机编号查询该堆垛机下需要执行的入库任务
/// </summary>
/// <param name="stackerId"></param>
/// <param name="vehicleNo"></param>
/// <returns></returns>
public List<AppWcsTask>? SelectInTaskWithStacker(int stackerId, string? vehicleNo = default)
{
try
{
StringBuilder sql = new();
sql.AppendLine($"select * from tbl_app_wcs_task where origin in (select wcs_location from tbl_app_location where equipment_id = {stackerId}) and task_type = {(int)TaskTypeEnum.inTask} ");
sql.AppendLine($"and task_category = {(int)TaskCategoryEnum.stacker} ");
sql.AppendLine($"and task_status = {(int)WcsTaskStatusEnum.create} ");
if (!string.IsNullOrEmpty(vehicleNo))
{
sql.AppendLine($"and vehicle_no = '{vehicleNo}' ");
}
sql.AppendLine("order by priority desc, wms_time asc ");
var sqlFuc = CommonTool.DbServe.Ado.SqlQuery<AppWcsTask>(sql.ToString());
return sqlFuc;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
/// <summary>
/// 根据堆垛机编号查询该堆垛机下需要执行的出库任务
/// </summary>
/// <param name="stackerId"></param>
/// <param name="vehicleNo"></param>
/// <returns></returns>
public List<AppWcsTask>? SelectOutTaskWithStacker(int stackerId, string? vehicleNo = default)
{
try
{
StringBuilder sql = new();
sql.AppendLine($"select * from tbl_app_wcs_task where origin in (select wcs_location from tbl_app_location where equipment_id = {stackerId}) and task_type = {(int)TaskTypeEnum.outTask} ");
sql.AppendLine($"and task_category = {(int)TaskCategoryEnum.stacker} ");
sql.AppendLine($"and task_status = {(int)WcsTaskStatusEnum.create} ");
if (!string.IsNullOrEmpty(vehicleNo))
{
sql.AppendLine($"and vehicle_no = '{vehicleNo}' ");
}
sql.AppendLine("order by priority desc, wms_time asc ");
2024-05-14 16:30:56 +08:00
var sqlFuc = CommonTool.DbServe.Ado.SqlQuery<AppWcsTask>(sql.ToString());
return sqlFuc;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
/// <summary>
/// 根据堆垛机编号查询该堆垛机下需要执行的拣选出库任务
/// </summary>
/// <param name="stackerId"></param>
/// <param name="vehicleNo"></param>
/// <returns></returns>
public List<AppWcsTask>? SelectPickOutTaskWithStacker(int stackerId, string? vehicleNo = "")
{
try
{
StringBuilder sql = new();
sql.AppendLine($"select * from tbl_app_wcs_task where origin in (select wcs_location from tbl_app_location where equipment_id = {stackerId}) and task_type = {(int)TaskTypeEnum.pick} ");
sql.AppendLine($"and task_category = {(int)TaskCategoryEnum.stacker} ");
sql.AppendLine($"and task_status = {(int)WcsTaskStatusEnum.create} ");
if (!string.IsNullOrEmpty(vehicleNo))
{
sql.AppendLine($"and vehicle_no = '{vehicleNo}' ");
}
sql.AppendLine("order by priority desc, create_time asc ");
var sqlFuc = CommonTool.DbServe.Ado.SqlQuery<AppWcsTask>(sql.ToString());
return sqlFuc;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
/// <summary>
/// 根据堆垛机编号查询该堆垛机下需要执行的移库任务
/// </summary>
/// <param name="stackerId"></param>
/// <param name="vehicleNo"></param>
/// <returns></returns>
public List<AppWcsTask>? SelectMoveTaskWithStacker(int stackerId, string? vehicleNo = "")
{
try
{
StringBuilder sql = new();
sql.AppendLine($"select * from tbl_app_wcs_task where origin in (select wcs_location from tbl_app_location where equipment_id = {stackerId}) and task_type = {(int)TaskTypeEnum.moveTask} ");
sql.AppendLine($"and task_category = {(int)TaskCategoryEnum.stacker} ");
sql.AppendLine($"and task_status = {(int)WcsTaskStatusEnum.create} ");
if (!string.IsNullOrEmpty(vehicleNo))
{
sql.AppendLine($"and vehicle_no = '{vehicleNo}' ");
}
sql.AppendLine("order by priority desc, create_time asc ");
var sqlFuc = CommonTool.DbServe.Ado.SqlQuery<AppWcsTask>(sql.ToString());
return sqlFuc;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
/// <summary>
/// 根据起点或者终点查找当前正在运行的任务
/// </summary>
/// <param name="destinations"></param>
/// <returns></returns>
public List<AppWcsTask>? QueryTaskWithWcsLocation(params string?[] destinations)
{
List<AppWcsTask>? result = [];
if (destinations.Length < 1) return result;
try
{
foreach (var destination in destinations)
{
var sqlFuc = CommonTool.DbServe.Queryable<AppWcsTask>()
.Where(x => x.Destination == destination || x.Origin == destination)
.Where(x => DataService.EnumData.GetWcsTaskStatusEnumRunningStatus().Contains((int)WcsTaskStatusEnum.running));
result.AddRange(sqlFuc.ToList());
}
return result;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
2024-05-14 16:30:56 +08:00
}