using System;
using System.Collections.Generic;
using System.Linq;
using MySystem.MainModels;
using Library;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
namespace MySystem
{
public class PublicFunction
{
#region 根据ParentNav获取顶级创客Id
public static int GetTopUserId(string ParentNav)
{
int TopUserId = 0;
if (!string.IsNullOrEmpty(ParentNav))
{
TopUserId = int.Parse(ParentNav.Trim(',').Replace(",,", ",").Split(',')[0]);
}
return TopUserId;
}
#endregion
#region 隐藏身份证号
public static string HideCertId(string str)
{
return str.Substring(0, 3) + "***********" + str.Substring(14);
}
#endregion
#region 隐藏姓名
public static string HideRealName(string str)
{
string result = "";
for (int i = 0; i < str.Length; i++)
{
if (i == 0)
{
result += str.Substring(i, 1);
}
else
{
result += "*";
}
}
return result;
}
#endregion
#region 姓名脱敏
///
/// 姓名敏感处理
///
/// 姓名
/// 脱敏后的姓名
public static string SetSensitiveName(string fullName)
{
if (string.IsNullOrEmpty(fullName)) return string.Empty;
string familyName = fullName.Substring(0, 1);
string end = fullName.Substring(fullName.Length - 1, 1);
string name = string.Empty;
//长度为2
if (fullName.Length <= 2) name = familyName + "*";
//长度⼤于2
else if (fullName.Length >= 3)
{
name = familyName.PadRight(fullName.Length - 1, '*') + end;
}
return name;
}
#endregion
#region 统计机具绑定数据
public static void StatUserMachineData(int UserId, int BrandId, int Count)
{
WebCMSEntities db = new WebCMSEntities();
string IdBrand = UserId + "_" + BrandId;
UserMachineData MachineData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
if (MachineData == null)
{
MachineData = db.UserMachineData.Add(new UserMachineData()
{
IdBrand = IdBrand,
}).Entity;
db.SaveChanges();
}
if(Count < 0)
{
MachineData.TotalMachineCount -= Math.Abs(Count);
MachineData.UnBindCount -= Math.Abs(Count);
}
else
{
MachineData.TotalMachineCount += Count;
MachineData.UnBindCount += Count;
}
db.SaveChanges();
db.Dispose();
}
#endregion
#region 绑定
public static void BindUserMachineData(WebCMSEntities db, int UserId, int BrandId, int Count, string PosSn)
{
PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == PosSn) ?? new PosMachinesTwo();
pos.BindingState = 1;
pos.BindingTime = DateTime.Now;
string IdBrand = UserId + "_" + BrandId;
UserMachineData MachineData = db.UserMachineData.FirstOrDefault(m => m.IdBrand == IdBrand);
if (MachineData == null)
{
MachineData = db.UserMachineData.Add(new UserMachineData()
{
IdBrand = IdBrand,
}).Entity;
db.SaveChanges();
}
MachineData.UnBindCount -= Count;
MachineData.BindCount += Count;
db.SaveChanges();
}
#endregion
#region 划拨记录
public static void SendRecord(WebCMSEntities db, int UserId, int ToUserId, int StoreId, string[] PosSnList)
{
string ChangeRecordNo = "SC" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + function.get_Random(8);
for (int i = 0; i < PosSnList.Length; i++)
{
string PosSn = PosSnList[i];
PosMachinesTwo pos = db.PosMachinesTwo.FirstOrDefault(m => m.PosSn == PosSn) ?? new PosMachinesTwo();
pos.StoreId = StoreId;
pos.TransferTime = DateTime.Now;
pos.BuyUserId = ToUserId;
pos.UserId = ToUserId;
db.PosCouponRecord.Add(new PosCouponRecord()
{
CreateDate = DateTime.Now,
OrderNo = ChangeRecordNo,
ToUserId = ToUserId,
FromUserId = UserId,
PosCouponId = pos.Id,
});
}
int SnCount = PosSnList.Length;
db.PosCouponOrders.Add(new PosCouponOrders()
{
CreateDate = DateTime.Now,
ChangeCount = SnCount,
OrderNo = ChangeRecordNo,
ToUserId = ToUserId,
FromUserId = UserId,
});
db.SaveChanges();
}
#endregion
#region 获取jwt的token
public static string AppToken(int UserId, string JwtSecret, string JwtIss, string tag = "")
{
return AppToken(UserId.ToString(), JwtSecret, JwtIss, tag);
}
public static string AppToken(string UserId, string JwtSecret, string JwtIss, string tag = "")
{
string Token = RedisDbconn.Instance.Get("apptoken:" + UserId + tag);
if(!string.IsNullOrEmpty(Token))
{
return Token;
}
string issuer = "new_" + UserId + tag;
string test = function.get_Random(10);
var securityKey = new SigningCredentials(new SymmetricSecurityKey(Encoding.ASCII.GetBytes(JwtSecret)), SecurityAlgorithms.HmacSha256);
var claims = new Claim[] {
new Claim(JwtRegisteredClaimNames.Iss,JwtIss),
new Claim(JwtRegisteredClaimNames.Aud,test),
new Claim("Guid", Guid.NewGuid().ToString("D")),
new Claim(ClaimTypes.Role, "system"),
new Claim(ClaimTypes.Role, "admin"),
};
SecurityToken securityToken = new JwtSecurityToken(
signingCredentials: securityKey,
expires: DateTime.Now.AddDays(10),//过期时间
claims: claims,
audience: test,
issuer: issuer
);
RedisDbconn.Instance.Set("utoken:" + issuer, test);
RedisDbconn.Instance.SetExpire("utoken:" + issuer, 3600 * 24 * 10);
//生成jwt令牌
Token = new JwtSecurityTokenHandler().WriteToken(securityToken);
RedisDbconn.Instance.Set("apptoken:" + UserId + tag, Token);
RedisDbconn.Instance.SetExpire("apptoken:" + UserId + tag, 3600 * 24 * 10 - 60);
//生成jwt令牌
return new JwtSecurityTokenHandler().WriteToken(securityToken);
}
#endregion
//收支明细类别结合
public static List IncomeTypes()
{
List list = new List();
list.Add(0);
list.Add(1);
list.Add(12);
list.Add(31);
list.Add(50);
list.Add(60);
list.Add(64);
list.Add(66);
list.Add(111);
list.Add(112);
list.Add(113);
list.Add(114);
list.Add(115);
list.Add(116);
list.Add(117);
list.Add(118);
list.Add(119);
list.Add(120);
list.Add(121);
list.Add(122);
list.Add(123);
list.Add(126);
return list;
}
public static List ExpendTypes()
{
List list = new List();
list.Add(3);
list.Add(4);
list.Add(5);
list.Add(20);
list.Add(63);
list.Add(65);
list.Add(124);
list.Add(125);
return list;
}
}
}