using System.Text;
using WcsMain.ApiServe.Dto.WcsDto.WcsTask;
using WcsMain.Common;
using WcsMain.Common.DataService;
using WcsMain.Constant.Enum.Stacker;
using WcsMain.Constant.Enum.TaskEnum;
using WcsMain.DataBase.TableEntity;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
namespace WcsMain.DataBase.Dao;
///
/// tbl_app_wcs_task 表操作类
///
[Component]
public class AppWcsTaskDao
{
///
/// 新增一条记录
///
///
///
public int Insert(params AppWcsTask[] appWcsTask)
{
try
{
return CommonTool.DbServe.Insertable(appWcsTask).ExecuteCommand();
}
catch (Exception ex)
{
_ = ex;
return 0;
}
}
///
/// 更新一条记录,根据主键,主键PlcId
///
///
///
public int Update(AppWcsTask appWcsTask)
{
try
{
var sqlFuc = CommonTool.DbServe.Updateable(appWcsTask).IgnoreColumns(ignoreAllNullColumns: true);
return sqlFuc.ExecuteCommand();
}
catch (Exception ex)
{
_ = ex;
return 0;
}
}
///
/// 删除一条记录,根据主键,主键PlcId
///
///
///
public int Delete(AppWcsTask appWcsTask)
{
try
{
var sqlFuc = CommonTool.DbServe.Deleteable(appWcsTask);
return sqlFuc.ExecuteCommand();
}
catch (Exception ex)
{
_ = ex;
return 0;
}
}
///
/// 查找数据
///
///
///
///
/// 时间不在筛选行列
///
public List? Select(AppWcsTask appWcsTask)
{
try
{
var sqlFuc = CommonTool.DbServe.Queryable()
.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;
}
}
///
/// 查找所有数据
///
///
public List? Select() => Select(new AppWcsTask());
///
/// 根据 TaskId 删除任务
///
///
///
public int DeleteWithTaskId(string taskId)
{
try
{
var sqlFuc = CommonTool.DbServe.Deleteable().Where(w => w.TaskId == taskId);
return sqlFuc.ExecuteCommand();
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
///
/// 带参数分页查询
///
///
///
public (List? wcsTasks, int totalRows) SelectPage(GetWcsTaskWithPageRequest pageRequest)
{
try
{
int totalRows = 0;
var sqlFuc = CommonTool.DbServe.Queryable()
.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 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 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;
}
}
/******************************************************************** 业务方法 *********************************************/
///
/// 保留多少天前数据 ---- 删除的是备份表
///
///
///
public int ClearData(int days)
{
try
{
var sqlFuc = CommonTool.DbServe.Deleteable().AS("[tbl_app_wcs_task_bak]").Where(w => w.CreateTime < DateTime.Now.AddDays(-days));
return sqlFuc.ExecuteCommand();
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
///
/// 转换WMS任务到WCS任务
///
///
///
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;
}
///
/// 查找各组 taskId 中最前的任务
///
///
public List? 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 tasks = CommonTool.DbServe.Ado.SqlQuery(sql);
return tasks;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
///
/// 校验除了这个任务以外,该组是否有其他任务
///
///
///
public List? CheckIsHaveOtherTask(AppWcsTask wcsTask)
{
try
{
List wcsTasks = CommonTool.DbServe.Queryable()
.Where(w => w.TaskId == wcsTask.TaskId && w.TaskSort != wcsTask.TaskSort).ToList();
return wcsTasks;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
///
/// 根据任务ID查询所有的wcs任务数据,包括备份表内的数据
///
/// ///
///
public List? 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 wcsTasks = CommonTool.DbServe.SqlQueryable(selectSql).ToList();
return wcsTasks;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
///
/// 根据 PlcId 查找任务数据,包括备份表
///
///
///
public List? 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 wcsTasks = CommonTool.DbServe.SqlQueryable(selectSql).ToList();
return wcsTasks;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
///
/// 根据堆垛机编号查询该堆垛机下需要执行的入库任务
///
///
///
///
public List? 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(sql.ToString());
return sqlFuc;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
///
/// 根据堆垛机编号查询该堆垛机下需要执行的出库任务
///
///
///
///
public List? 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(sql.ToString());
return sqlFuc;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
///
/// 根据堆垛机编号查询该堆垛机下需要执行的拣选出库任务
///
///
///
///
public List? 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(sql.ToString());
return sqlFuc;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
///
/// 根据堆垛机编号查询该堆垛机下需要执行的移库任务
///
///
///
///
public List? 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(sql.ToString());
return sqlFuc;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
///
/// 根据起点或者终点查找当前正在运行的任务
///
///
///
public List? QueryTaskWithWcsLocation(params string?[] destinations)
{
List? result = [];
if (destinations.Length < 1) return result;
try
{
foreach (var destination in destinations)
{
var sqlFuc = CommonTool.DbServe.Queryable()
.Where(x => x.Destination == destination || x.Origin == destination)
.Where(x => EnumData.GetWcsTaskStatusEnumRunningStatus().Contains(x.TaskStatus));
result.AddRange(sqlFuc.ToList());
}
return result;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
}