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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 辅助实体定义
}
}