从山证v2.3.0拷贝
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
using BaseOUDAL;
|
||||
using YLErp.Helpers;
|
||||
|
||||
namespace YLErp.Modules.SubAppModule.ClientApp
|
||||
{
|
||||
/// <summary>
|
||||
/// 客户用户密码服务
|
||||
/// </summary>
|
||||
public class ClientUserPasswordService : BaseService<ClientDBContext>
|
||||
{
|
||||
public ClientUserPasswordService(OptUserInfo optUser) : base(optUser)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重置密码
|
||||
/// </summary>
|
||||
public string ResetPassword(int clientId)
|
||||
{
|
||||
var clientDB = DbContextFactory.GetClientDbContext(UserInfo);
|
||||
var client = clientDB.client.FirstOrDefault(s => s.id == clientId);
|
||||
|
||||
if (client == null)
|
||||
{
|
||||
throw new ServiceException("该客户不存在");
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(client.DefaultLoginName))
|
||||
{
|
||||
throw new ServiceException("请先设置该客户的默认登录名");
|
||||
}
|
||||
|
||||
if (DbContext.ClientUser.Any(x => x.ClientId != clientId && x.LoginName == client.DefaultLoginName))
|
||||
{
|
||||
return "该客户默认登录名已经被占用,请修改后再确认";
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(client.Guid))
|
||||
{
|
||||
client.Guid = Guid.NewGuid().ToString();
|
||||
}
|
||||
|
||||
var password = DataHelper.GenerateCheckCode(6);
|
||||
var clientUser = DbContext.ClientUser.FirstOrDefault(x => x.ClientId == client.id);
|
||||
|
||||
if (clientUser == null)
|
||||
{
|
||||
clientUser = new ClientUser()
|
||||
{
|
||||
ClientId = client.id,
|
||||
LoginName = client.DefaultLoginName,
|
||||
Password = DataHelper.EncryptPassword(client.DefaultLoginName.ToLower(), password)
|
||||
};
|
||||
SetDBModelOpt(clientUser);
|
||||
DbContext.ClientUser.Add(clientUser);
|
||||
}
|
||||
else
|
||||
{
|
||||
clientUser.Password = DataHelper.EncryptPassword(client.DefaultLoginName.ToLower(), password);
|
||||
}
|
||||
|
||||
// 要向该客户的所有订阅了邮件通知的人员发送邮件
|
||||
var emails = ClientModule.ClientDataQueryService.GetClientEmails(client.id);
|
||||
if (!emails.Any(n => !string.IsNullOrEmpty(n)))
|
||||
{
|
||||
throw new ServiceException("未设置邮箱,无法发送用户名密码");
|
||||
}
|
||||
|
||||
var sendMail = EmailHelper.SendMail(string.Join(";", emails), PS.Config.CompanyFullName + "-场外衍生品客户服务用户密码设置"
|
||||
, string.Format("<p>{1}:</p><p><br/></p><p> 您在我司场外衍生品客户服务系统的登录账号和密码信息如下:</p><p> 登录用户名:{2}, 密码:{3}</p><p> 建议使用Chrome浏览器!</p><p><br/></p><p> {0}</p>"
|
||||
, PS.Config.CompanyFullName, client.Name, client?.DefaultLoginName ?? client.DefaultLoginName, password));
|
||||
|
||||
if (string.IsNullOrEmpty(sendMail))
|
||||
{
|
||||
clientDB.ClientAuditLog.Add(new ClientAuditLog
|
||||
{
|
||||
ClientId = client.id,
|
||||
OptType = "重置密码",
|
||||
Changes = string.Empty,
|
||||
DataType = "00",
|
||||
OptId = UserId,
|
||||
OptName = UserName,
|
||||
OptDate = DateTime.Now
|
||||
});
|
||||
clientDB.SaveChanges();
|
||||
DbContext.SaveChanges();
|
||||
return "发送用户名密码成功";
|
||||
}
|
||||
else
|
||||
{
|
||||
LogFactory.GetLogger("客户密码重置").Error("发送邮件失败:" + sendMail);
|
||||
throw new ServiceException("发送用户名密码失败");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 变更密码
|
||||
/// </summary>
|
||||
public void ChangePassword(ClientChangePasswordRequest reqModel)
|
||||
{
|
||||
if (reqModel is null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(reqModel));
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(reqModel.Password))
|
||||
{
|
||||
throw new ServiceException("输入错误,缺少当前密码");
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(reqModel.NewPassword))
|
||||
{
|
||||
throw new ServiceException("输入错误,缺少新密码");
|
||||
}
|
||||
|
||||
if (reqModel.NewPassword == null || reqModel.NewPassword.Length < 6 || !reqModel.NewPassword.Any(n => (n >= 'a' && n <= 'z') || (n >= 'A' && n <= 'Z')) || !reqModel.NewPassword.Any(n => n >= '0' && n <= '9'))
|
||||
{
|
||||
throw new ServiceException("密码长度至少6位并且包含英文字母和数字");
|
||||
}
|
||||
|
||||
var clientDB = DbContextFactory.GetClientDbContext(UserInfo);
|
||||
|
||||
if (!clientDB.client.Any(c => c.id == reqModel.ClientId))
|
||||
{
|
||||
throw new ServiceException("客户信息不存在");
|
||||
}
|
||||
|
||||
var cuser = DbContext.ClientUser.FirstOrDefault(c => c.id == reqModel.ClientId);
|
||||
|
||||
if (cuser == null)
|
||||
{
|
||||
throw new ServiceException("用户不存在");
|
||||
}
|
||||
|
||||
if (!DataHelper.EncryptPassword(cuser.LoginName.ToLowerInvariant(), reqModel.Password).Equals(cuser.Password, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
throw new ServiceException("当前密码错误");
|
||||
}
|
||||
|
||||
cuser.Password = DataHelper.EncryptPassword(cuser.LoginName.ToLowerInvariant(), reqModel.NewPassword);
|
||||
|
||||
DbContext.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user