| | |
| | | using FlexJobApi.Core; |
| | | using Aop.Api.Domain; |
| | | using FlexJobApi.Core; |
| | | using Furion.DatabaseAccessor; |
| | | using Furion.DistributedIDGenerator; |
| | | using Furion.FriendlyException; |
| | | using Mapster; |
| | | using MediatR; |
| | |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using TaskInfo = FlexJobApi.Core.TaskInfo; |
| | | |
| | | namespace FlexJobApi.FlexJobServer.Application |
| | | { |
| | |
| | | public class TaskCheckReceiveQueryHandler( |
| | | IRepository<TaskInfo> repTaskInfo, |
| | | IRepository<TaskInfoUser> repTaskInfoUser, |
| | | IRepository<User> repUser, |
| | | IRepository<TaskInfoUserSubmit> repTaskInfoUserSubmit) : |
| | | IRequestHandler<GetCheckReceiveTasksQuery, GetCheckReceiveTasksQueryResult>, |
| | | IRequestHandler<GetCheckReceiveTaskQuery, GetCheckReceiveTaskQueryResult>, |
| | |
| | | /// <returns></returns> |
| | | public async Task<GetCheckReceiveTasksQueryResult> Handle(GetCheckReceiveTasksQuery request, CancellationToken cancellationToken) |
| | | { |
| | | var now = DateTime.Now; |
| | | var logier = JwtUtils.GetCurrentLogier(); |
| | | var q = repTaskInfo.AsQueryable().AsNoTracking() |
| | | .OrderBy(it => it.CreatedTime) |
| | | .AsQueryable(); |
| | | IQueryable<TaskInfo> q = repTaskInfo.AsQueryable().AsNoTracking() |
| | | .OrderBy(it => it.CreatedTime); |
| | | |
| | | if (logier.Type == EnumUserType.Personal) |
| | | { |
| | | q = q.Where(it => it.TaskInfoUsers.Any(tu => tu.EnterpriseEmployee.UserId == logier.Id)); |
| | | q = q.Where(it => it.TaskInfoUsers.Any(tu => |
| | | tu.EnterpriseEmployee.UserId == logier.Id |
| | | && tu.ArrangeStatus == EnumTaskUserArrangeStatus.Complete)); |
| | | } |
| | | else if (logier.Type == EnumUserType.Enterprise) |
| | | { |
| | | q = q.Where(it => it.EnterpriseId == logier.EnterpriseId); |
| | | q = q.Where(it => |
| | | it.EnterpriseId == logier.EnterpriseId |
| | | && it.Status == EnumTaskStatus.Complete); |
| | | } |
| | | if (request.Keywords.IsNotNull()) |
| | | { |
| | |
| | | } |
| | | q = q.Where(it => |
| | | (logier.Type == EnumUserType.Enterprise ? it.EnterpriseId == logier.EnterpriseId : true) |
| | | && it.BeginTime.Date <= request.Date.Value && request.Date.Value <= it.EndTime.Date |
| | | && it.TaskInfoUsers.Any(tu => |
| | | (logier.Type == EnumUserType.Personal ? tu.EnterpriseEmployee.UserId == logier.Id : true) |
| | | && (request.CheckReceiveStatus == EnumTaskCheckReceiveStatus.WaitSubmit |
| | |
| | | q = q.Where(it => it.CheckReceiveStatus == request.CheckReceiveStatus); |
| | | } |
| | | } |
| | | var s = q.ProjectToType<GetCheckReceiveTasksQueryResultItem>(); |
| | | var s = q.Select(it => new GetCheckReceiveTasksQueryResultItem |
| | | { |
| | | Id = it.Id, |
| | | Name = it.Name, |
| | | Code = it.Code, |
| | | BillingMethod = it.BillingMethod, |
| | | ServiceFee = it.ServiceFee, |
| | | SettlementCycle = it.SettlementCycle, |
| | | CreatedTime = it.CreatedTime, |
| | | BeginTime = it.BeginTime, |
| | | EndTime = it.EndTime, |
| | | AddressName = it.AddressName, |
| | | LastCheckReceiveTime = it.LastCheckReceiveTime, |
| | | CheckReceiveStatus = logier.Type == EnumUserType.Enterprise && logier.ClientType == EnumClientType.Wxmp && request.Date.HasValue |
| | | ? request.CheckReceiveStatus |
| | | : it.CheckReceiveStatus, |
| | | }); |
| | | return await request.PageModel.GetPagedListAsync<GetCheckReceiveTasksQueryResult, GetCheckReceiveTasksQueryResultItem>(s, cancellationToken); |
| | | } |
| | | |
| | |
| | | ContactPhoneNumber = it.EnterpriseEmployee.User.ContactPhoneNumber, |
| | | IsReal = it.EnterpriseEmployee.User.IsReal, |
| | | RealMethod = it.EnterpriseEmployee.User.RealMethod, |
| | | CheckReceiveStatus = it.CheckReceiveStatus, |
| | | CheckReceiveStatus = logier.Type == EnumUserType.Enterprise && logier.ClientType == EnumClientType.Wxmp && request.Date.HasValue |
| | | ? it.Submits |
| | | .Where(s => s.Date == request.Date) |
| | | .Select(s => (s.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.WaitSubmit |
| | | ? EnumTaskCheckReceiveStatus.WaitSubmit |
| | | : s.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.WaitCheckReceive |
| | | ? EnumTaskCheckReceiveStatus.WaitCheckReceive |
| | | : EnumTaskCheckReceiveStatus.Completed) as EnumTaskCheckReceiveStatus?) |
| | | .FirstOrDefault() ?? EnumTaskCheckReceiveStatus.WaitSubmit |
| | | : it.CheckReceiveStatus, |
| | | LastSubmitTime = it.LastSubmitTime, |
| | | }); |
| | | var result = await request.PageModel.GetPagedListAsync<GetCheckReceiveTaskQueryResult, GetCheckReceiveTaskQueryResultItem>(s, cancellationToken); |
| | | result.ObjectData = await repTaskInfo.AsQueryable().AsNoTracking() |
| | | .Where(it => it.Id == request.TaskInfoId) |
| | | .GetDetail<TaskInfo, GetCheckReceiveTaskQueryResultObjectData>(); |
| | | .Where(it => it.Id == request.TaskInfoId) |
| | | .GetDetail<TaskInfo, GetCheckReceiveTaskQueryResultObjectData>(); |
| | | return result; |
| | | } |
| | | |
| | |
| | | var logier = JwtUtils.GetCurrentLogier(); |
| | | var q = repTaskInfoUserSubmit.AsQueryable().AsNoTracking() |
| | | .OrderByDescending(it => it.CreatedTime) |
| | | .Where(it => it.TaskInfoUserId == request.Id); |
| | | .AsQueryable(); |
| | | if (logier.Type == EnumUserType.Personal) |
| | | { |
| | | if (request.TaskInfoId == null) throw Oops.Oh(EnumErrorCodeType.s400, "请选择任务"); |
| | | q = q.Where(it => it.TaskInfoUser.TaskInfoId == request.TaskInfoId && it.TaskInfoUser.EnterpriseEmployee.UserId == logier.Id); |
| | | } |
| | | else |
| | | { |
| | | if (request.Id == null) throw Oops.Oh(EnumErrorCodeType.s400, "请选择灵工"); |
| | | q = q.Where(it => it.TaskInfoUserId == request.Id); |
| | | } |
| | | var s = q.Select(it => new GetCheckReceiveTaskUserSubmitsQueryResultItem |
| | | { |
| | | Id = it.Id, |
| | | Date = it.Date, |
| | | CreatedTime = it.CreatedTime, |
| | | Files = it.Files.Select(f => f.File).ToList(), |
| | | CheckReceiveStatus = it.CheckReceiveStatus, |
| | | CheckReceiveTime = it.CheckReceiveTime, |
| | | }); |
| | | var result = await request.PageModel.GetPagedListAsync<GetCheckReceiveTaskUserSubmitsQueryResult, GetCheckReceiveTaskUserSubmitsQueryResultItem>(s, cancellationToken); |
| | | result.ObjectData = await repTaskInfoUser.AsQueryable().AsNoTracking() |
| | | .Where(it => it.Id == request.Id) |
| | | .GetDetail<TaskInfoUser, GetCheckReceiveTaskUserSubmitsQueryResultObjectData>(); |
| | | result.ObjectData.EnterpriseEmployeeUser.IsBindBankCard = await repTaskInfo.Change<UserBankCard>().AsQueryable().AsNoTracking() |
| | | .AnyAsync(it => it.UserId == result.ObjectData.EnterpriseEmployeeUser.Id); |
| | | if (request.Id.HasValue) |
| | | { |
| | | result.ObjectData = await repTaskInfoUser.AsQueryable().AsNoTracking() |
| | | .Where(it => it.Id == request.Id) |
| | | .GetDetail<TaskInfoUser, GetCheckReceiveTaskUserSubmitsQueryResultObjectData>(); |
| | | } |
| | | else if (request.TaskInfoId.HasValue) |
| | | { |
| | | result.ObjectData = await repTaskInfoUser.AsQueryable().AsNoTracking() |
| | | .Where(it => it.TaskInfoId == request.TaskInfoId) |
| | | .GetDetail<TaskInfoUser, GetCheckReceiveTaskUserSubmitsQueryResultObjectData>(); |
| | | } |
| | | if (result.ObjectData != null) |
| | | { |
| | | result.ObjectData.EnterpriseEmployeeUser.IsBindBankCard = await repTaskInfo.Change<UserBankCard>() |
| | | .AsQueryable().AsNoTracking() |
| | | .AnyAsync(it => it.UserId == result.ObjectData.EnterpriseEmployeeUser.Id); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | |
| | | /// <param name="request"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public Task<GetCheckReceiveTaskUserSubmitQueryResult> Handle(GetCheckReceiveTaskUserSubmitQuery request, CancellationToken cancellationToken) |
| | | public async Task<GetCheckReceiveTaskUserSubmitQueryResult> Handle(GetCheckReceiveTaskUserSubmitQuery request, CancellationToken cancellationToken) |
| | | { |
| | | var q = repTaskInfoUserSubmit.AsQueryable().AsNoTracking(); |
| | | var logier = JwtUtils.GetCurrentLogier(); |
| | | TaskInfoUserSubmit? entity = null; |
| | | var q = repTaskInfoUserSubmit.AsQueryable(); |
| | | if (request.SubmitId.HasValue) |
| | | { |
| | | q = q.Where(it => it.Id == request.SubmitId.Value); |
| | | entity = await q.FirstOrDefaultAsync(); |
| | | if (entity == null) |
| | | { |
| | | throw Oops.Oh(EnumErrorCodeType.s404, "提交信息"); |
| | | } |
| | | } |
| | | else if (request.Date.HasValue && request.TaskInfoId.HasValue) |
| | | { |
| | | q = q.Where(it => it.Date.Date == request.Date.Value.Date && it.TaskInfoUser.TaskInfoId == request.TaskInfoId.Value); |
| | | var taskUser = await repTaskInfoUser.AsQueryable().AsNoTracking() |
| | | .Where(it => |
| | | it.EnterpriseEmployee.UserId == logier.Id |
| | | && it.TaskInfoId == request.TaskInfoId) |
| | | .FirstOrDefaultAsync(); |
| | | if (taskUser == null) throw Oops.Oh(EnumErrorCodeType.s404, "任务"); |
| | | q = q.Where(it => |
| | | it.Date.Date == request.Date.Value.Date |
| | | && it.TaskInfoUserId == taskUser.Id); |
| | | entity = await q.FirstOrDefaultAsync(); |
| | | if (entity == null) |
| | | { |
| | | entity = new TaskInfoUserSubmit |
| | | { |
| | | Id = IDGen.NextID(), |
| | | TaskInfoUserId = taskUser.Id, |
| | | Date = request.Date.Value.Date, |
| | | CheckReceiveStatus = EnumTaskUserSubmitCheckReceiveStatus.WaitSubmit, |
| | | CreatedTime = DateTime.Now |
| | | }; |
| | | await repTaskInfoUserSubmit.InsertAsync(entity); |
| | | } |
| | | } |
| | | else if (request.Date.HasValue && request.TaskInfoUserId.HasValue) |
| | | { |
| | | q = q.Where(it => it.Date.Date == request.Date.Value.Date && it.TaskInfoUserId == request.TaskInfoUserId.Value); |
| | | q = q.Where(it => |
| | | it.Date.Date == request.Date.Value.Date |
| | | && it.TaskInfoUserId == request.TaskInfoUserId.Value); |
| | | entity = await q.FirstOrDefaultAsync(); |
| | | if (entity == null) |
| | | { |
| | | entity = new TaskInfoUserSubmit |
| | | { |
| | | Id = IDGen.NextID(), |
| | | TaskInfoUserId = request.TaskInfoUserId.Value, |
| | | Date = request.Date.Value.Date, |
| | | CheckReceiveStatus = EnumTaskUserSubmitCheckReceiveStatus.WaitSubmit, |
| | | CreatedTime = DateTime.Now |
| | | }; |
| | | await repTaskInfoUserSubmit.InsertAsync(entity); |
| | | } |
| | | } |
| | | return q.GetDetail<TaskInfoUserSubmit, GetCheckReceiveTaskUserSubmitQueryResult>(); |
| | | if (entity == null) |
| | | { |
| | | throw Oops.Oh(EnumErrorCodeType.s404, "提交信息"); |
| | | } |
| | | |
| | | var model = new GetCheckReceiveTaskUserSubmitQueryResult |
| | | { |
| | | Id = entity.Id, |
| | | Date = entity.Date, |
| | | CreatedTime = entity.CreatedTime, |
| | | }; |
| | | model.TaskInfoUserEnterpriseEmployeeUser = await repUser.AsQueryable().AsNoTracking() |
| | | .Where(it => it.EnterpriseEmployees.Any(ee => ee.TaskInfoUsers.Any(tu => tu.Id == entity.TaskInfoUserId))) |
| | | .ProjectToType<GetCheckReceiveTaskUserSubmitsQueryResultObjectDataEnterpriseEmployeeUser>() |
| | | .FirstOrDefaultAsync(); |
| | | model.Files = await repTaskInfoUserSubmit.Change<TaskInfoUserSubmitFile>().AsQueryable().AsNoTracking() |
| | | .Where(it => it.SubmitId == model.Id) |
| | | .Select(it => it.File) |
| | | .ToListAsync(); |
| | | return model; |
| | | } |
| | | } |
| | | } |