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.

877 lines
44 KiB
Plaintext

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;
using System.Data;
using System.Text;
using BP.DA;
using BP.Sys;
using BP.Web;
using BP.Port;
using BP.En;
using BP.WF.Data;
using LitJson;
using System.Net;
using System.IO;
using BP.Difference;
namespace BP.WF.HttpHandler
{
/// <summary>
/// 页面功能实体
/// </summary>
public class WF_AppClassic : DirectoryPageBase
{
/// <summary>
/// 构造函数
/// </summary>
public WF_AppClassic()
{
}
#region 执行父类的重写方法.
/// <summary>
/// 默认执行的方法
/// </summary>
/// <returns></returns>
protected override string DoDefaultMethod()
{
switch (this.DoType)
{
case "DtlFieldUp": //字段上移
return "执行成功.";
default:
break;
}
//找不不到标记就抛出异常.
throw new Exception("@标记[" + this.DoType + "],没有找到. @RowURL:" + HttpContextHelper.RequestRawUrl);
}
#endregion 执行父类的重写方法.
#region xxx 界面 .
#endregion xxx 界面方法.
/// <summary>
/// 蓝信登陆
/// </summary>
/// <returns></returns>
public string LanXin_Login()
{
string code = GetRequestVal("code");
if (DataType.IsNullOrEmpty(WebUser.Token) == false)
{
//刷新token
string urlr = "http://xjtyjt.e.lanxin.cn:11180//sns/oauth2/refresh_token?refresh_token=" + WebUser.Token + "&appid=100243&grant_type=refresh_token";
string resultr = HttpPostConnect(urlr, "");
JsonData jdr = JsonMapper.ToObject(resultr);
resultr = jdr["errcode"].ToString();
if (resultr == "0")
{
WebUser.Token = jdr["access_token"].ToString();
}
return WebUser.No;
}
//获取Token
string url = "http://xjtyjt.e.lanxin.cn:11180/sns/oauth2/access_token?code=" + code + "&appid=100243&grant_type=authorization_code";
string result = HttpPostConnect(url, "");
JsonData jd = JsonMapper.ToObject(result);
result = jd["errcode"].ToString();
if (result != "0")
{
return "err@" + jd["errmsg"].ToString();
}
string access_token = jd["access_token"].ToString();
string openId = jd["openid"].ToString();
//获取用户信息
url = "http://xjtyjt.e.lanxin.cn:11180/sns/userinfo?access_token=" + access_token + "&mobile=" + openId;
result = HttpPostConnect(url, "");
jd = JsonMapper.ToObject(result);
result = jd["errcode"].ToString();
if (result != "0")
{
return "err@" + jd["errmsg"].ToString();
}
string userNo = jd["openOrgMemberList"][0]["serialNumber"].ToString();
string tel = jd["openOrgMemberList"][0]["mobile"].ToString();
/**单点登陆*/
Paras ps = new Paras();
ps.SQL = "SELECT No FROM Port_Emp WHERE No=" + BP.Difference.SystemConfig.AppCenterDBVarStr + "No and Tel=" + BP.Difference.SystemConfig.AppCenterDBVarStr + "Tel";
ps.Add("No", userNo);
ps.Add("Tel", tel);
string No = DBAccess.RunSQLReturnString(ps);
if (DataType.IsNullOrEmpty(No))
return "err@用户信息不正确,请联系管理员";
BP.WF.Dev2Interface.Port_Login(userNo);
WebUser.Token = access_token;
result = jd["errcode"].ToString();
return userNo;
}
/// <summary>
/// httppost方式发送数据
/// </summary>
/// <param name="url">要提交的url</param>
/// <param name="postDataStr"></param>
/// <param name="timeOut">超时时间</param>
/// <param name="encode">text code.</param>
/// <returns>成功返回读取内容失败0</returns>
public static string HttpPostConnect(string serverUrl, string postData)
{
var dataArray = Encoding.UTF8.GetBytes(postData);
//创建请求
var request = (HttpWebRequest)HttpWebRequest.Create(serverUrl);
request.Method = "POST";
request.ContentLength = dataArray.Length;
//设置上传服务的数据格式 设置之后不好使
//request.ContentType = "application/json";
//请求的身份验证信息为默认
request.Credentials = CredentialCache.DefaultCredentials;
//请求超时时间
request.Timeout = 10000;
//创建输入流
Stream dataStream;
try
{
dataStream = request.GetRequestStream();
}
catch (Exception)
{
return "0";//连接服务器失败
}
//发送请求
dataStream.Write(dataArray, 0, dataArray.Length);
dataStream.Close();
//读取返回消息
string res;
try
{
var response = (HttpWebResponse)request.GetResponse();
var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
res = reader.ReadToEnd();
reader.Close();
}
catch (Exception ex)
{
return "0";//连接服务器失败
}
return res;
}
/// <summary>
/// 初始化Home
/// </summary>
/// <returns></returns>
public string Home_Init()
{
Hashtable ht = new Hashtable();
ht.Add("UserNo", BP.Web.WebUser.No);
ht.Add("UserName", BP.Web.WebUser.Name);
//系统名称.
ht.Add("SysName", BP.Difference.SystemConfig.SysName);
ht.Add("CustomerName", BP.Difference.SystemConfig.CustomerName);
ht.Add("Todolist_EmpWorks", BP.WF.Dev2Interface.Todolist_EmpWorks);
ht.Add("Todolist_Runing", BP.WF.Dev2Interface.Todolist_Runing);
ht.Add("Todolist_Sharing", BP.WF.Dev2Interface.Todolist_Sharing);
ht.Add("Todolist_CCWorks", BP.WF.Dev2Interface.Todolist_CCWorks);
ht.Add("Todolist_Apply", BP.WF.Dev2Interface.Todolist_Apply); //申请下来的任务个数.
ht.Add("Todolist_Draft", BP.WF.Dev2Interface.Todolist_Draft); //草稿数量.
ht.Add("Todolist_Complete", BP.WF.Dev2Interface.Todolist_Complete); //完成数量.
ht.Add("UserDeptName", WebUser.FK_DeptName);
//我发起
MyStartFlows myStartFlows = new MyStartFlows();
QueryObject obj = new QueryObject(myStartFlows);
obj.AddWhere(MyStartFlowAttr.Starter, WebUser.No);
obj.addAnd();
//运行中\已完成\挂起\退回\转发\加签\批处理\
obj.addLeftBracket();
obj.AddWhere("WFState=2 or WFState=3 or WFState=4 or WFState=5 or WFState=6 or WFState=8 or WFState=10");
obj.addRightBracket();
obj.DoQuery();
ht.Add("Todolist_MyStartFlow", myStartFlows.Count);
//我参与
MyJoinFlows myFlows = new MyJoinFlows();
obj = new QueryObject(myFlows);
obj.AddWhere("Emps like '%" + WebUser.No + "%'");
obj.DoQuery();
ht.Add("Todolist_MyFlow", myFlows.Count);
return BP.Tools.Json.ToJsonEntityModel(ht);
}
public string Index_Init()
{
Hashtable ht = new Hashtable();
ht.Add("Todolist_Runing", BP.WF.Dev2Interface.Todolist_Runing); //运行中.
ht.Add("Todolist_EmpWorks", BP.WF.Dev2Interface.Todolist_EmpWorks); //待办
ht.Add("Todolist_CCWorks", BP.WF.Dev2Interface.Todolist_CCWorks); //抄送.
//本周.
ht.Add("TodayNum", BP.WF.Dev2Interface.Todolist_CCWorks); //抄送.
return BP.Tools.Json.ToJsonEntityModel(ht);
}
#region 登录界面.
public string Portal_Login()
{
string userNo = this.GetRequestVal("UserNo");
try
{
BP.Port.Emp emp = new Emp(userNo);
BP.WF.Dev2Interface.Port_Login(emp.UserID);
return ".";
}
catch (Exception ex)
{
return "err@用户[" + userNo + "]登录失败." + ex.Message;
}
}
/// <summary>
/// 登录.
/// </summary>
/// <returns></returns>
public string Login_Submit()
{
try
{
string userNo = this.GetRequestVal("TB_No");
if (userNo == null)
userNo = this.GetRequestVal("TB_UserNo");
string pass = this.GetRequestVal("TB_PW");
if (pass == null)
pass = this.GetRequestVal("TB_Pass");
BP.Port.Emp emp = new Emp();
emp.UserID = userNo;
//是否存在用户
bool isExist = emp.RetrieveFromDBSources() == 0 ? false : true;
if (isExist == false && DBAccess.IsExitsTableCol("Port_Emp", "NikeName") == true)
{
/*如果包含昵称列,就检查昵称是否存在.*/
Paras ps = new Paras();
ps.SQL = "SELECT No FROM Port_Emp WHERE NikeName=" + BP.Difference.SystemConfig.AppCenterDBVarStr + "NikeName";
ps.Add("NikeName", userNo);
string no = DBAccess.RunSQLReturnStringIsNull(ps, null);
if (DataType.IsNullOrEmpty(no) == false)
{
emp.No = no;
if (emp.RetrieveFromDBSources() != 0)
isExist = true;
}
}
if (isExist == false && DBAccess.IsExitsTableCol("Port_Emp", "Tel") == true)
{
/*如果包含Name列,就检查Name是否存在.*/
Paras ps = new Paras();
ps.SQL = "SELECT No FROM Port_Emp WHERE Tel=" + BP.Difference.SystemConfig.AppCenterDBVarStr + "Tel";
ps.Add("Tel", userNo);
string no = DBAccess.RunSQLReturnStringIsNull(ps, null);
if (DataType.IsNullOrEmpty(no) == false)
{
emp.No = no;
if (emp.RetrieveFromDBSources() != 0)
isExist = true;
}
}
if (isExist == false && DBAccess.IsExitsTableCol("Port_Emp", "Email") == true)
{
/*如果包含Name列,就检查Name是否存在.*/
Paras ps = new Paras();
ps.SQL = "SELECT No FROM Port_Emp WHERE Email=" + BP.Difference.SystemConfig.AppCenterDBVarStr + "Email";
ps.Add("Email", userNo);
string no = DBAccess.RunSQLReturnStringIsNull(ps, null);
if (DataType.IsNullOrEmpty(no) == false)
{
emp.No = no;
if (emp.RetrieveFromDBSources() != 0)
isExist = true;
}
}
if (isExist == false)
{
return "err@用户名不存在.";
}
if (emp.CheckPass(pass) == false)
return "err@用户名或者密码错误.";
//调用登录方法.
BP.WF.Dev2Interface.Port_Login(emp.UserID);
BP.WF.Dev2Interface.Port_GenerToken();
return "登陆成功";
}
catch (Exception ex)
{
return "err@" + ex.Message;
}
}
/// <summary>
/// 执行登录
/// </summary>
/// <returns></returns>
public string Login_Init()
{
string doType = GetRequestVal("LoginType");
if (DataType.IsNullOrEmpty(doType) == false && doType.Equals("Out") == true)
{
//清空cookie
WebUser.Exit();
}
if (this.DoWhat != null && this.DoWhat.Equals("Login") == true)
{
//调用登录方法.
BP.WF.Dev2Interface.Port_Login(this.UserNo, this.SID);
return "url@Home.htm?UserNo=" + this.UserNo;
//this.Login_Submit();
//return;
}
Hashtable ht = new Hashtable();
ht.Add("SysName", BP.Difference.SystemConfig.SysName);
ht.Add("ServiceTel", BP.Difference.SystemConfig.ServiceTel);
ht.Add("CustomerName", BP.Difference.SystemConfig.CustomerName);
if (WebUser.NoOfRel == null)
{
ht.Add("UserNo", "");
ht.Add("UserName", "");
}
else
{
ht.Add("UserNo", WebUser.No);
string name = WebUser.Name;
if (DataType.IsNullOrEmpty(name) == true)
ht.Add("UserName", WebUser.No);
else
ht.Add("UserName", name);
}
return BP.Tools.Json.ToJsonEntityModel(ht);
}
#endregion 登录界面.
#region Welcome.htm 欢迎页面.
public string Welcome_Init()
{
Hashtable ht = new Hashtable();
// 待办.
ht.Add("Todlist", DBAccess.RunSQLReturnValInt("SELECT COUNT(WorkID) as Num FROM WF_GenerWorkerList WHERE IsPass=0 AND FK_Emp='" + BP.Web.WebUser.No + "'")); //流程数
//发起.
ht.Add("Start", DBAccess.RunSQLReturnValInt("SELECT COUNT(WorkID) FROM WF_GenerWorkFlow WHERE WFState > 1 AND Starter='" + BP.Web.WebUser.No + "'")); //实例数.
//逾期.
ht.Add("OverTime", DBAccess.RunSQLReturnValInt("SELECT COUNT(WorkID) FROM WF_GenerWorkFlow WHERE WFState=3 AND WFSta=1 ")); //实例数.
//退回数
ht.Add("ReturnNum", DBAccess.RunSQLReturnValInt("SELECT COUNT(WorkID) FROM WF_GenerWorkFlow WHERE WFState = 5 AND TodoEmps LIKE '%" + BP.Web.WebUser.No + ",%'"));
//草稿.
ht.Add("Darft", DBAccess.RunSQLReturnValInt("SELECT COUNT(WorkID) FROM WF_GenerWorkFlow WHERE WFState=1 AND Starter='" + BP.Web.WebUser.No + "'"));
//运行中.
ht.Add("Runing", DBAccess.RunSQLReturnValInt("SELECT COUNT(WorkID) as Num FROM WF_GenerWorkerList WHERE IsPass!=0 AND FK_Emp='" + BP.Web.WebUser.No + "'"));
return BP.Tools.Json.ToJson(ht);
}
/// <summary>
/// 流程监控折线图数据获取
/// </summary>
/// <returns></returns>
public string Welcome_EchartDataSet()
{
DataSet ds = new DataSet();
string whereStr = "";
string whereStrPuls = "";
if (Glo.CCBPMRunModel != CCBPMRunModel.GroupInc)
{
whereStr += " WHERE OrgNo = '" + WebUser.OrgNo + "'";
whereStrPuls += " AND OrgNo = '" + WebUser.OrgNo + "'";
}
#region 完成的流程-按月分析
//按期完成
string sql = "SELECT FK_NY, count(WorkID) as Num FROM WF_GenerWorkFlow WHERE WFState=3 AND SendDT<=SDTOfNode And WFSta=1 " + whereStrPuls + " GROUP BY FK_NY ";
DataTable ComplateFlowsByNY = DBAccess.RunSQLReturnTable(sql);
ComplateFlowsByNY.TableName = "ComplateFlowsByNY";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
ComplateFlowsByNY.Columns[0].ColumnName = "FK_NY";
ComplateFlowsByNY.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(ComplateFlowsByNY);
//逾期完成
sql = "SELECT FK_NY, count(WorkID) as Num FROM WF_GenerWorkFlow WHERE WFState=3 AND SendDT>SDTOfNode And WFSta=1 " + whereStrPuls + " GROUP BY FK_NY ";
DataTable OverComplateFlowsByNY = DBAccess.RunSQLReturnTable(sql);
OverComplateFlowsByNY.TableName = "OverComplateFlowsByNY";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
OverComplateFlowsByNY.Columns[0].ColumnName = "FK_NY";
OverComplateFlowsByNY.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(OverComplateFlowsByNY);
#endregion 完成的流程-按月分析
#region 运行中的流程
//按部门
//1.全部待办
if (Glo.CCBPMRunModel == CCBPMRunModel.Single)
sql = "SELECT B.Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,Port_Dept B WHERE A.FK_Dept=B.No GROUP BY B.Name";
else
sql = "SELECT B.Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,Port_Dept B WHERE A.FK_Dept=B.No AND B.OrgNo='" + WebUser.OrgNo + "' GROUP BY B.Name";
DataTable TodoListAllByDept = DBAccess.RunSQLReturnTable(sql);
TodoListAllByDept.TableName = "TodoListAllByDept";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListAllByDept.Columns[0].ColumnName = "Name";
TodoListAllByDept.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListAllByDept);
//2.退回的数据
if (Glo.CCBPMRunModel == CCBPMRunModel.Single)
sql = "SELECT B.Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,Port_Dept B,WF_GenerWorkFlow C WHERE A.FK_Dept=B.No AND A.WorkID=C.WorkID AND C.WFState=5 GROUP BY B.Name";
else
sql = "SELECT B.Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,Port_Dept B,WF_GenerWorkFlow C WHERE A.FK_Dept=B.No AND A.WorkID=C.WorkID AND C.WFState=5 AND B.OrgNo='" + WebUser.OrgNo + "' GROUP BY B.Name";
DataTable TodoListReturnByDept = DBAccess.RunSQLReturnTable(sql);
TodoListReturnByDept.TableName = "TodoListReturnByDept";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListReturnByDept.Columns[0].ColumnName = "Name";
TodoListReturnByDept.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListReturnByDept);
//3.逾期的数据
if (BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL)
{
sql = "SELECT B.Name, count(DISTINCT C.WorkID) as Num FROM WF_GenerWorkerList A,Port_Dept B,WF_GenerWorkFlow C WHERE A.FK_Dept=B.No AND A.WorkID=C.WorkID and STR_TO_DATE(A.SDT,'%Y-%m-%d %H:%i') <STR_TO_DATE(C.SDTOfNode,'%Y-%m-%d %H:%i') GROUP BY B.Name";
}
else if (BP.Difference.SystemConfig.AppCenterDBType == DBType.Oracle || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR3 || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR6)
{
sql = "SELECT B.Name, count(DISTINCT C.WorkID) as Num FROM WF_GenerWorkerList A,Port_Dept B,WF_GenerWorkFlow C WHERE A.FK_Dept=B.No AND A.WorkID=C.WorkID and REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}') AND(TO_DATE(C.SDTOfNode, 'yyyy-mm-dd hh24:mi:ss') - TO_DATE(A.SDT, 'yyyy-mm-dd hh24:mi:ss')) > 0 GROUP BY B.Name ";
sql += "UNION SELECT B.Name, count(DISTINCT C.WorkID) as Num FROM WF_GenerWorkerList A,Port_Dept B,WF_GenerWorkFlow C WHERE A.FK_Dept=B.No AND A.WorkID=C.WorkID and REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2}$') AND (TO_DATE(SDTOfNode, 'yyyy-mm-dd') - TO_DATE(SDT, 'yyyy-mm-dd')) > 0 GROUP BY B.Name";
}
else
{
sql = "SELECT B.Name, count(DISTINCT C.WorkID) as Num FROM WF_GenerWorkerList A,Port_Dept B,WF_GenerWorkFlow C WHERE A.FK_Dept=B.No AND A.WorkID=C.WorkID and convert(varchar(100),A.SDT,120) < CONVERT(varchar(100), C.SDTOfNode, 120) GROUP BY B.Name";
}
DataTable TodoListOverTByDept = DBAccess.RunSQLReturnTable(sql);
TodoListOverTByDept.TableName = "TodoListOverTByDept";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListOverTByDept.Columns[0].ColumnName = "Name";
TodoListOverTByDept.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListOverTByDept);
//4.预警的数据
//按流程
//1.全部待办
if (Glo.CCBPMRunModel == CCBPMRunModel.Single)
sql = "SELECT B.Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_Flow B WHERE A.FK_Flow=B.No GROUP BY B.Name";
else
sql = "SELECT B.Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_Flow B WHERE A.FK_Flow=B.No AND B.OrgNo='" + WebUser.OrgNo + "' GROUP BY B.Name";
DataTable TodoListAllByFlow = DBAccess.RunSQLReturnTable(sql);
TodoListAllByFlow.TableName = "TodoListAllByFlow";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListAllByFlow.Columns[0].ColumnName = "Name";
TodoListAllByFlow.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListAllByFlow);
//2.退回的数据
if (Glo.CCBPMRunModel == CCBPMRunModel.Single)
sql = "SELECT B.FlowName AS Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Flow=B.FK_Flow AND A.WorkID=B.WorkID AND B.WFState=5 GROUP BY B.FlowName";
else
sql = "SELECT B.FlowName AS Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Flow=B.FK_Flow AND A.WorkID=B.WorkID AND B.WFState=5 AND B.OrgNo='" + WebUser.OrgNo + "' GROUP BY B.FlowName";
DataTable TodoListReturnByFlow = DBAccess.RunSQLReturnTable(sql);
TodoListReturnByFlow.TableName = "TodoListReturnByFlow";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListReturnByFlow.Columns[0].ColumnName = "Name";
TodoListReturnByFlow.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListReturnByFlow);
//3.逾期的数据
if (BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL)
{
sql = "SELECT B.FlowName AS Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Flow=B.FK_Flow AND A.WorkID=B.WorkID and STR_TO_DATE(A.SDT,'%Y-%m-%d %H:%i') <STR_TO_DATE(B.SDTOfNode,'%Y-%m-%d %H:%i') GROUP BY B.FlowName";
}
else if (BP.Difference.SystemConfig.AppCenterDBType == DBType.Oracle || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR3 || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR6)
{
sql = "SELECT B.FlowName AS Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Flow=B.FK_Flow AND A.WorkID=B.WorkID and REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}') AND(TO_DATE(B.SDTOfNode, 'yyyy-mm-dd hh24:mi:ss') - TO_DATE(A.SDT, 'yyyy-mm-dd hh24:mi:ss')) > 0 GROUP BY B.FlowName ";
sql += "UNION SELECT B.FlowName AS Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Flow=B.FK_Flow AND A.WorkID=B.WorkID and REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2}$') AND (TO_DATE(B.SDTOfNode, 'yyyy-mm-dd') - TO_DATE(SDT, 'yyyy-mm-dd')) > 0 GROUP BY B.FlowName";
}
else
{
sql = "SELECT B.FlowName AS Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Flow=B.FK_Flow AND A.WorkID=B.WorkID and convert(varchar(100),A.SDT,120) < CONVERT(varchar(100), B.SDTOfNode, 120) GROUP BY B.FlowName";
}
DataTable TodoListOverTByFlow = DBAccess.RunSQLReturnTable(sql);
TodoListOverTByFlow.TableName = "TodoListOverTByFlow";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListOverTByFlow.Columns[0].ColumnName = "Name";
TodoListOverTByFlow.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListOverTByFlow);
//按人员(仅限一个部门中的人员)
//获取当前人员所在部门的所有人员
sql = "SELECT A.No,A.Name From Port_Emp A,Port_DeptEmp B Where A.No=B.FK_Emp AND B.FK_Dept='" + WebUser.FK_Dept + "' order By A.Idx";
DataTable Emps = DBAccess.RunSQLReturnTable(sql);
Emps.TableName = "Emps";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
Emps.Columns[0].ColumnName = "No";
Emps.Columns[1].ColumnName = "Name";
}
ds.Tables.Add(Emps);
//1.全部待办
sql = "SELECT FK_EmpText AS Name, count(WorkID) as Num FROM WF_GenerWorkerList WHERE FK_Dept='" + WebUser.FK_Dept + "' GROUP BY FK_EmpText";
DataTable TodoListAllByEmp = DBAccess.RunSQLReturnTable(sql);
TodoListAllByEmp.TableName = "TodoListAllByEmp";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListAllByEmp.Columns[0].ColumnName = "Name";
TodoListAllByEmp.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListAllByEmp);
//2.退回的数据
sql = "SELECT A.FK_EmpText AS Name, count( A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Dept='" + WebUser.FK_Dept + "' AND A.WorkID=B.WorkID AND B.WFState=5 GROUP BY A.FK_EmpText";
DataTable TodoListReturnByEmp = DBAccess.RunSQLReturnTable(sql);
TodoListReturnByEmp.TableName = "TodoListReturnByEmp";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListReturnByEmp.Columns[0].ColumnName = "Name";
TodoListReturnByEmp.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListReturnByEmp);
//3.逾期的数据
if (BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL)
{
sql = "SELECT A.FK_EmpText AS Name, count( A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Dept='" + WebUser.FK_Dept + "' AND A.WorkID=B.WorkID and STR_TO_DATE(A.SDT,'%Y-%m-%d %H:%i') <STR_TO_DATE(B.SDTOfNode,'%Y-%m-%d %H:%i') GROUP BY A.FK_EmpText";
}
else if (BP.Difference.SystemConfig.AppCenterDBType == DBType.Oracle || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR3 || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR6)
{
sql = "SELECT A.FK_EmpText AS Name, count( A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Dept='" + WebUser.FK_Dept + "' AND A.WorkID=B.WorkID and REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}') AND(TO_DATE(B.SDTOfNode, 'yyyy-mm-dd hh24:mi:ss') - TO_DATE(A.SDT, 'yyyy-mm-dd hh24:mi:ss')) > 0 GROUP BY A.FK_EmpText ";
sql += "UNION SELECT A.FK_EmpText AS Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Dept='" + WebUser.FK_Dept + "' AND A.WorkID=B.WorkID and REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2}$') AND (TO_DATE(B.SDTOfNode, 'yyyy-mm-dd') - TO_DATE(SDT, 'yyyy-mm-dd')) > 0 GROUP BY A.FK_EmpText";
}
else
{
sql = "SELECT A.FK_EmpText AS Name, count( A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Dept='" + WebUser.FK_Dept + "' AND A.WorkID=B.WorkID and convert(varchar(100),A.SDT,120) < CONVERT(varchar(100), B.SDTOfNode, 120) GROUP BY A.FK_EmpText";
}
DataTable TodoListOverTByEmp = DBAccess.RunSQLReturnTable(sql);
TodoListOverTByEmp.TableName = "TodoListOverTByEmp";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListOverTByEmp.Columns[0].ColumnName = "Name";
TodoListOverTByEmp.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListOverTByEmp);
#endregion 运行中的流程
return BP.Tools.Json.ToJson(ds);
}
#endregion
#region 流程监控
/// <summary>
/// 流程监控的基础数据
/// </summary>
/// <returns></returns>
public string Watchdog_Init()
{
string whereStr = "";
string whereStrPuls = "";
if (Glo.CCBPMRunModel != CCBPMRunModel.Single)
{
whereStr += " WHERE OrgNo = '" + WebUser.OrgNo + "'";
whereStrPuls += " AND OrgNo = '" + WebUser.OrgNo + "'";
}
Hashtable ht = new Hashtable();
ht.Add("FlowNum", DBAccess.RunSQLReturnValInt("SELECT COUNT(No) FROM WF_Flow " + whereStr)); //流程数
//所有的实例数量.
ht.Add("FlowInstaceNum", DBAccess.RunSQLReturnValInt("SELECT COUNT(WorkID) FROM WF_GenerWorkFlow WHERE WFState >1 " + whereStrPuls)); //实例数.
//所有的已完成数量.
ht.Add("FlowComplete", DBAccess.RunSQLReturnValInt("SELECT COUNT(WorkID) FROM WF_GenerWorkFlow WHERE WFState=3 AND WFSta=1 " + whereStrPuls)); //实例数.
//所有的待办数量.
ht.Add("TodolistNum", DBAccess.RunSQLReturnValInt("SELECT COUNT(WorkID) FROM WF_GenerWorkFlow WHERE WFState=2 " + whereStrPuls));
//退回数.
ht.Add("ReturnNum", DBAccess.RunSQLReturnValInt("SELECT COUNT(WorkID) FROM WF_GenerWorkFlow WHERE WFState=5 " + whereStrPuls));
return BP.Tools.Json.ToJson(ht);
}
/// <summary>
/// 流程监控折线图数据获取
/// </summary>
/// <returns></returns>
public string Watchdog_EchartDataSet()
{
DataSet ds = new DataSet();
string whereStr = "";
string whereStrPuls = "";
if (Glo.CCBPMRunModel != CCBPMRunModel.GroupInc)
{
whereStr += " WHERE OrgNo = '" + WebUser.OrgNo + "'";
whereStrPuls += " AND OrgNo = '" + WebUser.OrgNo + "'";
}
#region 完成的流程-按月分析
//按期完成
string sql = "SELECT FK_NY, count(WorkID) as Num FROM WF_GenerWorkFlow WHERE WFState=3 AND SendDT<=SDTOfNode And WFSta=1 " + whereStrPuls + " GROUP BY FK_NY ";
DataTable ComplateFlowsByNY = DBAccess.RunSQLReturnTable(sql);
ComplateFlowsByNY.TableName = "ComplateFlowsByNY";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
ComplateFlowsByNY.Columns[0].ColumnName = "FK_NY";
ComplateFlowsByNY.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(ComplateFlowsByNY);
//逾期完成
sql = "SELECT FK_NY, count(WorkID) as Num FROM WF_GenerWorkFlow WHERE WFState=3 AND SendDT>SDTOfNode And WFSta=1 " + whereStrPuls + " GROUP BY FK_NY ";
DataTable OverComplateFlowsByNY = DBAccess.RunSQLReturnTable(sql);
OverComplateFlowsByNY.TableName = "OverComplateFlowsByNY";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
OverComplateFlowsByNY.Columns[0].ColumnName = "FK_NY";
OverComplateFlowsByNY.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(OverComplateFlowsByNY);
#endregion 完成的流程-按月分析
#region 运行中的流程
//按部门
//1.全部待办
if (Glo.CCBPMRunModel == CCBPMRunModel.Single)
sql = "SELECT B.Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,Port_Dept B WHERE A.FK_Dept=B.No GROUP BY B.Name";
else
sql = "SELECT B.Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,Port_Dept B WHERE A.FK_Dept=B.No AND B.OrgNo='" + WebUser.OrgNo + "' GROUP BY B.Name";
DataTable TodoListAllByDept = DBAccess.RunSQLReturnTable(sql);
TodoListAllByDept.TableName = "TodoListAllByDept";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListAllByDept.Columns[0].ColumnName = "Name";
TodoListAllByDept.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListAllByDept);
//2.退回的数据
if (Glo.CCBPMRunModel == CCBPMRunModel.Single)
sql = "SELECT B.Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,Port_Dept B,WF_GenerWorkFlow C WHERE A.FK_Dept=B.No AND A.WorkID=C.WorkID AND C.WFState=5 GROUP BY B.Name";
else
sql = "SELECT B.Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,Port_Dept B,WF_GenerWorkFlow C WHERE A.FK_Dept=B.No AND A.WorkID=C.WorkID AND C.WFState=5 AND B.OrgNo='" + WebUser.OrgNo + "' GROUP BY B.Name";
DataTable TodoListReturnByDept = DBAccess.RunSQLReturnTable(sql);
TodoListReturnByDept.TableName = "TodoListReturnByDept";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListReturnByDept.Columns[0].ColumnName = "Name";
TodoListReturnByDept.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListReturnByDept);
//3.逾期的数据
if (BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL)
{
sql = "SELECT B.Name, count(DISTINCT C.WorkID) as Num FROM WF_GenerWorkerList A,Port_Dept B,WF_GenerWorkFlow C WHERE A.FK_Dept=B.No AND A.WorkID=C.WorkID and STR_TO_DATE(A.SDT,'%Y-%m-%d %H:%i') <STR_TO_DATE(C.SDTOfNode,'%Y-%m-%d %H:%i') GROUP BY B.Name";
}
else if (BP.Difference.SystemConfig.AppCenterDBType == DBType.Oracle || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR3 || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR6)
{
sql = "SELECT B.Name, count(DISTINCT C.WorkID) as Num FROM WF_GenerWorkerList A,Port_Dept B,WF_GenerWorkFlow C WHERE A.FK_Dept=B.No AND A.WorkID=C.WorkID and REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}') AND(TO_DATE(C.SDTOfNode, 'yyyy-mm-dd hh24:mi:ss') - TO_DATE(A.SDT, 'yyyy-mm-dd hh24:mi:ss')) > 0 GROUP BY B.Name ";
sql += "UNION SELECT B.Name, count(DISTINCT C.WorkID) as Num FROM WF_GenerWorkerList A,Port_Dept B,WF_GenerWorkFlow C WHERE A.FK_Dept=B.No AND A.WorkID=C.WorkID and REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2}$') AND (TO_DATE(SDTOfNode, 'yyyy-mm-dd') - TO_DATE(SDT, 'yyyy-mm-dd')) > 0 GROUP BY B.Name";
}
else
{
sql = "SELECT B.Name, count(DISTINCT C.WorkID) as Num FROM WF_GenerWorkerList A,Port_Dept B,WF_GenerWorkFlow C WHERE A.FK_Dept=B.No AND A.WorkID=C.WorkID and convert(varchar(100),A.SDT,120) < CONVERT(varchar(100), C.SDTOfNode, 120) GROUP BY B.Name";
}
DataTable TodoListOverTByDept = DBAccess.RunSQLReturnTable(sql);
TodoListOverTByDept.TableName = "TodoListOverTByDept";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListOverTByDept.Columns[0].ColumnName = "Name";
TodoListOverTByDept.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListOverTByDept);
//4.预警的数据
//按流程
//1.全部待办
if (Glo.CCBPMRunModel == CCBPMRunModel.Single)
sql = "SELECT B.Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_Flow B WHERE A.FK_Flow=B.No GROUP BY B.Name";
else
sql = "SELECT B.Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_Flow B WHERE A.FK_Flow=B.No AND B.OrgNo='" + WebUser.OrgNo + "' GROUP BY B.Name";
DataTable TodoListAllByFlow = DBAccess.RunSQLReturnTable(sql);
TodoListAllByFlow.TableName = "TodoListAllByFlow";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListAllByFlow.Columns[0].ColumnName = "Name";
TodoListAllByFlow.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListAllByFlow);
//2.退回的数据
if (Glo.CCBPMRunModel == CCBPMRunModel.Single)
sql = "SELECT B.FlowName AS Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Flow=B.FK_Flow AND A.WorkID=B.WorkID AND B.WFState=5 GROUP BY B.FlowName";
else
sql = "SELECT B.FlowName AS Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Flow=B.FK_Flow AND A.WorkID=B.WorkID AND B.WFState=5 AND B.OrgNo='" + WebUser.OrgNo + "' GROUP BY B.FlowName";
DataTable TodoListReturnByFlow = DBAccess.RunSQLReturnTable(sql);
TodoListReturnByFlow.TableName = "TodoListReturnByFlow";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListReturnByFlow.Columns[0].ColumnName = "Name";
TodoListReturnByFlow.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListReturnByFlow);
//3.逾期的数据
if (BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL)
{
sql = "SELECT B.FlowName AS Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Flow=B.FK_Flow AND A.WorkID=B.WorkID and STR_TO_DATE(A.SDT,'%Y-%m-%d %H:%i') <STR_TO_DATE(B.SDTOfNode,'%Y-%m-%d %H:%i') GROUP BY B.FlowName";
}
else if (BP.Difference.SystemConfig.AppCenterDBType == DBType.Oracle || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR3 || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR6)
{
sql = "SELECT B.FlowName AS Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Flow=B.FK_Flow AND A.WorkID=B.WorkID and REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}') AND(TO_DATE(B.SDTOfNode, 'yyyy-mm-dd hh24:mi:ss') - TO_DATE(A.SDT, 'yyyy-mm-dd hh24:mi:ss')) > 0 GROUP BY B.FlowName ";
sql += "UNION SELECT B.FlowName AS Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Flow=B.FK_Flow AND A.WorkID=B.WorkID and REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2}$') AND (TO_DATE(B.SDTOfNode, 'yyyy-mm-dd') - TO_DATE(SDT, 'yyyy-mm-dd')) > 0 GROUP BY B.FlowName";
}
else
{
sql = "SELECT B.FlowName AS Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Flow=B.FK_Flow AND A.WorkID=B.WorkID and convert(varchar(100),A.SDT,120) < CONVERT(varchar(100), B.SDTOfNode, 120) GROUP BY B.FlowName";
}
DataTable TodoListOverTByFlow = DBAccess.RunSQLReturnTable(sql);
TodoListOverTByFlow.TableName = "TodoListOverTByFlow";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListOverTByFlow.Columns[0].ColumnName = "Name";
TodoListOverTByFlow.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListOverTByFlow);
//按人员(仅限一个部门中的人员)
//获取当前人员所在部门的所有人员
sql = "SELECT A.No,A.Name From Port_Emp A,Port_DeptEmp B Where A.No=B.FK_Emp AND B.FK_Dept='" + WebUser.FK_Dept + "' order By A.Idx";
DataTable Emps = DBAccess.RunSQLReturnTable(sql);
Emps.TableName = "Emps";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
Emps.Columns[0].ColumnName = "No";
Emps.Columns[1].ColumnName = "Name";
}
ds.Tables.Add(Emps);
//1.全部待办
sql = "SELECT FK_EmpText AS Name, count(WorkID) as Num FROM WF_GenerWorkerList WHERE FK_Dept='" + WebUser.FK_Dept + "' GROUP BY FK_EmpText";
DataTable TodoListAllByEmp = DBAccess.RunSQLReturnTable(sql);
TodoListAllByEmp.TableName = "TodoListAllByEmp";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListAllByEmp.Columns[0].ColumnName = "Name";
TodoListAllByEmp.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListAllByEmp);
//2.退回的数据
sql = "SELECT A.FK_EmpText AS Name, count( A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Dept='" + WebUser.FK_Dept + "' AND A.WorkID=B.WorkID AND B.WFState=5 GROUP BY A.FK_EmpText";
DataTable TodoListReturnByEmp = DBAccess.RunSQLReturnTable(sql);
TodoListReturnByEmp.TableName = "TodoListReturnByEmp";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListReturnByEmp.Columns[0].ColumnName = "Name";
TodoListReturnByEmp.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListReturnByEmp);
//3.逾期的数据
if (BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL)
{
sql = "SELECT A.FK_EmpText AS Name, count( A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Dept='" + WebUser.FK_Dept + "' AND A.WorkID=B.WorkID and STR_TO_DATE(A.SDT,'%Y-%m-%d %H:%i') <STR_TO_DATE(B.SDTOfNode,'%Y-%m-%d %H:%i') GROUP BY A.FK_EmpText";
}
else if (BP.Difference.SystemConfig.AppCenterDBType == DBType.Oracle || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR3 || BP.Difference.SystemConfig.AppCenterDBType == DBType.KingBaseR6)
{
sql = "SELECT A.FK_EmpText AS Name, count( A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Dept='" + WebUser.FK_Dept + "' AND A.WorkID=B.WorkID and REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}') AND(TO_DATE(B.SDTOfNode, 'yyyy-mm-dd hh24:mi:ss') - TO_DATE(A.SDT, 'yyyy-mm-dd hh24:mi:ss')) > 0 GROUP BY A.FK_EmpText ";
sql += "UNION SELECT A.FK_EmpText AS Name, count(DISTINCT A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Dept='" + WebUser.FK_Dept + "' AND A.WorkID=B.WorkID and REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2}$') AND (TO_DATE(B.SDTOfNode, 'yyyy-mm-dd') - TO_DATE(SDT, 'yyyy-mm-dd')) > 0 GROUP BY A.FK_EmpText";
}
else
{
sql = "SELECT A.FK_EmpText AS Name, count( A.WorkID) as Num FROM WF_GenerWorkerList A,WF_GenerWorkFlow B WHERE A.FK_Dept='" + WebUser.FK_Dept + "' AND A.WorkID=B.WorkID and convert(varchar(100),A.SDT,120) < CONVERT(varchar(100), B.SDTOfNode, 120) GROUP BY A.FK_EmpText";
}
DataTable TodoListOverTByEmp = DBAccess.RunSQLReturnTable(sql);
TodoListOverTByEmp.TableName = "TodoListOverTByEmp";
if (SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
TodoListOverTByEmp.Columns[0].ColumnName = "Name";
TodoListOverTByEmp.Columns[1].ColumnName = "Num";
}
ds.Tables.Add(TodoListOverTByEmp);
#endregion 运行中的流程
return BP.Tools.Json.ToJson(ds);
}
#endregion 流程监控
}
}