必选修规则生成学习记录同步生成规则结果数据

master
xiaochanghai 11 months ago
parent e99eaf3a62
commit 4d921f7de4
  1. 25
      Tiobon.Core.Api/Tiobon.Core.Model.xml
  2. 33
      Tiobon.Core.Model/Consts.cs
  3. 21
      Tiobon.Core.Services/CommonServices.cs
  4. 119
      Tiobon.Core.Services/Ghre/Ghre_StudyRuleServices.cs
  5. 260
      Tiobon.Core/Tiobon.Core.Model.xml
  6. 5
      Tiobon.Core/Tiobon.Core.xml

@ -12587,6 +12587,31 @@
考试管理-关联类型-場景
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_STUDY_RECORD_COURSE_STATUS_IN">
<summary>
培训记录-课程状态-进行中
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_STUDY_RECORD_COURSE_STATUS_OVER">
<summary>
培训记录-课程状态-已结束
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_STUDY_RECORD_STUDY_STATUS_NO_JOIN">
<summary>
培训记录-学习状态-未参与
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_STUDY_RECORD_STUDY_STATUS_FINISH">
<summary>
培训记录-学习状态-未完成
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_STUDY_RECORD_STUDY_STATUS_HAS_FINISH">
<summary>
培训记录-学习状态-已完成
</summary>
</member>
<member name="F:Tiobon.Core.Model.AuthorityScopeEnum.NONE">
<summary>
无任何权限

@ -42,4 +42,37 @@ public class Consts
/// </summary>
public const string DIC_EXAM_DATE_TYPE_COURSE_SCENE = "CourseSceneId";
#endregion
#region 培训记录-课程状态
/// <summary>
/// 培训记录-课程状态-进行中
/// </summary>
public const string DIC_STUDY_RECORD_COURSE_STATUS_IN = "In";
/// <summary>
/// 培训记录-课程状态-已结束
/// </summary>
public const string DIC_STUDY_RECORD_COURSE_STATUS_OVER = "Over";
#endregion
#region 培训记录-学习状态
/// <summary>
/// 培训记录-学习状态-未参与
/// </summary>
public const string DIC_STUDY_RECORD_STUDY_STATUS_NO_JOIN = "NoJoin";
/// <summary>
/// 培训记录-学习状态-未完成
/// </summary>
public const string DIC_STUDY_RECORD_STUDY_STATUS_FINISH = "NoFinish";
/// <summary>
/// 培训记录-学习状态-已完成
/// </summary>
public const string DIC_STUDY_RECORD_STUDY_STATUS_HAS_FINISH = "HasFinish";
#endregion
}

@ -1061,7 +1061,6 @@ public partial class CommonServices : BaseServices<RootEntityTkey<int>>, ICommon
result.JM_PageControlT1.Toolbar.RemoveAt(index);
break;
case "F_SchoolManage":
case "F_RequiredElectiveRules":
case "F_WorkLicenseManage":
case "F_TeacherManage":
toolbar = result.JM_PageControlT1.Toolbar.Where(x => x.fnKey == "NewYN").FirstOrDefault();
@ -1101,6 +1100,26 @@ public partial class CommonServices : BaseServices<RootEntityTkey<int>>, ICommon
toolbar = result.JM_PageControlT1.Toolbar.Where(x => x.fnKey == "DetailYN").FirstOrDefault();
if (toolbar != null) { toolbar.fnKey = "TBD3YN"; }
break;
case "F_RequiredElectiveRules":
toolbar = result.JM_PageControlT1.Toolbar.Where(x => x.fnKey == "NewYN").FirstOrDefault();
if (toolbar != null) toolbar.fnKey = "TBD1YN";
toolbar = result.JM_PageControlT1.Toolbar.Where(x => x.fnKey == "UpdateYN").FirstOrDefault();
if (toolbar != null) toolbar.fnKey = "TBD2YN";
toolbar = result.JM_PageControlT1.Toolbar.Where(x => x.fnKey == "DetailYN").FirstOrDefault();
if (toolbar != null) toolbar.fnKey = "TBD3YN";
toolbar = result.JM_PageControlT1.Toolbar.Where(x => x.fnKey == "CopyYN").FirstOrDefault();
if (toolbar != null) toolbar.fnKey = "TBD4YN";
result.JM_PageControlT1.Toolbar.Add(new Toolbar()
{
display = true,
fnKey = "TBD5YN",
fnTitle = "结果",
fnType = "row",
icon = "ghr-preview",
position = "left"
});
break;
}
#endregion

@ -11,6 +11,9 @@ using Newtonsoft.Json;
using Tiobon.Core.Common.Helper;
using Org.BouncyCastle.Crypto;
using SqlSugar;
using MathNet.Numerics.Distributions;
using MongoDB.Driver.Linq;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
namespace Tiobon.Core.Services;
@ -166,6 +169,7 @@ public class Ghre_StudyRuleServices : BaseServices<Ghre_StudyRule, Ghre_StudyRul
WHERE A.StaffName IS NULL";
await Db.Ado.ExecuteCommandAsync(sql);
await Task.Factory.StartNew(async () => await GenerateStaffStudyRecord(Db, Id));
return result;
}
@ -191,21 +195,112 @@ public class Ghre_StudyRuleServices : BaseServices<Ghre_StudyRule, Ghre_StudyRul
public async Task<bool> GenerateStaffStudyRecord(ISqlSugarClient Db, long ruleId)
{
var rule = await Db.Queryable<Ghre_StudyRule>().FirstAsync(x => x.Id == ruleId);
var ruleStaffs = await Db.Queryable<Ghre_StudyRuleStaff>().Where(x => x.StudyRuleId == ruleId).ToListAsync();
try
{
await Db.Ado.BeginTranAsync();
var rule = await Db.Queryable<Ghre_StudyRule>().FirstAsync(x => x.Id == ruleId);
var ruleStaffs = await Db.Queryable<Ghre_StudyRuleStaff>().Where(x => x.StudyRuleId == ruleId).ToListAsync();
await Db.Updateable<Ghre_StudyRuleResult>().Where(x => x.StudyRuleId == ruleId && x.IsEnable == 1)
.SetColumns(it => new Ghre_StudyRuleResult() { IsEnable = 0 })//类只能在表达示里面不能提取
.ExecuteCommandAsync();
var ruleStaffIds = ruleStaffs.Select(x => x.StaffId).ToList();
var staffs = await Db.Queryable<Ghra_Staff>()
.WhereIF(rule.ZoneId != null, x => x.ZoneID == rule.ZoneId)
.WhereIF(rule.DeptId != null, x => x.DeptID == rule.DeptId)
.WhereIF(rule.TitleId != null, x => x.TitleID == rule.TitleId)
.WhereIF(rule.GradeId != null, x => x.GradeID == rule.GradeId)
.WhereIF(rule.JobId != null, x => x.JobID == rule.JobId)
.WhereIF(ruleStaffIds != null && ruleStaffIds.Any(), x => ruleStaffIds.Contains(x.StaffID))
.WhereIF(rule.GradeId != null, x => x.GradeID == rule.GradeId)
.ToListAsync();
if (staffs != null)
{
DateTime courseTime = Db.GetDate();
var snap = await Db.Queryable<Ghre_CourseSnap>().FirstAsync(x => x.CourseId == rule.CourseId);
if (staffs.Any())
{
var inserts = new List<Ghre_StudyRecord>();
var insertResults = new List<Ghre_StudyRuleResult>();
await Db.Deleteable<Ghre_StudyRecord>().Where(x => x.StudyRuleId == ruleId && x.BeginTime == null).ExecuteCommandAsync();
for (int i = 0; i < staffs.Count; i++)
{
var staff = staffs[i];
var record = await Db.Queryable<Ghre_StudyRecord>()
.Where(x => x.StudyRuleId != ruleId && x.StaffId == staff.StaffID)
.WhereIF(!string.IsNullOrWhiteSpace(rule.Year), x => x.Year == rule.Year)
.FirstAsync();
if (record is null)
{
inserts.Add(new Ghre_StudyRecord()
{
StaffId = staff.StaffID,
CourseSnapId = snap.Id,
CourseId = rule.CourseId,
StudyRuleId = ruleId,
JoinTime = courseTime,
CourseBeginTime = courseTime,
CourseEndTime = courseTime.AddMonths(rule.DeadlineMonth ?? 3),
CourseType = rule.RuleType,
CourseStatus = Consts.DIC_STUDY_RECORD_COURSE_STATUS_IN,
StudyStatus = Consts.DIC_STUDY_RECORD_STUDY_STATUS_NO_JOIN,
Year = rule.Year
});
insertResults.Add(new Ghre_StudyRuleResult()
{
StaffId = staff.StaffID,
StudyRuleId = ruleId,
Status = "Success",
RemarkSz = "生成成功"
});
}
else insertResults.Add(new Ghre_StudyRuleResult()
{
StaffId = staff.StaffID,
StudyRuleId = ruleId,
Status = "FAIL",
RemarkSz = "生成失败,该课程学习记录已被其他规则生成!"
});
}
var ruleStaffIds = ruleStaffs.Select(x => x.StaffId).ToList();
if (inserts.Any())
await Db.Insertable(inserts).ExecuteReturnSnowflakeIdListAsync();
if (insertResults.Any())
await Db.Insertable(insertResults).ExecuteReturnSnowflakeIdListAsync();
var staffs = await Db.Queryable<Ghra_Staff>()
.WhereIF(rule.ZoneId != null, x => x.ZoneID == rule.ZoneId)
.WhereIF(rule.DeptId != null, x => x.DeptID == rule.DeptId)
.WhereIF(rule.TitleId != null, x => x.TitleID == rule.TitleId)
.WhereIF(rule.GradeId != null, x => x.GradeID == rule.GradeId)
.WhereIF(rule.JobId != null, x => x.JobID == rule.JobId)
.WhereIF(ruleStaffIds != null && ruleStaffIds.Any(), x => ruleStaffIds.Contains(x.StaffID))
.WhereIF(rule.GradeId != null, x => x.GradeID == rule.GradeId)
.ToListAsync();
rule.RemarkSz = "数据生成成功";
}
else
{
rule.RemarkSz = "未匹配到相关关人员数据!";
}
await Db.Updateable<Ghre_StudyRule>().Where(x => x.Id == ruleId)
.SetColumns(it => new Ghre_StudyRule() { RemarkSz = rule.RemarkSz })//类只能在表达示里面不能提取
.ExecuteCommandAsync();
}
await Db.Ado.CommitTranAsync();
string sql = @"UPDATE A
SET A.StaffName = B.StaffName, a.StaffNo = B.StaffNo
FROM Ghre_StudyRuleResult A LEFT JOIN Ghra_Staff B ON A.StaffId = B.StaffID
WHERE A.StaffName IS NULL";
await Db.Ado.ExecuteCommandAsync(sql);
}
catch (Exception)
{
await Db.Ado.RollbackTranAsync();
}
return true;
}
}

@ -3965,6 +3965,11 @@
学习状态
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRecordBase.Year">
<summary>
年度
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRecordBase.RemarkSz">
<summary>
备注
@ -4165,6 +4170,106 @@
预留字段12
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase">
<summary>
必选修规则结果 (Dto.Base)
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.StudyRuleId">
<summary>
必选修规则ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.StaffId">
<summary>
人员ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.StaffNo">
<summary>
工号
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.StaffName">
<summary>
员工姓名
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.Status">
<summary>
状态
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.RemarkSz">
<summary>
备注
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.IsDefault">
<summary>
默认标志
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.Reverse1">
<summary>
预留字段1
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.Reverse2">
<summary>
预留字段2
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.Reverse3">
<summary>
预留字段3
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.Reverse4">
<summary>
预留字段4
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.Reverse5">
<summary>
预留字段5
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.Reverse6">
<summary>
预留字段6
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.Reverse7">
<summary>
预留字段7
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.Reverse8">
<summary>
预留字段8
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.Reverse9">
<summary>
预留字段9
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.Reverse10">
<summary>
预留字段10
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.ReverseI1">
<summary>
预留字段11
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultBase.ReverseI2">
<summary>
预留字段12
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghre_StudyRuleStaffBase">
<summary>
必选修规则人员 (Dto.Base)
@ -5242,6 +5347,11 @@
必选修规则 (Dto.EditInput)
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.EditGhre_StudyRuleResultInput">
<summary>
必选修规则结果 (Dto.EditInput)
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.EditGhre_StudyRuleStaffInput">
<summary>
必选修规则人员 (Dto.EditInput)
@ -5427,6 +5537,11 @@
必选修规则 (Dto.InsertInput)
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.InsertGhre_StudyRuleResultInput">
<summary>
必选修规则结果 (Dto.InsertInput)
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.InsertGhre_StudyRuleStaffInput">
<summary>
必选修规则人员 (Dto.InsertInput)
@ -9596,6 +9711,11 @@
学习状态
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRecord.Year">
<summary>
年度
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRecord.RemarkSz">
<summary>
备注
@ -9796,6 +9916,106 @@
预留字段12
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghre_StudyRuleResult">
<summary>
必选修规则结果 (Model)
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.StudyRuleId">
<summary>
必选修规则ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.StaffId">
<summary>
人员ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.StaffNo">
<summary>
工号
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.StaffName">
<summary>
员工姓名
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.Status">
<summary>
状态
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.RemarkSz">
<summary>
备注
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.IsDefault">
<summary>
默认标志
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.Reverse1">
<summary>
预留字段1
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.Reverse2">
<summary>
预留字段2
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.Reverse3">
<summary>
预留字段3
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.Reverse4">
<summary>
预留字段4
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.Reverse5">
<summary>
预留字段5
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.Reverse6">
<summary>
预留字段6
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.Reverse7">
<summary>
预留字段7
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.Reverse8">
<summary>
预留字段8
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.Reverse9">
<summary>
预留字段9
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.Reverse10">
<summary>
预留字段10
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.ReverseI1">
<summary>
预留字段11
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResult.ReverseI2">
<summary>
预留字段12
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghre_StudyRuleStaff">
<summary>
必选修规则人员 (Model)
@ -12217,6 +12437,21 @@
修改信息
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghre_StudyRuleResultDto">
<summary>
必选修规则结果(Dto.View)
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultDto.CreateDataInfo">
<summary>
创建信息
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_StudyRuleResultDto.UpdateDataInfo">
<summary>
修改信息
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghre_StudyRuleStaffDto">
<summary>
必选修规则人员(Dto.View)
@ -12352,6 +12587,31 @@
考试管理-关联类型-場景
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_STUDY_RECORD_COURSE_STATUS_IN">
<summary>
培训记录-课程状态-进行中
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_STUDY_RECORD_COURSE_STATUS_OVER">
<summary>
培训记录-课程状态-已结束
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_STUDY_RECORD_STUDY_STATUS_NO_JOIN">
<summary>
培训记录-学习状态-未参与
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_STUDY_RECORD_STUDY_STATUS_FINISH">
<summary>
培训记录-学习状态-未完成
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_STUDY_RECORD_STUDY_STATUS_HAS_FINISH">
<summary>
培训记录-学习状态-已完成
</summary>
</member>
<member name="F:Tiobon.Core.Model.AuthorityScopeEnum.NONE">
<summary>
无任何权限

@ -956,6 +956,11 @@
必选修规则(Controller)
</summary>
</member>
<member name="T:Tiobon.Core.Api.Controllers.Ghre_StudyRuleResultController">
<summary>
必选修规则结果(Controller)
</summary>
</member>
<member name="T:Tiobon.Core.Api.Controllers.Ghre_StudyRuleStaffController">
<summary>
必选修规则人员(Controller)

Loading…
Cancel
Save