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.

668 lines
25 KiB
C#

11 months ago
using System;
using System.Collections.Generic;
using System.Data;
using BP.DA;
using BP.Port;
namespace BP.WF.HttpHandler
{
public class WF_Comm_RefFunc : DirectoryPageBase
{
/// <summary>
/// 构造函数
/// </summary>
public WF_Comm_RefFunc()
{
}
#region Dot2DotTreeDeptEmpModel.htm部门人员选择
/// <summary>
/// 保存节点绑定人员信息
/// </summary>
/// <returns></returns>
public string Dot2DotTreeDeptEmpModel_SaveNodeEmps()
{
JsonResultInnerData jr = new JsonResultInnerData();
string nodeid = this.GetRequestVal("nodeid");
string data = this.GetRequestVal("data");
string partno = this.GetRequestVal("partno");
bool lastpart = false;
int partidx = 0;
int partcount = 0;
int nid = 0;
if (DataType.IsNullOrEmpty(nodeid) || int.TryParse(nodeid, out nid) == false)
throw new Exception("参数nodeid不正确");
if (DataType.IsNullOrEmpty(data))
data = "";
BP.WF.Template.NodeEmps nemps = new BP.WF.Template.NodeEmps();
string[] empNos = data.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
//提交内容过长时,采用分段式提交
if (DataType.IsNullOrEmpty(partno))
{
nemps.Delete(BP.WF.Template.NodeEmpAttr.FK_Node, nid);
}
else
{
string[] parts = partno.Split("/".ToCharArray());
if (parts.Length != 2)
throw new Exception("参数partno不正确");
partidx = int.Parse(parts[0]);
partcount = int.Parse(parts[1]);
empNos = data.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
if (partidx == 1)
nemps.Delete(BP.WF.Template.NodeEmpAttr.FK_Node, nid);
lastpart = partidx == partcount;
}
DataTable dtEmps = DBAccess.RunSQLReturnTable("SELECT No FROM Port_Emp");
BP.WF.Template.NodeEmp nemp = null;
foreach (string empNo in empNos)
{
if (dtEmps.Select(string.Format("No='{0}'", empNo)).Length + dtEmps.Select(string.Format("NO='{0}'", empNo)).Length == 0)
continue;
nemp = new BP.WF.Template.NodeEmp();
nemp.NodeID = nid;
nemp.EmpNo = empNo;
nemp.Insert();
}
if (DataType.IsNullOrEmpty(partno))
{
jr.Msg = "保存成功";
}
else
{
jr.InnerData = new { lastpart, partidx, partcount };
if (lastpart)
jr.Msg = "保存成功";
else
jr.Msg = string.Format("第{0}/{1}段保存成功", partidx, partcount);
}
return Newtonsoft.Json.JsonConvert.SerializeObject(jr);
}
/// <summary>
/// 保存节点绑定部门信息
/// </summary>
/// <returns></returns>
public string Dot2DotTreeDeptModel_SaveNodeDepts()
{
JsonResultInnerData jr = new JsonResultInnerData();
string nodeid = this.GetRequestVal("nodeid");
string data = this.GetRequestVal("data");
string partno = this.GetRequestVal("partno");
bool lastpart = false;
int partidx = 0;
int partcount = 0;
int nid = 0;
if (DataType.IsNullOrEmpty(nodeid) || int.TryParse(nodeid, out nid) == false)
throw new Exception("参数nodeid不正确");
if (DataType.IsNullOrEmpty(data))
data = "";
BP.WF.Template.NodeDepts ndepts = new BP.WF.Template.NodeDepts();
string[] deptNos = data.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
//提交内容过长时,采用分段式提交
if (DataType.IsNullOrEmpty(partno))
{
ndepts.Delete(BP.WF.Template.NodeDeptAttr.FK_Node, nid);
}
else
{
string[] parts = partno.Split("/".ToCharArray());
if (parts.Length != 2)
throw new Exception("参数partno不正确");
partidx = int.Parse(parts[0]);
partcount = int.Parse(parts[1]);
deptNos = data.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
if (partidx == 1)
ndepts.Delete(BP.WF.Template.NodeDeptAttr.FK_Node, nid);
lastpart = partidx == partcount;
}
DataTable dtDepts = DBAccess.RunSQLReturnTable("SELECT No FROM Port_Dept");
BP.WF.Template.NodeDept nemp = null;
foreach (string deptNo in deptNos)
{
if (dtDepts.Select(string.Format("No='{0}'", deptNo)).Length + dtDepts.Select(string.Format("NO='{0}'", deptNo)).Length == 0)
continue;
nemp = new BP.WF.Template.NodeDept();
nemp.NodeID = nid;
nemp.DeptNo = deptNo;
nemp.Insert();
}
if (DataType.IsNullOrEmpty(partno))
{
jr.Msg = "保存成功";
}
else
{
jr.InnerData = new { lastpart, partidx, partcount };
if (lastpart)
jr.Msg = "保存成功";
else
jr.Msg = string.Format("第{0}/{1}段保存成功", partidx, partcount);
}
return Newtonsoft.Json.JsonConvert.SerializeObject(jr);
}
/// <summary>
/// 获取节点绑定人员信息列表
/// </summary>
/// <returns></returns>
public string Dot2DotTreeDeptModel_GetNodeDepts()
{
JsonResultInnerData jr = new JsonResultInnerData();
DataTable dt = null;
string nid = this.GetRequestVal("nodeid");
string sql = "SELECT pd.No,pd.Name,pd1.No DeptNo,pd1.Name DeptName FROM WF_NodeDept wnd "
+ " INNER JOIN Port_Dept pd ON pd.No=wnd.FK_Dept "
+ " LEFT JOIN Port_Dept pd1 ON pd1.No=pd.ParentNo "
+ "WHERE wnd.NodeID = " + nid + " ORDER BY pd1.Idx, pd.Name";
dt = DBAccess.RunSQLReturnTable(sql); //, pagesize, pageidx, "No", "Name", "ASC"
dt.Columns.Add("Code", typeof(string));
dt.Columns.Add("Checked", typeof(bool));
foreach (DataRow row in dt.Rows)
{
row["Code"] = BP.Tools.chs2py.ConvertStr2Code(row["Name"] as string);
row["Checked"] = true;
}
//对Oracle数据库做兼容性处理
foreach (DataColumn col in dt.Columns)
{
switch (col.ColumnName.ToUpper())
{
case "NO":
col.ColumnName = "No";
break;
case "NAME":
col.ColumnName = "Name";
break;
case "DEPTNO":
col.ColumnName = "DeptNo";
break;
case "DEPTNAME":
col.ColumnName = "DeptName";
break;
}
}
jr.InnerData = dt;
string re = BP.Tools.Json.ToJson(jr);
if (Glo.Plant == BP.WF.Plant.JFlow)
{
re = re.Replace("\"NO\"", "\"No\"").Replace("\"NAME\"", "\"Name\"").Replace("\"DEPTNO\"", "\"DeptNo\"").Replace("\"DEPTNAME\"", "\"DeptName\"");
}
return re;
}
#endregion Dot2DotTreeDeptModel.htm部门选择
#region Dot2DotStationModel.htm角色选择
/// <summary>
/// 保存节点绑定角色信息
/// </summary>
/// <returns></returns>
public string Dot2DotStationModel_SaveNodeStations()
{
JsonResultInnerData jr = new JsonResultInnerData();
string nodeid = this.GetRequestVal("nodeid");
string data = this.GetRequestVal("data");
string partno = this.GetRequestVal("partno");
bool lastpart = false;
int partidx = 0;
int partcount = 0;
int nid = 0;
if (DataType.IsNullOrEmpty(nodeid) || int.TryParse(nodeid, out nid) == false)
throw new Exception("参数nodeid不正确");
if (DataType.IsNullOrEmpty(data))
data = "";
BP.WF.Template.NodeStations nsts = new BP.WF.Template.NodeStations();
string[] stNos = data.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
//提交内容过长时,采用分段式提交
if (DataType.IsNullOrEmpty(partno))
{
nsts.Delete(BP.WF.Template.NodeStationAttr.FK_Node, nid);
}
else
{
string[] parts = partno.Split("/".ToCharArray());
if (parts.Length != 2)
throw new Exception("参数partno不正确");
partidx = int.Parse(parts[0]);
partcount = int.Parse(parts[1]);
stNos = data.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
if (partidx == 1)
nsts.Delete(BP.WF.Template.NodeStationAttr.FK_Node, nid);
lastpart = partidx == partcount;
}
DataTable dtSts = DBAccess.RunSQLReturnTable("SELECT No FROM Port_Station");
BP.WF.Template.NodeStation nst = null;
foreach (string stNo in stNos)
{
if (dtSts.Select(string.Format("No='{0}'", stNo)).Length + dtSts.Select(string.Format("NO='{0}'", stNo)).Length == 0)
continue;
nst = new BP.WF.Template.NodeStation();
nst.NodeID = nid;
nst.StationNo = stNo;
nst.Insert();
}
if (DataType.IsNullOrEmpty(partno))
{
jr.Msg = "保存成功";
}
else
{
jr.InnerData = new { lastpart, partidx, partcount };
if (lastpart)
jr.Msg = "保存成功";
else
jr.Msg = string.Format("第{0}/{1}段保存成功", partidx, partcount);
}
return Newtonsoft.Json.JsonConvert.SerializeObject(jr);
}
/// <summary>
/// 获取部门树根结点
/// </summary>
/// <returns></returns>
public string Dot2DotStationModel_GetStructureTreeRoot()
{
JsonResultInnerData jr = new JsonResultInnerData();
EasyuiTreeNode node, subnode;
List<EasyuiTreeNode> d = new List<EasyuiTreeNode>();
string parentrootid = this.GetRequestVal("parentrootid");
string sql = null;
DataTable dt = null;
if (DataType.IsNullOrEmpty(parentrootid))
throw new Exception("参数parentrootid不能为空");
CheckStationTypeIdxExists();
bool isUnitModel = DBAccess.IsExitsTableCol("Port_Dept", "IsUnit");
if (isUnitModel)
{
bool isValid = DBAccess.IsExitsTableCol("Port_Station", "FK_Unit");
if (!isValid)
isUnitModel = false;
}
if (isUnitModel)
{
sql = string.Format("SELECT No,Name,ParentNo FROM Port_Dept WHERE IsUnit = 1 AND ParentNo = '{0}'", parentrootid);
dt = DBAccess.RunSQLReturnTable(sql);
if (dt.Rows.Count == 0)
dt.Rows.Add("-1", "无单位数据", parentrootid);
node = new EasyuiTreeNode();
node.id = "UNITROOT_" + dt.Rows[0]["No"];
node.text = dt.Rows[0]["Name"] as string;
node.iconCls = "icon-department";
node.attributes = new EasyuiTreeNodeAttributes();
node.attributes.No = dt.Rows[0]["No"] as string;
node.attributes.Name = dt.Rows[0]["Name"] as string;
node.attributes.ParentNo = parentrootid;
node.attributes.TType = "UNITROOT";
node.state = "closed";
if (node.text != "无单位数据")
{
node.children = new List<EasyuiTreeNode>();
node.children.Add(new EasyuiTreeNode());
node.children[0].text = "loading...";
}
d.Add(node);
}
else
{
sql = "SELECT No,Name FROM Port_StationType";
dt = DBAccess.RunSQLReturnTable(sql);
node = new EasyuiTreeNode();
node.id = "STROOT_-1";
node.text = "角色类型";
node.iconCls = "icon-department";
node.attributes = new EasyuiTreeNodeAttributes();
node.attributes.No = "-1";
node.attributes.Name = "角色类型";
node.attributes.ParentNo = parentrootid;
node.attributes.TType = "STROOT";
node.state = "closed";
if (dt.Rows.Count > 0)
{
node.children = new List<EasyuiTreeNode>();
node.children.Add(new EasyuiTreeNode());
node.children[0].text = "loading...";
}
d.Add(node);
}
jr.InnerData = d;
jr.Msg = isUnitModel.ToString().ToLower();
return Newtonsoft.Json.JsonConvert.SerializeObject(jr);
}
/// <summary>
/// 获取指定部门下一级子部门及人员列表
/// </summary>
/// <returns></returns>
public string Dot2DotStationModel_GetSubUnits()
{
string parentid = this.GetRequestVal("parentid");
string nid = this.GetRequestVal("nodeid");
string tp = this.GetRequestVal("stype"); //ST,UNIT
string ttype = this.GetRequestVal("ttype"); //STROOT,UNITROOT,ST,CST,S
if (DataType.IsNullOrEmpty(parentid))
throw new Exception("参数parentid不能为空");
if (DataType.IsNullOrEmpty(nid))
throw new Exception("参数nodeid不能为空");
EasyuiTreeNode node = null;
List<EasyuiTreeNode> d = new List<EasyuiTreeNode>();
string sql = string.Empty;
DataTable dt = null;
BP.WF.Template.NodeStations sts = new BP.WF.Template.NodeStations();
string sortField = CheckStationTypeIdxExists() ? "Idx" : "No";
sts.Retrieve(BP.WF.Template.NodeStationAttr.FK_Node, int.Parse(nid));
if (tp == "ST")
{
if (ttype == "STROOT")
{
sql = "SELECT No,Name FROM Port_StationType ORDER BY " + sortField + " ASC";
dt = DBAccess.RunSQLReturnTable(sql);
foreach (DataRow row in dt.Rows)
{
node = new EasyuiTreeNode();
node.id = "ST_" + row["No"];
node.text = row["Name"] as string;
node.iconCls = "icon-department";
node.attributes = new EasyuiTreeNodeAttributes();
node.attributes.No = row["No"] as string;
node.attributes.Name = row["Name"] as string;
node.attributes.ParentNo = "-1";
node.attributes.TType = "ST";
node.state = "closed";
node.children = new List<EasyuiTreeNode>();
node.children.Add(new EasyuiTreeNode());
node.children[0].text = "loading...";
d.Add(node);
}
}
else
{
sql =
string.Format(
"SELECT ps.No,ps.Name,ps.FK_StationType,pst.Name FK_StationTypeName FROM Port_Station ps"
+ " INNER JOIN Port_StationType pst ON pst.No = ps.FK_StationType"
+ " WHERE ps.FK_StationType = '{0}' ORDER BY ps.Name ASC", parentid);
dt = DBAccess.RunSQLReturnTable(sql);
foreach (DataRow row in dt.Rows)
{
node = new EasyuiTreeNode();
node.id = "S_" + parentid + "_" + row["No"];
node.text = row["Name"] as string;
node.iconCls = "icon-user";
node.@checked =
sts.GetEntityByKey(BP.WF.Template.NodeStationAttr.FK_Station, row["No"]) != null;
node.attributes = new EasyuiTreeNodeAttributes();
node.attributes.No = row["No"] as string;
node.attributes.Name = row["Name"] as string;
node.attributes.ParentNo = row["FK_StationType"] as string;
node.attributes.ParentName = row["FK_StationTypeName"] as string;
node.attributes.TType = "S";
node.attributes.Code = BP.Tools.chs2py.ConvertStr2Code(row["Name"] as string);
d.Add(node);
}
}
}
else
{
//角色所属单位UNIT
dt = DBAccess.RunSQLReturnTable(string.Format("SELECT * FROM Port_Dept WHERE IsUnit = 1 AND ParentNo='{0}' ORDER BY Name ASC", parentid));
foreach (DataRow dept in dt.Rows)
{
node = new EasyuiTreeNode();
node.id = "UNIT_" + dept["No"];
node.text = dept["Name"] as string;
node.iconCls = "icon-department";
node.attributes = new EasyuiTreeNodeAttributes();
node.attributes.No = dept["No"] as string;
node.attributes.Name = dept["Name"] as string;
node.attributes.ParentNo = dept["ParentNo"] as string;
node.attributes.TType = "UNIT";
node.attributes.Code = BP.Tools.chs2py.ConvertStr2Code(dept["Name"] as string);
node.state = "closed";
node.children = new List<EasyuiTreeNode>();
node.children.Add(new EasyuiTreeNode());
node.children[0].text = "loading...";
d.Add(node);
}
dt = DBAccess.RunSQLReturnTable(
string.Format(
"SELECT ps.No,ps.Name,pst.No FK_StationType, pst.Name FK_StationTypeName,ps.FK_Unit,pd.Name FK_UnitName FROM Port_Station ps"
+ " INNER JOIN Port_StationType pst ON pst.No = ps.FK_StationType"
+ " INNER JOIN Port_Dept pd ON pd.No=ps.FK_Unit"
+ " WHERE ps.FK_Unit = '{0}' ORDER BY pst.{1} ASC,ps.Name ASC", parentid, sortField));
//增加角色
foreach (DataRow st in dt.Rows)
{
node = new EasyuiTreeNode();
node.id = "S_" + st["FK_Unit"] + "_" + st["No"];
node.text = st["Name"] + "[" + st["FK_StationTypeName"] + "]";
node.iconCls = "icon-user";
node.@checked = sts.GetEntityByKey(BP.WF.Template.NodeStationAttr.FK_Station, st["No"]) != null;
node.attributes = new EasyuiTreeNodeAttributes();
node.attributes.No = st["No"] as string;
node.attributes.Name = st["Name"] as string;
node.attributes.ParentNo = st["FK_Unit"] as string;
node.attributes.ParentName = st["FK_UnitName"] as string;
node.attributes.TType = "S";
node.attributes.Code = BP.Tools.chs2py.ConvertStr2Code(st["Name"] as string);
d.Add(node);
}
}
return Newtonsoft.Json.JsonConvert.SerializeObject(d);
}
/// <summary>
/// 获取节点绑定人员信息列表
/// </summary>
/// <returns></returns>
public string Dot2DotStationModel_GetNodeStations()
{
JsonResultInnerData jr = new JsonResultInnerData();
DataTable dt = null;
string nid = this.GetRequestVal("nodeid");
int pagesize = int.Parse(this.GetRequestVal("pagesize"));
int pageidx = int.Parse(this.GetRequestVal("pageidx"));
string st = this.GetRequestVal("stype");
string sql = string.Empty;
string sortField = CheckStationTypeIdxExists() ? "Idx" : "No";
if (st == "UNIT")
{
sql = "SELECT ps.No,ps.Name,pd.No UnitNo,pd.Name UnitName FROM WF_NodeStation wns "
+ " INNER JOIN Port_Station ps ON ps.No=wns.FK_Station "
+ " INNER JOIN Port_Dept pd ON pd.No=ps.FK_Unit "
+ "WHERE wns.NodeID = " + nid + " ORDER BY ps.Name ASC";
}
else
{
sql = "SELECT ps.No,ps.Name,pst.No UnitNo,pst.Name UnitName FROM WF_NodeStation wns "
+ " INNER JOIN Port_Station ps ON ps.No=wns.FK_Station "
+ " INNER JOIN Port_StationType pst ON pst.No=ps.FK_StationType "
+ "WHERE wns.NodeID = " + nid + " ORDER BY pst." + sortField + " ASC,ps.Name ASC";
}
dt = DBAccess.RunSQLReturnTable(sql); //, pagesize, pageidx, "No", "Name", "ASC"
dt.Columns.Add("Code", typeof(string));
dt.Columns.Add("Checked", typeof(bool));
foreach (DataRow row in dt.Rows)
{
row["Code"] = BP.Tools.chs2py.ConvertStr2Code(row["Name"] as string);
row["Checked"] = true;
}
//对Oracle数据库做兼容性处理
foreach (DataColumn col in dt.Columns)
{
switch (col.ColumnName.ToUpper())
{
case "NO":
col.ColumnName = "No";
break;
case "NAME":
col.ColumnName = "Name";
break;
case "UNITNO":
col.ColumnName = "DeptNo";
break;
case "UNITNAME":
col.ColumnName = "DeptName";
break;
}
}
jr.InnerData = dt;
jr.Msg = "";
string re = Newtonsoft.Json.JsonConvert.SerializeObject(jr);
if (Glo.Plant == BP.WF.Plant.JFlow)
{
re = re.Replace("\"NO\"", "\"No\"").Replace("\"NAME\"", "\"Name\"").Replace("\"UNITNO\"", "\"UnitNo\"").Replace("\"UNITNAME\"", "\"UnitName\"");
}
return Newtonsoft.Json.JsonConvert.SerializeObject(re);
}
#endregion Dot2DotStationModel.htm角色选择
#region Methods
/// <summary>
/// 判断Port_StationType表中是否含有Idx字段
/// </summary>
/// <returns></returns>
public bool CheckStationTypeIdxExists()
{
if (DBAccess.IsExitsTableCol("Port_StationType", "Idx") == false)
{
if (DBAccess.IsView("Port_StationType", BP.Difference.SystemConfig.AppCenterDBType) == false)
{
StationType st = new StationType();
st.CheckPhysicsTable();
DBAccess.RunSQL("UPDATE Port_StationType SET Idx = 1");
return true;
}
}
else
{
return true;
}
return false;
}
#endregion
#region 辅助实体定义
/// <summary>
/// Eayui tree node对象
/// <para>主要用于数据的JSON化组织</para>
/// </summary>
public class EasyuiTreeNode
{
public string id { get; set; }
public string text { get; set; }
public string state { get; set; }
public bool @checked { get; set; }
public string iconCls { get; set; }
public EasyuiTreeNodeAttributes attributes { get; set; }
public List<EasyuiTreeNode> children { get; set; }
}
public class EasyuiTreeNodeAttributes
{
public string No { get; set; }
public string Name { get; set; }
public string ParentNo { get; set; }
public string ParentName { get; set; }
public string TType { get; set; }
public string Code { get; set; }
}
#endregion 辅助实体定义
}
}