using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.DataEncryption; 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 EnterpriseCommandHandler( IMediator mediator, IRepository rep, IRepository repUser ) : IRequestHandler, IRequestHandler, IRequestHandler { private readonly IMediator mediator = mediator; private readonly IRepository rep = rep; private readonly IRepository repUser = repUser; /// /// 保存企业 /// /// /// /// public async Task Handle(SaveEnterpriseCommand request, CancellationToken cancellationToken) { var entity = await rep.AsQueryable() .FirstOrDefaultAsync(it => it.SocietyCreditCode == request.SocietyCreditCode); if (entity == null) { entity = new Enterprise(); request.Adapt(entity); await rep.InsertAsync(entity); } else { request.Adapt(entity); await rep.UpdateAsync(entity); } var user = await repUser.AsQueryable() .FirstOrDefaultAsync(it => it.Type == EnumUserType.Enterprise && it.UserName == request.UserName); if (user == null) { if (request.Password.IsNull()) throw Oops.Oh(EnumErrorCodeType.s400, "请填写密码"); user = new User { EnterpriseId = entity.Id, Type = EnumUserType.Enterprise, Name = request.Contacts, PhoneNumber = request.ContactPhoneNumber, UserName = request.UserName, Password = request.Password.EncryptPassword(), Level = 100, Status = EnumUserStatus.Normal, }; await repUser.InsertAsync(user); } else { if (user.EnterpriseId != entity.Id) throw Oops.Oh(EnumErrorCodeType.s405, "账号"); user.Name = request.Contacts; user.PhoneNumber = request.ContactPhoneNumber; if (request.Password.IsNotNull()) { user.Password = request.Password.EncryptPassword(); } await repUser.UpdateAsync(user); } return entity.Id; } /// /// 设置企业电子签配置 /// /// /// /// public async Task Handle(SetEnterpriseElectronSignSettingCommand request, CancellationToken cancellationToken) { var entity = await rep.AsQueryable() .Include(it => it.ElectronSignSettings) .FirstOrDefaultAsync(it => it.Id == request.Id, cancellationToken); if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "企业"); await mediator.Send(new CheckElectronSignAccessEnabledsCommand { Accesses = request.ElectronSignAccesses }, cancellationToken); entity.ElectronSignSettings = request.ElectronSignAccesses .Select(it => { var setting = entity.ElectronSignSettings.FirstOrDefault(s => s.ElectronSignAccess == it); if (setting == null) { setting = new EnterpriseElectronSignSetting { ElectronSignAccess = it }; } return setting; }) .ToList(); await rep.UpdateAsync(entity); return entity.Id; } /// /// 设置企业短信配置 /// /// /// /// public async Task Handle(SetEnterpriseSmsSettingCommand request, CancellationToken cancellationToken) { var entity = await rep.AsQueryable().FirstOrDefaultAsync(it => it.Id == request.Id, cancellationToken); if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "企业"); request.Adapt(entity); await rep.UpdateAsync(entity); return entity.Id; } } }