2021-04-30 10:28:37 +08:00
|
|
|
|
namespace BLL
|
|
|
|
|
{
|
2021-12-02 10:44:15 +08:00
|
|
|
|
using System;
|
2021-04-30 10:28:37 +08:00
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-02 10:44:15 +08:00
|
|
|
|
/// <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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-04-30 10:28:37 +08:00
|
|
|
|
/// <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();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|