using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
///< summary>
/// 工作流类
///< /summary>
public class Workflow
{
private int _id;
///< summary>
/// 工作流编号
///< /summary>
public int Id
{
get { return _id; }
set { _id = value; }
}
private string _name;
///< summary>
/// 工作流名字
///< /summary>
public string Name
{
get { return _name; }
set { _name = value; }
}
private string _url;
///< summary>
/// 工作流使用网页
///< /summary>
public string Url
{
get { return _url; }
set { _url = value; }
}
private int _seq;
///< summary>
/// 工作流运行序号
///< /summary>
public int Seq
{
get { return _seq; }
set { _seq = value; }
}
private int _statusBit;
///< summary>
/// 状态位
///< /summary>
public int StatusBit
{
get { return _statusBit; }
set { _statusBit = value; }
}
public Workflow()
{
}
public Workflow(int id, string name, string url, int seq, int statusBit)
{
this.Id = id;
this.Name = name;
this.Url = url;
this.Seq = seq;
this.StatusBit = statusBit;
}
public Workflow(SqlDataReader dr)
{
this.Id = Convert.ToInt32(dr["id"]);
this.Name = dr["name"].ToString();
this.Url = dr["url"].ToString();
this.Seq = Convert.ToInt32(dr["seq"]);
this.StatusBit = Convert.ToInt32(dr["statusBit"]);
}
public int Add()
{
string procName = "pr_AddWorkflow";
SqlParameter[] prams = { new SqlParameter("@name",SqlDbType.NVarChar,50),
new SqlParameter("@url",SqlDbType.NVarChar,500),
new SqlParameter("@seq",SqlDbType.Int),
new SqlParameter("@statusbit",SqlDbType.Int)};
prams[0].Value = Name;
prams[1].Value = Url;
prams[2].Value = Seq;
prams[3].Value = StatusBit;
return Database.runExecute(procName, prams);
}
public int Delete()
{
string procName = "pr_DeleteWorkflow";
SqlParameter[] prams = { new SqlParameter("@id",SqlDbType.BigInt)};
prams[0].Value = Id;
return Database.runExecute(procName, prams);
}
public int Update()
{
string procName = "pr_UpdateWorkflow";
SqlParameter[] prams = { new SqlParameter("@id",SqlDbType.BigInt),
new SqlParameter("@name",SqlDbType.NVarChar,50),
new SqlParameter("@url",SqlDbType.NVarChar,500),
new SqlParameter("@seq",SqlDbType.Int),
new SqlParameter("@statusbit",SqlDbType.Int)};
prams[0].Value = Id;
prams[1].Value = Name;
prams[2].Value = Url;
prams[3].Value = Seq;
prams[4].Value = StatusBit;
return Database.runExecute(procName, prams);
}
///< summary>
/// 根据工作流编号获得工作流信息
///< /summary>
/// <param name="id">工作流编号</param>
///< returns>工作流信息</returns>
public static Workflow GetWorkflowById(int id)
{
Workflow wl = new Workflow();
string procName = "pr_GetWorkflowById";
SqlParameter[] prams = { new SqlParameter("@Id",SqlDbType.BigInt)};
prams[0].Value = id;
SqlDataReader dr = Database.runProcGetReader(procName, prams);
while (dr.Read())
{
wl = new Workflow(dr);
}
dr.Close();
return wl;
}
///< summary>
/// 根据工作流编号获得工作流网页地址
///< /summary>
/// <param RealName="workflowId">工作流编号</param>
///< returns>工作流网页地址</returns>
public static string GetWorkflowUrlById(int workflowId)
{
string procName = "pr_GetWorkflowUrlById";
SqlParameter[] prams = { new SqlParameter("@workflowId",SqlDbType.BigInt),
new SqlParameter("@url",SqlDbType.NVarChar,500)};
prams[0].Value = workflowId;
prams[1].Direction = ParameterDirection.Output;
Database.runExecute(procName, prams);
return prams[1].Value.ToString();
}
///< summary>
/// 返回工作流个数
///< /summary>
///< returns>工作流个数</returns>
public static int GetWorkflowNum()
{
string procName = "pr_GetWorkflowNum";
SqlParameter[] prams = { new SqlParameter("@num",SqlDbType.Int)};
prams[0].Direction = ParameterDirection.Output;
Database.runExecute(procName,prams);
return Convert.ToInt32(prams[0].Value);
}
///< summary>
/// 设置申请表的工作流完成状态
///< /summary>
/// <param name="reportId">申请表编号</param>
/// <param name="workflowId">工作流编号</param>
/// <param name="status">完成状态</param>
///< returns></returns>
public static int SetActivityStatus(int reportId, int workflowId, bool status)
{
string procName = "pr_SetActivityStatus";
SqlParameter[] prams = { new SqlParameter("@reportId",SqlDbType.BigInt),
new SqlParameter("@workflowId",SqlDbType.BigInt),
new SqlParameter("@status",SqlDbType.Bit)};
prams[0].Value = reportId;
prams[1].Value = workflowId;
prams[2].Value = status;
return Database.runExecute(procName, prams);
}
///< summary>
/// 获得申请表的工作流完成状态
///< /summary>
/// <param name="reportId">申请表编号</param>
/// <param name="workflowId">工作流编号</param>
///< returns>完成状态</returns>
public static bool GetActivityStatus(int reportId, int workflowId)
{
string procName = "pr_GetActivityStatus";
SqlParameter[] prams = { new SqlParameter("@reportId",SqlDbType.BigInt),
new SqlParameter("@workflowId",SqlDbType.BigInt),
new SqlParameter("@status",SqlDbType.Bit)};
prams[0].Value = reportId;
prams[1].Value = workflowId;
prams[2].Direction = ParameterDirection.Output;
Database.runExecute(procName, prams);
return Convert.ToBoolean(prams[2].Value);
}
///< summary>
/// 获得工作流中当前活动的下一批运行活动
///< /summary>
/// <param name="workflowId">当前活动编号</param>
///< returns>下一批运行活动</returns>
public static List<Workflow> GetNextWorkflow(int workflowId)
{
List<Workflow> workflows = new List<Workflow>();
string procName = "pr_GetNextWorkflow";
SqlParameter[] prams = { new SqlParameter("@workflowId",SqlDbType.BigInt)};
prams[0].Value = workflowId;
SqlDataReader dr = Database.runProcGetReader(procName, prams);
while (dr.Read())
{
Workflow wf = new Workflow(dr);
workflows.Add(wf);
}
return workflows;
}
///< summary>
/// 获得工作流中当前活动的上一批运行活动
///< /summary>
/// <param name="workflowId">当前活动编号</param>
///< returns>上一批运行活动</returns>
public static List<Workflow> GetPreviousWorkflow(int workflowId)
{
List<Workflow> workflows = new List<Workflow>();
string procName = "pr_GetPreviousWorkflow";
SqlParameter[] prams = { new SqlParameter("@workflowId",SqlDbType.BigInt)};
prams[0].Value = workflowId;
SqlDataReader dr = Database.runProcGetReader(procName, prams);
while (dr.Read())
{
Workflow wf = new Workflow(dr);
workflows.Add(wf);
}
return workflows;
}
///< summary>
/// 判断申请表进行的上一批工作流是否完成
///< /summary>
/// <param name="workflowId"></param>
/// <param name="reportId"></param>
///< returns></returns>
public static bool IsPreviousWorkflowFinished(int workflowId, int reportId)
{
bool flag = true;
List<Workflow> workflows = new List<Workflow>();
workflows = GetPreviousWorkflow(workflowId);
foreach (Workflow wf in workflows)
{
string status = Reports.GetCurrentStatusById(reportId);
if (status.Substring(wf.StatusBit - 1, 1) == "0")
{
flag = false;
break;
}
}
return flag;
}
///< summary>
/// 判断申请表进行的下一批工作流是否开始
///< /summary>
/// <param name="workflowId"></param>
/// <param name="reportId"></param>
///< returns></returns>
public static bool IsNextWorkflowStarted(int workflowId, int reportId)
{
bool flag = false;
List<Workflow> workflows = new List<Workflow>();
workflows = GetNextWorkflow(workflowId);
foreach (Workflow wf in workflows)
{
string status = Reports.GetCurrentStatusById(reportId);
if (status.Substring(wf.StatusBit - 1, 1) == "1")
{
flag = true;
break;
}
}
return flag;
}
///< summary>
/// 获得工作流中第一个活动
///< /summary>
///< returns>第一个活动</returns>
public static Workflow GetFirstActivity()
{
Workflow wf = new Workflow();
string procName = "pr_GetFirstActivity";
SqlDataReader dr = Database.runProcGetReader(procName);
while (dr.Read())
{
wf = new Workflow(dr);
}
return wf;
}
///< summary>
/// 获得工作流中最后一个活动
///< /summary>
///< returns>最后一个活动</returns>
public static Workflow GetLastActivity()
{
Workflow wf = new Workflow();
string procName = "pr_GetLastActivity";
SqlDataReader dr = Database.runProcGetReader(procName);
while (dr.Read())
{
wf = new Workflow(dr);
}
return wf;
}
///< summary>
/// 获得所有工作流活动
///< /summary>
public static List<Workflow> GetAllWorkflow()
{
List<Workflow> workflows = new List<Workflow>();
string procName = "pr_GetAllWorkflows";
SqlDataReader dr = Database.runProcGetReader(procName);
while (dr.Read())
{
workflows.Add(new Workflow(dr));
}
return workflows;
}
}
///< summary>
/// 按运行顺序排序接口
///< /summary>
public class ISortWorkflows : IComparer<Workflow>
{
public int Compare(Workflow x, Workflow y)
{
if (x.Seq < y.Seq) return -1;
else if (x.Seq > y.Seq) return 1;
else return 0;
}
}
|