修改公司级培训
This commit is contained in:
@@ -468,5 +468,135 @@ namespace BLL
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
public static string InsertCodeRecordsByMenuIdProjectIdUnitIdForApi(string menuId, string projectId, string unitId, string dataId, DateTime? compileDate)
|
||||
{
|
||||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||||
{
|
||||
string ruleCode = string.Empty;
|
||||
var IsHaveCodeRecords = db.Sys_CodeRecords.FirstOrDefault(x => x.DataId == dataId);
|
||||
if (IsHaveCodeRecords == null) ///是否已存在编码
|
||||
{
|
||||
string ruleCodeower = string.Empty;
|
||||
int digit = 4; ///流水位数
|
||||
string symbolower = "-"; ///业主间隔符
|
||||
int digitower = 4; ///业主流水位数
|
||||
string symbol = "-"; ///间隔符
|
||||
var project = db.Base_Project.FirstOrDefault(e => e.ProjectId == projectId); ////项目
|
||||
if (project != null && !string.IsNullOrEmpty(dataId))
|
||||
{
|
||||
string projectCode = project.ProjectCode; ///项目编号
|
||||
////编码规则表
|
||||
var sysCodeTemplateRule = db.ProjectData_CodeTemplateRule.FirstOrDefault(x => x.MenuId == menuId && x.ProjectId == projectId);
|
||||
if (sysCodeTemplateRule != null)
|
||||
{
|
||||
symbol = sysCodeTemplateRule.Symbol;
|
||||
symbolower = sysCodeTemplateRule.OwerSymbol;
|
||||
|
||||
if (sysCodeTemplateRule.Digit.HasValue)
|
||||
{
|
||||
digit = sysCodeTemplateRule.Digit.Value;
|
||||
}
|
||||
if (sysCodeTemplateRule.OwerDigit.HasValue)
|
||||
{
|
||||
digitower = sysCodeTemplateRule.OwerDigit.Value;
|
||||
}
|
||||
if (sysCodeTemplateRule.IsProjectCode == true)
|
||||
{
|
||||
ruleCode = projectCode + symbol;
|
||||
}
|
||||
if (sysCodeTemplateRule.OwerIsProjectCode == true)
|
||||
{
|
||||
ruleCodeower = projectCode + symbolower;
|
||||
}
|
||||
if (!string.IsNullOrEmpty(sysCodeTemplateRule.Prefix))
|
||||
{
|
||||
ruleCode += sysCodeTemplateRule.Prefix + symbol;
|
||||
}
|
||||
if (!string.IsNullOrEmpty(sysCodeTemplateRule.OwerPrefix))
|
||||
{
|
||||
ruleCodeower += sysCodeTemplateRule.OwerPrefix + symbolower;
|
||||
}
|
||||
if (sysCodeTemplateRule.IsUnitCode == true || sysCodeTemplateRule.OwerIsUnitCode == true)
|
||||
{
|
||||
var unit = db.Base_Unit.FirstOrDefault(x => x.UnitId == unitId);
|
||||
if (unit != null)
|
||||
{
|
||||
if (sysCodeTemplateRule.IsUnitCode == true)
|
||||
{ ruleCode = unit.UnitCode + symbol; }
|
||||
|
||||
if (sysCodeTemplateRule.OwerIsUnitCode == true)
|
||||
{
|
||||
ruleCodeower = unit.UnitCode + symbolower;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
////获取编码记录表最大排列序号
|
||||
int maxNewSortIndex = 0;
|
||||
if (!String.IsNullOrEmpty(projectId))
|
||||
{
|
||||
var maxSortIndex = db.Sys_CodeRecords.Where(x => x.ProjectId == projectId && x.MenuId == menuId).Select(x => x.SortIndex).Max();
|
||||
if (maxSortIndex.HasValue)
|
||||
{
|
||||
maxNewSortIndex = maxSortIndex.Value;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var maxSortIndexNull = db.Sys_CodeRecords.Where(x => x.MenuId == menuId).Select(x => x.SortIndex).Max();
|
||||
if (maxSortIndexNull.HasValue)
|
||||
{
|
||||
maxNewSortIndex = maxSortIndexNull.Value;
|
||||
}
|
||||
}
|
||||
maxNewSortIndex = maxNewSortIndex + 1;
|
||||
////插入数据库
|
||||
Model.Sys_CodeRecords newCodeRecords = new Model.Sys_CodeRecords
|
||||
{
|
||||
CodeRecordId = SQLHelper.GetNewID(typeof(Model.Sys_CodeRecords))
|
||||
};
|
||||
if (project != null)
|
||||
{
|
||||
newCodeRecords.ProjectId = project.ProjectId;
|
||||
}
|
||||
newCodeRecords.MenuId = menuId;
|
||||
newCodeRecords.DataId = dataId;
|
||||
newCodeRecords.UnitId = unitId;
|
||||
newCodeRecords.SortIndex = maxNewSortIndex;
|
||||
newCodeRecords.CompileDate = compileDate;
|
||||
newCodeRecords.RuleCodes = ruleCode;
|
||||
newCodeRecords.Digit = digit;
|
||||
newCodeRecords.OwnerRuleCodes = ruleCodeower;
|
||||
newCodeRecords.OwerDigit = digitower;
|
||||
if (!string.IsNullOrEmpty(ruleCode))
|
||||
{
|
||||
newCodeRecords.Code = ruleCode + (maxNewSortIndex.ToString().PadLeft(digit, '0')); ///字符自动补零 编码
|
||||
}
|
||||
else
|
||||
{
|
||||
newCodeRecords.Code = (maxNewSortIndex.ToString().PadLeft(digit, '0'));
|
||||
}
|
||||
if (!string.IsNullOrEmpty(ruleCodeower))
|
||||
{
|
||||
newCodeRecords.OwnerCode = ruleCodeower + (maxNewSortIndex.ToString().PadLeft(digitower, '0')); ///字符自动补零 业主编码
|
||||
}
|
||||
else
|
||||
{
|
||||
newCodeRecords.OwnerCode = (maxNewSortIndex.ToString().PadLeft(digitower, '0'));
|
||||
}
|
||||
db.Sys_CodeRecords.InsertOnSubmit(newCodeRecords);
|
||||
db.SubmitChanges();
|
||||
}
|
||||
else
|
||||
{
|
||||
ruleCode = IsHaveCodeRecords.Code;
|
||||
}
|
||||
|
||||
return ruleCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
using System;
|
||||
using StackExchange.Redis;
|
||||
|
||||
namespace BLL
|
||||
{
|
||||
/// <summary>
|
||||
/// 接口
|
||||
/// </summary>
|
||||
public interface ICache
|
||||
{
|
||||
/// <summary>
|
||||
/// 缓存过期时间
|
||||
/// </summary>
|
||||
int TimeOut { set; get; }
|
||||
/// <summary>
|
||||
/// 获得指定键的缓存值
|
||||
/// </summary>
|
||||
/// <param name="key">缓存键</param>
|
||||
/// <returns>缓存值</returns>
|
||||
object Get(string key);
|
||||
/// <summary>
|
||||
/// 获得指定键的缓存值
|
||||
/// </summary>
|
||||
T Get<T>(string key);
|
||||
/// <summary>
|
||||
/// 从缓存中移除指定键的缓存值
|
||||
/// </summary>
|
||||
/// <param name="key">缓存键</param>
|
||||
void Remove(string key);
|
||||
/// <summary>
|
||||
/// 清空所有缓存对象
|
||||
/// </summary>
|
||||
//void Clear();
|
||||
/// <summary>
|
||||
/// 将指定键的对象添加到缓存中
|
||||
/// </summary>
|
||||
/// <param name="key">缓存键</param>
|
||||
/// <param name="data">缓存值</param>
|
||||
void Insert(string key, object data);
|
||||
/// <summary>
|
||||
/// 将指定键的对象添加到缓存中
|
||||
/// </summary>
|
||||
/// <param name="key">缓存键</param>
|
||||
/// <param name="data">缓存值</param>
|
||||
void Insert<T>(string key, T data);
|
||||
/// <summary>
|
||||
/// 将指定键的对象添加到缓存中,并指定过期时间
|
||||
/// </summary>
|
||||
/// <param name="key">缓存键</param>
|
||||
/// <param name="data">缓存值</param>
|
||||
/// <param name="cacheTime">缓存过期时间(秒钟)</param>
|
||||
void Insert(string key, object data, int cacheTime);
|
||||
|
||||
/// <summary>
|
||||
/// 将指定键的对象添加到缓存中,并指定过期时间
|
||||
/// </summary>
|
||||
/// <param name="key">缓存键</param>
|
||||
/// <param name="data">缓存值</param>
|
||||
/// <param name="cacheTime">缓存过期时间(秒钟)</param>
|
||||
void Insert<T>(string key, T data, int cacheTime);
|
||||
/// <summary>
|
||||
/// 将指定键的对象添加到缓存中,并指定过期时间
|
||||
/// </summary>
|
||||
/// <param name="key">缓存键</param>
|
||||
/// <param name="data">缓存值</param>
|
||||
/// <param name="cacheTime">缓存过期时间</param>
|
||||
void Insert(string key, object data, DateTime cacheTime);
|
||||
/// <summary>
|
||||
/// 将指定键的对象添加到缓存中,并指定过期时间
|
||||
/// </summary>
|
||||
/// <param name="key">缓存键</param>
|
||||
/// <param name="data">缓存值</param>
|
||||
/// <param name="cacheTime">缓存过期时间</param>
|
||||
void Insert<T>(string key, T data, DateTime cacheTime);
|
||||
/// <summary>
|
||||
/// 判断key是否存在
|
||||
/// </summary>
|
||||
bool Exists(string key);
|
||||
/// <summary>
|
||||
/// 右侧入队
|
||||
/// </summary>
|
||||
/// <param name="queueName"></param>
|
||||
/// <param name="redisValue"></param>
|
||||
/// <returns></returns>
|
||||
long EnqueueListRightPush(RedisKey queueName, RedisValue redisValue);
|
||||
/// <summary>
|
||||
/// 左侧入队
|
||||
/// </summary>
|
||||
/// <param name="queueName"></param>
|
||||
/// <param name="redisvalue"></param>
|
||||
/// <returns></returns>
|
||||
long EnqueueListLeftPush(RedisKey queueName, RedisValue redisvalue);
|
||||
/// <summary>
|
||||
/// 获取队列长度
|
||||
/// </summary>
|
||||
/// <param name="queueName"></param>
|
||||
/// <returns></returns>
|
||||
long EnqueueListLength(RedisKey queueName);
|
||||
/// <summary>
|
||||
/// 左侧出队
|
||||
/// </summary>
|
||||
/// <param name="queueName"></param>
|
||||
/// <returns></returns>
|
||||
string DequeueListPopLeft(RedisKey queueName);
|
||||
/// <summary>
|
||||
/// 右侧出队
|
||||
/// </summary>
|
||||
/// <param name="queueName"></param>
|
||||
/// <returns></returns>
|
||||
string DequeueListPopRight(RedisKey queueName);
|
||||
/// <summary>
|
||||
/// 分布式加锁
|
||||
/// </summary>
|
||||
/// <param name="key">键</param>
|
||||
/// <param name="data">值</param>
|
||||
/// <param name="seconds">过期时间</param>
|
||||
/// <returns></returns>
|
||||
bool LockTake(string key, string data, TimeSpan seconds, int db = 0);
|
||||
/// <summary>
|
||||
/// 解锁
|
||||
/// </summary>
|
||||
/// <param name="key">键</param>
|
||||
/// <param name="data">值</param>
|
||||
/// <returns></returns>
|
||||
bool LockRelease(string key, string data, int db = -1);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,308 @@
|
||||
using System;
|
||||
using System.Configuration;
|
||||
using Newtonsoft.Json;
|
||||
using StackExchange.Redis;
|
||||
|
||||
namespace BLL
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class Redis : ICache
|
||||
{
|
||||
int Default_Timeout = 600;//默认超时时间(单位秒)
|
||||
string address;
|
||||
JsonSerializerSettings jsonConfig = new JsonSerializerSettings() { ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore, NullValueHandling = NullValueHandling.Ignore };
|
||||
ConnectionMultiplexer connectionMultiplexer;
|
||||
IDatabase database;
|
||||
|
||||
class CacheObject<T>
|
||||
{
|
||||
public int ExpireTime { get; set; }
|
||||
public bool ForceOutofDate { get; set; }
|
||||
public T Value { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="dbbase"></param>
|
||||
public Redis(int dbbase = 0)
|
||||
{
|
||||
this.address = this.address = ConfigurationManager.AppSettings["RedisHosts"];
|
||||
|
||||
if (this.address == null || string.IsNullOrWhiteSpace(this.address.ToString()))
|
||||
throw new ApplicationException("配置文件中未找到RedisServer的有效配置");
|
||||
connectionMultiplexer = ConnectionMultiplexer.Connect(address);
|
||||
database = connectionMultiplexer.GetDatabase(dbbase);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 连接超时设置
|
||||
/// </summary>
|
||||
public int TimeOut
|
||||
{
|
||||
get
|
||||
{
|
||||
return Default_Timeout;
|
||||
}
|
||||
set
|
||||
{
|
||||
Default_Timeout = value;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <returns></returns>
|
||||
public object Get(string key)
|
||||
{
|
||||
return Get<object>(key);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="key"></param>
|
||||
/// <returns></returns>
|
||||
public T Get<T>(string key)
|
||||
{
|
||||
|
||||
DateTime begin = DateTime.Now;
|
||||
var cacheValue = database.StringGet(key);
|
||||
DateTime endCache = DateTime.Now;
|
||||
var value = default(T);
|
||||
if (!cacheValue.IsNull)
|
||||
{
|
||||
var cacheObject = JsonConvert.DeserializeObject<CacheObject<T>>(cacheValue, jsonConfig);
|
||||
if (!cacheObject.ForceOutofDate)
|
||||
database.KeyExpire(key, new TimeSpan(0, 0, cacheObject.ExpireTime));
|
||||
value = cacheObject.Value;
|
||||
}
|
||||
DateTime endJson = DateTime.Now;
|
||||
return value;
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="data"></param>
|
||||
public void Insert(string key, object data)
|
||||
{
|
||||
var jsonData = GetJsonData(data, TimeOut, false);
|
||||
database.StringSet(key, jsonData);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="data"></param>
|
||||
/// <param name="cacheTime"></param>
|
||||
public void Insert(string key, object data, int cacheTime)
|
||||
{
|
||||
var timeSpan = TimeSpan.FromSeconds(cacheTime);
|
||||
var jsonData = GetJsonData(data, TimeOut, true);
|
||||
database.StringSet(key, jsonData, timeSpan);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="data"></param>
|
||||
/// <param name="cacheTime"></param>
|
||||
public void Insert(string key, object data, DateTime cacheTime)
|
||||
{
|
||||
var timeSpan = cacheTime - DateTime.Now;
|
||||
var jsonData = GetJsonData(data, TimeOut, true);
|
||||
database.StringSet(key, jsonData, timeSpan);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="data"></param>
|
||||
public void Insert<T>(string key, T data)
|
||||
{
|
||||
var jsonData = GetJsonData<T>(data, TimeOut, false);
|
||||
database.StringSet(key, jsonData);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="data"></param>
|
||||
/// <param name="cacheTime"></param>
|
||||
public void Insert<T>(string key, T data, int cacheTime)
|
||||
{
|
||||
var timeSpan = TimeSpan.FromSeconds(cacheTime);
|
||||
var jsonData = GetJsonData<T>(data, TimeOut, true);
|
||||
database.StringSet(key, jsonData, timeSpan);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="data"></param>
|
||||
/// <param name="cacheTime"></param>
|
||||
public void Insert<T>(string key, T data, DateTime cacheTime)
|
||||
{
|
||||
var timeSpan = cacheTime - DateTime.Now;
|
||||
var jsonData = GetJsonData<T>(data, TimeOut, true);
|
||||
database.StringSet(key, jsonData, timeSpan);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
/// <param name="cacheTime"></param>
|
||||
/// <param name="forceOutOfDate"></param>
|
||||
/// <returns></returns>
|
||||
string GetJsonData(object data, int cacheTime, bool forceOutOfDate)
|
||||
{
|
||||
var cacheObject = new CacheObject<object>() { Value = data, ExpireTime = cacheTime, ForceOutofDate = forceOutOfDate };
|
||||
return JsonConvert.SerializeObject(cacheObject, jsonConfig);//序列化对象
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="data"></param>
|
||||
/// <param name="cacheTime"></param>
|
||||
/// <param name="forceOutOfDate"></param>
|
||||
/// <returns></returns>
|
||||
string GetJsonData<T>(T data, int cacheTime, bool forceOutOfDate)
|
||||
{
|
||||
var cacheObject = new CacheObject<T>() { Value = data, ExpireTime = cacheTime, ForceOutofDate = forceOutOfDate };
|
||||
return JsonConvert.SerializeObject(cacheObject, jsonConfig);//序列化对象
|
||||
}
|
||||
/// <summary>
|
||||
/// 删除
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
public void Remove(string key)
|
||||
{
|
||||
database.KeyDelete(key, CommandFlags.HighPriority);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 判断key是否存在
|
||||
/// </summary>
|
||||
public bool Exists(string key)
|
||||
{
|
||||
return database.KeyExists(key);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 右侧入队
|
||||
/// </summary>
|
||||
/// <param name="queueName">队列名称</param>
|
||||
/// <param name="redisValue">值</param>
|
||||
/// <returns></returns>
|
||||
public long EnqueueListRightPush(RedisKey queueName, RedisValue redisValue)
|
||||
{
|
||||
return database.ListRightPush(queueName, redisValue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 左侧入队
|
||||
/// </summary>
|
||||
/// <param name="queueName">队列名称</param>
|
||||
/// <param name="redisvalue">队列值</param>
|
||||
/// <returns></returns>
|
||||
public long EnqueueListLeftPush(RedisKey queueName, RedisValue redisvalue)
|
||||
{
|
||||
return database.ListLeftPush(queueName, redisvalue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取队列长度
|
||||
/// </summary>
|
||||
/// <param name="queueName">队列名称</param>
|
||||
/// <returns></returns>
|
||||
public long EnqueueListLength(RedisKey queueName)
|
||||
{
|
||||
if (database.KeyExists(queueName))
|
||||
{
|
||||
return database.ListLength(queueName);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 左侧出队
|
||||
/// </summary>
|
||||
/// <param name="queueName"></param>
|
||||
/// <returns></returns>
|
||||
public string DequeueListPopLeft(RedisKey queueName)
|
||||
{
|
||||
int count = database.ListRange(queueName).Length;
|
||||
if (count > 0)
|
||||
{
|
||||
string redisValue = database.ListLeftPop(queueName);
|
||||
if (!string.IsNullOrEmpty(redisValue))
|
||||
return redisValue;
|
||||
else
|
||||
return string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
return "-1";
|
||||
throw new Exception($"队列{queueName}数据为零");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 右侧出队
|
||||
/// </summary>
|
||||
public string DequeueListPopRight(RedisKey queueName)
|
||||
{
|
||||
int count = database.ListRange(queueName).Length;
|
||||
if (count > 0)
|
||||
{
|
||||
string redisValue = database.ListRightPop(queueName);
|
||||
if (!string.IsNullOrEmpty(redisValue))
|
||||
return redisValue;
|
||||
else
|
||||
return string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
return "-1";
|
||||
throw new Exception($"队列{queueName}数据为零");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 分布式加锁
|
||||
/// </summary>
|
||||
/// <param name="key">键</param>
|
||||
/// <param name="data">值</param>
|
||||
/// <param name="seconds">过期时间</param>
|
||||
/// <returns></returns>
|
||||
public bool LockTake(string key, string data, TimeSpan seconds, int db = 0)
|
||||
{
|
||||
return database.LockTake(key, data, seconds);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 解锁
|
||||
/// </summary>
|
||||
/// <param name="key">键</param>
|
||||
/// <param name="data">值</param>
|
||||
/// <returns></returns>
|
||||
public bool LockRelease(string key, string data, int db = -1)
|
||||
{
|
||||
return database.LockRelease(key, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user