using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Security.Policy; using System.Text; using System.Threading.Tasks; using System.Web.UI.WebControls; using Microsoft.Office.Interop.Excel; using Model; namespace BLL { public class ProblemNoticeService { //创建一个枚举,包含ProblemNotic,ProblemReply两个字符串 public enum ProblemFormType { ProblemNotice, ProblemReply } public static Problem_Notice GetProblemNoticeById(string proNoticeId) { using (Model.SUBQHSEDB db = new Model.SUBQHSEDB(Funs.ConnString)) { return db.Problem_Notice.FirstOrDefault(e => e.ProNoticeId == proNoticeId); } } /// /// 添加 /// /// public static void Add(Model.Problem_Notice model) { using (Model.SUBQHSEDB db = new Model.SUBQHSEDB(Funs.ConnString)) { db.Problem_Notice.InsertOnSubmit(model); db.SubmitChanges(); } } /// /// 修改 /// /// public static void Update(Model.Problem_Notice model) { using (var db = new Model.SUBQHSEDB(Funs.ConnString)) { Model.Problem_Notice newModel = db.Problem_Notice.First(e => e.ProNoticeId == model.ProNoticeId); newModel.ProjectId = model.ProjectId; newModel.ProCode = model.ProCode; newModel.CheckMans = model.CheckMans; newModel.CheckStartTime = model.CheckStartTime; newModel.CheckEndTime = model.CheckEndTime; newModel.Resume = model.Resume; newModel.OtherJob = model.OtherJob; newModel.Unitid = model.Unitid; newModel.SupervisionMan = model.SupervisionMan; //newModel.CreateUser = model.CreateUser; newModel.CheckUnitDatetime = model.CheckUnitDatetime; newModel.CheckUnitSignature = model.CheckUnitSignature; newModel.CheckMansDatetime = model.CheckMansDatetime; newModel.CheckMansSignature = model.CheckMansSignature; newModel.State = model.State; newModel.UnitApproveUserIds = model.UnitApproveUserIds; newModel.SubUnitApproveUserIds = model.SubUnitApproveUserIds; newModel.ProjectUnitApproveUserIds = model.ProjectUnitApproveUserIds; //newModel.TestedUnitManDatetime = model.TestedUnitManDatetime; //newModel.TestedUnitManSignature = model.TestedUnitManSignature; //newModel.ReviewOpinions = model.ReviewOpinions; //newModel.ReviewDatetime = model.ReviewDatetime; //newModel.ReviewSignature = model.ReviewSignature; //newModel.LeaderDatetime = model.LeaderDatetime; //newModel.LeaderSignature = model.LeaderSignature; //newModel.InspectionUnitOpinions = model.InspectionUnitOpinions; //newModel.InspectionUnitDatetime = model.InspectionUnitDatetime; //newModel.InspectionUnitSignature = model.InspectionUnitSignature; db.SubmitChanges(); } } /// /// 审批最末级别 /// /// /// public static int GetEndApproveLevel(string proNoticeId) { int EndApproveLevel = 2; var table = GetProblemNoticeById(proNoticeId); if (table.ProType == "1") { EndApproveLevel = 3; //项目级别 } return EndApproveLevel; } /// /// 创建通知单第一个审批流程 /// /// public static void CreateFirstNoticeApprove(string proNoticeId) { var approvelist = ProblemNoticeApprove.GetAllProblem_NoticeApproveByParentId(proNoticeId); var noAgreeCount = approvelist.Where(x => x.IsAgree == 1).Count(); if (approvelist.Count == 0 || noAgreeCount > 0) { ProblemNoticeApprove.DeleteProblem_NoticeApproveByParentId(proNoticeId); var addApproveList = GetApproveManModels(proNoticeId) .Where(x => x.Level == 1); foreach (var item in addApproveList) { Model.Problem_NoticeApprove _Approve = new Model.Problem_NoticeApprove(); _Approve.ApproveId = SQLHelper.GetNewID(typeof(Model.Problem_NoticeApprove)); _Approve.ParentId = proNoticeId; _Approve.ApproveMan = item.Userid; _Approve.ApproveDate = ""; _Approve.State = 0; _Approve.IsAgree = 0; _Approve.ApproveIdea = ""; _Approve.ApproveType = item.Rolename; _Approve.ApproveForm = ProblemFormType.ProblemNotice.ToString(); BLL.ProblemNoticeApprove.AddProblem_NoticeApprove(_Approve); } } } /// /// 创建回复单第一个审批流程 /// /// public static void CreatFirstReplyApprove(string proNoticeId) { var model = GetReplyApproveManModels(proNoticeId).OrderBy(x => x.Number).FirstOrDefault(); Model.Problem_NoticeApprove _Approve = new Model.Problem_NoticeApprove(); _Approve.ApproveId = SQLHelper.GetNewID(typeof(Model.Problem_NoticeApprove)); _Approve.ParentId = proNoticeId + "reply"; _Approve.ApproveMan = model.Userid; _Approve.ApproveDate = ""; _Approve.State = 0; _Approve.IsAgree = 0; _Approve.ApproveIdea = ""; _Approve.ApproveType = model.Rolename; _Approve.ApproveForm = ProblemFormType.ProblemReply.ToString(); BLL.ProblemNoticeApprove.AddProblem_NoticeApprove(_Approve); } /// /// 根据角色名称获取审批级别 /// /// /// public static int GetReplylevelByRolename(string rolename) { int level = 0; switch (rolename) { case "集团审批组": level = 1; break; case "子公司审批组": level = 2; break; case "项目审批组": level = 3; break; default: break; } return level; } /// /// 获取审批人列表 /// /// /// public static List GetApproveManModels(string proNoticeId) { Model.Problem_Notice table = GetProblemNoticeById(proNoticeId); List approveManModels = new List(); var level_1 = table.UnitApproveUserIds.Split(','); var level_2 = table.SubUnitApproveUserIds.Split(','); var level_3 = table.ProjectUnitApproveUserIds.Split(','); int i = 0; if (level_1.Length > 0) { foreach (var item in level_1) { approveManModels.Add(new ApproveManModel { Number = i, Userid = item, Rolename = "集团审批组", Level = 1 }); i++; } } if (level_2.Length > 0) { foreach (var item in level_2) { approveManModels.Add(new ApproveManModel { Number = i, Userid = item, Rolename = "子公司审批组", Level = 2 }); i++; } } if (level_3.Length > 0) { foreach (var item in level_3) { approveManModels.Add(new ApproveManModel { Number = i, Userid = item, Rolename = "项目审批组", Level = 3 }); i++; } } return approveManModels; } /// /// 获取回复审批人列表 /// /// /// public static List GetReplyApproveManModels(string proNoticeId) { var approvelist = ProblemNoticeApprove.GetAllProblem_NoticeApproveByParentId(proNoticeId).OrderByDescending(x => x.ApproveDate); List approveManModels = new List(); int i = 0; foreach (var item in approvelist) { approveManModels.Add(new ApproveManModel { Number = i, Userid = item.ApproveMan, Rolename = item.ApproveType, Level = GetReplylevelByRolename(item.ApproveType) }); i++; } return approveManModels; } /// /// 是否可以拒绝 /// /// /// /// public static bool IsCanRefuse(string proNoticeId, string userid) { bool result = true; var approvelist = ProblemNoticeApprove.GetProblem_NoticeApproveByParentId(proNoticeId); var thisApprovemodel = approvelist.Where(x => x.ApproveMan == userid).FirstOrDefault(); if (thisApprovemodel != null) { var thisApproveLevel = GetApproveManModels(proNoticeId) .Find(x => x.Userid == userid && x.Rolename == thisApprovemodel.ApproveType).Level; if (thisApproveLevel > 1) { result = false; } } return result; } /// /// 通知单审批 /// /// /// /// /// public static void Approve(string proNoticeId, string userid, bool isAgree, string idea) { var approvelist = ProblemNoticeApprove.GetProblem_NoticeApproveByParentId(proNoticeId); var thisApprovemodel = approvelist.Where(x => x.ApproveMan == userid).FirstOrDefault(); if (thisApprovemodel == null) { return; } var thisApproveLevel = GetApproveManModels(proNoticeId).Find(x => x.Userid == userid && x.Rolename == thisApprovemodel.ApproveType).Level; if (thisApprovemodel != null) { thisApprovemodel.ApproveDate = Funs.GetNewDateTimeOrNow("").ToString(); thisApprovemodel.IsAgree = isAgree ? 2 : 1; thisApprovemodel.ApproveIdea = idea; thisApprovemodel.State = 1; ProblemNoticeApprove.UpdateProblem_NoticeApprove(thisApprovemodel); if (isAgree) { if (ProblemNoticeApprove.IsCountersignerAllAgree(proNoticeId, thisApprovemodel.ApproveType)) //当前节点是否全部审批结束 { if (thisApproveLevel < GetEndApproveLevel(proNoticeId)) //是否最末节点 { var addApproveList = GetApproveManModels(proNoticeId) .Where(x => x.Level == (thisApproveLevel + 1)); foreach (var item in addApproveList) { Model.Problem_NoticeApprove _Approve = new Model.Problem_NoticeApprove(); _Approve.ApproveId = SQLHelper.GetNewID(typeof(Model.Problem_NoticeApprove)); _Approve.ParentId = proNoticeId; _Approve.ApproveMan = item.Userid; _Approve.ApproveDate = ""; _Approve.State = 0; _Approve.IsAgree = 0; _Approve.ApproveIdea = ""; _Approve.ApproveType = item.Rolename; _Approve.ApproveForm = ProblemFormType.ProblemNotice.ToString(); BLL.ProblemNoticeApprove.AddProblem_NoticeApprove(_Approve); } if (addApproveList.FirstOrDefault().Level == 2 && GetEndApproveLevel(proNoticeId) == 3) //检查组直接发给项目 抄送三级单位 { var autoApproveList = ProblemNoticeApprove.GetProblem_NoticeApproveByParentId(proNoticeId); foreach (var approve in autoApproveList) { Approve(proNoticeId, approve.ApproveMan, true, ""); } } } else { var model = GetProblemNoticeById(proNoticeId); model.State = "2"; Update(model); CreatFirstReplyApprove(proNoticeId); } } } else { var model = GetProblemNoticeById(proNoticeId); model.State = "0"; Update(model); } } } /// /// 回复单审批 /// /// /// /// /// public static void ReplyApprove(string proNoticeId, string userid, bool isAgree, string idea) { string replyNoticeId = proNoticeId + "reply"; var approvelist = ProblemNoticeApprove.GetProblem_NoticeApproveByParentId(replyNoticeId); var thisApprovemodel = approvelist.Where(x => x.ApproveMan == userid).FirstOrDefault(); if (thisApprovemodel == null) { return; } var thisApproveNumber = GetReplyApproveManModels(proNoticeId).Find(x => x.Userid == userid && x.Rolename == thisApprovemodel.ApproveType).Number; if (thisApprovemodel != null) { thisApprovemodel.ApproveDate = Funs.GetNewDateTimeOrNow("").ToString(); thisApprovemodel.IsAgree = isAgree ? 2 : 1; thisApprovemodel.ApproveIdea = idea; thisApprovemodel.State = 1; ProblemNoticeApprove.UpdateProblem_NoticeApprove(thisApprovemodel); if (isAgree) { if (ProblemNoticeApprove.IsCountersignerAllAgree(replyNoticeId, thisApprovemodel.ApproveType)) //当前节点是否全部审批结束 { if (thisApproveNumber < GetReplyApproveManModels(proNoticeId).Max(x => x.Number)) //是否最末节点 { var addApproveList = GetReplyApproveManModels(proNoticeId) .Where(x => x.Number == (thisApproveNumber + 1)); foreach (var item in addApproveList) { Model.Problem_NoticeApprove _Approve = new Model.Problem_NoticeApprove(); _Approve.ApproveId = SQLHelper.GetNewID(typeof(Model.Problem_NoticeApprove)); _Approve.ParentId = replyNoticeId; _Approve.ApproveMan = item.Userid; _Approve.ApproveDate = ""; _Approve.State = 0; _Approve.IsAgree = 0; _Approve.ApproveIdea = ""; _Approve.ApproveType = item.Rolename; _Approve.ApproveForm = ProblemFormType.ProblemReply.ToString(); BLL.ProblemNoticeApprove.AddProblem_NoticeApprove(_Approve); } } else { var model = GetProblemNoticeById(proNoticeId); model.State = "3";//回复审批结束,归档 Update(model); } } } else { CreatFirstReplyApprove(proNoticeId); } } } /// /// 回复 /// /// public static void Reply(Model.Problem_Notice model) { using (var db = new Model.SUBQHSEDB(Funs.ConnString)) { Model.Problem_Notice newModel = db.Problem_Notice.First(e => e.ProNoticeId == model.ProNoticeId); newModel.State = model.State; newModel.TestedUnitManDatetime = model.TestedUnitManDatetime; newModel.TestedUnitManSignature = model.TestedUnitManSignature; newModel.TestedUnitManOpinions = model.TestedUnitManOpinions; newModel.ReviewOpinions = model.ReviewOpinions; newModel.ReviewDatetime = model.ReviewDatetime; newModel.ReviewSignature = model.ReviewSignature; newModel.LeaderOpinions = model.LeaderOpinions; newModel.LeaderDatetime = model.LeaderDatetime; newModel.LeaderSignature = model.LeaderSignature; newModel.InspectionUnitOpinions = model.InspectionUnitOpinions; newModel.InspectionUnitDatetime = model.InspectionUnitDatetime; newModel.InspectionUnitSignature = model.InspectionUnitSignature; db.SubmitChanges(); } } /// /// 回复修改明细项 /// /// public static void UpdateDetail(Model.Problem_Notice_C model) { using (var db = new Model.SUBQHSEDB(Funs.ConnString)) { Model.Problem_Notice_C newModel = db.Problem_Notice_C.First(e => e.ProNoticeCId == model.ProNoticeCId); newModel.ReSituation = model.ReSituation; newModel.ReSituationTime = model.ReSituationTime; db.SubmitChanges(); } } /// /// 删除 /// /// 主键ID public static void Delete(string modelId) { using (var db = new Model.SUBQHSEDB(Funs.ConnString)) { Model.Problem_Notice newModel = db.Problem_Notice.First(e => e.ProNoticeId == modelId); db.Problem_Notice.DeleteOnSubmit(newModel); db.SubmitChanges(); } } public static ProblemNoticeDetailOutput GetDetailItem(string proNoticeCId) { using (var db = new Model.SUBQHSEDB(Funs.ConnString)) { Model.ProblemNoticeDetailOutput modeOutput = new ProblemNoticeDetailOutput(); Model.Problem_Notice_C Model = db.Problem_Notice_C.First(e => e.ProNoticeCId == proNoticeCId); if (Model != null) { modeOutput.ProNoticeCId = Model.ProNoticeCId; modeOutput.QueDescribe = Model.QueDescribe; modeOutput.Requirements = Model.Requirements; modeOutput.ReSituation = Model.ReSituation; modeOutput.QueTypeName = Model.QueType; modeOutput.RiskLevelName = Model.RiskLevel; modeOutput.ImageUrlBefor = AttachFileService.getFileUrl(Model.ProNoticeCId); modeOutput.ImageUrlAfter = AttachFileService.getFileUrl(Model.ProNoticeCId + "Ref"); modeOutput.CheckMan = UserService.getUserNamesUserIdsForApi(Model.CheckMan); } return modeOutput; } } //根据ProblemNoticeDetailInput 保存 public static void SaveDetailItem(ProblemNoticeDetailInput model) { using (var db = new Model.SUBQHSEDB(Funs.ConnString)) { Model.Problem_Notice_C Model = db.Problem_Notice_C.First(e => e.ProNoticeCId == model.ProNoticeCId); if (Model != null) { Model.ReSituation = model.ReSituation; Model.ReSituationTime = DateTime.Now; db.SubmitChanges(); } ////保存附件 if (!string.IsNullOrEmpty(model.ImageUrlAfter)) { UploadFileService.SaveAttachUrl(UploadFileService.GetSourceByAttachUrl(model.ImageUrlAfter, 10, null), model.ImageUrlAfter, Const.ProblemNoticeManagerMenuId, model.ProNoticeCId+"Ref"); } else { CommonService.DeleteAttachFileById(Const.ProblemNoticeManagerMenuId, model.ProNoticeCId + "Ref"); } } } public static void SendNotice(string proNoticeId) { using (var db = new Model.SUBQHSEDB(Funs.ConnString)) { var model = db.Problem_Notice.First(x => x.ProNoticeId == proNoticeId); var createname = UserService.getUserNamesUserIdsForApi(model.CreateUser); var list = db.Problem_Notice_C.Where(e => e.ProNoticeId == proNoticeId && (e.CheckMan !=null || e.CheckMan !="") ).Select(x=>x.CheckMan).Distinct().ToList(); if (list.Count > 0) { string userIds=string.Join(",", list); APICommonService.SendSubscribeMessage(userIds, "安全监督检查待整改", createname, string.Format("{0:yyyy-MM-dd HH:mm:ss}", model.CreateDate)); } } } } }