2025-08-25 09:56:57 +08:00
using APT.BaseData.Domain.Entities.FM ;
using APT.BaseData.Domain.Enums ;
using APT.BaseData.Domain.Entities ;
using APT.BaseData.Domain.IServices ;
using APT.Infrastructure.Core ;
using APT.Utility ;
using Microsoft.AspNetCore.Mvc ;
using System ;
using System.Linq ;
using APT.BaseData.Domain.IServices.FM ;
using APT.MS.Domain.Enums ;
using APT.MS.Domain.Entities.SE ;
using System.Collections.Generic ;
using APT.MS.Domain.Entities.PF ;
using System.Numerics ;
using APT.BaseData.Domain.Enums.PF ;
using NPOI.SS.Formula.Functions ;
using ICSharpCode.SharpZipLib.Core ;
using System.Runtime.Intrinsics.Arm ;
using NPOI.SS.Formula.Atp ;
using NPOI.Util ;
using APT.BaseData.Services.Services.FM ;
using APT.MS.Domain.Entities.LR ;
using InfluxData.Net.InfluxDb.Models.Responses ;
using System.Threading.Tasks ;
using log4net.Core ;
using APT.WebApi.Models ;
using APT.MS.Domain.Entities.SC.BI ;
using Microsoft.Extensions.DependencyModel ;
namespace APT.PP.WebApi.Controllers.Api.PP
{
/// <summary>
/// 风险管理跑批任务
/// </summary>
[Route("api/PP/SEController")]
[TypeFilter(typeof(CustomActionFilterAttribute))]
public class SEController : AuthorizeApiController < T_FM_BASE_CONFIG >
{
IFMNotificationTaskService NotificationTaskService { get ; set ; }
IFMDepartmentService DepartmentService { get ; set ; }
string [ ] allDeps = { "矿山部" , "选矿部" , "安全环保管理部" , "安全环保科" , "选矿一部" , "选矿二部" , "机电部" , "安全环保部" , "生产管理部" , "安环部" } ;
string [ ] safeDeps = { "安全环保管理部" , "安全环保科" , "安全环保部" , "安环部" } ;
string [ ] workDeps = { "矿山部" , "选矿部" , "选矿一部" , "选矿二部" , "机电部" , "生产管理部" , "安环部" } ;
public SEController ( IFMNotificationTaskService notificationTaskService , IFMDepartmentService departmentService )
{
NotificationTaskService = notificationTaskService ;
DepartmentService = departmentService ;
}
/// <summary>
/// 安全教育模块所有跑批
/// </summary>
/// <returns></returns>
[HttpPost, Route("AM8")]
public JsonActionResult < bool > AM8 ( [ FromBody ] KeywordFilter filter )
{
return SafeExecute < bool > ( ( ) = >
{
try
{
2025-11-07 11:03:11 +08:00
DateTime dtNow = DateTime . Now ;
var Parameter1 = filter . Parameter1 ;
if ( ! string . IsNullOrEmpty ( filter . Parameter1 ) )
{
try
{
//接收来自页面的参数
DateTime deParm = Convert . ToDateTime ( filter . Parameter1 ) ;
dtNow = deParm ;
}
catch { }
}
2025-08-25 09:56:57 +08:00
#region SE安全教育培训
2025-11-07 11:03:11 +08:00
var config = GetEntity < T_SE_SECONFIG > ( t = > true , new BaseFilter ( filter . GetOrgId ( ) ) ) ;
2025-08-25 09:56:57 +08:00
//触发安全意识调查
2025-11-07 11:03:11 +08:00
CheckCreateSafeSurvey ( filter , dtNow , config ) ;
2025-08-25 09:56:57 +08:00
//安全意识调查结束三天前提醒未答卷的人
2025-11-07 11:03:11 +08:00
CheckSafeSuveyNotAnswered ( filter , dtNow ) ;
2025-08-25 09:56:57 +08:00
//培训需求调查
2025-11-07 11:03:11 +08:00
CheckCreateTrainSurvey ( filter , dtNow , config ) ;
2025-08-25 09:56:57 +08:00
//部门培训计划
2025-11-07 11:03:11 +08:00
CheckDepTrainPlan ( filter , dtNow , config ) ;
2025-08-25 09:56:57 +08:00
//到时间触发年度培训计划,搜集完成的部门培训计划
2025-11-07 11:03:11 +08:00
FinishYearTrainPlan ( filter , dtNow , config ) ;
2025-08-25 09:56:57 +08:00
//培训通知
2025-11-07 11:03:11 +08:00
CheckYearTrainPlan ( filter , dtNow ) ;
2025-08-25 09:56:57 +08:00
//换证培训触发
2025-11-07 11:03:11 +08:00
CreateRenewalTrain ( filter , dtNow ) ;
2025-08-25 09:56:57 +08:00
#endregion
#region LR法律法规
//触发需求识别
2025-11-07 11:03:11 +08:00
NoticeStartDemandDistinguish ( filter , dtNow ) ;
2025-08-25 09:56:57 +08:00
//通知安环部负责人安全生产法律法规更新与融入
2025-11-07 11:03:11 +08:00
NoticeLRLawIntegrateUpdate ( filter , dtNow ) ;
2025-08-25 09:56:57 +08:00
#endregion
}
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 ;
} ) ;
}
/// <summary>
/// 5点下班前触发
/// </summary>
/// <returns></returns>
[HttpPost, Route("PM5")]
public JsonActionResult < bool > PM5 ( [ FromBody ] KeywordFilter filter )
{
return SafeExecute < bool > ( ( ) = >
{
try
{
#region SE安全教育培训
//触发教育培训调查汇总
CheckTrainEffectSuveyEvaluation ( filter ) ;
//安全意识调查结束部门汇总
CheckSafeSuveyDepartReport ( filter ) ;
//安全意识调查所有结束公司汇总
CheckSafeSuveyCompanyReport ( filter ) ;
//培训需求调查结束汇总
CheckTrainSuveyFinishByDepartment ( filter ) ;
#endregion
#region LR法律法规
//触发需求分析,通知安环部负责人安全生产法律法规获取清单
NoticeEndDemandDistinguish ( filter ) ;
#endregion
}
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 ;
} ) ;
}
/// <summary>
/// 触发新注册人员
/// </summary>
/// <param name="pageFilter">返回系统用户数</param>
/// <returns></returns>
[HttpPost, Route("CreateNewRegisterUser")]
public JsonActionResult < bool > CreateNewRegisterUser ( [ FromBody ] KeywordFilter filter )
{
return SafeExecute < bool > ( ( ) = >
{
var currTime = DateTime . Now ;
if ( ! string . IsNullOrEmpty ( filter . Parameter1 ) )
{
try
{
//接收来自页面的参数
DateTime deParm = Convert . ToDateTime ( filter . Parameter1 ) ;
currTime = deParm ;
}
catch { }
}
if ( currTime . Hour < 15 )
{
return true ;
}
T_SE_NEW_USERS eduCard = null ;
List < T_FM_NOTIFICATION_TASK > sendNotice = new List < T_FM_NOTIFICATION_TASK > ( ) ;
List < T_SE_NEW_USER_DETAIL > userDetails = new List < T_SE_NEW_USER_DETAIL > ( ) ;
var orgId = filter . GetOrgId ( ) ;
var newUsers = GetEntities < T_SE_USER_TEMP > ( t = > t . IS_SEND = = 0 , new BaseFilter ( orgId ) ) ;
if ( ! newUsers . Any ( ) )
{
return true ;
}
var newUsersId = newUsers . Select ( t = > t . USER_ID ) ;
var newAllUsers = GetEntities < T_FM_USER > ( t = > newUsersId . Contains ( t . ID ) , new BaseFilter ( orgId ) ) ;
var sendUser = GetEntity < T_FM_USER > ( t = > t . Nav_ApproveRole ! = null & & t . Nav_ApproveRole . NAME = = "安环部安全员" & & t . IS_DELETED = = false & & t . ENABLE_STATUS = = 0 ) ;
var train_contents = GetEntity < T_SE_THREE_LEVEL_SAFE_CONTENT > ( t = > t . THREE_LEVEL_SAFE_TRAIN_TYPE = = SEThreeLevelSafeTrainType . 公 司 级 ) ;
eduCard = new T_SE_NEW_USERS ( ) ;
eduCard . ID = Guid . NewGuid ( ) ;
eduCard . DEPARTMENT_ID = sendUser . DEPARTMENT_ID ;
eduCard . USER_ID = sendUser . ID ;
eduCard . ORG_ID = orgId ;
eduCard . TRAIN_STATUS = SEThreeLevelSafeTrainType . 公 司 级 ;
if ( train_contents ! = null )
{
eduCard . CONTENT_ID = train_contents . ID ;
}
foreach ( var user in newAllUsers )
{
T_SE_NEW_USER_DETAIL userDetail = new T_SE_NEW_USER_DETAIL ( ) ;
userDetail . ID = Guid . NewGuid ( ) ;
userDetail . EDU_CARD_ID = eduCard . ID ;
userDetail . USER_ID = user . ID ;
userDetail . ID_CARD_NUMBER = user . ID_CARD ;
userDetail . STATUS = 0 ;
userDetail . ORG_ID = eduCard . ORG_ID ;
userDetail . IN_TIME = user . ENTRYTIME ;
userDetails . Add ( userDetail ) ;
}
foreach ( var item in newUsers )
{
item . IS_SEND = 1 ;
}
if ( sendUser ! = null )
{
var endTime = DateTime . Now . AddDays ( 10 ) ;
var newEndTime = new DateTime ( endTime . Year , endTime . Month , endTime . Day , 23 , 59 , 59 ) ;
sendNotice . Add ( NotificationTaskService . InsertUserNoticeTaskModel ( DateTime . Now . ToShortDateString ( ) + "-三级安全培训-" + eduCard . STATUS . GetDescription ( ) , eduCard . ID , eduCard . ORG_ID , sendUser . ID , sendUser . NAME , DateTime . Now , newEndTime , 1 , "SE062" ) ) ;
}
T_FM_SYNC_TASK task = null ;
if ( ! string . IsNullOrEmpty ( filter . Parameter1 ) & & eduCard ! = null )
{
task = GetEntity < T_FM_SYNC_TASK > ( filter . Keyword ) ;
task . CURR_TASK_START_TIME = currTime ; //上次同步结束时间
task . UPDATE_SUCCES_TIME = DateTime . Now ; //上次同步结束时间
task . SYNC_PARAM = "" ; //清空参数
}
UnifiedCommit ( ( ) = >
{
if ( eduCard ! = null )
AddEntityNoCommit ( eduCard ) ;
if ( sendNotice ! = null & & sendNotice . Any ( ) )
BantchAddEntityNoCommit ( sendNotice ) ;
if ( userDetails ! = null & & sendNotice . Any ( ) )
BantchAddEntityNoCommit ( userDetails ) ;
if ( newUsers ! = null & & newUsers . Any ( ) )
BantchUpdateEntityNoCommit ( newUsers ) ;
if ( task ! = null )
UpdateEntity ( task ) ;
} ) ;
return true ;
} ) ;
}
/// <summary>
/// 安全培训教育统计报表
/// </summary>
/// <param name="pageFilter">返回系统用户数</param>
/// <returns></returns>
[HttpPost, Route("updateTrainRecordReportScore")]
public JsonActionResult < bool > updateTrainRecordReportScore ( [ FromBody ] KeywordFilter filter )
{
return SafeExecute < bool > ( ( ) = >
{
var riskFilter = new BaseFilter ( filter . GetOrgId ( ) ) ;
var trainRecords = GetEntities < T_SE_TRAIN_RECORD_REPORT > ( t = > t . TRAIN_MODEL = = "笔试" & & t . TRAIN_SCORE = = 0 & & t . CREATE_TIME > DateTime . Now . AddMonths ( - 12 ) , riskFilter ) ;
List < T_SE_TRAIN_RECORD_REPORT > newList = new List < T_SE_TRAIN_RECORD_REPORT > ( ) ;
foreach ( var item in trainRecords )
{
var currscore = GetEntity < T_SE_TRAIN_RECORD_PAPER > ( t = > t . Nav_User . CODE = = item . CODE & & t . RECORD_ID = = item . RECORD_ID ) ;
if ( currscore ! = null )
{
item . TRAIN_SCORE = currscore . SCORE ;
newList . Add ( item ) ;
}
else
{
DeleteEntity < T_SE_TRAIN_RECORD_REPORT > ( item ) ;
}
}
UnifiedCommit ( ( ) = >
{
if ( newList . Any ( ) )
BantchSaveEntityNoCommit ( newList ) ;
} ) ;
return true ;
} ) ;
}
/// <summary>
/// 安全培训教育统计报表
/// </summary>
/// <param name="pageFilter">返回系统用户数</param>
/// <returns></returns>
[HttpPost, Route("updateTrainRecordReport")]
public JsonActionResult < bool > updateTrainRecordReport ( [ FromBody ] KeywordFilter filter )
{
return SafeExecute < bool > ( ( ) = >
{
try
{
var riskFilter = new BaseFilter ( filter . GetOrgId ( ) ) ;
riskFilter . Include = new string [ ] { "Nav_User.Nav_Department" , "Nav_Record.Nav_Notify.Nav_TrainCheckType" , "Nav_Record.Nav_Papers" , "Nav_User.Nav_ProdutionUnit.Nav_Enums" , "Nav_Record.Nav_Papers" } ;
var param = GetEntity < T_FM_SYNC_TASK > ( t = > t . INTERFACE_ADDRESS = = "PP/SEController/updateTrainRecordReport" ) ;
var searchTime = DateTime . Parse ( "2023-01-01" ) ;
if ( param . SYNC_PARAM ! = null )
{
searchTime = DateTime . Parse ( param . SYNC_PARAM ) ;
}
var trainRecords = GetEntities < T_SE_TRAIN_RECORD_USER > ( t = > t . CREATE_TIME > searchTime & & t . STATUS = = SETrainRecordUserStatusEnum . 参 与 , riskFilter ) . OrderBy ( t = > t . CREATE_TIME ) ;
param . SYNC_PARAM = DateTime . Now . ToString ( ) ;
UpdateEntity ( param ) ;
List < T_SE_TRAIN_RECORD_REPORT > recordLists = new List < T_SE_TRAIN_RECORD_REPORT > ( ) ;
foreach ( var item in trainRecords )
{
if ( item . Nav_User . Nav_ProdutionUnit ! = null )
{
foreach ( var dep in item . Nav_User . Nav_ProdutionUnit )
{
T_SE_TRAIN_RECORD_REPORT newRecord = new T_SE_TRAIN_RECORD_REPORT ( ) ;
newRecord . NAME = item . Nav_User . NAME ;
newRecord . CODE = item . Nav_User . CODE ;
newRecord . LEVEL = item . Nav_Record . Nav_Notify . LEVEL . GetDescription ( ) ;
newRecord . DEPARTMENT_NAME = item . Nav_User . Nav_Department . NAME ;
newRecord . UNIT = dep . Nav_Enums . NAME ;
newRecord . CLASS_NAME = item . Nav_Record . Nav_Notify . NAME ;
newRecord . START_TIME = ( DateTime ) item . Nav_Record . Nav_Notify . TRAIN_START_TIME ;
newRecord . END_TIME = ( DateTime ) item . Nav_Record . Nav_Notify . TRAIN_END_TIME ;
newRecord . TRAIN_TYPE = changeEnum ( item . Nav_Record . Nav_Notify . TRAIN_MODEL ) ;
newRecord . TRAIN_HOUR = item . Nav_Record . Nav_Notify . HOURS ;
newRecord . TRAIN_MODEL = item . Nav_Record . Nav_Notify . Nav_TrainCheckType . NAME ;
newRecord . ORG_ID = filter . GetOrgId ( ) ;
newRecord . RECORD_ID = item . RECORD_ID ;
newRecord . TRAIN_TEACHER = item . Nav_Record . Nav_Notify . TRAIN_TEACHER ;
newRecord . USER_ID = item . USER_ID ;
newRecord . NOTIFY_ID = item . Nav_Record . NOTIFY_ID ;
var papers = item . Nav_Record . Nav_Papers . FirstOrDefault ( t = > t . USER_ID = = item . USER_ID ) ;
if ( papers ! = null )
{
newRecord . TRAIN_SCORE = item . Nav_Record . Nav_Papers . FirstOrDefault ( t = > t . USER_ID = = item . USER_ID ) . SCORE ;
}
var score = item . Nav_Record . Nav_Papers . FirstOrDefault ( t = > t . USER_ID = = item . ID ) ;
if ( score ! = null )
{
newRecord . TRAIN_SCORE = score . SCORE ;
}
recordLists . Add ( newRecord ) ;
}
}
else
{
T_SE_TRAIN_RECORD_REPORT newRecord = new T_SE_TRAIN_RECORD_REPORT ( ) ;
newRecord . NAME = item . Nav_User . NAME ;
newRecord . CODE = item . Nav_User . CODE ;
newRecord . LEVEL = item . Nav_Record . Nav_Notify . LEVEL . GetDescription ( ) ;
newRecord . DEPARTMENT_NAME = item . Nav_User . Nav_Department . NAME ;
newRecord . CLASS_NAME = item . Nav_Record . Nav_Notify . NAME ;
newRecord . START_TIME = ( DateTime ) item . Nav_Record . Nav_Notify . TRAIN_START_TIME ;
newRecord . END_TIME = ( DateTime ) item . Nav_Record . Nav_Notify . TRAIN_END_TIME ;
newRecord . TRAIN_TYPE = changeEnum ( item . Nav_Record . Nav_Notify . TRAIN_MODEL ) ;
newRecord . TRAIN_HOUR = item . Nav_Record . Nav_Notify . HOURS ;
newRecord . TRAIN_MODEL = item . Nav_Record . Nav_Notify . Nav_TrainCheckType . NAME ;
newRecord . ORG_ID = filter . GetOrgId ( ) ;
newRecord . USER_ID = item . USER_ID ;
newRecord . NOTIFY_ID = item . Nav_Record . NOTIFY_ID ;
var score = item . Nav_Record . Nav_Papers . FirstOrDefault ( t = > t . USER_ID = = item . ID ) ;
if ( score ! = null )
{
newRecord . TRAIN_SCORE = score . SCORE ;
}
recordLists . Add ( newRecord ) ;
}
}
UnifiedCommit ( ( ) = >
{
if ( recordLists . Any ( ) )
BantchAddEntityNoCommit ( recordLists ) ;
} ) ;
}
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 ;
} ) ;
}
private string changeEnum ( string level )
{
var str = "" ;
if ( level . Contains ( '1' ) )
{
str + = "讲授法 " ;
}
if ( level . Contains ( '2' ) )
{
str + = "视听法 " ;
}
if ( level . Contains ( '3' ) )
{
str + = "研讨法 " ;
}
if ( level . Contains ( '4' ) )
{
str + = "演示法 " ;
}
return str ;
}
//触发换证培训通知
2025-11-07 11:03:11 +08:00
private void CreateRenewalTrain ( KeywordFilter filter , DateTime dtNow )
2025-08-25 09:56:57 +08:00
{
var baseFilter = new BaseFilter ( filter . GetOrgId ( ) ) ;
baseFilter . Include = new string [ ] { "Nav_User" } ;
2025-11-07 11:03:11 +08:00
DateTime dtMonth3Later = dtNow . Date . AddMonths ( 3 ) ;
DateTime dtNow1DayLater = dtNow . Date . AddDays ( 1 ) ;
2025-08-25 09:56:57 +08:00
var allTrain = GetEntities < T_SE_RENEWAL_TRAIN > ( t = > t . IS_DELETED = = false & & t . Nav_User . ENABLE_STATUS = = 0 & & ( t . REVIEW_DATE = = dtMonth3Later | | t . EXPIRY_DATE = = dtMonth3Later | | t . EXPIRY_DATE = = dtNow1DayLater ) , baseFilter ) ; //wyw 加限制
var overTime = allTrain . Where ( t = > t . REVIEW_DATE = = dtMonth3Later | | t . EXPIRY_DATE = = dtMonth3Later ) ; //wyw 到期 或 到复审日期 提前3个月做提醒
//overTime = allTrain.Where(t => t.REVIEW_DATE == DateTime.Parse("2023-05-02").AddMonths(3));
var equalTime = allTrain . Where ( t = > t . EXPIRY_DATE = = dtNow1DayLater ) ; //wyw 修改为 到期 提前一天 (之前为 到复审日期)
var AHUser = GetEntity < T_FM_USER > ( t = > t . Nav_ApproveRole . NAME = = "安环部安全员" & & t . ENABLE_STATUS = = 0 ) ;
if ( AHUser ! = null )
{
var allSendUserTitles = new List < string > ( ) ;
var allSendDataIds = new List < Guid > ( ) ;
var allSendUserIds = new List < Guid > ( ) ;
var allSendUserNames = new List < string > ( ) ;
if ( overTime . Any ( ) )
{
foreach ( var item in overTime )
{
allSendUserTitles . Add ( item . Nav_User . NAME + item . Nav_User . CODE + "《" + item . CERTIFICATE_NAME + "》证书将于" + item . REVIEW_DATE . ToShortDateString ( ) + "到期复审/到期,请提前安排委外培训" ) ;
allSendDataIds . Add ( item . ID ) ;
allSendUserIds . Add ( item . USER_ID ) ;
allSendUserNames . Add ( item . Nav_User . NAME ) ;
allSendUserTitles . Add ( item . Nav_User . NAME + item . Nav_User . CODE + "《" + item . CERTIFICATE_NAME + "》证书将于" + item . REVIEW_DATE . ToShortDateString ( ) + "到期复审/到期,请提前安排委外培训" ) ;
allSendDataIds . Add ( item . ID ) ;
allSendUserIds . Add ( AHUser . ID ) ;
allSendUserNames . Add ( AHUser . NAME ) ;
}
}
if ( equalTime . Any ( ) )
{
foreach ( var item in equalTime )
{
allSendUserTitles . Add ( item . Nav_User . NAME + item . Nav_User . CODE + "《" + item . CERTIFICATE_NAME + "》证书于" + item . REVIEW_DATE . ToShortDateString ( ) + "到期,请到换证培训更新复审日期!" ) ;
allSendDataIds . Add ( item . ID ) ;
allSendUserIds . Add ( AHUser . ID ) ;
allSendUserNames . Add ( AHUser . NAME ) ;
}
}
if ( allSendDataIds . Any ( ) )
{
var sendNotices = NotificationTaskService . InsertUserNoticeTaskModels ( allSendUserTitles , allSendDataIds , filter . GetOrgId ( ) , allSendUserIds , allSendUserNames , DateTime . Now , DateTime . Now . AddDays ( 1 ) . Date , ( int ) FMNoticeTypeEnum . 今 日 提 醒 , "PF135" ) ;
UnifiedCommit ( ( ) = >
{
if ( sendNotices . Any ( ) )
BantchAddEntityNoCommit ( sendNotices ) ;
} ) ;
}
}
}
/// <summary>
/// 触发给所有人法律法规识别
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
[HttpGet, Route("NoticeStartDemandDistinguish")]
2025-11-07 11:03:11 +08:00
public JsonActionResult < bool > NoticeStartDemandDistinguish ( KeywordFilter filter , DateTime dtNow )
2025-08-25 09:56:57 +08:00
{
return SafeExecute < bool > ( ( ) = >
{
try
{
List < T_LR_DEMAND_DISTINGUISH > demandDistinguishes = new List < T_LR_DEMAND_DISTINGUISH > ( ) ;
List < T_FM_NOTIFICATION_TASK > sendNotices = new List < T_FM_NOTIFICATION_TASK > ( ) ;
2025-11-07 11:03:11 +08:00
//DateTime nowTime = DateTime.Now;
2025-08-25 09:56:57 +08:00
BaseFilter baseFilter = new BaseFilter ( filter . GetOrgId ( ) ) ;
var config = GetEntity < T_LR_LRCONFIG > ( t = > t . IS_DELETED = = false ) ;
var isRun = false ;
if ( config ! = null )
{
2025-11-07 11:03:11 +08:00
if ( config . ENABLE_STATUS = = 0 & & config . DEMAND_START_TIME . Month = = dtNow . Month & & config . DEMAND_START_TIME . Day = = dtNow . Day )
2025-08-25 09:56:57 +08:00
{
isRun = true ;
}
}
else
{
2025-11-07 11:03:11 +08:00
if ( dtNow . Month = = 12 & & dtNow . Day = = 1 )
2025-08-25 09:56:57 +08:00
{
isRun = true ;
}
}
if ( isRun )
{
var entity = GetEntity < T_LR_DEMAND_DISTINGUISH > ( t = > t . TRIGGER_TIME . Value . Month = = DateTime . Now . Month & & t . TRIGGER_TIME . Value . Day = = DateTime . Now . Day , baseFilter ) ;
var allSendUserTitles = new List < string > ( ) ;
var allSendDataIds = new List < Guid > ( ) ;
var allSendUserIds = new List < Guid > ( ) ;
var allSendUserNames = new List < string > ( ) ;
var endTime = config . DEMAND_END_TIME ;
2025-11-07 11:03:11 +08:00
endTime = new DateTime ( dtNow . Year , endTime . Month , endTime . Day , 23 , 59 , 59 ) ;
2025-08-25 09:56:57 +08:00
if ( entity = = null )
{
var users = GetEntities < T_FM_USER > ( t = > t . ENABLE_STATUS = = 0 & & ! t . CODE . Contains ( "admin" ) , baseFilter ) ;
if ( users ! = null & & users . Count ( ) > 0 )
{
users . ForEach ( user = >
{
if ( user . DEPARTMENT_ID ! = null )
{
T_LR_DEMAND_DISTINGUISH record = new T_LR_DEMAND_DISTINGUISH
{
ID = Guid . NewGuid ( ) ,
USER_ID = user . ID ,
TRIGGER_TIME = DateTime . Now ,
YEARS = DateTime . Now . Year ,
DEPARTMENT_ID = user . DEPARTMENT_ID . Value ,
ORG_ID = filter . GetOrgId ( ) ,
END_TIME = endTime ,
} ;
demandDistinguishes . Add ( record ) ;
allSendUserTitles . Add ( "安全生产法律法规需求识别" ) ;
allSendDataIds . Add ( record . ID ) ;
allSendUserIds . Add ( user . ID ) ;
allSendUserNames . Add ( user . NAME ) ;
}
} ) ;
}
}
sendNotices = NotificationTaskService . InsertUserNoticeTaskModels ( allSendUserTitles , allSendDataIds , filter . GetOrgId ( ) , allSendUserIds , allSendUserNames , DateTime . Now , endTime , 1 , "LR002" ) ;
}
UnifiedCommit ( ( ) = >
{
if ( demandDistinguishes . Any ( ) )
BantchAddEntityNoCommit ( demandDistinguishes ) ;
if ( sendNotices . Any ( ) )
BantchAddEntityNoCommit ( sendNotices ) ;
} ) ;
}
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 ;
} ) ;
}
/// <summary>
/// 通知安环部所有人员和各个部门安全员相关的安全生产法律法规需求分析表
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
[HttpGet, Route("NoticeEndDemandDistinguish")]
public JsonActionResult < bool > NoticeEndDemandDistinguish ( [ FromBody ] KeywordFilter filter )
{
return SafeExecute < bool > ( ( ) = >
{
try
{
//需求识别
List < T_LR_DEMAND_DISTINGUISH > demandDistinguishes = new List < T_LR_DEMAND_DISTINGUISH > ( ) ;
//需求分析
List < T_LR_DEMAND_DISTINGUISH_REPORT > demandDistinguishReports = new List < T_LR_DEMAND_DISTINGUISH_REPORT > ( ) ;
List < T_LR_DEMAND_DISTINGUISH_REPORT_DETAIL > demandDistinguishReportDetails = new List < T_LR_DEMAND_DISTINGUISH_REPORT_DETAIL > ( ) ;
//获取清单明细
List < T_LR_LEGAL_LIST_DETAIL > legalListDetails = new List < T_LR_LEGAL_LIST_DETAIL > ( ) ;
List < T_LR_LAW_INTEGRATE_UPDATE_DETAIL > integrateUpdateDetails = new List < T_LR_LAW_INTEGRATE_UPDATE_DETAIL > ( ) ;
List < T_LR_LAW_INSTITUTION > lawInstitutions = new List < T_LR_LAW_INSTITUTION > ( ) ;
List < T_LR_LEGAL_LIST_DETAIL_USER > lrDemandUsers = new List < T_LR_LEGAL_LIST_DETAIL_USER > ( ) ;
List < T_FM_NOTIFICATION_TASK > sendNotices = null ;
T_LR_LEGAL_LIST legalList = null ;
DateTime nowTime = DateTime . Now ;
BaseFilter baseFilter = new BaseFilter ( filter . GetOrgId ( ) ) ;
var config = GetEntity < T_LR_LRCONFIG > ( null , baseFilter ) ;
if ( config ! = null )
{
if ( config . DEMAND_END_TIME . Month = = nowTime . Month & & config . DEMAND_END_TIME . Day = = nowTime . Day )
{
var allDepartMents = GetEntities < T_FM_DEPARTMENT > ( t = > t . IS_DELETED = = false , baseFilter , new string [ ] { "Nav_User" } ) . ToList ( ) ;
var AHDepartMent = GetEntity < T_FM_USER > ( t = > t . Nav_ApproveRole . NAME = = "安环部负责人" & & t . ENABLE_STATUS = = 0 ) ;
if ( AHDepartMent = = null )
{
AHDepartMent = GetEntity < T_FM_USER > ( t = > t . Nav_ApproveRole . NAME = = "安环部安全员" & & t . ENABLE_STATUS = = 0 ) ;
}
var allSafeUsers = GetEntities < T_FM_USER > ( t = > t . Nav_ApproveRole . NAME . Contains ( "安全员" ) & & t . ENABLE_STATUS = = 0 , baseFilter ) ;
#region 通 知 安 环 部 所 有 人 员 和 各 个 部 门 安 全 员 相 关 的 安 全 生 产 法 律 法 规 需 求 分 析 表
//法律法规需求识别
var demandDistinguishs = GetEntities < T_LR_DEMAND_DISTINGUISH > ( t = > t . YEARS = = config . DEMAND_END_TIME . Year , baseFilter , new string [ ] { "Nav_Department" , "Nav_User" , "Nav_DemandLaw.Nav_Law" , "Nav_DemandOther.Nav_OtherDistinguish" } ) . ToList ( ) ;
//识别法律法规
var demandLaws = GetEntities < T_LR_DEMAND_LAW > ( t = > t . Nav_DemandDistinguish . YEARS = = config . DEMAND_END_TIME . Year , baseFilter , new string [ ] { "Nav_DemandDistinguish.Nav_Department" , "Nav_DemandDistinguish.Nav_User" , "Nav_Law" } ) . ToList ( ) ;
//识别其他
var demandOthers = GetEntities < T_LR_DEMAND_OTHER > ( t = > t . Nav_DemandDistinguish . YEARS = = config . DEMAND_END_TIME . Year , baseFilter , new string [ ] { "Nav_OtherDistinguish.Nav_DemandUser" , "Nav_DemandDistinguish.Nav_Department" , "Nav_DemandDistinguish.Nav_User" } ) . ToList ( ) ;
var allSendUserTitles = new List < string > ( ) ;
var allSendDataIds = new List < Guid > ( ) ;
var allSendUserIds = new List < Guid > ( ) ;
var allSendUserNames = new List < string > ( ) ;
var allFormCodes = new List < string > ( ) ;
if ( demandDistinguishs ! = null & & demandDistinguishs . Count ( ) > 0 )
{
var hasDemandDistinguishs = demandDistinguishs . Where ( t = > t . DISTINGUISH_TYPE = = LRDistinguishEnum . 已 识 别 ) . ToList ( ) ;
var hasDemandLaws = demandLaws . Where ( t = > t . Nav_DemandDistinguish . DISTINGUISH_TYPE = = LRDistinguishEnum . 已 识 别 ) . OrderBy ( t = > t . Nav_DemandDistinguish . Nav_Department . DEPARTMENT_TYPE ) . ToList ( ) ;
var hasDemandOthers = demandOthers . Where ( t = > t . Nav_DemandDistinguish . DISTINGUISH_TYPE = = LRDistinguishEnum . 已 识 别 ) . OrderBy ( t = > t . Nav_DemandDistinguish . Nav_Department . DEPARTMENT_TYPE ) . ToList ( ) ;
//公司级
var company = allDepartMents . Where ( l = > l . DEPARTMENT_TYPE = = 3 ) . FirstOrDefault ( ) ;
T_LR_DEMAND_DISTINGUISH_REPORT demandDistinguishReport = new T_LR_DEMAND_DISTINGUISH_REPORT ( ) ;
demandDistinguishReport . ID = Guid . NewGuid ( ) ;
demandDistinguishReport . INVESTIGATE_TIMES = demandDistinguishs . Count ( ) ;
demandDistinguishReport . ORG_ID = config . ORG_ID ;
demandDistinguishReport . REPORT_TIME = config . DEMAND_END_TIME ;
demandDistinguishReport . YEARS = nowTime . Year ;
demandDistinguishReport . DEPARTMENT_ID = company . ID ;
demandDistinguishReport . FEEDBACK_TIMES = hasDemandDistinguishs . Count ( ) ;
double hasDemandDistinguishsCount = hasDemandDistinguishs . Count ( ) ;
double demandDistinguishsCount = demandDistinguishs . Count ( ) ;
demandDistinguishReport . FEEDBACK_RATE = ( hasDemandDistinguishsCount / demandDistinguishsCount * 100 ) . ToString ( "#0.00" ) ;
demandDistinguishReports . Add ( demandDistinguishReport ) ;
if ( hasDemandLaws ! = null & & hasDemandLaws . Count ( ) > 0 )
{
//法律法规
var lawDemandDistinguishs = hasDemandLaws . Distinct ( t = > t . LAW_ID ) . ToList ( ) ; //法律法规去重
if ( lawDemandDistinguishs ! = null & & lawDemandDistinguishs . Count ( ) > 0 )
{
lawDemandDistinguishs . ForEach ( ddd = >
{
var demandLaw = hasDemandLaws . Where ( hdl = > hdl . LAW_ID = = ddd . LAW_ID ) . ToList ( ) ;
if ( demandLaw ! = null & & demandLaw . Count ( ) > 0 )
{
T_LR_DEMAND_DISTINGUISH_REPORT_DETAIL demandDistinguishReportDetail = new T_LR_DEMAND_DISTINGUISH_REPORT_DETAIL ( ) ;
demandDistinguishReportDetail . REPORT_ID = demandDistinguishReport . ID ;
demandDistinguishReportDetail . DEMAND_NAME = ddd . Nav_Law . NAME ; //需求法律法规
demandDistinguishReportDetail . DEMAND_TIMES = demandLaw . Count ( ) ; //需求人数
demandDistinguishReportDetail . IS_OTHER = 0 ;
demandLaw . ForEach ( dl = >
{
if ( string . IsNullOrEmpty ( demandDistinguishReportDetail . DEMAND_DEPARTMENT ) ) //需求部门
{ demandDistinguishReportDetail . DEMAND_DEPARTMENT + = dl . Nav_DemandDistinguish . Nav_Department . NAME ; }
else { demandDistinguishReportDetail . DEMAND_DEPARTMENT + = ";" + dl . Nav_DemandDistinguish . Nav_Department . NAME ; }
if ( string . IsNullOrEmpty ( demandDistinguishReportDetail . DEMAND_PERSON ) ) //提出人
{ demandDistinguishReportDetail . DEMAND_PERSON + = dl . Nav_DemandDistinguish . Nav_User . NAME ; }
else { demandDistinguishReportDetail . DEMAND_PERSON + = ";" + dl . Nav_DemandDistinguish . Nav_User . NAME ; }
} ) ;
demandDistinguishReportDetail . ORG_ID = ddd . ORG_ID ;
demandDistinguishReportDetails . Add ( demandDistinguishReportDetail ) ;
}
} ) ;
}
}
if ( hasDemandOthers ! = null & & hasDemandOthers . Count ( ) > 0 )
{
//需求识别其他
var lawDemandOthers = hasDemandOthers . Distinct ( t = > t . OTHER_ID ) . ToList ( ) ; //需求识别其他去重
if ( lawDemandOthers ! = null & & lawDemandOthers . Count ( ) > 0 )
{
lawDemandOthers . ForEach ( ddd = >
{
var demandOther = hasDemandOthers . Where ( hdl = > hdl . OTHER_ID = = ddd . OTHER_ID ) . ToList ( ) ;
if ( demandOther ! = null & & demandOther . Count ( ) > 0 )
{
T_LR_DEMAND_DISTINGUISH_REPORT_DETAIL demandDistinguishReportDetail = new T_LR_DEMAND_DISTINGUISH_REPORT_DETAIL ( ) ;
demandDistinguishReportDetail . REPORT_ID = demandDistinguishReport . ID ;
demandDistinguishReportDetail . DEMAND_NAME = ddd . Nav_OtherDistinguish . NAME ; //需求识别其他
demandDistinguishReportDetail . DEMAND_TIMES = demandOther . Count ( ) ; //需求人数
demandDistinguishReportDetail . IS_OTHER = 1 ;
demandOther . ForEach ( dl = >
{
if ( string . IsNullOrEmpty ( demandDistinguishReportDetail . DEMAND_DEPARTMENT ) ) //需求部门
{ demandDistinguishReportDetail . DEMAND_DEPARTMENT + = dl . Nav_DemandDistinguish . Nav_Department . NAME ; }
else { demandDistinguishReportDetail . DEMAND_DEPARTMENT + = ";" + dl . Nav_DemandDistinguish . Nav_Department . NAME ; }
if ( string . IsNullOrEmpty ( demandDistinguishReportDetail . DEMAND_PERSON ) ) //提出人
{ demandDistinguishReportDetail . DEMAND_PERSON + = dl . Nav_DemandDistinguish . Nav_User . NAME ; }
else { demandDistinguishReportDetail . DEMAND_PERSON + = ";" + dl . Nav_DemandDistinguish . Nav_User . NAME ; }
} ) ;
demandDistinguishReportDetail . ORG_ID = ddd . ORG_ID ;
demandDistinguishReportDetails . Add ( demandDistinguishReportDetail ) ;
}
} ) ;
}
}
var ahUser = GetEntities < T_FM_USER > ( t = > t . Nav_ApproveRole . NAME . Contains ( "安环部" ) & & t . ENABLE_STATUS = = 0 , baseFilter ) . ToList ( ) ;
if ( ahUser ! = null & & ahUser . Count ( ) > 0 )
{
ahUser . ForEach ( t = >
{
allSendUserTitles . Add ( "公司级安全生产法律法规需求分析表" ) ;
allSendDataIds . Add ( demandDistinguishReport . ID ) ;
allSendUserIds . Add ( t . ID ) ;
allSendUserNames . Add ( t . NAME ) ;
allFormCodes . Add ( "LR003_SHOWPRINT" ) ;
} ) ;
}
//部门级
var alldepartments = allDepartMents . Where ( t = > t . DEPARTMENT_TYPE = = 0 & & t . ID ! = AHDepartMent . DEPARTMENT_ID & & t . IS_DELETED = = false ) . ToList ( ) ;
foreach ( var department in alldepartments )
{
var deps = new List < Guid > ( ) ;
DepartmentService . GetDepartmentIds ( filter . GetOrgId ( ) , new List < Guid > ( ) { department . ID } , ref deps ) ;
deps . Add ( department . ID ) ;
Guid depSafeUserId = Guid . Empty ;
string depSafeUserName = "" ;
var chargeUser = allSafeUsers . FirstOrDefault ( t = > t . DEPARTMENT_ID = = department . ID ) ;
if ( chargeUser ! = null )
{
depSafeUserId = chargeUser . ID ;
depSafeUserName = chargeUser . NAME ;
}
else
{
depSafeUserId = ( Guid ) department . USER_ID ;
depSafeUserName = department . Nav_User . NAME ;
}
var departmentDemandDistinguishs = demandDistinguishs . Where ( d = > deps . Contains ( d . DEPARTMENT_ID ) ) . ToList ( ) ; //筛选出不同部门,排除公司级
if ( departmentDemandDistinguishs ! = null & & departmentDemandDistinguishs . Count ( ) > 0 )
{
var hasDepartmentDemandDistinguish = departmentDemandDistinguishs . Where ( d = > d . DISTINGUISH_TYPE = = LRDistinguishEnum . 已 识 别 ) . ToList ( ) ;
T_LR_DEMAND_DISTINGUISH_REPORT departmentDemandDistinguishReport = new T_LR_DEMAND_DISTINGUISH_REPORT ( ) ;
departmentDemandDistinguishReport . ID = Guid . NewGuid ( ) ;
departmentDemandDistinguishReport . INVESTIGATE_TIMES = departmentDemandDistinguishs . Count ( ) ;
departmentDemandDistinguishReport . ORG_ID = config . ORG_ID ;
departmentDemandDistinguishReport . REPORT_TIME = config . DEMAND_END_TIME ;
departmentDemandDistinguishReport . YEARS = nowTime . Year ;
departmentDemandDistinguishReport . DEPARTMENT_ID = department . ID ;
double hasDepartmentDemandDistinguishCount = hasDepartmentDemandDistinguish . Count ( ) ;
double departmentDemandDistinguishCount = departmentDemandDistinguishs . Count ( ) ;
departmentDemandDistinguishReport . FEEDBACK_TIMES = hasDepartmentDemandDistinguish . Count ( ) ;
departmentDemandDistinguishReport . FEEDBACK_RATE = ( hasDepartmentDemandDistinguishCount / departmentDemandDistinguishCount * 100 ) . ToString ( "#0.00" ) ;
demandDistinguishReports . Add ( departmentDemandDistinguishReport ) ;
if ( hasDepartmentDemandDistinguish ! = null & & hasDepartmentDemandDistinguish . Count ( ) > 0 )
{
hasDepartmentDemandDistinguish . ForEach ( hddd = >
{
var hasDepartmentDemandLaws = demandLaws . Where ( t = > t . DISTINGUISH_ID = = hddd . ID ) . ToList ( ) ; //该部门的法律法规需求
var hasDepartmentDemandOthers = demandOthers . Where ( t = > t . DISTINGUISH_ID = = hddd . ID ) . ToList ( ) ; //该部门的其他需求
if ( hasDepartmentDemandLaws ! = null & & hasDepartmentDemandLaws . Count ( ) > 0 )
{
//法律法规
var lawDemandDistinguishs = hasDepartmentDemandLaws . Where ( t = > deps . Contains ( t . Nav_DemandDistinguish . DEPARTMENT_ID ) ) . Distinct ( t = > t . LAW_ID ) . ToList ( ) ; //法律法规去重
if ( lawDemandDistinguishs ! = null & & lawDemandDistinguishs . Count ( ) > 0 )
{
foreach ( var lddd in lawDemandDistinguishs )
{
var demandLaw = hasDepartmentDemandLaws . Where ( hdl = > hdl . LAW_ID = = lddd . LAW_ID ) . ToList ( ) ;
if ( demandLaw ! = null & & demandLaw . Count ( ) > 0 )
{
T_LR_DEMAND_DISTINGUISH_REPORT_DETAIL demandDistinguishReportDetail = new T_LR_DEMAND_DISTINGUISH_REPORT_DETAIL ( ) ;
demandDistinguishReportDetail . REPORT_ID = departmentDemandDistinguishReport . ID ;
demandDistinguishReportDetail . DEMAND_NAME = lddd . Nav_Law . NAME ; //需求法律法规
demandDistinguishReportDetail . DEMAND_TIMES = demandLaw . Count ( ) ; //需求人数
demandDistinguishReportDetail . IS_OTHER = 0 ;
demandLaw . ForEach ( dl = >
{
if ( string . IsNullOrEmpty ( demandDistinguishReportDetail . DEMAND_DEPARTMENT ) ) //需求部门
{ demandDistinguishReportDetail . DEMAND_DEPARTMENT + = dl . Nav_DemandDistinguish . Nav_Department . NAME ; }
else { demandDistinguishReportDetail . DEMAND_DEPARTMENT + = ";" + dl . Nav_DemandDistinguish . Nav_Department . NAME ; }
if ( string . IsNullOrEmpty ( demandDistinguishReportDetail . DEMAND_PERSON ) ) //提出人
{ demandDistinguishReportDetail . DEMAND_PERSON + = dl . Nav_DemandDistinguish . Nav_User . NAME ; }
else { demandDistinguishReportDetail . DEMAND_PERSON + = ";" + dl . Nav_DemandDistinguish . Nav_User . NAME ; }
} ) ;
demandDistinguishReportDetail . ORG_ID = lddd . ORG_ID ;
demandDistinguishReportDetails . Add ( demandDistinguishReportDetail ) ;
}
} ;
}
}
if ( hasDemandOthers ! = null & & hasDemandOthers . Count ( ) > 0 )
{
//需求识别其他
var lawDemandOthers = hasDemandOthers . Where ( t = > deps . Contains ( t . Nav_DemandDistinguish . DEPARTMENT_ID ) ) . Distinct ( t = > t . OTHER_ID ) . ToList ( ) ; //需求识别其他去重
if ( lawDemandOthers ! = null & & lawDemandOthers . Count ( ) > 0 )
{
lawDemandOthers . ForEach ( ldo = >
{
var demandOther = hasDemandOthers . Where ( hdl = > hdl . OTHER_ID = = ldo . OTHER_ID ) . ToList ( ) ;
if ( demandOther ! = null & & demandOther . Count ( ) > 0 )
{
T_LR_DEMAND_DISTINGUISH_REPORT_DETAIL demandDistinguishReportDetail = new T_LR_DEMAND_DISTINGUISH_REPORT_DETAIL ( ) ;
demandDistinguishReportDetail . REPORT_ID = departmentDemandDistinguishReport . ID ;
demandDistinguishReportDetail . DEMAND_NAME = ldo . Nav_OtherDistinguish . NAME ; //需求识别其他
demandDistinguishReportDetail . DEMAND_TIMES = demandOther . Count ( ) ; //需求人数
demandDistinguishReportDetail . IS_OTHER = 1 ;
demandOther . ForEach ( dl = >
{
if ( string . IsNullOrEmpty ( demandDistinguishReportDetail . DEMAND_DEPARTMENT ) ) //需求部门
{ demandDistinguishReportDetail . DEMAND_DEPARTMENT + = dl . Nav_DemandDistinguish . Nav_Department . NAME ; }
else { demandDistinguishReportDetail . DEMAND_DEPARTMENT + = ";" + dl . Nav_DemandDistinguish . Nav_Department . NAME ; }
if ( string . IsNullOrEmpty ( demandDistinguishReportDetail . DEMAND_PERSON ) ) //提出人
{ demandDistinguishReportDetail . DEMAND_PERSON + = dl . Nav_DemandDistinguish . Nav_User . NAME ; }
else { demandDistinguishReportDetail . DEMAND_PERSON + = ";" + dl . Nav_DemandDistinguish . Nav_User . NAME ; }
} ) ;
demandDistinguishReportDetail . ORG_ID = ldo . ORG_ID ;
demandDistinguishReportDetails . Add ( demandDistinguishReportDetail ) ;
}
} ) ;
}
}
} ) ;
}
allSendUserTitles . Add ( "部门级安全生产法律法规需求分析表" ) ;
allSendDataIds . Add ( departmentDemandDistinguishReport . ID ) ;
allSendUserIds . Add ( depSafeUserId ) ;
allSendUserNames . Add ( depSafeUserName ) ;
allFormCodes . Add ( "LR003_SHOWPRINT" ) ;
}
}
}
#endregion 通 知 安 环 部 所 有 人 员 和 各 个 部 门 安 全 员 相 关 的 安 全 生 产 法 律 法 规 需 求 分 析 表
#region 通 知 安 环 部 负 责 人 安 全 生 产 法 律 法 规 获 取 清 单
if ( demandOthers ! = null & & demandOthers . Count ( ) > 0 )
{
legalList = new T_LR_LEGAL_LIST ( ) ;
legalList . ID = Guid . NewGuid ( ) ;
legalList . DISTINGUISH_TIME = nowTime ;
legalList . ORG_ID = config . ORG_ID ;
legalList . YEARS = nowTime . Year ;
legalList . DEPARTMENT_ID = ( Guid ) AHDepartMent . DEPARTMENT_ID ;
legalList . USER_ID = AHDepartMent . ID ;
allSendUserTitles . Add ( "安全生产法律法规获取清单" ) ;
allSendDataIds . Add ( legalList . ID ) ;
allSendUserIds . Add ( AHDepartMent . ID ) ;
allSendUserNames . Add ( AHDepartMent . NAME ) ;
allFormCodes . Add ( "LR006" ) ;
//需求识别其他
var lawDemandOthers = demandOthers . Distinct ( t = > t . OTHER_ID ) . ToList ( ) ; //需求识别其他去重
if ( lawDemandOthers ! = null & & lawDemandOthers . Count ( ) > 0 )
{
lawDemandOthers . ForEach ( ddd = >
{
T_LR_LEGAL_LIST_DETAIL legalListDetail = new T_LR_LEGAL_LIST_DETAIL ( ) ;
legalListDetail . ID = Guid . NewGuid ( ) ;
legalListDetail . LEGAL_ID = legalList . ID ;
legalListDetail . OTHER_ID = ddd . OTHER_ID ; //需求识别其他
legalListDetail . ORG_ID = ddd . ORG_ID ;
if ( ddd . Nav_OtherDistinguish ! = null & & ddd . Nav_OtherDistinguish . Nav_DemandUser ! = null & & ddd . Nav_OtherDistinguish . Nav_DemandUser . Count ( ) > 0 )
{
ddd . Nav_OtherDistinguish . Nav_DemandUser . ForEach ( od = >
{
T_LR_LEGAL_LIST_DETAIL_USER t_LR_LEGAL_LIST_DETAIL_USER = new T_LR_LEGAL_LIST_DETAIL_USER ( ) ;
t_LR_LEGAL_LIST_DETAIL_USER . ORG_ID = ddd . ORG_ID ;
t_LR_LEGAL_LIST_DETAIL_USER . LEGAL_LIST_DETAIL = legalListDetail . ID ;
t_LR_LEGAL_LIST_DETAIL_USER . USER_ID = od . USER_ID ;
lrDemandUsers . Add ( t_LR_LEGAL_LIST_DETAIL_USER ) ;
} ) ;
}
legalListDetails . Add ( legalListDetail ) ;
} ) ;
}
}
#endregion 通 知 安 环 部 负 责 人 安 全 生 产 法 律 法 规 获 取 清 单
sendNotices = NotificationTaskService . InsertUserNoticeTaskModels ( allSendUserTitles , allSendDataIds , filter . GetOrgId ( ) , allSendUserIds , allSendUserNames , DateTime . Now , DateTime . Now . AddDays ( 1 ) , 1 , allFormCodes ) ;
}
}
UnifiedCommit ( ( ) = >
{
if ( demandDistinguishReports . Any ( ) )
BantchAddEntityNoCommit ( demandDistinguishReports ) ;
if ( demandDistinguishReportDetails . Any ( ) )
BantchAddEntityNoCommit ( demandDistinguishReportDetails ) ;
if ( legalList ! = null )
AddEntityNoCommit ( legalList ) ;
if ( legalListDetails . Any ( ) )
BantchAddEntityNoCommit ( legalListDetails ) ;
if ( lrDemandUsers . Any ( ) )
BantchAddEntityNoCommit ( lrDemandUsers ) ;
if ( sendNotices ! = null & & sendNotices . Any ( ) )
BantchAddEntityNoCommit ( sendNotices ) ;
} ) ;
}
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 ;
} ) ;
}
/// <summary>
/// 通知安环部负责人安全生产法律法规更新与融入
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
[HttpGet, Route("NoticeLRLawIntegrateUpdate")]
2025-11-07 11:03:11 +08:00
public JsonActionResult < bool > NoticeLRLawIntegrateUpdate ( KeywordFilter filter , DateTime dtNow )
2025-08-25 09:56:57 +08:00
{
return SafeExecute < bool > ( ( ) = >
{
try
{
List < T_LR_LAW_INSTITUTION > lawInstitutions = new List < T_LR_LAW_INSTITUTION > ( ) ;
T_LR_LAW_INTEGRATE_UPDATE lawIntegrateUpdate = null ;
List < T_LR_LAW_INTEGRATE_UPDATE_DETAIL > integrateUpdateDetails = new List < T_LR_LAW_INTEGRATE_UPDATE_DETAIL > ( ) ;
T_FM_NOTIFICATION_TASK sendNotice = null ;
2025-11-07 11:03:11 +08:00
//DateTime nowTime = DateTime.Now;
2025-08-25 09:56:57 +08:00
BaseFilter baseFilter = new BaseFilter ( filter . GetOrgId ( ) ) ;
var config = GetEntities < T_LR_INTEGRATE_UPDATE_TIME > ( t = > t . IS_DELETED = = false , baseFilter ) ;
if ( config ! = null & & config . Any ( ) )
{
bool isTime = false ;
config . ForEach ( t = >
{
2025-11-07 11:03:11 +08:00
if ( t . INTEGRATE_UPDATE_TIME . Month = = dtNow . Month & & t . INTEGRATE_UPDATE_TIME . Day = = dtNow . Day )
2025-08-25 09:56:57 +08:00
{
isTime = true ;
}
} ) ;
if ( isTime )
{
lawIntegrateUpdate = new T_LR_LAW_INTEGRATE_UPDATE ( ) ;
lawIntegrateUpdate . ID = Guid . NewGuid ( ) ;
2025-11-07 11:03:11 +08:00
lawIntegrateUpdate . YEAR = dtNow ;
2025-08-25 09:56:57 +08:00
lawIntegrateUpdate . ORG_ID = filter . GetOrgId ( ) ;
lawIntegrateUpdate . RATE = "0" ;
var laws = GetEntities < T_LR_LAW > ( t = > t . LAW_STATUS = = BSLawStatusEnum . 现 行 , baseFilter , new string [ ] { "Nav_LawVersion" , "Nav_LawSCSystem" } ) . ToList ( ) ;
if ( laws ! = null & & laws . Count ( ) > 0 )
{
laws . ForEach ( t = >
{
T_LR_LAW_INTEGRATE_UPDATE_DETAIL integrateUpdateDetail = new T_LR_LAW_INTEGRATE_UPDATE_DETAIL ( ) ;
integrateUpdateDetail . ID = Guid . NewGuid ( ) ;
integrateUpdateDetail . LAW_ID = t . ID ;
integrateUpdateDetail . INTEGRATE_UPDATE_ID = lawIntegrateUpdate . ID ;
integrateUpdateDetail . UPDATE_STATUS = LRLawIntegrateUpdateStatusEnum . 无 需 更 新 ;
integrateUpdateDetail . ORG_ID = filter . GetOrgId ( ) ;
integrateUpdateDetails . Add ( integrateUpdateDetail ) ;
if ( t . Nav_LawSCSystem ! = null & & t . Nav_LawSCSystem . Count ( ) > 0 )
{
t . Nav_LawSCSystem . ForEach ( li = >
{
T_LR_LAW_INSTITUTION lawInstitution = new T_LR_LAW_INSTITUTION ( ) ;
lawInstitution . UPDATE_DETAIL_ID = integrateUpdateDetail . ID ;
lawInstitution . SC_SYSTEM_ID = li . SC_SYSTEM_ID ;
lawInstitution . ORG_ID = filter . GetOrgId ( ) ;
lawInstitutions . Add ( lawInstitution ) ;
} ) ;
}
} ) ;
var safeUser = GetEntity < T_FM_USER > ( t = > t . Nav_ApproveRole . NAME = = "安环部负责人" & & t . ENABLE_STATUS = = 0 ) ;
if ( safeUser = = null )
{
safeUser = GetEntity < T_FM_USER > ( t = > t . Nav_ApproveRole . NAME = = "安环部安全员" & & t . ENABLE_STATUS = = 0 ) ;
}
sendNotice = NotificationTaskService . InsertUserNoticeTaskModel ( "法律法规更新与融入" , lawIntegrateUpdate . ID , filter . GetOrgId ( ) , safeUser . ID , safeUser . NAME , DateTime . Now , DateTime . Now . AddDays ( 10 ) , 0 , "LR010" ) ;
}
}
UnifiedCommit ( ( ) = >
{
if ( lawIntegrateUpdate ! = null )
AddEntityNoCommit ( lawIntegrateUpdate ) ;
if ( integrateUpdateDetails . Any ( ) )
BantchAddEntityNoCommit ( integrateUpdateDetails ) ;
if ( lawInstitutions . Any ( ) )
BantchAddEntityNoCommit ( lawInstitutions ) ;
if ( sendNotice ! = null )
AddEntityNoCommit ( sendNotice ) ;
} ) ;
}
}
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 ;
} ) ;
}
/// <summary>
/// 触发安全意识调查
/// </summary>
/// <param name="filter"></param>
2025-11-07 11:03:11 +08:00
private void CheckCreateSafeSurvey ( KeywordFilter filter , DateTime dtNow , T_SE_SECONFIG config )
2025-08-25 09:56:57 +08:00
{
var mm = 12 ;
var dd = 1 ;
if ( config ! = null & & config . SAFE_SERVEY_TRIGGER_TIME ! = null )
{
mm = config . SAFE_SERVEY_TRIGGER_TIME . Value . Month ;
dd = config . SAFE_SERVEY_TRIGGER_TIME . Value . Day ;
}
2025-11-07 11:03:11 +08:00
if ( ! ( mm = = dtNow . Month & & dd = = dtNow . Day ) )
2025-08-25 09:56:57 +08:00
return ;
var data = GetEntity < T_SE_SAFE_SURVEY > ( t = > t . LAUNCH_TIME ! = null & &
2025-11-07 11:03:11 +08:00
t . LAUNCH_TIME . Value . Year = = dtNow . Year & &
t . LAUNCH_TIME . Value . Month = = dtNow . Month & &
t . LAUNCH_TIME . Value . Day = = dtNow . Day ) ;
2025-08-25 09:56:57 +08:00
if ( data ! = null )
{
return ;
}
BaseFilter baseFilter = new BaseFilter ( filter . GetOrgId ( ) ) ;
baseFilter . Include = new string [ ] { "Nav_ApproveRole" , "Nav_Department" } ;
var depPostList = GetEntities < T_FM_USER > ( t = > ( allDeps . Contains ( t . Nav_Department . NAME ) ) & & ( t . Nav_ApproveRole . NAME = = "部门安全员" | | t . Nav_ApproveRole . NAME = = "安环部安全员" ) & & t . ENABLE_STATUS = = 0 , baseFilter ) ;
if ( depPostList = = null )
{
return ;
}
var taskID = Guid . NewGuid ( ) ;
var allSendUserIds = new List < Guid > ( ) ;
var allSendUserNames = new List < string > ( ) ;
var allSendUserTitles = new List < string > ( ) ;
var allSendDataIds = new List < Guid > ( ) ;
List < T_SE_SAFE_SURVEY > safeSurveys = new List < T_SE_SAFE_SURVEY > ( ) ;
List < T_SE_SAFE_SURVEY_LIST_DEPARTMENT > safeSurveyDeps = new List < T_SE_SAFE_SURVEY_LIST_DEPARTMENT > ( ) ;
var depIds = depPostList . Select ( t = > t . DEPARTMENT_ID ) ;
2025-09-05 14:37:58 +08:00
var allDep = GetEntities < T_FM_DEPARTMENT > ( t = > t . DEPARTMENT_TYPE ! = ( int ) FMDepartmentType . Class , new BaseFilter ( filter . GetOrgId ( ) ) ) ;
2025-08-25 09:56:57 +08:00
List < T_FM_DEPARTMENT > selectDeps = new List < T_FM_DEPARTMENT > ( ) ;
foreach ( var d in depPostList )
{
var survey = new T_SE_SAFE_SURVEY
{
ID = Guid . NewGuid ( ) ,
ORG_ID = filter . GetOrgId ( ) ,
LAUNCH_TIME = DateTime . Now ,
LAUNCH_USER_ID = d . ID ,
LAUNCH_DEPARTMENT_ID = d . DEPARTMENT_ID ,
STATUS = SESafeSurveyStatus . 草 稿 ,
TASK_ID = taskID ,
NAME = "安全意识调查"
} ;
if ( safeDeps . Contains ( d . Nav_Department . NAME ) )
{
2025-09-05 14:37:58 +08:00
selectDeps = allDep . Where ( t = > ! workDeps . Contains ( t . NAME ) & & t . DEPARTMENT_TYPE = = ( int ) FMDepartmentType . Department ) . ToList ( ) ;
2025-08-25 09:56:57 +08:00
}
else
{
selectDeps = allDep . Where ( t = > t . ID = = d . DEPARTMENT_ID ) . ToList ( ) ;
}
foreach ( var dep in selectDeps )
{
var surveyDep = new T_SE_SAFE_SURVEY_LIST_DEPARTMENT
{
ID = Guid . NewGuid ( ) ,
ORG_ID = filter . GetOrgId ( ) ,
SAFE_ID = survey . ID ,
DEPARTMENT_ID = dep . ID
} ;
safeSurveyDeps . Add ( surveyDep ) ;
}
safeSurveys . Add ( survey ) ;
allSendUserIds . Add ( d . ID ) ;
allSendUserNames . Add ( d . NAME ) ;
allSendDataIds . Add ( survey . ID ) ;
allSendUserTitles . Add ( "安全意识调查发起-" + d . Nav_Department . NAME ) ;
}
var sendNotices = NotificationTaskService . InsertUserNoticeTaskModels ( allSendUserTitles , allSendDataIds , filter . GetOrgId ( ) , allSendUserIds , allSendUserNames , DateTime . Now , DateTime . Now . AddDays ( 30 ) , ( int ) FMNoticeTypeEnum . 消 息 , "SE006" ) ;
UnifiedCommit ( ( ) = >
{
if ( safeSurveys ! = null & & safeSurveys . Any ( ) )
BantchAddEntityNoCommit ( safeSurveys ) ;
if ( sendNotices ! = null & & sendNotices . Any ( ) )
BantchAddEntityNoCommit ( sendNotices ) ;
if ( safeSurveyDeps ! = null & & safeSurveyDeps . Any ( ) )
BantchAddEntityNoCommit ( safeSurveyDeps ) ;
} ) ;
}
2025-11-07 11:03:11 +08:00
private void CheckSafeSuveyNotAnswered ( KeywordFilter filter , DateTime dtNow )
2025-08-25 09:56:57 +08:00
{
//截止日前前3天未完成推送今日提醒给该员工本人
2025-11-07 11:03:11 +08:00
//var dt = DateTime.Now;
var lasttime = dtNow . AddDays ( 3 ) ;
var surveys = GetEntities < T_SE_SAFE_SURVEY > ( t = > t . LAUNCH_TIME . Value . Year = = dtNow . Year & & t . STATUS = = SESafeSurveyStatus . 调 查 中 & & t . END_TIME . Value < = lasttime & & dtNow < t . END_TIME . Value ,
2025-08-25 09:56:57 +08:00
new BaseFilter ( filter . GetOrgId ( ) ) , new string [ ] { "Nav_Papers.Nav_User" } ) . ToList ( ) ;
if ( surveys = = null | | surveys . Count = = 0 )
{
return ;
}
var sendTitle = "请填写安全意识调查 【" + surveys . FirstOrDefault ( ) . NAME + "】发起时间:" + string . Format ( "{0:yyyy-MM-dd}" , surveys . FirstOrDefault ( ) . LAUNCH_TIME ) ;
var isRepeat = GetEntity < T_FM_NOTIFICATION_TASK > ( t = > t . NOTICE_TITLE = = sendTitle ) ;
if ( isRepeat ! = null )
{
return ;
}
var allSendUserTitles = new List < string > ( ) ;
var allSendDataIds = new List < Guid > ( ) ;
var allSendUserIds = new List < Guid > ( ) ;
var allSendUserNames = new List < string > ( ) ;
surveys . ForEach ( t = >
{
var uids = t . Nav_Papers . Where ( p = > p . USER_ID ! = null & & p . ANSWER = = 0 ) . Select ( p = > new { p . USER_ID , p . Nav_User . NAME } ) . Distinct ( ) . ToList ( ) ;
if ( uids ! = null & & uids . Count > 0 )
{
foreach ( var item in uids )
{
allSendUserTitles . Add ( "请填写安全意识调查 【" + t . NAME + "】发起时间:" + string . Format ( "{0:yyyy-MM-dd}" , t . LAUNCH_TIME ) ) ;
allSendDataIds . Add ( t . ID ) ;
allSendUserIds . Add ( ( Guid ) item . USER_ID ) ;
allSendUserNames . Add ( item . NAME ) ;
}
}
} ) ;
var sendNotices = NotificationTaskService . InsertUserNoticeTaskModels ( allSendUserTitles , allSendDataIds , filter . GetOrgId ( ) , allSendUserIds , allSendUserNames , DateTime . Now , DateTime . Now . AddDays ( 1 ) . Date , ( int ) FMNoticeTypeEnum . 今 日 提 醒 , "PF135" ) ;
UnifiedCommit ( ( ) = >
{
if ( sendNotices . Any ( ) )
BantchAddEntityNoCommit ( sendNotices ) ;
} ) ;
}
/// <summary>
/// 触发培训需求调查
/// </summary>
2025-11-07 11:03:11 +08:00
private void CheckCreateTrainSurvey ( KeywordFilter filter , DateTime dtNow , T_SE_SECONFIG config )
2025-08-25 09:56:57 +08:00
{
var mm = 12 ;
var dd = 1 ;
if ( config ! = null & & config . TRAIN_SURVEY_TRIGGER_TIME ! = null )
{
mm = config . TRAIN_SURVEY_TRIGGER_TIME . Value . Month ;
dd = config . TRAIN_SURVEY_TRIGGER_TIME . Value . Day ;
}
2025-11-07 11:03:11 +08:00
if ( ! ( mm = = dtNow . Month & & dd = = dtNow . Day ) )
2025-08-25 09:56:57 +08:00
{
return ;
}
var data = GetEntity < T_SE_TRAIN_SURVEY > ( t = > t . LAUNCH_TIME ! = null & &
2025-11-07 11:03:11 +08:00
t . LAUNCH_TIME . Value . Year = = dtNow . Year & &
t . LAUNCH_TIME . Value . Month = = dtNow . Month & &
t . LAUNCH_TIME . Value . Day = = dtNow . Day ) ;
2025-08-25 09:56:57 +08:00
if ( data ! = null )
{
return ;
}
BaseFilter baseFilter = new BaseFilter ( filter . GetOrgId ( ) ) ;
baseFilter . Include = new string [ ] { "Nav_ApproveRole" , "Nav_Department" } ;
var depPostList = GetEntities < T_FM_USER > ( t = > ( allDeps . Contains ( t . Nav_Department . NAME ) ) & & ( t . Nav_ApproveRole . NAME = = "部门安全员" | | t . Nav_ApproveRole . NAME = = "安环部安全员" ) & & t . ENABLE_STATUS = = 0 , baseFilter ) ;
if ( depPostList = = null )
{
return ;
}
var taskID = Guid . NewGuid ( ) ;
var allSendUserIds = new List < Guid > ( ) ;
var allSendUserNames = new List < string > ( ) ;
var allSendUserTitles = new List < string > ( ) ;
var allSendDataIds = new List < Guid > ( ) ;
List < T_SE_TRAIN_SURVEY > sendTrains = new List < T_SE_TRAIN_SURVEY > ( ) ;
List < T_SE_TRAIN_SURVEY_LIST_DEPARTMENT > safeSurveyDeps = new List < T_SE_TRAIN_SURVEY_LIST_DEPARTMENT > ( ) ;
var depIds = depPostList . Select ( t = > t . DEPARTMENT_ID ) ;
2025-09-05 14:37:58 +08:00
var allDep = GetEntities < T_FM_DEPARTMENT > ( t = > t . DEPARTMENT_TYPE ! = ( int ) FMDepartmentType . Class , new BaseFilter ( filter . GetOrgId ( ) ) ) ;
2025-08-25 09:56:57 +08:00
List < T_FM_DEPARTMENT > selectDeps = new List < T_FM_DEPARTMENT > ( ) ;
foreach ( var d in depPostList )
{
var survey = new T_SE_TRAIN_SURVEY
{
ID = Guid . NewGuid ( ) ,
ORG_ID = filter . GetOrgId ( ) ,
LAUNCH_TIME = DateTime . Now ,
LAUNCH_USER_ID = d . ID ,
LAUNCH_DEPARTMENT_ID = d . DEPARTMENT_ID ,
STATUS = SETrainSurveyStatus . 草 稿 ,
SAFE_USER_IDS = d . ID . ToString ( ) ,
TASK_ID = taskID ,
NAME = "安全培训需求调查"
} ;
if ( safeDeps . Contains ( d . Nav_Department . NAME ) )
{
2025-09-05 14:37:58 +08:00
selectDeps = allDep . Where ( t = > ! workDeps . Contains ( t . NAME ) & & t . DEPARTMENT_TYPE = = ( int ) FMDepartmentType . Department ) . ToList ( ) ;
2025-08-25 09:56:57 +08:00
}
else
{
selectDeps = allDep . Where ( t = > t . ID = = d . DEPARTMENT_ID ) . ToList ( ) ;
}
foreach ( var dep in selectDeps )
{
var surveyDep = new T_SE_TRAIN_SURVEY_LIST_DEPARTMENT
{
ID = Guid . NewGuid ( ) ,
ORG_ID = filter . GetOrgId ( ) ,
SURVEY_ID = survey . ID ,
DEPARTMENT_ID = dep . ID
} ;
safeSurveyDeps . Add ( surveyDep ) ;
}
sendTrains . Add ( survey ) ;
allSendUserIds . Add ( d . ID ) ;
allSendUserNames . Add ( d . NAME ) ;
allSendDataIds . Add ( survey . ID ) ;
allSendUserTitles . Add ( "培训需求调查表" ) ;
}
var sendNotices = NotificationTaskService . InsertUserNoticeTaskModels ( allSendUserTitles , allSendDataIds , filter . GetOrgId ( ) , allSendUserIds , allSendUserNames , DateTime . Now , DateTime . Now . AddDays ( 30 ) , ( int ) FMNoticeTypeEnum . 消 息 , "SE008" ) ;
UnifiedCommit ( ( ) = >
{
if ( sendTrains ! = null & & sendTrains . Any ( ) )
BantchAddEntityNoCommit ( sendTrains ) ;
if ( sendNotices ! = null & & sendNotices . Any ( ) )
BantchAddEntityNoCommit ( sendNotices ) ;
if ( safeSurveyDeps ! = null & & safeSurveyDeps . Any ( ) )
BantchAddEntityNoCommit ( safeSurveyDeps ) ;
} ) ;
}
/// <summary>
/// 更新年度风险评价计划
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public JsonActionResult < bool > CheckSafeSuveyDepartReport ( [ FromBody ] KeywordFilter filter )
{
return SafeExecute < bool > ( ( ) = >
{
//各部门截止时间后生成部门统计报表发送发起人
var dt = DateTime . Now ;
BaseFilter baseFilter = new BaseFilter ( filter . GetOrgId ( ) ) ;
baseFilter . Include = new string [ ] { "Nav_LaunchUser" } ;
var surveys = GetEntities < T_SE_SAFE_SURVEY > (
t = > t . LAUNCH_TIME . Value . Year = = dt . Year & &
t . STATUS = = SESafeSurveyStatus . 调 查 中 & &
t . END_TIME . Value < = dt ,
baseFilter ) . ToList ( ) ;
if ( surveys = = null | | surveys . Count = = 0 )
{
return true ;
}
var allSendTitles = new List < string > ( ) ;
var allSendDataIds = new List < Guid > ( ) ;
var allSendUserIds = new List < Guid > ( ) ;
var allSendUserNames = new List < string > ( ) ;
surveys . ForEach ( t = >
{
t . STATUS = SESafeSurveyStatus . 汇 总 审 阅 中 ;
allSendTitles . Add ( "安全意识调查-" + t . NAME + "-部门汇总" ) ;
allSendDataIds . Add ( t . ID ) ;
allSendUserIds . Add ( t . LAUNCH_USER_ID ) ;
allSendUserNames . Add ( t . Nav_LaunchUser . NAME ) ;
t . Nav_LaunchUser = null ;
} ) ;
var sendNotices = NotificationTaskService . InsertUserNoticeTaskModels ( allSendTitles , allSendDataIds , filter . GetOrgId ( ) , allSendUserIds , allSendUserNames , DateTime . Now , DateTime . Now . AddDays ( 1 ) , ( int ) FMFormTypeEnum . 计 划 任 务 通 知 , "SE005_REPORTEDIT" ) ;
UnifiedCommit ( ( ) = >
{
if ( surveys . Any ( ) )
BantchUpdateEntityNoCommit ( surveys ) ;
if ( sendNotices . Any ( ) )
BantchAddEntityNoCommit ( sendNotices ) ;
} ) ;
return true ;
} ) ;
}
private JsonActionResult < bool > CheckTrainSuveyFinishByDepartment ( [ FromBody ] KeywordFilter filter )
{
return SafeExecute < bool > ( ( ) = >
{
//各部门截止时间后生成部门统计报表发送发起人
var dt = DateTime . Now ;
BaseFilter baseFilter = new BaseFilter ( filter . GetOrgId ( ) ) ;
baseFilter . Include = new string [ ] { "Nav_LaunchUser" } ;
var surveys = GetEntities < T_SE_TRAIN_SURVEY > ( t = > t . LAUNCH_TIME . Value . Year = = dt . Year & &
t . STATUS = = SETrainSurveyStatus . 调 查 中 & & t . END_TIME . Value < = dt , baseFilter ) . ToList ( ) ;
if ( surveys = = null | | surveys . Count = = 0 )
{
return true ;
}
var allSendTitles = new List < string > ( ) ;
var allSendDataIds = new List < Guid > ( ) ;
var allSendUserIds = new List < Guid > ( ) ;
var allSendUserNames = new List < string > ( ) ;
foreach ( var survey in surveys )
{
allSendTitles . Add ( "培训需求调查汇总-" + survey . NAME ) ;
allSendDataIds . Add ( survey . ID ) ;
allSendUserIds . Add ( survey . LAUNCH_USER_ID ) ;
allSendUserNames . Add ( survey . Nav_LaunchUser . NAME ) ;
survey . STATUS = SETrainSurveyStatus . 汇 总 中 ;
survey . Nav_LaunchUser = null ;
UpdateEntity ( survey ) ;
}
var sendNotices = NotificationTaskService . InsertUserNoticeTaskModels ( allSendTitles , allSendDataIds , filter . GetOrgId ( ) , allSendUserIds , allSendUserNames , DateTime . Now , DateTime . Now . AddDays ( 1 ) , ( int ) FMFormTypeEnum . 计 划 任 务 通 知 , "SE007_SHOWPRINT" ) ;
UnifiedCommit ( ( ) = >
{
if ( sendNotices . Any ( ) )
BantchAddEntityNoCommit ( sendNotices ) ;
} ) ;
return true ;
} ) ;
}
private JsonActionResult < bool > CreateYearTrainPlan ( [ FromBody ] KeywordFilter filter )
{
return SafeExecute < bool > ( ( ) = >
{
var config = GetEntity < T_SE_SECONFIG > ( t = > true ) ;
var dt = DateTime . Now ;
var mm = 12 ;
var dd = 1 ;
if ( config ! = null & & config . DEP_TRAIN_PLAN_START_TIME ! = null )
{
mm = config . DEP_TRAIN_PLAN_START_TIME . Value . Month ;
dd = config . DEP_TRAIN_PLAN_START_TIME . Value . Day ;
}
if ( mm = = dt . Month & & dd = = dt . Day )
{
int year = int . Parse ( dt . Year . ToString ( ) ) ;
var yearPlan = this . GetEntity < T_SE_YEAR_TRAIN_PLAN > ( e = > e . PLAN_YEAR = = year | | e . PLAN_YEAR = = year + 1 ) ;
if ( yearPlan ! = null )
{
return true ;
}
var approveRole = this . GetEntity < T_PF_APPROVAL_ROLE > ( e = > e . NAME . Contains ( "安环部负责人" ) ) ;
if ( approveRole ! = null )
{
var user = GetEntity < T_FM_USER > ( e = > e . APPROVE_ROLE_ID . HasValue & & e . APPROVE_ROLE_ID . Value = = approveRole . ID & & e . ENABLE_STATUS = = 0 ) ;
if ( user ! = null )
{
T_SE_YEAR_TRAIN_PLAN yearTrainPlan = new T_SE_YEAR_TRAIN_PLAN
{
ID = Guid . NewGuid ( ) ,
PLAN_YEAR = year ,
LAUNCH_TIME = dt ,
LAUNCH_DEPARTMENT_ID = user . DEPARTMENT_ID ,
LAUNCH_USER_ID = user . ID ,
STATUS = PFStandardStatus . Draft ,
ORG_ID = filter . GetOrgId ( ) ,
PLAN_NAME = "年度安全培训计划"
} ;
NotificationTaskService . SendNotificationTask ( "年度安全培训计划" , yearTrainPlan . ID , filter . GetOrgId ( ) , user . ID , user . NAME , DateTime . Now , DateTime . Now . AddDays ( 15 ) , 1 , "SE012" , ( ) = >
{
AddEntityNoCommit ( yearTrainPlan ) ;
} ) ;
}
else
{
throw new Exception ( "未找到安环部负责人!" ) ;
}
}
else
{
throw new Exception ( "未找到安环部负责人角色!" ) ;
} ;
return true ;
}
return true ;
} ) ;
}
2025-11-07 11:03:11 +08:00
private JsonActionResult < bool > FinishYearTrainPlan ( KeywordFilter filter , DateTime dtNow , T_SE_SECONFIG config )
2025-08-25 09:56:57 +08:00
{
return SafeExecute < bool > ( ( ) = >
{
var mm = 12 ;
var dd = 1 ;
if ( config ! = null & & config . TRAIN_SURVEY_TRIGGER_TIME ! = null )
{
mm = config . DEP_TRAIN_PLAN_END_TIME . Value . Month ;
dd = config . DEP_TRAIN_PLAN_END_TIME . Value . Day ;
}
2025-11-07 11:03:11 +08:00
if ( ! ( mm = = dtNow . Month & & dd = = dtNow . Day ) )
2025-08-25 09:56:57 +08:00
{
return true ;
}
2025-11-07 11:03:11 +08:00
var finishYearPlan = GetEntity < T_SE_YEAR_TRAIN_PLAN > ( t = > t . PLAN_YEAR = = dtNow . Year & & t . STATUS = = PFStandardStatus . Draft ) ;
2025-08-25 09:56:57 +08:00
if ( finishYearPlan = = null )
{
finishYearPlan = new T_SE_YEAR_TRAIN_PLAN ( )
{
ID = Guid . NewGuid ( ) ,
ORG_ID = filter . GetOrgId ( ) ,
2025-11-07 11:03:11 +08:00
PLAN_YEAR = dtNow . Year ,
2025-08-25 09:56:57 +08:00
END_TIME = Convert . ToDateTime ( DateTime . Now . ToString ( "D" ) . ToString ( ) ) ,
} ;
}
else if ( finishYearPlan . STATUS ! = PFStandardStatus . Draft )
{
return true ;
}
var user = GetEntity < T_FM_USER > ( e = > e . Nav_ApproveRole . NAME = = "安环部负责人" & & e . ENABLE_STATUS = = 0 ) ;
if ( user = = null )
{
user = GetEntity < T_FM_USER > ( e = > e . Nav_ApproveRole . NAME = = "安环部安全员" & & e . ENABLE_STATUS = = 0 ) ;
}
finishYearPlan . LAUNCH_DEPARTMENT_ID = user . DEPARTMENT_ID ;
finishYearPlan . LAUNCH_TIME = DateTime . Now ;
finishYearPlan . LAUNCH_USER_ID = user . ID ;
finishYearPlan . STATUS = PFStandardStatus . Sign ;
finishYearPlan . END_TIME = Convert . ToDateTime ( DateTime . Now . ToString ( "D" ) . ToString ( ) ) ;
if ( user ! = null )
{
NotificationTaskService . SendNotificationTask ( finishYearPlan . PLAN_YEAR + "年度培训计划" , finishYearPlan . ID , filter . GetOrgId ( ) , user . ID , user . NAME , DateTime . Now , DateTime . Now . AddDays ( 15 ) , 1 , "SE012" , ( ) = >
{
UpdateEntityNoCommit ( finishYearPlan ) ;
} ) ;
}
else
{
throw new Exception ( "未找到安环部负责人!" ) ;
}
return true ;
} ) ;
}
2025-11-07 11:03:11 +08:00
public void CheckYearTrainPlan ( KeywordFilter filter , DateTime dtNow )
2025-08-25 09:56:57 +08:00
{
2025-11-07 11:03:11 +08:00
// select top 100 * from T_SE_DEP_TRAIN_PLAN order by CREATE_TIME desc
//select top 100 * from T_SE_DEP_TRAIN_PLAN_DETAIL where DEP_TRAIN_PLAN_ID in ('AC8AAFBB-67FA-FB92-F522-89D7697F1C68', '65511754-9515-6320-30FB-17768F095635') order by MOON desc
//select top 100 * from T_SE_YEAR_TRAIN_PLAN order by CREATE_TIME desc
//select top 100 * from T_SE_YEAR_TRAIN_PLAN_DETAIL where YEAR_TRAIN_PLAN_ID in ('BF736F5B-7FB8-4A8F-8511-957F0D5CC585') order by MOON desc
2025-08-25 09:56:57 +08:00
//培训月份1日倒退7天触发待办给责任人制定培训通知
2025-11-07 11:03:11 +08:00
//var dt = DateTime.Now;
//if (filter.Parameter1 != null)
//{
// dt = DateTime.Parse(filter.Parameter1);
//}
var tmpDate = dtNow ;
var planNoticeData = GetEntities < T_SE_YEAR_TRAIN_PLAN_DETAIL > ( t = > t . Nav_YearTrainPlan . STATUS = = PFStandardStatus . Archived & & t . Nav_YearTrainPlan . PLAN_YEAR = = dtNow . Year & & t . MOON = = tmpDate . Month & & 1 = = tmpDate . Day & & t . SEND = = 0 & & t . RESPONSIBILITY_USER_ID ! = null , new BaseFilter ( filter . GetOrgId ( ) ) ,
2025-08-25 09:56:57 +08:00
new string [ ] { "Nav_YearTrainPlan" , "Nav_ResponsibilityUser" , "Nav_YearTrainPlanContent" } ) ;
List < T_SE_TRAIN_NOTIFY > trainNotifys = new List < T_SE_TRAIN_NOTIFY > ( ) ;
List < T_SE_TRAIN_NOTIFY_CONTENT_REL > trainNotifyContents = new List < T_SE_TRAIN_NOTIFY_CONTENT_REL > ( ) ;
if ( ! planNoticeData . Any ( ) )
{
return ;
}
var allSendUserIds = new List < Guid > ( ) ;
var allSendUserNames = new List < string > ( ) ;
var allSendUserTitles = new List < string > ( ) ;
var allSendDataIds = new List < Guid > ( ) ;
var alltoDayNotifyTitles = new List < string > ( ) ;
foreach ( var plan in planNoticeData )
{
plan . SEND = 1 ;
T_SE_TRAIN_NOTIFY trainNotify = new T_SE_TRAIN_NOTIFY ( ) ;
trainNotify . ID = Guid . NewGuid ( ) ;
2025-11-07 11:03:11 +08:00
trainNotify . LAUNCH_TIME = dtNow ;
2025-08-25 09:56:57 +08:00
if ( plan . Nav_ResponsibilityUser ! = null )
{
trainNotify . LAUNCH_DEPARTMENT_ID = plan . Nav_ResponsibilityUser . DEPARTMENT_ID ;
}
if ( plan . RESPONSIBILITY_USER_ID ! = null )
{
trainNotify . LAUNCH_USER_ID = plan . RESPONSIBILITY_USER_ID ;
trainNotify . RECORD_USER_ID = plan . RESPONSIBILITY_USER_ID ;
}
trainNotify . NAME = plan . NAME ;
trainNotify . TRAIN_TYPE = plan . TYPE_ID ;
trainNotify . LEVEL = plan . LEVEL ;
trainNotify . TRAIN_ADDR = plan . ADDRESS ;
trainNotify . TRAIN_TEACHER = plan . TEACHER ;
trainNotify . TRAIN_MODEL = plan . TRAIN_MODEL ;
trainNotify . CHECK_TYPE_ID = plan . CHECK_TYPE_ID . Value ;
trainNotify . STATUS = SETrainNotifyStatus . 草 稿 ;
trainNotify . ORG_ID = filter . GetOrgId ( ) ;
trainNotify . CODE = DateTime . Now . ToString ( "yyyyMMddHHmmss" ) ;
trainNotify . TRAIN_PLAN_DETAIL_ID = plan . ID ;
trainNotify . CREATE_NOTIFY_RECORD = true ;
plan . Nav_YearTrainPlanContent . ForEach ( content = >
{
T_SE_TRAIN_NOTIFY_CONTENT_REL trainNotifyContent = new T_SE_TRAIN_NOTIFY_CONTENT_REL
{
ID = Guid . NewGuid ( ) ,
ORG_ID = filter . GetOrgId ( ) ,
POINT_ID = ( Guid ) content . CONTENT_ID ,
NOTIFY_ID = trainNotify . ID
} ;
trainNotifyContents . Add ( trainNotifyContent ) ;
} ) ;
allSendUserTitles . Add ( "制定培训通知-" + plan . NAME ) ;
allSendDataIds . Add ( trainNotify . ID ) ;
allSendUserIds . Add ( ( Guid ) plan . RESPONSIBILITY_USER_ID ) ;
allSendUserNames . Add ( plan . Nav_ResponsibilityUser . NAME ) ;
trainNotifys . Add ( trainNotify ) ;
alltoDayNotifyTitles . Add ( "根据需要将《" + plan . NAME + "》培训通知盖章上传!" ) ;
} ;
var sendNotices = NotificationTaskService . InsertUserNoticeTaskModels ( allSendUserTitles , allSendDataIds , filter . GetOrgId ( ) , allSendUserIds , allSendUserNames , DateTime . Now , DateTime . Now . AddMonths ( 1 ) , ( int ) FMFormTypeEnum . 计 划 任 务 通 知 , "SE014" ) ;
sendNotices . AddRange ( NotificationTaskService . InsertUserNoticeTaskModels ( alltoDayNotifyTitles , allSendDataIds , filter . GetOrgId ( ) , allSendUserIds , allSendUserNames , DateTime . Now , DateTime . Now . AddMonths ( 1 ) , ( int ) FMNoticeTypeEnum . 今 日 提 醒 , "PF135" ) ) ;
UnifiedCommit ( ( ) = >
{
BantchSaveEntityNoCommit ( planNoticeData ) ;
if ( trainNotifys ! = null & & trainNotifys . Any ( ) )
BantchAddEntityNoCommit ( trainNotifys ) ;
if ( sendNotices ! = null )
BantchAddEntityNoCommit ( sendNotices ) ;
if ( trainNotifyContents ! = null & & trainNotifyContents . Any ( ) )
BantchAddEntityNoCommit ( trainNotifyContents ) ;
} ) ;
}
2025-11-07 11:03:11 +08:00
public void CheckDepTrainPlan ( KeywordFilter filter , DateTime dtNow , T_SE_SECONFIG config )
2025-08-25 09:56:57 +08:00
{
//检查配置是否存在,并验证是否在同一天
2025-11-07 11:03:11 +08:00
DateTime startTime = new DateTime ( dtNow . Year , 1 , 1 ) ;
DateTime endTime = new DateTime ( dtNow . Year , 1 , 15 ) ;
2025-08-25 09:56:57 +08:00
var mm = 12 ;
var dd = 1 ;
if ( config ! = null )
{
if ( config . DEP_TRAIN_PLAN_START_TIME ! = null )
{
2025-11-07 11:03:11 +08:00
startTime = new DateTime ( dtNow . Year , config . DEP_TRAIN_PLAN_START_TIME . Value . Month , config . DEP_TRAIN_PLAN_START_TIME . Value . Day ) ;
2025-08-25 09:56:57 +08:00
mm = startTime . Month ;
dd = startTime . Day ;
if ( config . DEP_TRAIN_PLAN_END_TIME ! = null )
{
2025-11-07 11:03:11 +08:00
endTime = new DateTime ( dtNow . Year , config . DEP_TRAIN_PLAN_END_TIME . Value . Month , config . DEP_TRAIN_PLAN_END_TIME . Value . Day ) ;
2025-08-25 09:56:57 +08:00
}
else
{
endTime = startTime . AddDays ( 14 ) ;
}
}
}
2025-11-07 11:03:11 +08:00
if ( ! ( mm = = dtNow . Month & & dd = = dtNow . Day ) )
2025-08-25 09:56:57 +08:00
return ;
2025-11-07 11:03:11 +08:00
var existList = GetEntity < T_SE_DEP_TRAIN_PLAN > ( t = > t . PLAN_YEAR = = dtNow . Year & &
2025-08-25 09:56:57 +08:00
t . LAUNCH_TIME ! = null & &
t . LAUNCH_TIME . Value . Month = = startTime . Month & &
t . LAUNCH_TIME . Value . Day = = startTime . Day ,
new BaseFilter ( filter . GetOrgId ( ) ) ) ;
if ( existList ! = null )
{
return ;
}
// 触发给矿山部安全员,选矿部安全员
BaseFilter baseFilter = new BaseFilter ( filter . GetOrgId ( ) ) ;
baseFilter . Include = new string [ ] { "Nav_ApproveRole" , "Nav_Department" } ;
var depPostList = GetEntities < T_FM_USER > ( t = > ( workDeps . Contains ( t . Nav_Department . NAME ) ) & & ( t . Nav_ApproveRole . NAME = = "部门安全员" | | t . Nav_ApproveRole . NAME = = "安环部安全员" ) & & t . ENABLE_STATUS = = 0 , baseFilter ) ;
if ( depPostList . Count ( ) = = 0 )
{
depPostList = GetEntities < T_FM_USER > ( t = > ( workDeps . Contains ( t . Nav_Department . NAME ) ) & & ( t . Nav_ApproveRole . NAME = = "部门负责人" ) & & t . ENABLE_STATUS = = 0 , baseFilter ) ;
if ( depPostList . Count ( ) = = 0 )
{
return ;
}
}
var datas = new List < T_SE_DEP_TRAIN_PLAN > ( ) ;
var allSendUserTitles = new List < string > ( ) ;
var allSendDataIds = new List < Guid > ( ) ;
var allSendUserIds = new List < Guid > ( ) ;
var allSendUserNames = new List < string > ( ) ;
depPostList . ForEach ( dep = >
{
var planId = Guid . NewGuid ( ) ;
allSendUserTitles . Add ( "部门培训计划表-" + dep . Nav_Department . NAME ) ;
allSendDataIds . Add ( planId ) ;
allSendUserIds . Add ( dep . ID ) ;
allSendUserNames . Add ( dep . NAME ) ;
T_SE_DEP_TRAIN_PLAN record = new T_SE_DEP_TRAIN_PLAN
{
ID = planId ,
2025-11-07 11:03:11 +08:00
PLAN_YEAR = dtNow . Year ,
LAUNCH_TIME = dtNow ,
2025-08-25 09:56:57 +08:00
LAUNCH_DEPARTMENT_ID = dep . Nav_Department . ID ,
TRIGGER_TYPE = SEDepTrainPlanTriggerType . 任 务 触 发 ,
STATUS = PFStandardStatus . Draft ,
ORG_ID = dep . Nav_Department . ORG_ID ,
SAFE_USER_IDS = dep . ID . ToString ( ) ,
LAUNCH_USER_ID = dep . ID ,
END_TIME = config . DEP_TRAIN_PLAN_END_TIME
} ;
datas . Add ( record ) ;
} ) ;
var sendNotices = NotificationTaskService . InsertUserNoticeTaskModels ( allSendUserTitles , allSendDataIds , filter . GetOrgId ( ) , allSendUserIds , allSendUserNames , DateTime . Now , DateTime . Now . AddDays ( 7 ) , 0 , "SE010" ) ;
UnifiedCommit ( ( ) = >
{
if ( datas ! = null & & datas . Any ( ) )
BantchAddEntityNoCommit ( datas ) ;
if ( sendNotices ! = null & & sendNotices . Any ( ) )
BantchAddEntityNoCommit ( sendNotices ) ;
} ) ;
}
/// <summary>
/// 安全意识调查完成后
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
private void CheckSafeSuveyCompanyReport ( [ FromBody ] KeywordFilter filter )
{
//安全意识调查全部完成后发送给安环部负责人
var dt = DateTime . Now ;
var surveysAll = GetEntities < T_SE_SAFE_SURVEY > ( t = > t . LAUNCH_TIME . Value . Year = = dt . Year & &
t . STATUS = = SESafeSurveyStatus . 完 成 & & ! t . COMPNAY_REPORT & & t . TASK_ID ! = null , new BaseFilter ( filter . GetOrgId ( ) ) ) . ToList ( ) ;
if ( surveysAll = = null | | surveysAll . Count = = 0 )
{
return ;
}
List < T_FM_NOTIFICATION_TASK > notices = new List < T_FM_NOTIFICATION_TASK > ( ) ;
var taskids = surveysAll . Select ( t = > t . TASK_ID ) . Distinct ( ) ;
var chargeUser = GetEntity < T_FM_USER > ( t = > t . Nav_ApproveRole . NAME = = "安环部负责人" & & t . ENABLE_STATUS = = 0 ) ;
foreach ( var taskid in taskids )
{
var surveys = surveysAll . Where ( t = > t . TASK_ID = = taskid ) . ToList ( ) ;
foreach ( var survey in surveys )
{
survey . COMPNAY_REPORT = true ;
notices . Add ( NotificationTaskService . InsertUserNoticeTaskModel ( "意识调查-" + surveys [ 0 ] . LAUNCH_TIME + "-公司汇总" , ( Guid ) taskid , filter . GetOrgId ( ) , chargeUser . ID , chargeUser . NAME , DateTime . Now , DateTime . Now . AddDays ( 1 ) , ( int ) FMFormTypeEnum . 计 划 任 务 通 知 , "SE005_ALLREPORT" ) ) ;
}
}
UnifiedCommit ( ( ) = >
{
BantchUpdateEntityNoCommit ( surveysAll ) ;
if ( notices ! = null & & notices . Any ( ) )
BantchAddEntityNoCommit ( notices ) ;
} ) ;
}
/// <summary>
/// 创建培训记录 根据 培训通知 触发 培训记录
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
[HttpPost, Route("CheckCreateTrainRecord")]
public JsonActionResult < bool > CheckCreateTrainRecord ( [ FromBody ] KeywordFilter filter )
{
return SafeExecute < bool > ( ( ) = >
{
try
{
var dt = DateTime . Now ;
var Parameter1 = filter . Parameter1 ;
if ( ! string . IsNullOrEmpty ( filter . Parameter1 ) )
{
try
{
//接收来自页面的参数
DateTime deParm = Convert . ToDateTime ( filter . Parameter1 ) ;
dt = deParm ;
}
catch { }
}
DateTime maxTime = dt . AddMinutes ( 10 ) ;
var orgId = filter . GetOrgId ( ) ;
BaseFilter baseFilter = new BaseFilter ( orgId ) ;
baseFilter . Include = new string [ ] { "Nav_RecordUser" , "Nav_TrainUserList.Nav_User.Nav_Department" , "Nav_TrainUserList.Nav_User.Nav_Person.Nav_Post" , "Nav_Files" } ;
var notifys = GetEntities < T_SE_TRAIN_NOTIFY > ( t = > ( t . STATUS = = SETrainNotifyStatus . 通 知 中 | | t . STATUS = = SETrainNotifyStatus . 签 到 完 成 ) & & t . TRAIN_START_TIME . Value < maxTime & & t . CREATE_NOTIFY_RECORD = = true , baseFilter ) . ToList ( ) ;
if ( notifys ! = null | | notifys . Any ( ) )
{
List < T_FM_NOTIFICATION_TASK > SendNotices = null ;
List < T_SE_TRAIN_RECORD > TrainRecords = new List < T_SE_TRAIN_RECORD > ( ) ;
List < T_SE_TRAIN_RECORD_USER > joinUsers = new List < T_SE_TRAIN_RECORD_USER > ( ) ;
List < T_SE_TRAIN_RECORD_FILE > files = new List < T_SE_TRAIN_RECORD_FILE > ( ) ;
var allSendUserIds = new List < Guid > ( ) ;
var allSendUserNames = new List < string > ( ) ;
var allSendTitles = new List < string > ( ) ;
var allSendDataIds = new List < Guid > ( ) ;
foreach ( var notify in notifys )
{
notify . STATUS = SETrainNotifyStatus . 归 档 ;
var record = new T_SE_TRAIN_RECORD
{
ID = Guid . NewGuid ( ) ,
ORG_ID = orgId ,
NOTIFY_ID = notify . ID ,
STATUS = SETrainRecordStatus . 草 稿 ,
} ;
foreach ( var user in notify . Nav_TrainUserList )
{
var joinUser = new T_SE_TRAIN_RECORD_USER
{
ID = Guid . NewGuid ( ) ,
ORG_ID = orgId ,
RECORD_ID = record . ID ,
USER_ID = user . USER_ID ,
DEPARTMENT_NAME = user . Nav_User . Nav_Department . NAME ,
POST_NAME = user . Nav_User . Nav_Person . Nav_Post . NAME
} ;
if ( user . IS_LEAVE = = SETrainYesNoEnum . 请 假 )
{
joinUser . STATUS = SETrainRecordUserStatusEnum . 请 假 ;
}
else
{
joinUser . STATUS = SETrainRecordUserStatusEnum . 参 与 ;
}
joinUsers . Add ( joinUser ) ;
}
foreach ( var file in notify . Nav_Files )
{
var recordFile = new T_SE_TRAIN_RECORD_FILE
{
ID = Guid . NewGuid ( ) ,
ORG_ID = orgId ,
RECORD_ID = record . ID ,
IMG_FILE_ID = file . IMG_FILE_ID
} ;
files . Add ( recordFile ) ;
}
TrainRecords . Add ( record ) ;
allSendTitles . Add ( "培训记录-" + notify . NAME ) ;
allSendDataIds . Add ( record . ID ) ;
allSendUserIds . Add ( ( Guid ) notify . RECORD_USER_ID ) ;
allSendUserNames . Add ( notify . Nav_RecordUser . NAME ) ;
notify . Nav_LaunchUser = null ;
notify . Nav_RecordUser = null ;
} ;
var notifyids = notifys . Select ( t = > t . ID ) . ToList ( ) ;
var finishNotifys1 = GetEntities < T_FM_NOTIFICATION_TASK > ( t = > notifyids . Contains ( ( Guid ) t . SOURCE_DATA_ID ) & & t . NOTICE_STATUS = = 0 , new BaseFilter ( orgId ) ) ;
foreach ( var notify1 in finishNotifys1 )
{
notify1 . NOTICE_STATUS = 4 ;
}
SendNotices = NotificationTaskService . InsertUserNoticeTaskModels ( allSendTitles , allSendDataIds , orgId , allSendUserIds , allSendUserNames , DateTime . Now , DateTime . Now . AddDays ( 10 ) , ( int ) FMNoticeTypeEnum . 消 息 , "SE018" ) ;
UnifiedCommit ( ( ) = >
{
if ( notifys . Any ( ) )
BantchUpdateEntityNoCommit ( notifys , "STATUS" ) ;
if ( TrainRecords . Any ( ) )
BantchAddEntityNoCommit ( TrainRecords ) ;
if ( SendNotices . Any ( ) )
BantchAddEntityNoCommit ( SendNotices ) ;
if ( joinUsers . Any ( ) )
BantchAddEntityNoCommit ( joinUsers ) ;
if ( files . Any ( ) )
BantchAddEntityNoCommit ( files ) ;
if ( finishNotifys1 . Any ( ) )
BantchUpdateEntity ( finishNotifys1 ) ;
} ) ;
}
}
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 ;
} ) ;
}
/// <summary>
/// 每天5点触发教育培训调查汇总
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public JsonActionResult < bool > CheckTrainEffectSuveyEvaluation ( [ FromBody ] KeywordFilter filter )
{
return SafeExecute < bool > ( ( ) = >
{
//截止时间后生成,发送给培训通知的发起人及安环部负责人
var dt = DateTime . Now ;
var minDate = dt . AddDays ( - 10 ) ;
var maxDate = dt ;
var notifys = GetEntities < T_SE_TRAIN_NOTIFY > (
t = > t . TRAIN_END_TIME > = minDate & & t . TRAIN_END_TIME < dt & & t . NEED_EVALUATION = = SETrainNeedSuvey . 是 ,
new BaseFilter ( ) , new string [ ] { "Nav_LaunchUser" } ) . ToList ( ) ;
if ( notifys . Count = = 0 )
return true ;
var chargeUser = GetEntity < T_FM_USER > ( t = > t . Nav_ApproveRole . NAME = = "安环部负责人" & & t . ENABLE_STATUS = = 0 , new BaseFilter ( filter . GetOrgId ( ) ) ) ;
if ( chargeUser = = null )
{
chargeUser = GetEntity < T_FM_USER > ( t = > t . Nav_ApproveRole . NAME = = "安环部安全员" & & t . ENABLE_STATUS = = 0 , new BaseFilter ( filter . GetOrgId ( ) ) ) ;
}
var subjects = GetEntities < T_SE_TRAINING_SURVEY_SUBJECT > ( t = > true , new BaseFilter ( filter . GetOrgId ( ) ) ) . OrderBy ( t = > t . NAME ) . ToList ( ) ;
List < T_SE_TRAINING_EFFECT_EVALUATION > trainEffects = new List < T_SE_TRAINING_EFFECT_EVALUATION > ( ) ;
List < T_SE_TRAINING_EFFECT_EVALUATION_OPINION > opintionList = new List < T_SE_TRAINING_EFFECT_EVALUATION_OPINION > ( ) ;
List < T_SE_TRAINING_EFFECT_EVALUATION_END > endList = new List < T_SE_TRAINING_EFFECT_EVALUATION_END > ( ) ;
List < T_SE_TRAINING_EFFECT_EVALUATION_SURVEY_RESULTS > results = new List < T_SE_TRAINING_EFFECT_EVALUATION_SURVEY_RESULTS > ( ) ;
List < T_FM_NOTIFICATION_TASK > sendNotices = null ;
foreach ( var notify in notifys )
{
var orgID = filter . GetOrgId ( ) ;
var evaluations = GetEntities < T_SE_TRAINING_EFFECT_EVALUATION > ( t = > t . SURVEY_ID = = notify . ID , new BaseFilter ( orgID ) ) . ToList ( ) ;
if ( evaluations . Count > 0 )
{
continue ;
}
var surveys = GetEntities < T_SE_TRAINING_EFFECT_EVALUATION_SURVEY > (
t = > t . NOTIFY_ID = = notify . ID ,
new BaseFilter ( orgID ) , new string [ ] { "Nav_ResultList" } ) . ToList ( ) ;
if ( surveys . Count = = 0 )
continue ;
var surveyCount = surveys . Count ;
var endSurveys = surveys . Where ( t = > t . STATUS = = SETrainningEffectSurveyStatus . 归 档 ) . ToList ( ) ;
var endCount = endSurveys . Count ;
T_SE_TRAINING_EFFECT_EVALUATION trainEffect = new T_SE_TRAINING_EFFECT_EVALUATION ( ) ;
trainEffect . ID = Guid . NewGuid ( ) ;
trainEffect . SURVEY_ID = notify . ID ;
trainEffect . NAME = notify . NAME ;
trainEffect . ORG_ID = orgID ;
trainEffect . SURVEY_NUMS = surveyCount ;
trainEffect . FEEDBACK_NUMS = endCount ;
double ratio = ( double ) endCount / surveyCount ;
trainEffect . FEEDBACK_RATIO = ratio . ToString ( "p" ) ;
trainEffect . START_TIME = notify . TRAIN_END_TIME ;
endSurveys . ForEach ( s = >
{
var o = new T_SE_TRAINING_EFFECT_EVALUATION_OPINION ( ) ;
o . TRAINING_EFFECT_EVALUATION_ID = trainEffect . ID ;
o . USER_ID = s . USER_ID ;
o . OPINION_CONTENT = s . OPINION ;
o . ORG_ID = orgID ;
results . AddRange ( s . Nav_ResultList ) ;
opintionList . Add ( o ) ;
} ) ;
subjects . ForEach ( sub = >
{
var e = new T_SE_TRAINING_EFFECT_EVALUATION_END ( ) ;
e . TRAINING_EFFECT_EVALUATION_ID = trainEffect . ID ;
e . SUBJECT_ID = sub . ID ;
e . ORG_ID = orgID ;
double totalCount = results . Where ( t = > t . SUBJECT_ID = = sub . ID ) . ToList ( ) . Count ;
double good = results . Where ( t = > t . SUBJECT_ID = = sub . ID & & t . EVALUATION_RESULT = = SEEvaluationResultEnum . 好 ) . ToList ( ) . Count ;
double better = results . Where ( t = > t . SUBJECT_ID = = sub . ID & & t . EVALUATION_RESULT = = SEEvaluationResultEnum . 较 好 ) . ToList ( ) . Count ;
double normal = results . Where ( t = > t . SUBJECT_ID = = sub . ID & & t . EVALUATION_RESULT = = SEEvaluationResultEnum . 一 般 ) . ToList ( ) . Count ;
double bad = results . Where ( t = > t . SUBJECT_ID = = sub . ID & & t . EVALUATION_RESULT = = SEEvaluationResultEnum . 差 ) . ToList ( ) . Count ;
double zero = 0.0 ;
if ( totalCount > 0 )
{
e . GOOD_RATION = ( good / totalCount ) . ToString ( "p" ) ;
e . BETTER_RATION = ( better / totalCount ) . ToString ( "p" ) ;
e . NORMAL_RATION = ( normal / totalCount ) . ToString ( "p" ) ;
e . BAD_RATION = ( bad / totalCount ) . ToString ( "p" ) ;
}
else
{
e . GOOD_RATION = zero . ToString ( "p" ) ;
e . BETTER_RATION = zero . ToString ( "p" ) ;
e . NORMAL_RATION = zero . ToString ( "p" ) ;
e . BAD_RATION = zero . ToString ( "p" ) ;
}
endList . Add ( e ) ;
} ) ;
var allSendTitles = new List < string > ( ) ;
var allSendDataIds = new List < Guid > ( ) ;
var allSendUserIds = new List < Guid > ( ) ;
var allSendUserNames = new List < string > ( ) ;
allSendTitles . Add ( "培训效果评估表-" + notify . NAME ) ;
allSendDataIds . Add ( trainEffect . ID ) ;
allSendUserIds . Add ( notify . Nav_LaunchUser . ID ) ;
allSendUserNames . Add ( notify . Nav_LaunchUser . NAME ) ;
if ( notify . Nav_LaunchUser . ID ! = chargeUser . ID )
{
allSendTitles . Add ( "培训效果评估表-" + notify . NAME ) ;
allSendDataIds . Add ( trainEffect . ID ) ;
allSendUserIds . Add ( chargeUser . ID ) ;
allSendUserNames . Add ( chargeUser . NAME ) ;
}
sendNotices = NotificationTaskService . InsertUserNoticeTaskModels ( allSendTitles , allSendDataIds , orgID , allSendUserIds , allSendUserNames , DateTime . Now , DateTime . Now . AddDays ( 1 ) , ( int ) FMFormTypeEnum . 计 划 任 务 通 知 , "SE019_SHOWPRINT" ) ;
trainEffects . Add ( trainEffect ) ;
}
UnifiedCommit ( ( ) = >
{
if ( trainEffects ! = null & & trainEffects . Any ( ) )
BantchSaveEntityNoCommit ( trainEffects ) ;
BantchSaveEntityNoCommit ( endList ) ;
BantchSaveEntityNoCommit ( opintionList ) ;
if ( sendNotices ! = null & & sendNotices . Any ( ) )
BantchAddEntityNoCommit ( sendNotices ) ;
} ) ;
return true ;
} ) ;
}
}
}