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 { /// /// 构造函数 /// public WF_Comm_RefFunc() { } #region Dot2DotTreeDeptEmpModel.htm(部门人员选择) /// /// 保存节点绑定人员信息 /// /// 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); } /// /// 保存节点绑定部门信息 /// /// 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); } /// /// 获取节点绑定人员信息列表 /// /// 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(角色选择) /// /// 保存节点绑定角色信息 /// /// 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); } /// /// 获取部门树根结点 /// /// public string Dot2DotStationModel_GetStructureTreeRoot() { JsonResultInnerData jr = new JsonResultInnerData(); EasyuiTreeNode node, subnode; List d = new List(); 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(); 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(); 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); } /// /// 获取指定部门下一级子部门及人员列表 /// /// 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 d = new List(); 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(); 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(); 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); } /// /// 获取节点绑定人员信息列表 /// /// 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 /// /// 判断Port_StationType表中是否含有Idx字段 /// /// 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 辅助实体定义 /// /// Eayui tree node对象 /// 主要用于数据的JSON化组织 /// 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 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 辅助实体定义 } }