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.
422 lines
17 KiB
422 lines
17 KiB
using SqlSugar.Extensions;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Tiobon.Core.Services;
|
|
|
|
/// <summary>
|
|
/// 岗位技能_宝连通 (服务)
|
|
/// </summary>
|
|
public class Ghre_TitleSkill_BoltoneServices : BaseServices<Ghre_TitleSkill_Boltone, Ghre_TitleSkill_BoltoneDto, InsertGhre_TitleSkill_BoltoneInput, EditGhre_TitleSkill_BoltoneInput>, IGhre_TitleSkill_BoltoneServices
|
|
{
|
|
private readonly IBaseRepository<Ghre_TitleSkill_Boltone> _dal;
|
|
private readonly ICommonServices _commonServices;
|
|
private readonly IGhra_StaffServices _staffServices;
|
|
public Ghre_TitleSkill_BoltoneServices(ICaching caching,
|
|
IBaseRepository<Ghre_TitleSkill_Boltone> dal,
|
|
IGhra_StaffServices staffServices,
|
|
ICommonServices commonServices)
|
|
{
|
|
this._dal = dal;
|
|
base.BaseDal = dal;
|
|
base._caching = caching;
|
|
_staffServices = staffServices;
|
|
_commonServices = commonServices;
|
|
}
|
|
public override async Task<ServicePageResult<Ghre_TitleSkill_BoltoneDto>> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true)
|
|
{
|
|
if (filter.orderBy == "EffectiveDate1")
|
|
filter.orderBy = "EffectiveDate";
|
|
if (filter.orderBy == "ExpiryDate1")
|
|
filter.orderBy = "ExpiryDate";
|
|
|
|
var result = await base.QueryFilterPage(filter, condition, IsEnable);
|
|
var DT_TableDataT1 = result.result.DT_TableDataT1;
|
|
|
|
var deptIds = DT_TableDataT1.Select(x => x.DeptId).Distinct().ToList();
|
|
var courseIds = DT_TableDataT1.Select(x => x.CourseId).Distinct().ToList();
|
|
var titleIds = DT_TableDataT1.Select(x => x.TitleId).Distinct().ToList();
|
|
|
|
var depts = await Db.Queryable<Ghro_Dept>().Where(x => deptIds.Contains(x.DeptID)).ToListAsync();
|
|
|
|
var deptIds1 = depts.Select(x => x.ParentDeptID).Distinct().ToList();
|
|
depts = await Db.Queryable<Ghro_Dept>().Where(x => deptIds.Contains(x.DeptID) || deptIds1.Contains(x.DeptID)).ToListAsync();
|
|
var courses = await Db.Queryable<Ghre_Course>().Where(x => courseIds.Contains(x.Id)).ToListAsync();
|
|
var courseScenes = await Db.Queryable<Ghre_CourseScene>().Where(x => courseIds.Contains(x.Id)).ToListAsync();
|
|
var titles = await Db.Queryable<Ghra_Title>().Where(x => titleIds.Contains(x.TitleID)).ToListAsync();
|
|
|
|
for (int i = 0; i < DT_TableDataT1.Count; i++)
|
|
{
|
|
if (DT_TableDataT1[i].CourseId.IsNotEmptyOrNull())
|
|
DT_TableDataT1[i].CourseName = courses.Where(x => x.Id == DT_TableDataT1[i].CourseId).Select(x => x.CourseName).FirstOrDefault();
|
|
if (DT_TableDataT1[i].CourseName.IsNullOrEmpty())
|
|
DT_TableDataT1[i].CourseName = courseScenes.Where(x => x.Id == DT_TableDataT1[i].CourseId).Select(x => x.SceneName).FirstOrDefault();
|
|
|
|
|
|
if (DT_TableDataT1[i].DeptId.IsNotEmptyOrNull())
|
|
{
|
|
var dept = depts.Where(x => x.DeptID == DT_TableDataT1[i].DeptId).FirstOrDefault();
|
|
DT_TableDataT1[i].DeptName = dept?.DeptName;
|
|
|
|
if (dept != null && dept.ParentDeptID.IsNotEmptyOrNull())
|
|
DT_TableDataT1[i].ParentDeptName = await Db.Queryable<Ghro_Dept>().Where(x => x.DeptID == dept.ParentDeptID).Select(X => X.DeptName).FirstAsync();
|
|
|
|
}
|
|
if (DT_TableDataT1[i].TitleId.IsNotEmptyOrNull())
|
|
DT_TableDataT1[i].TitleName = titles.Where(x => x.TitleID == DT_TableDataT1[i].TitleId).Select(x => x.TitleName).FirstOrDefault();
|
|
DT_TableDataT1[i].EffectiveDate1 = DateTimeHelper.ConvertToDayString(DT_TableDataT1[i].EffectiveDate);
|
|
DT_TableDataT1[i].ExpiryDate1 = DateTimeHelper.ConvertToDayString(DT_TableDataT1[i].ExpiryDate);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
//public override async Task<long> Add(InsertGhre_TitleSkill_BoltoneInput entity)
|
|
//{
|
|
// if (entity.StaffId != null)
|
|
// entity.StaffIds = JsonHelper.ObjToJson(entity.StaffId.OrderBy(n => n).ToList());
|
|
// if (entity.StaffId.IsNotEmptyOrNull() && entity.StaffId.Count > 0)
|
|
// entity.TrainNum = entity.StaffId.Count;
|
|
// if (entity.Months != null)
|
|
// entity.Month = JsonHelper.ObjToJson(entity.Months.OrderBy(n => n).ToList());
|
|
// var result = await base.Add(entity);
|
|
|
|
// return result;
|
|
//}
|
|
|
|
//public override async Task<bool> Update(long Id, EditGhre_TitleSkill_BoltoneInput editModel)
|
|
//{
|
|
// if (editModel.StaffId != null)
|
|
// editModel.StaffIds = JsonHelper.ObjToJson(editModel.StaffId);
|
|
|
|
// if (editModel.StaffId.IsNotEmptyOrNull() && editModel.StaffId.Count > 0)
|
|
// editModel.TrainNum = editModel.StaffId.Count;
|
|
// if (editModel.Months != null)
|
|
// editModel.Month = JsonHelper.ObjToJson(editModel.Months.OrderBy(n => n).ToList());
|
|
|
|
// var result = await base.Update(Id, editModel);
|
|
// return result;
|
|
//}
|
|
|
|
//public override async Task<ServiceFormResult<Ghre_TitleSkill_BoltoneDto>> QueryForm(QueryForm body)
|
|
//{
|
|
// var result = await base.QueryForm(body);
|
|
|
|
// string StaffIds = result.result.DT_TableDataT1[0].StaffIds;
|
|
// string Month = result.result.DT_TableDataT1[0].Month;
|
|
// if (!string.IsNullOrWhiteSpace(StaffIds))
|
|
// result.result.DT_TableDataT1[0].StaffId = JsonConvert.DeserializeObject<List<int>>(StaffIds);
|
|
|
|
// if (!string.IsNullOrWhiteSpace(Month))
|
|
// result.result.DT_TableDataT1[0].Months = JsonConvert.DeserializeObject<List<string>>(Month);
|
|
// if (result.result.DT_TableDataT1[0].TrainNum != null && result.result.DT_TableDataT1[0].TrainDays != null)
|
|
// result.result.DT_TableDataT1[0].TotalDays = result.result.DT_TableDataT1[0].TrainNum * result.result.DT_TableDataT1[0].TrainDays;
|
|
// return result;
|
|
//}
|
|
|
|
public async Task<dynamic> QueryMatrix(QueryBody filter)
|
|
{
|
|
dynamic obj = new ExpandoObject();
|
|
dynamic result = new ExpandoObject();
|
|
|
|
string titleSkillsCondition = "1=1";
|
|
int? TitleId = null;
|
|
DateTime? Date = null;
|
|
int? StaffId = null;
|
|
int? DeptId = null;
|
|
int? ParentDeptId = null;
|
|
long? CourseId = null;
|
|
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 (name == "TitleId")
|
|
{
|
|
var jsonParam = JsonConvert.DeserializeObject<JsonParam>(value);
|
|
|
|
if (jsonParam.columnValue.IsNotEmptyOrNull())
|
|
TitleId = jsonParam.columnValue.ObjToInt();
|
|
continue;
|
|
}
|
|
else if (name == "Date")
|
|
{
|
|
var jsonParam = JsonConvert.DeserializeObject<JsonParam>(value);
|
|
|
|
if (jsonParam.columnValue.IsNotEmptyOrNull())
|
|
Date = jsonParam.columnValue.ObjToDate();
|
|
continue;
|
|
}
|
|
else if (name == "StaffId")
|
|
{
|
|
var jsonParam = JsonConvert.DeserializeObject<JsonParam>(value);
|
|
|
|
if (jsonParam.columnValue.IsNotEmptyOrNull())
|
|
StaffId = jsonParam.columnValue.ObjToInt();
|
|
continue;
|
|
}
|
|
else if (name == "ParentDeptName")
|
|
{
|
|
var jsonParam = JsonConvert.DeserializeObject<JsonParam>(value);
|
|
|
|
if (jsonParam.columnValue.IsNotEmptyOrNull())
|
|
ParentDeptId = jsonParam.columnValue.ObjToInt();
|
|
continue;
|
|
}
|
|
else if (name == "DeptName")
|
|
{
|
|
var jsonParam = JsonConvert.DeserializeObject<JsonParam>(value);
|
|
|
|
if (jsonParam.columnValue.IsNotEmptyOrNull())
|
|
DeptId = jsonParam.columnValue.ObjToInt();
|
|
continue;
|
|
}
|
|
else if (name == "CourseId")
|
|
{
|
|
var jsonParam = JsonConvert.DeserializeObject<JsonParam>(value);
|
|
|
|
if (jsonParam.columnValue.IsNotEmptyOrNull())
|
|
CourseId = jsonParam.columnValue.ObjToLong();
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if (TitleId != null)
|
|
titleSkillsCondition += $" AND TitleId='{TitleId}'";
|
|
|
|
if (CourseId != null)
|
|
titleSkillsCondition += $" AND CourseId='{CourseId}'";
|
|
|
|
if (Date != null)
|
|
titleSkillsCondition += $" AND EffectiveDate <='{Date}' AND ExpiryDate >='{Date}'";
|
|
|
|
var deptIds1 = new List<int?>();
|
|
if (DeptId != null)
|
|
deptIds1.Add(DeptId);
|
|
|
|
if (ParentDeptId != null)
|
|
{
|
|
var deptIds = await Db.Queryable<Ghro_Dept>()
|
|
.Where(x => x.ParentDeptID != null && x.ParentDeptID == ParentDeptId)
|
|
.Select(x => x.DeptID).ToListAsync();
|
|
if (deptIds.Any())
|
|
deptIds1.AddRange(deptIds);
|
|
else deptIds1 = new List<int?>() { 0 };
|
|
}
|
|
if (deptIds1.Any())
|
|
{
|
|
titleSkillsCondition += " AND (";
|
|
var i = 0;
|
|
deptIds1.ForEach(x =>
|
|
{
|
|
if (i == 0)
|
|
titleSkillsCondition += $"DeptId={x}";
|
|
else
|
|
titleSkillsCondition += $" OR DeptId={x}";
|
|
|
|
i++;
|
|
});
|
|
titleSkillsCondition += ")";
|
|
}
|
|
|
|
var titleSkillsfilter = new QueryBody()
|
|
{
|
|
menuName = "F_TitleSkill_Boltone",
|
|
pageNum = 1,
|
|
pageSize = 10000,
|
|
orderBy = ""
|
|
};
|
|
|
|
var src = Db.Queryable<Ghre_TitleSkill_Boltone>();
|
|
|
|
|
|
|
|
var titleSkills = await QueryFilterPage(titleSkillsfilter, titleSkillsCondition);
|
|
|
|
var group1 = titleSkills.result.DT_TableDataT1
|
|
.Select(x => new
|
|
{
|
|
x.DeptId,
|
|
x.TitleId
|
|
}).Distinct().ToList();
|
|
|
|
string condition = "1=1";
|
|
|
|
if (group1.Any())
|
|
{
|
|
condition += "AND (";
|
|
var i = 0;
|
|
group1.ForEach(x =>
|
|
{
|
|
if (i == 0)
|
|
condition += $"(DeptId={x.DeptId} AND TitleId={x.TitleId})";
|
|
else
|
|
condition += $"OR (DeptId={x.DeptId} AND TitleId={x.TitleId})";
|
|
|
|
i++;
|
|
});
|
|
condition += ")";
|
|
}
|
|
else
|
|
condition += $" AND 1!=1";
|
|
|
|
if (deptIds1.Any())
|
|
{
|
|
condition += " AND (";
|
|
var i = 0;
|
|
deptIds1.ForEach(x =>
|
|
{
|
|
if (i == 0)
|
|
condition += $"DeptId={x}";
|
|
else
|
|
condition += $" OR DeptId={x}";
|
|
|
|
i++;
|
|
});
|
|
condition += ")";
|
|
}
|
|
|
|
if (StaffId != null)
|
|
condition += $" AND StaffID={StaffId}";
|
|
var result2 = await _staffServices.QueryFilterPage(filter, condition);
|
|
|
|
var DT_TableDataT1 = result2.result.DT_TableDataT1;
|
|
|
|
var param = new ModuleParam()
|
|
{
|
|
langId = filter.langId,
|
|
menuName = filter.menuName
|
|
};
|
|
var module = await _commonServices.GetModuleInfoAsync(param);
|
|
|
|
var columns = new JArray();
|
|
|
|
//var src = Db.Queryable<Ghre_StudyRecord>();
|
|
for (int i = 0; i < result2.result.DT_TableDataT1.Count; i++)
|
|
{
|
|
var column = result2.result.DT_TableDataT1[i];
|
|
|
|
column.Reverse16 = await GetParaLabel("R09", column.Reverse16);
|
|
|
|
var item1 = new JObject
|
|
{
|
|
new JProperty("StaffID", column.StaffID),
|
|
new JProperty("DeptName", column.DeptName),
|
|
new JProperty("IndateLabel", column.IndateLabel),
|
|
new JProperty("StaffNo", column.StaffNo),
|
|
new JProperty("StaffName", column.StaffName),
|
|
new JProperty("StaffType1Label", column.Reverse16),
|
|
new JProperty("TitleName", column.TitleName),
|
|
new JProperty("ParentDeptName", column.ParentDeptName),
|
|
|
|
};
|
|
//× 生手 技能有效期内所对应课程还未分配或课程学习时长为0
|
|
//◑ 受训中 技能有效期内所对应课程学习时长大于0小时
|
|
//☆ 熟练工 技能有效期内所对应的课程学习状态为已完成(含必修、选修课程状态)
|
|
//★ 可带教 员工技能所对应的课程学习状态已完成,且通过讲师课程培训学习和考核
|
|
|
|
for (int j = 0; j < titleSkills.result.DT_TableDataT1.Count; j++)
|
|
{
|
|
var item = titleSkills.result.DT_TableDataT1[j];
|
|
if (column.DeptID != item.DeptId || column.TitleID != item.TitleId)
|
|
continue;
|
|
var key = item.CourseId + "_" + item.DeptId + "_" + item.RequiredElective;
|
|
|
|
var value = "×";
|
|
|
|
if (await Db.Queryable<Ghre_StudyRecord>().Where(x =>
|
|
(x.CourseId == item.CourseId || x.CourseSceneId == item.CourseId) &&
|
|
x.StaffId == column.StaffID &&
|
|
x.StudyStatus == "NoFinish" &&
|
|
((x.CourseBeginTime >= item.EffectiveDate && x.CourseBeginTime <= item.ExpiryDate) || (x.CourseEndTime >= item.EffectiveDate && x.CourseEndTime <= item.ExpiryDate))
|
|
).AnyAsync())
|
|
value = "◑";
|
|
if (await Db.Queryable<Ghre_StudyRecord>().Where(x =>
|
|
(x.CourseId == item.CourseId || x.CourseSceneId == item.CourseId) &&
|
|
x.StaffId == column.StaffID &&
|
|
x.StudyStatus == "HasFinish" &&
|
|
((x.CourseBeginTime >= item.EffectiveDate && x.CourseBeginTime <= item.ExpiryDate) || (x.CourseEndTime >= item.EffectiveDate && x.CourseEndTime <= item.ExpiryDate))
|
|
).AnyAsync())
|
|
value = "☆";
|
|
string courseName = string.Empty;
|
|
courseName = await Db.Queryable<Ghre_Course>().Where(x => x.Id == item.CourseId).Select(x => x.CourseName).FirstAsync();
|
|
if (courseName.IsNullOrEmpty())
|
|
courseName = await Db.Queryable<Ghre_CourseScene>().Where(x => x.Id == item.CourseId).Select(x => x.SceneName).FirstAsync();
|
|
|
|
|
|
long? courseId = null;
|
|
|
|
courseId = await Db.Queryable<Ghre_Course>().Where(x => x.CourseName.Contains(courseName) && x.CourseName.Contains("可带教")).Select(x => x.Id).FirstAsync();
|
|
if (courseId == 0)
|
|
courseId = await Db.Queryable<Ghre_CourseScene>().Where(x => x.SceneName.Contains(courseName) && x.SceneName.Contains("可带教")).Select(x => x.Id).FirstAsync();
|
|
|
|
if (courseId != null && courseId > 0)
|
|
if (await Db.Queryable<Ghre_StudyRecord>().Where(x =>
|
|
(x.CourseId == courseId || x.CourseSceneId == courseId) &&
|
|
x.StaffId == column.StaffID &&
|
|
x.StudyStatus == "HasFinish" &&
|
|
((x.CourseBeginTime >= item.EffectiveDate && x.CourseBeginTime <= item.ExpiryDate) || (x.CourseEndTime >= item.EffectiveDate && x.CourseEndTime <= item.ExpiryDate))
|
|
).AnyAsync())
|
|
value = "★";
|
|
item1.Add(new JProperty(key, value));
|
|
}
|
|
|
|
columns.Add(item1);
|
|
}
|
|
|
|
|
|
var list = titleSkills.result.DT_TableDataT1.Select(x => new
|
|
{
|
|
Code = x.DeptId + "_" + x.TitleId + "_" + x.RequiredElective,
|
|
Name = x.DeptName + "(" + x.RequiredElective + ")",
|
|
x.CourseId,
|
|
x.CourseName,
|
|
x.DeptId,
|
|
x.DeptName,
|
|
x.TitleId,
|
|
x.TitleName,
|
|
x.RequiredElective,
|
|
}).ToList();
|
|
|
|
var group = list.GroupBy(x => new { x.Name })
|
|
.Select(x =>
|
|
new
|
|
{
|
|
x.Key.Name,
|
|
items = x.ToList()
|
|
|
|
}).ToList();
|
|
group = group.OrderBy(x => x.Name).ToList();
|
|
|
|
var demoColumn = module.Data.JM_TableColumnT1.TableColumn.Where(x => x.field == "Demo").FirstOrDefault();
|
|
group.ForEach(x =>
|
|
{
|
|
x.items.ForEach(item =>
|
|
{
|
|
var field = item.CourseId + "_" + item.DeptId + "_" + item.RequiredElective;
|
|
if (!module.Data.JM_TableColumnT1.TableColumn.Where(x => x.field == field).Any())
|
|
{
|
|
|
|
var column1 = Mapper.Map(demoColumn).ToANew<TableColumn>();
|
|
column1.field = field;
|
|
column1.label = item.CourseName;
|
|
column1.GroupName = x.Name;
|
|
module.Data.JM_TableColumnT1.TableColumn.Add(column1);
|
|
}
|
|
});
|
|
|
|
});
|
|
module.Data.JM_TableColumnT1.TableColumn = module.Data.JM_TableColumnT1.TableColumn.Where(x => x.field != "Demo").ToList();
|
|
|
|
|
|
result.JM_TableColumnT1 = module.Data.JM_TableColumnT1;
|
|
result.DT_TablePageInfoT1 = result2.result.DT_TablePageInfoT1;
|
|
result.DT_TableDataT1 = columns;
|
|
obj.result = result;
|
|
obj.Success = true;
|
|
obj.code = "0";
|
|
obj.type = "success";
|
|
obj.message = "查询成功!";
|
|
return obj;
|
|
}
|
|
} |