yanjinhui
2025-06-09 9f3858dd723a69c56dbab909e0c7e6c5ef8b85a8
project/WCS/WIDESEAWCS_Server/WIDESEAWCS_TelescopicService/MaintenanceService.cs
@@ -23,13 +23,13 @@
        public IRepository<Dt_Maintenance> Repository => BaseDal;
        public readonly IRepository<Dt_MaintenanceTeam> _team;
        private readonly IRepository<Sys_User> _user;
        private readonly IRepository<Sys_Role> _role;
        public MaintenanceService(IRepository<Sys_Role> role,IRepository<Dt_Maintenance> BaseDal, IRepository<Sys_User> user, IRepository<Dt_MaintenanceTeam> team) : base(BaseDal)
        public MaintenanceService(IRepository<Dt_Maintenance> BaseDal, IRepository<Sys_User> user, IRepository<Dt_MaintenanceTeam> team) : base(BaseDal)
        {
            _user = user;
            _team = team;
            _role = role;
        }
@@ -111,42 +111,22 @@
        /// <summary>
        /// 人员监控
        /// 人员监控(数字大屏)
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="searchKeyword"></param>
        /// <returns></returns>(这个没有用到了)
        /// <returns></returns>
        public WebResponseContent PersonnelMonitoring(PaginationDTO pagination)
        {
            try
            {
                // 第一步:自动清理过期检修状态
                var today = DateTime.Today;
                var recordsToUpdate = Db.Queryable<Dt_Maintenance>()
                    .Where(b => b.MaintenanceDate != null &&
                                b.MaintenanceDate.Value.Date < today  )
                    .ToList();
                if (recordsToUpdate.Count > 0)
                {
                    foreach (var record in recordsToUpdate)//更新
                    {
                        record.MaintenanceDate = null;//清空检修日期
                        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<Sys_User>();
                var main = Db.Queryable<Dt_Maintenance>();
                var query = sys.InnerJoin<Dt_Maintenance>((a, b) => a.UserName == b.UserAccount)
                              .Where((a, b) => b.IsPossible == "true"); // 展示运行检修的
                              .Where((a, b) => b.MaintenanceStatus==1); // 展示运行检修的
                // 搜索关键字
                if (!string.IsNullOrEmpty(pagination.searchKeyword))
@@ -156,37 +136,22 @@
                        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<Sys_User>()
                        .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);
                }
                //// 状态参数
                //if (pagination.status.HasValue) //多传一个状态
                //{
                //    query = query.Where((a, b) => b.MaintenanceStatus == pagination.status.Value);
                //}
                var result = query
                    .Select((a, b) => new
                    {
                        a.UserTrueName,
                        a.Userteam,
                        a.HeadImageUrl,
                        b.MaintenanceStatus,
                        b.MaintenanceDate,
                        b.IsPossible,
                        a.Userteam,//班组
                        a.Unit,//单位
                        b.ID,//id
                        b.MaintenanceStatus,//检修状态
                        b.CreateDate,//日期
                        b.MaintenancStartTime,//开始时间
                    })
                    .ToPageList(pagination.pageIndex, pagination.pageSize, ref totalCount);
@@ -213,43 +178,38 @@
        /// <summary>
        /// 更新状态是否允许进入检修(添加了检修记录)
        /// 更新状态强制下线(添加了检修记录)
        /// </summary>
        /// <param name="id"></param>
        /// <param name="ispossible"></param>
        /// <returns></returns>
        public WebResponseContent RunOperation(int id, string  ispossible)
        public WebResponseContent RunOperation(int id,string LocalIP)
        {
            try
            {
                var mon = BaseDal.QueryFirst(x => x.ID == id);
                if (mon == null)
                var user = BaseDal.QueryData();//检修表
                var maint = user.Where(x => x.ID == id).FirstOrDefault(); //在检修表中先找到该用户
                var sysuer = _user.QueryData(x => x.UserName == maint.UserAccount).FirstOrDefault();
                if (maint == null ||sysuer==null)
                {
                    return new WebResponseContent { Status = false, Message = "无法更改,没有找到该用户" };
                    return new WebResponseContent { Status = false, Message = "没有找到该用户" };
                }
                var sysuer = _user.QueryData(x => x.UserName == mon.UserAccount).FirstOrDefault();
                if (ispossible == "true")
                 maint.MaintenanceStatus = 0;//改变状态强制下线
                BaseDal.UpdateData(maint);
                                            //插入记录表
                var recording = new Dt_MaintenanceTeam  //添加记录
                {
                    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,
                    Account = maint.UserAccount,
                    MaintenanceStatus = 0,
                    OperatorName = sysuer.UserTrueName,
                    TeamName = sysuer.RoleName,
                    DistributionTime = DateTime.Now,
                    IPAddress = LocalIP,
                };
                _team.AddData(recording);
                    };
                    _team.AddData(recording);
                }
                else
                {
                    mon.IsPossible = "false";
                    BaseDal.UpdateData(mon);
                }
                return new WebResponseContent { Status = true, Data = mon };
                return new WebResponseContent { Status = true,Message="强制下线成功", Data = recording };
            }
            catch (Exception ex)
            {
@@ -588,13 +548,22 @@
            try
            {
                var user = BaseDal.QueryData();//检修表
                var Role = _role.QueryData();//角色表
                var maint = user.Where(x => x.UserAccount == account).FirstOrDefault(); //在检修表中先找到该用户
                var sysuer = _user.QueryData(x => x.UserName == account).FirstOrDefault();//在用户表中找到用户
                if (maint == null || sysuer == null)
                {
                    return new WebResponseContent { Status = false, Message = "没有找到该用户" };
                }
                // 查找该用户在 _team 表中的最新一条记录
                var lastRecord = _team.QueryData(x => x.Account == account)
                                      .OrderByDescending(x => x.CreateDate)
                                      .FirstOrDefault();
                if (lastRecord != null && lastRecord.MaintenanceStatus == 1)
                {
                    return new WebResponseContent { Status = false, Message = "你已经在开始检修了,请不要重复点击" };
                }
                //先要找到该用户属于那个角色的,这个角色中属于那个什么类型(组长/组员)
                if (maint.IsLeader != 1)//如果该用户不是班长,那么要等班长先做,他才可以做
                {
@@ -605,6 +574,10 @@
                    }
                }
                if (true)
                {
                }
                //如果满足下面的条件就开始
                maint.MaintenancStartTime = DateTime.Now;//记录开始时间
                maint.MaintenanceStatus = 1;//更改状态
@@ -612,6 +585,8 @@
                //插入记录表
                var recording = new Dt_MaintenanceTeam  //添加记录
                {
                    Account = account,
                    MaintenanceStatus=1,
                    OperatorName = sysuer.UserTrueName,
                    TeamName = sysuer.RoleName,
                    DistributionTime = DateTime.Now,
@@ -627,40 +602,66 @@
            }
        }
        /// <summary>
        /// 结束检修
        /// </summary>MaintenanceStatus 0代表检修完成  1代表检修中
        /// </summary>
        /// <param name="account"></param>
        /// <returns></returns>
        public WebResponseContent StopMaintenanceTask(string account)
        {
            try
            {
                var user = BaseDal.QueryData();//检修表
                var user = BaseDal.QueryData(); // 检修表
                var maint = user.Where(x => x.UserAccount == account).FirstOrDefault();
                var sysuer = _user.QueryData(x => x.UserName == account).FirstOrDefault();//用户表
                var sysuer = _user.QueryData(x => x.UserName == account).FirstOrDefault(); // 用户表
                if (maint == null || sysuer == null)
                {
                    return new WebResponseContent { Status = false, Message = "没有找到该用户" };
                }
                if (maint.IsLeader == 1)//如果该用户是班长,那么要等全部人都检修完成,他才可以结束检修
                // 查找该用户在 _team 表中的最新一条记录
                var lastRecord = _team.QueryData(x => x.Account == account)
                                    .OrderByDescending(x => x.CreateDate)
                                    .FirstOrDefault();
                if (lastRecord == null || lastRecord.MaintenanceStatus != 1)
                {
                    //先查找所有用户的组是那个组的,组员状态有一个不是1
                    // 查找同组未完成的组员(IsLeader=0 && MaintenanceStatus=1)
                    var hasUnfinishedMembers = user.Where(x =>x.IsLeader == 0 &&x.MaintenanceStatus == 1).ToList(); //:Any()有一个满足就返回true表示存在满足条件的记录
                    if (hasUnfinishedMembers.Count>0)
                    return new WebResponseContent { Status = false, Message = "你还没有开始检修,请先点击开始检修" };
                }
                // 检查是否至少有一个组长在场
                var activeLeaders = user.Where(x => x.IsLeader == 1 && x.MaintenanceStatus == 1).ToList();
                // 如果当前用户是组长
                if (maint.IsLeader == 1)
                {
                    // 如果是最后一个在场的组长
                    if (activeLeaders.Count == 1 && activeLeaders[0].UserAccount == account)
                    {
                        return new WebResponseContent { Status = false, Message = "还有组员未完成当前批次检修" };
                        // 检查是否还有未完成的组员
                        var unfinishedMembers = user.Where(x => x.IsLeader == 0 && x.MaintenanceStatus == 1).Any();
                        if (unfinishedMembers)
                        {
                            return new WebResponseContent
                            {
                                Status = false,
                                Message = "您是最后一个在场的组长,请等待所有组员完成检修后再结束"
                            };
                        }
                    }
                }
                //如果满足下面的条件就开始
                maint.MaintenancEendTime = DateTime.Now;//记录结束时间
                maint.MaintenanceStatus = 0;//更改状态
                // 更新当前用户的检修状态
                maint.MaintenancEendTime = DateTime.Now; // 记录结束时间
                maint.MaintenanceStatus = 0; // 更改状态
                BaseDal.UpdateData(maint);
                ////插入记录表
                var recording = new Dt_MaintenanceTeam  //添加记录
                // 插入记录表
                var recording = new Dt_MaintenanceTeam  // 添加记录
                {
                    Account = account,
                    MaintenanceStatus = 0,
                    OperatorName = sysuer.UserTrueName,
                    TeamName = sysuer.RoleName,
                    EndTime = DateTime.Now,
@@ -684,7 +685,7 @@
        {
            try
            {
              var reslut=BaseDal.QueryData(x => x.MaintenanceStatus == 1).ToList();
                var reslut=BaseDal.QueryData(x => x.MaintenanceStatus == 1).ToList();
                if (reslut.Count<=0)
                {
                    return new WebResponseContent { Status = false, Message = "还没有人开始检修" };