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.

516 lines
17 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 BP.Sys;
using BP.DA;
using BP.Web;
using BP.En;
using BP.Difference;
using System.Web;
namespace BP.Sys.Base
{
/// <summary>
/// 公用的静态方法.
/// </summary>
public class Glo
{
public static string EntityJiaMi(string val, bool isJM = false)
{
if (isJM == false)
return val;
return val;
}
public static string EntityJieMi(string val, bool isJM = false)
{
if (isJM == false)
return val;
return val;
}
/// <summary>
/// 获得真实UserNo,如果是SAAS模式.
/// </summary>
public static string UserNo
{
get
{
string empNo = "No";
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.SAAS)
empNo = "UserID as No";
return empNo;
}
}
public static string UserNoWhitOutAS
{
get
{
string empNo = "No";
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.SAAS)
empNo = "UserID";
return empNo;
}
}
/// <summary>
/// 人大金仓数据库Sys_Enum是关键表
/// </summary>
/// <returns></returns>
public static String SysEnum()
{
if (SystemConfig.AppCenterDBType.Equals(DBType.KingBaseR3)
|| SystemConfig.AppCenterDBType.Equals(DBType.KingBaseR6))
return "Sys_Enums";
return "Sys_Enum";
}
/// <summary>
/// 处理命名空间.
/// </summary>
/// <param name="enName">类名</param>
/// <returns>返回处理后的名字</returns>
public static string DealClassEntityName(string enName)
{
if (DataType.IsNullOrEmpty(enName) == true)
return "";
if (BP.Difference.SystemConfig.Plant == BP.Sys.Plant.CSharp)
return enName;
int idx = enName.LastIndexOf('.');
if (idx <= -1)
return enName;
string str = enName.Substring(0, idx).ToLower() + enName.Substring(idx);
return str;
}
/// <summary>
/// 清除设置的缓存.
/// </summary>
/// <param name="frmID"></param>
public static void ClearMapDataAutoNum(string frmID)
{
//执行清空缓存到的AutoNum.
MapData md = new MapData();
md.No = frmID;
if(md.RetrieveFromDBSources()!=0)
md.ClearAutoNumCache(true); //更新缓存.
}
/// <summary>
/// 更新SID Or OrgNo 的SQL
/// 用于集成所用
/// 更新被集成的用户的user表
/// </summary>
public static string UpdateSIDAndOrgNoSQL
{
get
{
return BP.Difference.SystemConfig.GetValByKey("UpdateSIDAndOrgNoSQL", null);
}
}
public static HttpRequest Request
{
get {
return HttpContextHelper.Request;
}
}
/// <summary>
/// 获得真实的数据类型
/// </summary>
/// <param name="attrs">属性集合</param>
/// <param name="key">key</param>
/// <param name="val">值</param>
/// <returns>返回val真实的数据类型.</returns>
public static object GenerRealType(Attrs attrs, string key, object val)
{
Attr attr = attrs.GetAttrByKey(key);
switch (attr.MyDataType)
{
case DataType.AppString:
case DataType.AppDateTime:
case DataType.AppDate:
val = val.ToString();
break;
case DataType.AppInt:
case DataType.AppBoolean:
if (val == null || DataType.IsNullOrEmpty(val.ToString()))
return 0;
val = int.Parse(val.ToString());
break;
case DataType.AppFloat:
val = float.Parse(val.ToString());
break;
case DataType.AppDouble:
val = float.Parse(val.ToString());
break;
case DataType.AppMoney:
val = decimal.Parse(val.ToString());
break;
default:
throw new Exception();
}
return val;
}
#region 业务单元.
private static Hashtable Htable_BuessUnit = null;
/// <summary>
/// 获得节点事件实体
/// </summary>
/// <param name="enName">实例名称</param>
/// <returns>获得节点事件实体,如果没有就返回为空.</returns>
public static BuessUnitBase GetBuessUnitEntityByEnName(string enName)
{
if (Htable_BuessUnit == null || Htable_BuessUnit.Count == 0)
{
Htable_BuessUnit = new Hashtable();
ArrayList al = BP.En.ClassFactory.GetObjects("BP.Sys.BuessUnitBase");
foreach (BuessUnitBase en in al)
{
Htable_BuessUnit.Add(en.ToString(), en);
}
}
BuessUnitBase myen = Htable_BuessUnit[enName] as BuessUnitBase;
if (myen == null)
{
//throw new Exception("@根据类名称获取业务单元实例出现错误:" + enName + ",没有找到该类的实体.");
BP.DA.Log.DebugWriteError("@根据类名称获取业务单元实例出现错误:" + enName + ",没有找到该类的实体.");
return null;
}
return myen;
}
/// <summary>
/// 获得事件实体String根据编号或者流程标记
/// </summary>
/// <param name="flowMark">流程标记</param>
/// <param name="flowNo">流程编号</param>
/// <returns>null, 或者流程实体.</returns>
public static string GetBuessUnitEntityStringByFlowMark(string flowMark, string flowNo)
{
BuessUnitBase en = GetBuessUnitEntityByFlowMark(flowMark, flowNo);
if (en == null)
return "";
return en.ToString();
}
/// <summary>
/// 获得业务单元.
/// </summary>
/// <param name="flowMark">流程标记</param>
/// <param name="flowNo">流程编号</param>
/// <returns>null, 或者流程实体.</returns>
public static BuessUnitBase GetBuessUnitEntityByFlowMark(string flowMark, string flowNo)
{
if (Htable_BuessUnit == null || Htable_BuessUnit.Count == 0)
{
Htable_BuessUnit = new Hashtable();
ArrayList al = BP.En.ClassFactory.GetObjects("BP.Sys.BuessUnitBase");
Htable_BuessUnit.Clear();
foreach (BuessUnitBase en in al)
{
Htable_BuessUnit.Add(en.ToString(), en);
}
}
foreach (string key in Htable_BuessUnit.Keys)
{
BuessUnitBase fee = Htable_BuessUnit[key] as BuessUnitBase;
if (fee.ToString() == flowMark || fee.ToString().Contains("," + flowNo + ",") == true)
return fee;
}
return null;
}
#endregion 业务单元.
#region 与 表单 事件实体相关.
private static Hashtable Htable_FormFEE = null;
/// <summary>
/// 获得节点事件实体
/// </summary>
/// <param name="enName">实例名称</param>
/// <returns>获得节点事件实体,如果没有就返回为空.</returns>
public static FormEventBase GetFormEventBaseByEnName(string enName)
{
if (Htable_FormFEE == null)
{
Htable_FormFEE = new Hashtable();
ArrayList al = BP.En.ClassFactory.GetObjects("BP.Sys.Base.FormEventBase");
Htable_FormFEE.Clear();
foreach (FormEventBase en in al)
{
Htable_FormFEE.Add(en.FormMark, en);
}
}
foreach (string key in Htable_FormFEE.Keys)
{
FormEventBase fee = Htable_FormFEE[key] as FormEventBase;
if (key.Contains(","))
{
if (key.IndexOf(enName + ",") >= 0 || key.Length == key.IndexOf("," + enName) + enName.Length + 1)
return fee;
}
if (key == enName)
return fee;
}
return null;
}
#endregion 与 表单 事件实体相关.
#region 与 表单从表 事件实体相关.
private static Hashtable Htable_FormFEEDtl = null;
/// <summary>
/// 获得节点事件实体
/// </summary>
/// <param name="enName">实例名称</param>
/// <returns>获得节点事件实体,如果没有就返回为空.</returns>
public static FormEventBaseDtl GetFormDtlEventBaseByEnName(string dtlEnName)
{
if (Htable_FormFEEDtl == null || Htable_FormFEEDtl.Count == 0)
{
Htable_FormFEEDtl = new Hashtable();
ArrayList al = BP.En.ClassFactory.GetObjects("BP.Sys.Base.FormEventBaseDtl");
Htable_FormFEEDtl.Clear();
foreach (FormEventBaseDtl en in al)
{
Htable_FormFEEDtl.Add(en.FormDtlMark, en);
}
}
foreach (string key in Htable_FormFEEDtl.Keys)
{
FormEventBaseDtl fee = Htable_FormFEEDtl[key] as FormEventBaseDtl;
if (fee.FormDtlMark.IndexOf(dtlEnName) >= 0 || fee.FormDtlMark == dtlEnName)
return fee;
}
return null;
}
#endregion 与 表单 事件实体相关.
#region 公共变量.
public static string Plant = "CCFlow";
/// <summary>
/// 部门版本号
/// </summary>
public static string DeptsVersion
{
get
{
GloVar en = new GloVar();
en.No = "DeptsVersion";
if (en.RetrieveFromDBSources() == 0)
{
en.Name = "部门版本号";
en.Val = DataType.CurrentDateTime;
en.GroupKey = "Glo";
en.Insert();
}
return en.Val;
}
}
/// <summary>
/// 人员版本号
/// </summary>
public static string UsersVersion
{
get
{
GloVar en = new GloVar();
en.No = "UsersVersion";
if (en.RetrieveFromDBSources() == 0)
{
en.Name = "人员版本号";
en.Val = DataType.CurrentDateTime;
en.GroupKey = "Glo";
en.Insert();
}
return en.Val;
}
}
#endregion 公共变量.
#region 写入系统日志(写入的文件:\DataUser\Log\*.*)
/// <summary>
/// 写入一条消息
/// </summary>
/// <param name="msg">消息</param>
public static void WriteLineInfo(string msg)
{
BP.DA.Log.DebugWriteInfo(msg);
}
/// 写入一条警告
/// </summary>
/// <param name="msg">消息</param>
public static void WriteLineWarning(string msg)
{
BP.DA.Log.DebugWriteWarning(msg);
}
/// <summary>
/// 写入一条错误
/// </summary>
/// <param name="msg">消息</param>
public static void WriteLineError(string msg)
{
BP.DA.Log.DebugWriteError(msg);
}
#endregion 写入系统日志
#region 写入用户日志(写入的用户表:Sys_UserLog).
/// <summary>
/// 写入用户日志
/// </summary>
/// <param name="empNo">操作员编号</param>
/// <param name="logType">日志类型</param>
/// <param name="msg">消息</param>
public static void WriteUserLog(string msg, string logType = "通用操作")
{
if (BP.Difference.SystemConfig.GetValByKeyBoolen("IsEnableLog", false) == false)
return;
// string sql = "INSERT INTO Sys_Log (id,title,exception,) value('" + DBAccess.GenerGUID() + "','" + logType + "','" + msg + "')";
UserLog ul = new UserLog();
ul.setMyPK(DBAccess.GenerGUID());
ul.EmpNo = BP.Web.WebUser.No;
ul.EmpName = BP.Web.WebUser.Name;
ul.LogFlag = logType;
ul.Docs = msg;
ul.RDT = DataType.CurrentDateTime;
try
{
if (BP.Difference.SystemConfig.isBSsystem)
ul.IP = HttpContextHelper.Request.UserHostAddress;
}
catch
{
}
ul.Insert();
}
#endregion 写入用户日志.
/// <summary>
/// 初始化附件信息
/// 如果手工的上传的附件,就要把附加的信息映射出来.
/// </summary>
/// <param name="en"></param>
public static void InitEntityAthInfo(BP.En.Entity en)
{
//求出保存路径.
string path = en.EnMap.FJSavePath;
if (path == null || path.Equals("") || path == string.Empty)
path = BP.Difference.SystemConfig.PathOfDataUser + en.ToString() + "/";
if (System.IO.Directory.Exists(path) == false)
System.IO.Directory.CreateDirectory(path);
//获得该目录下所有的文件.
string[] strs = System.IO.Directory.GetFiles(path);
string pkval = en.PKVal.ToString();
string myfileName = null;
foreach (string str in strs)
{
if (str.Contains(pkval + ".") == false)
continue;
myfileName = str;
break;
}
if (myfileName == null)
return;
/* 如果包含这二个字段。*/
string fileName = myfileName;
fileName = fileName.Substring(fileName.LastIndexOf("/") + 1);
en.SetValByKey("MyFilePath", path);
string ext = "";
if (fileName.IndexOf(".") != -1)
ext = fileName.Substring(fileName.LastIndexOf(".") + 1);
string reldir = path;
if (reldir.Length > SystemConfig.PathOfDataUser.Length)
reldir =
reldir.Substring(reldir.ToLower().IndexOf(@"\datauser\") + @"\datauser\".Length).Replace(
@"\", "/");
else
reldir = "";
if (reldir.Length > 0 && Equals(reldir[0], '/') == true)
reldir = reldir.Substring(1);
if (reldir.Length > 0 && Equals(reldir[reldir.Length - 1], '/') == false)
reldir += "/";
en.SetValByKey("MyFileExt", ext);
en.SetValByKey("MyFileName", fileName);
en.SetValByKey("WebPath", "/DataUser/" + reldir + en.PKVal + "." + ext);
string fullFile = path + @"\" + en.PKVal + "." + ext;
System.IO.FileInfo info = new System.IO.FileInfo(fullFile);
en.SetValByKey("MyFileSize", DataType.PraseToMB(info.Length));
if (DataType.IsImgExt(ext))
{
System.Drawing.Image img = System.Drawing.Image.FromFile(fullFile);
en.SetValByKey("MyFileH", img.Height);
en.SetValByKey("MyFileW", img.Width);
img.Dispose();
}
en.Update();
}
#region 加密解密文件.
public static void File_JiaMi(string fileFullPath)
{
//南京宝旺达.
if (BP.Difference.SystemConfig.CustomerNo.Equals("BWDA"))
{
}
}
public static void File_JieMi(string fileFullPath)
{
//南京宝旺达.
if (BP.Difference.SystemConfig.CustomerNo.Equals("BWDA"))
{
}
}
/// <summary>
/// 字符串的解密
/// </summary>
/// <param name="str">加密的字符串</param>
/// <returns>返回解密后的字符串</returns>
public static string String_JieMi(string str)
{
//南京宝旺达.
if (BP.Difference.SystemConfig.CustomerNo.Equals("BWDA"))
{
return str;
}
return str;
}
#endregion 加密解密文件.
}
}