Browse Source

重构权限处理逻辑,优化查询格式

在 `GroupsController.cs` 中添加了对 `EyeSoft.Runtime.InteropServices` 的引用,并重构了权限处理逻辑,简化了事务处理流程。确保 `permissions` 列表在使用前被正确初始化。

在 `PersonnelModuleController.cs` 中增加了 `currUserName` 变量,并优化了 SQL 查询格式,以提高可读性。

在 `Pm_TaskJobRelevancy.cs` 中修复了类定义格式,提升代码可读性。

在 `TaskAllocationRepository.cs` 中优化了 LINQ 查询格式,调整了查询条件的排列方式,并修复了任务审核逻辑,确保使用 `Any()` 方法检查列表是否为空。
LEIYI 3 months ago
parent
commit
b13f00278d

+ 24 - 27
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -3,6 +3,7 @@ using Aspose.Words;
 using Aspose.Words.Drawing;
 using Aspose.Words.Tables;
 using DiffMatchPatch;
+using EyeSoft.Runtime.InteropServices;
 using Microsoft.AspNetCore.SignalR;
 using Microsoft.IdentityModel.Tokens;
 using Microsoft.VisualBasic;
@@ -9854,23 +9855,20 @@ WHERE
             }
             if (permissions.Any())
             {
-                _sqlSugar.BeginTran();
-                try
+                if (!permissions.Any(x => x.UserId == dto.CurrUserId))
                 {
-                    await _sqlSugar.Deleteable<Grp_EnterExitCostPermission>().Where(it => it.GroupId == dto.DiId).ExecuteCommandAsync();
-
-                    var result = await _sqlSugar.Insertable(permissions).ExecuteCommandAsync();
-                    if (result < 1)
-                    {
-                        _sqlSugar.RollbackTran();
-                        return Ok(JsonView(false));
-                    }
+                    permissions.Add(new Grp_EnterExitCostPermission { Permission = 1, GroupId = dto.DiId, UserId = dto.CurrUserId, CreateUserId = dto.CurrUserId });
                 }
-                catch (Exception ex)
-                {
 
+                _sqlSugar.BeginTran();
+
+                await _sqlSugar.Deleteable<Grp_EnterExitCostPermission>().Where(it => it.GroupId == dto.DiId).ExecuteCommandAsync();
+
+                var result = await _sqlSugar.Insertable(permissions).ExecuteCommandAsync();
+                if (result < 1)
+                {
                     _sqlSugar.RollbackTran();
-                    return Ok(JsonView(false, ex.Message));
+                    return Ok(JsonView(false));
                 }
                 _sqlSugar.CommitTran();
                 return Ok(JsonView(true));
@@ -10827,7 +10825,9 @@ WHERE
             if (!viewPerm) return Ok(JsonView(false, _viewPermStr));
 
             mobileInfo = _mapper.Map<EnterExitCostDraftMobileParentInfoView>(eecInfo);
+
             mobileInfo.IsAssignPerm = assignPerm;
+
             var dayAndCostData = _sqlSugar.Queryable<Grp_DayAndCostDraft>()
                 .LeftJoin<Grp_NationalTravelFee>((dac, ntf) => dac.NationalTravelFeeId == ntf.Id)
                 .LeftJoin<Sys_SetData>((dac, ntf, sd) => dac.Currency == sd.Id)
@@ -11226,31 +11226,28 @@ WHERE
             (bool viewPerm, bool assignPerm) = await _enterExitCostDraftRep.PermissionValidationAsync(dto.DraftId, dto.CurrUserId);
             if (!viewPerm) return Ok(JsonView(false, _viewPermStr));
 
-            var permissions = new List<Grp_EnterExitCostDraftPermission>();
+            var permissions = new List<Grp_EnterExitCostDraftPermission>() { };
             foreach (var userId in dto.UserIds)
             {
                 permissions.Add(new Grp_EnterExitCostDraftPermission { Permission = 1, DraftId = dto.DraftId, UserId = userId, CreateUserId = dto.CurrUserId });
             }
             if (permissions.Any())
             {
-                _sqlSugar.BeginTran();
-                try
+                if (!permissions.Any(x => x.UserId == dto.CurrUserId))
                 {
-                    await _sqlSugar.Deleteable<Grp_EnterExitCostDraftPermission>().Where(it => it.DraftId == dto.DraftId).ExecuteCommandAsync();
-
-                    var result = await _sqlSugar.Insertable(permissions).ExecuteCommandAsync();
-                    if (result < 1)
-                    {
-                        _sqlSugar.RollbackTran();
-                        return Ok(JsonView(false));
-                    }
+                    permissions.Add(new Grp_EnterExitCostDraftPermission { Permission = 1, DraftId = dto.DraftId, UserId = dto.CurrUserId, CreateUserId = dto.CurrUserId });
                 }
-                catch (Exception ex)
-                {
 
+                _sqlSugar.BeginTran();
+                await _sqlSugar.Deleteable<Grp_EnterExitCostDraftPermission>().Where(it => it.DraftId == dto.DraftId).ExecuteCommandAsync();
+
+                var result = await _sqlSugar.Insertable(permissions).ExecuteCommandAsync();
+                if (result < 1)
+                {
                     _sqlSugar.RollbackTran();
-                    return Ok(JsonView(false, ex.Message));
+                    return Ok(JsonView(false));
                 }
+
                 _sqlSugar.CommitTran();
                 return Ok(JsonView(true));
 

+ 73 - 23
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -1034,10 +1034,9 @@ namespace OASystem.API.Controllers
 
             #endregion
 
-            string whereSql = "";
+            string whereSql = "" ,currUserName = "";
             #region 分页参数处理
 
-
             //类型处理
             if (dto.Type == 0) whereSql = "";
             else if (dto.Type == 1) //1 由我指派
@@ -1066,27 +1065,78 @@ namespace OASystem.API.Controllers
 
             #endregion
 
-            string pageSql = string.Format(@"Select * From(
-                                                 Select ROW_NUMBER() OVER(ORDER BY ta.CreateTime Desc) AS RowNumber,
-                                                 ta.Id,ta.TaskName,ta.TaskPriority,d.DepName,di.TeamName,ta.Status,
-                                                 ta.PredictBeginTime,ta.PredictEndTime,u.CnName As CreateUserName,ta.CreateTime,
-                                                 (SELECT STUFF(
-                                                  (Select  ',' + u.CnName From Pm_TaskRelevanceUser tra
-                                                 Left Join Sys_Users u On tra.UserId = u.Id
-                                                 Where tra.Isdel = 0 And tra.TAId = ta.Id
-                                                 FOR XML PATH('')),1,1,'')) As Participant,
-                                                 (SELECT STUFF(
-                                                  (Select  ',' + u.CnName From Pm_TaskRelevanceUser tra
-                                                 Left Join Sys_Users u On tra.UserId = u.Id
-                                                 Where tra.Isdel = 0 And tra.TAId = ta.Id And tra.TaskStatus = 4
-                                                 FOR XML PATH('')),1,1,'')) As Consummator
-                                                 From Pm_TaskAllocation ta
-                                                 Left Join Sys_Department d  On ta.DepId = d.Id 
-                                                 Left Join Grp_DelegationInfo di  On ta.DiId = di.Id 
-                                                 Left Join Sys_Users u On ta.CreateUserId = u.Id
-                                                 Where ta.IsDel = 0 {0} ) As temp ", whereSql);
-
-            RefAsync<int> total = 0;//REF和OUT不支持异步,想要真的异步这是最优解
+            var currUserInfo = await _sqlSugar.Queryable<Sys_Users>().FirstAsync(x => x.Id == dto.UserId);
+            if (currUserInfo != null) currUserName = currUserInfo.CnName;
+
+            string pageSql = string.Format(@"Select
+ ROW_NUMBER() OVER(
+        ORDER BY
+          CreateTime Desc
+      ) AS RowNumber,
+  *
+From
+(
+    Select
+      ta.Id,
+      ta.TaskName,
+      ta.TaskPriority,
+      d.DepName,
+      di.TeamName,
+      ta.Status,
+      ta.PredictBeginTime,
+      ta.PredictEndTime,
+      u.CnName As CreateUserName,
+      ta.CreateTime,
+      (
+        SELECT
+          STUFF(
+            (
+              Select
+                ',' + u.CnName
+              From
+                Pm_TaskRelevanceUser tra
+                Left Join Sys_Users u On tra.UserId = u.Id
+              Where
+                tra.Isdel = 0
+                And tra.TAId = ta.Id FOR XML PATH('')
+            ),
+            1,
+            1,
+            ''
+          )
+      ) As Participant,
+      (
+        SELECT
+          STUFF(
+            (
+              Select
+                ',' + u.CnName
+              From
+                Pm_TaskRelevanceUser tra
+                Left Join Sys_Users u On tra.UserId = u.Id
+              Where
+                tra.Isdel = 0
+                And tra.TAId = ta.Id
+                And tra.TaskStatus = 4 FOR XML PATH('')
+            ),
+            1,
+            1,
+            ''
+          )
+      ) As Consummator
+    From
+      Pm_TaskAllocation ta
+      Left Join Sys_Department d On ta.DepId = d.Id
+      Left Join Grp_DelegationInfo di On ta.DiId = di.Id
+      Left Join Sys_Users u On ta.CreateUserId = u.Id
+    Where
+      ta.IsDel = 0 {0}
+  ) As temp
+WHERE
+  [CreateUserName] like '%{1}%'
+  OR [Participant] like '%{2}%' ", whereSql, currUserName, currUserName);
+
+            RefAsync<int> total = 0;
             var _view = await _taskAllocationRep._sqlSugar.SqlQueryable<TaskListView>(pageSql).ToPageListAsync(dto.PageIndex, dto.PageSize, total);//ToPageAsync
 
             List<int> taskIds = new List<int>();

+ 2 - 2
OASystem/OASystem.Domain/Entities/PersonnelModule/Pm_TaskJobRelevancy.cs

@@ -10,7 +10,7 @@ namespace OASystem.Domain.Entities.PersonnelModule
     /// 任务分配
     /// 任务权限(userId 控制userId)
     /// </summary>
-    public class Pm_TaskJobRelevancy:EntityBase
+    public class Pm_TaskJobRelevancy : EntityBase
     {
         /// <summary>
         /// 主职位为四川泛美公司的总经理/副总经理/经理/主管 UserId
@@ -18,7 +18,7 @@ namespace OASystem.Domain.Entities.PersonnelModule
         public int PrimaryUserId { get; set; }
 
         /// <summary>
-        /// 其他公司或四川泛美公司的职位 UserId
+        /// 其他公司或四川泛美公司的职位 UserId
         /// </summary>
         public int SubUserId { get; set; }
 

+ 14 - 13
OASystem/OASystem.Infrastructure/Repositories/PersonnelModule/TaskAllocationRepository.cs

@@ -71,31 +71,32 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
                 //任务名称
                 List<string?> _TaskNameInfos = new List<string?>();
                 _TaskNameInfos = _sqlSugar.Queryable<Pm_TaskAllocation, Pm_TaskRelevanceUser>((ta, tau) => new JoinQueryInfos(JoinType.Left, ta.Id == tau.TAId))
-                                          .Where((ta, tau) => ta.IsDel == 0 && tau.IsDel == 0)
-                                          .Where((ta, tau) => ta.CreateUserId == userId || tau.UserId == userId)
-                                          .Select(ta => ta.TaskName).ToList()
-                                          .Distinct().ToList();
+                    .Where((ta, tau) => ta.IsDel == 0 && tau.IsDel == 0)
+                    .Where((ta, tau) => ta.CreateUserId == userId || tau.UserId == userId)
+                    .Select(ta => ta.TaskName).ToList()
+                    .Distinct().ToList();
 
                 //团组名称
                 List<ValueInfo> _GroupNameInfos = new List<ValueInfo>();
-                _GroupNameInfos = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0)
-                                                                           .OrderByDescending(it => it.CreateTime)
-                                                                           .Select(it => new ValueInfo { Id = it.Id, Name = it.TeamName })
-                                                                           .ToList();
+                _GroupNameInfos = _sqlSugar.Queryable<Grp_DelegationInfo>()
+                    .Where(it => it.IsDel == 0)
+                    .OrderByDescending(it => it.CreateTime)
+                    .Select(it => new ValueInfo { Id = it.Id, Name = it.TeamName })
+                    .ToList();
                 _GroupNameInfos.Insert(0, new ValueInfo() { Id = -1, Name = "未选择" });
                 //部门名称
                 ValueInfo _DepartmentNameInfos = new ValueInfo();
                 _DepartmentNameInfos = _sqlSugar.Queryable<Sys_Users, Sys_Department>((u, d) => new JoinQueryInfos(JoinType.Left, u.DepId == d.Id))
-                                                .Select((u, d) => new ValueInfo() { Id = d.Id, Name = d.DepName })
-                                                .First();
+                    .Select((u, d) => new ValueInfo() { Id = d.Id, Name = d.DepName })
+                    .First();
 
                 //执行任务人员信息 1 公司总经理/副总 可分配 所有人的任务 2 公司 部门经理/主管 可分配 部门下的人员的任务
                 List<ExecuteTaskUserInfo> _ExecuteTaskUserInfos = new List<ExecuteTaskUserInfo>();
                 TaskOperationAudit _TaskOpertionAudit = new TaskOperationAudit();
-                List<Pm_TaskJobRelevancy> taskAudits = new List<Pm_TaskJobRelevancy>();
-                taskAudits = _sqlSugar.Queryable<Pm_TaskJobRelevancy>().Where(it => it.IsDel == 0 && it.PrimaryUserId == userId).ToList();
 
-                if (taskAudits.Count > 0)
+                var taskAudits = _sqlSugar.Queryable<Pm_TaskJobRelevancy>().Where(it => it.IsDel == 0 && it.PrimaryUserId == userId).ToList();
+
+                if (taskAudits.Any())
                 {
                     //任务权限
                     _TaskOpertionAudit.TaskAddAudit = 1;