You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
400 lines
19 KiB
400 lines
19 KiB
using static Tiobon.Core.Model.Consts;
|
|
|
|
namespace Tiobon.Core.Services;
|
|
|
|
/// <summary>
|
|
/// 培训讲师异动 (服务)
|
|
/// </summary>
|
|
public class Ghre_TeacherChangeServices : BaseServices<Ghre_TeacherChange, Ghre_TeacherChangeDto, InsertGhre_TeacherChangeInput, EditGhre_TeacherChangeInput>, IGhre_TeacherChangeServices
|
|
{
|
|
private readonly IBaseRepository<Ghre_TeacherChange> _dal;
|
|
private IGhre_AttachmentServices _ghre_AttachmentServices;
|
|
private IGhre_TeacherChangeAttachmentServices _ghre_TeacherChangeAttachmentServices;
|
|
private IGhre_TeacherAttachmentServices _ghre_TeacherAttachmentServices;
|
|
public Ghre_TeacherChangeServices(ICaching caching,
|
|
IGhre_AttachmentServices ghre_AttachmentServices,
|
|
IGhre_TeacherChangeAttachmentServices ghre_TeacherChangeAttachmentServices,
|
|
IGhre_TeacherAttachmentServices ghre_TeacherAttachmentServices,
|
|
IBaseRepository<Ghre_TeacherChange> dal)
|
|
{
|
|
this._dal = dal;
|
|
base.BaseDal = dal;
|
|
base._caching = caching;
|
|
_ghre_AttachmentServices = ghre_AttachmentServices;
|
|
_ghre_TeacherChangeAttachmentServices = ghre_TeacherChangeAttachmentServices;
|
|
_ghre_TeacherAttachmentServices = ghre_TeacherAttachmentServices;
|
|
}
|
|
|
|
public override async Task<ServicePageResult<Ghre_TeacherChangeDto>> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true)
|
|
{
|
|
|
|
if (string.IsNullOrWhiteSpace(filter.orderBy))
|
|
filter.orderBy = "CreateTime1 DESC";
|
|
|
|
if (filter.pageSize == 0)
|
|
filter.pageSize = 10000;
|
|
|
|
var sql = @$"SELECT * FROM (SELECT A.*,
|
|
ISNULL ((SELECT CASE WHEN {filter.langId} = 1 THEN UserName ELSE UserEname END
|
|
FROM Ghrs_User B
|
|
WHERE B.UserId = A.CreateBy),
|
|
'') CreateDataInfo,
|
|
ISNULL ((SELECT CASE WHEN {filter.langId} = 1 THEN UserName ELSE UserEname END
|
|
FROM Ghrs_User B
|
|
WHERE B.UserId = A.UpdateBy),
|
|
'') UpdateDataInfo,
|
|
ISNULL (A.UpdateTime, A.CreateTime) CreateTime1,
|
|
ISNULL (C.SchoolName, D.DeptName) DeptOrSchoolName
|
|
FROM Ghre_TeacherChange A
|
|
LEFT JOIN Ghre_Teacher B ON A.TeacherId = B.Id
|
|
LEFT JOIN Ghre_School C ON B.SchoolId = C.Id
|
|
LEFT JOIN Ghro_Dept D ON B.DeptID = D.DeptID) A";
|
|
|
|
string conditions = " 1=1 ";
|
|
if (filter.jsonParam != null)
|
|
foreach (JProperty jProperty in filter.jsonParam.Properties())
|
|
{
|
|
var name = jProperty.Name;
|
|
var value = jProperty.Value.ToString();
|
|
if (name == "page" || name == "pageSize")
|
|
continue;
|
|
|
|
if (!string.IsNullOrWhiteSpace(value))
|
|
conditions = DealConditions(condition, name, value);
|
|
}
|
|
|
|
if (IsEnable == true)
|
|
sql += " WHERE IsEnable = 1";
|
|
else if (IsEnable == false)
|
|
sql += " WHERE IsEnable = 0";
|
|
|
|
conditions += $" AND dbo.FUserDataBelongPriv ({App.User.ID}, DataBelongID, NULL) = 1";
|
|
|
|
if (!string.IsNullOrWhiteSpace(condition))
|
|
conditions += " AND " + condition;
|
|
|
|
int total = 0;
|
|
var data = Db.SqlQueryable<Ghre_TeacherChangeDto>(sql)
|
|
.Where(conditions)
|
|
.OrderBy(filter.orderBy)
|
|
.ToPageList(filter.pageNum, filter.pageSize, ref total);
|
|
|
|
var teacherIds = data.Where(x => x.TeacherId != null).Select(x => x.TeacherId).Distinct().ToList();
|
|
var teachers = await Db.Queryable<Ghre_Teacher>().Where(x => teacherIds.Contains(x.Id)).Select(x => new { x.Id, x.SchoolId, x.DeptID, x.TeacherType, TeacherName = x.TeacherName + " (" + x.TeacherNo + ")" }).ToListAsync();
|
|
//var schoolIds = teachers.Where(x => x.SchoolId != null).Select(x => x.SchoolId.Value).Distinct().ToList();
|
|
//var deptIDs = teachers.Where(x => x.DeptID != null).Select(x => x.DeptID).Distinct().ToList();
|
|
|
|
//var depts = await Db.Queryable<Ghro_Dept>().Where(x => deptIDs.Contains(x.DeptID)).Select(x => new { x.DeptID, x.DeptName }).ToListAsync();
|
|
//var schools = await Db.Queryable<Ghre_School>().Where(x => schoolIds.Contains(x.Id)).Select(x => new { x.Id, x.SchoolName }).ToListAsync();
|
|
|
|
data.ForEach(async x =>
|
|
{
|
|
var teacher = teachers.FirstOrDefault(o => o.Id == x.TeacherId);
|
|
x.TeacherTypeLabel = await GetParaLabel("TrainingTeacherType", x.TeacherType);
|
|
x.TeacherLevelLabel = await GetParaLabel("TrainingTeacherLevel", x.TeacherLevel);
|
|
x.OriginTeacherLevelLabel = await GetParaLabel("TrainingTeacherLevel", x.OriginTeacherLevel);
|
|
x.ChangeTypeLabel = await GetParaLabel("TrainingTeacherChangeType", x.ChangeType);
|
|
x.OriginChangeTypeLabel = await GetParaLabel("TrainingTeacherChangeType", x.OriginChangeType);
|
|
//x.DeptOrSchoolName = x.TeacherType == "Out" ? schools.FirstOrDefault(o => o.Id == teacher?.SchoolId)?.SchoolName : depts.FirstOrDefault(o => o.DeptID == teacher?.DeptID)?.DeptName;
|
|
x.TeacherName = teacher?.TeacherName;
|
|
x.OriginChangeDate1 = DateTimeHelper.ConvertToDayString(x.OriginChangeDate);
|
|
x.ChangeDate1 = DateTimeHelper.ConvertToDayString(x.ChangeDate);
|
|
x.DataBelongName = await GetDataBelongName(x.DataBelongID);
|
|
});
|
|
|
|
return new ServicePageResult<Ghre_TeacherChangeDto>(filter.pageNum, total, filter.pageSize, data);
|
|
}
|
|
|
|
public override async Task<ServiceFormResult<Ghre_TeacherChangeDto>> QueryForm(QueryForm body)
|
|
{
|
|
var data = await base.QueryForm(body);
|
|
var entitys = data.result.DT_TableDataT1;
|
|
var ids = entitys.Select(x => x.Id).ToList();
|
|
var teacherAttachments = await _ghre_TeacherChangeAttachmentServices.QueryDto(x => ids.Contains(x.TeacherChangeId.Value));
|
|
var ids1 = teacherAttachments.Select(x => x.Id.ToString()).ToList();
|
|
var attachments = await _ghre_AttachmentServices.QueryDto(x => ids1.Contains(x.TableName));
|
|
|
|
teacherAttachments.ForEach(x =>
|
|
{
|
|
x.Attachments = attachments.Where(o => o.TableName == x.Id.ToString()).ToList();
|
|
});
|
|
entitys.ForEach(x =>
|
|
{
|
|
x.TeacherAttachments = teacherAttachments.Where(o => o.TeacherChangeId == x.Id).ToList();
|
|
});
|
|
|
|
data.result.DT_TableDataT1 = entitys;
|
|
return data;
|
|
}
|
|
|
|
public override async Task<long> Add(InsertGhre_TeacherChangeInput entity)
|
|
{
|
|
#region 校验 当天是否能发起
|
|
if (await Db.Queryable<Ghre_TeacherChange>().AnyAsync(x => x.TeacherId == entity.TeacherId && ((x.Status == "Wait") || (x.Status != "Wait" && x.WorkState != 2))))
|
|
throw new Exception("讲师当天只能发起一笔有效异动!");
|
|
#endregion
|
|
|
|
var teacher = await Db.Queryable<Ghre_Teacher>().FirstAsync(x => x.Id == entity.TeacherId);
|
|
|
|
entity.SchoolId = teacher.SchoolId;
|
|
entity.DeptID = teacher.DeptID;
|
|
entity.SponsorId = GetStaffId();
|
|
var id = await base.Add(entity);
|
|
var sql = $"SELECT ISNULL(MAX(id)+1,1) FROM Ghre_TeacherChange WHERE Id !='{id}'";
|
|
var id1 = await Db.Ado.GetLongAsync(sql);
|
|
sql = $"UPDATE Ghre_TeacherChange SET Id={id1} WHERE Id ='{id}'";
|
|
await Db.Ado.ExecuteCommandAsync(sql);
|
|
id = id1;
|
|
|
|
if (entity.TeacherAttachments != null && entity.TeacherAttachments.Any())
|
|
{
|
|
for (int i = 0; i < entity.TeacherAttachments.Count; i++)
|
|
{
|
|
var insert = entity.TeacherAttachments[i];
|
|
insert.TeacherChangeId = id;
|
|
var teacherAttachmentId = await _ghre_TeacherChangeAttachmentServices.Add(insert);
|
|
if (insert.Attachments != null && insert.Attachments.Any())
|
|
for (int j = 0; j < insert.Attachments.Count; j++)
|
|
{
|
|
await Db.Updateable<Ghre_Attachment>()
|
|
.SetColumns(it => new Ghre_Attachment() { TableName = teacherAttachmentId.ToString(), UpdateTime = DateTime.Now })
|
|
.Where(it => it.RelativePath == insert.Attachments[j].RelativePath)
|
|
.ExecuteCommandAsync();
|
|
}
|
|
}
|
|
}
|
|
|
|
return id;
|
|
}
|
|
|
|
public override async Task<bool> Update(long Id, EditGhre_TeacherChangeInput editModel)
|
|
{
|
|
if (editModel.TeacherType == "In")
|
|
{
|
|
editModel.SchoolId = null;
|
|
var staff = await Db.Queryable<Ghra_Staff>().FirstAsync(x => x.StaffID == editModel.StaffId);
|
|
if (staff != null)
|
|
{
|
|
editModel.TeacherNo = staff.StaffNo;
|
|
editModel.TeacherName = staff.StaffName;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
editModel.DeptID = null;
|
|
editModel.StaffId = null;
|
|
}
|
|
var result = await base.Update(Id, editModel, null, ["Status"]);
|
|
await _ghre_TeacherChangeAttachmentServices.Delete(x => x.TeacherChangeId == Id);
|
|
if (editModel.TeacherAttachments != null && editModel.TeacherAttachments.Any())
|
|
{
|
|
for (int i = 0; i < editModel.TeacherAttachments.Count; i++)
|
|
{
|
|
var insert = editModel.TeacherAttachments[i];
|
|
insert.TeacherId = Id;
|
|
var TeacherAttachmentId = await _ghre_TeacherChangeAttachmentServices.Add(Mapper.Map(insert).ToANew<InsertGhre_TeacherChangeAttachmentInput>());
|
|
if (insert.Attachments != null && insert.Attachments.Any())
|
|
for (int j = 0; j < insert.Attachments.Count; j++)
|
|
{
|
|
await Db.Updateable<Ghre_Attachment>()
|
|
.SetColumns(it => new Ghre_Attachment() { TableName = TeacherAttachmentId.ToString(), UpdateTime = DateTime.Now })
|
|
.Where(it => it.RelativePath == insert.Attachments[j].RelativePath)
|
|
.ExecuteCommandAsync();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
#region 状态是Wait 直接会写至主数据
|
|
var change = await base.QueryById(Id);
|
|
if (change.Status == "Wait")
|
|
{
|
|
var teacher = Mapper.Map(editModel).ToANew<Ghre_Teacher>();
|
|
teacher.Id = editModel.TeacherId.Value;
|
|
await Db.Updateable(teacher).UpdateColumns(it => new { it.TeacherLevel, it.Price, it.SkillPoints }).ExecuteCommandAsync();
|
|
|
|
var teacherAttachmentIds = await Db.Queryable<Ghre_TeacherAttachment>().Where(x => x.TeacherId == editModel.TeacherId).Select(x => x.Id).ToListAsync();
|
|
if (teacherAttachmentIds.Any())
|
|
await Db.Updateable<Ghre_TeacherAttachment>()
|
|
.SetColumns(it => new Ghre_TeacherAttachment()
|
|
{
|
|
IsEnable = 0
|
|
})
|
|
.Where(it => teacherAttachmentIds.Contains(it.Id))
|
|
.ExecuteCommandAsync();
|
|
|
|
if (editModel.TeacherAttachments != null && editModel.TeacherAttachments.Any())
|
|
{
|
|
for (int i = 0; i < editModel.TeacherAttachments.Count; i++)
|
|
{
|
|
var insert = Mapper.Map(editModel.TeacherAttachments[i]).ToANew<InsertGhre_TeacherAttachmentInput>(); ;
|
|
insert.TeacherId = teacher.Id;
|
|
var teacherAttachmentId = await _ghre_TeacherAttachmentServices.Add(insert);
|
|
if (editModel.TeacherAttachments[i].Attachments != null && editModel.TeacherAttachments[i].Attachments.Any())
|
|
for (int j = 0; j < editModel.TeacherAttachments[i].Attachments.Count; j++)
|
|
{
|
|
var attachment = await Db.Queryable<Ghre_Attachment>().FirstAsync(x => x.RelativePath == insert.Attachments[j].RelativePath);
|
|
attachment.TableName = teacherAttachmentId.ToString();
|
|
await Db.Insertable(attachment).ExecuteReturnSnowflakeIdAsync();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
return result;
|
|
}
|
|
public async Task<ServiceResult<long>> InsertByStatus(InsertGhre_TeacherChangeInput insertModel, string status)
|
|
{
|
|
var data = ServiceResult<long>.OprateSuccess("新增成功", 0);
|
|
insertModel.Status = status;
|
|
var id = await Add(insertModel);
|
|
|
|
data.Success = id > 0;
|
|
if (data.Success)
|
|
{
|
|
data.Data = id;
|
|
#region 状态是Wait 直接会写至主数据
|
|
if (status == "Wait")
|
|
{
|
|
var teacher = Mapper.Map(insertModel).ToANew<Ghre_Teacher>();
|
|
teacher.Id = insertModel.TeacherId.Value;
|
|
await Db.Updateable(teacher).UpdateColumns(it => new { it.TeacherLevel, it.Price, it.SkillPoints }).ExecuteCommandAsync();
|
|
|
|
var teacherAttachmentIds = await Db.Queryable<Ghre_TeacherAttachment>().Where(x => x.TeacherId == insertModel.TeacherId).Select(x => x.Id).ToListAsync();
|
|
if (teacherAttachmentIds.Any())
|
|
await Db.Updateable<Ghre_TeacherAttachment>()
|
|
.SetColumns(it => new Ghre_TeacherAttachment()
|
|
{
|
|
IsEnable = 0
|
|
})
|
|
.Where(it => teacherAttachmentIds.Contains(it.Id))
|
|
.ExecuteCommandAsync();
|
|
|
|
if (insertModel.TeacherAttachments != null && insertModel.TeacherAttachments.Any())
|
|
{
|
|
for (int i = 0; i < insertModel.TeacherAttachments.Count; i++)
|
|
{
|
|
var insert = Mapper.Map(insertModel.TeacherAttachments[i]).ToANew<InsertGhre_TeacherAttachmentInput>(); ;
|
|
insert.TeacherId = teacher.Id;
|
|
var teacherAttachmentId = await _ghre_TeacherAttachmentServices.Add(insert);
|
|
if (insertModel.TeacherAttachments[i].Attachments != null && insertModel.TeacherAttachments[i].Attachments.Any())
|
|
for (int j = 0; j < insertModel.TeacherAttachments[i].Attachments.Count; j++)
|
|
{
|
|
var attachment = await Db.Queryable<Ghre_Attachment>().FirstAsync(x => x.RelativePath == insert.Attachments[j].RelativePath);
|
|
attachment.TableName = teacherAttachmentId.ToString();
|
|
await Db.Insertable(attachment).ExecuteReturnSnowflakeIdAsync();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
else
|
|
return ServiceResult<long>.OprateFailed("发布成功!");
|
|
|
|
return data;
|
|
}
|
|
|
|
public async Task<ServiceResult> UpdateStatus(InsertGhre_TeacherChangeInput input, string status)
|
|
{
|
|
|
|
HttpRequest request = UserContext.Context.Request;
|
|
var api = request.Path.ObjToString().TrimEnd('/').ToLower();
|
|
var ip = GetUserIp(UserContext.Context);
|
|
|
|
var entities = new List<Ghre_TeacherChange>();
|
|
foreach (var id in input.Ids)
|
|
{
|
|
if (!BaseDal.Any(id))
|
|
continue;
|
|
|
|
var entity = await BaseDal.QueryById(id);
|
|
|
|
|
|
switch (status)
|
|
{
|
|
case DIC_REQUEST_STATUS.Active:
|
|
entity.AgreeReason = input.Reason;
|
|
entity.AgreeTime = DateTime.Now;
|
|
entity.AgreeUserId = App.User.ID;
|
|
break;
|
|
case DIC_REQUEST_STATUS.Temporary:
|
|
entity.RefuseReason = input.Reason;
|
|
entity.RefuseTime = DateTime.Now;
|
|
entity.RefuseUserId = App.User.ID;
|
|
break;
|
|
}
|
|
|
|
entity.UpdateIP = ip;
|
|
entity.UpdateProg = api;
|
|
entity.Status = status;
|
|
entities.Add(entity);
|
|
}
|
|
|
|
var result = await BaseDal.Update(entities);
|
|
return ServiceResult.OprateSuccess("执行成功!");
|
|
|
|
}
|
|
|
|
|
|
public async Task<ServiceResult<Ghre_TeacherChangeDto>> QueryLast(int teacherId)
|
|
{
|
|
var change = new Ghre_TeacherChangeDto();
|
|
var change1 = await Db.Queryable<Ghre_TeacherChange>().OrderByDescending(x => x.CreateTime).FirstAsync(x => x.TeacherId == teacherId && (x.Status == "Active" || x.Status == "Wait"));
|
|
if (change1 != null)
|
|
{
|
|
change = Mapper.Map(change1).ToANew<Ghre_TeacherChangeDto>();
|
|
change.OriginChangeDate = change.ChangeDate;
|
|
change.OriginChangeType = change.ChangeType;
|
|
change.OriginPrice = change.Price;
|
|
change.OriginSkillPoints = change.SkillPoints;
|
|
change.OriginTeacherLevel = change.TeacherLevel;
|
|
|
|
change.ChangeDate = null;
|
|
change.ChangeType = null;
|
|
change.Price = null;
|
|
change.SkillPoints = null;
|
|
change.TeacherLevel = null;
|
|
change.RemarkSz = null;
|
|
change.DeptOrSchoolName = change.TeacherType == "Out" ? (await Db.Queryable<Ghre_School>().FirstAsync(o => o.Id == change.SchoolId))?.SchoolName : (await Db.Queryable<Ghro_Dept>().FirstAsync(o => o.DeptID == change.DeptID))?.DeptName;
|
|
|
|
var teacherAttachments = await Db.Queryable<Ghre_TeacherChangeAttachment>().Where(x => x.TeacherChangeId == change.Id).ToListAsync();
|
|
|
|
change.TeacherAttachments = Mapper.Map(teacherAttachments).ToANew<List<Ghre_TeacherChangeAttachmentDto>>();
|
|
var ids1 = teacherAttachments.Select(x => x.Id.ToString()).ToList();
|
|
var attachments = await _ghre_AttachmentServices.QueryDto(x => ids1.Contains(x.TableName));
|
|
change.TeacherAttachments.ForEach(x =>
|
|
{
|
|
x.Attachments = attachments.Where(o => o.TableName == x.Id.ToString()).ToList();
|
|
});
|
|
}
|
|
else
|
|
{
|
|
var teacher = await Db.Queryable<Ghre_Teacher>().FirstAsync(x => x.Id == teacherId);
|
|
if (teacher != null)
|
|
{
|
|
change.TeacherType = teacher.TeacherType;
|
|
change.OriginTeacherLevel = teacher.TeacherLevel;
|
|
change.OriginPrice = teacher.Price;
|
|
change.OriginSkillPoints = teacher.SkillPoints;
|
|
change.SchoolId = teacher.SchoolId;
|
|
change.DeptID = teacher.DeptID;
|
|
change.DeptOrSchoolName = change.OriginTeacherLevel == "Out" ? (await Db.Queryable<Ghre_School>().FirstAsync(o => o.Id == change.SchoolId))?.SchoolName : (await Db.Queryable<Ghro_Dept>().FirstAsync(o => o.DeptID == change.DeptID))?.DeptName;
|
|
change.PhotoUrl = teacher.PhotoUrl;
|
|
|
|
var teacherAttachments = await Db.Queryable<Ghre_TeacherAttachment>().Where(x => x.TeacherId == teacher.Id).ToListAsync();
|
|
|
|
change.TeacherAttachments = Mapper.Map(teacherAttachments).ToANew<List<Ghre_TeacherChangeAttachmentDto>>();
|
|
var ids1 = teacherAttachments.Select(x => x.Id.ToString()).ToList();
|
|
var attachments = await _ghre_AttachmentServices.QueryDto(x => ids1.Contains(x.TableName));
|
|
change.TeacherAttachments.ForEach(x =>
|
|
{
|
|
x.Attachments = attachments.Where(o => o.TableName == x.Id.ToString()).ToList();
|
|
});
|
|
}
|
|
}
|
|
return ServiceResult<Ghre_TeacherChangeDto>.OprateSuccess("执行成功!", change);
|
|
|
|
}
|
|
} |