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.

979 lines
36 KiB
Plaintext

9 months ago
using System;
using System.Collections.Generic;
using System.Collections;
using System.Data;
using System.Text;
using System.Web;
using BP.DA;
using BP.Sys;
using BP.Web;
using BP.Port;
using BP.En;
using BP.WF;
using BP.WF.Rpt;
using BP.WF.Template;
using BP.WF.Data;
using BP.Sys.XML;
using BP.Difference;
namespace BP.Cloud.HttpHandler
{
/// <summary>
/// 页面功能实体
/// </summary>
public class App_OneFrm_FrmSearch : BP.WF.HttpHandler.DirectoryPageBase
{
#region 属性.
/// <summary>
/// 查询类型
/// </summary>
public string SearchType
{
get
{
string val = this.GetRequestVal("SearchType");
if (val == null || val.Equals(""))
val = this.GetRequestVal("GroupType");
return val;
}
}
/// <summary>
/// 分析类型
/// </summary>
public string GroupType
{
get
{
return this.GetRequestVal("GroupType");
}
}
public bool IsContainsNDYF
{
get
{
return this.GetRequestValBoolen("IsContainsNDYF");
}
}
#endregion 属性.
/// <summary>
/// 构造函数
/// </summary>
public App_OneFrm_FrmSearch()
{
}
#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 执行父类的重写方法.
/// <summary>
/// 获取单流程查询条件
/// </summary>
/// <returns></returns>
public string FrmSearch_InitToolBar()
{
if (string.IsNullOrWhiteSpace(this.FrmID))
return "err@参数FrmID不能为空";
#region 用户查询条件信息 不存在注册
//默认显示的字段
string selectFields = "," + GERptAttr.Title + "," + GERptAttr.BillNo + ",StarterName ," + GERptAttr.RDT + "," + GERptAttr.FK_Dept + ",BillState,";
UserRegedit ur = new UserRegedit();
string pk = WebUser.No + this.FrmID + "_SearchAttrs";
ur.SetValByKey("MyPK", pk);
if (ur.RetrieveFromDBSources() == 0)
{
ur.SetValByKey(UserRegeditAttr.FK_Emp, WebUser.No);
ur.SetValByKey(UserRegeditAttr.CfgKey, this.FrmID + "_SearchAttrs");
ur.SetPara("SelectFields", selectFields);
ur.SetPara("IsSearchKeys", 1);
ur.SetValByKey(UserRegeditAttr.OrderBy, "OID");
ur.SetValByKey(UserRegeditAttr.OrderWay, " asc ");
ur.Insert();
}
if (DataType.IsNullOrEmpty(ur.GetParaString("SelectFields")) == true)
{
if (DataType.IsNullOrEmpty(ur.GetParaString("SelectFields")) == true)
ur.SetPara("SelectFields", selectFields);
ur.Update();
}
#endregion 用户查询条件
DataSet ds = new DataSet();
BP.Cloud.Sys.MapData md = new BP.Cloud.Sys.MapData(this.FrmID);
#region 关键字 时间查询条件
md.SetPara("DTSearchWay", ur.GetParaInt("DTSearchWay"));
md.SetPara("DTSearchKey", ur.GetParaString("DTSearchKey"));
md.SetPara("IsSearchKey", ur.GetParaString("IsSearchKeys"));
md.SetPara("StringSearchKeys", ur.GetParaString("StringSearchKeys"));
md.SetPara("SearchKey", ur.SearchKey);
if (md.DTSearchWay != DTSearchWay.None)
{
MapAttr mapAttr = new MapAttr(this.FrmID, ur.GetParaString("DTSearchKey"));
md.SetPara("DTSearchLabel", mapAttr.Name);
if (md.DTSearchWay == DTSearchWay.ByDate)
{
md.SetPara("DTFrom", ur.GetValStringByKey(UserRegeditAttr.DTFrom));
md.SetPara("DTTo", ur.GetValStringByKey(UserRegeditAttr.DTTo));
}
else
{
md.SetPara("DTFrom", ur.GetValStringByKey(UserRegeditAttr.DTFrom));
md.SetPara("DTTo", ur.GetValStringByKey(UserRegeditAttr.DTTo));
}
}
#endregion 关键字时间查询条件
ds.Tables.Add(md.ToDataTableField("Sys_MapData"));
#region 外键枚举的查询条件
MapAttrs attrs = new MapAttrs(this.FrmID);
DataTable dt = new DataTable();
dt.Columns.Add("Field");
dt.Columns.Add("Name");
dt.Columns.Add("Width");
dt.Columns.Add("UIContralType");
dt.TableName = "Attrs";
string[] ctrls = ur.GetParaString("RptDDLSearchKeys").Split('*');
MapAttr attr;
foreach (string ctrl in ctrls)
{
//增加判断如果URL中有传参则不进行此SearchAttr的过滤条件显示context.Request.QueryString[ctrl]
if (string.IsNullOrWhiteSpace(ctrl) || !DataType.IsNullOrEmpty(HttpContextHelper.RequestParams(ctrl)))
continue;
attr = attrs.GetEntityByKey(MapAttrAttr.KeyOfEn, ctrl) as MapAttr;
if (attr == null)
continue;
DataRow dr = dt.NewRow();
dr["Field"] = attr.KeyOfEn;
dr["Name"] = attr.HisAttr.Desc;
dr["Width"] = attr.UIWidth; //下拉框显示的宽度.
dr["UIContralType"] = attr.HisAttr.UIContralType;
dt.Rows.Add(dr);
Attr ar = attr.HisAttr;
//判读该字段是否是枚举
if (ar.IsEnum == true)
{
SysEnums ses = new SysEnums();
ses.Retrieve(SysEnumAttr.EnumKey, attr.UIBindKey, SysEnumAttr.OrgNo, WebUser.OrgNo);
if(ses.Count == 0)
{
QueryObject qo = new QueryObject(ses);
qo.AddWhere(SysEnumAttr.EnumKey, attr.UIBindKey);
qo.addAnd();
qo.AddWhereIsNull(SysEnumAttr.OrgNo);
qo.DoQuery();
}
DataTable dtEnum = ses.ToDataTableField();
dtEnum.TableName = attr.KeyOfEn;
ds.Tables.Add(dtEnum);
continue;
}
//判断是否是外键
if (ar.IsFK == true)
{
Entities ensFK = ar.HisFKEns;
ensFK.RetrieveAll();
DataTable dtEn = ensFK.ToDataTableField();
dtEn.TableName = ar.Key;
ds.Tables.Add(dtEn);
continue;
}
if (DataType.IsNullOrEmpty(ar.UIBindKey) == false
&& ds.Tables.Contains(ar.Key) == false)
{
//获取SQl
string sql = BP.WF.Glo.DealExp(attr.UIBindKey, null, null);
DataTable dtSQl = DBAccess.RunSQLReturnTable(sql);
foreach (DataColumn col in dtSQl.Columns)
{
string colName = col.ColumnName.ToLower();
switch (colName)
{
case "no":
col.ColumnName = "No";
break;
case "name":
col.ColumnName = "Name";
break;
case "parentno":
col.ColumnName = "ParentNo";
break;
default:
break;
}
}
dtSQl.TableName = ar.Key;
ds.Tables.Add(dtSQl);
}
}
ds.Tables.Add(dt);
#endregion 外键枚举的查询条件
return BP.Tools.Json.ToJson(ds);
}
/// <summary>
/// 单流程查询显示的列
/// </summary>
/// <returns></returns>
public string FrmSearch_MapAttrs()
{
//查询出单流程的所有字段
MapAttrs attrsOfAll = new MapAttrs();
attrsOfAll.Retrieve(MapAttrAttr.FK_MapData, this.FK_MapData);
MapAttrs mattrs = new MapAttrs();
foreach (MapAttr mapAttr in attrsOfAll)
{
if (mapAttr.KeyOfEn.Equals(GERptAttr.AtPara) || mapAttr.KeyOfEn.Equals(GERptAttr.OID) || mapAttr.KeyOfEn.Equals("OrgNo"))
continue;
//我创建的
if (this.SearchType.Equals("My") == true
&& (mapAttr.KeyOfEn.Equals(GERptAttr.FK_Dept) || mapAttr.KeyOfEn.Equals("StarterName") || mapAttr.KeyOfEn.Equals("Starter")))
continue;
//我部门创建的
if (this.SearchType.Equals("MyDept") == true && (mapAttr.KeyOfEn.Equals(GERptAttr.FK_Dept) || mapAttr.KeyOfEn.Equals("Starter")))
continue;
mattrs.AddEntity(mapAttr);
}
return BP.Tools.Json.ToJson(mattrs.ToDataTableField());
}
/// <summary>
/// 单流程查询数据集合
/// </summary>
/// <returns></returns>
public string FrmSearch_Data()
{
//当前用户查询信息表
UserRegedit ur = new UserRegedit(WebUser.No, this.FrmID + "_SearchAttrs");
//流程表单对应的流程数据
GEEntitys ens = new GEEntitys(this.FrmID);
QueryObject qo = FrmSearch_QuerySQL(ens, ur);
ur.SetPara("Count", qo.GetCount());
ur.Update();
qo.DoQuery("OID", this.PageSize, this.PageIdx);
return BP.Tools.Json.ToJson(ens.ToDataTableField("FlowSearch_Data"));
}
private QueryObject FrmSearch_QuerySQL(GEEntitys ens, UserRegedit ur)
{
//表单属性
BP.Cloud.Sys.MapData mapData = new BP.Cloud.Sys.MapData(this.FrmID);
MapAttrs attrs = new MapAttrs(this.FrmID);
QueryObject qo = new QueryObject(ens);
switch (this.SearchType)
{
case "My": //我发起的.
qo.AddWhere("Starter", WebUser.No);
break;
case "MyDept": //我部门发起的.
if (mapData.GetParaBoolen("IsSearchNextLeavel") == false)
{
//只查本部门及兼职部门
qo.AddWhereInSQL(GERptAttr.FK_Dept, "SELECT FK_Dept From Port_DeptEmp Where FK_Emp='" + WebUser.No + "'");
}
else
{
//查本部门及子级
string sql = "SELECT FK_Dept From Port_DeptEmp Where FK_Emp='" + WebUser.No + "'";
sql += " UNION ";
sql += "SELECT No AS FK_Dept From Port_Dept Where ParentNo IN(SELECT FK_Dept From Port_DeptEmp Where FK_Emp='" + WebUser.No + "')";
qo.AddWhereInSQL(GERptAttr.FK_Dept, sql);
}
break;
default:
throw new Exception("err@" + this.SearchType + "标记错误.");
}
#region 关键字查询
string searchKey = ""; //关键字查询
if (ur.GetParaBoolen("IsSearchKeys"))
searchKey = ur.SearchKey;
if (ur.GetParaBoolen("IsSearchKeys") && DataType.IsNullOrEmpty(searchKey) == false && searchKey.Length >= 1)
{
int i = 0;
Attr attr;
foreach (MapAttr mapAttr in attrs)
{
attr = mapAttr.HisAttr;
switch (attr.MyFieldType)
{
case FieldType.Enum:
case FieldType.FK:
case FieldType.PKFK:
continue;
default:
break;
}
if (attr.MyDataType != DataType.AppString)
continue;
if (attr.MyFieldType == FieldType.RefText)
continue;
if (attr.Key == "FK_Dept")
continue;
i++;
if (i == 1)
{
qo.addAnd();
qo.addLeftBracket();
if (BP.Difference.SystemConfig.AppCenterDBVarStr == "@" || BP.Difference.SystemConfig.AppCenterDBVarStr == "?")
qo.AddWhere(attr.Key, " LIKE ", BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL ? (" CONCAT('%'," + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey,'%')") : (" '%'+" + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey+'%'"));
else
qo.AddWhere(attr.Key, " LIKE ", " '%'||" + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey||'%'");
continue;
}
qo.addOr();
if (BP.Difference.SystemConfig.AppCenterDBVarStr == "@" || BP.Difference.SystemConfig.AppCenterDBVarStr == "?")
qo.AddWhere(attr.Key, " LIKE ", BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL ? ("CONCAT('%'," + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey,'%')") : ("'%'+" + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey+'%'"));
else
qo.AddWhere(attr.Key, " LIKE ", "'%'||" + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey||'%'");
}
qo.MyParas.Add("SKey", searchKey);
qo.addRightBracket();
}
else if (DataType.IsNullOrEmpty(ur.GetParaString("StringSearchKeys")) == false)
{
string field = "";//字段名
string fieldValue = "";//字段值
int idx = 0;
//获取查询的字段
string[] searchFields = ur.GetParaString("StringSearchKeys").Split('*');
foreach (String str in searchFields)
{
if (DataType.IsNullOrEmpty(str) == true)
continue;
//字段名
string[] items = str.Split(',');
if (items.Length == 2 && DataType.IsNullOrEmpty(items[0]) == true)
continue;
field = items[0];
//字段名对应的字段值
fieldValue = ur.GetParaString(field);
if (DataType.IsNullOrEmpty(fieldValue) == true)
continue;
idx++;
if (idx == 1)
{
qo.addAnd();
/* 第一次进来。 */
qo.addLeftBracket();
if (BP.Difference.SystemConfig.AppCenterDBVarStr == "@" || BP.Difference.SystemConfig.AppCenterDBVarStr == "?")
qo.AddWhere(field, " LIKE ", BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL ? (" CONCAT('%'," + BP.Difference.SystemConfig.AppCenterDBVarStr + field + ",'%')") : (" '%'+" + BP.Difference.SystemConfig.AppCenterDBVarStr + field + "+'%'"));
else
qo.AddWhere(field, " LIKE ", " '%'||" + BP.Difference.SystemConfig.AppCenterDBVarStr + field + "||'%'");
qo.MyParas.Add(field, fieldValue);
continue;
}
qo.addAnd();
if (BP.Difference.SystemConfig.AppCenterDBVarStr == "@" || BP.Difference.SystemConfig.AppCenterDBVarStr == "?")
qo.AddWhere(field, " LIKE ", BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL ? ("CONCAT('%'," + BP.Difference.SystemConfig.AppCenterDBVarStr + field + ",'%')") : ("'%'+" + BP.Difference.SystemConfig.AppCenterDBVarStr + field + "+'%'"));
else
qo.AddWhere(field, " LIKE ", "'%'||" + BP.Difference.SystemConfig.AppCenterDBVarStr + field + "||'%'");
qo.MyParas.Add(field, fieldValue);
}
if (idx != 0)
qo.addRightBracket();
}
#endregion 关键字查询
#region Url传参条件
string val = "";
List<string> keys = new List<string>();
foreach (MapAttr attr in attrs)
{
if (DataType.IsNullOrEmpty(HttpContextHelper.RequestParams(attr.KeyOfEn)))
continue;
qo.addAnd();
qo.addLeftBracket();
val = HttpContextHelper.RequestParams(attr.KeyOfEn);
switch (attr.MyDataType)
{
case DataType.AppBoolean:
qo.AddWhere(attr.KeyOfEn, Convert.ToBoolean(int.Parse(val)));
break;
case DataType.AppDate:
case DataType.AppDateTime:
case DataType.AppString:
qo.AddWhere(attr.KeyOfEn, val);
break;
case DataType.AppDouble:
case DataType.AppFloat:
case DataType.AppMoney:
qo.AddWhere(attr.KeyOfEn, double.Parse(val));
break;
case DataType.AppInt:
qo.AddWhere(attr.KeyOfEn, int.Parse(val));
break;
default:
break;
}
qo.addRightBracket();
if (keys.Contains(attr.KeyOfEn) == false)
keys.Add(attr.KeyOfEn);
}
#endregion
#region 过滤条件
Dictionary<string, string> kvs = ur.GetVals();
foreach (MapAttr attr1 in attrs)
{
Attr attr = attr1.HisAttr;
//此处做判断如果在URL中已经传了参数则不算SearchAttrs中的设置
if (keys.Contains(attr.Key))
continue;
if (attr.MyFieldType == FieldType.RefText)
continue;
string selectVal = string.Empty;
string cid = string.Empty;
switch (attr.UIContralType)
{
case UIContralType.DDL:
case UIContralType.RadioBtn:
cid = attr.Key;
if (kvs.ContainsKey(cid) == false || string.IsNullOrWhiteSpace(kvs[cid]))
continue;
selectVal = kvs[cid];
if (selectVal == "all" || selectVal == "-1")
continue;
qo.addAnd();
qo.addLeftBracket();
string deptName = BP.Sys.Base.Glo.DealClassEntityName("BP.Port.Depts");
if (attr.UIBindKey.Equals(deptName) == true) //判断特殊情况。
qo.AddWhere(attr.Key, " LIKE ", selectVal + "%");
else
qo.AddWhere(attr.Key, selectVal);
qo.addRightBracket();
break;
default:
break;
}
}
#endregion
#region 日期处理
if ((DTSearchWay)ur.GetParaInt("DTSearchWay") != DTSearchWay.None)
{
string dtKey = ur.GetParaString("DTSearchKey");
string dtFrom = ur.GetValStringByKey(UserRegeditAttr.DTFrom).Trim();
string dtTo = ur.GetValStringByKey(UserRegeditAttr.DTTo).Trim();
if (DataType.IsNullOrEmpty(dtFrom) == true)
{
if (mapData.DTSearchWay == DTSearchWay.ByDate)
dtFrom = "1900-01-01";
else
dtFrom = "1900-01-01 00:00";
}
if (DataType.IsNullOrEmpty(dtTo) == true)
{
if ((DTSearchWay)ur.GetParaInt("DTSearchWay") == DTSearchWay.ByDate)
dtTo = "2999-01-01";
else
dtTo = "2999-12-31 23:59";
}
if ((DTSearchWay)ur.GetParaInt("DTSearchWay") == DTSearchWay.ByDate)
{
qo.addAnd();
qo.addLeftBracket();
qo.SQL = dtKey + " >= '" + dtFrom + "'";
qo.addAnd();
qo.SQL = dtKey + " <= '" + dtTo + "'";
qo.addRightBracket();
}
if ((DTSearchWay)ur.GetParaInt("DTSearchWay") == DTSearchWay.ByDateTime)
{
qo.addAnd();
qo.addLeftBracket();
qo.SQL = dtKey + " >= '" + dtFrom + " 00:00'";
qo.addAnd();
qo.SQL = dtKey + " <= '" + dtTo + " 23:59'";
qo.addRightBracket();
}
}
#endregion 日期处理
qo.AddWhere(" AND BillState!=0 ");
if (DataType.IsNullOrEmpty(ur.OrderBy) == false)
if (ur.OrderWay.ToUpper().Equals("DESC") == true)
qo.addOrderByDesc(ur.OrderBy);
else
qo.addOrderBy(ur.OrderBy);
return qo;
}
/// <summary>
///获取分组的外键、枚举
/// </summary>
/// <returns></returns>
public string Group_ContentAttrs()
{
//获得
Entities ens = ClassFactory.GetEns(this.FrmID);
if (ens == null)
return "err@参数FrnID不能为空";
Entity en = ens.GetNewEntity;
Map map = ens.GetNewEntity.EnMapInTime;
Attrs attrs = map.Attrs;
DataTable dt = new DataTable();
dt.Columns.Add("Field");
dt.Columns.Add("Name");
dt.Columns.Add("Checked");
dt.TableName = "Attrs";
//获取注册信心表
UserRegedit ur = new UserRegedit(WebUser.No, this.FrmID + "_Group");
//判断是否已经选择分组
bool contentFlag = false;
foreach (Attr attr in attrs)
{
if (attr.UIContralType == UIContralType.DDL || attr.UIContralType == UIContralType.RadioBtn)
{
DataRow dr = dt.NewRow();
dr["Field"] = attr.Key;
dr["Name"] = attr.Desc;
// 根据状态 设置信息.
if (ur.Vals.IndexOf(attr.Key) != -1)
{
dr["Checked"] = "true";
contentFlag = true;
}
dt.Rows.Add(dr);
}
}
if (contentFlag == false && dt.Rows.Count != 0)
dt.Rows[0]["Checked"] = "true";
return BP.Tools.Json.ToJson(dt);
}
public string Group_Analysis()
{
//获得
Entities ens = ClassFactory.GetEns(this.FrmID);
if (ens == null)
return "err@类名错误:" + this.FrmID;
Entity en = ens.GetNewEntity;
Map map = ens.GetNewEntity.EnMapInTime;
DataSet ds = new DataSet();
//获取注册信息表
UserRegedit ur = new UserRegedit(WebUser.No, this.FrmID + "_Group");
DataTable dt = new DataTable();
dt.Columns.Add("Field");
dt.Columns.Add("Name");
dt.Columns.Add("Checked");
dt.TableName = "Attrs";
//默认手动添加一个求数量的分析项
DataRow dtr = dt.NewRow();
dtr["Field"] = "Group_Number";
dtr["Name"] = "数量";
dtr["Checked"] = "true";
dt.Rows.Add(dtr);
DataTable ddlDt = new DataTable();
ddlDt.TableName = "Group_Number";
ddlDt.Columns.Add("No");
ddlDt.Columns.Add("Name");
ddlDt.Columns.Add("Selected");
DataRow ddlDr = ddlDt.NewRow();
ddlDr["No"] = "SUM";
ddlDr["Name"] = "求和";
ddlDr["Selected"] = "true";
ddlDt.Rows.Add(ddlDr);
ds.Tables.Add(ddlDt);
foreach (Attr attr in map.Attrs)
{
if (attr.IsPK || attr.IsNum == false)
continue;
if (attr.UIContralType != UIContralType.TB)
continue;
if (attr.UIVisible == false)
continue;
if (attr.MyFieldType == FieldType.FK)
continue;
if (attr.MyFieldType == FieldType.Enum)
continue;
if (attr.Key == "OID" || attr.Key == "WorkID" || attr.Key == "MID")
continue;
dtr = dt.NewRow();
dtr["Field"] = attr.Key;
dtr["Name"] = attr.Desc;
// 根据状态 设置信息.
if (ur.Vals.IndexOf(attr.Key) != -1)
dtr["Checked"] = "true";
dt.Rows.Add(dtr);
ddlDt = new DataTable();
ddlDt.Columns.Add("No");
ddlDt.Columns.Add("Name");
ddlDt.Columns.Add("Selected");
ddlDt.TableName = attr.Key;
ddlDr = ddlDt.NewRow();
ddlDr["No"] = "SUM";
ddlDr["Name"] = "求和";
if (ur.Vals.IndexOf("@" + attr.Key + "=SUM") != -1)
ddlDr["Selected"] = "true";
ddlDt.Rows.Add(ddlDr);
ddlDr = ddlDt.NewRow();
ddlDr["No"] = "AVG";
ddlDr["Name"] = "求平均";
if (ur.Vals.IndexOf("@" + attr.Key + "=AVG") != -1)
ddlDr["Selected"] = "true";
ddlDt.Rows.Add(ddlDr);
if (this.IsContainsNDYF)
{
ddlDr = ddlDt.NewRow();
ddlDr["No"] = "AMOUNT";
ddlDr["Name"] = "求累计";
if (ur.Vals.IndexOf("@" + attr.Key + "=AMOUNT") != -1)
ddlDr["Selected"] = "true";
ddlDt.Rows.Add(ddlDr);
}
ds.Tables.Add(ddlDt);
}
ds.Tables.Add(dt);
return BP.Tools.Json.ToJson(ds);
}
public string Group_Search()
{
//获得
Entities ens = ClassFactory.GetEns(this.FrmID);
if (ens == null)
return "err@类名错误:" + this.FrmID;
Entity en = ens.GetNewEntity;
Map map = ens.GetNewEntity.EnMapInTime;
DataSet ds = new DataSet();
//获取注册信息表
UserRegedit ur = new UserRegedit(WebUser.No, this.FrmID + "_Group");
// 查询出来关于它的活动列配置.
ActiveAttrs aas = new ActiveAttrs();
aas.RetrieveBy(ActiveAttrAttr.For, this.FrmID);
ds = GroupSearchSet(ens, en, map, ur, ds, aas);
if (ds == null)
return "info@<img src='../Img/Warning.gif' /><b><font color=red> 您没有选择显示内容/分析项目</font></b>";
return BP.Tools.Json.ToJson(ds);
}
private DataSet GroupSearchSet(Entities ens, Entity en, Map map, UserRegedit ur, DataSet ds, ActiveAttrs aas)
{
//查询条件
//分组
string Condition = ""; //处理特殊字段的条件问题。
AtPara atPara = new AtPara(ur.Vals);
//获取分组的条件
string groupKey = atPara.GetValStrByKey("SelectedGroupKey");
//分析项
string analyKey = atPara.GetValStrByKey("StateNumKey");
//设置显示的列
Attrs mapAttrOfShows = new Attrs();
//查询语句定义
string sql = "";
string selectSQL = "SELECT "; //select部分的组合
string groupBySQL = " GROUP BY "; //分组的组合
#region SelectSQL语句的组合
#region 分组条件的整合
if (DataType.IsNullOrEmpty(groupKey) == false)
{
bool isSelected = false;
string[] SelectedGroupKeys = groupKey.Split(',');
foreach (string key in SelectedGroupKeys)
{
if (DataType.IsNullOrEmpty(key) == true)
continue;
Attr attr = map.GetAttrByKey(key);
// 加入组里面。
mapAttrOfShows.Add(map.GetAttrByKey(key));
selectSQL += key + " \"" + key + "\",";
groupBySQL += key + ",";
if (attr.MyFieldType == FieldType.FK)
{
Map fkMap = attr.HisFKEn.EnMap;
string refText = fkMap.PhysicsTable + "_" + attr.Key + "." + fkMap.GetFieldByKey(attr.UIRefKeyText);
selectSQL += refText + " AS " + key + "Text" + ",";
groupBySQL += refText + ",";
continue;
}
if (attr.MyFieldType == FieldType.Enum || attr.MyFieldType == FieldType.PKEnum)
{
//增加枚举字段
if (DataType.IsNullOrEmpty(attr.UIBindKey))
throw new Exception("@" + en.ToString() + " key=" + attr.Key + " UITag=" + attr.UITag + "");
BP.Sys.SysEnums ses = new BP.Sys.SysEnums(attr.UIBindKey, attr.UITag);
selectSQL += ses.GenerCaseWhenForOracle(en.EnMap.PhysicsTable + ".", attr.Key, attr.Field, attr.UIBindKey, int.Parse(attr.DefaultVal.ToString())) + ",";
continue;
}
//不是外键、枚举,就是外部数据源
selectSQL += key + "T" + " \"" + key + "T\",";
}
}
#endregion 分组条件的整合
#region 分析项的整合
Attrs AttrsOfNum = new Attrs();
string[] analyKeys = analyKey.Split(',');
foreach (string key in analyKeys)
{
if (DataType.IsNullOrEmpty(key) == true)
continue;
string[] strs = key.Split('=');
if (strs.Length != 2)
continue;
//求数据的总和
if (strs[0].Equals("Group_Number"))
{
selectSQL += " count(*) \"" + strs[0] + "\",";
mapAttrOfShows.Add(new Attr("Group_Number", "Group_Number", 1, DataType.AppInt, false, "数量(合计)"));
AttrsOfNum.Add(new Attr("Group_Number", "Group_Number", 1, DataType.AppInt, false, "数量"));
continue;
}
//判断分析项的数据类型
Attr attr = map.GetAttrByKey(strs[0]);
AttrsOfNum.Add(attr);
int dataType = attr.MyDataType;
switch (strs[1])
{
case "SUM":
if (dataType == 2)
selectSQL += " SUM(" + strs[0] + ") \"" + strs[0] + "\",";
else
{
if (BP.Difference.SystemConfig.AppCenterDBType == DBType.PostgreSQL)
selectSQL += " round ( cast (SUM(" + strs[0] + ") as numeric), 4) \"" + strs[0] + "\",";
else
selectSQL += " round ( SUM(" + strs[0] + "), 4) \"" + strs[0] + "\",";
}
attr.Desc = attr.Desc + "(合计)";
break;
case "AVG":
if (BP.Difference.SystemConfig.AppCenterDBType == DBType.PostgreSQL)
selectSQL += " round ( cast (AVG(" + strs[0] + ") as numeric), 4) \"" + strs[0] + "\",";
else
selectSQL += " round (AVG(" + strs[0] + "), 4) \"" + strs[0] + "\",";
attr.Desc = attr.Desc + "(平均)";
break;
case "AMOUNT":
if (dataType == 2)
selectSQL += " SUM(" + strs[0] + ") \"" + strs[0] + "\",";
else
{
if (BP.Difference.SystemConfig.AppCenterDBType == DBType.PostgreSQL)
selectSQL += " round ( cast (SUM(" + strs[0] + ") as numeric), 4) \"" + strs[0] + "\",";
else
selectSQL += " round ( SUM(" + strs[0] + "), 4) \"" + strs[0] + "\",";
}
attr.Desc = attr.Desc + "(累计)";
break;
default:
throw new Exception("没有判断的情况.");
}
mapAttrOfShows.Add(attr);
}
#endregion 分析项的整合
selectSQL = selectSQL.Substring(0, selectSQL.Length - 1);
#endregion SelectSQL语句的组合
#region WhereSQL语句的组合
//获取查询的注册表
BP.Sys.UserRegedit searchUr = new UserRegedit();
searchUr.setMyPK(WebUser.No + this.FrmID + "_SearchAttrs");
searchUr.RetrieveFromDBSources();
QueryObject qo = FrmSearch_QuerySQL(ens as GEEntitys, searchUr);
string whereSQL = " " + qo.SQL.Substring(qo.SQL.IndexOf("FROM "));
#endregion WhereSQL语句的组合
#region OrderBy语句组合
string orderbySQL = "";
string orderByKey = this.GetRequestVal("OrderBy");
if (DataType.IsNullOrEmpty(orderByKey) == false && selectSQL.Contains(orderByKey) == true)
{
orderbySQL = " ORDER BY" + orderByKey;
string orderWay = this.GetRequestVal("OrderWay");
if (DataType.IsNullOrEmpty(orderWay) == false && orderWay.Equals("Up") == false)
orderbySQL += " DESC ";
}
#endregion OrderBy语句组合
sql = selectSQL + whereSQL + groupBySQL.Substring(0, groupBySQL.Length - 1) + orderbySQL;
DataTable dt = DBAccess.RunSQLReturnTable(sql, qo.MyParas);
dt.TableName = "MainData";
ds.Tables.Add(dt);
ds.Tables.Add(mapAttrOfShows.ToMapAttrs.ToDataTableField("Sys_MapAttr"));
ds.Tables.Add(AttrsOfNum.ToMapAttrs.ToDataTableField("AttrsOfNum"));
return ds;
}
public string FrmSearch_DeleteFrmByOID()
{
int workModel = GetRequestValInt("WorkModel");
//删除实体
if(workModel==2)
return BP.CCBill.Dev2Interface.MyDict_Delete(this.FrmID, this.WorkID);
//删除单据
if (workModel == 3)
return BP.CCBill.Dev2Interface.MyBill_Delete(this.FrmID, this.WorkID);
return "err@参数WorkModel类型不正确";
}
}
}