451 lines
16 KiB
C#
451 lines
16 KiB
C#
using System.Text;
|
||
using WcsMain.ApiServe.Controllers.Dto.WcsDto.WcsTask;
|
||
using WcsMain.Common;
|
||
using WcsMain.DataBase.TableEntity;
|
||
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, 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>? 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;
|
||
}
|
||
}
|
||
} |