mh_custom/wtmProject.ViewModel/_Admin/FrameworkUserVms/FrameworkUserVM.cs

208 lines
8.0 KiB
C#
Raw Normal View History

2024-05-16 17:30:33 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using WalkingTec.Mvvm.Core;
using WalkingTec.Mvvm.Core.Extensions;
using wtmProject.Model;
using Microsoft.EntityFrameworkCore;
namespace wtmProject.ViewModel._Admin.FrameworkUserVMs
{
public partial class FrameworkUserVM : BaseCRUDVM<FrameworkUser>
{
[Display(Name = "_Admin.Role")]
public List<string> SelectedRolesCodes { get; set; }
[Display(Name = "_Admin.Project")]
public List<string> SelectedProjectCodes { get; set; }
[Display(Name = "_Admin.Area")]
public List<string> SelectedAreaCodes { get; set; }
public FrameworkUserVM()
{
SetInclude(x => x.Group);
}
public override DuplicatedInfo<FrameworkUser> SetDuplicatedCheck()
{
var rv = CreateFieldsInfo(SimpleField(x => x.ITCode));
return rv;
}
protected override void InitVM()
{
SelectedRolesCodes = DC.Set<FrameworkUserRole>().Where(x => x.UserCode == Entity.ITCode).Select(x => x.RoleCode).ToList();
SelectedProjectCodes = DC.Set<WTM_USER_PROJECT>().Where(x => x.UserCode == Entity.ITCode).Select(x => x.ProjectCode).ToList();
SelectedAreaCodes = DC.Set<WTM_USER_AREA>().Where(x => x.UserCode == Entity.ITCode).Select(x => x.AreaCode).ToList();
}
public override async Task DoAddAsync()
{
using (var trans = DC.BeginTransaction())
{
if (SelectedRolesCodes != null)
{
foreach (var rolecode in SelectedRolesCodes)
{
FrameworkUserRole r = new FrameworkUserRole
{
RoleCode = rolecode,
UserCode = Entity.ITCode,
TenantCode = LoginUserInfo.CurrentTenant
};
DC.AddEntity(r);
}
}
if (SelectedProjectCodes != null)
{
foreach (var projectcode in SelectedProjectCodes)
{
WTM_USER_PROJECT g = new WTM_USER_PROJECT
{
ProjectCode = projectcode,
UserCode = Entity.ITCode,
TenantCode = LoginUserInfo.CurrentTenant
};
DC.AddEntity(g);
}
}
if (SelectedAreaCodes != null)
{
foreach (var areacode in SelectedAreaCodes)
{
WTM_USER_AREA g = new WTM_USER_AREA
{
AreaCode = areacode,
UserCode = Entity.ITCode,
TenantCode = LoginUserInfo.CurrentTenant
};
DC.AddEntity(g);
}
}
Entity.IsValid = true;
Entity.Password = Utils.GetMD5String(Entity.Password);
await base.DoAddAsync();
if (MSD.IsValid)
{
trans.Commit();
}
else
{
trans.Rollback();
}
}
}
public override async Task DoEditAsync(bool updateAllFields = false)
{
using (var trans = DC.BeginTransaction())
{
if (SelectedRolesCodes != null)
{
List<Guid> todelete = new List<Guid>();
todelete.AddRange(DC.Set<FrameworkUserRole>().AsNoTracking().Where(x => x.UserCode == Entity.ITCode).Select(x => x.ID));
foreach (var item in todelete)
{
DC.DeleteEntity(new FrameworkUserRole { ID = item });
}
}
if (SelectedProjectCodes != null)
{
List<Guid> todelete = new List<Guid>();
todelete.AddRange(DC.Set<WTM_USER_PROJECT>().AsNoTracking().Where(x => x.UserCode == Entity.ITCode).Select(x => x.ID));
foreach (var item in todelete)
{
DC.DeleteEntity(new WTM_USER_PROJECT { ID = item });
}
}
if (SelectedAreaCodes != null)
{
List<Guid> todelete = new List<Guid>();
todelete.AddRange(DC.Set<WTM_USER_AREA>().AsNoTracking().Where(x => x.UserCode == Entity.ITCode).Select(x => x.ID));
foreach (var item in todelete)
{
DC.DeleteEntity(new WTM_USER_AREA { ID = item });
}
}
if (SelectedRolesCodes != null)
{
foreach (var rolecode in SelectedRolesCodes)
{
FrameworkUserRole r = new FrameworkUserRole
{
RoleCode = rolecode,
UserCode = Entity.ITCode,
TenantCode = LoginUserInfo.CurrentTenant
};
DC.AddEntity(r);
}
}
if (SelectedProjectCodes != null)
{
foreach (var projectcode in SelectedProjectCodes)
{
WTM_USER_PROJECT g = new WTM_USER_PROJECT
{
ProjectCode = projectcode,
UserCode = Entity.ITCode,
TenantCode = LoginUserInfo.CurrentTenant
};
DC.AddEntity(g);
}
}
if (SelectedAreaCodes != null)
{
foreach (var areacode in SelectedAreaCodes)
{
WTM_USER_AREA g = new WTM_USER_AREA
{
AreaCode = areacode,
UserCode = Entity.ITCode,
TenantCode = LoginUserInfo.CurrentTenant
};
DC.AddEntity(g);
}
}
await base.DoEditAsync(updateAllFields);
if (MSD.IsValid)
{
trans.Commit();
await Wtm.RemoveUserCache(Entity.ITCode);
}
else
{
trans.Rollback();
}
}
}
public override async Task DoDeleteAsync()
{
using (var tran = DC.BeginTransaction())
{
try
{
await base.DoDeleteAsync();
var ur = DC.Set<FrameworkUserRole>().Where(x => x.UserCode == Entity.ITCode);
DC.Set<FrameworkUserRole>().RemoveRange(ur);
var up = DC.Set<WTM_USER_PROJECT>().Where(x => x.UserCode == Entity.ITCode);
DC.Set<WTM_USER_PROJECT>().RemoveRange(up);
var ua = DC.Set<WTM_USER_AREA>().Where(x => x.UserCode == Entity.ITCode);
DC.Set<WTM_USER_AREA>().RemoveRange(ua);
DC.SaveChanges();
tran.Commit();
}
catch
{
tran.Rollback();
}
}
await Wtm.RemoveUserCache(Entity.ITCode);
}
public void ChangePassword()
{
Entity.Password = Utils.GetMD5String(Entity.Password);
DC.UpdateProperty(Entity, x => x.Password);
DC.SaveChanges();
}
}
}