检查清单跑批

This commit is contained in:
何美荣 2025-12-12 17:53:13 +08:00
parent db6b913f0d
commit e0f2f6dce3

View File

@ -5744,5 +5744,200 @@ namespace APT.PP.WebApi.Controllers.Api
return true;
});
}
/// <summary>
/// 系统管理-检查清单。自动触发检查通知
/// </summary>
/// <param name="pageFilter"></param>
/// <returns></returns>
[HttpPost, Route("CheckSetSync")]
public JsonActionResult<bool> CheckSetSync([FromBody] KeywordFilter filter)
{
return SafeExecute<bool>(() =>
{
try
{
var dtNow = DateTime.Now;
var year = dtNow.Year;
var month = dtNow.Month;
var day = dtNow.Day;
var week = dtNow.DayOfWeek;
List<T_SK_PLAN_SET> setList = new List<T_SK_PLAN_SET>();
//查配置表,有配才执行
var timeSets = GetEntities<T_SK_PLAN_SET>(i => i.ENABLE_STATUS == 0, new BaseFilter(filter.OrgId)).ToList();
if (timeSets != null && timeSets.Any())
{
foreach (var set in timeSets)
{
switch (set.CHECK_CYCLE)
{
case SKPLANCHECKFREQUENCYEnum.Year:
if (set.MONTH == month && set.DATA == day)
{
setList.Add(set);
}
break;
case SKPLANCHECKFREQUENCYEnum.HalfYear:
if ((set.MONTH == month && set.DATA == day) || ((set.MONTH + 6) == month && (set.DATA + 183) == day))
{
setList.Add(set);
}
break;
case SKPLANCHECKFREQUENCYEnum.Date:
setList.Add(set);
break;
//case SKPLANCHECKFREQUENCYEnum.Class:
// setList.Add(set);
break;
case SKPLANCHECKFREQUENCYEnum.Week:
if (set.WEEKDATA != null && (int)set.WEEKDATA.Value == (int)week)
{
setList.Add(set);
}
break;
case SKPLANCHECKFREQUENCYEnum.Month:
if (set.DATA == day)
{
setList.Add(set);
}
break;
case SKPLANCHECKFREQUENCYEnum.Quarter:
if (set.MONTH == 1)
{
if ((month == 1 || month == 4 || month == 7 || month == 10) && set.DATA == day)
{
setList.Add(set);
}
}
if (set.MONTH == 2)
{
if ((month == 2 || month == 5 || month == 8 || month == 11) && set.DATA == day)
{
setList.Add(set);
}
}
if (set.MONTH == 3)
{
if ((month == 3 || month == 6 || month == 9 || month == 12) && set.DATA == day)
{
setList.Add(set);
}
}
break;
default:
break;
}
}
}
DateTime dt = DateTime.Now;
if (filter.Parameter1 != null)
{
dt = DateTime.Parse(filter.Parameter1);
}
List<T_SK_SECURITY_INSPECTION_NOTICE> notices = new List<T_SK_SECURITY_INSPECTION_NOTICE>();
List<T_SK_SECURITY_INSPECTION_NOTICE_DETAIL> details = new List<T_SK_SECURITY_INSPECTION_NOTICE_DETAIL>();
List<T_FM_NOTIFICATION_TASK> tasks = new List<T_FM_NOTIFICATION_TASK>();
var checkSets = GetEntities<T_SK_CHECK_SET>(i => i.IS_AUTO == true, new BaseFilter(filter.OrgId)).ToList();
var checkSetIds = checkSets.Select(t => t.ID).ToList();
var checkSetUsers= GetEntities<T_SK_CHECK_SET_USER>(i => checkSetIds.Contains(i.CHECK_SET_ID), new BaseFilter(filter.OrgId)).ToList();
var contents = GetEntities<T_SK_CHECK_SET_CONTENTS>(i => checkSetIds.Contains(i.CHECK_SET_ID), new BaseFilter(filter.OrgId)).ToList();
var users = GetEntities<T_FM_USER>(i => i.ENABLE_STATUS == 0, new BaseFilter(filter.OrgId)).ToList();
if (checkSets != null && checkSets.Any())
{
var baseFilter = new BaseFilter(filter.GetOrgId());
baseFilter.IgnoreDataRule = true;
baseFilter.SelectField = new string[] { "PRODUCTION_UNIT_ID", "CHECK_TYPE_ID", "APPLY_DEPARTMENT_ID", "APPLY_USER_ID", "PLANCHECKFREQUENCY", "DEPARTMENT_TYPE", "CREATE_TIME" }; //指定字段,包括导航属性
Expression<Func<T_SK_SECURITY_INSPECTION_NOTICE, bool>> expression = i => i.IS_DELETED == false && (i.CREATE_TIME.Value.Date == DateTime.Now.Date || i.CREATE_TIME.Value.Date == DateTime.Now.AddDays(-1).Date);
List<T_SK_SECURITY_INSPECTION_NOTICE> noticeExsiss = this.GetOrderEntities(expression, baseFilter).ToList();
foreach (var set in checkSets)
{
var setUserIds = checkSetUsers.Where(t => t.CHECK_SET_ID == set.ID).Select(m => m.USER_ID).Distinct().ToList();
var timeSet = setList.FirstOrDefault(t => t.PRODUCTION_UNIT_ID == set.PRODUCTION_UNIT_ID && t.CHECK_CYCLE == set.CHECK_CYCLE);
var sendUsers = users.Where(t => setUserIds.Contains(t.ID)).ToList();
if (sendUsers != null && sendUsers.Any() && timeSet != null && timeSet.CHECKTIME.Value.Hour == dt.Hour)
{
var j = 1;
//触发给检查人
foreach (var user in sendUsers)
{
//判断是否重复触发
var exist = noticeExsiss.FirstOrDefault(t => t.APPLY_USER_ID == user.ID && t.DEPARTMENT_TYPE == set.CHECK_TYPE && t.CHECK_TYPE_ID == set.CHECK_TYPE_ID && t.PLANCHECKFREQUENCY == set.CHECK_CYCLE && t.CREATE_TIME.Value.Date == dt.Date);
if (exist == null)
{
T_SK_SECURITY_INSPECTION_NOTICE notice = new T_SK_SECURITY_INSPECTION_NOTICE();
notice.ORG_ID = set.ORG_ID;
notice.APPLY_USER_ID = user.ID;
notice.APPLY_DEPARTMENT_ID = user.DEPARTMENT_ID;
notice.PRODUCTION_UNIT_ID = set.PRODUCTION_UNIT_ID;
notice.CHECK_TYPE_ID = set.CHECK_TYPE_ID;
notice.PLANCHECKFREQUENCY = set.CHECK_CYCLE;
notice.DEPARTMENT_TYPE = set.CHECK_TYPE;
notice.NOTICE_CODE = "JCXD" + DateTime.Now.ToString("yyyyMMddHH") + j.ToString().PadLeft(4, '0');
notices.Add(notice);
var checkContents = contents.Where(t => t.CHECK_SET_ID == set.ID).ToList();
if (checkContents != null && checkContents.Any())
{
foreach (var con in checkContents)
{
T_SK_SECURITY_INSPECTION_NOTICE_DETAIL de = new T_SK_SECURITY_INSPECTION_NOTICE_DETAIL();
de.ORG_ID = set.ORG_ID;
de.SECURITY_INSPECTION_NOTICE_ID = notice.ID;
de.CHECK_CONTENTS_ID = con.CHECK_CONTENTS_ID;
de.CHECKCONTENT = con.CHECK_CONTENT;
de.CHECKSTANDARD = con.CHECK_STANDARD;
de.RISK_AREA_ID = con.AREA_ID;
details.Add(de);
}
}
var date = DateTime.Now.Year + DateTime.Now.Month.PadLeft(2, '0') + DateTime.Now.AddHours(4).Day.PadLeft(2, '0');
var endtime = DateTime.Now.AddHours(24);
if (set.CHECK_CYCLE == SKPLANCHECKFREQUENCYEnum.Week)
{
endtime = DateTime.Now.AddDays(7);
}
if (set.CHECK_CYCLE == SKPLANCHECKFREQUENCYEnum.Month)
{
endtime = DateTime.Now.AddMonths(1);
}
if (set.CHECK_CYCLE == SKPLANCHECKFREQUENCYEnum.HalfYear)
{
endtime = DateTime.Now.AddMonths(6);
}
if (set.CHECK_CYCLE == SKPLANCHECKFREQUENCYEnum.Year)
{
endtime = DateTime.Now.AddMonths(12);
}
if (set.CHECK_CYCLE == SKPLANCHECKFREQUENCYEnum.Quarter)
{
endtime = DateTime.Now.AddMonths(3);
}
var task = NotificationTaskService.InsertUserNoticeTaskModel(set.CHECK_CYCLE.GetDescription() + "安全检查通知" + date, notice.ID, set.ORG_ID, user.ID, user.NAME, DateTime.Now, endtime, (int)FMNoticeTypeEnum., "SK006");
tasks.Add(task);
j++;
}
}
}
}
}
UnifiedCommit(() =>
{
if (notices != null && notices.Any())
BantchSaveEntityNoCommit(notices);
if (details != null && details.Any())
BantchSaveEntityNoCommit(details);
if (tasks != null && tasks.Any())
BantchSaveEntityNoCommit(tasks);
});
}
catch (Exception ex)
{
if (!string.IsNullOrEmpty(ex.StackTrace))
throw new Exception("错误日志:[StackTrace]" + ex.StackTrace);
else
throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message);
}
return true;
});
}
}
}