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

215 lines
7.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
using Infrastructure.Extensions;
using Moq;
using OpenAuth.App.ServiceApp.InsTaskHallManager.Response;
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;
}
/// <summary>
/// 完成任务
/// </summary>
/// <returns></returns>
public async Task<List<InsTaskRes>> GetCompleteTaskList()
{
var query = await client.Queryable<InsTask>().Where(r => r.IsCompleted == true&&r.CompleteTime!=null)
.Select(r => new
{
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();
return query;
}
/// <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())
.OrderByDescending((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())
.OrderByDescending((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;
}
/// <summary>
/// 组排名
/// </summary>
/// <returns></returns>
public async Task<List<dynamic>> GetGroupRankingList()
{
//查询分组内的用户
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 == true)
.GroupBy(r => r.ReciveUserId)
.Select(r => new
{
count = SqlFunc.AggregateCount(r.Id),
userid = r.ReciveUserId
})
.MergeTable();
//关联用户表查询数据
var list = await client.Queryable<SysGroupuser>()
.LeftJoin(query, (u, r) => r.userid == u.UserId)
.GroupBy((u,r)=>u.GroupId)
.Select((u, r) => new
{
count=SqlFunc.AggregateSumNoNull(r.count),
groupid=u.GroupId
})
.MergeTable()
.LeftJoin<SysGroup>((g,t)=>g.groupid==t.Id)
.OrderByDescending((g, t) => g.count)
.Select<dynamic>((g, t) => new
{
count = g.count == null ? 0 : g.count,
t.Name
})
.ToListAsync();
return list;
}
}
}