using WcsMain.ApiServe.Dto.WcsDto.WmsTask; using WcsMain.Common; using WcsMain.Constant.Enum.Stacker; using WcsMain.DataBase.TableEntity; using WcsMain.Constant.WcsAttribute.AutoFacAttribute; namespace WcsMain.DataBase.Dao; /// /// tbl_app_wms_task 表的增删改查 /// [Component] public class AppWmsTaskDao { /// /// 添加记录 /// 注意:尚未清楚是否为事务插入 /// /// /// public int Insert(params AppWmsTask[] appWmsTasks) { try { return CommonTool.DbServe.Insertable(appWmsTasks).ExecuteCommand(); } catch (Exception ex) { _ = ex; return 0; } } /// /// 更新数据,以主键为条件,主键 : TaskId /// /// /// public int Update(AppWmsTask appWmsTask) { try { var sqlFuc = CommonTool.DbServe.Updateable(appWmsTask).IgnoreColumns(ignoreAllNullColumns: true); return sqlFuc.ExecuteCommand(); } catch (Exception ex) { _ = ex; return 0; } } /// /// 删除数据,以主键为条件 /// /// /// public int Delete(AppWmsTask appWmsTask) { try { var sqlFuc = CommonTool.DbServe.Deleteable(appWmsTask); return sqlFuc.ExecuteCommand(); } catch (Exception ex) { _ = ex; return 0; } } /// /// 查找数据 /// /// /// /// /// 时间不在筛选行列 /// public List? Select(AppWmsTask appWmsTask) { try { var sqlFuc = CommonTool.DbServe.Queryable() .WhereIF(!string.IsNullOrEmpty(appWmsTask.TaskId), w => w.TaskId == appWmsTask.TaskId) .WhereIF(appWmsTask.WcsId != null, w => w.WcsId == appWmsTask.WcsId) .WhereIF(appWmsTask.TaskType != null, w => w.TaskType == appWmsTask.TaskType) .WhereIF(appWmsTask.TaskStatus != null, w => w.TaskStatus == appWmsTask.TaskStatus) .WhereIF(!string.IsNullOrEmpty(appWmsTask.Origin), w => w.Origin == appWmsTask.Origin) .WhereIF(!string.IsNullOrEmpty(appWmsTask.MidPoint), w => w.MidPoint == appWmsTask.MidPoint) .WhereIF(!string.IsNullOrEmpty(appWmsTask.Destination), w => w.Destination == appWmsTask.Destination) .WhereIF(!string.IsNullOrEmpty(appWmsTask.VehicleNo), w => w.VehicleNo == appWmsTask.VehicleNo) .WhereIF(appWmsTask.VehicleSize != null, w => w.VehicleSize == appWmsTask.VehicleSize) .WhereIF(appWmsTask.Weight != null, w => w.Weight == appWmsTask.Weight) .WhereIF(!string.IsNullOrEmpty(appWmsTask.CreatePerson), w => w.CreatePerson == appWmsTask.CreatePerson) .WhereIF(!string.IsNullOrEmpty(appWmsTask.TaskMsg), w => w.TaskMsg == appWmsTask.TaskMsg) .OrderBy(o => o.CreateTime); _ = sqlFuc.ToSql(); return sqlFuc.ToList(); } catch (Exception ex) { _ = ex; return default; } } /// /// 查找所有数据 /// /// public List? Select() => Select(new AppWmsTask()); /********************************************************* 扩展方法 *****************************************************************/ /// /// 保留多少条数据 /// /// /// public int ClearData(int days) { try { var sqlFuc = CommonTool.DbServe.Deleteable().Where(w => w.CreateTime < DateTime.Now.AddDays(-days)); return sqlFuc.ExecuteCommand(); } catch (Exception ex) { _ = ex; return default; } } /// /// 将taskId更新成新的 /// /// /// /// public int UpdateTaskId(string? oldTaskId, string? newTaskId) { return 0; } /// /// 查询数据返回前端 /// 查询数据,按创建时间倒序排列 /// /// public List? SelectToWeb() { try { var sqlFuc = CommonTool.DbServe.Queryable().OrderByDescending(o => o.CreateTime); return sqlFuc.ToList(); } catch (Exception ex) { _ = ex; return default; } } /// /// 查询任务数据返回前端,只查询未结束的任务 /// 查询数据,按创建时间倒序排列 /// /// public List? SelectWmsTaskNotEnd() { try { var sqlFuc = CommonTool.DbServe.Queryable().Where(w => w.TaskStatus == (int)WmsTaskStatusEnum.queuing || w.TaskStatus == (int)WmsTaskStatusEnum.create || w.TaskStatus == (int)WmsTaskStatusEnum.running).OrderByDescending(o => o.CreateTime); return sqlFuc.ToList(); } catch (Exception ex) { _ = ex; return default; } } /// /// 查询自起点索引后的多少条数据 /// /// /// public (List? wmsTasks, int totalRows) SelectPage(GetWmsTaskWithPageRequest pageRequest) { try { int totalRows = 0; var sqlFuc = CommonTool.DbServe.Queryable() .WhereIF(!string.IsNullOrEmpty(pageRequest.SearchStr), w => w.Destination!.Contains(pageRequest.SearchStr!) || w.WcsId!.Contains(pageRequest.SearchStr!) || w.Origin!.Contains(pageRequest.SearchStr!) || w.VehicleNo!.Contains(pageRequest.SearchStr!) || w.TaskId!.Contains(pageRequest.SearchStr!) || w.TaskMsg!.Contains(pageRequest.SearchStr!)); // 模糊查询 if (pageRequest.TaskType != default) // 查询任务类型 { List taskTypes = []; pageRequest.TaskType.ForEach(item => taskTypes.Add(item)); sqlFuc.Where(w => taskTypes.Contains(w.TaskType)); } if (pageRequest.TaskStatus != default) // 查询任务状态 { List taskStatuses = []; pageRequest.TaskStatus.ForEach(item => taskStatuses.Add(item)); sqlFuc.Where(w => taskStatuses.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 List? SelectNotComplete() { try { var sqlFuc = CommonTool.DbServe.Queryable() .Where(w => w.TaskStatus != (int)WmsTaskStatusEnum.complete && w.TaskStatus != (int)WmsTaskStatusEnum.err) .ToList(); return sqlFuc; } catch (Exception ex) { _ = ex; return default; } } /// /// 重置任务状态 /// /// /// /// 重置信息 /// public string ResetTaskWithTaskId(string? taskId, string? newDestination, string resetMsg) { if (string.IsNullOrEmpty(taskId)) { return "任务号为空"; } /* 需要执行的操作 1、重置WMS任务表状态 2、删除WCS任务表数据 */ var result = CommonTool.DbServe.Ado.UseTran(() => { // -- 更新wms任务状态 if (string.IsNullOrEmpty(newDestination)) { CommonTool.DbServe.Updateable(new AppWmsTask() { TaskId = taskId, TaskStatus = (int)WmsTaskStatusEnum.create }) .UpdateColumns(u => new { u.TaskStatus }).WhereColumns(w => new { w.TaskId }) .ExecuteCommand(); } else { CommonTool.DbServe.Updateable(new AppWmsTask() { TaskId = taskId, TaskStatus = (int)WmsTaskStatusEnum.create, Destination = newDestination }) .UpdateColumns(u => new { u.TaskStatus, u.Destination }).WhereColumns(w => new { w.TaskId }) .ExecuteCommand(); } // -- 更新wcs任务表状态 CommonTool.DbServe .Updateable(new AppWcsTask() { TaskId = taskId, TaskStatus = (int)WcsTaskStatusEnum.err, Remark = $"{resetMsg}{(string.IsNullOrEmpty(newDestination) ? "" : "新的目的地为:")}{newDestination}" }) .UpdateColumns(u => new { u.TaskStatus, u.Remark }).WhereColumns(w => new { w.TaskId }) .ExecuteCommand(); // -- 备份wcs任务表 CommonTool.DbServe.Ado.ExecuteCommand( $"insert into tbl_app_wcs_task_bak select * from tbl_app_wcs_task where task_id = '{taskId}'"); // -- 删除wcs任务表 CommonTool.DbServe.Deleteable().Where(w => w.TaskId == taskId).ExecuteCommand(); }); return result.Data ? string.Empty : result.ErrorMessage; } /// /// 完成任务 /// /// /// /// /// public string CompleteTaskWithTaskId(string? taskId, string completeText = "") { if (string.IsNullOrEmpty(taskId)) { return "任务号为空"; } /* 需要执行的操作 1、完成WMS任务表状态 2、删除WCS任务表数据 */ var result = CommonTool.DbServe.Ado.UseTran(() => { // -- 更新wms任务状态 CommonTool.DbServe .Updateable(new AppWmsTask() { TaskId = taskId, TaskStatus = (int)WmsTaskStatusEnum.complete, EndTime = DateTime.Now, TaskMsg = completeText }) .IgnoreColumns(ignoreAllNullColumns: true) .ExecuteCommand(); // -- 更新wcs任务表状态 CommonTool.DbServe .Updateable(new AppWcsTask() { TaskId = taskId, TaskStatus = (int)WcsTaskStatusEnum.complete, Remark = completeText, CompleteTime = DateTime.Now }) .UpdateColumns(u => new { u.TaskStatus, u.Remark, u.CompleteTime }).WhereColumns(w => new { w.TaskId }) .ExecuteCommand(); // -- 备份WCS任务表 CommonTool.DbServe.Ado.ExecuteCommand( $"insert into tbl_app_wcs_task_bak select * from tbl_app_wcs_task where task_id = '{taskId}'"); // -- 删除WCS任务表 CommonTool.DbServe.Deleteable().Where(w => w.TaskId == taskId).ExecuteCommand(); }); return result.Data ? string.Empty : result.ErrorMessage; } /// /// 删除任务 /// /// /// 删除原因 /// public string DeleteTaskWithTaskId(string? taskId, string deleteMsg) { if (string.IsNullOrEmpty(taskId)) return "任务号为空"; var result = CommonTool.DbServe.Ado.UseTran(() => { // -- 更新wms表状态 CommonTool.DbServe.Updateable(new AppWmsTask() { TaskId = taskId, TaskStatus = (int)WmsTaskStatusEnum.err, EndTime = DateTime.Now, TaskMsg = deleteMsg }) .IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand(); // -- 更新wcs任务表状态 CommonTool.DbServe .Updateable(new AppWcsTask() { TaskId = taskId, TaskStatus = (int)WcsTaskStatusEnum.err, Remark = deleteMsg }) .UpdateColumns(u => new { u.TaskStatus, u.Remark }).WhereColumns(w => new { w.TaskId }) .ExecuteCommand(); // -- 备份WCS任务表 CommonTool.DbServe.Ado.ExecuteCommand( $"insert into tbl_app_wcs_task_bak select * from tbl_app_wcs_task where task_id = '{taskId}'"); // -- 删除WCS任务表 CommonTool.DbServe.Deleteable().Where(w => w.TaskId == taskId).ExecuteCommand(); }); return result.Data ? string.Empty : result.ErrorMessage; } /// /// 取消任务 /// /// /// /// /// public string CancelTaskWithTaskId(string? taskId, string cancelPerson) { if (string.IsNullOrEmpty(taskId)) return "任务号为空"; var result = CommonTool.DbServe.Ado.UseTran(() => { // -- 更新wms表状态 CommonTool.DbServe.Updateable(new AppWmsTask() { TaskId = taskId, TaskStatus = (int)WmsTaskStatusEnum.err, EndTime = DateTime.Now, TaskMsg = $"【{cancelPerson}】取消任务" }) .IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand(); // -- 更新wcs任务表状态 CommonTool.DbServe .Updateable(new AppWcsTask() { TaskId = taskId, TaskStatus = (int)WcsTaskStatusEnum.err, Remark = $"【{cancelPerson}】取消任务", CompleteTime = DateTime.Now }) .UpdateColumns(u => new { u.TaskStatus, u.Remark, u.CompleteTime }).WhereColumns(w => new { w.TaskId }) .ExecuteCommand(); // -- 备份WCS任务表 CommonTool.DbServe.Ado.ExecuteCommand( $"insert into tbl_app_wcs_task_bak select * from tbl_app_wcs_task where task_id = '{taskId}'"); // -- 删除WCS任务表 CommonTool.DbServe.Deleteable().Where(w => w.TaskId == taskId).ExecuteCommand(); }); return result.Data ? string.Empty : result.ErrorMessage; } /// /// 添加记录 /// 注意:尚未清楚是否为事务插入 /// /// /// public int InsertTaskAndMarkErr(params AppWmsTask[] appWmsTasks) { if (appWmsTasks.Length < 1) return 0; try { int count = 0; Action action = () => { }; foreach (var wmsTask in appWmsTasks) { action += () => { // -- 更新wms表状态 CommonTool.DbServe.Updateable(new AppWmsTask() { TaskStatus = (int)WmsTaskStatusEnum.err, EndTime = DateTime.Now, TaskMsg = $"由于收到新任务,该任务被取消,操作人:{wmsTask.CreatePerson}" }) .UpdateColumns(u => new { u.TaskStatus, u.TaskMsg, u.EndTime }) .Where(w => w.VehicleNo == wmsTask.VehicleNo && (w.TaskStatus == (int)WmsTaskStatusEnum.queuing || w.TaskStatus == (int)WmsTaskStatusEnum.create)) .ExecuteCommand(); // -- 更新wcs任务表状态 CommonTool.DbServe.Updateable(new AppWcsTask() { TaskStatus = (int)WcsTaskStatusEnum.err, CompleteTime = DateTime.Now, Remark = $"由于收到新任务,该任务被取消,操作人:{wmsTask.CreatePerson}" }) .UpdateColumns(u => new { u.TaskStatus, u.Remark, u.CompleteTime }) .Where(w => w.VehicleNo == wmsTask.VehicleNo && w.TaskStatus == (int)WcsTaskStatusEnum.create) .ExecuteCommand(); // -- 备份WCS任务表 CommonTool.DbServe.Ado.ExecuteCommand( $"insert into tbl_app_wcs_task_bak select * from tbl_app_wcs_task where vehicle_no = '{wmsTask.VehicleNo}' and task_type = {wmsTask.TaskType}"); // -- 删除WCS任务表 CommonTool.DbServe.Deleteable() .Where(w => w.VehicleNo == wmsTask.VehicleNo && w.TaskType == wmsTask.TaskType). ExecuteCommand(); // -- 插入WMS任务 CommonTool.DbServe.Insertable(wmsTask).ExecuteCommand(); }; count++; } var result = CommonTool.DbServe.Ado.UseTran(action); if (result.IsSuccess) return count; } catch (Exception ex) { _ = ex; } return 0; } }