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

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.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类型不正确";
}
}
}