Files
kunshan-bzfm-mes-backend/DOAN.Service/MES/Group/SkillMatrixService.cs
2025-03-19 13:44:59 +08:00

195 lines
7.7 KiB
C#

using DOAN.Model.MES.group;
using DOAN.Service.group.IService;
using System;
using SqlSugar;
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using DOAN.Model;
using DOAN.Model.MES.group.Dto;
using DOAN.Model.MES.group;
using DOAN.Repository;
using DOAN.Service.group.IService;
using System.Linq;
using Mapster;
using DOAN.Service.MES.group.IService;
using DOAN.Model.MES.base_;
using NPOI.SS.Formula.Functions;
using System.Dynamic;
namespace DOAN.Service.group
{
/// <summary>
/// 班次Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(ISkillMatrixService), ServiceLifetime = LifeTime.Transient)]
public class SkillMatrixService : BaseService<GroupShift>, ISkillMatrixService
{
public List<GroupSchedule> GetAllGroups(DateTime date)
{
return Context.Queryable<GroupSchedule>().Where(it => it.Status == 1)
.Where(it => it.ScheduleDate == date)
.ToList();
}
public List<BaseGroup> GetAllGroups()
{
return Context.Queryable<BaseGroup>().Where(it => it.Status == 1).ToList();
}
public List<BaseWorkRoute> GetAllRoutes()
{
return Context.Queryable<BaseWorkRoute>().Where(it => it.Status == 1).ToList();
}
public List<GroupPerson> GetPersonsList(string group_code)
{
var query = Context.Queryable<GroupRelPersonGroup>()
.Where(it => it.GroupCode == group_code);
var result = Context.Queryable(query).LeftJoin<GroupPerson>((q, p) => q.FkPersonId == p.Id)
.Select((q, p) => p).ToList();
return result;
}
// 获取组的人员列表
//public List<GroupPerson> GetPersonsList(string group_code)
//{
//}
/// <summary>
/// 获取人员在某一工艺流程下技能的详情
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public HandleSkillInfoDto GetSkillsDetailofPepole(HandleSkillQueryDto parm)
{
HandleSkillInfoDto handleSkillInfoDto = new HandleSkillInfoDto();
// 3 人员技能列表
List<dynamic> personOfKills_List = new List<dynamic>();
List<GroupPersonDto> groupPeople = Context.Queryable<GroupPerson>().LeftJoin<GroupPost>((pe, po) => pe.FkPost == po.Id)
.Where((pe, po) => parm.person_id.Contains(pe.Id))
.Select((pe, po) => new GroupPersonDto() { PostName = po.PostName }, true)
.ToList();
if (groupPeople != null && groupPeople.Count() > 0)
{
foreach (GroupPersonDto person in groupPeople)
{
dynamic personOfKills = new ExpandoObject();
personOfKills.personId = person.Id;
personOfKills.personName = person.Name;
personOfKills.workNum = person.WorkNum;
personOfKills.postName = person.PostName;
personOfKills_List.Add(personOfKills);
}
}
handleSkillInfoDto.tableList = personOfKills_List;
// 1 获取工艺流程
handleSkillInfoDto.RouteName = Context.Queryable<BaseWorkRoute>().Where(it => it.Id == parm.Route_id).Select(it => it.Name).First();
// 2 获取工艺流程绑定的工序
List<BaseWorkProcesses> Processess = Context.Queryable<BaseRelWorkRouteProcesses>().LeftJoin<BaseWorkProcesses>((rel, p) => rel.FkWorkProcesses == p.Id)
.Where((rel, p) => rel.FkWorkRoute == parm.Route_id).Select((rel, p) => p).ToList();
List<Columprocesses> colums_process_List = new List<Columprocesses>();
if (Processess != null && Processess.Count() > 0)
{
foreach (var processItem in Processess)
{
Columprocesses columprocesses = new Columprocesses();
columprocesses.processesName = processItem.Name;
List<StationChlidren> chlidren_workstation_List = new List<StationChlidren>();
// 获取工序下的工位
List<BaseWorkStation> workStationList = Context.Queryable<BaseWorkStation>().Where(it => it.FkWorkProcesses == processItem.Id).ToList();
if (workStationList != null && workStationList.Count() > 0)
{
foreach (var workstation_item in workStationList)
{
StationChlidren chlidren = new StationChlidren();
chlidren.stationName = workstation_item.WorkStationDescription;
// 获取工位下的技能
List<GroupPersonSkill> skillList = Context.Queryable<GroupRelWorkstationSkill>()
.LeftJoin<GroupPersonSkill>((rel, skill) => rel.FkSkillId == skill.Id)
.Where((rel, skill) => rel.FkWorkstationId == workstation_item.Id)
.Select((rel, skill) => skill)
.Distinct()
.ToList();
List<Skillschlidren> children_skill_list = new List<Skillschlidren>();
if (skillList != null && skillList.Count() > 0)
{
foreach (var skill_item in skillList)
{
Skillschlidren skillschlidren = new Skillschlidren();
skillschlidren.skillId = skill_item.Id;
skillschlidren.skillName = skill_item.SkillName;
children_skill_list.Add(skillschlidren);
// 判断在这个工位这个技能在某个人的评分
foreach (dynamic person in handleSkillInfoDto.tableList)
{
string person_id = person.personId;
GroupRelPersonSkill skill = Context.Queryable<GroupRelPersonSkill>()
.Where(it => it.FkSkillId == skill_item.Id)
.Where(it => it.FkPersonId == person_id)
.First();
if (skill != null)
{
//person.SetScore(skill.FkSkillId + index, skill.Score.Value);
// person[skill.FkSkillId + index] = skill.Score.Value;
IDictionary<string, object> personDict = (IDictionary<string, object>)person;
string key = skill.FkSkillId;
personDict[key] = skill.Score.Value;
}
}
}
}
chlidren.children = children_skill_list;
chlidren_workstation_List.Add(chlidren);
}
}
columprocesses.children = chlidren_workstation_List;
colums_process_List.Add(columprocesses);
}
}
handleSkillInfoDto.colums = colums_process_List;
return handleSkillInfoDto;
}
}
}