using DocumentServiceAPI.Application.Repository;
|
using DocumentServiceAPI.Application.UserAndLogin.Services.Interfaces;
|
using DocumentServiceAPI.Application.UserAndLogin.ViewMode;
|
using DocumentServiceAPI.Model;
|
using DocumentServiceAPI.Model.cyDocumentModel;
|
using DocumentServiceAPI.Model.UserInfoModel;
|
using DocumentServiceAPI.Utility;
|
using Furion.Logging.Extensions;
|
using MapsterMapper;
|
using SqlSugar.Extensions;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Security.Claims;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace DocumentServiceAPI.Application.UserAndLogin.Services
|
{
|
|
/// <summary>
|
/// 登录验证服务
|
/// </summary>
|
public class UserService : IUserService, IScoped
|
{
|
private ISqlSugarClient _db { get; set; }
|
private EmployeeRepository _employeeRepository{ get; set; }
|
private IMapper _mapper { get; set; }
|
public UserService(ISqlSugarClient db, EmployeeRepository employeeRepository, IMapper mapper)
|
{
|
_db = db;
|
_employeeRepository= employeeRepository;
|
_mapper = mapper;
|
}
|
/// <summary>
|
/// 员工详情
|
/// </summary>
|
/// <param name="ID"></param>
|
/// <param name="TenantID"></param>
|
/// <returns></returns>
|
public async Task<EmployeeTenantInfo> GetEmployeeInfo(int ID, int TenantID)
|
{
|
var ret = await _db.Queryable<EmployeeInfo, EmployeeAtTenant, TenantInfo>((ei, eiat, ti) =>
|
new JoinQueryInfos(
|
JoinType.Right, ei.Id == eiat.EmployeeID, //左连接 左链接 左联
|
JoinType.Right, ti.Id == eiat.TenantID
|
)).Where((ei, eiat, ti) => ei.Id == ID && TenantID == ti.Id)
|
.Select(expression: (ei, eiat, ti) => new EmployeeTenantInfo
|
{
|
_employeeInfo = ei,
|
_tenantInfo = ti
|
|
}).SingleAsync();
|
|
return ret;
|
}
|
|
/// <summary>
|
/// 获取Jwt相关信息
|
/// </summary>
|
public JwtInfo GetJwtInfo()
|
{
|
JwtInfo jwtInfo = new JwtInfo();
|
jwtInfo.LogInSource = (LogInFrom)(App.User?.FindFirstValue("loginfrom")?.ObjToInt() ?? 0);
|
jwtInfo.EID = App.User?.FindFirstValue("eid")?.ObjToInt();
|
jwtInfo.UID = App.User?.FindFirstValue("uid")?.ObjToInt();
|
jwtInfo.TEID = App.User?.FindFirstValue("teid")?.ObjToInt();
|
var guid = App.User?.FindFirstValue("jid");
|
jwtInfo.JID = string.IsNullOrEmpty(guid) ? null: new Guid(guid);
|
return jwtInfo;
|
}
|
|
/// <summary>
|
/// 获取单位列表
|
/// </summary>
|
/// <returns></returns>
|
public async Task<List<UnitVM>> GetUserUnitList(int tid )
|
{
|
|
var list = await _db.Queryable<DocumentServiceAPI.Model.cyDocumentModel.Document_TenderUnit>()
|
.Where((tu) => tu.TenantId == tid && tu.IsEn == true && tu.IsDeled != true)
|
.Select((tu) => new UnitVM
|
{
|
UnitID = tu.UnitId,
|
UnitName = tu.UnitName,
|
Remark = tu.Remark,
|
UnitLogo = tu.UnitLogo,
|
}).WithCache(10)
|
.ToListAsync();
|
return list;
|
}
|
|
/// <summary>
|
/// 根据账号获取 Tender 列表
|
/// </summary>
|
/// <param name="ItCode"></param>
|
/// <returns></returns>
|
public async Task<List<TenderVM>> GetUserTenderList(string ItCode)
|
|
{
|
|
var tentlist= await _db.Queryable<TenantInfo, EmployeeAtTenant, Document_EmployeeInfo>((ti, et, ei) =>
|
|
new JoinQueryInfos
|
(
|
JoinType.Right, ti.Id == et.TenantID, //左连接 左链接 左联
|
JoinType.Right, ei.EmployeeId == et.EmployeeID
|
)
|
)
|
.Where((ti, et, ei) =>
|
( ei.UserName == ItCode) && (ti.IsEn == true) && (ti.IsDel != true) && (ei.IsWork == null || ei.IsWork == 1))
|
|
.Select((ti, et, ei) => new TenderVM
|
{
|
EmployeeID = ei.EmployeeId,
|
Description = ti.Description,
|
ItCode = ItCode,
|
Name = ti.Name,
|
TenderId = ti.Id
|
|
}
|
).WithCache( 10).ToListAsync();
|
|
var ten = await _db.Queryable<TenantInfo>().Where(x => x.IsEn == true && x.IsDel != true && x.ItCode == ItCode)
|
.Select(x => new TenderVM
|
{
|
|
Description = x.Description,
|
ItCode = ItCode,
|
Name = x.Name,
|
TenderId = x.Id,
|
IsTender = true
|
|
}
|
).WithCache(10).ToListAsync() ;
|
ten.AddRange(tentlist);
|
return ten;
|
|
}
|
|
/// <summary>
|
/// 检查密码是否登录
|
/// </summary>
|
/// <param name="TenantID"> 租户ID</param>
|
/// <param name="employeeID">员工ID</param>
|
/// <param name="PsW">密码</param>
|
/// <returns></returns>
|
public async Task<bool> CheckPsw(int TenantID, int? employeeID, string PsW)
|
{
|
if (employeeID == null)
|
{
|
var psw = await _db.Queryable<TenantInfo>().Where(x => x.Id == TenantID).Select(x => x.PsW).SingleAsync();
|
if (PsW == psw)
|
return true;
|
}
|
else
|
{
|
var psw = await _db.Queryable<Document_EmployeeInfo, EmployeeAtTenant, TenantInfo>((ei, et, ti) =>
|
|
new JoinQueryInfos
|
(
|
JoinType.Left, ei.EmployeeId == et.EmployeeID, //左连接 左链接 左联
|
JoinType.Left, ti.Id == et.TenantID
|
)
|
).Where((ei, et, ti) =>
|
|
ei.EmployeeId == employeeID && ti.Id == TenantID
|
)
|
.Select((ei, et, ti) => ei.UserPassWord)
|
.SingleAsync();
|
if (PsW == psw)
|
return true;
|
}
|
return false;
|
|
}
|
|
|
/// <summary>
|
/// 获取用户详情,包括员工信息,租户信息,单位信息
|
/// </summary>
|
/// <param name="TenantID"> 租户ID</param>
|
/// <param name="EmployeeID">员工ID </param>
|
/// <param name="UnitID">单位ID</param>
|
/// <returns></returns>
|
public async Task<RetUserInfo> GetUserInfo(int? TenantID,int? EmployeeID,int? UnitID)
|
{
|
TenderInfoVM Tenant = null;
|
EmployeeInfoVM Employee = null;
|
if (TenantID != null)
|
Tenant = await _db.Queryable<TenantInfo>().Where(x => x.Id == TenantID)
|
.Select(x => new TenderInfoVM
|
{
|
Description = x.Description,
|
Id = x.Id,
|
ItCode = x.ItCode,
|
Name = x.Name,
|
ReMark = x.ReMark,
|
}).WithCache(20).FirstAsync();
|
if (EmployeeID != null)
|
Employee = await _db.Queryable<Document_EmployeeInfo>().Where(x => x.EmployeeId == EmployeeID)
|
.Select(x => new EmployeeInfoVM
|
{ AdviseFlag = x.AdviseFlag,
|
CardPositive = x.CardPositive,
|
CardPositiveSize = x.CardPositiveSize,
|
CardPositiveVersionNo = x.CardPositiveVersionNo,
|
EmployeeId = x.EmployeeId,
|
EmployeeName = x.EmployeeName,
|
Job = x.Job,
|
LastUpdateName = x.LastUpdateName,
|
UserName = x.UserName,
|
IsLogin = x.IsLogin,
|
|
|
}).WithCache(20).FirstAsync();
|
UnitInfoVM Unit = null;
|
if (UnitID != null)
|
Unit = await _db.Queryable<Model.cyDocumentModel.Document_TenderUnit>().Where(x => x.UnitId == UnitID)
|
.Select(x => new UnitInfoVM
|
{
|
FirmQualificationLevel = x.FirmQualificationLevel,
|
Fax = x.Fax,
|
CorporaterTechnicalPost= x.CorporaterTechnicalPost,
|
LastUpdateName= x.LastUpdateName,
|
Address = x.Address,
|
AdviseFlag = x.AdviseFlag, BankNum = x.BankNum,
|
BusinessContent = x.BusinessContent,
|
BusinessLicense = x.BusinessLicense,
|
CardPositive= x.CardPositive,
|
CardPositiveSize= x.CardPositiveSize,
|
CardPositiveVersionNo= x.CardPositiveVersionNo,
|
ContactPerson= x.ContactPerson,
|
ContactPhone= x.ContactPhone,
|
CorporatePhone= x.CorporatePhone,
|
Corporater= x.Corporater,
|
CorporaterPost= x.CorporaterPost,
|
CreatTime= x.CreatTime,
|
Mechanicer= x.Mechanicer,
|
MiddleStaff= x.MiddleStaff,
|
OpenBank= x.OpenBank,
|
OrgStructure= x.OrgStructure,
|
PrimaryStaff= x.PrimaryStaff,
|
ProjectManager= x.ProjectManager,
|
RegMoney= x.RegMoney,
|
Remark= x.Remark,
|
UnitId= x.UnitId,
|
TechnicalLeader= x.TechnicalLeader,
|
SeniorStaff= x.SeniorStaff,
|
StaffCount= x.StaffCount,
|
TechnicalPhone= x.TechnicalPhone,
|
TechnicalPost= x.TechnicalPost,
|
UnitLogo= x.UnitLogo,
|
UnitLogoSize= x.UnitLogoSize,
|
UnitLogoVersionNo= x.UnitLogoVersionNo,
|
UnitName= x.UnitName,
|
UnitType= x.UnitType,
|
WebUrl= x.WebUrl,
|
ZipCode= x.ZipCode,
|
|
|
|
|
}).WithCache(20).FirstAsync();
|
|
|
return new RetUserInfo
|
{
|
EmployeeInfo = Employee,
|
TenderInfo = Tenant,
|
UnitInfo = Unit
|
};
|
}
|
|
/// <summary>
|
/// 获取员工列表
|
/// </summary>
|
/// <param name="_businessService"></param>
|
/// <param name="page"></param>
|
/// <returns></returns>
|
public async Task<PageResult<EmployeeInfoVM>> postEmployeeList( EmployeePageSearch page)
|
{
|
var a = GetJwtInfo();
|
if(a.EID!=null)
|
throw Oops.Oh($"没有权限");
|
SqlSugar.PageModel pg = new SqlSugar.PageModel();
|
pg.PageSize = page.PageSize;
|
pg.PageIndex = page.PageIndex;
|
RefAsync<int> total = 0;
|
PageResult<EmployeeInfoVM> result = new PageResult<EmployeeInfoVM>();
|
result.Items = await _db.Queryable<EmployeeAtTenant, Document_EmployeeInfo>((et, ei) =>
|
new JoinQueryInfos(JoinType.Left, et.EmployeeID==ei.EmployeeId
|
)).Where((ei,et)=>ei.TenantID==a.TEID)
|
.Select((ei,et)=>new EmployeeInfoVM
|
{
|
EmployeeId = et.EmployeeId,
|
AdviseFlag=et.AdviseFlag,
|
CardPositive=et.CardPositive,
|
CardPositiveSize=et.CardPositiveSize,
|
CardPositiveVersionNo=et.CardPositiveVersionNo,
|
EmployeeName=et.EmployeeName,
|
IsWork=et.IsWork,
|
Job=et.Job,
|
LeaveTime=et.LeaveTime,
|
Phone=et.Phone,
|
UserId=et.UserId,
|
UserName=et.UserName,
|
|
|
|
|
|
}).MergeTable().OrderBy(x=>x.EmployeeId).ToPageListAsync(page.PageIndex,page.PageSize, total);
|
|
result.TotalCount = pg.TotalCount;
|
return result;
|
}
|
|
|
|
|
public async Task<bool > UpEmployee(EmployeeInfoVM vm)
|
{
|
|
var jwtinfo = GetJwtInfo();
|
|
if (jwtinfo.EID != null)
|
throw Oops.Oh($"没有权限");
|
var info = await GetUserInfo(jwtinfo.TEID, null, null);
|
Document_EmployeeInfo a = _mapper.Map<Document_EmployeeInfo>(vm);
|
|
a.LastUpdateName = info.EmployeeInfo.UserName;
|
a.LastUpdateTime = DateTime.Now;
|
|
return await _employeeRepository.UpdateAsync(a);
|
|
}
|
|
public async Task<bool> InEmployee(EmployeeInfoVM vm)
|
{
|
var jwtinfo = GetJwtInfo();
|
if (jwtinfo.EID != null)
|
throw Oops.Oh($"没有权限");
|
Document_EmployeeInfo a = _mapper.Map<Document_EmployeeInfo>(vm);
|
|
var info = await GetUserInfo(jwtinfo.TEID, null, null);
|
EmployeeAtTenant elt = new EmployeeAtTenant
|
{
|
CreatBy = info.TenderInfo.ItCode,
|
CreatTime = DateTime.Now,
|
TenantID = info.TenderInfo.Id,
|
|
|
|
};
|
try
|
{
|
await _employeeRepository.AsTenant().BeginTranAsync();
|
var jwtId= await _employeeRepository.InsertReturnIdentityAsync(a);
|
elt.EmployeeID = jwtId;
|
await _db.Insertable(elt).ExecuteCommandAsync();
|
|
await _employeeRepository.AsTenant().CommitTranAsync();
|
|
}
|
catch (Exception e)
|
{
|
|
await _employeeRepository.AsTenant().RollbackTranAsync();
|
//写日志
|
$" 插入新员工失败, 错误消息:{e.Message} \r\n 堆栈错误:{e.StackTrace}" .LogInformation();
|
throw Oops.Oh("新增失败");
|
}
|
|
return await _employeeRepository.InsertAsync(a);
|
|
|
|
|
|
}
|
|
}
|
|
|
}
|