using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.FriendlyException; using Mapster; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.UserServer.Application { /// /// 合同模板命令处理器 /// public class ContractTemplateCommandHandler( IRepository rep ) : IRequestHandler, IRequestHandler { private readonly IRepository rep = rep; /// /// 保存合同模板 /// /// /// /// public async Task Handle(SaveContractTemplateCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); if (logier.Type == EnumUserType.Enterprise) { request.EnterpriseId = logier.EnterpriseId; } if (request.EnterpriseId == null) throw Oops.Oh(EnumErrorCodeType.s400, "请选择企业"); return await request.SaveData( q => q .Include(it => it.Values) .Where(it => it.EnterpriseId == request.EnterpriseId && !it.IsDisabled), it => it.EnterpriseId == request.EnterpriseId && it.Name == request.Name && !it.IsDisabled && it.Id != request.Id, entity => { request.Adapt(entity); if (entity.Values.Count != request.Values.Count || entity.Values.Any(ov => request.Values.Count(nv => ov.Id == nv.Id && ov.Type == nv.Type && ov.Recorder == nv.Recorder && ov.UserType == nv.UserType && ov.Label == nv.Label && ov.Required == nv.Required) != 1)) { entity.Values = request.Values.Select(it => { var value = entity.Values.FirstOrDefault(v => v.Id == it.Id); if (value == null) { value = new ContractTemplateValue(); } it.Adapt(value); return value; }).ToList(); entity.UpdatedUserId = logier.Id; entity.UpdatedTime = DateTime.Now; } if (entity.Access.HasValue && entity.TemplateId.IsNotNull()) { if (entity.Status == EnumContractTemplateStatus.Wait) { entity.Status = EnumContractTemplateStatus.Completed; entity.CompletedTime = DateTime.Now; } } else { entity.Status = EnumContractTemplateStatus.Wait; entity.CompletedTime = null; } }, cancellationToken); } /// /// 禁用合同模板 /// /// /// /// public async Task Handle(SetIsDisabledContractTemplateCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); return await request.SetIsDisabled(q => { if (logier.Type == EnumUserType.Enterprise) { q = q.Where(it => it.EnterpriseId == logier.EnterpriseId); } return q; }, cancellationToken); } } }