From dcf43da6ca36a4476139305174a6bd6dd48630d0 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 05 九月 2025 14:34:22 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs | 86 ++++++++++++++++++++++++++++++++++-------- 1 files changed, 69 insertions(+), 17 deletions(-) diff --git a/FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs b/FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs index aae3fb4..086493e 100644 --- a/FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/TaskCheckReceives/Commands/TaskCheckReceiveCommandHandler.cs @@ -20,7 +20,8 @@ IRepository<TaskInfoUserSubmit> repTaskInfoUserSubmit ) : IRequestHandler<SubmitCheckReceiveTaskCommand, Guid>, - IRequestHandler<CheckReceiveTaskCommand, Guid> + IRequestHandler<CheckReceiveTaskCommand, Guid>, + IRequestHandler<ExportTaskCheckReceiveTaskUsersCommand, string> { private readonly IRepository<TaskInfo> repTaskInfo = repTaskInfo; private readonly IRepository<TaskInfoUser> repTaskInfoUser = repTaskInfoUser; @@ -39,14 +40,20 @@ var logier = JwtUtils.GetCurrentLogier(); var task = await repTaskInfo.AsQueryable() .FirstOrDefaultAsync(it => it.Id == request.TaskInfoId, cancellationToken); - if (task == null) throw Oops.Oh(EnumErrorCodeType.s404, "璇ヤ换鍔�"); - if (task.Status == EnumTaskStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s510, "璇ヤ换鍔℃殏鏈畨鎺掍汉鍛�"); - if (task.ReleaseStatus == EnumTaskReleaseStatus.Stopped) throw Oops.Oh(EnumErrorCodeType.s510, "璇ヤ换鍔″凡缁撴潫"); - if (!(task.BeginTime <= now && now <= task.EndTime)) throw Oops.Oh(EnumErrorCodeType.s510, "璇ヤ换鍔″凡缁撴潫"); + if (task == null) throw Oops.Oh(EnumErrorCodeType.s404, "浠诲姟"); + if (task.Status != EnumTaskStatus.Complete) throw Oops.Oh(EnumErrorCodeType.s510, "浠诲姟鏆傛湭瀹夋帓浜哄憳"); + if (task.ReleaseStatus != EnumTaskReleaseStatus.InProcess) throw Oops.Oh(EnumErrorCodeType.s510, "浠诲姟宸茬粨鏉�"); + if (request.Date.Date > now.Date) + throw Oops.Oh(EnumErrorCodeType.s510, "浠诲姟鏃堕棿鏈紑濮�"); + if (task.BeginTime > request.Date.Date) + throw Oops.Oh(EnumErrorCodeType.s510, "浠诲姟鏈紑濮�"); + if (request.Date.Date > task.EndTime) + throw Oops.Oh(EnumErrorCodeType.s510, "浠诲姟宸茬粨鏉�"); var taskUser = await repTaskInfoUser.AsQueryable() .FirstOrDefaultAsync(it => it.TaskInfoId == task.Id && it.EnterpriseEmployee.UserId == logier.Id, cancellationToken); - if (taskUser == null) throw Oops.Oh(EnumErrorCodeType.s404, "璇ユ姤鍚嶄俊鎭�"); - if (taskUser.ArrangeStatus == EnumTaskUserArrangeStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s510, "鏆傛湭瀹夋帓璇ヤ换鍔�"); + if (taskUser == null) throw Oops.Oh(EnumErrorCodeType.s404, "鎶ュ悕淇℃伅"); + //if (taskUser.HireStatus != EnumTaskUserHireStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s510, "鎮ㄦ湭褰曠敤"); + if (taskUser.ArrangeStatus != EnumTaskUserArrangeStatus.Complete) throw Oops.Oh(EnumErrorCodeType.s510, "鏆傛湭瀹夋帓"); task.CheckReceiveStatus = EnumTaskCheckReceiveStatus.WaitCheckReceive; task.LastSubmitTime = now; taskUser.CheckReceiveStatus = EnumTaskCheckReceiveStatus.WaitCheckReceive; @@ -59,7 +66,7 @@ submit = new TaskInfoUserSubmit { TaskInfoUserId = taskUser.Id, - Date = now.Date, + Date = request.Date, Files = request.Files.Select(it => new TaskInfoUserSubmitFile { File = it @@ -101,17 +108,16 @@ var submit = await repTaskInfoUserSubmit.AsQueryable() .Include(it => it.Files) .FirstOrDefaultAsync(it => it.Id == request.Id); - if (submit == null) throw Oops.Oh(EnumErrorCodeType.s404, "璇ユ彁浜や俊鎭�"); + if (submit == null) throw Oops.Oh(EnumErrorCodeType.s404, "鎻愪氦淇℃伅"); var taskUser = await repTaskInfoUser.AsQueryable() .FirstOrDefaultAsync(it => it.Id == submit.TaskInfoUserId, cancellationToken); - if (taskUser == null) throw Oops.Oh(EnumErrorCodeType.s404, "璇ョ伒宸ヤ俊鎭�"); - if (taskUser.ArrangeStatus == EnumTaskUserArrangeStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s510, "鏈畨鎺掕鐏靛伐"); + if (taskUser == null) throw Oops.Oh(EnumErrorCodeType.s404, "鐏靛伐淇℃伅"); + //if (taskUser.HireStatus != EnumTaskUserHireStatus.Pass) throw Oops.Oh(EnumErrorCodeType.s510, "鏈綍鐢ㄧ伒宸�"); + if (taskUser.ArrangeStatus != EnumTaskUserArrangeStatus.Complete) throw Oops.Oh(EnumErrorCodeType.s510, "鏈畨鎺掔伒宸�"); var task = await repTaskInfo.AsQueryable() .FirstOrDefaultAsync(it => it.Id == taskUser.TaskInfoId && it.EnterpriseId == logier.EnterpriseId, cancellationToken); - if (task == null) throw Oops.Oh(EnumErrorCodeType.s404, "璇ヤ换鍔�"); - if (task.Status == EnumTaskStatus.Wait) throw Oops.Oh(EnumErrorCodeType.s510, "璇ヤ换鍔℃殏鏈畨鎺掍汉鍛�"); - if (task.ReleaseStatus == EnumTaskReleaseStatus.Stopped) throw Oops.Oh(EnumErrorCodeType.s510, "璇ヤ换鍔″凡缁撴潫"); - if (!(task.BeginTime <= now && now <= task.EndTime)) throw Oops.Oh(EnumErrorCodeType.s510, "璇ヤ换鍔″凡缁撴潫"); + if (task == null) throw Oops.Oh(EnumErrorCodeType.s404, "浠诲姟"); + if (task.Status != EnumTaskStatus.Complete) throw Oops.Oh(EnumErrorCodeType.s510, "浠诲姟鏆傛湭瀹夋帓浜哄憳"); if (request.CheckReceiveStatus != EnumTaskUserSubmitCheckReceiveStatus.Success && request.CheckReceiveStatus != EnumTaskUserSubmitCheckReceiveStatus.Fail) throw Oops.Oh(EnumErrorCodeType.s400, "璇烽�夋嫨姝g‘鐨勯獙鏀剁姸鎬�"); @@ -133,7 +139,7 @@ || it.CheckReceiveStatus == EnumTaskUserSubmitCheckReceiveStatus.Fail)) .Select(it => it.Date) .ToListAsync(); - taskUserSubmitDates.Add(now.Date); + taskUserSubmitDates.Add(submit.Date); if (dates.All(taskUserSubmitDates.Contains)) { taskUser.CheckReceiveStatus = EnumTaskCheckReceiveStatus.Completed; @@ -142,17 +148,63 @@ var taskUserCheckReceiveStatuses = await repTaskInfoUser.AsQueryable().AsNoTracking() .Where(it => it.TaskInfoId == task.Id - && it.Id != taskUser.Id) + && it.Id != taskUser.Id + && it.ArrangeStatus == EnumTaskUserArrangeStatus.Complete) .Select(it => it.CheckReceiveStatus) .ToListAsync(); taskUserCheckReceiveStatuses.Add(EnumTaskCheckReceiveStatus.Completed); if (taskUserCheckReceiveStatuses.All(it => it == EnumTaskCheckReceiveStatus.Completed)) { task.CheckReceiveStatus = EnumTaskCheckReceiveStatus.Completed; + task.CheckReceiveTime = DateTime.Now; + task.SettlementOrderStatus = EnumTaskSettlementOrderStatus.Wait; } await repTaskInfoUserSubmit.UpdateAsync(submit); return submit.Id; } + + /// <summary> + /// 瀵煎嚭楠屾敹璁板綍 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<string> Handle(ExportTaskCheckReceiveTaskUsersCommand request, CancellationToken cancellationToken) + { + var models = await repTaskInfoUserSubmit.AsQueryable().AsNoTracking() + .Where(it => it.TaskInfoUser.TaskInfoId == request.Id) + .Select(it => new ExportTaskCheckReceiveTaskUsersCommandModel + { + UserId = it.TaskInfoUser.EnterpriseEmployee.UserId!.Value, + Name = it.TaskInfoUser.EnterpriseEmployee.User.Name, + Identity = it.TaskInfoUser.EnterpriseEmployee.User.Identity, + ContactPhoneNumber = it.TaskInfoUser.EnterpriseEmployee.User.ContactPhoneNumber, + CheckReceiveStatus = it.CheckReceiveStatus, + CheckReceiveTime = it.CheckReceiveTime, + }) + .ToListAsync(cancellationToken); + if (models.IsNotNull()) + { + var userIds = models.DistinctSelect(it => it.UserId); + var bankCards = await repTaskInfoUserSubmit.Change<UserBankCard>().AsQueryable().AsNoTracking() + .Where(it => userIds.Contains(it.UserId)) + .Select(it => new + { + it.UserId, + it.Bank, + it.Code + }) + .ToListAsync(cancellationToken); + foreach (var model in models) + { + var bankCard = bankCards.FirstOrDefault(it => it.UserId == model.UserId); + model.Bank = bankCard?.Bank; + model.Code = bankCard?.Code; + } + } + var url = await models.ExportExcelToOSS("TaskCheckReceive/Export", "楠屾敹璁板綍.xlsx"); + return url; + } } } -- Gitblit v1.9.1