332 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			332 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C#
		
	
	
	
| namespace BLL
 | |
| {
 | |
|     using System;
 | |
|     using System.Collections;
 | |
|     using System.Linq;
 | |
| 
 | |
|     /// <summary>
 | |
|     /// 项目单据流程通用类
 | |
|     /// </summary>
 | |
|     public static class ProjectDataFlowSetService
 | |
|     {
 | |
|         public static Model.SGGLDB db = Funs.DB;
 | |
|         /// <summary>
 | |
|         /// 记录数
 | |
|         /// </summary>
 | |
|         private static int count
 | |
|         {
 | |
|             get;
 | |
|             set;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取分页列表
 | |
|         /// </summary>
 | |
|         /// <param name="startRowIndex"></param>
 | |
|         /// <param name="maximumRows"></param>
 | |
|         /// <returns></returns>
 | |
|         public static IEnumerable getListData(string dataId, int startRowIndex, int maximumRows)
 | |
|         {
 | |
|             IQueryable<Model.View_ProjectData_FlowOperate> 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,
 | |
|                    };
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取列表数
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public static int getListCount(string dataId)
 | |
|         {
 | |
|             return count;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 根据流程id得到流程信息
 | |
|         /// </summary>
 | |
|         /// <param name="flowOperateId">流程id</param>
 | |
|         /// <returns></returns>
 | |
|         public static Model.ProjectData_FlowOperate getProjectDataFlowOperateByFlowOperateId(string flowOperateId)
 | |
|         {
 | |
|             return Funs.DB.ProjectData_FlowOperate.FirstOrDefault(x => x.FlowOperateId == flowOperateId);
 | |
|         }
 | |
| 
 | |
|         #region 项目单据流程 增删改
 | |
|         /// <summary>
 | |
|         /// 增加项目单据流程
 | |
|         /// </summary>
 | |
|         /// <param name="FlowSetName"></param>
 | |
|         /// <param name="def"></param>
 | |
|         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();
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 删除项目单据流程
 | |
|         /// </summary>
 | |
|         /// <param name="flowSetId"></param>
 | |
|         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();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 删除流程根据单据主键ID
 | |
|         /// </summary>
 | |
|         /// <param name="flowSetId"></param>
 | |
|         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
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 根据ID获取未处理流程
 | |
|         /// </summary>
 | |
|         /// <param name="projectId">项目id</param>
 | |
|         /// <param name="menuId">菜单id</param>
 | |
|         /// <param name="dataId">数据主键id</param>
 | |
|         /// <returns></returns>
 | |
|         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;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 根据ID获取编制人的信息
 | |
|         /// </summary>
 | |
|         /// <param name="dataId">主表id</param>
 | |
|         /// <returns></returns>
 | |
|         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;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 
 | |
|         /// </summary>
 | |
|         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);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 更新处理意见
 | |
|         /// </summary>
 | |
|         /// <param name="upFlowOperate"></param>
 | |
|         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);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取流程最大排序号
 | |
|         /// </summary>
 | |
|         /// <param name="projectId">项目id</param>
 | |
|         /// <param name="menuId">菜单id</param>
 | |
|         /// <param name="dataId">数据主键id</param>
 | |
|         /// <returns></returns>
 | |
|         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;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 根据单据id得到下步办理步骤和办理人
 | |
|         /// </summary>
 | |
|         /// <param name="dataId"></param>
 | |
|         /// <returns></returns>
 | |
|         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;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 根据菜单id和步骤序号得到下一个流程
 | |
|         /// </summary>
 | |
|         /// <param name="menuId"></param>
 | |
|         /// <param name="sortIndex"></param>
 | |
|         /// <returns></returns>
 | |
|         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;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 判断主表是否存在审批记录
 | |
|         /// </summary>
 | |
|         /// <param name="menuId">菜单Id</param>
 | |
|         /// <param name="dataId">主表主键Id</param>
 | |
|         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;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 获取最后一条未办理的意见
 | |
|         /// </summary>
 | |
|         /// <param name="upFlowOperate"></param>
 | |
|         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();
 | |
|         }
 | |
|     }
 | |
| }
 |