2024-11-13 16:38:41 +08:00
|
|
|
|
using OpenAuth.App.BaseApp.Base;
|
|
|
|
|
|
using OpenAuth.Repository.Domain;
|
|
|
|
|
|
using OpenAuth.Repository;
|
|
|
|
|
|
using OpenAuth.App.Interface;
|
|
|
|
|
|
using SqlSugar;
|
|
|
|
|
|
using Microsoft.Extensions.Configuration;
|
2024-11-13 17:05:01 +08:00
|
|
|
|
using Infrastructure.Extensions;
|
2024-11-14 10:08:17 +08:00
|
|
|
|
using OpenAuth.App.ServiceApp.InsTaskHallManager.Response;
|
2024-11-15 15:04:00 +08:00
|
|
|
|
using Infrastructure;
|
|
|
|
|
|
using OpenAuth.App.BaseApp;
|
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;
|
2024-11-15 15:04:00 +08:00
|
|
|
|
private ImMsgApp _immsgApp;
|
2024-11-13 16:38:41 +08:00
|
|
|
|
public InsTaskHallApp(ISugarUnitOfWork<SugarDbContext> unitWork,
|
|
|
|
|
|
ISimpleClient<InsTask> repository, IAuth auth, ISqlSugarClient sqlSugarClient,
|
2024-11-15 15:04:00 +08:00
|
|
|
|
IConfiguration configuration, ImMsgApp immsgApp) : base(unitWork, repository, auth)
|
2024-11-13 16:38:41 +08:00
|
|
|
|
{
|
|
|
|
|
|
_configuration = configuration;
|
|
|
|
|
|
this.client = sqlSugarClient;
|
2024-11-15 15:04:00 +08:00
|
|
|
|
_immsgApp = immsgApp;
|
2024-11-13 16:38:41 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <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
|
|
|
|
|
2024-11-14 11:14:37 +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())
|
2024-11-14 16:16:45 +08:00
|
|
|
|
.OrderByDescending((r, u) => r.count)
|
2024-11-14 11:14:37 +08:00
|
|
|
|
.Select<dynamic>((r, u) => new
|
|
|
|
|
|
{
|
|
|
|
|
|
r.count,
|
|
|
|
|
|
r.userid,
|
|
|
|
|
|
u.Name,
|
|
|
|
|
|
u.HeadIcon
|
|
|
|
|
|
})
|
|
|
|
|
|
.ToListAsync();
|
|
|
|
|
|
|
|
|
|
|
|
return query;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-11-14 14:24:13 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 在办任务
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
2024-11-14 15:02:55 +08:00
|
|
|
|
public async Task<List<dynamic>> GetTaskingList()
|
2024-11-14 14:24:13 +08:00
|
|
|
|
{
|
2024-11-14 15:02:55 +08:00
|
|
|
|
//查询分组内的用户
|
|
|
|
|
|
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>()
|
2024-11-14 14:24:13 +08:00
|
|
|
|
.Where(r => r.IsComplate == false)
|
|
|
|
|
|
.GroupBy(r => r.ReciveUserId)
|
|
|
|
|
|
.Select(r => new
|
|
|
|
|
|
{
|
|
|
|
|
|
count = SqlFunc.AggregateCount(r.Id),
|
|
|
|
|
|
userid = r.ReciveUserId
|
|
|
|
|
|
})
|
2024-11-14 15:02:55 +08:00
|
|
|
|
.MergeTable();
|
|
|
|
|
|
//关联用户表查询数据
|
|
|
|
|
|
var list=await client.Queryable<SysUser>()
|
|
|
|
|
|
.Where(u=>userlist.Contains(u.Id.ToString()))
|
|
|
|
|
|
.LeftJoin(query ,(u,r) => r.userid == u.Id.ToString())
|
2024-11-14 16:16:45 +08:00
|
|
|
|
.OrderByDescending((u, r) => r.count)
|
2024-11-14 15:02:55 +08:00
|
|
|
|
.Select<dynamic>((u, r) => new
|
2024-11-14 14:24:13 +08:00
|
|
|
|
{
|
2024-11-14 15:02:55 +08:00
|
|
|
|
count=r.count==null?0:r.count,
|
|
|
|
|
|
u.Id,
|
2024-11-14 14:24:13 +08:00
|
|
|
|
u.Name,
|
|
|
|
|
|
u.HeadIcon
|
|
|
|
|
|
})
|
|
|
|
|
|
.ToListAsync();
|
|
|
|
|
|
|
2024-11-14 15:02:55 +08:00
|
|
|
|
return list;
|
2024-11-14 14:24:13 +08:00
|
|
|
|
}
|
2024-11-14 16:04:48 +08:00
|
|
|
|
|
|
|
|
|
|
/// <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)
|
2024-11-14 16:16:45 +08:00
|
|
|
|
.OrderByDescending((g, t) => g.count)
|
2024-11-14 16:04:48 +08:00
|
|
|
|
.Select<dynamic>((g, t) => new
|
|
|
|
|
|
{
|
|
|
|
|
|
count = g.count == null ? 0 : g.count,
|
|
|
|
|
|
t.Name
|
|
|
|
|
|
})
|
|
|
|
|
|
.ToListAsync();
|
|
|
|
|
|
|
|
|
|
|
|
return list;
|
|
|
|
|
|
}
|
2024-11-15 15:04:00 +08:00
|
|
|
|
|
|
|
|
|
|
#region 领取任务
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 根据任务id获取分组任务
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="id">任务id</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public async Task<List<InsTaskgroup>> GetgrouptaskList(string id)
|
|
|
|
|
|
{
|
2024-11-20 10:04:32 +08:00
|
|
|
|
var query = await client.Queryable<InsTaskgroup>().Where(r=>r.ReciveUserId==null)
|
2024-11-15 15:04:00 +08:00
|
|
|
|
.Where(r => r.TaskId==id)
|
|
|
|
|
|
.ToListAsync();
|
|
|
|
|
|
|
|
|
|
|
|
return query;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 领取任务
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="groupIds">分组任务id</param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
/// <exception cref="Exception"></exception>
|
|
|
|
|
|
public async Task<Response<bool>> ReciveTask(List<string> groupIds)
|
|
|
|
|
|
{
|
|
|
|
|
|
var userId = _auth.GetUserId();
|
|
|
|
|
|
if (string.IsNullOrEmpty(userId))
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new Exception("登录失效");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
using(var uwo = UnitWork.CreateContext())
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (var item in groupIds)
|
|
|
|
|
|
{
|
|
|
|
|
|
var taskGroup = await client.Queryable<InsTaskgroup>().Where(t => t.Id == item).FirstAsync();
|
|
|
|
|
|
if (taskGroup != null&&taskGroup.ReciveUserId==null)
|
|
|
|
|
|
{
|
|
|
|
|
|
var task = await client.Queryable<InsTask>().Where(t => t.Id == taskGroup.TaskId).FirstAsync();
|
|
|
|
|
|
if(task != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
//查询并判断任务是否领完
|
|
|
|
|
|
var groups = await client.Queryable<InsTaskgroup>()
|
|
|
|
|
|
.Where(t => t.TaskId == task.Id && string.IsNullOrEmpty(t.ReciveUserId))
|
|
|
|
|
|
.ToListAsync();
|
|
|
|
|
|
short state = 1;
|
|
|
|
|
|
if (groups.Count == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
state=2;
|
|
|
|
|
|
}
|
|
|
|
|
|
//更新任务状态
|
|
|
|
|
|
await uwo.InsTask.UpdateSetColumnsTrueAsync(r => new InsTask
|
|
|
|
|
|
{
|
|
|
|
|
|
State = state
|
|
|
|
|
|
}, r => r.Id == task.Id);
|
|
|
|
|
|
}
|
|
|
|
|
|
//更新分组任务信息
|
|
|
|
|
|
await uwo.InsTaskgroup.UpdateSetColumnsTrueAsync(r => new InsTaskgroup
|
|
|
|
|
|
{
|
|
|
|
|
|
ReciveTime=DateTime.Now,
|
|
|
|
|
|
ReciveUserId=userId,
|
|
|
|
|
|
}, r => r.Id == taskGroup.Id);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new Exception("任务已被领取");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var flag = uwo.Commit();
|
|
|
|
|
|
var content = new
|
|
|
|
|
|
{
|
|
|
|
|
|
queryid = groupIds,
|
|
|
|
|
|
message = "有新接手的任务"
|
|
|
|
|
|
};
|
|
|
|
|
|
var contents = Json.ToJson(content);
|
|
|
|
|
|
if (flag)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
await _immsgApp.SendMsgAll("InsTask", contents, groupIds[0]);
|
|
|
|
|
|
return new Response<bool>
|
|
|
|
|
|
{
|
|
|
|
|
|
Result = flag,
|
|
|
|
|
|
Message = "领取成功"
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
catch
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool>
|
|
|
|
|
|
{
|
|
|
|
|
|
Result = flag,
|
|
|
|
|
|
Message = "领取成功,推送失败"
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
return new Response<bool>
|
|
|
|
|
|
{
|
|
|
|
|
|
Result = flag,
|
|
|
|
|
|
Message = "领取失败"
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
2024-11-13 16:38:41 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|