namespace BLL { using System; using System.Collections; using System.Linq; /// /// 项目单据流程通用类 /// public static class ProjectDataFlowSetService { public static Model.SGGLDB db = Funs.DB; /// /// 记录数 /// private static int count { get; set; } /// /// 获取分页列表 /// /// /// /// public static IEnumerable getListData(string dataId, int startRowIndex, int maximumRows) { IQueryable q = from x in db.View_ProjectData_FlowOperate where x.DataId == dataId && x.IsClosed == true orderby x.SortIndex descending select x; count = q.Count(); if (count == 0) { return new object[] { "" }; } return from x in q.Skip(startRowIndex).Take(maximumRows) select new { x.FlowOperateId, x.MenuId, x.DataId, x.SortIndex, x.OperaterId, x.OperaterTime, x.State, x.Opinion, x.IsClosed, x.MenuName, x.OperaterName, x.UnitId, x.UnitName, x.StateName, }; } /// /// 获取列表数 /// /// public static int getListCount(string dataId) { return count; } /// /// 根据流程id得到流程信息 /// /// 流程id /// public static Model.ProjectData_FlowOperate getProjectDataFlowOperateByFlowOperateId(string flowOperateId) { return Funs.DB.ProjectData_FlowOperate.FirstOrDefault(x => x.FlowOperateId == flowOperateId); } #region 项目单据流程 增删改 /// /// 增加项目单据流程 /// /// /// public static void AddProjectData_FlowOperate(Model.ProjectData_FlowOperate flowSet) { Model.SGGLDB db = Funs.DB; Model.ProjectData_FlowOperate newFlowOperate =new Model.ProjectData_FlowOperate { FlowOperateId = SQLHelper.GetNewID(typeof(Model.ProjectData_FlowOperate)), MenuId = flowSet.MenuId, DataId = flowSet.DataId }; int newSortIndex = getFlowSetMaxSortIndexByMenuId(flowSet.MenuId, flowSet.DataId); newFlowOperate.SortIndex = newSortIndex; newFlowOperate.OperaterId = flowSet.OperaterId; newFlowOperate.OperaterTime = flowSet.OperaterTime; newFlowOperate.State = flowSet.State; newFlowOperate.Opinion = flowSet.Opinion; newFlowOperate.IsClosed = flowSet.IsClosed; db.ProjectData_FlowOperate.InsertOnSubmit(newFlowOperate); db.SubmitChanges(); } /// /// 删除项目单据流程 /// /// public static void DeleteFlowSetByFlowSetId(string flowSetId) { Model.SGGLDB db = Funs.DB; Model.ProjectData_FlowOperate flowSet = db.ProjectData_FlowOperate.FirstOrDefault(e => e.FlowOperateId == flowSetId); if (flowSet != null) { db.ProjectData_FlowOperate.DeleteOnSubmit(flowSet); db.SubmitChanges(); } } /// /// 删除流程根据单据主键ID /// /// public static void DeleteFlowSetByDataId(string dataId) { Model.SGGLDB db = Funs.DB; var flowSets = from x in db.ProjectData_FlowOperate where x.DataId == dataId select x; if (flowSets.Count() > 0) { db.ProjectData_FlowOperate.DeleteAllOnSubmit(flowSets); db.SubmitChanges(); } } #endregion /// /// 根据ID获取未处理流程 /// /// 项目id /// 菜单id /// 数据主键id /// public static Model.ProjectData_FlowOperate getUnFlowOperate(string dataId) { var unFlowOperate = (from x in Funs.DB.ProjectData_FlowOperate where x.DataId == dataId && (x.IsClosed == false || !x.IsClosed.HasValue) orderby x.SortIndex descending select x).FirstOrDefault(); return unFlowOperate; } /// /// 根据ID获取编制人的信息 /// /// 主表id /// public static Model.ProjectData_FlowOperate getCompileFlowOperate(string dataId) { var unFlowOperate = (from x in Funs.DB.ProjectData_FlowOperate where x.DataId == dataId && x.SortIndex == 1 select x).FirstOrDefault(); return unFlowOperate; } /// /// /// public static void CloseFlowOperate(string menuId, string dataId, string opinion) { var updateUnFlowOperate = db.ProjectData_FlowOperate.FirstOrDefault(x => x.MenuId == menuId && x.DataId == dataId && (x.IsClosed == false || !x.IsClosed.HasValue)); if (updateUnFlowOperate != null) { updateUnFlowOperate.OperaterTime = DateTime.Now; updateUnFlowOperate.IsClosed = true; updateUnFlowOperate.Opinion = opinion; BLL.ProjectDataFlowSetService.UpdateFlowOperateOpinion(updateUnFlowOperate); } } /// /// 更新处理意见 /// /// public static void UpdateFlowOperateOpinion(Model.ProjectData_FlowOperate flowOperate) { Model.SGGLDB db = Funs.DB; var upFlowOperate = from x in db.ProjectData_FlowOperate where x.MenuId == flowOperate.MenuId && x.DataId == flowOperate.DataId && (x.IsClosed == false || !x.IsClosed.HasValue) select x; if (upFlowOperate.Count() > 0) { foreach (var item in upFlowOperate) { item.OperaterId = flowOperate.OperaterId; item.OperaterTime = flowOperate.OperaterTime; item.State = flowOperate.State; item.Opinion = flowOperate.Opinion; item.IsClosed = flowOperate.IsClosed; Funs.DB.SubmitChanges(); } } else { Model.ProjectData_FlowOperate newFlowOperate = new Model.ProjectData_FlowOperate { MenuId = flowOperate.MenuId, DataId = flowOperate.DataId, OperaterId = flowOperate.OperaterId, OperaterTime = flowOperate.OperaterTime, State = flowOperate.State, Opinion = flowOperate.Opinion, IsClosed = flowOperate.IsClosed }; AddProjectData_FlowOperate(newFlowOperate); } } /// /// 获取流程最大排序号 /// /// 项目id /// 菜单id /// 数据主键id /// public static int getFlowSetMaxSortIndexByMenuId(string menuId, string dataId) { int maxSortIndex = 1; var flowSet = Funs.DB.ProjectData_FlowOperate.Where(x => x.MenuId == menuId && x.DataId == dataId); var sortIndex = flowSet.Select(x => x.SortIndex).Max(); if (sortIndex.HasValue) { maxSortIndex = sortIndex.Value + 1; } return maxSortIndex; } /// /// 根据单据id得到下步办理步骤和办理人 /// /// /// public static string GetNextProjectDataFlowOperaterName(string dataId, string state) { string operaterName = string.Empty; if (state == Const.State_2) { operaterName = "已完成"; } else if (state == Const.State_R) { operaterName = "重申请"; } else if (state == Const.State_1) { var flowSet = getUnFlowOperate(dataId); if (flowSet != null) { var user = BLL.UserService.GetUserByUserId(flowSet.OperaterId); if (user != null) { operaterName = "下步处理人:" + user.UserName; } else { operaterName = "待处理:管理员"; } } else { operaterName = "待处理:管理员"; } } else { operaterName = "待提交:单据编制人"; } return operaterName; } /// /// 根据菜单id和步骤序号得到下一个流程 /// /// /// /// public static Model.ProjectData_FlowOperate GetNextProjectData_FlowOperate(string dataId) { Model.ProjectData_FlowOperate flowSet = new Model.ProjectData_FlowOperate(); var flowSets = from x in Funs.DB.ProjectData_FlowOperate where x.DataId == dataId && (!x.IsClosed.HasValue || x.IsClosed == false) orderby x.SortIndex select x; if (flowSets.Count() > 0) { int? index = flowSets.Select(x => x.SortIndex).Min(); if (index.HasValue) { flowSet = flowSets.FirstOrDefault(x => x.SortIndex == index); } } return flowSet; } /// /// 判断主表是否存在审批记录 /// /// 菜单Id /// 主表主键Id public static bool IsExitOperate(string menuId, string dataId) { return (from x in db.ProjectData_FlowOperate where x.MenuId == menuId && x.DataId == dataId select x).Count() > 0; } /// /// 获取最后一条未办理的意见 /// /// public static Model.ProjectData_FlowOperate GetFlowOperateOpinion(string menuId, string dataId) { Model.SGGLDB db = Funs.DB; return (from x in db.ProjectData_FlowOperate where x.MenuId == menuId && x.DataId == dataId && (x.IsClosed == false || !x.IsClosed.HasValue) select x).FirstOrDefault(); } } }