11
This commit is contained in:
@@ -21,7 +21,8 @@ namespace BLL
|
||||
foreach (var project in projects)
|
||||
{
|
||||
// 检查管理人员到期未到岗情况
|
||||
var items1 = CheckManagerNotArrived(project.ProjectId);
|
||||
// var items1 = CheckManagerNotArrived(project.ProjectId);
|
||||
var items1 = CheckHistoricalContinuousShortage(project.ProjectId);
|
||||
|
||||
// 检查作业人员人力偏差情况
|
||||
var items2 = CheckWorkerDeviation(project.ProjectId);
|
||||
@@ -48,7 +49,7 @@ namespace BLL
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/*/// <summary>
|
||||
/// 检查管理人员到期未到岗情况(超过一周发出预警)
|
||||
/// </summary>
|
||||
/// <param name="projectId">项目ID</param>
|
||||
@@ -85,9 +86,9 @@ namespace BLL
|
||||
}
|
||||
|
||||
return lItems;
|
||||
}
|
||||
}*/
|
||||
|
||||
//获取实际考勤人员数
|
||||
/*//获取实际考勤人员数
|
||||
private static int getInOutRecordNum(JDGL_SGManPower sgManPower)
|
||||
{
|
||||
string strSql = @"
|
||||
@@ -155,7 +156,7 @@ namespace BLL
|
||||
}
|
||||
|
||||
return dataSource.Count();
|
||||
}
|
||||
}*/
|
||||
|
||||
/// <summary>
|
||||
/// 发送管理人员预警
|
||||
@@ -163,7 +164,7 @@ namespace BLL
|
||||
/// <param name="projectId">项目ID</param>
|
||||
/// <param name="unitId">单位id</param>
|
||||
private static List<ToDoItem> SendManagerWarning(string unitId, string projectId, string workPostId,
|
||||
string unitWorkId, DateTime? planDate, int? quantity, int num)
|
||||
string unitWorkId, DateTime? startDate, DateTime? endDate, int? quantity, int num)
|
||||
{
|
||||
// 发送预警信息
|
||||
var toDoItems = new List<ToDoItem>();
|
||||
@@ -250,15 +251,15 @@ namespace BLL
|
||||
if (unitWorks != null)
|
||||
{
|
||||
warningContent =
|
||||
$"{projectUnits.UnitName}单位{unitWorks.UnitWorkName}装置计划{string.Format("{0:yyyy-MM-dd}", planDate)}投入人力{quantity}人,实际考勤为{num}人。";
|
||||
$"{projectUnits.UnitName}单位{unitWorks.UnitWorkName}装置计划{string.Format("{0:yyyy-MM-dd}", startDate)}~{string.Format("{0:yyyy-MM-dd}", endDate)}投入人力{quantity}人,实际考勤为{num}人。";
|
||||
}
|
||||
else
|
||||
{
|
||||
warningContent =
|
||||
$"{projectUnits.UnitName}单位计划{string.Format("{0:yyyy-MM-dd}", planDate)}投入人力{quantity}人,实际考勤为{num}人。";
|
||||
$"{projectUnits.UnitName}单位计划{string.Format("{0:yyyy-MM-dd}", startDate)}~{string.Format("{0:yyyy-MM-dd}", endDate)}投入人力{quantity}人,实际考勤为{num}人。";
|
||||
}
|
||||
|
||||
string urlParams = "JDGL/SGManPower/SGWarningDetails.aspx?projectId=" + projectId;
|
||||
string urlParams = "JDGL/SGManPower/SGWarningDetailsEdit.aspx?projectId=" + projectId;
|
||||
// 添加单位参数(如果已选择)
|
||||
if (!string.IsNullOrEmpty(unitId))
|
||||
{
|
||||
@@ -278,26 +279,32 @@ namespace BLL
|
||||
}
|
||||
|
||||
// 添加时间参数
|
||||
if (planDate.HasValue)
|
||||
if (startDate.HasValue)
|
||||
{
|
||||
urlParams += "&planDate=" + string.Format("{0:yyyy-MM-dd}", planDate);
|
||||
urlParams += "&startTime=" + string.Format("{0:yyyy-MM-dd}", startDate);
|
||||
}
|
||||
|
||||
// 添加时间参数
|
||||
if (endDate.HasValue)
|
||||
{
|
||||
urlParams += "&endTime=" + string.Format("{0:yyyy-MM-dd}", endDate);
|
||||
}
|
||||
|
||||
// 添加岗位参数(如果已选择)
|
||||
if (quantity.HasValue)
|
||||
{
|
||||
urlParams += "&quantity=" + quantity.Value;
|
||||
}
|
||||
|
||||
// 添加岗位参数(如果已选择)
|
||||
if (num >= 0)
|
||||
{
|
||||
urlParams += "&num=" + num;
|
||||
}
|
||||
else
|
||||
{
|
||||
urlParams += "&num=0";
|
||||
}
|
||||
// // 添加岗位参数(如果已选择)
|
||||
// if (quantity.HasValue)
|
||||
// {
|
||||
// urlParams += "&quantity=" + quantity.Value;
|
||||
// }
|
||||
//
|
||||
// // 添加岗位参数(如果已选择)
|
||||
// if (num >= 0)
|
||||
// {
|
||||
// urlParams += "&num=" + num;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// urlParams += "&num=0";
|
||||
// }
|
||||
|
||||
|
||||
foreach (var userId in toUserIds)
|
||||
@@ -589,5 +596,101 @@ namespace BLL
|
||||
|
||||
return toDoItems;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 检查所有历史数据中连续一周以上人力不足的情况
|
||||
/// </summary>
|
||||
private static IEnumerable<ToDoItem> CheckHistoricalContinuousShortage(string projectId)
|
||||
{
|
||||
string strSql = @"
|
||||
WITH LatestVersions AS (
|
||||
SELECT ProjectId, MAX(Version) AS MaxVersion
|
||||
FROM JDGL_SGManPower
|
||||
WHERE ProjectId = @ProjectId
|
||||
GROUP BY ProjectId
|
||||
),
|
||||
PlanVsActual AS (
|
||||
SELECT
|
||||
p.ProjectId,
|
||||
p.UnitId,
|
||||
p.UnitWorkId,
|
||||
p.WorkPostId,
|
||||
p.PlanDate,
|
||||
p.Quantity AS PlanQuantity,
|
||||
ISNULL(a.ActualQuantity, 0) AS ActualQuantity,
|
||||
CASE WHEN ISNULL(a.ActualQuantity, 0) < p.Quantity THEN 1 ELSE 0 END AS IsShortage,
|
||||
lv.MaxVersion
|
||||
FROM JDGL_SGManPower p
|
||||
INNER JOIN LatestVersions lv ON p.ProjectId = lv.ProjectId AND p.Version = lv.MaxVersion
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
* FROM View_EmployInOutRecord
|
||||
) a ON p.ProjectId = a.ProjectId
|
||||
AND p.UnitId = a.UnitId
|
||||
AND p.WorkPostId = a.PostId
|
||||
AND p.PlanDate = a.RecordDate
|
||||
AND ISNULL(p.UnitWorkId, '') = ISNULL(a.UnitWorkId, '')
|
||||
WHERE p.ProjectId = @ProjectId AND p.PlanDate <= GETDATE()
|
||||
),
|
||||
ShortageWithRowNum AS (
|
||||
SELECT *,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY ProjectId, UnitId, UnitWorkId, WorkPostId
|
||||
ORDER BY PlanDate
|
||||
) AS RowNum
|
||||
FROM PlanVsActual
|
||||
WHERE IsShortage = 1
|
||||
),
|
||||
ContinuousGroups AS (
|
||||
SELECT *,
|
||||
DATEADD(DAY, -RowNum, PlanDate) AS GroupId
|
||||
FROM ShortageWithRowNum
|
||||
),
|
||||
ContinuousCounts AS (
|
||||
SELECT
|
||||
ProjectId,
|
||||
UnitId,
|
||||
UnitWorkId,
|
||||
WorkPostId,
|
||||
GroupId,
|
||||
COUNT(*) AS ContinuousDays,
|
||||
MIN(PlanDate) AS StartDate,
|
||||
MAX(PlanDate) AS EndDate,
|
||||
SUM(PlanQuantity) as PlanQuantity,
|
||||
SUM(ActualQuantity) as ActualQuantity,
|
||||
MaxVersion
|
||||
FROM ContinuousGroups
|
||||
GROUP BY ProjectId, UnitId, UnitWorkId, WorkPostId, GroupId,MaxVersion
|
||||
)
|
||||
SELECT
|
||||
ProjectId,
|
||||
UnitId,
|
||||
UnitWorkId,
|
||||
WorkPostId,
|
||||
ContinuousDays,
|
||||
MaxVersion,
|
||||
StartDate,
|
||||
EndDate,PlanQuantity,ActualQuantity
|
||||
FROM ContinuousCounts
|
||||
WHERE ContinuousDays >= 7";
|
||||
|
||||
var parameters = new List<System.Data.SqlClient.SqlParameter>
|
||||
{
|
||||
new System.Data.SqlClient.SqlParameter("@ProjectId", projectId)
|
||||
};
|
||||
var warningItems = new List<ToDoItem>();
|
||||
var dt = SQLHelper.GetDataTableRunText(strSql, parameters.ToArray());
|
||||
|
||||
|
||||
foreach (DataRow row in dt.Rows)
|
||||
{
|
||||
warningItems.AddRange(SendManagerWarning(row["UnitId"].ToString(),row["ProjectId"].ToString(),row["WorkPostId"].ToString(),row["UnitWorkId"].ToString(),
|
||||
Convert.ToDateTime(row["StartDate"]), Convert.ToDateTime(row["EndDate"]), Convert.ToInt32(row["PlanQuantity"]), Convert.ToInt32(row["ActualQuantity"])));
|
||||
}
|
||||
return warningItems;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user