wcs_server_kate_suzhou/WcsMain/DataBase/Dao/AppWcsTaskDao.cs

483 lines
17 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Text;
using WcsMain.ApiServe.Controllers.Dto.WcsDto.WcsTask;
using WcsMain.Common;
using WcsMain.DataBase.TableEntity;
using WcsMain.Enum.Stacker;
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 ");
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(x.TaskStatus));
result.AddRange(sqlFuc.ToList());
}
return result;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
}