Kaynağa Gözat

++部分任务excel下载

yuanrf 3 gün önce
ebeveyn
işleme
8a4980d26c

+ 157 - 1
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -1121,7 +1121,7 @@ namespace OASystem.API.Controllers
             {
                 item.RowNumber = index;
                 //设置参与人
-                var userNames = allTaskRelevanceUsers.Where(x => x.TAId == item.Id) .Select(x => x.CnName).ToList();
+                var userNames = allTaskRelevanceUsers.Where(x => x.TAId == item.Id).Select(x => x.CnName).ToList();
                 item.Participant = string.Join("、", userNames);
 
                 //设置任务确认权限
@@ -1417,6 +1417,162 @@ namespace OASystem.API.Controllers
 
             return Ok(JsonView(false, _view.Msg));
         }
+
+        /// <summary>
+        /// 任务分配 文件下载
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        public IActionResult PostTaskAllFileDownload(TaskAllocationAllFileDownloadDto dto)
+        {
+            if (!DateTime.TryParse(dto.StartTime, out DateTime startTime))
+            {
+                return Ok(JsonView(false, "开始时间格式错误!"));
+            }
+            if (!DateTime.TryParse(dto.EndTime, out DateTime endTime))
+            {
+                return Ok(JsonView(false, "结束时间格式错误!"));
+            }
+            if (startTime > endTime)
+            {
+                return Ok(JsonView(false, "开始时间不能大于结束时间!"));
+            }
+
+            var user_entity = _sqlSugar.Queryable<Sys_Users>()
+            .LeftJoin<Sys_Department>((x, y) => x.DepId == y.Id && y.IsDel == 0)
+            .Where((x, y) => x.IsDel == 0)
+            .Select((x, y) => new { x.Id, x.CnName, y.DepName })
+            .First(x => x.Id == dto.UserId);
+
+            if (user_entity == null)
+            {
+                return Ok(JsonView(false, "用户不存在!"));
+            }
+
+            var jw = JsonView(false);
+            jw.Data = new { };
+
+            string sql = string.Format(@"Select 
+                      *
+					From
+					(
+					    Select
+					      ta.Id,
+					      ta.TaskName,
+					      ta.TaskContent,
+					      s.Name as 'TaskTypeName',
+					      ta.TaskPriority,
+					      d.DepName,
+					      di.TeamName,
+					    CASE [ta].[Status]
+					        WHEN 0 THEN '未开始'
+					        WHEN 1 THEN '进行中'
+					        WHEN 2 THEN '待审核'
+					        WHEN 3 THEN '未完成'
+					        WHEN 4 THEN '已完成'
+					        WHEN 5 THEN '任务终止'
+					        ELSE '未知状态'
+					    END AS [Status],
+					      ta.PredictBeginTime,
+					      ta.PredictEndTime,
+					      ta.CreateUserId,
+					      u.CnName As CreateUserName,
+					      ta.CreateTime,
+					      ta.Remark,
+					      ta.OverTime,
+					      (
+					        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					      
+					    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
+					      left join Sys_SetData s on ta.TaskType = s.Id 
+					    Where
+					      ta.IsDel = 0 
+                           and ta.PredictEndTime  >= '{2}'
+                           and ta.PredictEndTime  < '{3}'
+					  ) As temp
+					WHERE
+					  [CreateUserName] like '%{0}%'
+					  OR [Participant] like '%{1}%'", user_entity.CnName, user_entity.CnName, startTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss"));
+
+            var _view = _sqlSugar
+                    .SqlQueryable<TaskFileDown>(sql)
+                    .ToList();
+
+            if (_view == null || _view.Count == 0)
+            {
+                jw.Msg = "暂无任务数据不存在!";
+                return Ok(jw);
+            }
+
+            var TaskTypeGroup = _view.GroupBy(x => x.TaskTypeName).ToList();
+            var filePath = AppSettingsHelper.Get("ExcelBasePath") + "Template/部门任务模版.xlsx";
+            var title = $"{(startTime.Year == endTime.Year ? $"{startTime.ToString("yyyy")}年" : string.Empty)}{user_entity.DepName}工作记录汇总({startTime.ToString("yyyy年MM月dd日")} - {endTime.ToString("yyyy年MM月dd日")})";
+            WorkbookDesigner designer = new()
+            {
+                Workbook = new Workbook(filePath)
+            };
+
+            foreach (var item in TaskTypeGroup)
+            {
+                var list = item
+                    .OrderBy(x => x.NameCount)
+                    .ThenBy(x => x.Participant)
+                    .ThenBy(x => x.PredictBeginTime)
+                    .ToList();
+                list.ForEach(x => x.RowNumber = list.IndexOf(x) + 1);
+
+                if (item.Key == "本职工作")
+                {
+                    designer.SetDataSource("bzgz", list);
+                }
+                else if (item.Key == "协助其他部门事项")
+                {
+                    designer.SetDataSource("xzqtr", list);
+                }
+                else if (item.Key == "其他")
+                {
+                    designer.SetDataSource("qt", list);
+                }
+            }
+
+            designer.SetDataSource("title", title);
+            designer.Process();
+
+            string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + user_entity.DepName + "_工作记录汇总.xlsx";
+            string path = AppSettingsHelper.Get("ExcelBasePath") + "DepTaskFileDown/";
+
+            if (!Directory.Exists(path))
+            {
+                Directory.CreateDirectory(path);
+            }
+
+            designer.Workbook.Save(path + fileName);
+            string excelPath = AppSettingsHelper.Get("ExcelFtpPath") + "DepTaskFileDown/" + fileName;
+            string url = AppSettingsHelper.Get("ExcelBaseUrl");
+            string fileUrl = url + excelPath;
+            return Ok(JsonView(true, "操作成功!", new { fileUrl }));
+        }
+
         #endregion
 
         #region 团组状态通知

+ 9 - 2
OASystem/OASystem.Domain/Dtos/PersonnelModule/TaskAllocationDto.cs

@@ -172,6 +172,13 @@ namespace OASystem.Domain.Dtos.PersonnelModule
 
     }
 
+    public class TaskAllocationAllFileDownloadDto
+    {
+        public string StartTime { get; set; }
+        public string EndTime { get; set; }
+        public int UserId { get; set; }
+    }
+
     /// <summary>
     /// 任务分配 
     /// 任务状态更改
@@ -218,7 +225,7 @@ namespace OASystem.Domain.Dtos.PersonnelModule
     /// 任务分配 
     /// 任务状态更改
     /// </summary>
-    public class TaskAllocationSetUnFinishedStatusDto: TaskAllocationStatusDto
+    public class TaskAllocationSetUnFinishedStatusDto : TaskAllocationStatusDto
     {
         /// <summary>
         /// 未完成原因
@@ -243,6 +250,6 @@ namespace OASystem.Domain.Dtos.PersonnelModule
 
     public class ScoreInfo
     {
-        
+
     }
 }

+ 8 - 0
OASystem/OASystem.Domain/ViewModels/PersonnelModule/TaskAllocationView.cs

@@ -205,6 +205,14 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
         public string Remark { get; set; }
     }
 
+    public class TaskFileDown : TaskListView
+    {
+        public new string Status { get; set; }
+
+        public int NameCount { get { return Participant?.Split(',').Length ?? 1; } }
+    }
+
+
     /// <summary>
     /// 详情
     /// </summary>