You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
4.5 KiB
Plaintext
128 lines
4.5 KiB
Plaintext
using System;
|
|
using System.Data;
|
|
using BP.DA;
|
|
using BP.En;
|
|
using BP.WF.Template;
|
|
|
|
namespace BP.WF.DTS
|
|
{
|
|
/// <summary>
|
|
/// Method 的摘要说明
|
|
/// </summary>
|
|
public class AddAuthStation : Method
|
|
{
|
|
/// <summary>
|
|
/// 不带有参数的方法
|
|
/// </summary>
|
|
public AddAuthStation()
|
|
{
|
|
this.Title = "增加授权角色";
|
|
this.Help = "1. 解决一个流程执行完成后,那些授权角色参与了该流程.";
|
|
this.Help += "\t\n 2. 在WF_GenerWorkFlow 的Emps的字段上增加 @部门编号+下划线+角色编号; ";
|
|
this.Help += "\t\n 3. 解决中科软的人员离职后的工作交接后,按照授权角色查询已经办理过的流量问题.";
|
|
|
|
this.GroupName = "流程自动执行定时任务";
|
|
}
|
|
/// <summary>
|
|
/// 设置执行变量
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public override void Init()
|
|
{
|
|
}
|
|
/// <summary>
|
|
/// 当前的操纵员是否可以执行这个方法
|
|
/// </summary>
|
|
public override bool IsCanDo
|
|
{
|
|
get
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 执行
|
|
/// </summary>
|
|
/// <returns>返回执行结果</returns>
|
|
public override object Do()
|
|
{
|
|
GenerWorkFlows ens = new GenerWorkFlows();
|
|
ens.Retrieve("", "");
|
|
|
|
//查询出来,没有做过同步的 并且流程已经完成的 流程实例.
|
|
string sql = "SELECT WorkID FROM WF_GenerWorkFlow WHERE WFState=3 AND Emps NOT LIKE '%@Over' ";
|
|
DataTable dt = DBAccess.RunSQLReturnTable(sql);
|
|
|
|
//遍历这些实例.
|
|
foreach (DataRow dr in dt.Rows)
|
|
{
|
|
Int64 workid = Int64.Parse(dr[0].ToString());
|
|
|
|
GenerWorkFlow gwf = new GenerWorkFlow(workid);
|
|
|
|
//查询出来当前流程的Track.
|
|
sql = "SELECT * FROM ND" + int.Parse(gwf.FK_Flow) + "Track WHERE WorkID=" + workid + " ORDER BY RDT ";
|
|
DataTable tarck = DBAccess.RunSQLReturnTable(sql);
|
|
|
|
//查询出来节点.
|
|
Nodes nds = new Nodes(gwf.FK_Flow);
|
|
|
|
//遍历节点.
|
|
foreach (Node nd in nds)
|
|
{
|
|
if (this.IsHaveStation(nd) == false)
|
|
continue;
|
|
|
|
//求节点与角色的集合.
|
|
NodeStations ndstations = new NodeStations(nd.NodeID);
|
|
if (ndstations.Count == 0)
|
|
continue;
|
|
|
|
//找到处理当前工作的人员集合.
|
|
sql = "SELECT EmpFrom FROM ND" + int.Parse(gwf.FK_Flow) + "Track WHERE WorkID=" + workid + " AND NDFrom=" + nd.NodeID + " ORDER BY RDT ";
|
|
DataTable dtTarck = DBAccess.RunSQLReturnTable(sql);
|
|
|
|
foreach (DataRow drTrack in dtTarck.Rows)
|
|
{
|
|
string empNo = drTrack[0].ToString();
|
|
|
|
//获得人员的集合,与节点绑定的集合.
|
|
sql = "SELECT A.FK_Dept, A.FK_Station FROM Port_DeptEmpStation A, WF_NodeStation B WHERE ";
|
|
sql += " WHERE A.FK_Station=B.FK_Station ";
|
|
sql += " AND A.FK_Emp= '" + empNo + "'";
|
|
sql += " AND B.FK_Node= " + nd.NodeID;
|
|
DataTable dtDeptStatio = DBAccess.RunSQLReturnTable(sql);
|
|
|
|
foreach (DataRow mydtDeptStatio in dtDeptStatio.Rows)
|
|
{
|
|
string deptNo = mydtDeptStatio["FK_Dept"].ToString();
|
|
string stationNo = mydtDeptStatio["FK_Station"].ToString();
|
|
|
|
string str = "@" + deptNo + "_" + stationNo + ";";
|
|
if (gwf.TodoEmps.Contains(str) == false)
|
|
gwf.TodoEmps += str;
|
|
}
|
|
}
|
|
}
|
|
|
|
//设置同步标记执行更新.
|
|
gwf.TodoEmps += "@Over";
|
|
gwf.Update();
|
|
|
|
}
|
|
return "调度完成..";
|
|
}
|
|
|
|
public bool IsHaveStation(Node nd)
|
|
{
|
|
if (nd.HisDeliveryWay == DeliveryWay.ByDeptAndStation)
|
|
return true;
|
|
if (nd.HisDeliveryWay == DeliveryWay.ByStation)
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
}
|
|
}
|