浏览代码

任务状态
消息通知 完成度 50%

leiy 1 年之前
父节点
当前提交
87f33a4704

+ 1 - 1
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -816,7 +816,7 @@ namespace OASystem.API.Controllers
 
                         bool rst = await _message.AddMsg(new MessageDto()
                         {
-                            Type = 5,
+                            Type = MessgeTypeEnum.GroupVisaProgressUpdate,
                             IssuerId = dto.publisher,
                             Title = title,
                             Content = content,

+ 198 - 0
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -7,6 +7,7 @@ using OASystem.Domain.Entities.PersonnelModule;
 using OASystem.Domain.ViewModels.PersonnelModule;
 using OASystem.Domain.ViewModels.QiYeWeChat;
 using OASystem.Infrastructure.Repositories.PersonnelModule;
+using StackExchange.Redis;
 using System.Collections.Generic;
 using System.Data;
 using System.Diagnostics;
@@ -993,6 +994,93 @@ namespace OASystem.API.Controllers
             }
         }
 
+        /// <summary>
+        /// 任务分配 
+        /// page
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostTaskAllocationPage(TaskAllocationPageDto _dto)
+        {
+            try
+            {
+                #region  参数验证
+                if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));
+                if (_dto.PageId < 1) _dto.PageId = 172; //任务指派Id
+
+                PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
+
+                #region 页面操作权限验证
+                pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);
+
+                if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!"));
+                #endregion
+
+                #endregion
+
+                string whereSql = "";
+                #region 分页参数处理
+                //类型处理
+                if (_dto.Type == 0) whereSql = "";
+                else if (_dto.Type == 1) //1 由我指派
+                {
+                    whereSql = string.Format(@" And ta.CreateUserId = {0}",_dto.UserId); 
+                }
+                else if (_dto.Type == 2)// 2 指派给我
+                {
+                    whereSql = string.Format(@" And (Select COUNT(1) As PeopleNumber From Pm_TaskRelevanceUser Where IsDel = 0 And ta.Id = TAId And UserId = {0}) > 0", _dto.UserId);
+                }
+                //状态 -1 全部 0 未开始 1 进行中 2 待审核 3 未完成 4 已完成
+                if (_dto.Status == -1) //全部
+                {
+                    whereSql += "";
+                }
+                else
+                {
+                    whereSql += string.Format(@" And ta.Status = {0} ", _dto.Status);
+                }
+
+                //任务名称
+                if (!string.IsNullOrEmpty(_dto.TaskName))
+                {
+                    whereSql += string.Format(@" And ta.TaskName Like '%{0}%' ", _dto.TaskName);
+                }
+
+                #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 _view = await _taskAllocationRep._sqlSugar.SqlQueryable<TaskListView>(pageSql).ToPageListAsync(_dto.PageIndex, _dto.PageSize, total);//ToPageAsync
+
+                return Ok(JsonView(true, "查询成功!", _view, total));
+            }
+            catch (Exception ex)
+            {
+
+                return Ok(JsonView(false, ex.Message));
+            }
+        }
+
         /// <summary>
         /// 任务分配
         /// 详情
@@ -1080,6 +1168,116 @@ namespace OASystem.API.Controllers
                 return Ok(JsonView(false, ex.Message));
             }
         }
+
+
+        /// <summary>
+        /// 任务分配
+        /// 设置知晓状态
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostTaskAllocationSetHaveStatus(TaskAllocationStatusDto _dto)
+        {
+            try
+            {
+
+                var _view = await _taskAllocationRep._TaskSetHaveStatus(_dto.SubId);
+                if (_view.Code == 0)
+                {
+                    return Ok(JsonView(true, "操作成功!"));
+                }
+
+                return Ok(JsonView(false, _view.Msg));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, ex.Message));
+            }
+        }
+
+
+        /// <summary>
+        /// 任务分配
+        /// 确认任务是否可操作完成
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostTaskAllocationIsConfirmCompletion(TaskAllocationScoreDto _dto)
+        {
+            try
+            {
+                #region  参数验证
+                if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));
+                if (_dto.PageId < 1) _dto.PageId = 172; //任务指派Id
+
+                PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
+
+                #region 页面操作权限验证
+                pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);
+
+                if (pageFunAuthView.EditAuth == 0) return Ok(JsonView(false, "您没有编辑权限!"));
+
+                #endregion
+
+                #endregion
+
+                var _view = await _taskAllocationRep._TaskConfirmCompletion(_dto.PortType, _dto.Id);
+                if (_view.Code == 0)
+                {
+                    return Ok(JsonView(true, "操作成功!"));
+                }
+
+                return Ok(JsonView(false, _view.Msg));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, ex.Message));
+            }
+        }
+
+
+        /// <summary>
+        /// 任务分配
+        /// 任务确认完成
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> PostTaskAllocationConfirmCompletion(TaskAllocationConfirmCompletionDto _dto)
+        {
+            try
+            {
+                #region  参数验证
+                if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));
+                if (_dto.PageId < 1) _dto.PageId = 172; //任务指派Id
+
+                PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();
+
+                #region 页面操作权限验证
+                pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);
+
+                if (pageFunAuthView.EditAuth == 0) return Ok(JsonView(false, "您没有编辑权限!"));
+
+                #endregion
+
+                #endregion
+
+                var _view = await _taskAllocationRep._TaskConfirmCompletion(_dto.PortType,_dto.Id);
+                if (_view.Code == 0)
+                {
+                    return Ok(JsonView(true, "操作成功!"));
+                }
+
+                return Ok(JsonView(false, _view.Msg));
+            }
+            catch (Exception ex)
+            {
+                return Ok(JsonView(false, ex.Message));
+            }
+        }
+
         #endregion
     }
 }

+ 3 - 2
OASystem/OASystem.Api/OAMethodLib/Quartz/Business/DeleReminderMessage.cs

@@ -2,8 +2,10 @@
 using OASystem.Domain.Dtos.Business;
 using OASystem.Domain.Entities.Business;
 using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.Entities.PersonnelModule;
 using OASystem.Domain.ViewModels.Groups;
 using OASystem.Infrastructure.Repositories.Groups;
+using OASystem.Infrastructure.Repositories.PersonnelModule;
 
 namespace OASystem.API.OAMethodLib.Quartz.Business
 {
@@ -77,10 +79,9 @@ namespace OASystem.API.OAMethodLib.Quartz.Business
                         _entity.PostResult = postResult;
                         _grpDeleRep._sqlSugar.Insertable<Bus_MsgPostInfo>(_entity);
                     }
-
-
                 }
             }
         }
+
     }
 }

+ 185 - 0
OASystem/OASystem.Api/OAMethodLib/Quartz/Business/TaskAssignment.cs

@@ -0,0 +1,185 @@
+using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.Entities.PersonnelModule;
+using OASystem.Infrastructure.Repositories.PersonnelModule;
+using ILogger = Microsoft.Extensions.Logging.ILogger;
+
+namespace OASystem.API.OAMethodLib.Quartz.Business
+{
+    /// <summary>
+    /// 任务指派
+    /// 定时任务
+    /// </summary>
+    public static class TaskAssignment
+    {
+        private readonly static TaskAllocationRepository _taskAllocationRep = AutofacIocManager.Instance.GetService<TaskAllocationRepository>();
+        private readonly static ILogger _logger;
+        /// <summary>
+        /// 定时任务更改状态
+        /// 每天下午六点定时更新
+        /// </summary>
+        public static async void PostTaskUpdateStatus()
+        {
+            var data = await _taskAllocationRep._sqlSugar
+                                               .Queryable<Pm_TaskAllocation>()
+                                               .Where(it => it.IsDel == 0 &&
+                                                            !string.IsNullOrEmpty(it.PredictEndTime) &&
+                                                            Convert.ToDateTime(it.PredictEndTime) >= DateTime.Now
+                                                     )
+                                               .ToListAsync();
+            if (data.Count > 0)
+            {
+                //处理要变更状态的员工
+                List<int> primaryIds = new List<int>();
+                primaryIds = data.Select(it => it.Id).ToList();
+                var subData = await _taskAllocationRep._sqlSugar
+                                                      .Queryable<Pm_TaskRelevanceUser>()
+                                                      .Where(it => it.IsDel == 0 &&
+                                                                   primaryIds.Contains(it.TAId) &&
+                                                                   it.TaskStatus <= (int)TaskEnum.UnderWay
+                                                            )
+                                                      .ToListAsync();
+                foreach (var item in subData)
+                {
+                    item.OverTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm-ss");
+                    item.TaskStatus = (int)TaskEnum.UnFinished;
+                    item.Cause = string.Format(@"任务没有提交完成或者超时,由系统设置任务未完成");
+                }
+                if (subData.Count > 0)
+                {
+                    var updateStatus = await _taskAllocationRep._sqlSugar
+                                                               .Updateable(subData)
+                                                               .WhereColumns(it => it.Id)
+                                                               .ExecuteCommandAsync();
+
+                }
+            }
+        }
+
+
+        /// <summary>
+        /// 任务消息推送
+        /// 每天下午2点定时推送
+        /// </summary>
+        public static async void PostTaskNewsFeed()
+        {
+            var data = _taskAllocationRep._sqlSugar
+                                         .Queryable<Pm_TaskAllocation>()
+                                         .Where(it => it.IsDel == 0 &&
+                                                      !string.IsNullOrEmpty(it.PredictEndTime) &&
+                                                      Convert.ToDateTime(it.PredictEndTime).ToString("yyyy-MM-dd").Equals(DateTime.Now.ToString("yyyy-MM-dd"))
+                                               )
+                                         .ToList();
+            if (data.Count > 0)
+            {
+                //处理要任务提醒的员工
+                List<int> primaryIds = new List<int>();
+                primaryIds = data.Select(it => it.Id).ToList();
+                var subData = _taskAllocationRep._sqlSugar
+                                                .Queryable<Pm_TaskRelevanceUser>()
+                                                .Where(it => it.IsDel == 0 &&
+                                                             primaryIds.Contains(it.TAId) &&
+                                                             it.TaskStatus <= (int)TaskEnum.UnderWay
+                                                      )
+                                                .ToList();
+
+                _taskAllocationRep._sqlSugar.BeginTran();
+                var depDatas = _taskAllocationRep._sqlSugar.Queryable<Sys_Department>().Where(it => it.IsDel == 0).ToList();
+                var groupDatas = _taskAllocationRep._sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0).ToList();
+                var userDatas = _taskAllocationRep._sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0).ToList();
+
+                foreach (var item in data)
+                {
+                    string depName = string.Empty;
+                    string groupName = string.Empty;
+                    var depData = depDatas.Where(it => it.Id == item.DepId).FirstOrDefault();
+                    if (depData != null) { depName = depData.DepName; }
+                    if (item.DiId == -1) { groupName = "其他"; }
+                    else
+                    {
+                        var groupData = groupDatas.Where(it => it.Id == item.DiId).FirstOrDefault();
+                        if (groupData != null) { groupName = groupData.TeamName; }
+                    }
+
+                    var subData1 = subData.Where(it => it.TAId == item.Id).ToList();
+
+                    foreach (var subItem in subData1)
+                    {
+                        string realityStartTime = string.Empty;
+                        string userName = string.Empty;
+                        if (!string.IsNullOrEmpty(subItem.BeginTime))
+                        {
+                            realityStartTime = subItem.BeginTime;
+                        }
+                        else
+                        {
+                            if (subItem.TaskStatus == -1) realityStartTime = "未开始";
+                            else if (subItem.TaskStatus == 0) realityStartTime = "已知晓";
+                        }
+
+                        var userData = userDatas.Where(it => it.Id == subItem.UserId).FirstOrDefault();
+                        if (userData != null) { userName = userData.CnName; }
+                        string msgContent = string.Format(@"任务归属:{0}<br/>
+                                                            归属团组:{1}<br/>
+                                                            预计起止时间:{2} 至 {3}<br/>
+                                                            实际开始时间:{4}<br/>
+                                                            任务优先级:{5}<br/>
+                                                            任务参与者:{6}<br/>
+                                                            任务内容:{7}", depName, groupName, item.PredictBeginTime, item.PredictEndTime,
+                                                            realityStartTime, item.TaskPriority, userName, item.TaskContent);
+                        Sys_Message _Message = new Sys_Message()
+                        {
+                            Type = MessgeTypeEnum.TaskProgressUpdate,
+                            Title = item.TaskName,
+                            IssuerId = 4, //管理员
+                            Content = msgContent,
+                            ReleaseTime = DateTime.Now,
+                            CreateUserId = 4,
+                            CreateTime = DateTime.Now,
+                            DeleteTime = "1990-01-01 00:00:00.000",
+                            DiId = item.DiId,
+                        };
+                        var msgAddId = _taskAllocationRep._sqlSugar.Insertable<Sys_Message>(_Message).ExecuteReturnIdentity();
+                        if (msgAddId < 0)
+                        {
+                            _taskAllocationRep._sqlSugar.RollbackTran();
+                            _logger.LogError("任务通知消息推送失败!");
+                            return;
+                        }
+
+                        Sys_MessageReadAuth _MessageReadAuth = new Sys_MessageReadAuth()
+                        {
+                            MsgId = msgAddId,
+                            ReadableUId = subItem.UserId,
+                            IsRead = 0,
+                            ReadTime = Convert.ToDateTime("1990-01-01 00:00:00.000"),
+                            CreateUserId = 4,
+                            CreateTime = DateTime.Now,
+                            DeleteTime = "1990-01-01 00:00:00.000"
+                        };
+
+                        var msgAuthAddId = _taskAllocationRep._sqlSugar.Insertable<Sys_MessageReadAuth>(_MessageReadAuth).ExecuteReturnIdentity();
+                        if (msgAuthAddId < 0)
+                        {
+                            _taskAllocationRep._sqlSugar.RollbackTran();
+                            _logger.LogError("任务通知消息推送失败!");
+                            return;
+                        }
+                    }
+                }
+                _taskAllocationRep._sqlSugar.CommitTran();
+            }
+
+
+            //查询需要提示的消息 Singlr
+            string sql = string.Format(@"Select smra.Id,su.CnName As Issuer,sm.ReleaseTime,sm.Title,
+										 sm.Content,smra.ReadableUId,smra.IsRead,smra.CreateTime
+										 From Sys_Message sm
+										 Left Join Sys_MessageReadAuth smra On sm.Id = smra.MsgId
+										 Left Join Sys_Users su On sm.IssuerId = su.Id
+										 Where sm.IsDel = 0 And sm.Type = 6 And smra.IsRead = 0
+										 Order By smra.ReadableUId,smra.CreateTime Desc");
+            var datas = _taskAllocationRep._sqlSugar.SqlQueryable<MessageReadAuthPushView>(sql).ToList();
+
+        }
+    }
+}

+ 30 - 0
OASystem/OASystem.Api/OAMethodLib/Quartz/Jobs/TaskJob.cs

@@ -0,0 +1,30 @@
+using OASystem.API.OAMethodLib.Quartz.Business;
+using Quartz;
+using QuzrtzJob.Factory;
+
+namespace OASystem.API.OAMethodLib.Quartz.Jobs
+{
+    /// <summary>
+    /// 任务指派
+    /// 定时器
+    /// </summary>
+    public class TaskJob:IJob
+    {
+        private readonly ILogger<TaskJob> _logger;
+
+        public TaskJob(ILogger<TaskJob> logger)
+        {
+            _logger = logger;
+        }
+
+        public Task Execute(IJobExecutionContext context)
+        {
+            _logger.LogInformation("调用任务状态变更Function " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+
+            //在此处编写任务业务代码
+            TaskAssignment.PostTaskUpdateStatus();
+
+            return Task.CompletedTask;
+        }
+    }
+}

+ 29 - 0
OASystem/OASystem.Api/OAMethodLib/Quartz/Jobs/TaskNewsFeedJob.cs

@@ -0,0 +1,29 @@
+using OASystem.API.OAMethodLib.Quartz.Business;
+using Quartz;
+
+namespace OASystem.API.OAMethodLib.Quartz.Jobs
+{
+    /// <summary>
+    /// 任务消息推送
+    /// 每天下午两点推送
+    /// </summary>
+    public class TaskNewsFeedJob : IJob
+    {
+        private readonly ILogger<TaskNewsFeedJob> _logger;
+
+        public TaskNewsFeedJob(ILogger<TaskNewsFeedJob> logger)
+        {
+            _logger = logger;
+        }
+
+        public Task Execute(IJobExecutionContext context)
+        {
+            _logger.LogInformation("调用任务消息推送 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+
+            //在此处编写任务业务代码
+            TaskAssignment.PostTaskNewsFeed();
+
+            return Task.CompletedTask;
+        }
+    }
+}

+ 21 - 3
OASystem/OASystem.Api/OAMethodLib/Quartz/QuartzFactory.cs

@@ -1,4 +1,5 @@
 using OASystem.API.OAMethodLib.Quartz;
+using OASystem.API.OAMethodLib.Quartz.Jobs;
 using Quartz;
 using Quartz.Spi;
 
@@ -19,21 +20,38 @@ namespace QuzrtzJob.Factory
         {
             //2、通过调度工厂获得调度器
             _scheduler = await _schedulerFactory.GetScheduler();
+
             //这里是指定容器仓库
             _scheduler.JobFactory = _IOCjobFactory;
             //3、开启调度器
             await _scheduler.Start();
+
             //4、创建一个触发器
             var trigger = TriggerBuilder.Create()
                             //.WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever())//每两秒执行一次
                             .WithCronSchedule("0 15 9 * * ?")
                             .Build();
-            //5、创建任务
-            var jobDetail = JobBuilder.Create<ALiYunPostMessageJob>()
-                            .WithIdentity("job", "group")
+            
+            var taskTrigger = TriggerBuilder.Create()
+                            //.WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever())//每两秒执行一次
+                            .WithCronSchedule("0 0 18 * * ?")
+                            .Build();
+            var taskMsgTrigger = TriggerBuilder.Create()
+                            .WithSimpleSchedule(x => x.WithIntervalInSeconds(60).RepeatForever())//每两秒执行一次
+                            //.WithCronSchedule("0 0 14 * * ?")
                             .Build();
+
+            //5、创建任务
+            var jobDetail = JobBuilder.Create<ALiYunPostMessageJob>().WithIdentity("job1", "group") .Build();
+            var taskJobDetail = JobBuilder.Create<TaskJob>().WithIdentity("job2", "group").Build();
+            var taskMsgJobDetail = JobBuilder.Create<TaskNewsFeedJob>().WithIdentity("job3", "group").Build();
+
             //6、将触发器和任务器绑定到调度器中
             await _scheduler.ScheduleJob(jobDetail, trigger);
+            await _scheduler.ScheduleJob(taskJobDetail, taskTrigger);
+            await _scheduler.ScheduleJob(taskMsgJobDetail, taskMsgTrigger);
+
+
             return await Task.FromResult("将触发器和任务器绑定到调度器中完成");
         }
     }

+ 1 - 0
OASystem/OASystem.Api/OASystem.API.csproj

@@ -32,6 +32,7 @@
     <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.11" />
     <PackageReference Include="QRCoder" Version="1.4.1" />
     <PackageReference Include="Quartz" Version="3.6.2" />
+    <PackageReference Include="QuartzUI.Extension.AspNetCore" Version="1.1.8" />
     <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
     <PackageReference Include="SqlSugarCore" Version="5.1.3.35" />
     <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />

+ 7 - 0
OASystem/OASystem.Api/Program.cs

@@ -15,6 +15,7 @@ using Quartz;
 using QuzrtzJob.Factory;
 using System.Runtime.CompilerServices;
 using OASystem.API.OAMethodLib.QiYeWeChatAPI;
+using OASystem.API.OAMethodLib.Quartz.Jobs;
 
 var builder = WebApplication.CreateBuilder(args);
 var basePath = AppContext.BaseDirectory;
@@ -270,6 +271,8 @@ builder.Services.AddHttpClient("PublicQiYeWeChatApi", c => c.BaseAddress = new U
 builder.Services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();
 builder.Services.AddSingleton<QuartzFactory>();
 builder.Services.AddSingleton<ALiYunPostMessageJob>();
+builder.Services.AddSingleton<TaskJob>();
+builder.Services.AddSingleton<TaskNewsFeedJob>();
 //# new business
 builder.Services.AddSingleton<IJobFactory, IOCJobFactory>();
 
@@ -291,6 +294,10 @@ app.UseAuthorization();  // 
 app.UseCors("Cors");  //Cors
 //app.UseCors("AllowSpecificOrigin");  //Cors
 
+#region MyRegion
+
+#endregion
+
 #region ÆôÓÃswaggerUI
 if (AppSettingsHelper.Get("UseSwagger").ToBool())
 {

+ 0 - 3
OASystem/OASystem.Api/appsettings.json

@@ -137,7 +137,6 @@
       "PageIdDatas": [ //页面Ids
         28
       ]
-
     },
     {
       "CTableId": 77, //CtableId  行程
@@ -148,7 +147,6 @@
       "CTableId": 79, //CtableId 车/导游地接
       "PageIdDatas": [ //页面Id
       ]
-
     },
     {
       "CTableId": 80, //CtableId  签证
@@ -188,5 +186,4 @@
       ]
     }
   ]
-
 }

+ 73 - 0
OASystem/OASystem.Domain/Dtos/PersonnelModule/TaskAllocationDto.cs

@@ -22,6 +22,31 @@ namespace OASystem.Domain.Dtos.PersonnelModule
 
     }
 
+    /// <summary>
+    /// 任务分配 Page
+    /// </summary>
+    public class TaskAllocationPageDto : UserPageFuncDtoBase
+    {
+        public int PageIndex { get; set; } = 1;
+        public int PageSize { get; set; } = 10;
+
+        /// <summary>
+        /// 数据类型
+        /// 0 全部 1 由我指派 2 指派给我
+        /// </summary>
+        public int Type { get; set; }
+
+        /// <summary>
+        /// 任务状态
+        /// </summary>
+        public int Status { get; set; }
+
+        /// <summary>
+        /// 任务名称
+        /// </summary>
+        public string? TaskName { get; set; }
+    }
+
     /// <summary>
     /// 任务分配 Details Dto
     /// </summary>
@@ -92,4 +117,52 @@ namespace OASystem.Domain.Dtos.PersonnelModule
         /// </summary>
         public int IsIntoPerformance { get; set; } = 0;
     }
+
+    /// <summary>
+    /// 任务分配 
+    /// 任务确认完成 
+    /// </summary>
+    public class TaskAllocationConfirmCompletionDto : UserPageFuncDtoBase
+    {
+        /// <summary>
+        /// Id
+        /// </summary>
+        public int Id { get; set; }
+
+    }
+
+    /// <summary>
+    /// 任务分配 
+    /// 任务状态更改
+    /// </summary>
+    public class TaskAllocationStatusDto
+    {
+        /// <summary>
+        /// Id
+        /// </summary>
+        public int SubId { get; set; }
+
+    }
+
+    /// <summary>
+    /// 任务分配 
+    /// 任务评分
+    /// </summary>
+    public class TaskAllocationScoreDto : UserPageFuncDtoBase
+    {
+        /// <summary>
+        /// Id
+        /// </summary>
+        public int Id { get; set; }
+
+        public List<ScoreInfo> ScoreInfos { get; set; }
+
+    }
+
+    public class ScoreInfo
+    {
+        public int Id { get; set; }
+
+        public int Score { get; set; }
+    }
 }

+ 8 - 7
OASystem/OASystem.Domain/Dtos/System/MessageDto.cs

@@ -1,4 +1,5 @@
-using System;
+using OASystem.Domain.Enums;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -13,14 +14,14 @@ namespace OASystem.Domain.Dtos.System
     {
         /// <summary>
         /// 消息类型 
-        /// 0
-        /// 1 公告消息
-        /// 2 团组流程管控消息
-        /// 1 团组业务操作消息
-        /// 2 费用审核消息
+        /// 1 公告通知
+        /// 2 团组流程管控通知
+        /// 1 团组业务操作通知
+        /// 2 团组费用审核消息
         /// 5 团组签证进度通知
+        /// 6 团组任务进度通知
         /// </summary>
-        public int Type { get; set; }
+        public MessgeTypeEnum Type { get; set; }
 
         /// <summary>
         /// 发布人

+ 7 - 0
OASystem/OASystem.Domain/Entities/PersonnelModule/Pm_TaskAllocation.cs

@@ -56,6 +56,13 @@ namespace OASystem.Domain.Entities.PersonnelModule
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(50)")]
         public string? PredictEndTime { get; set; }
 
+        /// <summary>
+        /// 任务状态
+        /// 0 未开始 1 进行中 2 待审核 3 未完成 4 已完成
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int Status { get; set; } = 0;
+
         /// <summary>
         ///  0 否 1 是  
         ///  发布者确认任务是否完成(员工任务完成时间小于或等于有效时间 默认完成)

+ 3 - 2
OASystem/OASystem.Domain/Entities/PersonnelModule/Pm_TaskRelevanceUser.cs

@@ -1,4 +1,5 @@
-using System;
+using OASystem.Domain.Enums;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -44,7 +45,7 @@ namespace OASystem.Domain.Entities.PersonnelModule
         /// -1 未开始 0 已知晓 1 进行中 2 待审核 3 未完成  4 已完成 5任务中止
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "int")]
-        public int TaskStatus { get; set; } = -1;
+        public int TaskStatus { get; set; } = (int)TaskEnum.NotStarted;
 
         /// <summary>
         /// 未完成原因

+ 7 - 4
OASystem/OASystem.Domain/Entities/System/Sys_Message.cs

@@ -1,4 +1,5 @@
-using System;
+using OASystem.Domain.Enums;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -17,11 +18,13 @@ namespace OASystem.Domain.Entities.System
         /// 0 
         /// 1 公告消息
         /// 2 团组流程管控消息
-        /// 1 团组业务操作消息
-        /// 2 费用审核消息
+        /// 3 团组业务操作消息
+        /// 4 费用审核消息
+        /// 5 签证进度更新消息
+        /// 6 任务进度更新消息
         /// </summary>
         [SugarColumn(IsNullable = true,ColumnDataType = "int")]
-        public int Type { get; set; }
+        public MessgeTypeEnum Type { get; set; }
 
         /// <summary>
         /// 发布者用户Id

+ 46 - 0
OASystem/OASystem.Domain/Enums/MessgeTypeEnum.cs

@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Enums
+{
+    /// <summary>
+    /// 消息类型
+    /// </summary>
+    public enum MessgeTypeEnum :int
+    {
+        /// <summary>
+        /// 公告消息
+        /// </summary>
+        [Description("公告消息")]
+        Announcement  =1,
+        /// <summary>
+        /// 团组流程管控消息
+        /// </summary>
+        [Description("团组流程管控消息")]
+        GroupProcessControl = 2,
+        /// <summary>
+        /// 团组业务操作消息
+        /// </summary>
+        [Description("团组业务操作消息")]
+        GroupBusinessOperations = 3,
+        /// <summary>
+        /// 团组费用审核消息
+        /// </summary>
+        [Description("团组费用审核消息")]
+        GroupExpenseAudit = 4,
+        /// <summary>
+        /// 团组签证进度更新消息
+        /// </summary>
+        [Description("团组签证进度更新消息")]
+        GroupVisaProgressUpdate = 5,
+        /// <summary>
+        /// 任务进度更新消息
+        /// </summary>
+        [Description("任务相关消息")]
+        TaskProgressUpdate = 6,
+    }
+}

+ 50 - 0
OASystem/OASystem.Domain/Enums/TaskEnum.cs

@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Enums
+{
+    /// <summary>
+    /// 任务指派状态
+    /// </summary>
+    public enum TaskEnum : int
+    {
+        /// <summary>
+        /// 任务指派状态
+        /// 未开始
+        /// </summary>
+        NotStarted = -1,
+        /// <summary>
+        /// 任务指派状态
+        /// 已知晓
+        /// </summary>
+        HaveKnown = 0,
+        /// <summary>
+        /// 任务指派状态
+        /// 进行中
+        /// </summary>
+        UnderWay = 1,
+        /// <summary>
+        /// 任务指派状态
+        /// 待审核
+        /// </summary>
+        WaitConfirm = 2,
+        /// <summary>
+        /// 任务指派状态
+        /// 未完成
+        /// </summary>
+        UnFinished = 3,
+        /// <summary>
+        /// 任务指派状态
+        /// 已完成
+        /// </summary>
+        Finished = 4,
+        /// <summary>
+        /// 任务指派状态
+        /// 任务终止
+        /// </summary>
+        TaskStop = 5
+    }
+}

+ 83 - 1
OASystem/OASystem.Domain/ViewModels/PersonnelModule/TaskAllocationView.cs

@@ -99,6 +99,83 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
         /// 0 否 1 是
         /// </summary>
         public int TasStopAudit { get; set; } = 0;
+
+        /// <summary>
+        /// 任务确认权限
+        /// 0 否 1 是
+        /// </summary>
+        public int TaskComfirmAudit { get; set; } = 0;
+
+        /// <summary>
+        /// 任务评分权限
+        /// 0 否 1 是
+        /// </summary>
+        public int TaskScoreAudit { get; set; } = 0;
+    }
+
+    /// <summary>
+    /// 任务指派
+    /// Item View
+    /// </summary>
+    public class TaskListView
+    {
+        public int RowNumber { get; set; }
+
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 任务名称
+        /// </summary>
+        public string? TaskName { get; set; }
+
+        /// <summary>
+        /// 任务等级
+        /// </summary>
+        public int TaskPriority { get; set; }
+
+        /// <summary>
+        /// 归属部门
+        /// </summary>
+        public string? DepName { get; set; }
+
+        /// <summary>
+        /// 归属团组
+        /// </summary>
+        public string? TeamName { get; set; }
+
+        /// <summary>
+        /// 任务状态
+        /// </summary>
+        public int Status { get; set; }
+
+        /// <summary>
+        /// 任务发布人
+        /// </summary>
+        public string? CreateUserName { get; set; }
+
+        /// <summary>
+        /// 任务发布时间
+        /// </summary>
+        public DateTime? CreateTime { get; set; }
+
+        /// <summary>
+        /// 预计开始时间
+        /// </summary>
+        public string? PredictBeginTime { get; set; }
+
+        /// <summary>
+        /// 预计开始时间
+        /// </summary>
+        public string? PredictEndTime { get; set; }
+        /// <summary>
+        /// 任务参与者
+        /// </summary>
+        public string? Participant { get; set; }
+
+        /// <summary>
+        /// 任务完成者
+        /// </summary>
+        public string? Consummator { get; set; }
     }
 
     /// <summary>
@@ -110,13 +187,17 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
 
         public int DiId { get; set; }
 
+        //public string TeamName { get; set; }
+
         /// <summary>
         /// 任务部门Id 
-        /// CompanyId = 2 的部门Id 为任务部门Id
         /// </summary>
         public int DepId { get; set; }
 
+        //public string DepName { get; set; }
+
         public int CreateUserId { get; set; }
+        //public string CreateUserName { get; set; }
 
         public DateTime? CreateTime { get; set; }
 
@@ -170,6 +251,7 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
         public int TAId { get; set; }
 
         public int UserId { get; set; }
+        //public string UserName { get; set; }
 
         /// <summary>
         /// 实际开始时间

+ 19 - 0
OASystem/OASystem.Domain/ViewModels/System/MessageReadAuthView.cs

@@ -10,4 +10,23 @@ namespace OASystem.Domain.ViewModels.System
     public class MessageReadAuthView : Sys_MessageReadAuth
     {
     }
+
+    /// <summary>
+    /// 消息推送 View
+    /// </summary>
+    public class MessageReadAuthPushView
+    {
+        public int Id { get; set; }
+
+        public string Issuer { get; set; }
+
+        public string ReleaseTime { get; set; }
+
+        public string Title { get; set; }
+
+        public string Content { get; set; }
+
+        public int ReadableUId { get; set; }
+
+    }
 }

+ 208 - 43
OASystem/OASystem.Infrastructure/Repositories/PersonnelModule/TaskAllocationRepository.cs

@@ -1,4 +1,5 @@
 using AutoMapper;
+using EnumsNET;
 using NPOI.SS.Formula.Functions;
 using OASystem.Domain;
 using OASystem.Domain.Dtos.PersonnelModule;
@@ -45,6 +46,8 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
                 taskOperationAudit.TaskAddAudit = 1;
                 taskOperationAudit.TaskDelAudit = 1;
                 taskOperationAudit.TasStopAudit = 1;
+                taskOperationAudit.TaskComfirmAudit = 1;
+                taskOperationAudit.TaskScoreAudit = 1;
             }
 
             return taskOperationAudit;
@@ -144,42 +147,63 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
 
             if (portType == 1 || portType == 2 || portType == 3)
             {
-                TaskDetailsView _view = await _sqlSugar.Queryable<Pm_TaskAllocation>().Where(it => it.IsDel == 0 && it.Id == Id)
-                                                                                      .Select(it => new TaskDetailsView
-                                                                                  {
-                                                                                      Id = it.Id,
-                                                                                      DiId = it.DiId,
-                                                                                      DepId = it.DepId,
-                                                                                      CreateUserId = it.CreateUserId,
-                                                                                      CreateTime = it.CreateTime,
-                                                                                      TaskName = it.TaskName,
-                                                                                      TaskContent = it.TaskContent,
-                                                                                      TaskPriority = it.TaskPriority,
-                                                                                      PredictBeginTime = it.PredictBeginTime,
-                                                                                      PredictEndTime = it.PredictEndTime,
-                                                                                      IsIntoPerformance = it.IsIntoPerformance,
-                                                                                      Remark = it.Remark,
-                                                                                  })
-                                                                                      .FirstAsync();
-                if (_view != null)
+                //团组名称
+                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.Insert(0, new ValueInfo() { Id = -1, Name = "未选择" });
+                //部门名称
+                List<ValueInfo> _DepartmentNameInfos = new List<ValueInfo>();
+                _DepartmentNameInfos = _sqlSugar.Queryable<Sys_Department>()
+                                                .Select(d => new ValueInfo() { Id = d.Id, Name = d.DepName })
+                                                .ToList();
+                //用户名称
+                List<ValueInfo> _UserNameInfos = new List<ValueInfo>();
+                _UserNameInfos = _sqlSugar.Queryable<Sys_Users>()
+                                                .Select(d => new ValueInfo() { Id = d.Id, Name = d.CnName })
+                                                .ToList();
+
+                TaskDetailsView _view = _sqlSugar.Queryable<Pm_TaskAllocation>()
+                                                 .Where(it => it.IsDel == 0 && it.Id == Id)
+                                                 .Select(it => new TaskDetailsView
+                                                 {
+                                                     Id = it.Id,
+                                                     DiId = it.DiId,
+                                                     DepId = it.DepId,
+                                                     CreateUserId = it.CreateUserId,
+                                                     CreateTime = it.CreateTime,
+                                                     TaskName = it.TaskName,
+                                                     TaskContent = it.TaskContent,
+                                                     TaskPriority = it.TaskPriority,
+                                                     PredictBeginTime = it.PredictBeginTime,
+                                                     PredictEndTime = it.PredictEndTime,
+                                                     IsIntoPerformance = it.IsIntoPerformance,
+                                                     Remark = it.Remark,
+                                                 })
+                                                 .First();
+                if (_view != null)      
                 {
                     List<TaskUserDetailsView> taskUserDetailsViews = new List<TaskUserDetailsView>();
 
-                    taskUserDetailsViews = await _sqlSugar.Queryable<Pm_TaskRelevanceUser>().Where(it => it.IsDel == 0 && it.TAId == _view.Id)
-                                                                                              .Select(it => new TaskUserDetailsView
-                                                                                              {
-                                                                                                  Id = it.Id,
-                                                                                                  TAId = it.TAId,
-                                                                                                  UserId = it.UserId,
-                                                                                                  BeginTime = it.BeginTime,
-                                                                                                  OverTime = it.OverTime,
-                                                                                                  TaskStatus = it.TaskStatus,
-                                                                                                  Cause = it.Cause,
-                                                                                                  Remark = it.Remark
-                                                                                              })
-                                                                                              .ToListAsync();
+                    taskUserDetailsViews = _sqlSugar.Queryable<Pm_TaskRelevanceUser>()
+                                                    .Where(it => it.IsDel == 0 && it.TAId == _view.Id)
+                                                    .Select(it => new TaskUserDetailsView
+                                                    {
+                                                        Id = it.Id,
+                                                        TAId = it.TAId,
+                                                        UserId = it.UserId,
+                                                        BeginTime = it.BeginTime,
+                                                        OverTime = it.OverTime,
+                                                        TaskStatus = it.TaskStatus,
+                                                        Cause = it.Cause,
+                                                        Remark = it.Remark
+                                                    })
+                                                    .ToList();
                     _view.UserTaskInfos = taskUserDetailsViews;
 
+                    _result.Data = _view;
                     _result.Code = 0;
                     _result.Msg = "查询成功!";
                 }
@@ -233,8 +257,8 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
                     }
 
                     _sqlSugar.BeginTran();
-                    
-                    int addId = await _sqlSugar.Insertable< Pm_TaskAllocation >(_TaskAllocation).ExecuteReturnIdentityAsync();
+
+                    int addId = await _sqlSugar.Insertable<Pm_TaskAllocation>(_TaskAllocation).ExecuteReturnIdentityAsync();
                     if (addId < 1)
                     {
                         _sqlSugar.RollbackTran();
@@ -256,15 +280,11 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
                         return _result;
                     }
 
-                    /*
-                     * 发送消息
-                     */
-
                     _result.Code = 0;
                     _result.Msg = "添加成功!";
                     _sqlSugar.CommitTran();
                 }
-                else if(dto.Id > 0) //修改
+                else if (dto.Id > 0) //修改
                 {
                     _sqlSugar.BeginTran();
 
@@ -295,7 +315,7 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
                                                   .Select(it => it.UserId)
                                                   .ToListAsync();
 
-                    if (selectUserId.Count < 1) 
+                    if (selectUserId.Count < 1)
                     {
                         int addSub1 = await _sqlSugar.Insertable<Pm_TaskRelevanceUser>(_TaskRelevanceUsers).ExecuteCommandAsync();
                         if (addSub1 < 1)
@@ -314,8 +334,8 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
                             List<Pm_TaskRelevanceUser> _TaskRelevanceUsers1 = new List<Pm_TaskRelevanceUser>();
 
                             _TaskRelevanceUsers1 = await _sqlSugar.Queryable<Pm_TaskRelevanceUser>()
-                                                                  .Where(it => it.IsDel == 0 && 
-                                                                               it.TAId == _TaskAllocation.Id && 
+                                                                  .Where(it => it.IsDel == 0 &&
+                                                                               it.TAId == _TaskAllocation.Id &&
                                                                                SelectUserIdDiff.Contains(it.UserId))
                                                                   .ToListAsync();
                             if (_TaskRelevanceUsers1.Count > 0)
@@ -327,7 +347,7 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
 
                                 var updateIsDel = await _sqlSugar.Updateable(_TaskRelevanceUsers1)
                                                                  .UpdateColumns(it => it.IsDel)
-                                                                 .WhereColumns(it => new { it.Id,it.TAId})
+                                                                 .WhereColumns(it => new { it.Id, it.TAId })
                                                                  .ExecuteCommandAsync();
                                 if (updateIsDel < 1)
                                 {
@@ -373,7 +393,152 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
                 }
 
 
-                
+
+            }
+            else
+            {
+                _result.Msg = string.Format("请传入有效的PortType参数!");
+            }
+            return _result;
+        }
+
+        /// <summary>
+        /// 设置任务知晓
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public async Task<Result> _TaskSetHaveStatus(int id)
+        {
+            if (id < 1)
+            {
+                _result.Msg = string.Format("请传入有效的Id参数!");
+                return _result;
+            }
+
+            var data1 = await _sqlSugar.Queryable<Pm_TaskRelevanceUser>().Where(it => it.IsDel == 0 && it.Id == id).FirstAsync();
+            if (data1 == null)
+            {
+                _result.Msg = string.Format("该任务不存在!");
+                return _result;
+            }
+            var data2 = await _sqlSugar.Queryable<Pm_TaskAllocation>().Where(it => it.IsDel == 0 && it.Id == data1.TAId).FirstAsync();
+
+            _sqlSugar.BeginTran();
+
+            var update1 = await _sqlSugar.Updateable<Pm_TaskRelevanceUser>()
+                                         .SetColumns(it => it.TaskStatus == (int)TaskEnum.HaveKnown)
+                                         .ExecuteCommandAsync();
+            if (update1 < 1)
+            {
+                _result.Msg = string.Format("操作失败!");
+                return _result;
+            }
+            _result.Msg = string.Format("操作成功!");
+            _result.Code = 0;
+            _sqlSugar.CommitTran();
+
+
+            return _result;
+        }
+
+        /// <summary>
+        /// 任务确认完成
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<Result> _TaskConfirmCompletion(int portType,int id)
+        {
+            if (portType == 1 || portType == 2 || portType == 3)
+            {
+                if (id < 1)
+                {
+                    _result.Msg = string.Format("请传入有效的Id参数!");
+                    return _result;
+                }
+
+                var data = await _sqlSugar.Queryable<Pm_TaskRelevanceUser>()
+                                          .Where(it => it.IsDel == 0 && it.Id == id && it.TaskStatus <= (int)TaskEnum.UnFinished)
+                                          .ToListAsync();
+                if (data.Count > 0)
+                {
+                    _result.Msg = string.Format("本任务参与人员并未全部完成,不可确认任务完成!");
+                    return _result;
+                }
+
+
+                var update = await _sqlSugar.Updateable<Pm_TaskAllocation>()
+                                            .SetColumns(it => it.IsComplete == 1)
+                                            .SetColumns(it => it.Status == 4)
+                                            .Where(it => it.Id == id)
+                                            .ExecuteCommandAsync();
+                if (update > 0)
+                {
+                    _result.Code = 0;
+                    return _result;
+                }
+                else _result.Msg = "确认完成失败!";
+
+
+            }
+            else
+            {
+                _result.Msg = string.Format("请传入有效的PortType参数!");
+            }
+            return _result;
+        }
+
+        /// <summary>
+        /// 任务评分
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<Result> _TaskScore(int portType, int id, List<ScoreInfo> subIds)
+        {
+            if (portType == 1 || portType == 2 || portType == 3)
+            {
+                if (id < 1)
+                {
+                    _result.Msg = string.Format("请传入有效的Id参数!");
+                    return _result;
+                }
+
+                if (subIds.Count < 1)
+                {
+                    _result.Msg = string.Format("请传入有效的SubIds参数!");
+                    return _result;
+                }
+
+                var data = await _sqlSugar.Queryable<Pm_TaskAllocation>()
+                                          .Where(it => it.IsDel == 0 && it.Id == id && it.IsComplete == 1)
+                                          .FirstAsync();
+                if (data == null)
+                {
+                    _result.Msg = string.Format("本任务尚未由发布人确认任务完成,不可评分!");
+                    return _result;
+                }
+
+                List<Pm_TaskRelevanceUser> _TaskRelevanceUsers = new List<Pm_TaskRelevanceUser>();
+                foreach (var item in subIds)
+                {
+                    _TaskRelevanceUsers.Add(new Pm_TaskRelevanceUser()
+                    {
+                        Id = item.Id,
+                        Score = item.Score,
+                    });
+                }
+
+                var update = await _sqlSugar.Updateable<Pm_TaskRelevanceUser>(_TaskRelevanceUsers)
+                                            .UpdateColumns(it => it.Score)
+                                            .WhereColumns(it => it.Id)
+                                            .ExecuteCommandAsync();
+                if (update > 0)
+                {
+                    _result.Code = 0;
+                    return _result;
+                }
+                else _result.Msg = "评分失败!";
+
+
             }
             else
             {