特种设备修改,车辆管理人员管理合并,考试接口创建试卷和答题使用redis

This commit is contained in:
2024-04-02 14:28:52 +08:00
parent 1b96387adc
commit d87b2d5be9
49 changed files with 4175 additions and 179 deletions
-130
View File
@@ -1,130 +0,0 @@
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebAPI.Common
{
/// <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);
}
}
+3 -7
View File
@@ -1,12 +1,8 @@
using Aspose.Words.Lists;
using System;
using System.Collections.Generic;
using System.Security.Cryptography.X509Certificates;
using Fleck;
using Newtonsoft.Json;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Web;
namespace WebAPI.Common
{
-311
View File
@@ -1,311 +0,0 @@
using Newtonsoft.Json;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
namespace WebAPI.Common
{
/// <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);
}
}
}
@@ -8,6 +8,7 @@ using System.Net;
using System.Net.Http;
using System.Web.Http;
using BLL;
using Model;
namespace WebAPI.Controllers
{
/// <summary>
@@ -346,6 +347,77 @@ namespace WebAPI.Controllers
return responeData;
}
public Model.ResponeData getTestRecordItemAnswerBySelectedItem(string testRecordId,string testRecordItemId, string selectedItem)
{
var responeData = new Model.ResponeData();
try
{
if (!string.IsNullOrEmpty(testRecordId) && !string.IsNullOrEmpty(testRecordItemId) && !string.IsNullOrEmpty(selectedItem))
{
BLL.RedisHelper redis = new RedisHelper();
var trainingTestRecordItems = redis.GetObjString<List<Training_TestRecordItem>>(testRecordId); //根据试卷ID获取试卷题目列表
var getTItem= trainingTestRecordItems.FirstOrDefault(x => x.TestRecordItemId== testRecordItemId); //获取试题
if (getTItem==null)
{
responeData.code = 0;
responeData.message = "答题为空选项!";
return responeData;
}
getTItem.SubjectScore = 0;
getTItem.SelectedItem = selectedItem;
if (!string.IsNullOrEmpty(selectedItem))
{
if (getTItem.AnswerItems == selectedItem)
{
getTItem.SubjectScore = getTItem.Score ?? 0;
}
else
{
var listA = Funs.GetStrListByStr(getTItem.AnswerItems.ToUpper(), ',');
var listS = Funs.GetStrListByStr(selectedItem.ToUpper(), ',');
if (getTItem.TestType == "2" && listA.Count >= listS.Count)
{
int i = 0;
foreach (var item in listS)
{
if (!listA.Contains(item))
{
i++;
break;
}
}
if (i == 0)
{
if (listA.Count == listS.Count)
{
getTItem.SubjectScore = getTItem.Score ?? 0;
}
else
{
getTItem.SubjectScore = Convert.ToDecimal((getTItem.Score ?? 0) * 1.0 / 2);
}
}
}
}
}
redis.SetObjString(testRecordId, getTItem);
}
else
{
responeData.code = 0;
responeData.message = "参数不足!";
return responeData;
}
}
catch (Exception ex)
{
responeData.code = 0;
responeData.message = ex.Message;
}
return responeData;
}
#endregion
#region
@@ -360,6 +432,25 @@ namespace WebAPI.Controllers
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
#region
RedisHelper redis = new RedisHelper();
var trainingTestRecordItems = redis.GetObjString<List<Training_TestRecordItem>>(testRecordId);
if (trainingTestRecordItems.Count>0)
{
var testRecordItem = from x in db.Training_TestRecordItem
where x.TestRecordId == testRecordId
select x;
if (testRecordItem.Any())
{
db.Training_TestRecordItem.DeleteAllOnSubmit(testRecordItem);
db.SubmitChanges();
}
db.Training_TestRecordItem.InsertAllOnSubmit(trainingTestRecordItems);
}
#endregion
string returnTestRecordId = string.Empty;
decimal getTestScores = 0;
var getTestRecord = db.Training_TestRecord.FirstOrDefault(e => e.TestRecordId == testRecordId);
@@ -429,6 +520,25 @@ namespace WebAPI.Controllers
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
#region
RedisHelper redis = new RedisHelper();
var trainingTestRecordItems = redis.GetObjString<List<Training_TestRecordItem>>(testRecordId);
if (trainingTestRecordItems.Count > 0)
{
var modeltestRecordItem = from x in db.Training_TestRecordItem
where x.TestRecordId == testRecordId
select x;
if (modeltestRecordItem.Any())
{
db.Training_TestRecordItem.DeleteAllOnSubmit(modeltestRecordItem);
db.SubmitChanges();
}
db.Training_TestRecordItem.InsertAllOnSubmit(trainingTestRecordItems);
}
#endregion
var getTestRecord = db.Training_TestRecord.FirstOrDefault(e => e.TestRecordId == testRecordId);
if (getTestRecord != null)
{
+1
View File
@@ -7,6 +7,7 @@ using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using System.Configuration;
using BLL;
using WebAPI.Common;
namespace WebAPI
-2
View File
@@ -217,9 +217,7 @@
<Compile Include="Areas\HelpPage\SampleGeneration\SampleDirection.cs" />
<Compile Include="Areas\HelpPage\SampleGeneration\TextSample.cs" />
<Compile Include="Areas\HelpPage\XmlDocumentationProvider.cs" />
<Compile Include="Common\ICache.cs" />
<Compile Include="Common\PersonKqSocketServices.cs" />
<Compile Include="Common\Redis.cs" />
<Compile Include="Controllers\BaseInfoController.cs" />
<Compile Include="Controllers\CommonController.cs" />
<Compile Include="Controllers\CQMS\InspectionManagementController.cs" />