using System.Security.Cryptography;
using System;
using BP.En;
using BP.DA;
using System.Configuration;
using BP.Port;
using BP.Sys;
using BP.Pub;
using System.Collections.Generic;
using BP.Difference;
using System.Web;
using System.Collections;
namespace BP.Web
{
///
/// User 的摘要说明。
///
public class WebUser
{
///
/// 密码解密
///
/// 用户输入密码
/// 解密后的密码
public static string ParsePass(string pass)
{
if (pass == "")
return "";
string str = "";
char[] mychars = pass.ToCharArray();
int i = 0;
foreach (char c in mychars)
{
i++;
//step 1
long A = Convert.ToInt64(c) * 2;
// step 2
long B = A - i * i;
// step 3
long C = 0;
if (B > 196)
C = 196;
else
C = B;
str = str + Convert.ToChar(C).ToString();
}
return str;
}
///
/// 更改一个人当前登录的主要部门
/// 再一个人有多个部门的情况下有效.
///
/// 人员编号
/// 当前所在的部门.
public static void ChangeMainDept(string empNo, string fk_dept)
{
//这里要考虑集成的模式下,更新会出现是.
string sql = BP.Difference.SystemConfig.GetValByKey("UpdataMainDeptSQL", "");
if (sql == "")
{
/*如果没有配置, 就取默认的配置.*/
sql = "UPDATE Port_Emp SET FK_Dept=@FK_Dept WHERE No=@No";
}
sql = sql.Replace("@FK_Dept", "'" + fk_dept + "'");
sql = sql.Replace("@No", "'" + empNo + "'");
try
{
if (sql.Contains("UPDATE Port_Emp SET FK_Dept=") == true)
if (DBAccess.IsView("Port_Emp", BP.Difference.SystemConfig.AppCenterDBType) == true)
return;
DBAccess.RunSQL(sql);
}
catch (Exception ex)
{
throw new Exception("@执行更改当前操作员的主部门的时候错误,请检查SQL配置:" + ex.Message);
}
}
///
/// 通用的登陆
///
/// 人员
/// 语言
/// 授权人
/// 是否记录cookies
/// 是否记录SID
public static void SignInOfGener(Emp em, string lang = "CH", bool isRememberMe = false, bool IsRecSID = false,
string authNo = null, string authName = null)
{
if (HttpContextHelper.Current == null)
SystemConfig.IsBSsystem = false;
else
SystemConfig.IsBSsystem = true;
WebUser.No = em.UserID;
WebUser.Name = em.Name;
if (DataType.IsNullOrEmpty(authNo) == false)
{
WebUser.Auth = authNo; //被授权人,实际工作的执行者.
WebUser.AuthName = authName;
}
else
{
WebUser.Auth = null;
WebUser.AuthName = null;
}
//解决没有部门编号的问题.
if (DataType.IsNullOrEmpty(em.OrgNo) == false && DataType.IsNullOrEmpty(em.FK_Dept) == true)
{
BP.Port.DeptEmp de = new BP.Port.DeptEmp();
de.FK_Dept = em.OrgNo;
de.FK_Emp = em.No;
de.OrgNo = em.OrgNo;
de.Insert();
// em.FK_Dept = em.OrgNo;
}
#region 解决部门的问题.
if (DataType.IsNullOrEmpty(em.FK_Dept) == true)
{
string sql = "";
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.SAAS)
sql = "SELECT FK_Dept FROM Port_DeptEmp WHERE FK_Emp='" + em.UserID + "' AND OrgNo='" + WebUser.OrgNo + "' ";
else
sql = "SELECT FK_Dept FROM Port_DeptEmp WHERE FK_Emp='" + em.UserID + "'";
string deptNo = DBAccess.RunSQLReturnString(sql);
if (DataType.IsNullOrEmpty(deptNo) == true)
{
if (em.No.Equals("Guest") == true)
{
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.SAAS)
{
BP.Port.DeptEmp de = new BP.Port.DeptEmp();
de.FK_Dept = "ccs";
de.FK_Emp = "Guest";
de.Insert();
}
}
else
{
if (DataType.IsNullOrEmpty(deptNo) == true)
throw new Exception("@登录人员(" + em.UserID + "," + em.Name + ")没有维护部门." + sql);
}
}
else
{
//调用接口更改所在的部门.
WebUser.ChangeMainDept(em.UserID, deptNo);
em.FK_Dept = deptNo;
}
}
BP.Port.Dept dept = new Dept();
dept.No = em.FK_Dept;
if (dept.RetrieveFromDBSources() == 0)
throw new Exception("@登录人员(" + em.UserID + "," + em.Name + ")没有维护部门,或者部门编号{" + em.FK_Dept + "}不存在.");
#endregion 解决部门的问题.
WebUser.FK_Dept = em.FK_Dept;
WebUser.FK_DeptName = dept.Name;
WebUser.DeptParentNo = dept.ParentNo;
WebUser.OrgNo = dept.OrgNo;
WebUser.SysLang = lang;
if (BP.Difference.SystemConfig.IsBSsystem)
{
// cookie操作,为适应不同平台,统一使用HttpContextHelper
Dictionary cookieValues = new Dictionary();
cookieValues.Add("No", em.UserID);
cookieValues.Add("Name", HttpUtility.UrlEncode(em.Name));
if (isRememberMe)
cookieValues.Add("IsRememberMe", "1");
else
cookieValues.Add("IsRememberMe", "0");
cookieValues.Add("FK_Dept", em.FK_Dept);
cookieValues.Add("FK_DeptName", HttpUtility.UrlEncode(em.FK_DeptText));
//设置组织编号.
if (BP.Difference.SystemConfig.CCBPMRunModel != CCBPMRunModel.Single)
cookieValues.Add("OrgNo", em.OrgNo);
//if (HttpContextHelper.Current.Session != null)
//{
// cookieValues.Add("Token", HttpContextHelper.SessionID);
// cookieValues.Add("Token", HttpContextHelper.SessionID);
//}
cookieValues.Add("Tel", em.Tel);
cookieValues.Add("Lang", lang);
if (authNo == null)
authNo = "";
cookieValues.Add("Auth", authNo); //授权人.
if (authName == null)
authName = "";
cookieValues.Add("AuthName", authName); //授权人名称..
//cookieValues.Add("Token", WebUser.Token); //授权人名称..
HttpContextHelper.ResponseCookieAdd(cookieValues, null, "CCS");
}
}
#region 静态方法
///
/// 通过key,取出session.
///
/// key
/// 如果是Null, 返回的值.
///
public static string GetSessionByKey(string key, string isNullAsVal)
{
//2019-07-25 zyt改造
if (IsBSMode && HttpContextHelper.Current != null && HttpContextHelper.Current.Session != null)
{
string str = HttpContextHelper.SessionGetString(key);
if (DataType.IsNullOrEmpty(str))
str = isNullAsVal;
return str;
}
else
{
if (BP.Pub.Current.Session[key] == null || BP.Pub.Current.Session[key].ToString() == "")
{
BP.Pub.Current.Session[key] = isNullAsVal;
return isNullAsVal;
}
else
return (string)BP.Pub.Current.Session[key];
}
}
#endregion
///
/// 是不是b/s 工作模式。
///
protected static bool IsBSMode
{
get
{
if (HttpContextHelper.Current == null)
return false;
else
return true;
}
}
///
/// 设置session
///
/// 键
/// 值
public static void SetSessionByKey(string key, string val)
{
if (val == null)
return;
//2019-07-25 zyt 改造.
if (IsBSMode == true
&& HttpContextHelper.Current != null
&& HttpContextHelper.Current.Session != null)
{
HttpContextHelper.SessionSet(key, val);
}
else
{
BP.Pub.Current.SetSession(key, val);
}
}
///
/// 退回
///
public static void Exit()
{
string guid = DBAccess.GenerGUID();
//Token信息存储在WF_Emp的AtPara表中了,清空Token
string sql = "UPDATE WF_Emp SET AtPara = REPLACE(AtPara, '@Token_PC=" + BP.Web.WebUser.Token + "', '@Token_PC=" + guid + "') WHERE No = '" + BP.Web.WebUser.No + "'";
DBAccess.RunSQL(sql);
sql = "UPDATE WF_Emp SET AtPara=REPLACE(AtPara,'@Online=1','@Online=0') WHERE No = '" + BP.Web.WebUser.No + "'";
DBAccess.RunSQL(sql);
if (IsBSMode == false)
{
HttpContextHelper.ResponseCookieDelete(new string[] {
"No", "Name", "Pass", "IsRememberMe", "Auth", "AuthName","DeptParentNo" },
"CCS");
return;
}
try
{
BP.Pub.Current.Session.Clear();
HttpContextHelper.ResponseCookieDelete(new string[] {
"No", "Name", "Pass", "IsRememberMe", "Auth", "AuthName" },
"CCS");
HttpContextHelper.SessionClear();
}
catch
{
}
}
///
/// 授权人
///
public static string Auth
{
get
{
string val = GetValFromCookie("Auth", null, false);
if (val == null)
val = GetSessionByKey("Auth", null);
return val;
}
set
{
if (value == "")
SetSessionByKey("Auth", null);
else
SetSessionByKey("Auth", value);
}
}
///
/// 部门名称
///
public static string FK_DeptName
{
get
{
try
{
string val = GetValFromCookie("FK_DeptName", null, true);
return val;
}
catch
{
return "无";
}
}
set
{
SetSessionByKey("FK_DeptName", value);
}
}
///
/// 部门全称
///
public static string FK_DeptNameOfFull
{
get
{
string val = GetValFromCookie("FK_DeptNameOfFull", null, true);
if (DataType.IsNullOrEmpty(val))
{
try
{
Paras ps = new Paras();
ps.SQL = "SELECT NameOfPath FROM Port_Dept WHERE No =" + ps.DBStr + "No";
ps.Add("No", WebUser.FK_Dept);
val = DBAccess.RunSQLReturnStringIsNull(ps, null);
if (DataType.IsNullOrEmpty(val))
val = WebUser.FK_DeptName;
WebUser.FK_DeptNameOfFull = val;
return val;
}
catch
{
val = WebUser.FK_DeptName;
}
}
return val;
}
set
{
SetSessionByKey("FK_DeptNameOfFull", value);
}
}
///
/// 令牌
///
public static string Token
{
get
{
return GetValFromCookie("Token", null, false);
}
set
{
SetSessionByKey("token", value);
HttpContextHelper.AddCookie("CCS", "Token", WebUser.Token);
}
}
///
/// 语言
///
public static string SysLang
{
get
{
return "CH";
/*
string no = GetSessionByKey("Lang", null);
if (no == null || no == "")
{
if (IsBSMode)
{
// HttpCookie hc1 = BP.Sys.Base.Glo.Request.Cookies["CCS"];
string lang = HttpContextHelper.RequestCookieGet("Lang", "CCS");
if (String.IsNullOrEmpty(lang))
return "CH";
SetSessionByKey("Lang", lang);
}
else
{
return "CH";
}
return GetSessionByKey("Lang", "CH");
}
else
{
return no;
}*/
}
set
{
SetSessionByKey("Lang", value);
}
}
///
/// 当前登录人员的部门
///
public static string FK_Dept
{
get
{
string val = GetValFromCookie("FK_Dept", null, false);
if (val == null)
{
if (WebUser.No == null)
throw new Exception("@登录信息丢失,请你确认是否启用了cookie? ");
string sql = "SELECT FK_Dept FROM Port_Emp WHERE No='" + WebUser.No + "'";
string dept = DBAccess.RunSQLReturnStringIsNull(sql, null);
if (dept == null)
{
sql = "SELECT FK_Dept FROM Port_Emp WHERE No='" + WebUser.No + "'";
dept = DBAccess.RunSQLReturnStringIsNull(sql, null);
}
if (dept == null)
throw new Exception("@err-003 FK_Dept,当前登录人员(" + WebUser.No + "),没有设置部门。");
SetSessionByKey("FK_Dept", dept);
return dept;
}
return val;
}
set
{
SetSessionByKey("FK_Dept", value);
}
}
///
/// 所在的集团编号
///
public static string GroupNo111
{
get
{
string val = GetValFromCookie("GroupNo", null, false);
if (val == null)
{
if (BP.Difference.SystemConfig.CustomerNo != "Bank")
return "0";
if (WebUser.No == null)
throw new Exception("@登录信息丢失,请你确认是否启用了cookie? ");
string sql = "SELECT GroupNo FROM Port_Dept WHERE No='" + WebUser.FK_Dept + "'";
string groupNo = DBAccess.RunSQLReturnStringIsNull(sql, null);
if (groupNo == null)
throw new Exception("@err-003 FK_Dept,当前登录人员(" + WebUser.No + "),没有设置部门。");
SetSessionByKey("GroupNo", groupNo);
return groupNo;
}
return val;
}
set
{
SetSessionByKey("GroupNo", value);
}
}
///
/// 当前登录人员的父节点编号
///
public static string DeptParentNo
{
get
{
string val = GetValFromCookie("DeptParentNo", null, false);
if (val == null)
{
if (BP.Web.WebUser.FK_Dept == null)
throw new Exception("@err-001 DeptParentNo, FK_Dept 登录信息丢失。");
BP.Port.Dept dept = new BP.Port.Dept(BP.Web.WebUser.FK_Dept);
BP.Web.WebUser.DeptParentNo = dept.ParentNo;
return dept.ParentNo;
}
return val;
}
set
{
SetSessionByKey("DeptParentNo", value);
}
}
public static string NoOfRel
{
get
{
string val = GetSessionByKey("No", null);
if (val == null)
return GetValFromCookie("No", null, true);
return val;
}
}
public static string GetValFromCookie(string valKey, string isNullAsVal, bool isChinese)
{
if (IsBSMode == false)
return BP.Pub.Current.GetSessionStr(valKey, isNullAsVal);
try
{
//先从session里面取.
//string v = System.Web.HttpContext.Current.Session[valKey] as string;
//2019-07-25 zyt改造
string v = HttpContextHelper.SessionGet(valKey);
if (DataType.IsNullOrEmpty(v) == false)
return v;
else if (SystemConfig.IsDebug==false && valKey == "No" && DataType.IsNullOrEmpty(v))
return null;
}
catch
{
}
try
{
string val = HttpContextHelper.RequestCookieGet(valKey, "CCS");
if (isChinese)
val = HttpUtility.UrlDecode(val);
if (DataType.IsNullOrEmpty(val))
return isNullAsVal;
return val;
}
catch
{
return isNullAsVal;
}
}
///
/// 设置信息.
///
///
public static void SetValToCookie(string keyVals)
{
if (BP.Difference.SystemConfig.IsBSsystem == false)
return;
/* 2019-7-25 张磊 如下代码没有作用,删除
HttpCookie hc = BP.Sys.Base.Glo.Request.Cookies["CCS"];
if (hc != null)
BP.Sys.Base.Glo.Request.Cookies.Remove("CCS");
HttpCookie cookie = new HttpCookie("CCS");
cookie.Expires = DateTime.Now.AddMinutes(BP.Difference.SystemConfig.SessionLostMinute);
*/
Dictionary cookieValues = new Dictionary();
AtPara ap = new AtPara(keyVals);
foreach (string key in ap.HisHT.Keys)
cookieValues.Add(key, ap.GetValStrByKey(key));
cookieValues.Add("Token",WebUser.Token);
HttpContextHelper.ResponseCookieAdd(cookieValues,
DateTime.Now.AddMinutes(BP.Difference.SystemConfig.SessionLostMinute),
"CCS");
}
///
/// 是否是操作员?
///
public static bool IsAdmin
{
get
{
if (WebUser.No == null)
return false;
if (BP.Web.WebUser.No.ToLower().Equals("admin") == true)
return true;
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.Single)
{
GloVar gloVar = new GloVar();
gloVar.No = WebUser.FK_Dept + "_" + WebUser.No + "_Adminer";
if(gloVar.RetrieveFromDBSources()==0)
return false; //单机版.
return true;
}
//SAAS版本. 集团版
if (BP.Difference.SystemConfig.CCBPMRunModel != CCBPMRunModel.Single)
{
string sql = "SELECT FK_Emp FROM Port_OrgAdminer WHERE FK_Emp='" + WebUser.No + "' AND OrgNo='" + WebUser.OrgNo + "'";
if (DBAccess.RunSQLReturnTable(sql).Rows.Count == 0)
return false;
return true;
}
return false;
}
}
///
/// 编号
///
public static string No
{
get
{
return GetValFromCookie("No", null, true);
}
set
{
SetSessionByKey("No", value.Trim());
}
}
public static string UserID
{
get
{
if (SystemConfig.CCBPMRunModel == CCBPMRunModel.SAAS)
return WebUser.OrgNo + "_" + WebUser.No;
return WebUser.No;
}
}
///
/// 名称
///
public static string Name
{
get
{
string no = BP.Web.WebUser.No;
string val = GetValFromCookie("Name", no, true);
if (val == null)
throw new Exception("@err-002 Name 登录信息丢失。");
return val;
}
set
{
SetSessionByKey("Name", value);
}
}
///
/// 运行设备
///
public static string SheBei
{
get
{
string no = BP.Web.WebUser.No;
string val = GetValFromCookie("SheBei", no, true);
if (val == null)
return "PC";
return val;
}
set
{
SetSessionByKey("SheBei", value);
}
}
///
/// 更新当前管理员的组织SID信息.
///
public static void UpdateSIDAndOrgNoSQL()
{
string sql = "";
if (DBAccess.IsView("Port_Emp") == false)
{
sql = "UPDATE Port_Emp SET OrgNo='" + WebUser.OrgNo + "', FK_Dept='" + WebUser.FK_Dept + "' WHERE No='" + WebUser.No + "'";
DBAccess.RunSQL(sql);
sql = "UPDATE WF_Emp SET OrgNo='" + WebUser.OrgNo + "', FK_Dept='" + WebUser.FK_Dept + "' WHERE No='" + WebUser.No + "'";
DBAccess.RunSQL(sql);
return;
}
//比如: UPDATE XXX SET bumenbianao='@FK_Dept', zhizhibianhao='@OrgNo', SID='@SID' WHERE bianhao='@No'
sql = BP.Sys.Base.Glo.UpdateSIDAndOrgNoSQL;
if (DataType.IsNullOrEmpty(sql) == true)
return;
// throw new Exception("err@系统管理员缺少全局配置变量 AppSetting UpdateSIDAndOrgNoSQL ");
sql = sql.Replace("@FK_Dept", WebUser.FK_Dept);
sql = sql.Replace("@OrgNo", WebUser.OrgNo);
sql = sql.Replace("@Token", WebUser.Token);
sql = sql.Replace("@No", WebUser.No);
DBAccess.RunSQL(sql);
}
///
/// 所在的组织
///
public static string OrgNo
{
get
{
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.Single)
return "";
string val = GetValFromCookie("OrgNo", null, true);
if (val == null)
val = GetSessionByKey("OrgNo", null);
if (val == null)
{
if (WebUser.No == null)
throw new Exception("err@登陆信息丢失,请重新登录.");
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.SAAS)
{
string no = DBAccess.RunSQLReturnString("SELECT OrgNo FROM Port_Emp WHERE UserID='" + WebUser.No + "'");
if (DataType.IsNullOrEmpty(no) == true)
throw new Exception("err@SAAS模式下,人员["+BP.Web.WebUser.No+"]的组织编号不能为空.");
SetSessionByKey("OrgNo", no);
return no;
}
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.GroupInc)
{
string no = DBAccess.RunSQLReturnString("SELECT OrgNo FROM Port_Emp WHERE No='" + WebUser.No + "'");
if (DataType.IsNullOrEmpty(no) == true)
throw new Exception("err@集团模式下,人员[" + BP.Web.WebUser.No + "]的组织编号不能为空.");
SetSessionByKey("OrgNo", no);
return no;
}
}
return val;
}
set
{
SetSessionByKey("OrgNo", value);
}
}
public static string OrgName
{
get
{
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.Single)
return "";
string val = GetValFromCookie("OrgName", null, true);
if (val == null)
{
if (WebUser.No == null)
throw new Exception("@err-006 OrgName 登录信息丢失,或者在 CCBPMRunModel=0 的模式下不能读取该节点.");
val = DBAccess.RunSQLReturnString("SELECT Name FROM Port_Org WHERE No='" + WebUser.OrgNo + "'");
SetSessionByKey("OrgName", val);
}
if (val == null)
val = "";
return val;
}
set
{
SetSessionByKey("OrgName", value);
}
}
public static string ToJson()
{
Hashtable ht = new Hashtable();
ht.Add("No", WebUser.No);
ht.Add("Name", WebUser.Name);
ht.Add("Token", WebUser.Token);
ht.Add("FK_Dept", WebUser.FK_Dept);
ht.Add("FK_DeptName", WebUser.FK_DeptName);
ht.Add("OrgNo", WebUser.OrgNo);
ht.Add("OrgName", WebUser.OrgName);
return BP.Tools.Json.ToJson(ht);
}
///
/// 手机号
///
public static string Tel
{
get
{
string val = GetValFromCookie("Tel", null, false);
if (val == null)
{
if (WebUser.No == null)
throw new Exception("@登录信息丢失,请你确认是否启用了cookie? ");
string sql = "SELECT Tel FROM Port_Emp WHERE No='" + WebUser.No + "'";
string tel = DBAccess.RunSQLReturnStringIsNull(sql, null);
SetSessionByKey("Tel", tel);
return tel;
}
return val;
}
set
{
SetSessionByKey("Tel", value);
}
}
///
/// 域
///
public static string Domain
{
get
{
string val = GetValFromCookie("Domain", null, true);
if (val == null)
throw new Exception("@err-003 Domain 登录信息丢失。");
return val;
}
set
{
SetSessionByKey("Domain", value);
}
}
public static Stations HisStations
{
get
{
Stations sts = new Stations();
QueryObject qo = new QueryObject(sts);
qo.AddWhereInSQL("No", "SELECT FK_Station FROM Port_DeptEmpStation WHERE FK_Emp='" + WebUser.No + "'");
qo.DoQuery();
return sts;
}
}
///
/// 是否是授权状态
///
public static bool IsAuthorize
{
get
{
if (Auth == null || Auth == "")
return false;
return true;
}
}
///
/// 使用授权人ID
///
public static string AuthName
{
get
{
string val = GetValFromCookie("AuthName", null, false);
if (val == null)
val = GetSessionByKey("AuthName", null);
return val;
}
set
{
if (value == "")
SetSessionByKey("AuthName", null);
else
SetSessionByKey("AuthName", value);
}
}
public static string Theame
{
get
{
string val = GetValFromCookie("Theame", null, false);
if (val == null)
val = GetSessionByKey("Theame", null);
return val;
}
set
{
if (value == "")
SetSessionByKey("Theame", null);
else
SetSessionByKey("Theame", value);
}
}
}
}