|
@@ -17,6 +17,9 @@ using Azure.Cosmos;
|
|
using TEAMModelOS.SDK.Models.Service;
|
|
using TEAMModelOS.SDK.Models.Service;
|
|
using System.Linq;
|
|
using System.Linq;
|
|
using HTEXLib.COMM.Helpers;
|
|
using HTEXLib.COMM.Helpers;
|
|
|
|
+using static SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.CreateApplyForSubjectApplymentRequest.Types;
|
|
|
|
+using OpenXmlPowerTools;
|
|
|
|
+using static Microsoft.Extensions.Logging.EventSource.LoggingEventSource;
|
|
namespace TEAMModelOS.Controllers.Both
|
|
namespace TEAMModelOS.Controllers.Both
|
|
{
|
|
{
|
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
|
@@ -41,21 +44,190 @@ namespace TEAMModelOS.Controllers.Both
|
|
_azureRedis = azureRedis;
|
|
_azureRedis = azureRedis;
|
|
_httpTrigger = httpTrigger;
|
|
_httpTrigger = httpTrigger;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
[ProducesDefaultResponseType]
|
|
[ProducesDefaultResponseType]
|
|
- [HttpPost("upsert-knowledge")]
|
|
|
|
|
|
+ [HttpPost("read-knowledge")]
|
|
|
|
+#if !DEBUG
|
|
|
|
+
|
|
|
|
+ [Authorize(Roles = "IES")]
|
|
|
|
+ [AuthToken(Roles = "teacher,admin,student", Permissions = "knowledge-read,knowledge-upd")]
|
|
|
|
+#endif
|
|
|
|
+ public async Task<IActionResult> ReadKnowledge(JsonElement json)
|
|
|
|
+ {
|
|
|
|
+ var client = _azureCosmos.GetCosmosClient();
|
|
|
|
+ var tokenAuth = HttpContext.GetAuthTokenInfo();
|
|
|
|
+ string scope = "school";
|
|
|
|
+ if (json.TryGetProperty("scope", out JsonElement _scope))
|
|
|
|
+ {
|
|
|
|
+ scope=$"{scope}";
|
|
|
|
+ }
|
|
|
|
+ List<Knowledge> knowledges = new List<Knowledge>();
|
|
|
|
+ string code = string.Empty;
|
|
|
|
+ List<string> keywords = new List<string>();
|
|
|
|
+ if (scope.Equals("school"))
|
|
|
|
+ {
|
|
|
|
+ json.TryGetProperty("periodId", out JsonElement periodId);
|
|
|
|
+ if (!json.TryGetProperty("subjectId", out JsonElement subjectId)) return BadRequest();
|
|
|
|
+ string school=string.Empty;
|
|
|
|
+ if (string.IsNullOrWhiteSpace(tokenAuth.school))
|
|
|
|
+ {
|
|
|
|
+ if (json.TryGetProperty("school_code", out JsonElement school_code))
|
|
|
|
+ {
|
|
|
|
+ school=$"{school_code}";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ school=tokenAuth.school;
|
|
|
|
+ }
|
|
|
|
+ code = $"Knowledge-{school}-{subjectId}";
|
|
|
|
+ StringBuilder sql = new StringBuilder($"select value(c) from c");
|
|
|
|
+ if (periodId.ValueKind.Equals(JsonValueKind.String))
|
|
|
|
+ {
|
|
|
|
+ sql.Append($" where c.periodId = '{periodId}'");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<Knowledge>(queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{code}") }))
|
|
|
|
+ {
|
|
|
|
+ item.blocks.ForEach(x =>
|
|
|
|
+ {
|
|
|
|
+ if (x.points == null)
|
|
|
|
+ {
|
|
|
|
+ x.points = keywords;
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ knowledges.Add(item);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ code=$"Knowledge-{tokenAuth.id}";
|
|
|
|
+ StringBuilder sql = new StringBuilder($"select value(c) from c");
|
|
|
|
+ await foreach (var item in client.GetContainer(Constant.TEAMModelOS,Constant.Teacher).GetItemQueryIterator<Knowledge>(queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{code}") }))
|
|
|
|
+ {
|
|
|
|
+ item.blocks.ForEach(x =>
|
|
|
|
+ {
|
|
|
|
+ if (x.points == null)
|
|
|
|
+ {
|
|
|
|
+ x.points = keywords;
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ knowledges.Add(item);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return Ok(new { });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void KnowledgeTranslate(List<Knowledge> knowledges) {
|
|
|
|
+
|
|
|
|
+ foreach (var knowledge in knowledges)
|
|
|
|
+ {
|
|
|
|
+ List<PointTree> tree = KnowledgeService.ListToTree(knowledge.nodes);
|
|
|
|
+ foreach (var point in tree)
|
|
|
|
+ {
|
|
|
|
+ point.cids= KnowledgeService.GetChildIds(point);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ [ProducesDefaultResponseType]
|
|
|
|
+ [HttpPost("modify-knowledge-node")]
|
|
#if !DEBUG
|
|
#if !DEBUG
|
|
|
|
|
|
[Authorize(Roles = "IES")]
|
|
[Authorize(Roles = "IES")]
|
|
[AuthToken(Roles = "admin", Permissions = "knowledge-upd")]
|
|
[AuthToken(Roles = "admin", Permissions = "knowledge-upd")]
|
|
#endif
|
|
#endif
|
|
- public async Task<IActionResult> UpsertKnowledge(JsonElement json)
|
|
|
|
|
|
+ public async Task<IActionResult> ModifyKnowledgeNode(JsonElement json)
|
|
{
|
|
{
|
|
- KnowledgeTreeDto knowledge = json.GetProperty("knowledge").ToObject<KnowledgeTreeDto>();
|
|
|
|
List<TagOldNew> old_new = null;
|
|
List<TagOldNew> old_new = null;
|
|
if (json.TryGetProperty("old_new", out JsonElement _old_new))
|
|
if (json.TryGetProperty("old_new", out JsonElement _old_new))
|
|
{
|
|
{
|
|
old_new = _old_new.ToObject<List<TagOldNew>>();
|
|
old_new = _old_new.ToObject<List<TagOldNew>>();
|
|
}
|
|
}
|
|
|
|
+ string id = json.GetProperty("id").GetString();
|
|
|
|
+ string scope = json.GetProperty("scope").GetString();
|
|
|
|
+ string owner = json.GetProperty("owner").GetString();
|
|
|
|
+ string code =string.Empty;
|
|
|
|
+ string tbname = string.Empty;
|
|
|
|
+ string subjectId=string.Empty;
|
|
|
|
+ int updateRel = json.GetProperty("updateRel").GetInt32();
|
|
|
|
+ List<TagOldNew> updateData = new List<TagOldNew>();
|
|
|
|
+ if ($"{scope}".Equals("school"))
|
|
|
|
+ {
|
|
|
|
+ subjectId = json.GetProperty("subjectId").GetString();
|
|
|
|
+ code = $"Knowledge-{owner}-{subjectId}";
|
|
|
|
+ tbname= Constant.School;
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ code=$"Knowledge-{owner}";
|
|
|
|
+ tbname= Constant.Teacher;
|
|
|
|
+ }
|
|
|
|
+ Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, tbname).ReadItemStreamAsync(id, new PartitionKey(code));
|
|
|
|
+ if (response.Status==200)
|
|
|
|
+ {
|
|
|
|
+ bool change = false;
|
|
|
|
+ Knowledge knowledge = JsonDocument.Parse(response.Content).RootElement.ToObject<Knowledge>();
|
|
|
|
+ foreach(TagOldNew tagOldNew in old_new)
|
|
|
|
+ {
|
|
|
|
+ if(!string.IsNullOrWhiteSpace(tagOldNew._id) && !string.IsNullOrEmpty(tagOldNew._old) &&! string.IsNullOrWhiteSpace(tagOldNew._new) && !tagOldNew._old.Equals(tagOldNew._new))
|
|
|
|
+ {
|
|
|
|
+ var node = knowledge.nodes.Find(x =>!string.IsNullOrWhiteSpace(x.name) && x.id.Equals(tagOldNew._id) && tagOldNew._old.Equals(x.name));
|
|
|
|
+ node.name= tagOldNew._new;
|
|
|
|
+ updateData.Add(tagOldNew);
|
|
|
|
+ change = true;
|
|
|
|
+ }
|
|
|
|
+ if ( !string.IsNullOrEmpty(tagOldNew._old) &&!string.IsNullOrWhiteSpace(tagOldNew._new) && !tagOldNew._old.Equals(tagOldNew._new))
|
|
|
|
+ {
|
|
|
|
+ var rsp= knowledge.points.Remove(tagOldNew._old);
|
|
|
|
+ if (rsp) {
|
|
|
|
+ change=true;
|
|
|
|
+ knowledge.points.Add(tagOldNew._new);
|
|
|
|
+ }
|
|
|
|
+ foreach (var block in knowledge.blocks) {
|
|
|
|
+ if (block.source!=1)
|
|
|
|
+ {
|
|
|
|
+ var rsb= block.points.Remove(tagOldNew._old);
|
|
|
|
+ if (rsb) {
|
|
|
|
+ block.points.Add(tagOldNew._new);
|
|
|
|
+ change=true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (change) {
|
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, tbname).UpsertItemAsync(knowledge, new PartitionKey(code));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (updateData.IsNotEmpty())
|
|
|
|
+ {
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ _ = _httpTrigger.RequestHttpTrigger(new { old_new = old_new, owner = $"{owner}", scope=$"{scope}", subjectId=$"{subjectId}" }, _option.Location, "knowledge-change");
|
|
|
|
+ }
|
|
|
|
+ catch (Exception ex)
|
|
|
|
+ {
|
|
|
|
+ //暂不处理
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return Ok(json);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ [ProducesDefaultResponseType]
|
|
|
|
+ [HttpPost("upsert-knowledge")]
|
|
|
|
+#if !DEBUG
|
|
|
|
+
|
|
|
|
+ [Authorize(Roles = "IES")]
|
|
|
|
+ [AuthToken(Roles = "admin", Permissions = "knowledge-upd")]
|
|
|
|
+#endif
|
|
|
|
+ public async Task<IActionResult> UpsertKnowledge(JsonElement json)
|
|
|
|
+ {
|
|
|
|
+ KnowledgeTreeDto knowledge = json.GetProperty("knowledge").ToObject<KnowledgeTreeDto>();
|
|
|
|
+
|
|
ValidResult validResult = knowledge.Valid();
|
|
ValidResult validResult = knowledge.Valid();
|
|
if (!validResult.isVaild)
|
|
if (!validResult.isVaild)
|
|
{
|
|
{
|