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();
}
}
}