using System.Collections;
using System.Data;
using BP.DA;
using BP.Difference;
using BP.Sys;
using BP.Web;
namespace BP.WF.HttpHandler
{
///
/// 页面功能实体
///
public class DataUser_AppCoder : BP.WF.HttpHandler.DirectoryPageBase
{
///
/// 自动执行定时任务.
///
///
public string AutoTask_Init()
{
BP.WF.DTS.ccbpmServices dts = new BP.WF.DTS.ccbpmServices();
dts.Do();
return "执行成功:"+DataType.CurrentDateCNOfLong;
}
///
/// 构造函数
///
public DataUser_AppCoder()
{
}
#region 欢迎页面初始化.
///
/// 欢迎页面初始化-获得数量.
///
///
public string FlowDesignerWelcome_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)); //流程数
//获得节点的数量
if (Glo.CCBPMRunModel == CCBPMRunModel.Single)
ht.Add("NodeNum", DBAccess.RunSQLReturnValInt("SELECT COUNT(NodeID) FROM WF_Node " + whereStr)); //节点数据
else
{
string mysql = "SELECT COUNT(B.NodeID) as Num FROM WF_Flow A, WF_Node B WHERE A.No=B.FK_Flow AND A.OrgNo='"+WebUser.OrgNo+"' ";
ht.Add("NodeNum", DBAccess.RunSQLReturnValInt(mysql)); //节点数据.
}
//表单数.
ht.Add("FromNum", DBAccess.RunSQLReturnValInt("SELECT COUNT(No) FROM Sys_MapData WHERE FK_FormTree !=''" + whereStrPuls + " AND FK_FormTree IS NOT NULL ")); //表单数
//所有的实例数量.
ht.Add("FlowInstaceNum", DBAccess.RunSQLReturnValInt("SELECT COUNT(WorkID) FROM WF_GenerWorkFlow WHERE WFState >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));
//说有逾期的数量. 应该根据 WF_GenerWorkerList的 SDT 字段来求.
if (SystemConfig.AppCenterDBType == DBType.MySQL)
{
ht.Add("OverTimeNum", DBAccess.RunSQLReturnValInt("SELECT COUNT(*) FROM WF_GenerWorkerList WHERE IsPass=0 AND STR_TO_DATE(SDT,'%Y-%m-%d %H:%i') < now()"));
}
else if (SystemConfig.AppCenterDBType == DBType.Oracle || SystemConfig.AppCenterDBType == DBType.KingBaseR3 || SystemConfig.AppCenterDBType == DBType.KingBaseR6)
{
string sql = "SELECT COUNT(*) from (SELECT * FROM WF_GenerWorkerList WHERE IsPass=0 AND REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}') AND (sysdate - TO_DATE(SDT, 'yyyy-mm-dd hh24:mi:ss')) > 0 ";
sql += "UNION SELECT * FROM WF_GenerWorkerList WHERE REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2}$') AND (sysdate - TO_DATE(SDT, 'yyyy-mm-dd')) > 0 )";
ht.Add("OverTimeNum", DBAccess.RunSQLReturnValInt(sql));
}
else if (SystemConfig.AppCenterDBType == DBType.PostgreSQL)
{
ht.Add("OverTimeNum", DBAccess.RunSQLReturnValInt("SELECT COUNT(*) FROM WF_GenerWorkerList WHERE IsPass=0 AND to_timestamp(CASE WHEN SDT='无' THEN '' ELSE SDT END, 'yyyy-mm-dd hh24:MI:SS') < NOW()"));
}
else
{
ht.Add("OverTimeNum", DBAccess.RunSQLReturnValInt("SELECT COUNT(*) FROM WF_GenerWorkerList WHERE IsPass=0 AND convert(varchar(100),SDT,120) < CONVERT(varchar(100), GETDATE(), 120)"));
}
return BP.Tools.Json.ToJson(ht);
}
///
/// 获得数量 流程饼图,部门柱状图,月份折线图.
///
///
public string FlowDesignerWelcome_DataSet()
{
string whereStr = "";
string whereStrPuls = "";
if (Glo.CCBPMRunModel != CCBPMRunModel.Single )
{
whereStr += " WHERE OrgNo = '" + WebUser.OrgNo + "'";
whereStrPuls += " AND OrgNo = '" + WebUser.OrgNo + "'";
}
DataSet ds = new DataSet();
#region 实例分析
//月份分组.
string sql = "SELECT FK_NY, count(WorkID) as Num FROM WF_GenerWorkFlow WHERE WFState >1 " + whereStrPuls + " GROUP BY FK_NY ";
DataTable FlowsByNY = DBAccess.RunSQLReturnTable(sql);
FlowsByNY.TableName = "FlowsByNY";
ds.Tables.Add(FlowsByNY);
//部门分组.
sql = "SELECT DeptName, count(WorkID) as Num FROM WF_GenerWorkFlow WHERE WFState >1 " + whereStrPuls + " GROUP BY DeptName ";
DataTable FlowsByDept = DBAccess.RunSQLReturnTable(sql);
FlowsByDept.TableName = "FlowsByDept";
ds.Tables.Add(FlowsByDept);
#endregion 实例分析。
#region 待办 分析
//待办 - 部门分组.
if (Glo.CCBPMRunModel == CCBPMRunModel.Single)
sql = "SELECT B.Name, count(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(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 TodolistByDept = DBAccess.RunSQLReturnTable(sql);
TodolistByDept.TableName = "TodolistByDept";
ds.Tables.Add(TodolistByDept);
//待办的 - 流程分组.
if (Glo.CCBPMRunModel == CCBPMRunModel.Single)
sql = "SELECT c.FlowName as name, count(a.WorkID) as value FROM WF_GenerWorkerList A,Port_Dept B, WF_GenerWorkFlow C WHERE A.FK_Dept=B.No AND A.WorkID=C.WorkID AND A.IsPass=0 GROUP BY C.FlowName";
else
sql = "SELECT c.FlowName as name, count(a.WorkID) as value FROM WF_GenerWorkerList A,Port_Dept B, WF_GenerWorkFlow C WHERE A.FK_Dept=B.No AND A.WorkID=C.WorkID AND A.IsPass=0 AND C.OrgNo='" + WebUser.OrgNo+"' GROUP BY C.FlowName";
//sql = "SELECT FlowName as name, count(WorkID) as value FROM WF_EmpWorks WHERE WFState >1 GROUP BY FlowName";
DataTable TodolistByFlow = DBAccess.RunSQLReturnTable(sql);
TodolistByFlow.TableName = "TodolistByFlow";
ds.Tables.Add(TodolistByFlow);
#endregion 待办。
#region 逾期 分析.
//逾期的 - 流程分组.
if (SystemConfig.AppCenterDBType == DBType.MySQL)
{
sql = "SELECT FlowName as name, count(WorkID) as value FROM WF_EmpWorks WHERE WFState >1 "+ whereStrPuls+" and STR_TO_DATE(SDT,'%Y-%m-%d %H:%i') < now() GROUP BY FlowName";
}
else if (SystemConfig.AppCenterDBType == DBType.Oracle || SystemConfig.AppCenterDBType == DBType.KingBaseR3 || SystemConfig.AppCenterDBType == DBType.KingBaseR6)
{
sql = "SELECT FlowName as name, count(WorkID) as value FROM WF_EmpWorks WHERE WFState >1 " + whereStrPuls + " and REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}') AND(sysdate - TO_DATE(SDT, 'yyyy-mm-dd hh24:mi:ss')) > 0 GROUP BY FlowName ";
sql += "UNION SELECT FlowName as name, count(WorkID) as value FROM WF_EmpWorks WHERE WFState >1 " + whereStrPuls + " and REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2}$') AND (sysdate - TO_DATE(SDT, 'yyyy-mm-dd')) > 0 GROUP BY FlowName";
}
else if (SystemConfig.AppCenterDBType == DBType.PostgreSQL)
{
sql = "SELECT FlowName as name, count(WorkID) as value FROM WF_EmpWorks WHERE WFState >1 " + whereStrPuls + " and to_timestamp(CASE WHEN SDT='无' THEN '' ELSE SDT END, 'yyyy-mm-dd hh24:MI:SS') < NOW() GROUP BY FlowName";
}
else
{
sql = "SELECT FlowName as name, count(WorkID) as value FROM WF_EmpWorks WHERE WFState >1 " + whereStrPuls + " and convert(varchar(100),SDT,120) < CONVERT(varchar(100), GETDATE(), 120) GROUP BY FlowName";
}
sql = "SELECT FlowName as name, count(WorkID) as value FROM WF_EmpWorks WHERE WFState >1 " + whereStrPuls + " GROUP BY FlowName";
DataTable OverTimeByFlow = DBAccess.RunSQLReturnTable(sql);
OverTimeByFlow.TableName = "OverTimeByFlow";
ds.Tables.Add(OverTimeByFlow);
//逾期的 - 部门分组.
if (SystemConfig.AppCenterDBType == DBType.MySQL)
{
sql = "SELECT DeptName, count(WorkID) as Num FROM WF_EmpWorks WHERE WFState >1 " + whereStrPuls + " and STR_TO_DATE(SDT,'%Y-%m-%d %H:%i') < now() GROUP BY DeptName";
}
else if (SystemConfig.AppCenterDBType == DBType.Oracle || SystemConfig.AppCenterDBType == DBType.KingBaseR3 || SystemConfig.AppCenterDBType == DBType.KingBaseR6)
{
sql = "SELECT DeptName, count(WorkID) as Num FROM WF_EmpWorks WHERE WFState >1 " + whereStrPuls + " and REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}') AND(sysdate - TO_DATE(SDT, 'yyyy-mm-dd hh24:mi:ss')) > 0 GROUP BY DeptName ";
sql += "UNION SELECT DeptName, count(WorkID) as Num FROM WF_EmpWorks WHERE WFState >1 " + whereStrPuls + " and REGEXP_LIKE(SDT, '^[0-9]{4}-[0-9]{2}-[0-9]{2}$') AND (sysdate - TO_DATE(SDT, 'yyyy-mm-dd')) > 0 GROUP BY DeptName";
}
else if (SystemConfig.AppCenterDBType == DBType.PostgreSQL)
{
sql = "SELECT DeptName, count(WorkID) as Num FROM WF_EmpWorks WHERE WFState >1 " + whereStrPuls + " and to_timestamp(CASE WHEN SDT='无' THEN '' ELSE SDT END, 'yyyy-mm-dd hh24:MI:SS') < NOW() GROUP BY DeptName";
}
else
{
sql = "SELECT DeptName, count(WorkID) as Num FROM WF_EmpWorks WHERE WFState >1 " + whereStrPuls + " and convert(varchar(100),SDT,120) < CONVERT(varchar(100), GETDATE(), 120) GROUP BY DeptName";
}
//sql = "SELECT DeptName, count(WorkID) as Num FROM WF_EmpWorks WHERE WFState >1 GROUP BY DeptName";
DataTable OverTimeByDept = DBAccess.RunSQLReturnTable(sql);
OverTimeByDept.TableName = "OverTimeByDept";
ds.Tables.Add(OverTimeByDept);
#endregion 逾期。
return BP.Tools.Json.ToJson(ds);
}
#endregion 欢迎页面初始化.
}
}