using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using AutoMapper; using SqlSugar; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseRepository; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_ITelescopicService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_DTO; using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; using WIDESEAWCS_DTO.Telescopic; using SqlSugar.DistributedSystem.Snowflake; using System.IO; namespace WIDESEAWCS_TelescopicService { public class MaintenanceService : ServiceBase>, IMaintenanceService { public IRepository Repository => BaseDal; public readonly IRepository _team; private readonly IRepository _user; public MaintenanceService(IRepository BaseDal, IRepository user, IRepository team) : base(BaseDal) { _user = user; _team = team; } /// /// 设置检修权限 /// /// /// public WebResponseContent ShowMaintence(PaginationDTO pagination) { try { int totalCount = 0; var sys = _user.Db.Queryable(); var main = Db.Queryable(); var query = sys.InnerJoin((a, b) => a.UserName == b.UserAccount); // 筛选搜索关键字(无论admin还是普通用户都适用) if (!string.IsNullOrEmpty(pagination.searchKeyword)) { query = query.Where((a, b) => a.UserTrueName.Contains(pagination.searchKeyword) || a.UserName.Contains(pagination.searchKeyword) || a.CardNumber.ToString().Contains(pagination.searchKeyword) || a.Userteam.Contains(pagination.searchKeyword) ); } // 如果不是管理员,根据部门过滤 if (pagination.account != "admin") { var currentUser = _user.Db.Queryable() .Where(u => u.UserName == pagination.account) .First(); if (currentUser == null) { return new WebResponseContent { Status = false, Data = "未获取到用户信息" }; } int? deptId = currentUser.Dept_Id; query = query.Where((a, b) => a.Dept_Id == deptId); } // 执行分页查询 var result = query.Select((a, b) => new { b.ID, a.UserTrueName, a.UserName, a.CardNumber, a.Userteam, a.HeadImageUrl, b.IsPossible }).ToPageList(pagination.pageIndex, pagination.pageSize, ref totalCount); return new WebResponseContent { Status = true, Data = new { TotalCount = totalCount, PageIndex = pagination.pageIndex, PageSize = pagination.pageSize, Items = result } }; } catch (Exception ex) { return new WebResponseContent { Status = false, Data = ex.Message }; } } /// /// 人员监控 /// /// /// /// /// public WebResponseContent PersonnelMonitoring(PaginationDTO pagination) { try { // 第一步:自动清理过期检修状态 var today = DateTime.Today; var recordsToUpdate = Db.Queryable() .Where(b => b.MaintenancStartTime != null && b.MaintenancStartTime.Value.Date < today ) .ToList(); if (recordsToUpdate.Count > 0) { foreach (var record in recordsToUpdate)//更新 { record.MaintenancStartTime = null;//清空开始时间 record.MaintenancEendTime = null;//清空结束时间 record.MaintenanceStatus = 0; // Set to false record.IsPossible = "NULL"; //更改状态为false不运行检修//默认为NULL } Db.Updateable(recordsToUpdate).ExecuteCommand(); } int totalCount = 0; var sys = _user.Db.Queryable(); var main = Db.Queryable(); var query = sys.InnerJoin((a, b) => a.UserName == b.UserAccount) .Where((a, b) => b.IsPossible == "true"); // 展示运行检修的 // 搜索关键字 if (!string.IsNullOrEmpty(pagination.searchKeyword)) { query = query.Where((a, b) => a.UserTrueName.Contains(pagination.searchKeyword) || a.Userteam.Contains(pagination.searchKeyword)); } // 状态参数 if (pagination.status.HasValue) { query = query.Where((a, b) => b.MaintenanceStatus == pagination.status.Value); } // 如果不是管理员,请按部门过滤 if (pagination.account != "admin") { var currentUser = _user.Db.Queryable() .Where(u => u.UserName == pagination.account) .First(); if (currentUser == null) { return new WebResponseContent { Status = false, Data = "未获取到用户信息" }; } int? deptId = currentUser.Dept_Id; query = query.Where((a, b) => a.Dept_Id == deptId); } var result = query .Select((a, b) => new { a.UserTrueName, a.Userteam, a.HeadImageUrl, b.MaintenanceStatus, b.MaintenanceDate, b.IsPossible, }) .ToPageList(pagination.pageIndex, pagination.pageSize, ref totalCount); return new WebResponseContent { Status = true, Data = new { TotalCount = totalCount, PageIndex = pagination.pageIndex, PageSize = pagination.pageSize, Items = result } }; } catch (Exception ex) { return new WebResponseContent { Status = false, Data = ex.Message }; } } /// /// 更新状态是否允许进入检修 /// /// /// /// public WebResponseContent RunOperation(int id, string ispossible) { try { var mon = BaseDal.QueryFirst(x => x.ID == id); if (mon == null) { return new WebResponseContent { Status = false, Message = "无法更改,没有找到该用户" }; } var sysuer = _user.QueryData(x => x.UserName == mon.UserAccount).FirstOrDefault(); if (ispossible == "true") { mon.IsPossible = "true"; mon.MaintenanceDate = DateTime.Now; BaseDal.UpdateData(mon); var recording = new Dt_MaintenanceTeam { OperatorName = sysuer.UserTrueName, TeamName = sysuer.RoleName, DistributionTime = DateTime.Now, Creater = "admin", CreateDate = DateTime.Now, }; _team.AddData(recording); } else { mon.IsPossible = "false"; BaseDal.UpdateData(mon); } return new WebResponseContent { Status = true, Data = mon }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = "失败:" + ex }; } } /// /// 更改状态 /// /// /// public WebResponseContent ChangeTasState(int id) { try { var change = BaseDal.QueryFirst(x => x.ID == id); //将数据库中的int 值转为 枚举型 if (!Enum.IsDefined(typeof(Maint), change.MaintenanceStatus)) { return new WebResponseContent { Status = false, Message = "当前状态不合法,无法更新" }; } Maint Status = (Maint)change.MaintenanceStatus; //int ->枚举 switch (Status) { case Maint.待开始: change.MaintenanceStatus = (int)Maint.检修中; change.MaintenancStartTime = DateTime.Now; break; case Maint.检修中: change.MaintenanceStatus = (int)Maint.已完成; break; case Maint.已完成: change.MaintenancEendTime = DateTime.Now; return new WebResponseContent { Status = false, Message = "当前任务已完成" }; default: return new WebResponseContent { Status = false, Message = "更新失败" }; } return new WebResponseContent { Status = true, Data = change }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = "错误:" + ex }; } } /// /// 检修操作记录 /// /// 页数 /// 一页多少个数据 /// public WebResponseContent MaintenanceOperationRecord(PaginationDTO pagination) { try { int totalCount = 0; var sys = _user.Db.Queryable(); var main = Db.Queryable(); //模糊查询 var query = sys.InnerJoin((a, b) => a.UserName == b.UserAccount); if (!string.IsNullOrEmpty(pagination.searchKeyword)) { query = query.Where((a, b) => a.UserTrueName.Contains(pagination.searchKeyword)|| a.Userteam.Contains(pagination.searchKeyword)|| a.HeadImageUrl.Contains(pagination.searchKeyword) ); } //时间查询 if (pagination.startDate.HasValue && pagination.endDate.HasValue) { query = query.Where((a, b) => b.MaintenancStartTime >= pagination.startDate.Value && b.MaintenancStartTime <= pagination.endDate.Value); } //排序 if (!string.IsNullOrEmpty(pagination.sortField)) { var isAcs = pagination.sortOrder?.ToLower() == "asc"; query = pagination.sortField.ToLower() switch { "maintenancstarttime" => isAcs ? query.OrderBy((a, b) => b.MaintenancStartTime) : query.OrderByDescending((a, b) => b.MaintenancStartTime), "maintenancenendtime" => isAcs ? query.OrderBy((a, b) => b.MaintenancEendTime) : query.OrderByDescending((a, b) => b.MaintenancEendTime), _ => query.OrderByDescending((a, b) => b.Creater) // 默认按创建时间降序 }; } else { query=query.OrderByDescending((a, b) => b.Creater); } // 如果不是管理员,根据部门过滤 if (pagination.account != "admin") { var currentUser = _user.Db.Queryable() .Where(u => u.UserName == pagination.account) .First(); if (currentUser == null) { return new WebResponseContent { Status = false, Data = "未获取到用户信息" }; } int? deptId = currentUser.Dept_Id; query = query.Where((a, b) => a.Dept_Id == deptId); } //返回结果 var result = query.Select((a, b) => new { a.UserTrueName, a.Userteam, a.HeadImageUrl, b.MaintenancStartTime, b.MaintenancEendTime, }).ToPageList(pagination.pageIndex, pagination.pageSize, ref totalCount); return new WebResponseContent { Status = true, Data = new { TotalCount = totalCount,//总数 PageIndex = pagination.pageIndex,//页数 PageSize = pagination.pageSize,//一页多少个数据 Items = result } }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = "错误信息:" + ex.Message }; } } /// /// 看今天的检修任务 /// /// /// public WebResponseContent MaintenanceTasksOfTheDay(string account) { try { var today = DateTime.Today; // 今天的零点 var tomorrow = today.AddDays(1); // 明天的零点 var query = _user.Db.Queryable() .InnerJoin((a, b) => a.UserName == b.UserAccount) .Where((a, b) => b.IsPossible == "true" && b.UserAccount == account && b.MaintenanceDate >= today && b.MaintenanceDate < tomorrow).Select((a, b) => new { b.ID, a.UserTrueName, a.UserName, a.CardNumber, a.Userteam, a.HeadImageUrl, b.IsPossible, b.MaintenanceDate, b.MaintenancStartTime, b.MaintenancEendTime, }).ToList(); if (query==null) { return new WebResponseContent { Status = false, Message = "你今天没有检修任务" }; } return new WebResponseContent { Status=true, Data = query }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = "错误信息:" + ex.Message }; } } /// /// 开始检修 /// /// /// public WebResponseContent StartMaintenceTask(string account) { try { var today = DateTime.Today; // 今天的零点 var tomorrow = today.AddDays(1); // 明天的零点 var maint = BaseDal.QueryData(x => x.UserAccount == account && x.IsPossible == "true" && x.MaintenanceDate >= today && x.MaintenanceDate < tomorrow ).FirstOrDefault(); if (maint == null) { return new WebResponseContent { Status = false, Message = "未找到今日的维护任务记录" }; } maint.MaintenancStartTime = DateTime.Now; BaseDal.UpdateData(maint); return new WebResponseContent { Status = true, Data = maint }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = "错误信息:" + ex.Message }; } } /// /// 结束检修 /// /// /// public WebResponseContent StopMaintenanceTask(string account) { try { var today = DateTime.Today; // 今天的零点 var tomorrow = today.AddDays(1); // 明天的零点 var maint = BaseDal.QueryData(x => x.UserAccount == account && x.IsPossible == "true" && x.MaintenanceDate >= today &&x.MaintenanceDate < tomorrow).FirstOrDefault(); if (maint == null) { return new WebResponseContent { Status = false, Message = "未找到可用的维护任务记录" }; } // 修改其结束时间 maint.MaintenancEendTime = DateTime.Now; maint.IsPossible = "ok";//ok就代表完成了 BaseDal.UpdateData(maint); return new WebResponseContent { Status = true, Data = maint }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = "错误信息:" + ex.Message }; } } /// /// 状态枚举 /// private enum Maint { //待检修=0, 待开始=0, 检修中=1, 已完成=2 } } }