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; /// /// 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 => DataService.EnumData.GetWcsTaskStatusEnumRunningStatus().Contains((int)WcsTaskStatusEnum.running)); result.AddRange(sqlFuc.ToList()); } return result; } catch (Exception ex) { _ = ex; return default; } } }