后台绩效报表

This commit is contained in:
何美荣 2026-07-24 17:59:44 +08:00
parent ddb6fae3db
commit 09ec3b7eec
2 changed files with 266 additions and 27 deletions

View File

@ -1,6 +1,7 @@
 
using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Entities.FM;
using APT.Infrastructure.Core; using APT.Infrastructure.Core;
using APT.MS.Domain.Enums;
using APT.MS.Domain.Enums.BI; using APT.MS.Domain.Enums.BI;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -141,6 +142,22 @@ namespace APT.MS.Domain.Entities.BI
/// 结束时间 /// 结束时间
/// </summary> /// </summary>
[Description("结束时间")] [Description("结束时间")]
public DateTime ENDTIME { get; set; } public DateTime ENDTIME { get; set; }
/// <summary>
/// 表单名称
/// </summary>
[Description("表单名称")]
public string FORM_NAME { get; set; }
/// <summary>
/// 表单状态
/// </summary>
[Description("表单状态")]
public string FORM_STATUS { get; set; }
/// <summary>
/// 是否超时
/// </summary>
[Description("是否超时")]
public FOISOVERTIME OVERTIME { get; set; }
} }
} }

View File

@ -52,6 +52,7 @@ using System.Net.NetworkInformation;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Threading.Tasks; using System.Threading.Tasks;
using static APT.SC.WebApi.Controllers.Api.BI.BIKanBanController; using static APT.SC.WebApi.Controllers.Api.BI.BIKanBanController;
using static NPOI.HSSF.Util.HSSFColor;
namespace APT.SC.WebApi.Controllers.Api.BIController namespace APT.SC.WebApi.Controllers.Api.BIController
{ {
@ -9737,31 +9738,24 @@ namespace APT.SC.WebApi.Controllers.Api.BIController
else else
departmentIds = departmentInfo.Select(t => t.ID).ToList(); departmentIds = departmentInfo.Select(t => t.ID).ToList();
BaseFilter baseFilter = new BaseFilter(orgId); BaseFilter baseFilter = new BaseFilter(orgId);
baseFilter.SelectField = new string[] { "ID", "DEPARTMENT_ID" }; baseFilter.SelectField = new string[] { "ID", "DEPARTMENT_ID" };
//var teams = GetEntities<T_FM_TEAM>(t => !t.IS_DELETED && departmentIds.Contains(t.DEPARTMENT_ID.Value), baseFilter); //var teams = GetEntities<T_FM_TEAM>(t => !t.IS_DELETED && departmentIds.Contains(t.DEPARTMENT_ID.Value), baseFilter);
//var teamIds = teams.Select(t => t.ID); //var teamIds = teams.Select(t => t.ID);
var completions = GetClassCompletion(orgId);// GetEntities<T_FM_DEPARTMENT_COMPLETION>(t => !t.IS_DELETED, new BaseFilter(orgId)).ToList(); var startTime = Convert.ToDateTime(DateTime.Now.AddMonths(-5).Year + "-" + DateTime.Now.AddMonths(-5).Month + "-01 00:00:00");
//var teamIds = completions.Select(t => t.TEAM_ID); var endTime = Convert.ToDateTime(DateTime.Now.Year + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day + " 23:59:59");
if (!string.IsNullOrEmpty(filter.Parameter2)) if (!string.IsNullOrEmpty(filter.Parameter2))
{ {
DateTime startTime = Convert.ToDateTime(filter.Parameter2); startTime = Convert.ToDateTime(filter.Parameter2);
completions = completions.Where(t => t.MONTH >= startTime).ToList(); //completions = completions.Where(t => t.MONTH >= startTime).ToList();
}
else
{
var startTime = Convert.ToDateTime(DateTime.Now.Year + "-" + DateTime.Now.AddMonths(-5).Month + "-01 00:00:00");
completions = completions.Where(t => t.MONTH >= startTime).ToList();
} }
if (!string.IsNullOrEmpty(filter.Parameter3)) if (!string.IsNullOrEmpty(filter.Parameter3))
{ {
DateTime endTime = Convert.ToDateTime(filter.Parameter3); endTime = Convert.ToDateTime(filter.Parameter3);
completions = completions.Where(t => t.MONTH <= endTime).ToList(); //completions = completions.Where(t => t.MONTH <= endTime).ToList();
}
else
{
var endTime = Convert.ToDateTime(DateTime.Now.Year + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day + " 23:59:59");
completions = completions.Where(t => t.MONTH <= endTime).ToList();
} }
var completions = GetClassCompletion(orgId,startTime, endTime);// GetEntities<T_FM_DEPARTMENT_COMPLETION>(t => !t.IS_DELETED, new BaseFilter(orgId)).ToList();
//var teamIds = completions.Select(t => t.TEAM_ID);
//if (teamIds != null && teamIds.Any()) //if (teamIds != null && teamIds.Any())
{ {
completionLists = completions.Where(m => m.TEAM_ID != null).GroupBy(t => new { t.TEAM_ID, t.TEAM_NAME }).Select(group => new GroupbyDepartmentId completionLists = completions.Where(m => m.TEAM_ID != null).GroupBy(t => new { t.TEAM_ID, t.TEAM_NAME }).Select(group => new GroupbyDepartmentId
@ -9800,11 +9794,39 @@ namespace APT.SC.WebApi.Controllers.Api.BIController
item.CALC = tempCalc; item.CALC = tempCalc;
} }
} }
List<T_FM_DEPARTMENT_COMPLETION_SORT> completionSorts1 = completionSorts.OrderByDescending(t => t.CALC).Take(8).ToList(); if (!string.IsNullOrEmpty(filter.Keyword))
{
if (filter.Keyword == "10")
{
var departId = departmentInfo.FirstOrDefault(t => t.NAME == "选矿部")?.ID;
if (departId != null)
{
List<Guid> parentIds = new List<Guid>();
parentIds.Add((Guid)departId);
List<Guid> allIds = new List<Guid>();
GetDepartmentIds(orgId, parentIds, ref allIds);
completionSorts = completionSorts.Where(t => t.TEAM_ID != null && allIds.Contains((Guid)t.TEAM_ID)).ToList();
}
}
if (filter.Keyword == "30")
{
var departId = departmentInfo.FirstOrDefault(t => t.NAME == "矿山部")?.ID;
if (departId != null)
{
List<Guid> parentIds = new List<Guid>();
parentIds.Add((Guid)departId);
List<Guid> allIds = new List<Guid>();
GetDepartmentIds(orgId, parentIds, ref allIds);
completionSorts = completionSorts.Where(t => t.TEAM_ID != null && allIds.Contains((Guid)t.TEAM_ID)).ToList();
}
}
}
//List<T_FM_DEPARTMENT_COMPLETION_SORT> completionSorts1 = completionSorts.OrderByDescending(t => t.CALC).Take(8).ToList();
List<T_FM_DEPARTMENT_COMPLETION_SORT> completionSorts1 = completionSorts.Where(m=>m.CALC!=0).OrderByDescending(t => t.CALC).ToList();
if (!string.IsNullOrEmpty(filter.Parameter1)) if (!string.IsNullOrEmpty(filter.Parameter1))
{ {
var param = int.Parse(filter.Parameter1.ToString()); var param = int.Parse(filter.Parameter1.ToString());
completionSorts1 = completionSorts.OrderByDescending(t => t.CALC).Take(param).ToList(); completionSorts1 = completionSorts1.OrderByDescending(t => t.CALC).Take(param).ToList();
} }
int i = 1; int i = 1;
foreach (var item in completionSorts1) foreach (var item in completionSorts1)
@ -9855,7 +9877,19 @@ namespace APT.SC.WebApi.Controllers.Api.BIController
//if (string.IsNullOrEmpty(filter.Keyword)) //if (string.IsNullOrEmpty(filter.Keyword))
// return ret; // return ret;
//var departmentInfo = this.GetEntities<T_FM_DEPARTMENT>(t => t.PRODUCTION_UNIT_ID == Guid.Parse(filter.Keyword.ToString()), new BaseFilter(orgId)); //var departmentInfo = this.GetEntities<T_FM_DEPARTMENT>(t => t.PRODUCTION_UNIT_ID == Guid.Parse(filter.Keyword.ToString()), new BaseFilter(orgId));
var completions = GetClassCompletion(orgId);//GetEntities<T_FM_DEPARTMENT_COMPLETION>(t => !t.IS_DELETED, new BaseFilter(orgId)).ToList(); var startTime = Convert.ToDateTime(DateTime.Now.AddMonths(-5).Year + "-" + DateTime.Now.AddMonths(-5).Month + "-01 00:00:00");
var endTime = Convert.ToDateTime(DateTime.Now.Year + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day + " 23:59:59");
if (!string.IsNullOrEmpty(filter.Parameter2))
{
startTime = Convert.ToDateTime(filter.Parameter2);
//completions = completions.Where(t => t.MONTH >= startTime).ToList();
}
if (!string.IsNullOrEmpty(filter.Parameter3))
{
endTime = Convert.ToDateTime(filter.Parameter3);
//completions = completions.Where(t => t.MONTH <= endTime).ToList();
}
var completions = GetClassCompletion(orgId, startTime, endTime);//GetEntities<T_FM_DEPARTMENT_COMPLETION>(t => !t.IS_DELETED, new BaseFilter(orgId)).ToList();
var departmentInfos = this.GetEntities<T_FM_DEPARTMENT>(t => t.ENABLE_STATUS == 0 && t.CATEGORY == FMCATEGORY.ACTURE, new BaseFilter(orgId), "Nav_Parent"); var departmentInfos = this.GetEntities<T_FM_DEPARTMENT>(t => t.ENABLE_STATUS == 0 && t.CATEGORY == FMCATEGORY.ACTURE, new BaseFilter(orgId), "Nav_Parent");
//List<T_FM_DEPARTMENT> listDepBM = new List<T_FM_DEPARTMENT>(); //List<T_FM_DEPARTMENT> listDepBM = new List<T_FM_DEPARTMENT>();
@ -10013,17 +10047,16 @@ namespace APT.SC.WebApi.Controllers.Api.BIController
} }
/// <summary> /// <summary>
/// 返回所有下级部门节点 /// 返回班前会议、班组活动记录
/// </summary> /// </summary>
/// <param name="orgId"></param> /// <param name="orgId"></param>
/// <param name="listDepIDInt"></param> /// <param name="listDepIDInt"></param>
/// <param name="departmentIdPs"></param> /// <param name="departmentIdPs"></param>
public List<T_FM_DEPARTMENT_COMPLETION> GetClassCompletion(Guid orgId) public List<T_FM_DEPARTMENT_COMPLETION> GetClassCompletion(Guid orgId,DateTime startTime, DateTime endTime)
{ {
List<T_FM_DEPARTMENT_COMPLETION> completions = new List<T_FM_DEPARTMENT_COMPLETION>(); List<T_FM_DEPARTMENT_COMPLETION> completions = new List<T_FM_DEPARTMENT_COMPLETION>();
BaseFilter baseFilter = new BaseFilter(orgId); BaseFilter baseFilter = new BaseFilter(orgId);
var startTime = Convert.ToDateTime(DateTime.Now.AddMonths(-5).Year + "-" + DateTime.Now.AddMonths(-5).Month + "-01 00:00:00");
var endTime = Convert.ToDateTime(DateTime.Now.Year + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day + " 23:59:59");
baseFilter.SelectField = new string[] { "ID", "NAME", "DEPARTMENT_TYPE", "Nav_Parent.NAME", "PARENT_ID" }; baseFilter.SelectField = new string[] { "ID", "NAME", "DEPARTMENT_TYPE", "Nav_Parent.NAME", "PARENT_ID" };
var departments = GetEntities<T_FM_DEPARTMENT>(t => !t.IS_DELETED && t.ENABLE_STATUS == 0, baseFilter); var departments = GetEntities<T_FM_DEPARTMENT>(t => !t.IS_DELETED && t.ENABLE_STATUS == 0, baseFilter);
baseFilter.SelectField = new string[] { "ID", "DEPARTMENT_ID" }; baseFilter.SelectField = new string[] { "ID", "DEPARTMENT_ID" };
@ -12617,6 +12650,195 @@ namespace APT.SC.WebApi.Controllers.Api.BIController
} }
return result; return result;
} }
/// <summary>
/// 查询所有数据
/// </summary>
/// <param name="filter">过滤实体</param>
/// <returns></returns>
[HttpPost, Route("GetSafeEntities")]
public JsonActionResult<List<T_BI_SAFETASK_FINISH>> GetSafeEntities([FromBody] KeywordFilter filter)
{
return SafeExecute<List<T_BI_SAFETASK_FINISH>>(() =>
{
List<T_BI_SAFETASK_FINISH> completions = new List<T_BI_SAFETASK_FINISH>();
var startTime = Convert.ToDateTime(DateTime.Now.AddMonths(-1).Year + "-" + DateTime.Now.AddMonths(-1).Month + "-01 00:00:00");
var endTime = Convert.ToDateTime(DateTime.Now.Year + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day + " 23:59:59");
if (!string.IsNullOrEmpty(filter.Parameter2))
{
startTime = Convert.ToDateTime(filter.Parameter2);
//completions = completions.Where(t => t.MONTH >= startTime).ToList();
}
if (!string.IsNullOrEmpty(filter.Parameter3))
{
endTime = Convert.ToDateTime(filter.Parameter3);
//completions = completions.Where(t => t.MONTH <= endTime).ToList();
}
BaseFilter baseFilter = new BaseFilter(filter.OrgId);
baseFilter.SelectField = new string[] { "ID", "NAME", "DEPARTMENT_TYPE", "Nav_Parent.NAME", "PARENT_ID" };
var departments = GetEntities<T_FM_DEPARTMENT>(t => !t.IS_DELETED && t.ENABLE_STATUS == 0, baseFilter);
var allInfos = GetSafeTaskFinish(filter.OrgId.Value, startTime, endTime);
var teamIds = allInfos.Select(t => t.TEAM_ID).Distinct().ToList();
if (teamIds != null && teamIds.Any())
{
foreach (var item in teamIds)
{
var first = departments.FirstOrDefault(t => t.ID == item);
var biSafeFinish = new T_BI_SAFETASK_FINISH();
biSafeFinish.ORG_ID = filter.OrgId.Value;
biSafeFinish.TEAM_ID = item;
biSafeFinish.TEAM_NAME = first?.NAME;
var parentInfo = departments.FirstOrDefault(t => t.ID == first?.PARENT_ID);
if (parentInfo != null)
{
if (parentInfo.DEPARTMENT_TYPE == 15)
{
var parentUp = departments.FirstOrDefault(t => t.ID == parentInfo.PARENT_ID);
if (parentUp != null)
{
//biSafeFinish.shopId = parentUp.ID;
biSafeFinish.DEPARTMENT_NAME = parentUp.NAME;
}
}
else
{
//biSafeFinish.shopId = parentInfo.ID;
biSafeFinish.DEPARTMENT_NAME = parentInfo.NAME;
}
}
biSafeFinish.FO01_TOTAL = allInfos.Count(t => t.TEAM_ID == item && t.FORM_NAME=="班前会议");
biSafeFinish.FO01_FINISH = allInfos.Count(t => t.TEAM_ID == item && t.FORM_NAME == "班前会议" && t.FORM_STATUS == "归档" && t.OVERTIME != FOISOVERTIME.);
biSafeFinish.FO01_UNFINISH = allInfos.Count(t => t.TEAM_ID == item && t.FORM_NAME == "班前会议" && t.FORM_STATUS != "归档");
biSafeFinish.FO01_OVERTIME = allInfos.Count(t => t.TEAM_ID == item && t.FORM_NAME == "班前会议" && t.FORM_STATUS == "归档" && t.OVERTIME == FOISOVERTIME.);
biSafeFinish.FO02_TOTAL = allInfos.Count(t => t.TEAM_ID == item && t.FORM_NAME == "岗位当班记录");
biSafeFinish.FO02_FINISH = allInfos.Count(t => t.TEAM_ID == item && t.FORM_NAME == "岗位当班记录" && t.FORM_STATUS == "归档" && t.OVERTIME != FOISOVERTIME.);
biSafeFinish.FO02_UNFINISH = allInfos.Count(t => t.TEAM_ID == item && t.FORM_NAME == "岗位当班记录" && t.FORM_STATUS != "归档");
biSafeFinish.FO02_OVERTIME = allInfos.Count(t => t.TEAM_ID == item && t.FORM_NAME == "岗位当班记录" && t.FORM_STATUS == "归档" && t.OVERTIME == FOISOVERTIME.);
biSafeFinish.FO03_TOTAL = allInfos.Count(t => t.TEAM_ID == item && t.FORM_NAME == "岗位交接班");
biSafeFinish.FO03_FINISH = allInfos.Count(t => t.TEAM_ID == item && t.FORM_NAME == "岗位交接班" && t.FORM_STATUS == "归档" && t.OVERTIME != FOISOVERTIME.);
biSafeFinish.FO03_UNFINISH = allInfos.Count(t => t.TEAM_ID == item && t.FORM_NAME == "岗位交接班" && t.FORM_STATUS != "归档");
biSafeFinish.FO03_OVERTIME = allInfos.Count(t => t.TEAM_ID == item && t.FORM_NAME == "岗位交接班" && t.FORM_STATUS == "归档" && t.OVERTIME == FOISOVERTIME.);
completions.Add(biSafeFinish);
}
}
return completions;
});
}
/// <summary>
/// 返回班前会议、班组活动记录
/// </summary>
/// <param name="orgId"></param>
/// <param name="listDepIDInt"></param>
/// <param name="departmentIdPs"></param>
public List<T_BI_SAFETASK_FINISH> GetSafeTaskFinish(Guid orgId,DateTime startTime, DateTime endTime)
{
List<T_BI_SAFETASK_FINISH> completions = new List<T_BI_SAFETASK_FINISH>();
BaseFilter baseFilter = new BaseFilter(orgId);
baseFilter.SelectField = new string[] { "ID", "DEPARTMENT_ID" };
var teams = GetEntities<T_FM_TEAM>(t => !t.IS_DELETED && t.ENABLE_STATUS == 0, baseFilter);
baseFilter.SelectField = new string[] { "TEAM_ID", "Nav_Team.NAME", "PRE_MEETING_STATUS", "DEPARTMENT_ID", "OVERTIME", "CREATE_TIME", "Nav_User.DEPARTMENT_ID" }; //指定字段,包括导航属性
var preShiftMeetingTemp = GetEntities<T_FO_PRE_SHIFT_MEETING_RECORD>(i => i.CREATE_TIME >= startTime && i.CREATE_TIME<= endTime && i.IS_DELETED == false, baseFilter).ToList();
baseFilter.SelectField = new string[] { "CLASS_TEAM_ID", "Nav_Team.NAME", "SHIFT_STATUS", "DEPARTMENT_ID", "OVERTIME", "CREATE_TIME", "Nav_Editor.DEPARTMENT_ID" }; //指定字段,包括导航属性
var currentShiftTemp = GetEntities<T_FO_CURRENT_CLASS_RECORD>(i => i.CREATE_TIME >= startTime && i.CREATE_TIME <= endTime && i.IS_DELETED == false, baseFilter).ToList();
baseFilter.SelectField = new string[] { "TEAM_ID", "Nav_Team.NAME", "SHIFT_STATUS", "DEPARTMENT_ID", "OVERTIME", "CREATE_TIME", "Nav_Editor.DEPARTMENT_ID" }; //指定字段,包括导航属性
var changeShiftTemp = GetEntities<T_FO_CHANGE_SHIFT_RECORD>(i => i.CREATE_TIME >= startTime && i.CREATE_TIME <= endTime && i.IS_DELETED == false, baseFilter).ToList();
//baseFilter.SelectField = new string[] { "TEAM_ID", "Nav_Taem.NAME", "TA_STATUS", "Nav_Taem.DEPARTMENT_ID", "OVERTIME", "CREATE_TIME", "Nav_MainUser.DEPARTMENT_ID" }; //指定字段,包括导航属性
//var teamActivityTemp = GetEntities<T_FO_TEAM_ACTIVITY>(i => i.CREATE_TIME >= startTime && i.IS_DELETED == false, baseFilter).ToList();
baseFilter.SelectField = new string[] { "SOURCE_DATA_ID" };
var allnoticeTask = GetEntities<T_FM_NOTIFICATION_TASK>(t => t.NOTICE_STATUS == 2 && t.CREATE_TIME >= startTime && t.CREATE_TIME <= endTime, baseFilter);
foreach (var item in preShiftMeetingTemp)
{
if (item.TEAM_ID == null)
{
item.TEAM_ID = item.Nav_User?.DEPARTMENT_ID;
}
else
{
var deparId = teams.FirstOrDefault(t => t.ID == item.TEAM_ID)?.DEPARTMENT_ID;
item.TEAM_ID = deparId;
}
var isOver = allnoticeTask.Where(t => t.SOURCE_DATA_ID == item.ID);
if (isOver.Any())
{
item.OVERTIME = FOISOVERTIME.;
}
else
{
item.OVERTIME = FOISOVERTIME.;
}
var biSafeFinish = new T_BI_SAFETASK_FINISH();
biSafeFinish.ORG_ID = orgId;
biSafeFinish.TEAM_ID = (Guid)item.TEAM_ID;
biSafeFinish.FORM_NAME = "班前会议";
biSafeFinish.OVERTIME = item.OVERTIME;
biSafeFinish.FORM_STATUS = item.PRE_MEETING_STATUS.GetDescription();
completions.Add(biSafeFinish);
//biSafeFinish.TEAM_CHARGE_USER = team.Nav_ChargePerson.NAME;
//biSafeFinish.FO01_TOTAL = fo01a.Count();
//biSafeFinish.FO01_FINISH = fo01a.Count(t => t.PRE_MEETING_STATUS == FOPreMeetingStatusEnum.归档 && t.OVERTIME != FOISOVERTIME.超时);
//biSafeFinish.FO01_UNFINISH = fo01a.Count(t => t.PRE_MEETING_STATUS < FOPreMeetingStatusEnum.归档);
//biSafeFinish.FO01_OVERTIME = fo01a.Count(t => t.OVERTIME == FOISOVERTIME.超时);
}
foreach (var item in currentShiftTemp)
{
if (item.CLASS_TEAM_ID == null)
{
item.CLASS_TEAM_ID = item.Nav_Editor?.DEPARTMENT_ID;
}
else
{
var deparId = teams.FirstOrDefault(t => t.ID == item.CLASS_TEAM_ID)?.DEPARTMENT_ID;
item.CLASS_TEAM_ID = deparId;
}
var isOver = allnoticeTask.Where(t => t.SOURCE_DATA_ID == item.ID);
if (isOver.Any())
{
item.OVERTIME = FOISOVERTIME.;
}
else
{
item.OVERTIME = FOISOVERTIME.;
}
var biSafeFinish = new T_BI_SAFETASK_FINISH();
biSafeFinish.ORG_ID = orgId;
biSafeFinish.TEAM_ID = (Guid)item.CLASS_TEAM_ID;
biSafeFinish.FORM_NAME = "岗位当班记录";
biSafeFinish.OVERTIME = item.OVERTIME;
biSafeFinish.FORM_STATUS = Enum.GetName(typeof(FOShiftStatusEnum), item.SHIFT_STATUS);
completions.Add(biSafeFinish);
}
foreach (var item in changeShiftTemp)
{
if (item.TEAM_ID == null)
{
item.TEAM_ID = item.Nav_Editor?.DEPARTMENT_ID;
}
else
{
var deparId = teams.FirstOrDefault(t => t.ID == item.TEAM_ID)?.DEPARTMENT_ID;
item.TEAM_ID = deparId;
}
var isOver = allnoticeTask.Where(t => t.SOURCE_DATA_ID == item.ID);
if (isOver.Any())
{
item.OVERTIME = FOISOVERTIME.;
}
else
{
item.OVERTIME = FOISOVERTIME.;
}
var biSafeFinish = new T_BI_SAFETASK_FINISH();
biSafeFinish.ORG_ID = orgId;
biSafeFinish.TEAM_ID = (Guid)item.TEAM_ID;
biSafeFinish.FORM_NAME = "岗位交接班";
biSafeFinish.OVERTIME = item.OVERTIME;
biSafeFinish.FORM_STATUS = Enum.GetName(typeof(FOChangeShiftStatusEnum), item.SHIFT_STATUS);
completions.Add(biSafeFinish);
}
return completions;
}
public class JobInfo public class JobInfo
{ {
public Guid? DEPARTMENT_ID { get; set; } public Guid? DEPARTMENT_ID { get; set; }