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.

587 lines
18 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 BP.DA;
using System.Data;
using BP.En;
using BP.Sys;
namespace BP.Cloud.Sys
{
/// <summary>
/// sss
/// </summary>
public class SysEnumAttr
{
/// <summary>
/// 标题
/// </summary>
public const string Lab="Lab";
/// <summary>
/// Int key
/// </summary>
public const string IntKey="IntKey";
/// <summary>
/// EnumKey
/// </summary>
public const string EnumKey="EnumKey";
/// <summary>
/// Language
/// </summary>
public const string Lang="Lang";
/// <summary>
/// 组织结构编码
/// </summary>
public const string OrgNo = "OrgNo";
/// <summary>
/// RefPK
/// </summary>
public const string RefPK = "RefPK";
}
/// <summary>
/// SysEnum
/// </summary>
public class SysEnum : EntityMyPK
{
/// <summary>
/// 得到一个String By LabKey.
/// </summary>
/// <param name="EnumKey"></param>
/// <param name="intKey"></param>
/// <returns></returns>
public static string GetLabByPK(string EnumKey, int intKey)
{
SysEnum en = new SysEnum(EnumKey,intKey);
return en.Lab;
}
#region 实现基本的方法
/// <summary>
/// 标签
/// </summary>
public string Lab
{
get
{
return this.GetValStringByKey(SysEnumAttr.Lab);
}
set
{
this.SetValByKey(SysEnumAttr.Lab,value);
}
}
public string RefPK
{
get
{
return this.GetValStringByKey(SysEnumAttr.RefPK);
}
set
{
this.SetValByKey(SysEnumAttr.RefPK, value);
}
}
public string OrgNo
{
get
{
return this.GetValStringByKey(SysEnumAttr.OrgNo);
}
set
{
this.SetValByKey(SysEnumAttr.OrgNo, value);
}
}
/// <summary>
/// 标签
/// </summary>
public string Lang
{
get
{
return this.GetValStringByKey(SysEnumAttr.Lang);
}
set
{
this.SetValByKey(SysEnumAttr.Lang,value);
}
}
/// <summary>
/// Int val
/// </summary>
public int IntKey
{
get
{
return this.GetValIntByKey(SysEnumAttr.IntKey);
}
set
{
this.SetValByKey(SysEnumAttr.IntKey,value);
}
}
/// <summary>
/// EnumKey
/// </summary>
public string EnumKey
{
get
{
return this.GetValStringByKey(SysEnumAttr.EnumKey);
}
set
{
this.SetValByKey(SysEnumAttr.EnumKey,value);
}
}
#endregion
#region 构造方法
/// <summary>
/// SysEnum
/// </summary>
public SysEnum(){}
/// <summary>
/// 税务编号
/// </summary>
/// <param name="_No">编号</param>
public SysEnum(string enumKey, int val)
{
this.EnumKey = enumKey;
this.Lang = BP.Web.WebUser.SysLang;
this.IntKey = val;
this.setMyPK(this.EnumKey + "_" + this.Lang + "_" + this.IntKey);
int i = this.RetrieveFromDBSources();
if (i == 0)
{
i = this.Retrieve(SysEnumAttr.EnumKey, enumKey, SysEnumAttr.Lang, BP.Web.WebUser.SysLang,
SysEnumAttr.IntKey, this.IntKey);
SysEnums ses = new SysEnums();
ses.Full(enumKey);
if (i == 0)
{
//尝试注册系统的枚举的配置.
SysEnums myee = new SysEnums(enumKey);
throw new Exception("@ EnumKey=" + EnumKey + " Val=" + val + " Lang=" + Web.WebUser.SysLang + " ...Error");
}
}
}
public SysEnum(string enumKey, string Lang, int val)
{
this.EnumKey = enumKey;
this.Lang = Lang;
this.IntKey = val;
this.setMyPK(this.EnumKey + "_" + this.Lang + "_" + this.IntKey);
int i = this.RetrieveFromDBSources();
if (i == 0)
{
i = this.Retrieve(SysEnumAttr.EnumKey, enumKey, SysEnumAttr.Lang, Lang,
SysEnumAttr.IntKey, this.IntKey);
SysEnums ses = new SysEnums();
ses.Full(enumKey);
if (i == 0)
throw new Exception("@ EnumKey=" + enumKey + " Val=" + val + " Lang=" + Lang + " Error");
}
}
/// <summary>
/// Map
/// </summary>
public override Map EnMap
{
get
{
if (this._enMap != null)
return this._enMap;
Map map = new Map("Sys_Enum", "枚举数据");
/*
* 为了能够支持 cloud 我们做了如下变更.
* 1. 增加了OrgNo 字段.
* 2. 如果是单机版用户,原来的业务逻辑不变化. MyPK= EnumKey+"_"+IntKey+'_'+Lang
* 3. 如果是SAAS模式, MyPK= EnumKey+"_"+IntKey+'_'+Lang +"_"+OrgNo
*/
map.AddMyPK();
map.AddTBString(SysEnumAttr.Lab, null, "Lab", true, false, 1, 300, 8);
map.AddTBString(SysEnumAttr.EnumKey, null, "EnumKey", true, false, 1, 100, 8);
map.AddTBInt(SysEnumAttr.IntKey, 0, "Val", true, false);
map.AddTBString(SysEnumAttr.Lang, "CH", "语言", true, false, 0, 10, 8);
map.AddTBString(SysEnumAttr.OrgNo, null, "OrgNo", true, false, 0, 100, 8);
map.AddTBString(SysEnumAttr.RefPK, null, "RefPK", true, false, 0, 100, 8);
this._enMap = map;
return this._enMap;
}
}
#endregion
/// <summary>
///
/// </summary>
/// <returns></returns>
protected override bool beforeUpdateInsertAction()
{
if (DataType.IsNullOrEmpty(this.Lang ) )
this.Lang = BP.Web.WebUser.SysLang;
//设置部门编号.
this.OrgNo = Web.WebUser.OrgNo;
//设置mypk.
this.setMyPK( this.EnumKey + "_" + this.Lang + "_" + this.IntKey+"_"+this.OrgNo);
// 关联主键.
this.RefPK = this.OrgNo + "_" + this.EnumKey; //关联的主键.
return base.beforeUpdateInsertAction();
}
/// <summary>
/// 枚举类型新增保存后在Frm_RB中增加新的枚举值
/// </summary>
protected override void afterInsert()
{
//获取引用枚举的表单
string sql =" select distinct(FK_MapData)from Sys_FrmRB where EnumKey='"+this.EnumKey+"'";
DataTable dt = DBAccess.RunSQLReturnTable(sql);
if (dt.Rows.Count == 0)
{
base.afterInsert();
return;
}
foreach (System.Data.DataRow dr in dt.Rows)
{
if (DataType.IsNullOrEmpty(dr[0].ToString()))
continue;
string fk_mapdata = dr[0].ToString();
string mypk = fk_mapdata + "_" + this.EnumKey + "_" + this.IntKey;
FrmRB frmrb = new FrmRB();
if (frmrb.IsExit("MyPK", mypk) == true)
{
frmrb.setLab(this.Lab);
frmrb.Update();
continue;
}
//获取mapAttr
MapAttr mapAttr = new MapAttr();
mapAttr.setMyPK(fk_mapdata + "_" + this.EnumKey);
int i = mapAttr.RetrieveFromDBSources();
if (i!=0)
{
int RBShowModel = mapAttr.GetParaInt("RBShowModel");
FrmRB frmrb1 = new FrmRB();
frmrb1.setMyPK(fk_mapdata + "_" + this.EnumKey + "_"+ this.IntKey);
frmrb.setFK_MapData(fk_mapdata);
frmrb.setKeyOfEn(this.EnumKey);
frmrb.setEnumKey(this.EnumKey);
frmrb.setLab(this.Lab);
frmrb.setIntKey(this.IntKey);
frmrb.Insert();
}
}
base.afterInsert();
}
}
/// <summary>
/// 纳税人集合
/// </summary>
public class SysEnums : Entities
{
/// <summary>
/// 此枚举类型的个数
/// </summary>
public int Num = -1;
public string ToDesc()
{
string strs = "";
foreach (SysEnum se in this)
{
strs += se.IntKey + " " + se.Lab + ";";
}
return strs;
}
public string GenerCaseWhenForOracle(string enName, string mTable, string key, string field, string enumKey, int def)
{
string sql = (string)Cash.GetObjFormApplication("ESQL" + enName +mTable+ key + "_" + enumKey, null);
// string sql = "";
if (sql != null)
return sql;
if (this.Count == 0)
throw new Exception("@枚举值" + enumKey + "已被删除。");
sql = " CASE NVL(" + mTable + field+","+def+")";
foreach (SysEnum se1 in this)
{
sql += " WHEN " + se1.IntKey + " THEN '" + se1.Lab + "'";
}
SysEnum se = (SysEnum)this.GetEntityByKey(SysEnumAttr.IntKey, def);
if (se == null)
sql += " END \"" + key + "Text\"";
else
sql += " WHEN NULL THEN '" + se.Lab + "' END \"" + key + "Text\"";
Cash.AddObj("ESQL" + enName + mTable + key + "_" + enumKey, Depositary.Application, sql);
return sql;
}
public string GenerCaseWhenForOracle(string mTable, string key, string field, string enumKey, int def)
{
if (this.Count == 0)
throw new Exception("@枚举值(" + enumKey + "已被删除无法形成期望的SQL。");
string sql = "";
sql = " CASE " + mTable + field;
foreach (SysEnum se1 in this)
sql += " WHEN " + se1.IntKey + " THEN '" + se1.Lab + "'";
SysEnum se = (SysEnum)this.GetEntityByKey(SysEnumAttr.IntKey, def);
if (se == null)
sql += " END \"" + key + "Text\"";
else
sql += " WHEN NULL THEN '" + se.Lab + "' END \"" + key + "Text\"";
// Cash.AddObj("ESQL" + enName + key + "_" + enumKey, Depositary.Application, sql);
return sql;
}
public void LoadIt(string enumKey)
{
if (this.Full(enumKey) == false)
{
try
{
BP.DA.DBAccess.RunSQL("UPDATE Sys_Enum SET Lang='" + Web.WebUser.SysLang + "' WHERE LANG IS NULL ");
BP.DA.DBAccess.RunSQL("UPDATE Sys_Enum SET MyPK=EnumKey+'_'+Lang+'_'+cast(IntKey as NVARCHAR )");
//增加数据库类型判断
DBUrl dbUrl = new DBUrl();
if (DBType.MSSQL == dbUrl.DBType)
{
BP.DA.DBAccess.RunSQL("UPDATE Sys_Enum SET MyPK=EnumKey+'_'+Lang+'_'+cast(IntKey as NVARCHAR )");
}
else if (DBType.Oracle == dbUrl.DBType || DBType.KingBaseR3==dbUrl.DBType || DBType.KingBaseR6==dbUrl.DBType)
{
BP.DA.DBAccess.RunSQL("UPDATE Sys_Enum SET MyPK = EnumKey || '_' || Lang || '_' || cast(IntKey as VARCHAR(5))");
}
else if (DBType.MySQL == dbUrl.DBType)
{
BP.DA.DBAccess.RunSQL("UPDATE Sys_Enum SET MyPK = CONCAT (EnumKey,'_', Lang,'_',CAST(IntKey AS CHAR(5)))");
}
}
catch
{
}
try
{
BP.Sys.XML.EnumInfoXml xml = new BP.Sys.XML.EnumInfoXml(enumKey);
this.RegIt(enumKey, xml.Vals);
}
catch (Exception ex)
{
throw new Exception("@你没有预制[" + enumKey + "]枚举值。@在修复枚举值出现错误:" + ex.Message);
}
}
}
/// <summary>
/// 把所有的枚举注册一遍.
/// </summary>
public static void RegAll()
{
BP.Sys.XML.EnumInfoXmls xmls = new BP.Sys.XML.EnumInfoXmls();
xmls.RetrieveAll();
SysEnums ses = new SysEnums();
foreach (BP.Sys.XML.EnumInfoXml xml in xmls)
ses.RegIt(xml.Key, xml.Vals);
}
/// <summary>
/// SysEnums
/// </summary>
/// <param name="EnumKey"></param>
public SysEnums(string enumKey)
{
this.LoadIt(enumKey);
}
public SysEnums(string enumKey, string vals)
{
if (DataType.IsNullOrEmpty(vals) )
{
this.LoadIt(enumKey);
return;
}
if (this.Full(enumKey) == false)
this.RegIt(enumKey, vals);
}
public void RegIt(string EnumKey, string vals)
{
try
{
string[] strs = vals.Split('@');
SysEnums ens = new SysEnums();
ens.Delete(SysEnumAttr.EnumKey, EnumKey);
this.Clear();
foreach (string s in strs)
{
if (DataType.IsNullOrEmpty(s ) )
continue;
string[] vk = s.Split('=');
SysEnum se = new SysEnum();
se.IntKey = int.Parse(vk[0]);
//杨玉慧
//解决当 枚举值含有 =’号时,保存不进去的方法
string[] kvsValues = new string[vk.Length - 1];
for (int i = 0; i < kvsValues.Length; i++)
{
kvsValues[i] = vk[i + 1];
}
se.Lab = string.Join("=", kvsValues);
se.EnumKey = EnumKey;
se.Lang = BP.Web.WebUser.SysLang;
se.Insert();
this.AddEntity(se);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message + " - " + vals);
}
// this.Full(EnumKey);
}
public bool Full(string enumKey)
{
Entities ens = (Entities)Cash.GetObjFormApplication("EnumOf" + enumKey + Web.WebUser.SysLang, null);
if (ens != null)
{
this.AddEntities(ens);
return true;
}
QueryObject qo = new QueryObject(this);
qo.AddWhere(SysEnumAttr.EnumKey, enumKey);
qo.addAnd();
qo.AddWhere(SysEnumAttr.Lang, BP.Web.WebUser.SysLang);
qo.addOrderBy(SysEnumAttr.IntKey);
if (qo.DoQuery() == 0)
{
/* 看看xml配置里面是否有?*/
return false;
}
Cash.AddObj("EnumOf" + enumKey + Web.WebUser.SysLang, Depositary.Application, this);
return true;
}
///// <summary>
///// DBSimpleNoNames
///// </summary>
///// <returns></returns>
//public DBSimpleNoNames ToEntitiesNoName()
//{
// DBSimpleNoNames ens = new DBSimpleNoNames();
// foreach (SysEnum en in this)
// {
// ens.AddByNoName(en.IntKey.ToString(), en.Lab);
// }
// return ens;
//}
/// <summary>
///
/// </summary>
/// <param name="key"></param>
/// <param name="val"></param>
/// <returns></returns>
public new int Delete(string key, object val)
{
try
{
Entity en = this.GetNewEntity;
Paras ps = new Paras();
ps.SQL = "DELETE FROM " + en.EnMap.PhysicsTable + " WHERE OrgNo=" + key + "," + key + "=" + en.HisDBVarStr + "p";
ps.Add("p", val);
return en.RunSQL(ps);
}
catch
{
Entity en = this.GetNewEntity;
en.CheckPhysicsTable();
Paras ps = new Paras();
ps.SQL = "DELETE FROM " + en.EnMap.PhysicsTable + " WHERE " + key + "=" + en.HisDBVarStr + "p";
ps.Add("p", val);
return en.RunSQL(ps);
}
}
/// <summary>
/// SysEnums
/// </summary>
public SysEnums(){}
/// <summary>
/// 得到它的 Entity
/// </summary>
public override Entity GetNewEntity
{
get
{
return new SysEnum();
}
}
/// <summary>
/// 通过int 得到Lab
/// </summary>
/// <param name="val">val</param>
/// <returns>string val</returns>
public string GetLabByVal(int val)
{
foreach(SysEnum en in this)
{
if (en.IntKey == val)
return en.Lab;
}
return null;
}
#region 为了适应自动翻译成java的需要,把实体转换成List.
/// <summary>
/// 转化成 java list,C#不能调用.
/// </summary>
/// <returns>List</returns>
public System.Collections.Generic.IList<SysEnum> ToJavaList()
{
return (System.Collections.Generic.IList<SysEnum>)this;
}
/// <summary>
/// 转化成list
/// </summary>
/// <returns>List</returns>
public System.Collections.Generic.List<SysEnum> Tolist()
{
System.Collections.Generic.List<SysEnum> list = new System.Collections.Generic.List<SysEnum>();
for (int i = 0; i < this.Count; i++)
{
list.Add((SysEnum)this[i]);
}
return list;
}
#endregion 为了适应自动翻译成java的需要,把实体转换成List.
}
}