using APT.BaseData.Domain.Entities; using APT.BaseData.Domain.Enums; using APT.Infrastructure.Core; using System; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.IServices.FM; using APT.Infrastructure.Api; using System.Collections.Generic; using System.Linq; using APT.MS.Domain.Enums; using APT.BaseData.Domain.Enums.PF; using APT.BaseData.Domain.IServices; using System.Linq.Expressions; using Newtonsoft.Json; using APT.BaseData.Domain.IServices.BS; using APT.MS.Domain.Entities.BS; namespace APT.BaseData.Services.DomainServices { /// /// 安全检查 /// public class BSOperateLogService : CommonService, IBSOperateLogService { public BSOperateLogService(IRepository repository) : base(repository) { } /// /// 直接添加多个操作 /// 或者 一个操作 引起多个后续操作人 /// /// 操作的节点 /// SafeCheckID RiskSubmitID /// 登入人ID /// 可为null与 DATA_ID 只有一个 /// 可为null 需要添加下一个节点的人员ID /// 可为null需要添加下一个节点的人员姓名 /// /// /// 默认操作通过的 /// /// public List GetListOperateLog(OPERATEPOINT_Enums OPERATEPOINT, Guid DATA_ID, Guid UserIDLogin, List ListDATA_ID, List ListUserID, List ListUserName, Guid? ORG_ID, Guid? DATA_ID_SUB = null, List ListUserIDDone = null, bool isEnd = false, DateTime? TASK_ENDDT = null) { List listResult = new List(); T_BS_OPERATE_LOG modelLogUpdate = null; switch (OPERATEPOINT) { case OPERATEPOINT_Enums.GotCheck: //系统触发 只是新增 if (ListUserID != null && ListUserName != null && ListUserID.Any()) for (int i = 0; i < ListUserID.Count; i++) listResult.Add(AddModel(OPERATEPOINT, ListDATA_ID[i], ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); break; case OPERATEPOINT_Enums.CheckForm: //BS032保存并发送 到审批流 modelLogUpdate = GetUpdateDeal(OPERATEPOINT_Enums.GotCheck, DATA_ID, UserIDLogin, null, TASK_ENDDT); if (modelLogUpdate != null) listResult.Add(modelLogUpdate); if (ListUserID != null && ListUserName != null && ListUserID.Any()) for (int i = 0; i < ListUserID.Count; i++) listResult.Add(AddModel(OPERATEPOINT, DATA_ID, ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); break; case OPERATEPOINT_Enums.CheckAudit: modelLogUpdate = GetUpdateDeal(OPERATEPOINT, DATA_ID, UserIDLogin, null, TASK_ENDDT);//处理自己的待办日志 if (modelLogUpdate != null) listResult.Add(modelLogUpdate); if (ListUserID != null && ListUserName != null && ListUserID.Any()) for (int i = 0; i < ListUserID.Count; i++)//最后一个审批人 添加 通知 listResult.Add(AddModel(OPERATEPOINT_Enums.CheckerCheck, DATA_ID, ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); break; case OPERATEPOINT_Enums.CheckerCheck: modelLogUpdate = GetUpdateDeal(OPERATEPOINT, DATA_ID, UserIDLogin, null, TASK_ENDDT);//处理自己的 if (modelLogUpdate != null) listResult.Add(modelLogUpdate); break; case OPERATEPOINT_Enums.CheckRegisterRun: //检查登记 if (ListUserID != null && ListUserName != null && ListUserID.Any()) for (int i = 0; i < ListUserID.Count; i++) //发起检查登记 listResult.Add(AddModel(OPERATEPOINT_Enums.CheckRegister, DATA_ID, ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); break; case OPERATEPOINT_Enums.CheckRegister: //检查登记 modelLogUpdate = GetUpdateDeal(OPERATEPOINT, DATA_ID, UserIDLogin, null, TASK_ENDDT);//处理自己的 if (modelLogUpdate != null) listResult.Add(modelLogUpdate); if (ListUserID != null && ListUserName != null && ListUserID.Any()) for (int i = 0; i < ListUserID.Count; i++) //发起检查结果确认 listResult.Add(AddModel(OPERATEPOINT_Enums.CheckAgree, DATA_ID, ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); break; case OPERATEPOINT_Enums.CheckAgree: modelLogUpdate = GetUpdateDeal(OPERATEPOINT, DATA_ID, UserIDLogin, null, TASK_ENDDT);//处理自己的 if (modelLogUpdate != null) listResult.Add(modelLogUpdate); if (ListUserID != null && ListUserName != null && ListUserID.Any()) for (int i = 0; i < ListUserID.Count; i++) //检查结果确认完 直接到审批 listResult.Add(AddModel(OPERATEPOINT_Enums.CheckResultAudit, DATA_ID, ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); break; case OPERATEPOINT_Enums.CheckResultAudit: modelLogUpdate = GetUpdateDeal(OPERATEPOINT, DATA_ID, UserIDLogin, null, TASK_ENDDT);//处理自己的 if (modelLogUpdate != null) listResult.Add(modelLogUpdate); if (isEnd) //最后一个审批就归档 { var logEnd = AddModel(OPERATEPOINT_Enums.CheckEnd, DATA_ID, UserIDLogin, APT.Infrastructure.Api.AppContext.CurrentSession.UserName, ORG_ID); logEnd.OPERTETIME = DateTime.Now; if (modelLogUpdate != null) logEnd.ISINTTIME = modelLogUpdate.ISINTTIME; listResult.Add(logEnd); } else if (DATA_ID_SUB != null) { if (ListUserID != null && ListUserName != null && ListUserID.Any()) for (int i = 0; i < ListUserID.Count; i++) listResult.Add(AddModel(OPERATEPOINT_Enums.RiskGet, DATA_ID, ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); } break; case OPERATEPOINT_Enums.CheckEnd: //此处没操作 break; case OPERATEPOINT_Enums.RiskNoticeSD: break; case OPERATEPOINT_Enums.RiskUpSD: //有用 listResult.Add(AddModel(OPERATEPOINT_Enums.RiskUpSD, DATA_ID, UserIDLogin, APT.Infrastructure.Api.AppContext.CurrentSession.UserName, ORG_ID, 1, true, DATA_ID_SUB)); if (ListUserID != null && ListUserName != null && ListUserID.Any()) for (int i = 0; i < ListUserID.Count; i++) listResult.Add(AddModel(OPERATEPOINT_Enums.RiskInfoCompleteSD, DATA_ID, ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); break; case OPERATEPOINT_Enums.RiskInfoCompleteSD: break; case OPERATEPOINT_Enums.RiskGet: modelLogUpdate = GetUpdateDeal(OPERATEPOINT, DATA_ID, UserIDLogin, null, TASK_ENDDT);//处理自己的 if (modelLogUpdate != null) listResult.Add(modelLogUpdate); if (ListUserID != null && ListUserName != null && ListUserID.Any()) for (int i = 0; i < ListUserID.Count; i++) listResult.Add(AddModel(OPERATEPOINT_Enums.RiskSendAudit, DATA_ID, ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); break; //case OPERATEPOINT_Enums.RiskSend: // modelLogUpdate = GetUpdateDeal(OPERATEPOINT, DATA_ID, UserIDLogin, null, TASK_ENDDT);//处理自己的 // if (modelLogUpdate != null) // listResult.Add(modelLogUpdate); // if (ListUserID != null && ListUserName != null && ListUserID.Any()) // for (int i = 0; i < ListUserID.Count; i++) // listResult.Add(AddModel(OPERATEPOINT_Enums.RiskSendAudit, DATA_ID, ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); // break; case OPERATEPOINT_Enums.RiskSendAudit: modelLogUpdate = GetUpdateDeal(OPERATEPOINT, DATA_ID, UserIDLogin, null, TASK_ENDDT);//处理自己的 if (modelLogUpdate != null) listResult.Add(modelLogUpdate); if (ListUserID != null && ListUserName != null && ListUserID.Any()) for (int i = 0; i < ListUserID.Count; i++) listResult.Add(AddModel(OPERATEPOINT_Enums.RiskAssignActure, DATA_ID, ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); break; case OPERATEPOINT_Enums.RiskAssignActure: modelLogUpdate = GetUpdateDeal(OPERATEPOINT, DATA_ID, UserIDLogin, DATA_ID_SUB, TASK_ENDDT);//处理自己的 if (modelLogUpdate != null) listResult.Add(modelLogUpdate); if (ListUserID != null && ListUserName != null && ListUserID.Any()) for (int i = 0; i < ListUserID.Count; i++) listResult.Add(AddModel(OPERATEPOINT_Enums.RiskNoticeCheckerCheck, DATA_ID, ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); break; case OPERATEPOINT_Enums.RiskNoticeCheckerCheck: modelLogUpdate = GetUpdateDeal(OPERATEPOINT, DATA_ID, UserIDLogin, DATA_ID_SUB, TASK_ENDDT);//处理自己的 if (modelLogUpdate != null) listResult.Add(modelLogUpdate); if (ListUserID != null && ListUserName != null && ListUserID.Any()) for (int i = 0; i < ListUserID.Count; i++) listResult.Add(AddModel(OPERATEPOINT_Enums.RiskNoticeActureCheck, DATA_ID, ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); break; case OPERATEPOINT_Enums.RiskNoticeActureCheck: modelLogUpdate = GetUpdateDeal(OPERATEPOINT, DATA_ID, UserIDLogin, DATA_ID_SUB, TASK_ENDDT);//处理自己的 if (modelLogUpdate != null) listResult.Add(modelLogUpdate); if (ListUserID != null && ListUserName != null && ListUserID.Any()) for (int i = 0; i < ListUserID.Count; i++) listResult.Add(AddModel(OPERATEPOINT_Enums.RiskDeal, DATA_ID, ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); break; case OPERATEPOINT_Enums.RiskDeal: modelLogUpdate = GetUpdateDeal(OPERATEPOINT, DATA_ID, UserIDLogin, DATA_ID_SUB, TASK_ENDDT);//处理自己的 if (modelLogUpdate != null) listResult.Add(modelLogUpdate); if (ListUserID != null && ListUserName != null && ListUserID.Any()) for (int i = 0; i < ListUserID.Count; i++) listResult.Add(AddModel(OPERATEPOINT_Enums.RiskDealDealCheck, DATA_ID, ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); break; case OPERATEPOINT_Enums.RiskDealDealCheck: modelLogUpdate = GetUpdateDeal(OPERATEPOINT, DATA_ID, UserIDLogin, DATA_ID_SUB, TASK_ENDDT);//处理自己的 if (modelLogUpdate != null) listResult.Add(modelLogUpdate); if (ListUserID != null && ListUserName != null && ListUserID.Any()) for (int i = 0; i < ListUserID.Count; i++) listResult.Add(AddModel(OPERATEPOINT_Enums.RiskDealCheckerCheck, DATA_ID, ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); break; case OPERATEPOINT_Enums.RiskDealCheckerCheck: modelLogUpdate = GetUpdateDeal(OPERATEPOINT, DATA_ID, UserIDLogin, DATA_ID_SUB, TASK_ENDDT);//处理自己的 if (modelLogUpdate != null) listResult.Add(modelLogUpdate); if (ListUserID != null && ListUserName != null && ListUserID.Any()) for (int i = 0; i < ListUserID.Count; i++) listResult.Add(AddModel(OPERATEPOINT_Enums.RiskDealAudit, DATA_ID, ListUserID[i], ListUserName[i], ORG_ID, i, false, DATA_ID_SUB)); break; case OPERATEPOINT_Enums.RiskDealAudit: modelLogUpdate = GetUpdateDeal(OPERATEPOINT, DATA_ID, UserIDLogin, DATA_ID_SUB, TASK_ENDDT);//处理自己的 if (modelLogUpdate != null) listResult.Add(modelLogUpdate); var logEndRisk = AddModel(OPERATEPOINT_Enums.RiskEnd, DATA_ID, UserIDLogin, APT.Infrastructure.Api.AppContext.CurrentSession.UserName, ORG_ID); logEndRisk.OPERTETIME = DateTime.Now; if (modelLogUpdate != null) logEndRisk.ISINTTIME = modelLogUpdate.ISINTTIME; listResult.Add(logEndRisk); break; case OPERATEPOINT_Enums.RiskEnd: break; default: break; } if (ListUserIDDone != null && ListUserIDDone.Count > 0) { //除了登陆者 需要默认操作的 listResult.ForEach(e => { if (ListUserIDDone.Contains(e.USER_ID)) e.OPERTETIME = DateTime.Now; }); } return listResult; } /// /// 获取新记录 /// /// /// /// /// /// /// /// 是否添加记录 比如没找到记录 直接添加记录 /// private T_BS_OPERATE_LOG AddModel(OPERATEPOINT_Enums OPERATEPOINT, Guid DATA_ID, Guid UserID, string UserName, Guid? ORG_ID, int ORDERNO = 0, bool isAddLog = false, Guid? DATA_ID_SUB = null) { T_BS_OPERATE_LOG ModelAdd = new T_BS_OPERATE_LOG() { ID = Guid.NewGuid(), ORG_ID = ORG_ID, LOGTYPE = ((int)OPERATEPOINT) > 80 ? LOGTYPE_Enums.RiskSubmit : LOGTYPE_Enums.SafeCheck, DATA_ID = DATA_ID, DATA_ID_SUB = DATA_ID_SUB, OPERATEPOINT = OPERATEPOINT, USER_ID = UserID, USRTNAME = UserName, ORDERNO = ORDERNO, //OPERTETIME = null, //ISINTTIME = false, CREATE_TIME = DateTime.Now, CREATER_ID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID }; if (isAddLog || (APT.Infrastructure.Api.AppContext.CurrentSession.UserID.HasValue && APT.Infrastructure.Api.AppContext.CurrentSession.UserID.Value == UserID)) { ModelAdd.OPERTETIME = DateTime.Now;//默认通过 } return ModelAdd; } /// /// 获取需要修改的Model /// /// 操作节点 /// /// /// /// private T_BS_OPERATE_LOG GetUpdateDeal(OPERATEPOINT_Enums OPERATEPOINT, Guid DATA_ID, Guid UserID, Guid? DATA_ID_SUB = null, DateTime? TASK_ENDDT = null) { if (UserID == Guid.Empty) { return null; } Expression> expression = e => e.DATA_ID == DATA_ID && e.OPERATEPOINT == OPERATEPOINT && e.USER_ID == UserID; if (DATA_ID_SUB.HasValue) expression = expression.And(e => e.DATA_ID_SUB.HasValue && e.DATA_ID_SUB == DATA_ID_SUB); var model = GetEntity(expression); if (model != null) { model.OPERTETIME = DateTime.Now; if (TASK_ENDDT != null) model.ISINTTIME = (model.OPERTETIME > TASK_ENDDT.Value ? false : true); } return model; } } }