|
@@ -20,6 +20,9 @@ using HTEXLib.COMM.Helpers;
|
|
|
using static SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.CreateApplyForSubjectApplymentRequest.Types;
|
|
|
using OpenXmlPowerTools;
|
|
|
using static Microsoft.Extensions.Logging.EventSource.LoggingEventSource;
|
|
|
+using OfficeOpenXml;
|
|
|
+using TEAMModelOS.Controllers.Third.Moofen;
|
|
|
+using DocumentFormat.OpenXml.Drawing.Charts;
|
|
|
namespace TEAMModelOS.Controllers.Both
|
|
|
{
|
|
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
|
@@ -44,7 +47,99 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
_azureRedis = azureRedis;
|
|
|
_httpTrigger = httpTrigger;
|
|
|
}
|
|
|
+ [ProducesDefaultResponseType]
|
|
|
+ [HttpPost("item-import")]
|
|
|
+ [Authorize(Roles = "IES")]
|
|
|
+ [AuthToken(Roles = "admin", Permissions = "knowledge-upd")]
|
|
|
+ public IActionResult ItemImport([FromForm] IFormFile file)
|
|
|
+ {
|
|
|
+ var tokenAuth = HttpContext.GetAuthTokenInfo();
|
|
|
+ ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial;
|
|
|
+ List<dynamic> period_subject = new List<dynamic>();
|
|
|
+ List<MoofenKnowledgePointDto> pointDtos = new List<MoofenKnowledgePointDto>();
|
|
|
+ List<string> titles = new List<string>();
|
|
|
+ List<List<string>> datas = new List<List<string>>();
|
|
|
+ using (ExcelPackage package = new ExcelPackage(file.OpenReadStream()))
|
|
|
+ {
|
|
|
+ ExcelWorksheets sheets = package.Workbook.Worksheets;
|
|
|
+ var sheet = sheets.FirstOrDefault();
|
|
|
+ if (sheet!= null)
|
|
|
+ {
|
|
|
|
|
|
+ var rows = sheet.Dimension.Rows;
|
|
|
+ var columns = sheet.Dimension.Columns;
|
|
|
+ for (int r = 1; r <= rows; r++)
|
|
|
+ {
|
|
|
+ List<string> data = new List<string>();
|
|
|
+ for (int c = 1; c <= columns; c++)
|
|
|
+ {
|
|
|
+ var value = sheet.GetValue(r, c);
|
|
|
+ if (r == 1)
|
|
|
+ {
|
|
|
+ if (!string.IsNullOrWhiteSpace($"{value}"))
|
|
|
+ {
|
|
|
+ titles.Add($"{value}");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (c > titles.Count)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ data.Add($"{value}");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (data.Any())
|
|
|
+ {
|
|
|
+ datas.Add(data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ int index = 1;
|
|
|
+ foreach (var data in datas)
|
|
|
+ {
|
|
|
+ MoofenKnowledgePointDto knowledgePointDto = new MoofenKnowledgePointDto { kp1 = data[0], kp2= data[1], kp3 = data[2], kp4= data[3], id=$"{index}" };
|
|
|
+ if (!string.IsNullOrWhiteSpace(knowledgePointDto.kp1))
|
|
|
+ {
|
|
|
+ knowledgePointDto.level=1;
|
|
|
+ knowledgePointDto.name=knowledgePointDto.kp1;
|
|
|
+ }
|
|
|
+ if (!string.IsNullOrWhiteSpace(knowledgePointDto.kp2))
|
|
|
+ {
|
|
|
+ knowledgePointDto.level=2;
|
|
|
+ knowledgePointDto.name=knowledgePointDto.kp2;
|
|
|
+ }
|
|
|
+ if (!string.IsNullOrWhiteSpace(knowledgePointDto.kp3))
|
|
|
+ {
|
|
|
+ knowledgePointDto.level=3;
|
|
|
+ knowledgePointDto.name=knowledgePointDto.kp3;
|
|
|
+ }
|
|
|
+ if (!string.IsNullOrWhiteSpace(knowledgePointDto.kp4))
|
|
|
+ {
|
|
|
+ knowledgePointDto.level=4;
|
|
|
+ knowledgePointDto.name=knowledgePointDto.kp4;
|
|
|
+ }
|
|
|
+ pointDtos.Add(knowledgePointDto);
|
|
|
+ index++;
|
|
|
+ } // 构建树形结构
|
|
|
+ var tree = KnowledgeService.BuildTree(pointDtos);
|
|
|
+ tree.name=$"{file.FileName}";
|
|
|
+ KnowledgeTreeDto knowledge = new KnowledgeTreeDto()
|
|
|
+ {
|
|
|
+ name=tree.name,
|
|
|
+ tree= tree.children,
|
|
|
+ };
|
|
|
+ return Ok(new { knowledgeTree =knowledge});
|
|
|
+ }
|
|
|
|
|
|
[ProducesDefaultResponseType]
|
|
|
[HttpPost("read-knowledge")]
|
|
@@ -114,21 +209,10 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
knowledges.Add(item);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- return Ok(new { });
|
|
|
+ return Ok(new { knowledgeTrees = KnowledgeService. KnowledgeTranslate(knowledges) });
|
|
|
}
|
|
|
|
|
|
- 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
|
|
@@ -197,26 +281,24 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
if (change) {
|
|
|
await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, tbname).UpsertItemAsync(knowledge, new PartitionKey(code));
|
|
|
}
|
|
|
- }
|
|
|
- if (updateData.IsNotEmpty())
|
|
|
- {
|
|
|
- try
|
|
|
+ if (updateData.IsNotEmpty() &&updateRel==1)
|
|
|
{
|
|
|
- _ = _httpTrigger.RequestHttpTrigger(new { old_new = old_new, owner = $"{owner}", scope=$"{scope}", subjectId=$"{subjectId}" }, _option.Location, "knowledge-change");
|
|
|
- }
|
|
|
- catch (Exception ex)
|
|
|
- {
|
|
|
- //暂不处理
|
|
|
+ try
|
|
|
+ {
|
|
|
+ _ = _httpTrigger.RequestHttpTrigger(new { old_new = old_new, owner = $"{owner}", scope = $"{scope}", subjectId = $"{subjectId}" }, _option.Location, "knowledge-change");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ //暂不处理
|
|
|
+ }
|
|
|
}
|
|
|
+ var dtos = KnowledgeService.KnowledgeTranslate(new List<Knowledge> { knowledge });
|
|
|
+ return Ok(new { knowledgeTree = dtos[0] });
|
|
|
}
|
|
|
- return Ok(json);
|
|
|
+ return Ok(new {code =404});
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
[ProducesDefaultResponseType]
|
|
|
[HttpPost("upsert-knowledge")]
|
|
|
#if !DEBUG
|
|
@@ -237,10 +319,11 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
|
|
|
string code = string.Empty;
|
|
|
Knowledge old = null;
|
|
|
- //var blocks = new List<Block>();
|
|
|
- //var points = new HashSet<string>();
|
|
|
+ Knowledge knowledgeDb=null;
|
|
|
+ var blocks = new List<Block>();
|
|
|
+ var points = new HashSet<string>();
|
|
|
var nodes = new List<PointNode>();
|
|
|
- KnowledgeService.TreeToList(knowledge.tree, nodes);
|
|
|
+ KnowledgeService.TreeToList(knowledge.tree, nodes, blocks, points);
|
|
|
if (knowledge.scope.Equals("school"))
|
|
|
{
|
|
|
if (!string.IsNullOrWhiteSpace(knowledge.subjectId) && !string.IsNullOrWhiteSpace(knowledge.periodId))
|
|
@@ -256,29 +339,32 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
if (old!=null)
|
|
|
{
|
|
|
knowledge.id = old.id;
|
|
|
- //foreach (var p in old.points) {
|
|
|
- // points.Add(p);
|
|
|
- //}
|
|
|
- //foreach (var b in old.blocks) {
|
|
|
- // var bks= blocks.FindAll(x => x.name.Equals(b.name));
|
|
|
- // if (bks.IsNotEmpty())
|
|
|
- // {
|
|
|
- // foreach (var bk in bks)
|
|
|
- // {
|
|
|
- // bk.points.AddRange(b.points);
|
|
|
- // bk.points= bk.points.Distinct().ToList();
|
|
|
- // }
|
|
|
- // }
|
|
|
- // else {
|
|
|
- // blocks.Add(b);
|
|
|
- // }
|
|
|
- //}
|
|
|
+ foreach (var p in old.points)
|
|
|
+ {
|
|
|
+ points.Add(p);
|
|
|
+ }
|
|
|
+ foreach (var b in old.blocks)
|
|
|
+ {
|
|
|
+ var bks = blocks.FindAll(x => x.name.Equals(b.name));
|
|
|
+ if (bks.IsNotEmpty())
|
|
|
+ {
|
|
|
+ foreach (var bk in bks)
|
|
|
+ {
|
|
|
+ bk.points.AddRange(b.points);
|
|
|
+ bk.points= bk.points.Distinct().ToList();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ blocks.Add(b);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
knowledge.id = Guid.NewGuid().ToString();
|
|
|
}
|
|
|
- Knowledge knowledgeDb = new Knowledge
|
|
|
+ knowledgeDb = new Knowledge
|
|
|
{
|
|
|
id=knowledge.id,
|
|
|
code=code,
|
|
@@ -288,15 +374,23 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
scope=knowledge.scope,
|
|
|
//blocks=blocks,
|
|
|
pk="Knowledge",
|
|
|
- // points=points.ToList(),
|
|
|
+ // points=points.ToList(),
|
|
|
nodes=nodes,
|
|
|
owner=knowledge.owner,
|
|
|
};
|
|
|
- return Ok(knowledgeDb);
|
|
|
- // await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS,Constant.School).UpsertItemAsync(knowledgeDb,new PartitionKey(code));
|
|
|
+ var count = new { pcount = points.Count, bcount = blocks.Count,name =knowledge.name };
|
|
|
+ //处理知识点,知识块计数问题
|
|
|
+ string key = $"KnowledgeNew:Count:{knowledge.owner}-{knowledge.periodId}";
|
|
|
+ string filed = knowledge.subjectId;
|
|
|
+ await _azureRedis.GetRedisClient(8).HashSetAsync(key, filed, count.ToJsonString());
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).UpsertItemAsync(knowledgeDb, new PartitionKey(code));
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return BadRequest();
|
|
|
}
|
|
|
}
|
|
|
- else {
|
|
|
+ else
|
|
|
+ {
|
|
|
code=$"Knowledge-{knowledge.owner}";
|
|
|
if (!string.IsNullOrWhiteSpace(knowledge.id))
|
|
|
{
|
|
@@ -306,7 +400,7 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
knowledge.id = Guid.NewGuid().ToString();
|
|
|
}
|
|
|
}
|
|
|
- Knowledge knowledgeDb = new Knowledge
|
|
|
+ knowledgeDb = new Knowledge
|
|
|
{
|
|
|
id=knowledge.id,
|
|
|
code=code,
|
|
@@ -320,8 +414,57 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
nodes=nodes,
|
|
|
owner=knowledge.owner,
|
|
|
};
|
|
|
- return Ok(knowledgeDb);
|
|
|
- // await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(knowledgeDb, new PartitionKey(code));
|
|
|
+ //处理知识点,知识块计数问题
|
|
|
+ string key = $"KnowledgeNew:Count:{knowledge.owner}";
|
|
|
+ string filed = knowledge.id;
|
|
|
+ var count = new { pcount = points.Count, bcount = blocks.Count, name = knowledge.name };
|
|
|
+ await _azureRedis.GetRedisClient(8).HashSetAsync(key, filed, count.ToJsonString());
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(knowledgeDb, new PartitionKey(code));
|
|
|
+
|
|
|
+ }
|
|
|
+ if (knowledgeDb!=null)
|
|
|
+ {
|
|
|
+ var dtos = KnowledgeService.KnowledgeTranslate(new List<Knowledge> { knowledgeDb });
|
|
|
+ return Ok(new { knowledgeTree = dtos[0] });
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return BadRequest();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ [ProducesDefaultResponseType]
|
|
|
+ [HttpPost("find-count")]
|
|
|
+ [Authorize(Roles = "IES")]
|
|
|
+ [AuthToken(Roles = "teacher,admin,student", Permissions = "knowledge-read,knowledge-upd")]
|
|
|
+ public async Task<IActionResult> FindCount(JsonElement json)
|
|
|
+ {
|
|
|
+ var (userid, _, _, school) = HttpContext.GetAuthTokenInfo();
|
|
|
+ if (!json.TryGetProperty("scope", out var _scope)) {
|
|
|
+ return BadRequest();
|
|
|
+ }
|
|
|
+ if ($"{_scope}".Equals("school", StringComparison.OrdinalIgnoreCase))
|
|
|
+ {
|
|
|
+ if (!json.TryGetProperty("periodId", out var periodId))
|
|
|
+ {
|
|
|
+ return BadRequest();
|
|
|
+ }
|
|
|
+ School schoolBase = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(school, new PartitionKey("Base"));
|
|
|
+ var period = schoolBase.period.Find(x => x.id.Equals($"{periodId}", StringComparison.OrdinalIgnoreCase));
|
|
|
+ var values = await _azureRedis.GetRedisClient(8).HashGetAllAsync($"KnowledgeNew:Count:{period.id}");
|
|
|
+ if (values!=null && values!=default && values.Length>0)
|
|
|
+ {
|
|
|
+ foreach (var value in values)
|
|
|
+ {
|
|
|
+
|
|
|
+ KnowledgeCount record = value.Value.ToString().ToObject<KnowledgeCount>();
|
|
|
+ record.periodId=period.id;
|
|
|
+ record.subjectId=value.Name;
|
|
|
+ record.owner=school;
|
|
|
+ record.scope="school";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+
|
|
|
}
|
|
|
return Ok();
|
|
|
}
|