Infrastructure/OpenAuth.App/ServiceApp/InsTaskHallManager/InsTaskHallApp.cs

168 lines
5.8 KiB
C#
Raw Normal View History

2024-11-13 16:38:41 +08:00
using OpenAuth.App.BaseApp.Base;
using OpenAuth.Repository.Domain;
using OpenAuth.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenAuth.App.Interface;
using SqlSugar;
using Microsoft.Extensions.Configuration;
using DocumentFormat.OpenXml.Office2010.ExcelAc;
using DocumentFormat.OpenXml.Office2010.CustomUI;
using NPOI.OpenXmlFormats.Dml;
2024-11-13 17:05:01 +08:00
using Infrastructure.Extensions;
using Moq;
2024-11-14 10:08:17 +08:00
using OpenAuth.App.ServiceApp.InsTaskHallManager.Response;
2024-11-13 16:38:41 +08:00
namespace OpenAuth.App.ServiceApp.InsTaskHallManager
{
public class InsTaskHallApp : SqlSugarBaseApp<InsTask, SugarDbContext>
{
private readonly IConfiguration _configuration;
private readonly ISqlSugarClient client;
public InsTaskHallApp(ISugarUnitOfWork<SugarDbContext> unitWork,
ISimpleClient<InsTask> repository, IAuth auth, ISqlSugarClient sqlSugarClient,
IConfiguration configuration) : base(unitWork, repository, auth)
{
_configuration = configuration;
this.client = sqlSugarClient;
}
/// <summary>
/// 任务区
/// </summary>
/// <returns></returns>
public async Task<List<dynamic>> GetTaskList()
{
var query = await client.Queryable<InsTask>().Where(r => r.IsCompleted == false)
.LeftJoin<InsAishp>((r, p) => r.ShpId == p.Id)
.OrderByDescending(r=>r.CreateTime)
.Select<dynamic>((r, p) => new
{
r.Id,
r.TaskName,
r.State,
p.ShpCount,
CompleteCount = SqlFunc.Subqueryable<InsTaskgroup>().Where(a => a.TaskId == r.Id).Count() > 0 ? SqlFunc.Subqueryable<InsTaskgroup>().Where(a => a.TaskId == r.Id).Sum(r => (r.EndNum - r.BeginNum)) : 0
}).ToListAsync();
return query;
}
2024-11-13 17:05:01 +08:00
/// <summary>
/// 完成任务
/// </summary>
/// <returns></returns>
2024-11-14 10:08:17 +08:00
public async Task<List<InsTaskRes>> GetCompleteTaskList()
2024-11-13 17:05:01 +08:00
{
var query = await client.Queryable<InsTask>().Where(r => r.IsCompleted == true&&r.CompleteTime!=null)
2024-11-14 10:08:17 +08:00
.Select(r => new
2024-11-13 17:05:01 +08:00
{
2024-11-14 10:08:17 +08:00
id=r.Id,
datetime= r.CompleteTime.Value.Date
})
.MergeTable()
.GroupBy(r=>r.datetime)
.Select(r => new InsTaskRes
{
count = SqlFunc.AggregateCount(r.id),
time= r.datetime
})
.MergeTable().OrderBy(r => r.time)
.ToListAsync();
2024-11-13 17:05:01 +08:00
return query;
}
2024-11-13 16:38:41 +08:00
/// <summary>
/// 最佳牛马排行
/// </summary>
/// <param name="flag"></param>
/// <returns></returns>
public async Task<List<dynamic>> GetRankingList(string flag)
{
DateTime begindate = DateTime.Now;
if (flag == "week")
{
DateTime today = DateTime.Today; // 获取今天的日期
int diff = today.DayOfWeek - DayOfWeek.Monday;
// 如果是星期天DayOfWeek.Sunday 的值是 0调整为 -6
if (diff < 0)
{
diff += 7;
}
begindate= today.AddDays(-diff);
}
if (flag == "month")
{
begindate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-01"));
}
var query = await client.Queryable<InsTaskgroup>()
.Where(r => r.IsComplate == true && r.CompleteTime != null)
.WhereIF(flag!="total", r=> r.CompleteTime>=begindate)
.GroupBy(r => r.ReciveUserId)
.Select(r => new
{
count = SqlFunc.AggregateCount(r.Id),
userid=r.ReciveUserId
})
.MergeTable()
.LeftJoin<SysUser>((r, u) => r.userid == u.Id.ToString())
.OrderBy((r, u) => r.count)
.Select<dynamic>((r, u) => new
{
r.count,
r.userid,
u.Name,
u.HeadIcon
})
.ToListAsync();
return query;
}
/// <summary>
/// 在办任务
/// </summary>
/// <returns></returns>
public async Task<List<dynamic>> GetTaskingList()
{
//查询分组内的用户
List<string> userlist = new List<string>();
var groupuser = client.Queryable<SysGroupuser>().ToList();
if(groupuser.Count > 0)
{
userlist=groupuser.Select(r=>r.UserId).Distinct().ToList();
}
//根据在办任务数聚合
var query = client.Queryable<InsTaskgroup>()
.Where(r => r.IsComplate == false)
.GroupBy(r => r.ReciveUserId)
.Select(r => new
{
count = SqlFunc.AggregateCount(r.Id),
userid = r.ReciveUserId
})
.MergeTable();
//关联用户表查询数据
var list=await client.Queryable<SysUser>()
.Where(u=>userlist.Contains(u.Id.ToString()))
.LeftJoin(query ,(u,r) => r.userid == u.Id.ToString())
.OrderBy((u, r) => r.count)
.Select<dynamic>((u, r) => new
{
count=r.count==null?0:r.count,
u.Id,
u.Name,
u.HeadIcon
})
.ToListAsync();
return list;
}
2024-11-13 16:38:41 +08:00
}
}