1
This commit is contained in:
@@ -12,35 +12,39 @@ namespace BLL
|
||||
/// <summary>
|
||||
/// 检查并发送人力资源预警
|
||||
/// </summary>
|
||||
public static Model.ResponeData CheckAndSendPersonWarning()
|
||||
public static List<ToDoItem> CheckAndSendPersonWarning(string userId)
|
||||
{
|
||||
var responeData = new Model.ResponeData();
|
||||
// 合并两个集合
|
||||
var allItems = new List<ToDoItem>();
|
||||
var projects = Funs.DB.Base_Project.Where(p => p.ProjectState == BLL.Const.ProjectState_1).ToList();
|
||||
// foreach (var project in projects)
|
||||
// {
|
||||
// 检查管理人员到期未到岗情况
|
||||
var items1 = CheckManagerNotArrived("c7ade79e-7646-4c59-a8fd-020a7e3138c6");
|
||||
|
||||
// 检查作业人员人力偏差情况
|
||||
var items2 = CheckWorkerDeviation("c7ade79e-7646-4c59-a8fd-020a7e3138c6");
|
||||
|
||||
|
||||
if (items1 != null)
|
||||
foreach (var project in projects)
|
||||
{
|
||||
allItems.AddRange(items1);
|
||||
// 检查管理人员到期未到岗情况
|
||||
var items1 = CheckManagerNotArrived(project.ProjectId);
|
||||
|
||||
// 检查作业人员人力偏差情况
|
||||
var items2 = CheckWorkerDeviation(project.ProjectId);
|
||||
|
||||
|
||||
if (items1 != null)
|
||||
{
|
||||
allItems.AddRange(items1);
|
||||
}
|
||||
|
||||
if (items2 != null)
|
||||
{
|
||||
allItems.AddRange(items2);
|
||||
}
|
||||
}
|
||||
|
||||
if (items2 != null)
|
||||
if (!string.IsNullOrEmpty(userId))
|
||||
{
|
||||
allItems.AddRange(items2);
|
||||
//过滤出指定用户的数据
|
||||
allItems = allItems.Where(x => x.UserId == userId).ToList();
|
||||
}
|
||||
|
||||
// }
|
||||
responeData.data = allItems;
|
||||
responeData.message = "人员预警";
|
||||
return responeData;
|
||||
return allItems;
|
||||
}
|
||||
|
||||
|
||||
@@ -75,7 +79,8 @@ namespace BLL
|
||||
int num = getInOutRecordNum(data);
|
||||
if (data.Quantity > num)
|
||||
{
|
||||
lItems = SendManagerWarning(data.UnitId, projectId, data.UnitWorkId, data.PlanDate, data.Quantity, num);
|
||||
lItems = SendManagerWarning(data.UnitId, projectId, data.WorkPostId, data.UnitWorkId, data.PlanDate,
|
||||
data.Quantity, num);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,7 +150,8 @@ namespace BLL
|
||||
}
|
||||
else
|
||||
{
|
||||
dataSource = dataSource.Where(x => x["UnitWorkId"] != DBNull.Value && x["UnitWorkId"].ToString() == sgManPower.UnitWorkId);
|
||||
dataSource = dataSource.Where(x =>
|
||||
x["UnitWorkId"] != DBNull.Value && x["UnitWorkId"].ToString() == sgManPower.UnitWorkId);
|
||||
}
|
||||
|
||||
return dataSource.Count();
|
||||
@@ -156,7 +162,8 @@ namespace BLL
|
||||
/// </summary>
|
||||
/// <param name="projectId">项目ID</param>
|
||||
/// <param name="unitId">单位id</param>
|
||||
private static List<ToDoItem> SendManagerWarning(string unitId, string projectId, string unitWorkId, DateTime? planDate, int? quantity, int num)
|
||||
private static List<ToDoItem> SendManagerWarning(string unitId, string projectId, string workPostId,
|
||||
string unitWorkId, DateTime? planDate, int? quantity, int num)
|
||||
{
|
||||
// 发送预警信息
|
||||
var toDoItems = new List<ToDoItem>();
|
||||
@@ -242,26 +249,70 @@ namespace BLL
|
||||
string warningContent = string.Empty;
|
||||
if (unitWorks != null)
|
||||
{
|
||||
warningContent = $"{projectUnits.UnitName}单位{unitWorks.UnitWorkName}装置计划{planDate}投入人力{quantity}人,实际考勤为{num}人。";
|
||||
warningContent =
|
||||
$"{projectUnits.UnitName}单位{unitWorks.UnitWorkName}装置计划{string.Format("{0:yyyy-MM-dd}", planDate)}投入人力{quantity}人,实际考勤为{num}人。";
|
||||
}
|
||||
else
|
||||
{
|
||||
warningContent = $"{projectUnits.UnitName}单位计划{planDate}投入人力{quantity}人,实际考勤为{num}人。";
|
||||
warningContent =
|
||||
$"{projectUnits.UnitName}单位计划{string.Format("{0:yyyy-MM-dd}", planDate)}投入人力{quantity}人,实际考勤为{num}人。";
|
||||
}
|
||||
|
||||
string urlParams = "JDGL/SGManPower/SGWarningDetails.aspx?projectId=" + projectId;
|
||||
// 添加单位参数(如果已选择)
|
||||
if (!string.IsNullOrEmpty(unitId))
|
||||
{
|
||||
urlParams += "&unitId=" + unitId;
|
||||
}
|
||||
|
||||
// 添加装置参数(如果已选择)
|
||||
if (!string.IsNullOrEmpty(unitWorkId))
|
||||
{
|
||||
urlParams += "&unitWorkId=" + unitWorkId;
|
||||
}
|
||||
|
||||
// 添加岗位参数(如果已选择)
|
||||
if (!string.IsNullOrEmpty(workPostId))
|
||||
{
|
||||
urlParams += "&workPostId=" + workPostId;
|
||||
}
|
||||
|
||||
// 添加时间参数
|
||||
if (planDate.HasValue)
|
||||
{
|
||||
urlParams += "&planDate=" + string.Format("{0:yyyy-MM-dd}", planDate);
|
||||
}
|
||||
|
||||
// 添加岗位参数(如果已选择)
|
||||
if (quantity.HasValue)
|
||||
{
|
||||
urlParams += "&quantity=" + quantity.Value;
|
||||
}
|
||||
|
||||
// 添加岗位参数(如果已选择)
|
||||
if (num >= 0)
|
||||
{
|
||||
urlParams += "&num=" + num;
|
||||
}
|
||||
else
|
||||
{
|
||||
urlParams += "&num=0";
|
||||
}
|
||||
|
||||
|
||||
foreach (var userId in toUserIds)
|
||||
{
|
||||
Model.ToDoItem toDoItem = new Model.ToDoItem();
|
||||
toDoItem.DataId = SQLHelper.GetNewID(typeof(Model.ToDoItem));
|
||||
toDoItem.MenuId = "";
|
||||
toDoItem.MenuName = "管理人员到岗预警";
|
||||
toDoItem.ProjectCode = "";
|
||||
toDoItem.Content = warningContent;
|
||||
toDoItem.UserId = userId;
|
||||
toDoItem.UserName = UserService.GetUserNameByUserId(userId);
|
||||
toDoItem.DataTime = DateTime.Now;
|
||||
toDoItem.DataTimeStr = DateTime.Now.ToString("yyyy-MM-dd");
|
||||
toDoItem.PCUrl = "";
|
||||
toDoItem.UrlStr = "pages/exam/examjs";
|
||||
toDoItem.PCUrl = urlParams;
|
||||
toDoItems.Add(toDoItem);
|
||||
}
|
||||
}
|
||||
@@ -284,12 +335,16 @@ namespace BLL
|
||||
version = sgMan.Version;
|
||||
}
|
||||
|
||||
//当前时间
|
||||
var endDate = DateTime.Now;
|
||||
//当前时间前7天
|
||||
var startDate = DateTime.Now.AddDays(-7);
|
||||
// 先获取计划表一周的作业岗位有哪些
|
||||
var dataList = (from x in Funs.DB.JDGL_SGManPower
|
||||
join p in Funs.DB.Base_WorkPost on x.WorkPostId equals p.WorkPostId into pp
|
||||
from y in pp.DefaultIfEmpty()
|
||||
where x.ProjectId == projectId && (y.PostType == "2" || y.PostType == "3") &&
|
||||
x.PlanDate >= DateTime.Now.AddDays(-7) && x.PlanDate <= DateTime.Now && x.Version == version
|
||||
x.PlanDate >= startDate && x.PlanDate <= endDate && x.Version == version
|
||||
group x by new
|
||||
{
|
||||
x.UnitId,
|
||||
@@ -310,25 +365,25 @@ namespace BLL
|
||||
foreach (var data in dataList)
|
||||
{
|
||||
//根据人员计划表获取计划中的作业人员数
|
||||
int num = getInOutRecordNum1(data.UnitId, data.UnitWorkId, data.WorkPostId,projectId);
|
||||
|
||||
int num = getInOutRecordNum1(data.UnitId, data.UnitWorkId, data.WorkPostId, projectId);
|
||||
|
||||
// 计算偏差百分比
|
||||
if (data.QuantitySum > num)
|
||||
if (data.QuantitySum != 0)
|
||||
{
|
||||
double deviationPercentage = Math.Abs((double)((data.QuantitySum - num) / data.QuantitySum));
|
||||
// 如果偏差超过10%,发出预警
|
||||
if (deviationPercentage > 0.1)
|
||||
{
|
||||
lItems = SendWorkerDeviationWarning(data.UnitId, projectId, data.UnitWorkId, data.QuantitySum, 0);
|
||||
lItems = SendWorkerDeviationWarning(data.UnitId, projectId, data.WorkPostId, data.UnitWorkId,
|
||||
startDate, endDate, data.QuantitySum, num);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return lItems;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//获取实际考勤人员数
|
||||
private static int getInOutRecordNum1(string unitId, string unitWorkId, string workPostId, string projectId)
|
||||
{
|
||||
@@ -394,12 +449,13 @@ namespace BLL
|
||||
}
|
||||
else
|
||||
{
|
||||
dataSource = dataSource.Where(x => x["UnitWorkId"] != DBNull.Value && x["UnitWorkId"].ToString() == unitWorkId);
|
||||
dataSource = dataSource.Where(x =>
|
||||
x["UnitWorkId"] != DBNull.Value && x["UnitWorkId"].ToString() == unitWorkId);
|
||||
}
|
||||
|
||||
return dataSource.Count();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 发送作业人员偏差预警
|
||||
@@ -409,13 +465,14 @@ namespace BLL
|
||||
/// <param name="planTotal">计划总人数</param>
|
||||
/// <param name="actualTotal">实际总人数</param>
|
||||
/// <param name="deviationPercentage">偏差百分比</param>
|
||||
private static List<ToDoItem> SendWorkerDeviationWarning(string unitId, string projectId, string unitWorkId, int? quantity, int num)
|
||||
private static List<ToDoItem> SendWorkerDeviationWarning(string unitId, string projectId, string workPostId,
|
||||
string unitWorkId,
|
||||
DateTime? startDate, DateTime? endDate, int? quantity, int num)
|
||||
{
|
||||
|
||||
// 发送预警信息
|
||||
var toDoItems = new List<ToDoItem>();
|
||||
List<string> toUserIds = new List<string>();
|
||||
|
||||
|
||||
var unitWorks = (from x in Funs.DB.WBS_UnitWork
|
||||
where x.UnitWorkId == unitWorkId
|
||||
select new { x.UnitWorkId, x.UnitWorkName }).FirstOrDefault();
|
||||
@@ -438,6 +495,7 @@ namespace BLL
|
||||
toUserIds.Add(projectUser.UserId);
|
||||
}
|
||||
}
|
||||
|
||||
// 获取总包单位施工经理
|
||||
var generalContractorUnit = Funs.DB.Project_ProjectUnit.FirstOrDefault(pu =>
|
||||
pu.ProjectId == projectId && pu.UnitType == Const.ProjectUnitType_1); // 总包单位
|
||||
@@ -456,7 +514,7 @@ namespace BLL
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 构建预警信息内容
|
||||
string warningContent = string.Empty;
|
||||
if (unitWorks != null)
|
||||
@@ -468,7 +526,50 @@ namespace BLL
|
||||
{
|
||||
warningContent = $"{projectUnits.UnitName}单位计划投入人力{quantity}人,实际考勤为{num}人。";
|
||||
}
|
||||
|
||||
|
||||
string urlParams = "JDGL/SGManPower/SGWarningDetails.aspx?projectId=" + projectId;
|
||||
// 添加单位参数(如果已选择)
|
||||
if (!string.IsNullOrEmpty(unitId))
|
||||
{
|
||||
urlParams += "&unitId=" + unitId;
|
||||
}
|
||||
|
||||
// 添加装置参数(如果已选择)
|
||||
if (!string.IsNullOrEmpty(unitWorkId))
|
||||
{
|
||||
urlParams += "&unitWorkId=" + unitWorkId;
|
||||
}
|
||||
|
||||
// 添加岗位参数(如果已选择)
|
||||
if (!string.IsNullOrEmpty(workPostId))
|
||||
{
|
||||
urlParams += "&workPostId=" + workPostId;
|
||||
}
|
||||
|
||||
// 添加时间参数
|
||||
if (startDate.HasValue && endDate.HasValue)
|
||||
{
|
||||
urlParams += "&planDate=" + string.Format("{0:yyyy-MM-dd}", startDate) + "~" +
|
||||
string.Format("{0:yyyy-MM-dd}", endDate);
|
||||
}
|
||||
|
||||
|
||||
// 添加岗位参数(如果已选择)
|
||||
if (quantity.HasValue)
|
||||
{
|
||||
urlParams += "&quantity=" + quantity.Value;
|
||||
}
|
||||
|
||||
// 添加岗位参数(如果已选择)
|
||||
if (num >= 0)
|
||||
{
|
||||
urlParams += "&num=" + num;
|
||||
}
|
||||
else
|
||||
{
|
||||
urlParams += "&num=0";
|
||||
}
|
||||
|
||||
// 发送预警信息
|
||||
foreach (var userId in toUserIds)
|
||||
{
|
||||
@@ -476,15 +577,16 @@ namespace BLL
|
||||
toDoItem.DataId = SQLHelper.GetNewID(typeof(Model.ToDoItem));
|
||||
toDoItem.MenuId = "";
|
||||
toDoItem.MenuName = "人力资源偏差预警";
|
||||
toDoItem.ProjectCode = "";
|
||||
toDoItem.Content = warningContent;
|
||||
toDoItem.UserId = userId;
|
||||
toDoItem.UserName = UserService.GetUserNameByUserId(userId);
|
||||
toDoItem.DataTime = DateTime.Now;
|
||||
toDoItem.DataTimeStr = DateTime.Now.ToString("yyyy-MM-dd");
|
||||
toDoItem.PCUrl = "";
|
||||
toDoItem.UrlStr = "pages/exam/examjs";
|
||||
toDoItem.PCUrl = urlParams;
|
||||
toDoItems.Add(toDoItem);
|
||||
}
|
||||
|
||||
return toDoItems;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user