|
@@ -93,11 +93,17 @@ namespace TEAMModelOS.Controllers
|
|
|
{
|
|
|
try {
|
|
|
var lessonTask = request.ToObject<LessonTask>();
|
|
|
+
|
|
|
string sql = $"select value c from c where c.school='{lessonTask.school}' and c.channel='{lessonTask.channel}'";
|
|
|
+ if (!string.IsNullOrWhiteSpace(lessonTask.lessonId))
|
|
|
+ {
|
|
|
+ sql=$"{sql} and c.lessonId='{lessonTask.lessonId}'";
|
|
|
+ }
|
|
|
var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).GetList<Imei>(sql, "Imei");
|
|
|
if (result.list.IsNotEmpty())
|
|
|
{
|
|
|
long now = DateTimeOffset.UtcNow.GetGMTTime(8).ToUnixTimeMilliseconds();
|
|
|
+ await _azureRedis.GetRedisClient(8).StringSetAsync($"LessonTask:{lessonTask.id}", lessonTask.ToJsonString(), expiry: new TimeSpan(8, 0, 0));
|
|
|
switch (lessonTask.imeiType)
|
|
|
{
|
|
|
case "ThirdIRS_139zhxy":
|
|
@@ -166,7 +172,7 @@ namespace TEAMModelOS.Controllers
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
- await _azureRedis.GetRedisClient(8).StringSetAsync( $"LessonTask:{lessonTask.id}" , lessonTask.ToJsonString(), expiry: new TimeSpan(8, 0, 0));
|
|
|
+
|
|
|
}
|
|
|
} catch (Exception ex)
|
|
|
{
|
|
@@ -197,119 +203,97 @@ namespace TEAMModelOS.Controllers
|
|
|
{
|
|
|
timestamp= _timestamp.ToString();
|
|
|
}
|
|
|
- // if (!string.IsNullOrEmpty(sign) && !string.IsNullOrWhiteSpace(timestamp))
|
|
|
- // {
|
|
|
- // string local_sign = Md5Hash.Encrypt($"{AppID139zhxy}{AppKey139zhxy}{timestamp}");
|
|
|
- // if (local_sign.Equals(sign))
|
|
|
+
|
|
|
+ var result = json.ToObject<ZHXY139IRSResult>();
|
|
|
+ // await _dingDing.SendBotMsg($"接收到 139zhxy反馈器推送信息!{json.ToJsonString()}\n", GroupNames.成都开发測試群組);
|
|
|
+ var data = await _azureRedis.GetRedisClient(8).StringGetAsync($"LessonTask:{result.workId}");
|
|
|
+ string datastr = $"{data}";
|
|
|
+ if (!string.IsNullOrWhiteSpace(datastr))
|
|
|
+ {
|
|
|
+ LessonTask lessonTask = data.ToString().ToObject<LessonTask>();
|
|
|
+ string kid = result.imei;
|
|
|
+ if (string.IsNullOrWhiteSpace(result.imei))
|
|
|
{
|
|
|
- var result = json.ToObject<ZHXY139IRSResult>();
|
|
|
- // await _dingDing.SendBotMsg($"接收到 139zhxy反馈器推送信息!{json.ToJsonString()}\n", GroupNames.成都开发測試群組);
|
|
|
- var data = await _azureRedis.GetRedisClient(8).StringGetAsync($"LessonTask:{result.workId}");
|
|
|
- if (!data.IsNullOrEmpty)
|
|
|
+ kid=result.phone;
|
|
|
+ }
|
|
|
+ Imei stu = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).ReadItemAsync<Imei>(kid, new PartitionKey("Imei"));
|
|
|
+ if (!string.IsNullOrWhiteSpace(stu?.channel) && !string.IsNullOrWhiteSpace(stu?.userid) && lessonTask.channel.Equals(stu?.channel))
|
|
|
+ {
|
|
|
+ // 處理單例復用,提高請求效率,避免ServiceTransportType.Persistent websocket斷線在Azure偶發的消息遺失
|
|
|
+ // TODO 尚須注意釋放的問題,後續須處理
|
|
|
+
|
|
|
+ // 下面註解寫法會造成Azure上消息偶發遺失,Localhost不會發生
|
|
|
+ //var serviceManager = _azureSignalR.GetServiceManager();
|
|
|
+ //using var hub = await serviceManager.CreateHubContextAsync($"C{stu.channel}", CancellationToken.None);
|
|
|
+ //目前只支持单个题目回传
|
|
|
+ var answer = result.answers?.FirstOrDefault();
|
|
|
+ List<string> ans = new List<string>();
|
|
|
+ if (answer!=null)
|
|
|
{
|
|
|
- LessonTask lessonTask = data.ToString().ToObject<LessonTask>();
|
|
|
- string kid = result.imei;
|
|
|
- if (string.IsNullOrWhiteSpace(result.imei))
|
|
|
+ string con = answer.answer;
|
|
|
+ var item = lessonTask.examTask.items.Find(x => x.order.Equals(answer.id));
|
|
|
+ if (item!=null)
|
|
|
{
|
|
|
- kid=result.phone;
|
|
|
- }
|
|
|
- Imei stu = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).ReadItemAsync<Imei>(kid, new PartitionKey("Imei"));
|
|
|
- if (!string.IsNullOrWhiteSpace(stu?.channel) && !string.IsNullOrWhiteSpace(stu?.userid) && lessonTask.channel.Equals(stu?.channel))
|
|
|
- {
|
|
|
- // 處理單例復用,提高請求效率,避免ServiceTransportType.Persistent websocket斷線在Azure偶發的消息遺失
|
|
|
- // TODO 尚須注意釋放的問題,後續須處理
|
|
|
-
|
|
|
- // 下面註解寫法會造成Azure上消息偶發遺失,Localhost不會發生
|
|
|
- //var serviceManager = _azureSignalR.GetServiceManager();
|
|
|
- //using var hub = await serviceManager.CreateHubContextAsync($"C{stu.channel}", CancellationToken.None);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- //目前只支持单个题目回传
|
|
|
- var answer = result.answers?.FirstOrDefault();
|
|
|
- List<string> ans = new List<string>();
|
|
|
- if (answer!=null)
|
|
|
+ if (item.type.Equals("single") || item.type.Equals("multiple") || item.type.Equals("sortmultiple")|| item.type.Equals("judge"))
|
|
|
{
|
|
|
- string con = answer.answer;
|
|
|
- var item = lessonTask.examTask.items.Find(x => x.order.Equals(answer.id));
|
|
|
- if (item!=null)
|
|
|
- {
|
|
|
- if (item.type.Equals("single") || item.type.Equals("multiple") || item.type.Equals("sortmultiple")|| item.type.Equals("judge"))
|
|
|
- {
|
|
|
- var anscon = con.Select(x => $"{x}").ToList();
|
|
|
- if (anscon.Count<10)
|
|
|
- {
|
|
|
- ans= anscon;
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- ans= new List<string>() { answer.answer };
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
+ var anscon = con.Select(x => $"{x}").ToList();
|
|
|
+ if (anscon.Count<10)
|
|
|
{
|
|
|
- var anscon = con.Select(x => $"{x}").ToList();
|
|
|
- if (anscon.Count<10)
|
|
|
- {
|
|
|
- ans= anscon;
|
|
|
- }
|
|
|
+ ans= anscon;
|
|
|
}
|
|
|
}
|
|
|
- var hub = _azureSignalR.GetServiceManager().GetHubContext($"C{stu.channel}");
|
|
|
- var common = JsonSerializer.Serialize(new
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ans= new List<string>() { answer.answer };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- action = "DirectIRS.Answer",
|
|
|
- clientType = "DI",
|
|
|
- sender = stu.stuid,
|
|
|
- timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
|
|
|
- waitReturn = false,
|
|
|
- payload = new { irsno = "", answer = ans.ToArray() }
|
|
|
- });
|
|
|
- await hub.Clients.User(stu.userid).SendCoreAsync("onMessage", new[]{new {
|
|
|
+ var anscon = con.Select(x => $"{x}").ToList();
|
|
|
+ if (anscon.Count<10)
|
|
|
+ {
|
|
|
+ ans= anscon;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var hub = _azureSignalR.GetServiceManager().GetHubContext($"C{stu.channel}");
|
|
|
+ var common = JsonSerializer.Serialize(new
|
|
|
+ {
|
|
|
+ action = "DirectIRS.Answer",
|
|
|
+ clientType = "DI",
|
|
|
+ sender = stu.stuid,
|
|
|
+ timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
|
|
|
+ waitReturn = false,
|
|
|
+ payload = new { irsno = "", answer = ans.ToArray() }
|
|
|
+ });
|
|
|
+ await hub.Clients.User(stu.userid).SendCoreAsync("onMessage", new[]{new {
|
|
|
connectionId = (string)null,
|
|
|
to = (string)null,
|
|
|
groupname = (string)null,
|
|
|
sender = stu.stuid,
|
|
|
text = common
|
|
|
}});
|
|
|
- message= "推送成功!";
|
|
|
- // await _dingDing.SendBotMsg($"接收到 139zhxy反馈器推送信息并转发成功!{json.ToJsonString()}\n{ans.ToJsonString()}", GroupNames.成都开发測試群組);
|
|
|
- return Ok(new { code = 0, message, timestamp = now });
|
|
|
-
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- await _dingDing.SendBotMsg($"139zhxy反馈器推送IRS通道异常:频道不存在!{json.ToJsonString()}", GroupNames.成都开发測試群組);
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- code=3;
|
|
|
- message="任务不存在!";
|
|
|
- await _dingDing.SendBotMsg($"139zhxy反馈器推送IRS异常:任务不存在!{json.ToJsonString()}", GroupNames.成都开发測試群組);
|
|
|
- }
|
|
|
+ message= "推送成功!";
|
|
|
+ // await _dingDing.SendBotMsg($"{_option.Location},接收到 139zhxy反馈器推送信息并转发成功!{json.ToJsonString()}\n{ans.ToJsonString()}", GroupNames.成都开发測試群組);
|
|
|
+ return Ok(new { code = 0, message, timestamp = now });
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ await _dingDing.SendBotMsg($"139zhxy反馈器推送IRS通道异常:频道不存在!{json.ToJsonString()}", GroupNames.成都开发測試群組);
|
|
|
}
|
|
|
- //else
|
|
|
- // {
|
|
|
- // code=2;
|
|
|
- // message="签名验证失败!";
|
|
|
- // await _dingDing.SendBotMsg($"139zhxy反馈器推送IRS异常:签名验证失败!{json.ToJsonString()}", GroupNames.成都开发測試群組);
|
|
|
- // }
|
|
|
- // }
|
|
|
- // else
|
|
|
- // {
|
|
|
- // code =1;
|
|
|
- // message="签名或时间戳为空!";
|
|
|
- // await _dingDing.SendBotMsg($"139zhxy反馈器推送IRS异常:签名或时间戳为空!{json.ToJsonString()}", GroupNames.成都开发測試群組);
|
|
|
- // }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ code=3;
|
|
|
+ message="任务不存在!";
|
|
|
+ await _dingDing.SendBotMsg($"{_option.Location},139zhxy反馈器推送IRS异常:任务不存在!{json.ToJsonString()}", GroupNames.成都开发測試群組);
|
|
|
+ }
|
|
|
}
|
|
|
catch (Exception ex) {
|
|
|
await _dingDing.SendBotMsg($"139zhxy反馈器推送IRS异常:代码异常!{json.ToJsonString()}\n{ex.Message}\n{ex.StackTrace}", GroupNames.成都开发測試群組);
|
|
|
}
|
|
|
return Ok(new { code ,message, timestamp =now});
|
|
|
}
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 修改学校信息
|
|
|
/// </summary>
|
|
@@ -379,9 +363,6 @@ namespace TEAMModelOS.Controllers
|
|
|
await _dingDing.SendBotMsg($"IES5,{_option.Location},tianbo/api/course/cardUploadData()\n{ex.Message}\n{ex.StackTrace}{request.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
|
|
|
return Ok(new { code = 200, msg = "成功", data = (string)null });
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -390,6 +371,10 @@ namespace TEAMModelOS.Controllers
|
|
|
/// </summary>
|
|
|
public class LessonTask
|
|
|
{
|
|
|
+ /// <summary>
|
|
|
+ /// 课例id
|
|
|
+ /// </summary>
|
|
|
+ public string lessonId { get; set; }
|
|
|
/// <summary>
|
|
|
/// 任务id
|
|
|
/// </summary>
|