From 1482f950f2b30835a268ae9e6c6bd817ba47a684 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期四, 11 九月 2025 11:13:02 +0800
Subject: [PATCH] feat:开发
---
FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs | 183 +++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 174 insertions(+), 9 deletions(-)
diff --git a/FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs b/FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs
index 3390865..2cdd47e 100644
--- a/FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs
+++ b/FlexJobApi.FlexJobServer.Application/TaskUsers/Queries/TaskUserQueryHandler.cs
@@ -1,6 +1,9 @@
-锘縰sing FlexJobApi.Core;
+锘縰sing Aop.Api.Domain;
+using FlexJobApi.Core;
using Furion.DatabaseAccessor;
+using Furion.DataValidation;
using Furion.FriendlyException;
+using Mapster;
using MediatR;
using Microsoft.EntityFrameworkCore;
using System;
@@ -8,6 +11,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using TaskInfo = FlexJobApi.Core.TaskInfo;
namespace FlexJobApi.FlexJobServer.Application
{
@@ -15,12 +19,16 @@
/// 浠诲姟浜哄憳鏌ヨ澶勭悊鍣�
/// </summary>
public class TaskUserQueryHandler(
- IRepository<TaskInfoUser> rep) :
+ IRepository<TaskInfoUser> rep,
+ IRepository<TaskInfo> repTaskInfo
+ ) :
IRequestHandler<GetTaskUsersQuery, GetTaskUsersQueryResult>,
IRequestHandler<GetArrangeTaskUsersQuery, GetArrangeTaskUsersQueryResult>,
- IRequestHandler<GetTaskUserHireStatusQuery, GetTaskUserHireStatusQueryResult>
+ IRequestHandler<GetTaskUserHireStatusQuery, GetTaskUserHireStatusQueryResult>,
+ IRequestHandler<GetSettlementTaskUsersQuery, GetSettlementTaskUsersQueryResult>
{
private readonly IRepository<TaskInfoUser> rep = rep;
+ private readonly IRepository<TaskInfo> repTaskInfo = repTaskInfo;
/// <summary>
/// B绔煡璇㈠簲鑱樻姤鍚嶅垎椤靛垪琛ㄤ俊鎭�
@@ -145,14 +153,171 @@
{
q = q.Where(it => it.EnterpriseEmployee.UserId == request.UserId);
}
- var model = await q
- .Select(it => new GetTaskUserHireStatusQueryResult
- {
- HireStatus = it.HireStatus
- })
- .FirstOrDefaultAsync(cancellationToken);
+ var model = await q
+ .Select(it => new GetTaskUserHireStatusQueryResult
+ {
+ HireStatus = it.HireStatus
+ })
+ .FirstOrDefaultAsync(cancellationToken);
if (model == null) throw Oops.Oh(EnumErrorCodeType.s404, "鎶ュ悕淇℃伅");
return model;
}
+
+ /// <summary>
+ /// 鏌ヨ缁撶畻鍚嶅崟鍒嗛〉鍒楄〃鏁版嵁
+ /// </summary>
+ /// <param name="request"></param>
+ /// <param name="cancellationToken"></param>
+ /// <returns></returns>
+ public async Task<GetSettlementTaskUsersQueryResult> Handle(GetSettlementTaskUsersQuery request, CancellationToken cancellationToken)
+ {
+ var logier = JwtUtils.GetCurrentLogier();
+ var list = new GetSettlementTaskUsersQueryResult();
+
+ list.Detail = await TaskInfoRepository.GetQueryable(repTaskInfo, true, logier)
+ .Where(it => it.Id == request.TaskInfoId)
+ .GetDetail<TaskInfo, GetSettlementTaskQueryResult>();
+
+ var q = rep.AsQueryable().AsNoTracking()
+ .Where(it => it.TaskInfoId == request.TaskInfoId);
+ list.Data = q
+ .Select(it => new GetSettlementTaskUsersQueryResultItem
+ {
+ Id = it.Id,
+ Name = it.EnterpriseEmployee.Name,
+ Identity = it.EnterpriseEmployee.Identity,
+ ContactPhoneNumber = it.EnterpriseEmployee.ContactPhoneNumber,
+ CheckReceiveStatus = it.CheckReceiveStatus,
+ Bank = it.Bank,
+ BankBranch = it.BankBranch,
+ ReceiveAccount = it.ReceiveAccount,
+ SettlementAmount = it.SettlementAmount,
+ ActualSettlementAmount = it.ActualSettlementAmount,
+ SettlementTime = it.SettlementTime,
+ SettlementStatus = it.SettlementStatus,
+ })
+ .ToList();
+
+ var successList = new List<GetSettlementTaskUsersQueryResultExcelRow>();
+ if (request.SettlementOrderUrl.IsNotNull())
+ {
+ var models = await ExcelUtils.ImportExcelFromOSS<GetSettlementTaskUsersQueryResultExcelRow>(request.SettlementOrderUrl);
+ foreach (var model in models)
+ {
+ var errors = new List<string>();
+ if (model.Name.IsNull())
+ {
+ errors.Add("璇峰~鍐欏鍚�");
+ }
+ if (model.Identity.IsNull())
+ {
+ errors.Add("璇峰~鍐欒韩浠借瘉鍙�");
+ }
+ else if (!model.Identity.TryValidate(EnumValidationTypes.ValiIdentity).IsValid)
+ {
+ errors.Add("韬唤璇佸彿鏍煎紡涓嶆纭�");
+ }
+ else if (successList.Any(it => it.Identity == model.Identity))
+ {
+ errors.Add("韬唤璇佸彿閲嶅");
+ }
+ if (model.Bank.IsNull())
+ {
+ errors.Add("璇峰~鍐欐墍灞為摱琛�");
+ }
+ if (model.ReceiveAccount.IsNull())
+ {
+ errors.Add("璇峰~鍐欐敹娆捐处鍙�");
+ }
+ if (model.SettlementAmount == null)
+ {
+ errors.Add("璇峰~鍐欑粨绠楅噾棰�");
+ }
+ else if (model.SettlementAmount < 0)
+ {
+ errors.Add("缁撶畻閲戦涓嶅彲涓鸿礋鏁�");
+ }
+ if (model.ActualSettlementAmount == null)
+ {
+ errors.Add("璇峰~鍐欏疄鍙戦噾棰�");
+ }
+ else if (model.ActualSettlementAmount < 0)
+ {
+ errors.Add("瀹炲彂閲戦涓嶅彲涓鸿礋鏁�");
+ }
+ else if (model.ActualSettlementAmount > 0 && model.ActualSettlementAmount < 1)
+ {
+ errors.Add("瀹炲彂閲戦涓嶅彲灏忎簬1鍏�");
+ }
+
+ var item = list.Data.FirstOrDefault(it => it.Identity == model.Identity);
+ if (item == null)
+ {
+ errors.Add("鐏靛伐涓嶅瓨鍦�");
+ }
+ else if (item.CheckReceiveStatus != EnumTaskCheckReceiveStatus.Completed)
+ {
+ errors.Add("鏈畬鎴愰獙鏀�");
+ }
+ else if (item.Name != model.Name)
+ {
+ errors.Add("鐏靛伐濮撳悕涓庡疄鍚嶄俊鎭笉涓�鑷�");
+ }
+ else
+ {
+ item.SettlementAmount = model.SettlementAmount;
+ item.ActualSettlementAmount = model.ActualSettlementAmount;
+ item.ReceiveAccount = model.ReceiveAccount;
+ item.Bank = model.Bank;
+ item.BankBranch = model.BankBranch;
+ }
+ if (model.TaskName != list.Detail.Name)
+ {
+ errors.Add("浠诲姟鍚嶇О涓嶄竴鑷�");
+ }
+
+ if (errors.IsNotNull())
+ {
+ var error = model.Adapt<GetSettlementTaskUsersQueryResultError>();
+ error.ErrorMessage = errors.SplitJoin("锛�");
+ list.Errors.Add(error);
+ }
+ else
+ {
+ successList.Add(model);
+ }
+ }
+
+ if (list.Errors.IsNotNull())
+ {
+ list.Data = new List<GetSettlementTaskUsersQueryResultItem>();
+ }
+ else
+ {
+ list.Data = list.Data
+ .Where(it => successList.Any(s => s.Identity == it.Identity))
+ .ToList();
+ }
+
+ list.Detail.SettlementOrderStatus = EnumTaskSettlementOrderStatus.Wait;
+ list.Detail.SettlementOrderName = request.SettlementOrderUrl.Substring(request.SettlementOrderUrl.LastIndexOf("/") + 1);
+ list.Detail.SettlementOrderTime = DateTime.Now;
+ list.Detail.SettlementStatus = EnumTaskSettlementStatus.Wait;
+ list.Detail.SettlementAmount = list.Data.Sum(it => it.SettlementAmount ?? 0);
+ list.Detail.ActualSettlementAmount = list.Data.Sum(it => it.ActualSettlementAmount ?? 0);
+ }
+ else
+ {
+ var task = await repTaskInfo.AsQueryable().AsNoTracking()
+ .Where(it => it.Id == request.TaskInfoId)
+ .FirstOrDefaultAsync();
+ if (task == null) throw Oops.Oh(EnumErrorCodeType.s404, "浠诲姟");
+ list.Data = list.Data
+ .Where(it => it.SettlementStatus == task.SettlementStatus)
+ .ToList();
+ }
+
+ return list;
+ }
}
}
--
Gitblit v1.9.1