|
|
using System;
|
|
|
using System.Collections;
|
|
|
using System.Data;
|
|
|
using BP.DA;
|
|
|
using BP.Sys;
|
|
|
using BP.En;
|
|
|
using BP.Port;
|
|
|
using BP.Web;
|
|
|
using BP.GPM;
|
|
|
|
|
|
namespace BP.WF.Template
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// Selector属性
|
|
|
/// </summary>
|
|
|
public class SelectorAttr : EntityNoNameAttr
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 流程
|
|
|
/// </summary>
|
|
|
public const string NodeID = "NodeID";
|
|
|
/// <summary>
|
|
|
/// 接受模式
|
|
|
/// </summary>
|
|
|
public const string SelectorModel = "SelectorModel";
|
|
|
/// <summary>
|
|
|
/// 选择人分组
|
|
|
/// </summary>
|
|
|
public const string SelectorP1 = "SelectorP1";
|
|
|
/// <summary>
|
|
|
/// 操作员
|
|
|
/// </summary>
|
|
|
public const string SelectorP2 = "SelectorP2";
|
|
|
/// <summary>
|
|
|
/// 默认选择的数据源
|
|
|
/// </summary>
|
|
|
public const string SelectorP3 = "SelectorP3";
|
|
|
/// <summary>
|
|
|
/// 强制选择的数据源
|
|
|
/// </summary>
|
|
|
public const string SelectorP4 = "SelectorP4";
|
|
|
/// <summary>
|
|
|
/// 数据显示方式(表格与树)
|
|
|
/// </summary>
|
|
|
public const string FK_SQLTemplate = "FK_SQLTemplate";
|
|
|
/// <summary>
|
|
|
/// 是否自动装载上一笔加载的数据
|
|
|
/// </summary>
|
|
|
public const string IsAutoLoadEmps = "IsAutoLoadEmps";
|
|
|
/// <summary>
|
|
|
/// 是否单项选择?
|
|
|
/// </summary>
|
|
|
public const string IsSimpleSelector = "IsSimpleSelector";
|
|
|
/// <summary>
|
|
|
/// 是否启用部门搜索范围限定
|
|
|
/// </summary>
|
|
|
public const string IsEnableDeptRange = "IsEnableDeptRange";
|
|
|
/// <summary>
|
|
|
/// 是否启用角色搜索范围限定
|
|
|
/// </summary>
|
|
|
public const string IsEnableStaRange = "IsEnableStaRange";
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 选择器
|
|
|
/// </summary>
|
|
|
public class Selector : Entity
|
|
|
{
|
|
|
#region 基本属性
|
|
|
public override string PK
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return "NodeID";
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 选择模式
|
|
|
/// </summary>
|
|
|
public SelectorModel SelectorModel
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return (SelectorModel)this.GetValIntByKey(SelectorAttr.SelectorModel);
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
this.SetValByKey(SelectorAttr.SelectorModel, (int)value);
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 分组数据源
|
|
|
/// </summary>
|
|
|
public string SelectorP1
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
string s = this.GetValStringByKey(SelectorAttr.SelectorP1);
|
|
|
s = s.Replace("~", "'");
|
|
|
return s;
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
this.SetValByKey(SelectorAttr.SelectorP1, value);
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 实体数据源
|
|
|
/// </summary>
|
|
|
public string SelectorP2
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
string s = this.GetValStringByKey(SelectorAttr.SelectorP2);
|
|
|
s = s.Replace("~", "'");
|
|
|
return s;
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
this.SetValByKey(SelectorAttr.SelectorP2, value);
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 默认选择数据源
|
|
|
/// </summary>
|
|
|
public string SelectorP3
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
string s = this.GetValStringByKey(SelectorAttr.SelectorP3);
|
|
|
s = s.Replace("~", "'");
|
|
|
return s;
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
this.SetValByKey(SelectorAttr.SelectorP3, value);
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 强制选择数据源
|
|
|
/// </summary>
|
|
|
public string SelectorP4
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
string s = this.GetValStringByKey(SelectorAttr.SelectorP4);
|
|
|
s = s.Replace("~", "'");
|
|
|
return s;
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
this.SetValByKey(SelectorAttr.SelectorP3, value);
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 是否自动装载上一笔加载的数据
|
|
|
/// </summary>
|
|
|
public bool IsAutoLoadEmps
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return this.GetValBooleanByKey(SelectorAttr.IsAutoLoadEmps);
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
this.SetValByKey(SelectorAttr.IsAutoLoadEmps, value);
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 是否单选?
|
|
|
/// </summary>
|
|
|
public bool IsSimpleSelector
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return this.GetValBooleanByKey(SelectorAttr.IsSimpleSelector);
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
this.SetValByKey(SelectorAttr.IsSimpleSelector, value);
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 是否启用部门搜索范围限定
|
|
|
/// </summary>
|
|
|
public bool IsEnableDeptRange
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return this.GetValBooleanByKey(SelectorAttr.IsEnableDeptRange);
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
this.SetValByKey(SelectorAttr.IsEnableDeptRange, value);
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 是否启用角色搜索范围限定
|
|
|
/// </summary>
|
|
|
public bool IsEnableStaRange
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return this.GetValBooleanByKey(SelectorAttr.IsEnableStaRange);
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
this.SetValByKey(SelectorAttr.IsEnableStaRange, value);
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 节点ID
|
|
|
/// </summary>
|
|
|
public int NodeID
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return this.GetValIntByKey(SelectorAttr.NodeID);
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
this.SetValByKey(SelectorAttr.NodeID, value);
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// UI界面上的访问控制
|
|
|
/// </summary>
|
|
|
public override UAC HisUAC
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
UAC uac = new UAC();
|
|
|
uac.IsDelete = false;
|
|
|
uac.IsInsert = false;
|
|
|
if (BP.Web.WebUser.No.Equals("admin") == true)
|
|
|
{
|
|
|
uac.IsUpdate = true;
|
|
|
uac.IsView = true;
|
|
|
}
|
|
|
|
|
|
uac.IsUpdate = true;
|
|
|
|
|
|
return uac;
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 构造方法
|
|
|
/// <summary>
|
|
|
/// 接受人选择器
|
|
|
/// </summary>
|
|
|
public Selector() { }
|
|
|
/// <summary>
|
|
|
/// 接受人选择器
|
|
|
/// </summary>
|
|
|
/// <param name="nodeid"></param>
|
|
|
public Selector(int nodeid)
|
|
|
{
|
|
|
this.NodeID = nodeid;
|
|
|
this.Retrieve();
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 重写基类方法
|
|
|
/// </summary>
|
|
|
public override Map EnMap
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
if (this._enMap != null)
|
|
|
return this._enMap;
|
|
|
|
|
|
#region 字段.
|
|
|
Map map = new Map("WF_Node", "选择器");
|
|
|
|
|
|
map.DepositaryOfEntity = Depositary.Application;
|
|
|
|
|
|
map.AddTBIntPK(SelectorAttr.NodeID, 0, "NodeID", true, true);
|
|
|
map.AddTBString(SelectorAttr.Name, null, "节点名称", true, true, 0, 100, 100);
|
|
|
|
|
|
map.AddTBInt(SelectorAttr.SelectorModel, 0, "显示方式", true, true);
|
|
|
//map.AddDDLSysEnum(SelectorAttr.SelectorModel, 5, "显示方式", true, true, SelectorAttr.SelectorModel,
|
|
|
// "@0=按角色@1=按部门@2=按人员@3=按SQL@4=按SQL模版计算@5=使用通用人员选择器@6=部门与角色的交集@7=自定义Url@8=使用通用部门角色人员选择器@9=按角色智能计算(操作员所在部门)");
|
|
|
|
|
|
map.AddDDLSQL(SelectorAttr.FK_SQLTemplate, null, "SQL模版",
|
|
|
"SELECT No,Name FROM WF_SQLTemplate WHERE SQLType=5", true);
|
|
|
|
|
|
map.AddBoolean(SelectorAttr.IsAutoLoadEmps, true, "是否自动加载上一次选择的人员?", true, true);
|
|
|
map.AddBoolean(SelectorAttr.IsSimpleSelector, false, "是否单项选择(只能选择一个人)?", true, true);
|
|
|
map.AddBoolean(SelectorAttr.IsEnableDeptRange, false, "是否启用部门搜索范围限定(对使用通用人员选择器有效)?", true, true, true);
|
|
|
map.AddBoolean(SelectorAttr.IsEnableStaRange, false, "是否启用角色搜索范围限定(对使用通用人员选择器有效)?", true, true, true);
|
|
|
|
|
|
|
|
|
// map.AddDDLSysEnum(SelectorAttr.IsMinuesAutoLoadEmps, 5, "接收人选择方式", true, true, SelectorAttr.SelectorModel,
|
|
|
// "@0=按角色@1=按部门@2=按人员@3=按SQL@4=按SQL模版计算@5=使用通用人员选择器@6=部门与角色的交集@7=自定义Url");
|
|
|
|
|
|
map.AddTBStringDoc(SelectorAttr.SelectorP1, null, "分组参数:可以为空,比如:SELECT No,Name,ParentNo FROM Port_Dept", true, false, 0, 300, 3);
|
|
|
map.AddTBStringDoc(SelectorAttr.SelectorP2, null, "操作员数据源:比如:SELECT No,Name,FK_Dept FROM Port_Emp", true, false, 0, 300, 3);
|
|
|
|
|
|
map.AddTBStringDoc(SelectorAttr.SelectorP3, null, "默认选择的数据源:比如:SELECT FK_Emp FROM WF_GenerWorkerList WHERE FK_Node=102 AND WorkID=@WorkID", true, false, 0, 300, 3);
|
|
|
map.AddTBStringDoc(SelectorAttr.SelectorP4, null, "强制选择的数据源:比如:SELECT FK_Emp FROM WF_GenerWorkerList WHERE FK_Node=102 AND WorkID=@WorkID", true, false, 0, 300, 3);
|
|
|
map.AddTBString(NodeAttr.DeliveryParas, null, "访问规则设置", true, false, 0, 300, 10);
|
|
|
#endregion
|
|
|
|
|
|
#region 对应关系
|
|
|
//平铺模式.
|
|
|
map.AttrsOfOneVSM.AddGroupPanelModel(new BP.WF.Template.NodeStations(), new BP.Port.Stations(),
|
|
|
BP.WF.Template.NodeStationAttr.FK_Node,
|
|
|
BP.WF.Template.NodeStationAttr.FK_Station, "绑定角色(平铺)", BP.Port.StationAttr.FK_StationType, "Name", "No");
|
|
|
|
|
|
map.AttrsOfOneVSM.AddGroupListModel(new BP.WF.Template.NodeStations(), new BP.Port.Stations(),
|
|
|
BP.WF.Template.NodeStationAttr.FK_Node,
|
|
|
BP.WF.Template.NodeStationAttr.FK_Station, "绑定角色(树)", BP.Port.StationAttr.FK_StationType, "Name", "No");
|
|
|
|
|
|
//节点绑定部门. 节点绑定部门.
|
|
|
map.AttrsOfOneVSM.AddBranches(new BP.WF.Template.NodeDepts(), new BP.Port.Depts(),
|
|
|
BP.WF.Template.NodeDeptAttr.FK_Node,
|
|
|
BP.WF.Template.NodeDeptAttr.FK_Dept, "绑定部门", BP.Port.EmpAttr.Name, BP.Port.EmpAttr.No, "@WebUser.FK_Dept");
|
|
|
|
|
|
//节点绑定人员. 使用树杆与叶子的模式绑定.
|
|
|
map.AttrsOfOneVSM.AddBranchesAndLeaf(new BP.WF.Template.NodeEmps(), new BP.Port.Emps(),
|
|
|
BP.WF.Template.NodeEmpAttr.FK_Node,
|
|
|
BP.WF.Template.NodeEmpAttr.FK_Emp, "绑定接受人", BP.Port.EmpAttr.FK_Dept, BP.Port.EmpAttr.Name, BP.Port.EmpAttr.No, "@WebUser.FK_Dept");
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
this._enMap = map;
|
|
|
return this._enMap;
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
/// <summary>
|
|
|
/// 产生数据.
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
public DataSet GenerDataSet(int nodeid, Entity en)
|
|
|
{
|
|
|
DataSet ds = null;
|
|
|
switch (this.SelectorModel)
|
|
|
{
|
|
|
case SelectorModel.Dept:
|
|
|
ds = ByDept(nodeid, en);
|
|
|
break;
|
|
|
case SelectorModel.TeamOrgOnly:
|
|
|
ds = ByTeam(nodeid, en, this.SelectorModel);
|
|
|
break;
|
|
|
case SelectorModel.TeamOnly:
|
|
|
ds = ByTeam(nodeid, en, this.SelectorModel);
|
|
|
break;
|
|
|
case SelectorModel.TeamDeptOnly:
|
|
|
ds = ByTeam(nodeid, en, this.SelectorModel);
|
|
|
break;
|
|
|
case SelectorModel.Emp:
|
|
|
ds = ByEmp(nodeid);
|
|
|
break;
|
|
|
case SelectorModel.Station:
|
|
|
ds = ByStation(nodeid, en);
|
|
|
break;
|
|
|
case SelectorModel.ByStationAI:
|
|
|
ds = ByStationAI(nodeid, en);
|
|
|
|
|
|
break;
|
|
|
case SelectorModel.DeptAndStation:
|
|
|
ds = DeptAndStation(nodeid);
|
|
|
break;
|
|
|
case SelectorModel.SQL:
|
|
|
ds = BySQL(nodeid, en);
|
|
|
break;
|
|
|
case SelectorModel.SQLTemplate:
|
|
|
ds = SQLTemplate(nodeid, en);
|
|
|
break;
|
|
|
case SelectorModel.GenerUserSelecter:
|
|
|
ds = ByGenerUserSelecter();
|
|
|
break;
|
|
|
case SelectorModel.AccepterOfDeptStationOfCurrentOper: //按角色智能计算.
|
|
|
ds = AccepterOfDeptStationOfCurrentOper(nodeid, en);
|
|
|
break;
|
|
|
case SelectorModel.ByWebAPI:
|
|
|
ds = ByWebAPI(en);
|
|
|
break;
|
|
|
case SelectorModel.ByMyDeptEmps:
|
|
|
ds = ByMyDeptEmps();
|
|
|
break;
|
|
|
default:
|
|
|
throw new Exception("@错误:没有判断的选择类型:" + this.SelectorModel);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (BP.Difference.SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
|
|
|
{
|
|
|
foreach (DataTable dt in ds.Tables)
|
|
|
{
|
|
|
for (int i = 0; i < dt.Columns.Count; i++)
|
|
|
{
|
|
|
if (dt.Columns[i].ColumnName.ToUpper() == "NO")
|
|
|
dt.Columns[i].ColumnName = "No";
|
|
|
|
|
|
if (dt.Columns[i].ColumnName.ToUpper() == "NAME")
|
|
|
dt.Columns[i].ColumnName = "Name";
|
|
|
|
|
|
if (dt.Columns[i].ColumnName.ToUpper() == "PARENTNO")
|
|
|
dt.Columns[i].ColumnName = "ParentNo";
|
|
|
|
|
|
if (dt.Columns[i].ColumnName.ToUpper() == "FK_DEPT")
|
|
|
dt.Columns[i].ColumnName = "FK_Dept";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
ds.Tables.Add(this.ToDataTableField("Selector"));
|
|
|
|
|
|
return ds;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 通用
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
private DataSet ByGenerUserSelecter()
|
|
|
{
|
|
|
DataSet ds = new DataSet();
|
|
|
|
|
|
////排序.
|
|
|
//string orderByDept = "";
|
|
|
//if (DBAccess.IsExitsTableCol("Port_Dept", "Idx"))
|
|
|
// orderByDept = " ORDER BY Port_Dept.Idx";
|
|
|
|
|
|
//string orderByEmp = "";
|
|
|
//if (DBAccess.IsExitsTableCol("Port_Emp", "Idx"))
|
|
|
// orderByDept = " ORDER BY Port_Emp.FK_Dept, Port_Emp.Idx";
|
|
|
|
|
|
//部门
|
|
|
string sql = "SELECT distinct No,Name, ParentNo FROM Port_Dept ";
|
|
|
DataTable dt = DBAccess.RunSQLReturnTable(sql);
|
|
|
dt.TableName = "Depts";
|
|
|
ds.Tables.Add(dt);
|
|
|
|
|
|
//人员.
|
|
|
sql = "SELECT No, Name, FK_Dept FROM Port_Emp ";
|
|
|
DataTable dtEmp = DBAccess.RunSQLReturnTable(sql);
|
|
|
dtEmp.TableName = "Emps";
|
|
|
ds.Tables.Add(dtEmp);
|
|
|
|
|
|
return ds;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 按照模版
|
|
|
/// </summary>
|
|
|
/// <param name="nodeID">节点ID</param>
|
|
|
/// <param name="en"></param>
|
|
|
/// <returns></returns>
|
|
|
private DataSet SQLTemplate(int nodeID, Entity en)
|
|
|
{
|
|
|
//设置他的模版.
|
|
|
//Node nd = new Node(nodeID);
|
|
|
|
|
|
SQLTemplate sql = new SQLTemplate(this.SelectorP1);
|
|
|
this.SelectorP2 = sql.Docs;
|
|
|
|
|
|
return BySQL(nodeID, en);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 按照SQL计算.
|
|
|
/// </summary>
|
|
|
/// <param name="nodeID">节点ID</param>
|
|
|
/// <returns>返回值</returns>
|
|
|
private DataSet BySQL(int nodeID, Entity en)
|
|
|
{
|
|
|
// 定义数据容器.
|
|
|
DataSet ds = new DataSet();
|
|
|
|
|
|
//求部门.
|
|
|
string sqlGroup = this.SelectorP1; // @sly
|
|
|
if (DataType.IsNullOrEmpty(sqlGroup) == false && sqlGroup.Length > 6)
|
|
|
{
|
|
|
sqlGroup = BP.WF.Glo.DealExp(sqlGroup, en, null); //@祝梦娟
|
|
|
DataTable dt = DBAccess.RunSQLReturnTable(sqlGroup);
|
|
|
dt.TableName = "Depts";
|
|
|
//转换大小写
|
|
|
foreach (DataColumn col in dt.Columns)
|
|
|
{
|
|
|
string colName = col.ColumnName.ToLower();
|
|
|
switch (colName)
|
|
|
{
|
|
|
case "no":
|
|
|
col.ColumnName = "No";
|
|
|
break;
|
|
|
case "name":
|
|
|
col.ColumnName = "Name";
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
ds.Tables.Add(dt);
|
|
|
}
|
|
|
|
|
|
//求人员范围.
|
|
|
string sqlDB = this.SelectorP2;
|
|
|
sqlDB = BP.WF.Glo.DealExp(sqlDB, en, null); //@祝梦娟
|
|
|
|
|
|
DataTable dtEmp = DBAccess.RunSQLReturnTable(sqlDB);
|
|
|
dtEmp.TableName = "Emps";
|
|
|
//转换大小写
|
|
|
foreach (DataColumn col in dtEmp.Columns)
|
|
|
{
|
|
|
string colName = col.ColumnName.ToLower();
|
|
|
switch (colName)
|
|
|
{
|
|
|
case "no":
|
|
|
col.ColumnName = "No";
|
|
|
break;
|
|
|
case "name":
|
|
|
col.ColumnName = "Name";
|
|
|
break;
|
|
|
case "fk_dept":
|
|
|
col.ColumnName = "FK_Dept";
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
ds.Tables.Add(dtEmp);
|
|
|
|
|
|
//求默认选择的数据.
|
|
|
if (this.SelectorP3 != "")
|
|
|
{
|
|
|
sqlDB = this.SelectorP3;
|
|
|
sqlDB = BP.WF.Glo.DealExp(sqlDB, en, null); //@祝梦娟
|
|
|
|
|
|
DataTable dtDef = DBAccess.RunSQLReturnTable(sqlDB);
|
|
|
dtDef.TableName = "DefaultSelected";
|
|
|
foreach (DataColumn col in dtDef.Columns)
|
|
|
{
|
|
|
string colName = col.ColumnName.ToLower();
|
|
|
switch (colName)
|
|
|
{
|
|
|
case "no":
|
|
|
col.ColumnName = "No";
|
|
|
break;
|
|
|
case "name":
|
|
|
col.ColumnName = "Name";
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
ds.Tables.Add(dtDef);
|
|
|
}
|
|
|
|
|
|
|
|
|
//求强制选择的数据源.
|
|
|
if (this.SelectorP4 != "")
|
|
|
{
|
|
|
sqlDB = this.SelectorP4;
|
|
|
|
|
|
sqlDB = sqlDB.Replace("@WebUser.No", WebUser.No);
|
|
|
sqlDB = sqlDB.Replace("@WebUser.Name", WebUser.Name);
|
|
|
sqlDB = sqlDB.Replace("@WebUser.FK_Dept", WebUser.FK_Dept);
|
|
|
|
|
|
sqlDB = sqlDB.Replace("@WorkID", en.GetValStringByKey("OID"));
|
|
|
sqlDB = sqlDB.Replace("@OID", en.GetValStringByKey("OID"));
|
|
|
|
|
|
if (sqlDB.Contains("@"))
|
|
|
sqlDB = BP.WF.Glo.DealExp(sqlDB, en, null);
|
|
|
|
|
|
DataTable dtForce = DBAccess.RunSQLReturnTable(sqlDB);
|
|
|
foreach (DataColumn col in dtForce.Columns)
|
|
|
{
|
|
|
string colName = col.ColumnName.ToLower();
|
|
|
switch (colName)
|
|
|
{
|
|
|
case "no":
|
|
|
col.ColumnName = "No";
|
|
|
break;
|
|
|
case "name":
|
|
|
col.ColumnName = "Name";
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
dtForce.TableName = "ForceSelected";
|
|
|
ds.Tables.Add(dtForce);
|
|
|
}
|
|
|
|
|
|
return ds;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 按照部门获取部门人员树.
|
|
|
/// </summary>
|
|
|
/// <param name="nodeID">节点ID</param>
|
|
|
/// <returns>返回数据源dataset</returns>
|
|
|
private DataSet ByDept(int nodeID, Entity en)
|
|
|
{
|
|
|
// 定义数据容器.
|
|
|
DataSet ds = new DataSet();
|
|
|
string sql = null;
|
|
|
DataTable dt = null;
|
|
|
DataTable dtEmp = null;
|
|
|
|
|
|
Node nd = new Node(nodeID);
|
|
|
if (nd.HisDeliveryWay == DeliveryWay.BySelectedForPrj)
|
|
|
{
|
|
|
//部门.
|
|
|
sql = "SELECT distinct a.No,a.Name, a.ParentNo FROM Port_Dept a, WF_NodeDept b, WF_PrjEmp C,Port_DeptEmp D WHERE A.No=B.FK_Dept AND B.FK_Node=" + nodeID + " AND C.FK_Prj='" + en.GetValStrByKey("PrjNo") + "' ORDER BY a.Idx ";
|
|
|
sql += " AND C.FK_Emp=D.FK_Emp ";
|
|
|
|
|
|
|
|
|
dt = DBAccess.RunSQLReturnTable(sql);
|
|
|
dt.TableName = "Depts";
|
|
|
ds.Tables.Add(dt);
|
|
|
|
|
|
//人员.
|
|
|
sql = "SELECT distinct a." + BP.Sys.Base.Glo.UserNo + ", a.Name, a.FK_Dept FROM Port_Emp a, WF_NodeDept b, WF_PrjEmp C WHERE a.FK_Dept=b.FK_Dept AND A." + BP.Sys.Base.Glo.UserNoWhitOutAS + "=C.FK_Emp AND B.FK_Node=" + nodeID + " AND C.FK_Prj='" + en.GetValStrByKey("PrjNo") + "' ORDER BY a.Idx ";
|
|
|
dtEmp = DBAccess.RunSQLReturnTable(sql);
|
|
|
ds.Tables.Add(dtEmp);
|
|
|
dtEmp.TableName = "Emps";
|
|
|
return ds;
|
|
|
}
|
|
|
|
|
|
|
|
|
//部门.
|
|
|
sql = "SELECT distinct a.No,a.Name, a.ParentNo,a.Idx FROM Port_Dept a,WF_NodeDept b WHERE a.No=b.FK_Dept AND B.FK_Node=" + nodeID + " ORDER BY a.Idx ";
|
|
|
dt = DBAccess.RunSQLReturnTable(sql);
|
|
|
dt.TableName = "Depts";
|
|
|
ds.Tables.Add(dt);
|
|
|
|
|
|
//人员.
|
|
|
sql = "SELECT distinct a." + BP.Sys.Base.Glo.UserNo + ", a.Name, d.FK_Dept ,a.Idx FROM Port_Emp a, WF_NodeDept b,Port_DeptEmp d WHERE d.FK_Dept=b.FK_Dept AND a." + BP.Sys.Base.Glo.UserNoWhitOutAS + "=d.FK_Emp AND B.FK_Node=" + nodeID + " ORDER BY a.Idx";
|
|
|
dtEmp = DBAccess.RunSQLReturnTable(sql);
|
|
|
ds.Tables.Add(dtEmp);
|
|
|
dtEmp.TableName = "Emps";
|
|
|
return ds;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 按照Emp获取部门人员树.
|
|
|
/// </summary>
|
|
|
/// <param name="nodeID">节点ID</param>
|
|
|
/// <returns>返回数据源dataset</returns>
|
|
|
private DataSet ByEmp(int nodeID)
|
|
|
{
|
|
|
// 定义数据容器.
|
|
|
DataSet ds = new DataSet();
|
|
|
|
|
|
|
|
|
//部门.
|
|
|
string sql = "SELECT distinct a.No,a.Name, a.ParentNo FROM Port_Dept a, WF_NodeEmp b, Port_Emp c WHERE b.FK_Emp=c." + BP.Sys.Base.Glo.UserNoWhitOutAS + " AND a.No=c.FK_Dept AND B.FK_Node=" + nodeID + " ";
|
|
|
DataTable dt = DBAccess.RunSQLReturnTable(sql);
|
|
|
dt.TableName = "Depts";
|
|
|
ds.Tables.Add(dt);
|
|
|
|
|
|
//人员.
|
|
|
sql = "SELECT distinct a." + BP.Sys.Base.Glo.UserNo + ",a.Name, a.FK_Dept FROM Port_Emp a, WF_NodeEmp b WHERE a." + BP.Sys.Base.Glo.UserNoWhitOutAS + "=b.FK_Emp AND b.FK_Node=" + nodeID;
|
|
|
|
|
|
DataTable dtEmp = DBAccess.RunSQLReturnTable(sql);
|
|
|
dtEmp.TableName = "Emps";
|
|
|
ds.Tables.Add(dtEmp);
|
|
|
return ds;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 按照Emp获取部门人员树.
|
|
|
/// </summary>
|
|
|
/// <param name="nodeID">节点ID</param>
|
|
|
/// <returns>返回数据源dataset</returns>
|
|
|
private DataSet ByMyDeptEmps()
|
|
|
{
|
|
|
// 定义数据容器.
|
|
|
DataSet ds = new DataSet();
|
|
|
|
|
|
|
|
|
//部门.
|
|
|
string sql = "SELECT No,Name FROM Port_Dept WHERE No='" + WebUser.FK_Dept + "' ";
|
|
|
DataTable dt = DBAccess.RunSQLReturnTable(sql);
|
|
|
dt.TableName = "Depts";
|
|
|
ds.Tables.Add(dt);
|
|
|
|
|
|
//人员.
|
|
|
sql = " SELECT No,Name,FK_Dept FROM Port_Emp WHERE FK_Dept='" + WebUser.FK_Dept + "'";
|
|
|
|
|
|
DataTable dtEmp = DBAccess.RunSQLReturnTable(sql);
|
|
|
dtEmp.TableName = "Emps";
|
|
|
ds.Tables.Add(dtEmp);
|
|
|
return ds;
|
|
|
}
|
|
|
/// <summary>
|
|
|
///
|
|
|
/// </summary>
|
|
|
/// <param name="nodeID"></param>
|
|
|
/// <param name="en"></param>
|
|
|
/// <returns></returns>
|
|
|
private DataSet AccepterOfDeptStationOfCurrentOper(int nodeID, Entity en)
|
|
|
{
|
|
|
// 定义数据容器.
|
|
|
DataSet ds = new DataSet();
|
|
|
|
|
|
//部门.
|
|
|
string sql = "";
|
|
|
sql = "SELECT d.No,d.Name,d.ParentNo FROM Port_DeptEmp de, Port_Dept as d WHERE de.FK_Dept = d.No and de.FK_Emp = '" + BP.Web.WebUser.No + "'";
|
|
|
DataTable dt = DBAccess.RunSQLReturnTable(sql);
|
|
|
|
|
|
//人员.
|
|
|
if (BP.Difference.SystemConfig.AppCenterDBType == DBType.Oracle || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR3 || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR6)
|
|
|
sql = "SELECT * FROM (SELECT distinct a.No,a.Name, a.FK_Dept FROM Port_Emp a, WF_NodeStation b, Port_DeptEmpStation c WHERE a.No=c.FK_Emp AND B.FK_Station=C.FK_Station AND C.FK_Dept='" + WebUser.FK_Dept + "' AND b.FK_Node=" + nodeID + ") ORDER BY A.Idx ";
|
|
|
else
|
|
|
sql = "SELECT distinct a." + BP.Sys.Base.Glo.UserNo + ",a.Name, a.FK_Dept FROM Port_Emp a, WF_NodeStation b, Port_DeptEmpStation c WHERE a." + BP.Sys.Base.Glo.UserNo + "=c.FK_Emp AND C.FK_Dept='" + WebUser.FK_Dept + "' AND B.FK_Station=C.FK_Station AND b.FK_Node=" + nodeID + " ORDER BY A.Idx";
|
|
|
|
|
|
DataTable dtEmp = DBAccess.RunSQLReturnTable(sql);
|
|
|
if (dtEmp.Rows.Count > 0)
|
|
|
{
|
|
|
dt.TableName = "Depts";
|
|
|
ds.Tables.Add(dt);
|
|
|
|
|
|
dtEmp.TableName = "Emps";
|
|
|
ds.Tables.Add(dtEmp);
|
|
|
}
|
|
|
else //如果没人,就查询父级
|
|
|
{
|
|
|
//查询当前节点的workdID
|
|
|
long workID = long.Parse(en.GetValStringByKey("OID"));
|
|
|
BP.WF.WorkNode node = new WorkNode(workID, nodeID);
|
|
|
|
|
|
sql = " SELECT No,Name, ParentNo FROM Port_Dept WHERE no in ( SELECT ParentNo FROM Port_Dept WHERE No IN "
|
|
|
+ "( SELECT FK_Dept FROM WF_GenerWorkerlist WHERE WorkID ='" + workID + "' ))";
|
|
|
dt = DBAccess.RunSQLReturnTable(sql);
|
|
|
dt.TableName = "Depts";
|
|
|
ds.Tables.Add(dt);
|
|
|
|
|
|
// 如果当前的节点不是开始节点, 从轨迹里面查询。
|
|
|
sql = "SELECT DISTINCT b." + BP.Sys.Base.Glo.UserNo + ",b.Name,b.FK_Dept FROM Port_DeptEmpStation a,Port_Emp b WHERE FK_Station IN "
|
|
|
+ "( SELECT FK_Station FROM WF_NodeStation WHERE FK_Node=" + nodeID + ") "
|
|
|
+ "AND a.FK_Dept IN (SELECT ParentNo FROM Port_Dept WHERE No IN (SELECT FK_DEPT FROM WF_GenerWorkerlist WHERE WorkID=" + workID + "))"
|
|
|
+ " AND a.FK_Emp = b." + BP.Sys.Base.Glo.UserNo + " ";
|
|
|
sql += " ORDER BY b.No ";
|
|
|
|
|
|
dtEmp = DBAccess.RunSQLReturnTable(sql);
|
|
|
dtEmp.TableName = "Emps";
|
|
|
ds.Tables.Add(dtEmp);
|
|
|
}
|
|
|
return ds;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 部门于角色的交集 @zkr.
|
|
|
/// </summary>
|
|
|
/// <param name="nodeID"></param>
|
|
|
/// <returns></returns>
|
|
|
private DataSet DeptAndStation(int nodeID)
|
|
|
{
|
|
|
// 定义数据容器.
|
|
|
DataSet ds = new DataSet();
|
|
|
|
|
|
//部门.
|
|
|
string sql = "";
|
|
|
|
|
|
sql = "SELECT B.No,B.Name,B.ParentNo FROM WF_NodeDept A, Port_Dept B WHERE A.FK_Dept=B.No AND FK_Node=" + nodeID;
|
|
|
DataTable dt = DBAccess.RunSQLReturnTable(sql);
|
|
|
dt.TableName = "Depts";
|
|
|
ds.Tables.Add(dt);
|
|
|
|
|
|
//@zkr.
|
|
|
sql = "SELECT distinct a." + BP.Sys.Base.Glo.UserNo + ",a.Name, a.FK_Dept,a.Idx FROM Port_Emp A, WF_NodeStation b, Port_DeptEmpStation c,WF_NodeDept D WHERE a." + BP.Sys.Base.Glo.UserNo + "=c.FK_Emp AND B.FK_Station=C.FK_Station AND b.FK_Node=" + nodeID + " AND D.FK_Dept=A.FK_Dept AND D.FK_Node=" + nodeID + " ORDER BY A.Idx ";
|
|
|
DataTable dtEmp = DBAccess.RunSQLReturnTable(sql);
|
|
|
dtEmp.TableName = "Emps";
|
|
|
ds.Tables.Add(dtEmp);
|
|
|
return ds;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 按用户组计算
|
|
|
/// </summary>
|
|
|
/// <param name="nodeID"></param>
|
|
|
/// <param name="en"></param>
|
|
|
/// <returns></returns>
|
|
|
private DataSet ByTeam(int nodeID, Entity en, SelectorModel sm)
|
|
|
{
|
|
|
// 定义数据容器.
|
|
|
DataSet ds = new DataSet();
|
|
|
string sql = null;
|
|
|
DataTable dt = null;
|
|
|
DataTable dtEmp = null;
|
|
|
Node nd = new Node(nodeID);
|
|
|
if (sm == SelectorModel.TeamDeptOnly)
|
|
|
sql = "SELECT No,Name FROM Port_Dept WHERE No='" + WebUser.FK_Dept + "'";
|
|
|
if (sm == SelectorModel.TeamOnly)
|
|
|
sql = "SELECT DISTINCT a.No, a.Name, a.ParentNo,a.Idx FROM Port_Dept a, WF_NodeTeam b, Port_TeamEmp c, Port_Emp d WHERE a.No=d.FK_Dept AND b.FK_Team=c.FK_Team AND C.FK_Emp=D.No AND B.FK_Node=" + nodeID + " ORDER BY A.No,A.Idx";
|
|
|
if (sm == SelectorModel.TeamOrgOnly)
|
|
|
sql = "SELECT DISTINCT a.No, a.Name, a.ParentNo,a.Idx FROM Port_Dept a, WF_NodeTeam b, Port_TeamEmp c, Port_Emp d WHERE a.No=d.FK_Dept AND b.FK_Team=c.FK_Team AND C.FK_Emp=D.No AND B.FK_Node=" + nodeID + " AND D.OrgNo='" + WebUser.OrgNo + "' ORDER BY A.No,A.Idx";
|
|
|
|
|
|
dt = DBAccess.RunSQLReturnTable(sql);
|
|
|
dt.TableName = "Depts";
|
|
|
ds.Tables.Add(dt);
|
|
|
|
|
|
//人员.
|
|
|
if (BP.Difference.SystemConfig.AppCenterDBType == DBType.Oracle ||BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR3 || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR6
|
|
|
|| BP.Difference.SystemConfig.AppCenterDBType == DBType.PostgreSQL || BP.Difference.SystemConfig.AppCenterDBType == DBType.HGDB || DBAccess.AppCenterDBType == DBType.UX)
|
|
|
{
|
|
|
if (sm == SelectorModel.TeamDeptOnly)
|
|
|
sql = "SELECT * FROM (SELECT DISTINCT a.No,a.Name, a.FK_Dept,a.Idx FROM Port_Emp a, WF_NodeTeam b, Port_TeamEmp c WHERE a.No=c.FK_Emp AND B.FK_Team=C.FK_Team AND B.FK_Node=" + nodeID + " AND A.FK_Dept='" + WebUser.FK_Dept + "') ORDER BY FK_Dept,Idx,No";
|
|
|
if (sm == SelectorModel.TeamOrgOnly)
|
|
|
sql = "SELECT * FROM (SELECT DISTINCT a.No,a.Name, a.FK_Dept,a.Idx FROM Port_Emp a, WF_NodeTeam b, Port_TeamEmp c WHERE a.No=c.FK_Emp AND B.FK_Team=C.FK_Team AND B.FK_Node=" + nodeID + " AND A.OrgNo='" + WebUser.OrgNo + "') ORDER BY FK_Dept,Idx,No";
|
|
|
if (sm == SelectorModel.TeamOnly)
|
|
|
sql = "SELECT * FROM (SELECT DISTINCT a.No,a.Name, a.FK_Dept,a.Idx FROM Port_Emp a, WF_NodeTeam b, Port_TeamEmp c WHERE a.No=c.FK_Emp AND B.FK_Team=C.FK_Team AND B.FK_Node=" + nodeID + " ) ORDER BY FK_Dept,Idx,No";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (sm == SelectorModel.TeamDeptOnly)
|
|
|
sql = "SELECT DISTINCT a." + BP.Sys.Base.Glo.UserNo + ",a.Name, a.FK_Dept,a.Idx FROM Port_Emp A, WF_NodeTeam B, Port_TeamEmp C WHERE a." + BP.Sys.Base.Glo.UserNoWhitOutAS + "=c.FK_Emp AND B.FK_Team=C.FK_Team AND B.FK_Node=" + nodeID + " AND A.FK_Dept='" + WebUser.FK_Dept + "' ORDER BY A.Idx";
|
|
|
if (sm == SelectorModel.TeamOrgOnly)
|
|
|
sql = "SELECT DISTINCT a." + BP.Sys.Base.Glo.UserNo + ",a.Name, a.FK_Dept,a.Idx FROM Port_Emp A, WF_NodeTeam B, Port_TeamEmp C WHERE a." + BP.Sys.Base.Glo.UserNoWhitOutAS + "=c.FK_Emp AND B.FK_Team=C.FK_Team AND B.FK_Node=" + nodeID + " AND A.OrgNo='" + WebUser.OrgNo + "' ORDER BY A.Idx";
|
|
|
if (sm == SelectorModel.TeamOnly)
|
|
|
sql = "SELECT DISTINCT a." + BP.Sys.Base.Glo.UserNo + ",a.Name, a.FK_Dept,a.Idx FROM Port_Emp A, WF_NodeTeam B, Port_TeamEmp C WHERE a." + BP.Sys.Base.Glo.UserNoWhitOutAS + "=c.FK_Emp AND B.FK_Team=C.FK_Team AND B.FK_Node=" + nodeID + " ORDER BY A.Idx";
|
|
|
}
|
|
|
|
|
|
dtEmp = DBAccess.RunSQLReturnTable(sql);
|
|
|
dtEmp.TableName = "Emps";
|
|
|
ds.Tables.Add(dtEmp);
|
|
|
return ds;
|
|
|
}
|
|
|
private DataSet ByGroupOnly(int nodeID, Entity en)
|
|
|
{
|
|
|
// 定义数据容器.
|
|
|
DataSet ds = new DataSet();
|
|
|
string sql = null;
|
|
|
DataTable dt = null;
|
|
|
DataTable dtEmp = null;
|
|
|
|
|
|
Node nd = new Node(nodeID);
|
|
|
|
|
|
//部门.
|
|
|
sql = "SELECT distinct a.No, a.Name, a.ParentNo,a.Idx FROM Port_Dept a, WF_NodeTeam b, Port_TeamEmp c, Port_Emp d WHERE a.No=d.FK_Dept AND b.FK_Group=c.FK_Group AND C.FK_Emp=D.No AND B.FK_Node=" + nodeID + " ORDER BY A.No,A.Idx";
|
|
|
dt = DBAccess.RunSQLReturnTable(sql);
|
|
|
dt.TableName = "Depts";
|
|
|
ds.Tables.Add(dt);
|
|
|
|
|
|
//人员.
|
|
|
if (BP.Difference.SystemConfig.AppCenterDBType == DBType.Oracle || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR3 || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR6 || BP.Difference.SystemConfig.AppCenterDBType == DBType.PostgreSQL || BP.Difference.SystemConfig.AppCenterDBType == DBType.HGDB || DBAccess.AppCenterDBType == DBType.UX)
|
|
|
{
|
|
|
if (DBAccess.IsExitsTableCol("Port_Emp", "Idx") == true)
|
|
|
sql = "SELECT * FROM (SELECT distinct a.No,a.Name, a.FK_Dept,a.Idx FROM Port_Emp a, WF_NodeTeam b, Port_TeamEmp c WHERE a.No=c.FK_Emp AND B.FK_Group=C.FK_Group AND b.FK_Node=" + nodeID + ") ORDER BY FK_Dept,Idx,No";
|
|
|
else
|
|
|
sql = "SELECT distinct a.No,a.Name, a.FK_Dept,a.Idx FROM Port_Emp a, WF_NodeTeam b, Port_TeamEmp c WHERE a.No=c.FK_Emp AND B.FK_Group=C.FK_Group AND b.FK_Node=" + nodeID + " ";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
sql = "SELECT distinct a." + BP.Sys.Base.Glo.UserNo + ",a.Name, a.FK_Dept,a.Idx FROM Port_Emp a, WF_NodeTeam b, Port_TeamEmp c WHERE a." + BP.Sys.Base.Glo.UserNoWhitOutAS + "=c.FK_Emp AND B.FK_Group=C.FK_Group AND b.FK_Node=" + nodeID + " ORDER BY A.Idx";
|
|
|
}
|
|
|
|
|
|
dtEmp = DBAccess.RunSQLReturnTable(sql);
|
|
|
dtEmp.TableName = "Emps";
|
|
|
ds.Tables.Add(dtEmp);
|
|
|
return ds;
|
|
|
}
|
|
|
|
|
|
private DataSet ByStationAI(int nodeID, Entity en)
|
|
|
{
|
|
|
Node nd = new Node(nodeID);
|
|
|
|
|
|
int ShenFenModel = nd.GetParaInt("ShenFenModel");
|
|
|
|
|
|
//如果按照上一个节点的操作员身份计算.
|
|
|
if (ShenFenModel == 0)
|
|
|
return ByStationAI(en, BP.Web.WebUser.FK_Dept, WebUser.No);
|
|
|
|
|
|
//如果按照指定节点的操作员身份计算.
|
|
|
if (ShenFenModel == 1)
|
|
|
{
|
|
|
int specNodeID = nd.GetParaInt("ShenFenVal");
|
|
|
|
|
|
int workID = en.GetValIntByKey("OID");
|
|
|
|
|
|
string sql = "SELECT FK_Emp,FK_Dept FROM WF_GenerWorkerList WHERE FK_Node=" + specNodeID + " AND WorkID=" + workID;
|
|
|
DataTable dt = DBAccess.RunSQLReturnTable(sql);
|
|
|
string empNo = "", deptNo = "";
|
|
|
if (dt.Rows.Count == 0)
|
|
|
{
|
|
|
BP.WF.Node ndSpec = new Node(specNodeID);
|
|
|
if (ndSpec.IsStartNode == false)
|
|
|
throw new Exception("err@没有找到上一步节点,参数信息: NodeID=" + specNodeID + ",WorkID=" + workID + ", 不应该出现的异常,请联系管理员, 有可能您配置了没有路过的节点,作为指定节点的身份计算了。");
|
|
|
empNo = BP.Web.WebUser.No;
|
|
|
deptNo = BP.Web.WebUser.FK_Dept;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//获得指定节点的人员编号.
|
|
|
empNo = dt.Rows[0][0].ToString();
|
|
|
deptNo = dt.Rows[0][1].ToString();
|
|
|
}
|
|
|
|
|
|
return ByStationAI(en, deptNo, empNo);
|
|
|
}
|
|
|
|
|
|
//如果按指定字段的身份计算.
|
|
|
if (ShenFenModel == 2)
|
|
|
{
|
|
|
string empNo = nd.GetParaString("ShenFenVal");
|
|
|
BP.Port.Emp emp = new BP.Port.Emp(empNo);
|
|
|
return ByStationAI(en, emp.FK_Dept, emp.No);
|
|
|
}
|
|
|
|
|
|
throw new Exception("err@没有判断的身份模式." + ShenFenModel);
|
|
|
}
|
|
|
|
|
|
private DataSet ByStationAI(Entity en, string deptNo, string userID)
|
|
|
{
|
|
|
//第一次计算.
|
|
|
DataSet ds = ByStationAI_Ext(en, deptNo, userID);
|
|
|
|
|
|
if (ds.Tables[1].Rows.Count == 0)
|
|
|
{
|
|
|
//如果在本部门找不到,就到父部门去找.
|
|
|
BP.Port.Dept mydept = new Dept(deptNo);
|
|
|
ds = ByStationAI_Ext(en, mydept.ParentNo, userID);
|
|
|
|
|
|
if (ds.Tables[1].Rows.Count == 0)
|
|
|
{
|
|
|
//如果父部门找不到,就到父父部门去找, 在找不到就不找了。
|
|
|
if (mydept.ParentNo.Equals("0") == false)
|
|
|
{
|
|
|
Dept myParentDept = new Dept(mydept.ParentNo);
|
|
|
ds = ByStationAI_Ext(en, myParentDept.ParentNo, userID);
|
|
|
if (ds.Tables[1].Rows.Count != 0)
|
|
|
return ds;
|
|
|
}
|
|
|
|
|
|
if (ds.Tables[1].Rows.Count == 0)
|
|
|
{
|
|
|
//如果爷爷部门也找不到,就到于父亲同一级的部门去找.
|
|
|
BP.Port.Depts pDepts = new Depts();
|
|
|
pDepts.Retrieve(BP.Port.DeptAttr.ParentNo, mydept.ParentNo);
|
|
|
|
|
|
foreach (BP.Port.Dept item in pDepts)
|
|
|
{
|
|
|
ds = ByStationAI_Ext(en, item.No, userID);
|
|
|
if (ds.Tables[1].Rows.Count >= 1)
|
|
|
return ds;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//如果实在找不到了,就仅按角色计算.
|
|
|
if (ds.Tables[1].Rows.Count == 0)
|
|
|
{
|
|
|
ds = ByStation(this.NodeID, en);
|
|
|
}
|
|
|
|
|
|
return ds;
|
|
|
|
|
|
////如果人员为空.
|
|
|
//while (ds.Tables[1].Rows.Count == 0)
|
|
|
//{
|
|
|
// GPM.Dept mydept = new GPM.Dept(deptNo);
|
|
|
|
|
|
// //首先扫描平级部门.
|
|
|
// BP.Port.Depts depts = new GPM.Depts();
|
|
|
// depts.Retrieve(BP.Port.DeptAttr.ParentNo, mydept.ParentNo);
|
|
|
// BP.Port.Dept dept = new BP.Port.Dept(WebUser.FK_Dept);
|
|
|
// ds = ByStationAI_Ext(nodeID, en, dept.ParentNo, BP.Web.WebUser.No);
|
|
|
//}
|
|
|
//return ds;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 指定部门下的,角色人员的数据。
|
|
|
/// </summary>
|
|
|
/// <param name="nodeID"></param>
|
|
|
/// <param name="en"></param>
|
|
|
/// <param name="deptNo"></param>
|
|
|
/// <param name="userNo"></param>
|
|
|
/// <returns></returns>
|
|
|
private DataSet ByStationAI_Ext(Entity en, string deptNo, string userNo)
|
|
|
{
|
|
|
// 定义数据容器.
|
|
|
DataSet ds = new DataSet();
|
|
|
string sql = null;
|
|
|
DataTable dt = null;
|
|
|
DataTable dtEmp = null;
|
|
|
|
|
|
//部门. @zkr
|
|
|
sql = "";
|
|
|
sql += "SELECT No, Name FROM Port_Dept WHERE No = '" + deptNo + "'";
|
|
|
sql += " UNION ";
|
|
|
sql += "SELECT No, Name FROM Port_Dept A, Port_DeptEmp B WHERE A.No = B.FK_Dept AND B.FK_Emp = '" + userNo + "'";
|
|
|
|
|
|
dt = DBAccess.RunSQLReturnTable(sql);
|
|
|
dt.TableName = "Depts";
|
|
|
ds.Tables.Add(dt);
|
|
|
|
|
|
//查询人员.
|
|
|
sql = "SELECT A.No,A.Name, A.FK_Dept FROM Port_Emp A, Port_DeptEmpStation B, WF_NodeStation C WHERE C.FK_Node = " + this.NodeID + " AND B.FK_Dept = '" + deptNo + "' AND A.FK_Dept = B.FK_Dept AND B.FK_Station=C.FK_Station AND A.No=b.FK_Emp ORDER BY A.Idx";
|
|
|
dtEmp = DBAccess.RunSQLReturnTable(sql);
|
|
|
dtEmp.TableName = "Emps";
|
|
|
ds.Tables.Add(dtEmp);
|
|
|
return ds;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 按照Station获取部门人员树.
|
|
|
/// </summary>
|
|
|
/// <param name="nodeID">节点ID</param>
|
|
|
/// <returns>返回数据源dataset</returns>
|
|
|
private DataSet ByStation(int nodeID, Entity en)
|
|
|
{
|
|
|
// 定义数据容器.
|
|
|
DataSet ds = new DataSet();
|
|
|
string sql = null;
|
|
|
DataTable dt = null;
|
|
|
DataTable dtEmp = null;
|
|
|
|
|
|
Node nd = new Node(nodeID);
|
|
|
if (nd.HisDeliveryWay == DeliveryWay.BySelectedForPrj)
|
|
|
{
|
|
|
//部门.
|
|
|
sql = "SELECT distinct a.No, a.Name, a.ParentNo,a.Idx FROM Port_Dept a, WF_NodeStation b, Port_DeptEmpStation c, Port_Emp d, WF_PrjEmp E WHERE a.No=d.FK_Dept AND b.FK_Station=c.FK_Station AND C.FK_Emp=D." + BP.Sys.Base.Glo.UserNoWhitOutAS + " AND d." + BP.Sys.Base.Glo.UserNoWhitOutAS + "=e.FK_Emp And C.FK_Emp=E.FK_Emp AND B.FK_Node=" + nodeID + " AND E.FK_Prj='" + en.GetValStrByKey("PrjNo") + "' ORDER BY A.No,A.Idx";
|
|
|
dt = DBAccess.RunSQLReturnTable(sql);
|
|
|
dt.TableName = "Depts";
|
|
|
ds.Tables.Add(dt);
|
|
|
|
|
|
//人员.
|
|
|
if (BP.Difference.SystemConfig.AppCenterDBType == DBType.Oracle || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR3 || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR6 || BP.Difference.SystemConfig.AppCenterDBType == DBType.PostgreSQL || BP.Difference.SystemConfig.AppCenterDBType == DBType.HGDB || DBAccess.AppCenterDBType == DBType.UX)
|
|
|
{
|
|
|
if (DBAccess.IsExitsTableCol("Port_Emp", "Idx") == true)
|
|
|
sql = "SELECT * FROM (SELECT distinct a.No,a.Name, a.FK_Dept,a.Idx FROM Port_Emp a, WF_NodeStation b, Port_DeptEmpStation c, WF_PrjEmp d WHERE a.No=c.FK_Emp AND B.FK_Station=C.FK_Station And a.No=d.FK_Emp And C.FK_Emp=d.FK_Emp AND b.FK_Node=" + nodeID + " AND D.FK_Prj='" + en.GetValStrByKey("PrjNo") + "') ORDER BY FK_Dept,Idx,No";
|
|
|
else
|
|
|
sql = "SELECT distinct a.No,a.Name, a.FK_Dept,A.Idx FROM Port_Emp a, WF_NodeStation b, Port_DeptEmpStation c, WF_PrjEmp d WHERE a.No=c.FK_Emp AND B.FK_Station=C.FK_Station And a.No=d.FK_Emp And C.FK_Emp=d.FK_Emp AND b.FK_Node=" + nodeID + " AND D.FK_Prj='" + en.GetValStrByKey("PrjNo") + "' ORDER BY A.Idx ";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
sql = "SELECT distinct a." + BP.Sys.Base.Glo.UserNo + ",a.Name, a.FK_Dept,A.Idx FROM Port_Emp a, WF_NodeStation b, Port_DeptEmpStation c, WF_PrjEmp d WHERE a." + BP.Sys.Base.Glo.UserNoWhitOutAS + "=c.FK_Emp AND B.FK_Station=C.FK_Station And a." + BP.Sys.Base.Glo.UserNoWhitOutAS + "=d.FK_Emp And C.FK_Emp=d.FK_Emp AND b.FK_Node=" + nodeID + " AND D.FK_Prj='" + en.GetValStrByKey("PrjNo") + "' ORDER BY A.Idx ";
|
|
|
}
|
|
|
|
|
|
dtEmp = DBAccess.RunSQLReturnTable(sql);
|
|
|
ds.Tables.Add(dtEmp);
|
|
|
dtEmp.TableName = "Emps";
|
|
|
return ds;
|
|
|
}
|
|
|
|
|
|
|
|
|
//部门.
|
|
|
sql = "SELECT distinct a.No, a.Name, a.ParentNo,a.Idx FROM Port_Dept a, WF_NodeStation b, Port_DeptEmpStation c, Port_Emp d WHERE a.No=d.FK_Dept AND b.FK_Station=c.FK_Station AND C.FK_Emp=D." + BP.Sys.Base.Glo.UserNoWhitOutAS + " AND B.FK_Node=" + nodeID + " ORDER BY A.No,A.Idx";
|
|
|
dt = DBAccess.RunSQLReturnTable(sql);
|
|
|
dt.TableName = "Depts";
|
|
|
ds.Tables.Add(dt);
|
|
|
|
|
|
//人员.
|
|
|
if (BP.Difference.SystemConfig.AppCenterDBType == DBType.Oracle || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR3 || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR6 || BP.Difference.SystemConfig.AppCenterDBType == DBType.PostgreSQL || BP.Difference.SystemConfig.AppCenterDBType == DBType.HGDB || DBAccess.AppCenterDBType == DBType.UX)
|
|
|
{
|
|
|
if (DBAccess.IsExitsTableCol("Port_Emp", "Idx") == true)
|
|
|
sql = "SELECT * FROM (SELECT distinct a.No,a.Name, a.FK_Dept,a.Idx FROM Port_Emp a, WF_NodeStation b, Port_DeptEmpStation c WHERE a.No=c.FK_Emp AND B.FK_Station=C.FK_Station AND b.FK_Node=" + nodeID + ") ORDER BY FK_Dept,Idx,No";
|
|
|
else
|
|
|
sql = "SELECT distinct a.No,a.Name, a.FK_Dept,a.Idx FROM Port_Emp a, WF_NodeStation b, Port_DeptEmpStation c WHERE a.No=c.FK_Emp AND B.FK_Station=C.FK_Station AND b.FK_Node=" + nodeID + " ORDER BY A.Idx";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
sql = "SELECT distinct a." + BP.Sys.Base.Glo.UserNo + ",a.Name, a.FK_Dept,a.Idx FROM Port_Emp a, WF_NodeStation b, Port_DeptEmpStation c WHERE a." + BP.Sys.Base.Glo.UserNo + "=c.FK_Emp AND B.FK_Station=C.FK_Station AND b.FK_Node=" + nodeID + " ORDER BY A.Idx";
|
|
|
}
|
|
|
|
|
|
dtEmp = DBAccess.RunSQLReturnTable(sql);
|
|
|
dtEmp.TableName = "Emps";
|
|
|
ds.Tables.Add(dtEmp);
|
|
|
|
|
|
return ds;
|
|
|
}
|
|
|
private DataSet ByWebAPI(Entity en)
|
|
|
{
|
|
|
DataSet ds = new DataSet();
|
|
|
//返回值
|
|
|
string postData = "";
|
|
|
//配置的api地址
|
|
|
string apiUrl = this.SelectorP1;
|
|
|
if (apiUrl.Contains("@WebApiHost"))//可以替换配置文件中配置的webapi地址
|
|
|
apiUrl = apiUrl.Replace("@WebApiHost", BP.Difference.SystemConfig.AppSettings["WebApiHost"].ToString());
|
|
|
|
|
|
//增加header参数
|
|
|
Hashtable headerMap = new Hashtable();
|
|
|
|
|
|
|
|
|
//saas模式,需要传入systemNo
|
|
|
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.SAAS)
|
|
|
{
|
|
|
//获取系统编号
|
|
|
//string systemNo = BP.DA.DBAccess.RunSQLReturnStringIsNull("select No from port_domain where No=(select domain from port_org where No=(select orgNo from port_emp where No='" + WebUser.No + "'))", "");
|
|
|
//headerMap.Add("systemNo", systemNo);
|
|
|
//headerMap.Add("orgNo", WebUser.OrgNo);
|
|
|
}
|
|
|
//集团模式,传入域编号
|
|
|
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.GroupInc)
|
|
|
{
|
|
|
//传入域
|
|
|
headerMap.Add("OrgNo", WebUser.OrgNo);
|
|
|
}
|
|
|
|
|
|
//加入token
|
|
|
headerMap.Add("Content-Type", "application/json");
|
|
|
headerMap.Add("Authorization", WebUser.Token);
|
|
|
|
|
|
|
|
|
|
|
|
apiUrl = BP.WF.Glo.DealExp(apiUrl, en, null);
|
|
|
//执行POST
|
|
|
postData = BP.Tools.PubGlo.HttpPostConnect(apiUrl, headerMap, "");
|
|
|
|
|
|
DataTable dt = BP.Tools.Json.ToDataTable(postData);
|
|
|
dt.TableName = "Emps";
|
|
|
ds.Tables.Add(dt);
|
|
|
|
|
|
//部门
|
|
|
//string sql = "SELECT distinct No,Name, ParentNo FROM Port_Dept where No='null'";
|
|
|
//DataTable dtDept = DBAccess.RunSQLReturnTable(sql);
|
|
|
//dtDept.TableName = "Depts";
|
|
|
//ds.Tables.Add(dtDept);
|
|
|
|
|
|
return ds;
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// Accpter
|
|
|
/// </summary>
|
|
|
public class Selectors : Entities
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// Accpter
|
|
|
/// </summary>
|
|
|
public Selectors()
|
|
|
{
|
|
|
}
|
|
|
|
|
|
public Selectors(string fk_flow)
|
|
|
{
|
|
|
string sql = "select NodeId from WF_Node where FK_Flow='" + fk_flow + "'";
|
|
|
this.RetrieveInSQL(sql);
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 得到它的 Entity
|
|
|
/// </summary>
|
|
|
public override Entity GetNewEntity
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return new Selector();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
#region 为了适应自动翻译成java的需要,把实体转换成List.
|
|
|
/// <summary>
|
|
|
/// 转化成 java list,C#不能调用.
|
|
|
/// </summary>
|
|
|
/// <returns>List</returns>
|
|
|
public System.Collections.Generic.IList<Selector> ToJavaList()
|
|
|
{
|
|
|
return (System.Collections.Generic.IList<Selector>)this;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 转化成list
|
|
|
/// </summary>
|
|
|
/// <returns>List</returns>
|
|
|
public System.Collections.Generic.List<Selector> Tolist()
|
|
|
{
|
|
|
System.Collections.Generic.List<Selector> list = new System.Collections.Generic.List<Selector>();
|
|
|
for (int i = 0; i < this.Count; i++)
|
|
|
{
|
|
|
list.Add((Selector)this[i]);
|
|
|
}
|
|
|
return list;
|
|
|
}
|
|
|
#endregion 为了适应自动翻译成java的需要,把实体转换成List.
|
|
|
}
|
|
|
}
|