Pārlūkot izejas kodu

合并Service代码

CrazyIter 4 gadi atpakaļ
vecāks
revīzija
a40ec354b1
59 mainītis faili ar 556 papildinājumiem un 2960 dzēšanām
  1. 0 93
      TEAMModelGrpc/Services/KnowledgeService.cs
  2. 0 124
      TEAMModelGrpc/Services/SyllabusService.cs
  3. 0 82
      TEAMModelGrpc/Services/VolumeService.cs
  4. 2 2
      TEAMModelGrpc/Startup.cs
  5. 0 99
      TEAMModelGrpc/TEAMModelOS.GRPC.xml
  6. 0 13
      TEAMModelOS.Service/Services/ChangeFeed/IChangeFeedService.cs
  7. 0 10
      TEAMModelOS.Service/Services/ChangeFeed/IChangeService.cs
  8. 0 24
      TEAMModelOS.Service/Services/ChangeFeed/KnowledgeChangeFeed.cs
  9. 0 23
      TEAMModelOS.Service/Services/ChangeFeed/SyllabusVolumeChangeFeed.cs
  10. 0 12
      TEAMModelOS.Service/Services/Evaluation/Implements/EvaluatingService.cs
  11. 0 9
      TEAMModelOS.Service/Services/Evaluation/Interfaces/IEvaluatingService.cs
  12. 0 13
      TEAMModelOS.Service/Services/Evaluation/Interfaces/IHtmlAnalyzeService.cs
  13. 0 18
      TEAMModelOS.Service/Services/Evaluation/Interfaces/IImportExerciseService.cs
  14. 0 119
      TEAMModelOS.Service/Services/Learn/Implements/ServiceBusReviceService.cs
  15. 0 46
      TEAMModelOS.Service/Services/Learn/Implements/TimerWorkService.cs
  16. 0 14
      TEAMModelOS.Service/Services/Learn/Interfaces/IServiceBusReviceService.cs
  17. 0 16
      TEAMModelOS.Service/Services/Learn/Interfaces/IServiceBusService.cs
  18. 0 13
      TEAMModelOS.Service/Services/Learn/Interfaces/ITimerWorkService.cs
  19. 0 17
      TEAMModelOS.Service/Services/Syllabus/Interface/IKnowledgeService.cs
  20. 0 34
      TEAMModelOS.Service/Services/Syllabus/Interface/ISyllabusService.cs
  21. 0 16
      TEAMModelOS.Service/Services/Syllabus/Interface/IVolumeService.cs
  22. 0 1969
      TEAMModelOS.Service/TEAMModelOS.Model.xml
  23. 8 6
      TEAMModelOS/Controllers/Exam/ExamController.cs
  24. 13 13
      TEAMModelOS/Controllers/Exam/ImportExerciseController.cs
  25. 5 6
      TEAMModelOS/Controllers/Syllabus/KnowledgeController.cs
  26. 9 11
      TEAMModelOS/Controllers/Syllabus/SyllabusController.cs
  27. 5 7
      TEAMModelOS/Controllers/Syllabus/VolumeController.cs
  28. 4 5
      TEAMModelOS/Controllers/Task/HomeworkController.cs
  29. 7 5
      TEAMModelOS/Controllers/Task/LearnController.cs
  30. 7 5
      TEAMModelOS/Controllers/Task/SurveyController.cs
  31. 6 4
      TEAMModelOS/Controllers/Task/VoteController.cs
  32. 0 0
      TEAMModelOS/Dto/AzureBlobSASDto.cs
  33. 0 0
      TEAMModelOS/Dto/BlockPointDto.cs
  34. 0 0
      TEAMModelOS/Dto/CommentsDto.cs
  35. 0 0
      TEAMModelOS/Dto/CommonQuery.cs
  36. 0 0
      TEAMModelOS/Dto/CoursePlanDto.cs
  37. 0 0
      TEAMModelOS/Dto/HomeWorkCommentDto.cs
  38. 0 0
      TEAMModelOS/Dto/HomeWorkDto.cs
  39. 0 0
      TEAMModelOS/Dto/HomeWorkFindDto.cs
  40. 0 0
      TEAMModelOS/Dto/HomeWorkScoringDto.cs
  41. 0 0
      TEAMModelOS/Dto/KnowledgeDto.cs
  42. 0 0
      TEAMModelOS/Dto/PointDto.cs
  43. 0 0
      TEAMModelOS/Dto/SurveyDto.cs
  44. 0 0
      TEAMModelOS/Dto/VoteDto.cs
  45. 0 0
      TEAMModelOS/Dto/VoteStudentDto.cs
  46. 368 0
      TEAMModelOS/Service/Analysis/AchievementService.cs
  47. 15 0
      TEAMModelOS/Service/Analysis/Interfaces/IAchievementService.cs
  48. 12 13
      TEAMModelOS.Service/Services/Evaluation/Implements/HtmlAnalyzeService.cs
  49. 16 17
      TEAMModelOS.Service/Services/Evaluation/Implements/ImportExerciseService.cs
  50. 5 9
      TEAMModelOS.Service/Services/Learn/Implements/ServiceBusService.cs
  51. 58 56
      TEAMModelOS.Service/Services/PowerPoint/Implement/HtexService.cs
  52. 0 0
      TEAMModelOS/Service/PowerPoint/Implement/ShapeHelper.cs
  53. 0 0
      TEAMModelOS/Service/PowerPoint/Implement/ShapeSvg.cs
  54. 0 0
      TEAMModelOS/Service/PowerPoint/Interface/IHtexService.cs
  55. 5 11
      TEAMModelOS.Service/Services/Syllabus/Implement/KnowledgeService.cs
  56. 6 14
      TEAMModelOS.Service/Services/Syllabus/Implement/SyllabusService.cs
  57. 4 10
      TEAMModelOS.Service/Services/Syllabus/Implement/VolumeService.cs
  58. 0 2
      TEAMModelOS/Startup.cs
  59. 1 0
      TEAMModelOS/TEAMModelOS.csproj

+ 0 - 93
TEAMModelGrpc/Services/KnowledgeService.cs

@@ -1,93 +0,0 @@
-using Google.Protobuf;
-using Grpc.Core;
-using Grpc.Extension.Abstract;
-using Microsoft.AspNetCore.Authorization;
-using System;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using TEAMModelGrpc.Models;
-using TEAMModelOS.SDK.Helper.Common.JsonHelper;
-using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Interface;
-
-namespace TEAMModelGrpc.Services
-{
- 
-    public class KnowledgeService : IGrpcService
-    {
-        private AzureCosmosFactory cosmosDBV3Repository;
-        private IKnowledgeService knowledgeService;
-
-        public KnowledgeService(AzureCosmosFactory cosmosDBV3Repository, IKnowledgeService knowledgeService)
-        {
-            this.cosmosDBV3Repository = cosmosDBV3Repository;
-            this.knowledgeService = knowledgeService;
-        }
-
-
-        /// <summary>
-        /// 查询知识点
-        /// </summary>
-        /// <param name="request"></param>
-        /// <param name="responseStream"></param>
-        /// <param name="context"></param>
-        /// <returns></returns>
-        [Authorize]
-        public async Task FinKnowledge(Dict request, IServerStreamWriter<Knowledge> responseStream, ServerCallContext context)
-        {
-            Dictionary<string, object> keyValuePairs = new Dictionary<string, object>();
-            keyValuePairs = request.ToDict();
-            List<Knowledge> knowledges = await cosmosDBV3Repository.FindByDict<Knowledge>(keyValuePairs);
-            knowledges.ForEach(x =>
-            {
-                responseStream.WriteAsync(x);
-            });
-        }
-
-
-        /// <summary>
-        /// 保存知识点
-        /// </summary>
-        /// <param name="requestStream"></param>
-        /// <param name="responseStream"></param>
-        /// <param name="context"></param>
-        /// <returns></returns>
-        [Authorize]
-        public async Task SaveKnowledge(IAsyncStreamReader<Knowledge> requestStream, IServerStreamWriter<Knowledge> responseStream, ServerCallContext context)
-        {
-            //Dictionary<string, object> keyValuePairs = new Dictionary<string, object>();
-            //keyValuePairs = request.ToDict();
-            List<Knowledge> knowledges = new List<Knowledge>();
-            await foreach (var message in requestStream.ReadAllAsync())
-            {
-                knowledges.Add(message);
-            }
-
-            await knowledgeService.SaveOrUpdateKnowledge(knowledges);
-
-            knowledges.ForEach(x =>
-            {
-                responseStream.WriteAsync(x);
-            });
-        }
-
-
-        /// <summary>
-        /// 删除知识点
-        /// </summary>
-        /// <param name="listPid"></param>
-        /// <param name="context"></param>
-        /// <returns></returns>
-        [Authorize]
-        public async Task<ListPid> DeleteKnowledge(ListPid listPid, ServerCallContext context)
-        {
-            List<IdPk> idPks = await knowledgeService.DeleteKnowledge(listPid.idPks);//await cosmosDBV3Repository.DeleteAll<Knowledge>(listPid.idPks);
-            listPid.idPks = idPks;
-            return listPid;
-        }
-
-    }
-}

+ 0 - 124
TEAMModelGrpc/Services/SyllabusService.cs

@@ -1,124 +0,0 @@
-using Grpc.Core;
-using Grpc.Extension.Abstract;
-using Microsoft.AspNetCore.Authorization;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using TEAMModelGrpc.Models;
-using TEAMModelOS.SDK.Helper.Common.JsonHelper;
-using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Interface;
-
-namespace TEAMModelGrpc.Services
-{
-    /// <summary>
-    /// 课纲业务
-    /// </summary>
-    public class SyllabusService : IGrpcService
-    {
-        private ISyllabusService syllabusService;
-        private AzureCosmosFactory cosmosDBV3Repository;
-        /// <summary>
-        /// 构造函数
-        /// </summary>
-        /// <param name="syllabusService"></param>
-        /// <param name="cosmosDBV3Repository"></param>
-        public SyllabusService(ISyllabusService syllabusService, AzureCosmosFactory cosmosDBV3Repository)
-        {
-            this.syllabusService = syllabusService;
-            this.cosmosDBV3Repository = cosmosDBV3Repository;
-        }
-
-
-        /// <summary>
-        /// 查找课纲 
-        /// </summary>
-        /// <param name="request"></param>
-        /// <param name="responseStream"></param>
-        /// <param name="context"></param>
-        /// <returns></returns>
-        [Authorize]
-        public async Task FindSyllabusTree(Dict request, IServerStreamWriter<SyllabusTreeDto> responseStream, ServerCallContext context) 
-        {
-            Dictionary<string, object> keyValuePairs = new Dictionary<string, object>();
-            keyValuePairs = request.ToDict();
-            List<SyllabusTree> knowledges = await syllabusService.Find(keyValuePairs);
-            List<SyllabusTreeDto> list = knowledges.ToJson().FromJson<List<SyllabusTreeDto>>();
-
-            list.ForEach(x =>
-            {
-                responseStream.WriteAsync(x);
-            });
-        }
-
-        /// <summary>
-        /// 按节点新增课纲
-        /// </summary>
-        /// <param name="requestStream"></param>
-        /// <param name="context"></param>
-        /// <returns></returns>
-        public async Task<Response> SaveOrUpdateAsNodes(IAsyncStreamReader<SyllabusNode> requestStream,  ServerCallContext context) 
-        {
-
-            List<SyllabusNode> syllabusNodes = new List<SyllabusNode>();
-            await foreach (SyllabusNode syllabusNode in requestStream.ReadAllAsync()) 
-            {
-                syllabusNodes.Add(syllabusNode);
-            }
-
-            await syllabusService.SaveOrUpdateAsNodes(syllabusNodes);
-            Response response = new Response();
-            return response.Success();
-        }
-
-        /// <summary>
-        ///  按树形新增课纲结构
-        /// </summary>
-        /// <param name="requestStream"></param>
-        /// <param name="responseStream"></param>
-        /// <param name="context"></param>
-        /// <returns></returns>
-        public async Task SaveOrUpdateAsTree(IAsyncStreamReader<SyllabusTreeDto> requestStream, IServerStreamWriter<SyllabusTreeDto> responseStream, ServerCallContext context)
-        {
-
-            List<SyllabusTree> syllabusTrees = new List<SyllabusTree>();
-            List<SyllabusTreeDto> syllabusTreeDtos = new List<SyllabusTreeDto>();
-            await foreach (SyllabusTreeDto syllabusNode in requestStream.ReadAllAsync())
-            {
-                syllabusTreeDtos.Add(syllabusNode);
-                SyllabusTree syllabusTree = syllabusNode.ToJson().FromJson<SyllabusTree>();
-                syllabusTrees.Add(syllabusTree);
-            }
-            await syllabusService.SaveOrUpdateAsTree(syllabusTrees);
-
-            syllabusTreeDtos.ForEach(x => {
-                responseStream.WriteAsync(x);
-            });
-        }
-
-
-        /// <summary>
-        /// 删除课纲
-        /// </summary>
-        /// <param name="request"></param>
-        /// <param name="responseStream"></param>
-        /// <param name="context"></param>
-        /// <returns></returns>
-        [Authorize]
-        public async Task DeleteSyllabus(Dict request, IServerStreamWriter<SyllabusTreeDto> responseStream, ServerCallContext context)
-        {
-            Dictionary<string, object> keyValuePairs = new Dictionary<string, object>();
-            keyValuePairs = request.ToDict();
-            List<Syllabus> syllabuses = await syllabusService.DeleteSyllabus(keyValuePairs);//await cosmosDBV3Repository.DeleteAll<Knowledge>(listPid.idPks);
-            List<SyllabusTreeDto> syllabusTreeDtos = syllabuses.ToJson().FromJson<List<SyllabusTreeDto>>();
-
-            syllabusTreeDtos.ForEach(x => { 
-                responseStream.WriteAsync(x);
-            });
-        }
-
-
-    }
-}

+ 0 - 82
TEAMModelGrpc/Services/VolumeService.cs

@@ -1,82 +0,0 @@
-using Grpc.Core;
-using Grpc.Extension.Abstract;
-using Microsoft.AspNetCore.Authorization;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using TEAMModelGrpc.Models;
-using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Interface;
-
-namespace TEAMModelGrpc.Services
-{
-    public class VolumeService :IGrpcService
-    {
-        private readonly AzureCosmosFactory azureCosmosDBRepository;
-        private IVolumeService volumeService;
-
-        public VolumeService(AzureCosmosFactory azureCosmosDBRepository, IVolumeService volumeService)
-        {
-            this.azureCosmosDBRepository = azureCosmosDBRepository;
-            this.volumeService = volumeService;
-        }
-
-        /// <summary>
-        /// 保存册别
-        /// </summary>
-        /// <param name="requestStream"></param>
-        /// <param name="responseStream"></param>
-        /// <param name="context"></param>
-        /// <returns></returns>
-        [Authorize]
-        public async Task SaveOrUpdateVolume(IAsyncStreamReader<Volume> requestStream, IServerStreamWriter<Volume> responseStream, ServerCallContext context) {
-
-            List<Volume> volumes = new List<Volume>();
-            await foreach (Volume syllabusNode in requestStream.ReadAllAsync())
-            {
-                List<Volume> volume = await volumeService.SaveOrUpdateVolume(syllabusNode);
-                volumes.AddRange(volume);
-            }
-            volumes.ForEach(x => {
-                responseStream.WriteAsync(x);
-            });
-        }
-
-        /// <summary>
-        /// 查询册别
-        /// </summary>
-        /// <param name="request"></param>
-        /// <param name="responseStream"></param>
-        /// <param name="context"></param>
-        /// <returns></returns>
-        [Authorize]
-        public async Task FindVolume(Dict request, IServerStreamWriter<Volume> responseStream, ServerCallContext context) {
-
-            Dictionary<string, object> dict = request.ToDict();
-
-            List<Volume> syllabusVolumes = await azureCosmosDBRepository.FindByDict<Volume>(dict);
-
-            syllabusVolumes.ForEach(x => { 
-                responseStream.WriteAsync(x);
-            });
-        }
-
-
-        /// <summary>
-        ///  删除册别
-        /// </summary>
-        /// <param name="listPid"></param>
-        /// <param name="context"></param>
-        /// <returns></returns>
-        [Authorize]
-        public async Task<ListPid> Delete(ListPid listPid, ServerCallContext context)
-        {
-            List<IdPk> idPks = await azureCosmosDBRepository.DeleteAll<Volume>(listPid.idPks);
-            listPid.idPks = idPks;
-            return listPid;
-        }
-
-    }
-}

+ 2 - 2
TEAMModelGrpc/Startup.cs

@@ -107,7 +107,7 @@ namespace TEAMModelGrpc
 
             app.UseEndpoints(endpoints =>
             {
-                endpoints.MapGrpcService<KnowledgeService>();
+                endpoints.MapGrpcService<HomeWorkService>();
                 endpoints.MapGrpcHealthChecksService();
                 endpoints.MapGet("/generateJwtToken", context =>
                 {
@@ -122,7 +122,7 @@ namespace TEAMModelGrpc
             //CodeFirst的Grpc(会自动扫描TStartup所在程序集下的IGrpcSerivce)
 
 
-            app.UseGrpcExtensions<TEAMModelGrpc.Services.KnowledgeService>(options =>
+            app.UseGrpcExtensions<TEAMModelGrpc.Services.HomeWorkService>(options =>
             {
                 //CodeFirst配制
                 options.GlobalPackage = "TMDGrpc";

+ 0 - 99
TEAMModelGrpc/TEAMModelOS.GRPC.xml

@@ -301,105 +301,6 @@
             <param name="context"></param>
             <returns></returns>
         </member>
-        <member name="M:TEAMModelGrpc.Services.KnowledgeService.FinKnowledge(TEAMModelGrpc.Models.Dict,Grpc.Core.IServerStreamWriter{TEAMModelOS.Service.Models.Knowledge},Grpc.Core.ServerCallContext)">
-            <summary>
-            查询知识点
-            </summary>
-            <param name="request"></param>
-            <param name="responseStream"></param>
-            <param name="context"></param>
-            <returns></returns>
-        </member>
-        <member name="M:TEAMModelGrpc.Services.KnowledgeService.SaveKnowledge(Grpc.Core.IAsyncStreamReader{TEAMModelOS.Service.Models.Knowledge},Grpc.Core.IServerStreamWriter{TEAMModelOS.Service.Models.Knowledge},Grpc.Core.ServerCallContext)">
-            <summary>
-            保存知识点
-            </summary>
-            <param name="requestStream"></param>
-            <param name="responseStream"></param>
-            <param name="context"></param>
-            <returns></returns>
-        </member>
-        <member name="M:TEAMModelGrpc.Services.KnowledgeService.DeleteKnowledge(TEAMModelGrpc.Models.ListPid,Grpc.Core.ServerCallContext)">
-            <summary>
-            删除知识点
-            </summary>
-            <param name="listPid"></param>
-            <param name="context"></param>
-            <returns></returns>
-        </member>
-        <member name="T:TEAMModelGrpc.Services.SyllabusService">
-            <summary>
-            课纲业务
-            </summary>
-        </member>
-        <member name="M:TEAMModelGrpc.Services.SyllabusService.#ctor(TEAMModelOS.Service.Services.Interface.ISyllabusService,TEAMModelOS.SDK.DI.AzureCosmosFactory)">
-            <summary>
-            构造函数
-            </summary>
-            <param name="syllabusService"></param>
-            <param name="cosmosDBV3Repository"></param>
-        </member>
-        <member name="M:TEAMModelGrpc.Services.SyllabusService.FindSyllabusTree(TEAMModelGrpc.Models.Dict,Grpc.Core.IServerStreamWriter{TEAMModelGrpc.Models.SyllabusTreeDto},Grpc.Core.ServerCallContext)">
-            <summary>
-            查找课纲 
-            </summary>
-            <param name="request"></param>
-            <param name="responseStream"></param>
-            <param name="context"></param>
-            <returns></returns>
-        </member>
-        <member name="M:TEAMModelGrpc.Services.SyllabusService.SaveOrUpdateAsNodes(Grpc.Core.IAsyncStreamReader{TEAMModelOS.Service.Models.SyllabusNode},Grpc.Core.ServerCallContext)">
-            <summary>
-            按节点新增课纲
-            </summary>
-            <param name="requestStream"></param>
-            <param name="context"></param>
-            <returns></returns>
-        </member>
-        <member name="M:TEAMModelGrpc.Services.SyllabusService.SaveOrUpdateAsTree(Grpc.Core.IAsyncStreamReader{TEAMModelGrpc.Models.SyllabusTreeDto},Grpc.Core.IServerStreamWriter{TEAMModelGrpc.Models.SyllabusTreeDto},Grpc.Core.ServerCallContext)">
-            <summary>
-             按树形新增课纲结构
-            </summary>
-            <param name="requestStream"></param>
-            <param name="responseStream"></param>
-            <param name="context"></param>
-            <returns></returns>
-        </member>
-        <member name="M:TEAMModelGrpc.Services.SyllabusService.DeleteSyllabus(TEAMModelGrpc.Models.Dict,Grpc.Core.IServerStreamWriter{TEAMModelGrpc.Models.SyllabusTreeDto},Grpc.Core.ServerCallContext)">
-            <summary>
-            删除课纲
-            </summary>
-            <param name="request"></param>
-            <param name="responseStream"></param>
-            <param name="context"></param>
-            <returns></returns>
-        </member>
-        <member name="M:TEAMModelGrpc.Services.VolumeService.SaveOrUpdateVolume(Grpc.Core.IAsyncStreamReader{TEAMModelOS.Service.Models.Volume},Grpc.Core.IServerStreamWriter{TEAMModelOS.Service.Models.Volume},Grpc.Core.ServerCallContext)">
-            <summary>
-            保存册别
-            </summary>
-            <param name="requestStream"></param>
-            <param name="responseStream"></param>
-            <param name="context"></param>
-            <returns></returns>
-        </member>
-        <member name="M:TEAMModelGrpc.Services.VolumeService.FindVolume(TEAMModelGrpc.Models.Dict,Grpc.Core.IServerStreamWriter{TEAMModelOS.Service.Models.Volume},Grpc.Core.ServerCallContext)">
-            <summary>
-            查询册别
-            </summary>
-            <param name="request"></param>
-            <param name="responseStream"></param>
-            <param name="context"></param>
-            <returns></returns>
-        </member>
-        <member name="M:TEAMModelGrpc.Services.VolumeService.Delete(TEAMModelGrpc.Models.ListPid,Grpc.Core.ServerCallContext)">
-            <summary>
-             删除册别
-            </summary>
-            <param name="listPid"></param>
-            <param name="context"></param>
-            <returns></returns>
-        </member>
         <member name="T:TEAMModelGrpc.GreetReflection">
             <summary>Holder for reflection information generated from Protos/greet.proto</summary>
         </member>

+ 0 - 13
TEAMModelOS.Service/Services/ChangeFeed/IChangeFeedService.cs

@@ -1,13 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Context.Configuration;
-
-namespace TEAMModelOS.Service.Services.ChangeFeed
-{
-    public interface IChangeFeedService<T>
-    {
-        void Processor(IReadOnlyCollection<T> changes);
-    }
-}

+ 0 - 10
TEAMModelOS.Service/Services/ChangeFeed/IChangeService.cs

@@ -1,10 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace TEAMModelOS.Service.Services.ChangeFeed
-{
-    public  interface IChangeService
-    {
-    }
-}

+ 0 - 24
TEAMModelOS.Service/Services/ChangeFeed/KnowledgeChangeFeed.cs

@@ -1,24 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Helper.Common.JsonHelper;
-using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Service.Models;
-
-namespace TEAMModelOS.Service.Services.ChangeFeed
-{
-    public class KnowledgeChangeFeed : IChangeFeedService<Knowledge>, IChangeService
-    {
-        private AzureCosmosFactory cosmosDBV3Repository;
-        public KnowledgeChangeFeed(AzureCosmosFactory azureCosmos) {
-            cosmosDBV3Repository = azureCosmos;
-        }
-        public   void Processor(IReadOnlyCollection<Knowledge> changes)
-        {
-            //List<Knowledge> s = await cosmosDBV3Repository.FindAll<Knowledge>();
-            Console.WriteLine(DateTimeOffset.Now.UtcTicks +"    "+changes.ToApiJson());
-        }
-    }
-}

+ 0 - 23
TEAMModelOS.Service/Services/ChangeFeed/SyllabusVolumeChangeFeed.cs

@@ -1,23 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Helper.Common.JsonHelper;
-using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Service.Models;
-
-namespace TEAMModelOS.Service.Services.ChangeFeed
-{
-    public class SyllabusVolumeChangeFeed : IChangeFeedService<Volume>, IChangeService
-    {
-        private AzureCosmosFactory cosmosDBV3Repository;
-        public SyllabusVolumeChangeFeed(AzureCosmosFactory azureCosmos)
-        {
-            cosmosDBV3Repository = azureCosmos;
-        }
-        public void Processor(IReadOnlyCollection<Volume> changes)
-        {
-            Console.WriteLine(DateTimeOffset.Now.UtcTicks + "    "+changes.ToApiJson());
-        }
-    }
-}

+ 0 - 12
TEAMModelOS.Service/Services/Evaluation/Implements/EvaluatingService.cs

@@ -1,12 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using TEAMModelOS.Service.Exam.Interfaces;
-
-namespace TEAMModelOS.Service.Exam.Implements
-{
-    public class EvaluatingService :  IEvaluatingService
-    {
-
-    }
-}

+ 0 - 9
TEAMModelOS.Service/Services/Evaluation/Interfaces/IEvaluatingService.cs

@@ -1,9 +0,0 @@
-using TEAMModelOS.SDK.Context.Configuration;
-
-namespace TEAMModelOS.Service.Exam.Interfaces
-{
-    public interface IEvaluatingService : IBusinessService
-    {
-
-    }
-}

+ 0 - 13
TEAMModelOS.Service/Services/Evaluation/Interfaces/IHtmlAnalyzeService.cs

@@ -1,13 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using TEAMModelOS.SDK.Context.Configuration;
-
-namespace TEAMModelOS.Service.Services.Exam.Interfaces
-{
-    public interface IHtmlAnalyzeService: IBusinessService
-    {
-        List<Models.ItemInfo> AnalyzeWordAsync(string htmlString, string Lang);
-  
-    }
-}

+ 0 - 18
TEAMModelOS.Service/Services/Evaluation/Interfaces/IImportExerciseService.cs

@@ -1,18 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading.Tasks;
-
-using TEAMModelOS.SDK.Context.Configuration;
-
-namespace TEAMModelOS.Service.Services.Exam.Interfaces
-{
-    public interface IImportExerciseService: IBusinessService
-    {
-      
-
-        Task<Dictionary<string, object>> UploadWord(IFormFile file);
-
-    }
-}

+ 0 - 119
TEAMModelOS.Service/Services/Learn/Implements/ServiceBusReviceService.cs

@@ -1,119 +0,0 @@
-using Microsoft.Azure.ServiceBus;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Text.Json;
-using System.Threading;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Context.Configuration;
-using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
-using TEAMModelOS.SDK.Helper.Common.JsonHelper;
-using TEAMModelOS.SDK.DI;
-using TEAMModelOS.SDK.Module.AzureServiceBus;
-using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Learn.Interfaces;
-
-namespace TEAMModelOS.Service.Services.Learn.Implements
-{
-    public class ServiceBusReviceService : IServiceBusReviceService
-    {
-        private readonly IAzureServiceBusService _serviceBus;
-        private readonly AzureCosmosFactory _cosmos;
-        private static ISubscriptionClient subscriptionClient;
-        public ServiceBusReviceService(IAzureServiceBusService azureServiceBus, AzureCosmosFactory cosmos)
-        {
-            _serviceBus = azureServiceBus;
-            _cosmos = cosmos;
-        }
-
-        public   void ReciveMessageAsync()
-        {
-            string SubName = "test_topic_ReciveTask";
-            subscriptionClient = _serviceBus.GetSubClient(SubName).subscriptionClient;
-            RegisterOnMessageHandlerAndReceiveMessages();
-          //  await subscriptionClient.CloseAsync();
-            //return "";
-        }
-        public void RegisterOnMessageHandlerAndReceiveMessages()
-        {
-            // Configure the message handler options in terms of exception handling, number of concurrent messages to deliver, etc.
-            var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
-            {
-                // Maximum number of concurrent calls to the callback ProcessMessagesAsync(), set to 1 for simplicity.
-                // Set it according to how many messages the application wants to process in parallel.
-                MaxConcurrentCalls = 1,
-
-                // Indicates whether MessagePump should automatically complete the messages after returning from User Callback.
-                // False below indicates the Complete will be handled by the User Callback as in `ProcessMessagesAsync` below.
-                AutoComplete = false
-            };
-            subscriptionClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
-
-        }
-        public async Task ProcessMessagesAsync(Message message, CancellationToken token)
-        {
-            // Process the message.
-            Console.WriteLine($"Received message: SequenceNumber:{message.SystemProperties.SequenceNumber} Body:{Encoding.UTF8.GetString(message.Body)}");
-
-            // Complete the message so that it is not received again.
-            // This can be done only if the subscriptionClient is created in ReceiveMode.PeekLock mode (which is the default).
-            await subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);
-            Dictionary<string, object> dict = Encoding.UTF8.GetString(message.Body).FromApiJson<Dictionary<string, object>>();
-            Dictionary<string, object> obj = new Dictionary<string, object>();
-            dict.TryGetValue("id", out object id);
-            dict.TryGetValue("pk", out object pk);
-            dict.TryGetValue("name", out object name);
-            dict.TryGetValue("status", out object status);
-            if (name != null && id!=null && pk!=null && status!=null ) {
-                if (name.ToString() == typeof(Homework).Name) {
-                    Homework data= await   _cosmos.FindByIdPk<Homework>(id.ToString(), pk.ToString());
-                    data.status = int.Parse(status.ToString());
-                    await _cosmos.Update(data);
-                }
-                if (name.ToString() == typeof(Vote).Name)
-                {
-                    Vote data = await _cosmos.FindByIdPk<Vote>(id.ToString(), pk.ToString());
-                    data.status = int.Parse(status.ToString());
-                    await _cosmos.Update(data);
-                }
-                if (name.ToString() == typeof(Survey).Name)
-                {
-                    Survey data= await _cosmos.FindByIdPk<Survey>(id.ToString(), pk.ToString());
-                    data.status = int.Parse(status.ToString());
-                    await _cosmos.Update(data);
-                }
-                if (name.ToString() == typeof(ExamInfo).Name)
-                {
-                    ExamInfo data= await _cosmos.FindByIdPk<ExamInfo>(id.ToString(), pk.ToString());
-                    data.status = int.Parse(status.ToString());
-                    await _cosmos.Update(data);
-                }
-                if (name.ToString() == typeof(LearnTask).Name)
-                {
-                    LearnTask data = await _cosmos.FindByIdPk<LearnTask>(id.ToString(), pk.ToString());
-                    data.status = int.Parse(status.ToString());
-                    await _cosmos.Update(data);
-                }
-            }
-           
-            //return message;
-
-            // Note: Use the cancellationToken passed as necessary to determine if the subscriptionClient has already been closed.
-            // If subscriptionClient has already been closed, you can choose to not call CompleteAsync() or AbandonAsync() etc.
-            // to avoid unnecessary exceptions.
-        }
-
-        public static Task ExceptionReceivedHandler(ExceptionReceivedEventArgs exceptionReceivedEventArgs)
-        {
-            Console.WriteLine($"Message handler encountered an exception {exceptionReceivedEventArgs.Exception}.");
-            var context = exceptionReceivedEventArgs.ExceptionReceivedContext;
-            Console.WriteLine("Exception context for troubleshooting:");
-            Console.WriteLine($"- Endpoint: {context.Endpoint}");
-            Console.WriteLine($"- Entity Path: {context.EntityPath}");
-            Console.WriteLine($"- Executing Action: {context.Action}");
-            return Task.CompletedTask;
-        }
-    }
-}

+ 0 - 46
TEAMModelOS.Service/Services/Learn/Implements/TimerWorkService.cs

@@ -1,46 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
-using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Service.Services.Learn.Interfaces;
-
-namespace TEAMModelOS.Service.Services.Learn.Implements
-{
-    public class TimerWorkService: ITimerWorkService
-    {
-        private readonly AzureCosmosFactory _cosmos;
-
-        public TimerWorkService(AzureCosmosFactory cosmos)
-        {
-            _cosmos = cosmos;
-        }
-
-        public void TimerWork<T>(long startTime, int status , Dictionary<string, object> dict) where T : ID
-        {
-            System.Timers.Timer aTimer = new System.Timers.Timer();
-            // Create a timer with a two second interval.
-            long time = Math.Abs(startTime - new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds());
-            aTimer = new System.Timers.Timer(time);
-            // Hook up the Elapsed event for the timer. 
-            aTimer.Elapsed += async (sender, e) => await OnTimedEventAsync<T>(_cosmos,status, dict);
-            aTimer.AutoReset = false;
-            aTimer.Enabled = true;
-        }
-
-        public static async Task OnTimedEventAsync<T>(AzureCosmosFactory _cosmos, int status, Dictionary<string, object> dict) where T : ID
-        {
-            List<T> homeWorks = await _cosmos.FindByDict<T>(dict);
-            if (homeWorks.IsNotEmpty())
-            {
-                PropertyInfo propertyInfo = homeWorks[0].GetType().GetProperty("status");
-                for (int i = 0; i < homeWorks.Count; i++)
-                    propertyInfo.SetValue(homeWorks[i], status);
-                await _cosmos.SaveOrUpdateAll<T>(homeWorks);
-
-            }
-        }
-    }
-}

+ 0 - 14
TEAMModelOS.Service/Services/Learn/Interfaces/IServiceBusReviceService.cs

@@ -1,14 +0,0 @@
-using Microsoft.Extensions.Hosting;
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Context.Configuration;
-
-namespace TEAMModelOS.Service.Services.Learn.Interfaces
-{
-    public interface IServiceBusReviceService
-    {
-        public void ReciveMessageAsync();
-    }
-}

+ 0 - 16
TEAMModelOS.Service/Services/Learn/Interfaces/IServiceBusService.cs

@@ -1,16 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Context.Configuration;
-
-namespace TEAMModelOS.Service.Services.Learn.Interfaces
-{
-    public interface IServiceBusService : IBusinessService
-    {
-        public Task<long> SendMessage<T>(string TopicName, string id, string pk, long startTime,int status,string msgId);
-
-  
-
-    }
-}

+ 0 - 13
TEAMModelOS.Service/Services/Learn/Interfaces/ITimerWorkService.cs

@@ -1,13 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using TEAMModelOS.SDK.Context.Configuration;
-using TEAMModelOS.SDK.DI;
-
-namespace TEAMModelOS.Service.Services.Learn.Interfaces
-{
-    public interface ITimerWorkService : IBusinessService
-    {
-        public void TimerWork<T>(long startTime, int status,Dictionary<string, object> dict ) where T : ID;
-    }
-}

+ 0 - 17
TEAMModelOS.Service/Services/Syllabus/Interface/IKnowledgeService.cs

@@ -1,17 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Context.Configuration;
-using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Service.Models;
-
-namespace TEAMModelOS.Service.Services.Interface
-{
-    public interface IKnowledgeService : IBusinessService
-    {
-        public Task<List<Knowledge>> SaveOrUpdateKnowledge(List<Knowledge> request);
-
-        public Task<List<IdPk>> DeleteKnowledge(List<IdPk> listPid);
-    }
-}

+ 0 - 34
TEAMModelOS.Service/Services/Syllabus/Interface/ISyllabusService.cs

@@ -1,34 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Context.Configuration;
-using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Service.Models;
-
-namespace TEAMModelOS.Service.Services.Interface
-{
-    public interface ISyllabusService : IBusinessService
-    {
-
-        /// <summary>
-        /// 查找课纲 
-        /// </summary>
-        /// <param name="request"></param>
-        /// <returns></returns>
-        public Task<List<SyllabusTree>> Find(Dictionary<string, object> request);
-
-        /// <summary>
-        /// 保存或者修改课纲
-        /// </summary>
-        /// <param name="syllabusNodes"></param>
-        /// <returns></returns>
-        public Task<List<Syllabus>> SaveOrUpdateAsNodes(List<SyllabusNode> syllabusNodes);
-
-        public Task<List<SyllabusTree>> SaveOrUpdateAsTree(List<SyllabusTree> request);
-
-        public Task<List<Syllabus>> DeleteSyllabus(Dictionary<string, object> request);
-
-
-    }
-}

+ 0 - 16
TEAMModelOS.Service/Services/Syllabus/Interface/IVolumeService.cs

@@ -1,16 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Context.Configuration;
-using TEAMModelOS.Service.Models;
-
-namespace TEAMModelOS.Service.Services.Interface
-{
-    public interface IVolumeService : IBusinessService
-    {
-
-        public  Task<List<Volume>> SaveOrUpdateVolume(Volume request);
-
-    }
-}

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 1969
TEAMModelOS.Service/TEAMModelOS.Model.xml


+ 8 - 6
TEAMModelOS/Controllers/Exam/ExamController.cs

@@ -8,9 +8,11 @@ using TEAMModelOS.SDK.Context.Exception;
 using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Learn.Interfaces;
+using TEAMModelOS.Service.Models; 
 using TEAMModelOS.SDK.Context.Constant.Common;
+using TEAMModelOS.Service.Services.Learn.Implements;
+using TEAMModelOS.SDK.Module.AzureServiceBus;
+
 namespace TEAMModelOS.Controllers
 {
     [Route("api/[controller]")]
@@ -18,12 +20,12 @@ namespace TEAMModelOS.Controllers
     public class ExamController : BaseController
     {
         private readonly AzureCosmosFactory cosmosDBV3Repository;
-        private readonly IServiceBusService _serviceBus;
-        public ExamController(AzureCosmosFactory _cosmosDBV3Repository , IServiceBusService serviceBus)
+        private readonly IAzureServiceBusService _serviceBus;
+        public ExamController(AzureCosmosFactory _cosmosDBV3Repository, IAzureServiceBusService serviceBus)
         {
-            _serviceBus = serviceBus;
+            
             cosmosDBV3Repository = _cosmosDBV3Repository;
-          
+            _serviceBus = serviceBus;
         }
 
         /// <summary>

+ 13 - 13
TEAMModelOS/Controllers/Exam/ImportExerciseController.cs

@@ -1,4 +1,4 @@
-using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
 using System;
 using System.Collections.Generic;
@@ -8,25 +8,25 @@ using TEAMModelOS.SDK.Context.Constant.Common;
 using TEAMModelOS.SDK.Context.Exception;
 using TEAMModelOS.SDK;
 using TEAMModelOS.Service.Model.PowerPoint; 
-using TEAMModelOS.Service.Services.Exam.Implements;
-using TEAMModelOS.Service.Services.Exam.Interfaces;
+using TEAMModelOS.Service.Services.Exam.Implements; 
 using TEAMModelOS.Service.Services.PowerPoint.Interface;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.Service;
 
 namespace TEAMModelOS.Controllers
 {
     [Route("api/[controller]")]
     [ApiController]
     public class ImportExerciseController : BaseController
-    {
-        private readonly IImportExerciseService importExerciseService;
-        private readonly IHtmlAnalyzeService htmlAnalyzeService;
+    { 
+        
         private readonly IHtexService htexService;
-
-        public ImportExerciseController(IImportExerciseService _importExerciseService, IHtmlAnalyzeService _htmlAnalyzeService , IHtexService _htexService)
+        private readonly AzureStorageFactory azureBlobDBRepository;
+        public ImportExerciseController(  IHtexService _htexService, AzureStorageFactory _azureBlobDBRepository)
         {
-            importExerciseService = _importExerciseService;
-            htmlAnalyzeService = _htmlAnalyzeService;
-            htexService = _htexService;
+            azureBlobDBRepository = _azureBlobDBRepository;
+
+               htexService = _htexService;
         }
         /// <summary>
         /// </summary>
@@ -57,7 +57,7 @@ namespace TEAMModelOS.Controllers
             {
                 return responseBuilder.Error(ResponseCode.FAILED, "type is not docx!").build();
             }
-           Dictionary<string, object> model = await importExerciseService.UploadWord(file);
+           Dictionary<string, object> model = await ImportExerciseService.UploadWord(azureBlobDBRepository, file);
 
             return responseBuilder.Data(model).build();
         }
@@ -74,7 +74,7 @@ namespace TEAMModelOS.Controllers
             bool flag = request.@params.TryGetValue("htmlString", out object htmlString);
             if (flag && htmlString != null && !string.IsNullOrEmpty(htmlString.ToString()))
             {
-                List<Service.Models.ItemInfo> exercises = htmlAnalyzeService.AnalyzeWordAsync(htmlString.ToString(), request.lang);
+                List<Service.Models.ItemInfo> exercises = HtmlAnalyzeService.AnalyzeWordAsync(htmlString.ToString(), request.lang);
                 return builder.Data(exercises).build();
             }
             else

+ 5 - 6
TEAMModelOS/Controllers/Syllabus/KnowledgeController.cs

@@ -12,7 +12,7 @@ using TEAMModelOS.SDK.Helper.Security.ShaHash;
 using TEAMModelOS.SDK.DI;
 
 using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Interface;
+using TEAMModelOS.Service.Services.Implement;
 
 namespace TEAMModelOS.Controllers
 {
@@ -22,14 +22,13 @@ namespace TEAMModelOS.Controllers
     public class KnowledgeController : BaseController
     {
         private AzureStorageFactory _table;
-        private AzureCosmosFactory _cosmos;
-        private IKnowledgeService knowledgeService;
+        private AzureCosmosFactory _cosmos; 
 
-        public KnowledgeController(AzureStorageFactory table, AzureCosmosFactory cosmos, IKnowledgeService knowledgeService)
+        public KnowledgeController(AzureStorageFactory table, AzureCosmosFactory cosmos )
         {
             _table = table;
             _cosmos = cosmos;
-            this.knowledgeService = knowledgeService;
+          
         }
 
         /// <summary>
@@ -289,7 +288,7 @@ namespace TEAMModelOS.Controllers
             ResponseBuilder builder = ResponseBuilder.custom();
             if (request.@params.IsNotEmpty())
             {
-                List<Knowledge> ts = await knowledgeService.SaveOrUpdateKnowledge(request.@params);
+                List<Knowledge> ts = await KnowledgeService.SaveOrUpdateKnowledge(_cosmos,request.@params);
                 if (ts.Count > 0) builder.Data(ts).Extend(new Dictionary<string, object> { { "count", ts.Count } });
                 else {
                     return builder.Error(ResponseCode.FAILED, "失败!").build();

+ 9 - 11
TEAMModelOS/Controllers/Syllabus/SyllabusController.cs

@@ -8,11 +8,9 @@ using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using System;
 using TEAMModelOS.SDK.Helper.Common.JsonHelper;
-using System.Linq;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
-using TEAMModelOS.Service.Services.Interface;
+using System.Linq; 
 using TEAMModelOS.Service.Models;
+using TEAMModelOS.Service.Services.Implement;
 
 namespace TEAMModelOS.Controllers
 {
@@ -22,12 +20,12 @@ namespace TEAMModelOS.Controllers
     public class SyllabusController : BaseController
     {
         private AzureCosmosFactory azureCosmosDBRepository;
-        private ISyllabusService syllabusService;
+         
 
-        public SyllabusController(AzureCosmosFactory azureCosmosDBRepository, ISyllabusService syllabusService)
+        public SyllabusController(AzureCosmosFactory azureCosmosDBRepository )
         {
             this.azureCosmosDBRepository = azureCosmosDBRepository;
-            this.syllabusService = syllabusService;
+           
         }
 
 
@@ -40,7 +38,7 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> SaveOrUpdateAsTree(JosnRequest<List<SyllabusTree>> request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<SyllabusTree> treess = await syllabusService.SaveOrUpdateAsTree(request.@params);
+            List<SyllabusTree> treess = await SyllabusService.SaveOrUpdateAsTree(azureCosmosDBRepository,request.@params);
             return builder.Data(treess).build();
         }
 
@@ -54,7 +52,7 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> SaveOrUpdateAsNodes(JosnRequest<List<SyllabusNode>> request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<Syllabus> syllabuses = await syllabusService.SaveOrUpdateAsNodes(request.@params);
+            List<Syllabus> syllabuses = await SyllabusService.SaveOrUpdateAsNodes(azureCosmosDBRepository, request.@params);
             if (syllabuses.IsNotEmpty()) return builder.Data(request.@params).build();
             else return builder.Data(syllabuses).build();
         }
@@ -70,7 +68,7 @@ namespace TEAMModelOS.Controllers
             ResponseBuilder builder = ResponseBuilder.custom();
             if (request.@params.Keys.Count > 0)
             {
-                List<Syllabus> syllabuses = await syllabusService.DeleteSyllabus(request.@params);
+                List<Syllabus> syllabuses = await SyllabusService.DeleteSyllabus(azureCosmosDBRepository ,request.@params);
 
                 if (syllabuses.IsNotEmpty())
                 {
@@ -115,7 +113,7 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> Find(JosnRequest<Dictionary<string, object>> request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<SyllabusTree> treess = await syllabusService.Find(request.@params);
+            List<SyllabusTree> treess = await SyllabusService.Find(azureCosmosDBRepository, request.@params);
             return builder.Data(treess).build();
         }
 

+ 5 - 7
TEAMModelOS/Controllers/Syllabus/VolumeController.cs

@@ -9,11 +9,10 @@ using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.Extension.SnowFlake;
 using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.Helper.Security.ShaHash;
-using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Controllers;
-using TEAMModelOS.Service.Services.Interface;
+using TEAMModelOS.SDK.DI; 
 using TEAMModelOS.Service.Models;
 using Org.BouncyCastle.Ocsp;
+using TEAMModelOS.Service.Services.Implement;
 
 namespace TEAMModelOS.Controllers
 {
@@ -22,12 +21,11 @@ namespace TEAMModelOS.Controllers
     public class VolumeController : BaseController
     {
         private AzureCosmosFactory azureCosmosDBRepository;
-        private IVolumeService volumeService;
 
-        public VolumeController(AzureCosmosFactory azureCosmosDBRepository, IVolumeService volumeService)
+        public VolumeController(AzureCosmosFactory azureCosmosDBRepository )
         {
             this.azureCosmosDBRepository = azureCosmosDBRepository;
-            this.volumeService = volumeService;
+            
         }
 
 
@@ -40,7 +38,7 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> Upsert(JosnRequest<Volume> request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<Volume> volume = await volumeService.SaveOrUpdateVolume(request.@params);
+            List<Volume> volume = await VolumeService.SaveOrUpdateVolume(azureCosmosDBRepository,request.@params);
             return builder.Data(volume.IsEmpty() ? null : volume[0]).build();
         }
 

+ 4 - 5
TEAMModelOS/Controllers/Task/HomeworkController.cs

@@ -17,10 +17,9 @@ using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
 using TEAMModelOS.SDK.Helper.Common.JsonHelper;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Module.AzureServiceBus;
-using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Learn;
-using TEAMModelOS.Service.Services.Learn.Interfaces;
+using TEAMModelOS.Service.Models; 
 using TEAMModelOS.SDK.Context.Constant.Common;
+using TEAMModelOS.Service.Services.Learn.Implements;
 
 namespace TEAMModelOS.Controllers.Learn
 {
@@ -33,8 +32,8 @@ namespace TEAMModelOS.Controllers.Learn
     {
         private readonly AzureCosmosFactory _cosmos;
        
-        private readonly IServiceBusService _serviceBus;
-        public HomeworkController(AzureCosmosFactory cosmos , IServiceBusService serviceBus  )
+        private readonly IAzureServiceBusService _serviceBus;
+        public HomeworkController(AzureCosmosFactory cosmos , IAzureServiceBusService serviceBus  )
         {
             _cosmos = cosmos;
             _serviceBus = serviceBus;

+ 7 - 5
TEAMModelOS/Controllers/Task/LearnController.cs

@@ -1,4 +1,4 @@
-using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -9,9 +9,11 @@ using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
 using TEAMModelOS.SDK.Helper.Common.ValidateHelper;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.Service.Models;
-using TEAMModelOS.Models;
-using TEAMModelOS.Service.Services.Learn.Interfaces;
+using TEAMModelOS.Models; 
 using TEAMModelOS.SDK.Context.Constant.Common;
+using TEAMModelOS.SDK.Module.AzureServiceBus;
+using TEAMModelOS.Service.Services.Learn.Implements;
+
 namespace TEAMModelOS.Controllers.Learn
 {
     /// <summary>
@@ -22,8 +24,8 @@ namespace TEAMModelOS.Controllers.Learn
     public class LearnController: BaseController
     {
         private readonly AzureCosmosFactory cosmosDBV3Repository;
-        private readonly IServiceBusService _serviceBus;
-        public LearnController(AzureCosmosFactory _cosmosDBV3Repository, IServiceBusService serviceBus)
+        private readonly IAzureServiceBusService _serviceBus;
+        public LearnController(AzureCosmosFactory _cosmosDBV3Repository, IAzureServiceBusService serviceBus)
         {
             _serviceBus = serviceBus;
             cosmosDBV3Repository = _cosmosDBV3Repository;

+ 7 - 5
TEAMModelOS/Controllers/Task/SurveyController.cs

@@ -1,4 +1,4 @@
-using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -8,9 +8,11 @@ using TEAMModelOS.SDK.Context.Exception;
 using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Learn.Interfaces;
+using TEAMModelOS.Service.Models; 
 using TEAMModelOS.SDK.Context.Constant.Common;
+using TEAMModelOS.SDK.Module.AzureServiceBus;
+using TEAMModelOS.Service.Services.Learn.Implements;
+
 namespace TEAMModelOS.Controllers
 {
     /// <summary>
@@ -22,8 +24,8 @@ namespace TEAMModelOS.Controllers
     {
         private readonly AzureCosmosFactory azureCosmosDBV3Repository;
  
-        private readonly IServiceBusService _serviceBus;
-        public SurveyController(AzureCosmosFactory _azureCosmosDBV3Repository,  IServiceBusService serviceBus)
+        private readonly IAzureServiceBusService _serviceBus;
+        public SurveyController(AzureCosmosFactory _azureCosmosDBV3Repository, IAzureServiceBusService serviceBus)
         {
             //  _timerWorkService = timerWorkService;
             _serviceBus = serviceBus;

+ 6 - 4
TEAMModelOS/Controllers/Task/VoteController.cs

@@ -12,9 +12,11 @@ using TEAMModelOS.SDK.Context.Exception;
 using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Learn.Interfaces;
+using TEAMModelOS.Service.Models; 
 using TEAMModelOS.SDK.Context.Constant.Common;
+using TEAMModelOS.SDK.Module.AzureServiceBus;
+using TEAMModelOS.Service.Services.Learn.Implements;
+
 namespace TEAMModelOS.Controllers.Learn
 {
     /// <summary>
@@ -27,8 +29,8 @@ namespace TEAMModelOS.Controllers.Learn
 
         private readonly AzureCosmosFactory _cosmos;
        
-        private readonly IServiceBusService _serviceBus;
-        public VoteController(AzureCosmosFactory cosmos, IServiceBusService serviceBus)
+        private readonly IAzureServiceBusService _serviceBus;
+        public VoteController(AzureCosmosFactory cosmos, IAzureServiceBusService serviceBus)
         {
             _cosmos = cosmos;
             _serviceBus = serviceBus;

TEAMModelOS/Models/AzureBlobSASDto.cs → TEAMModelOS/Dto/AzureBlobSASDto.cs


TEAMModelOS/Models/BlockPointDto.cs → TEAMModelOS/Dto/BlockPointDto.cs


TEAMModelOS/Models/CommentsDto.cs → TEAMModelOS/Dto/CommentsDto.cs


TEAMModelOS/Models/CommonQuery.cs → TEAMModelOS/Dto/CommonQuery.cs


TEAMModelOS/Models/CoursePlanDto.cs → TEAMModelOS/Dto/CoursePlanDto.cs


TEAMModelOS/Models/HomeWorkCommentDto.cs → TEAMModelOS/Dto/HomeWorkCommentDto.cs


TEAMModelOS/Models/HomeWorkDto.cs → TEAMModelOS/Dto/HomeWorkDto.cs


TEAMModelOS/Models/HomeWorkFindDto.cs → TEAMModelOS/Dto/HomeWorkFindDto.cs


TEAMModelOS/Models/HomeWorkScoringDto.cs → TEAMModelOS/Dto/HomeWorkScoringDto.cs


TEAMModelOS/Models/KnowledgeDto.cs → TEAMModelOS/Dto/KnowledgeDto.cs


TEAMModelOS/Models/PointDto.cs → TEAMModelOS/Dto/PointDto.cs


TEAMModelOS/Models/SurveyDto.cs → TEAMModelOS/Dto/SurveyDto.cs


TEAMModelOS/Models/VoteDto.cs → TEAMModelOS/Dto/VoteDto.cs


TEAMModelOS/Models/VoteStudentDto.cs → TEAMModelOS/Dto/VoteStudentDto.cs


+ 368 - 0
TEAMModelOS/Service/Analysis/AchievementService.cs

@@ -0,0 +1,368 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.Service.Analysis.Interfaces;
+
+using TEAMModelOS.Service.Models;
+
+namespace TEAMModelOS.Service.Analysis.Implements
+{
+    public class AchievementService : IAchievementService
+    {
+        public AzureCosmosFactory _cosmosrepository;
+
+        public AchievementService(AzureCosmosFactory cosmosDBRepository)
+        {
+            _cosmosrepository = cosmosDBRepository;
+        }
+        //处理各个班级均分分析
+        public Dictionary<string, object> GetAverage(List<ExamResult> exams, List<string> gav, List<string> cav, List<List<double>> subSum, List<Student> students)
+        {
+            Dictionary<string, object> Average = new Dictionary<string, object>();
+            List<List<string>> classAverage = new List<List<string>>();
+            HashSet<string> classList = new HashSet<string>();
+            List<string> keys = new List<string>();
+            if (exams.IsNotEmpty())
+            {
+                keys.Add("setNo");
+                keys.Add("name");
+                keys.Add("score");
+                keys.Add("classAverage");               
+                keys.Add("gradeAverage");
+                int j = 0;
+                exams[0].classes.ForEach(c =>
+                    {
+                        //c.Keys遍历key值
+                        foreach (string key in c.Keys)
+                        {
+                            classList.Add(key);
+                        }
+                        int k = 0;
+                        //每个班级平均分
+                        foreach (int[] value in c.Values)
+                        {  
+                            for (int i = value[0]; i <= value[1]; i++)
+                            {
+                                List<string> stuPoint = new List<string>();
+                                keys.ForEach(x =>
+                                {
+                                    stuPoint.Add("-");
+                                });
+                                stuPoint[0] = (i + 1).ToString();
+                                foreach (Student ss in students)
+                                {
+                                    if (exams[0].ids[i].Equals(ss.studentId))
+                                    {
+                                        stuPoint[1] = ss.name;
+                                        break;
+                                    }
+                                }
+                                
+                                stuPoint[2] = subSum[j][k].ToString() ;
+                                stuPoint[3] = cav[j];
+                                stuPoint[4] = gav[0];
+                                classAverage.Add(stuPoint);
+                                k++;
+                            }
+                            j++;
+                        }                       
+                    });
+                Average.Add("keys",keys);
+                Average.Add("datas", classAverage);
+            }
+            return Average;
+                
+        }
+
+        public List<Dictionary<string, object>> GetPR(List<ExamResult> exams, List<List<double>> subSum,List<Student> students)
+        {
+            // 计算公式 PR=100- (100*R-50)/N
+            List<Dictionary<string, object>> subPR = new List<Dictionary<string, object>>();
+            List<Dictionary<string, object>> datas = new List<Dictionary<string, object>>();
+            HashSet<string> classList = new HashSet<string>();
+            List<string> keys = new List<string>();
+            List<string> className = new List<string>();
+            if (exams.IsNotEmpty()) {
+                keys.Add("name");
+                keys.Add("setNo");
+                keys.Add("score");
+                keys.Add("classRank");
+                keys.Add("classPR");
+                keys.Add("gradeRank");
+                keys.Add("gradePR");
+                keys.Add("areaRank");
+                keys.Add("areaPR");
+                //keys.Add("classAverage");
+                //keys.Add("gradeAverage");
+                
+                exams.ForEach(e =>
+                {
+                    Dictionary<string, object> PR = new Dictionary<string, object>
+                    {
+                        { "name", e.subjectCode }
+                    };
+                    List<string> stuPRG = new List<string>();
+                    List<string> ClassAverage = new List<string>();
+                    List<List<List<string>>> classPR = new List<List<List<string>>>();
+                    //初始化科目总分
+                    double subjectPoint = 0;
+
+                    //科目平均分
+                    double subAverage = 0;
+                    e.classes.ForEach(c =>
+                    {
+                        List<List<string>> classPRL = new List<List<string>>();
+                        //c.Keys遍历key值
+                        List<string> stuPR = new List<string>();
+                        //初始化各班参考人数
+                        int counts = 0;
+                        //初始化班级缺考人数
+                        int classCount = 0;
+                        //初始化班级平均分
+                        double points = 0;
+                        //初始化班级总分
+                        double classPoint = 0;
+                        foreach (string key in c.Keys)
+                        {
+                            classList.Add(key);
+                        }
+                        //每个班级平均分
+                        foreach (int[] value in c.Values)
+                        {
+                            int seatNo = 1;
+                            for (int i = value[0]; i <= value[1]; i++)
+                            {
+                                List<string> SPR = new List<string>();
+                                keys.ForEach(x =>
+                                {
+                                    SPR.Add("-");
+                                });
+                                if (e.result[i].Sum() == 0)
+                                {
+                                    classCount++;
+                                    seatNo++;
+                                    continue;
+
+                                }
+                                stuPR.Add(e.result[i].Sum().ToString());
+                                stuPRG.Add(e.result[i].Sum().ToString());
+                                SPR[1] = seatNo.ToString() ;
+                                SPR[2] = e.result[i].Sum().ToString();
+                                SPR[0] = e.ids[i];
+                                classPRL.Add(SPR);
+                                //计算班级PR值
+                                //int classPR = 100 - (100*)
+                                classPoint += e.result[i].Sum();                               
+                                seatNo++;
+                            }
+                            counts = value[1] - value[0] - classCount + 1;
+                            points = Convert.ToDouble(classPoint) / counts;
+                            ClassAverage.Add(points.ToString("0.00"));
+                        }
+                        
+                        //foreach (List<string> pl in classPRL) {
+                        //单科计算班级排名
+                        stuPR.Sort(delegate (string s1, string s2) { return int.Parse(s2).CompareTo(int.Parse(s1)); });
+                        
+                        foreach (List<string> pl in classPRL) {
+                            
+                            int index = stuPR.IndexOf(pl[2]);
+                            //int gradeIndex = stuPRG.IndexOf(pl[2]);
+                            pl[3] = (index + 1).ToString();
+                            int CPR = 100 - (100 * int.Parse(pl[3]) - 50) / stuPR.Count;
+                            pl[4] = CPR.ToString();
+                            //pl.Add(index.ToString());
+                            foreach (Student ss in students)
+                            {
+                                if (pl[0].Equals(ss.studentId))
+                                {
+                                    pl[0] = ss.name;
+                                    break;
+                                }
+                            }
+                        }
+
+                        //}
+                        classPR.Add(classPRL);
+
+                    });
+                    //科目平均分
+                    ClassAverage.ForEach(a =>
+                    {
+                        subjectPoint += Convert.ToDouble(a);
+                    });
+                    subAverage = subjectPoint / ClassAverage.Count();
+                    className = new List<string>();
+                    foreach (string cla in classList)
+                    {
+                        className.Add(cla);
+                    }
+                    //单科计算年级排名
+                    stuPRG.Sort(delegate (string s1, string s2) { return int.Parse(s2).CompareTo(int.Parse(s1)); });
+                    foreach (List<List<string>> p2 in classPR) {
+                        foreach (List<string> p3 in p2) {
+                            int index = stuPRG.IndexOf(p3[2]);
+                            p3[5] = (index + 1).ToString();
+                            int GPR = 100 - (100 * int.Parse(p3[5]) - 50) / stuPRG.Count;
+                            p3[6] = GPR.ToString();
+
+                        }
+                    }
+                    Dictionary<string, object> data = new Dictionary<string, object>();
+                    Dictionary<string, object> classData = new Dictionary<string, object>();
+                    for (int i =0;i< classPR.Count;i++) {                        
+                        data.Add(className[i], classPR[i]);
+                        classData.Add(className[i], ClassAverage[i]);
+                        //data.Add(i.ToString(), ClassAverage[i]);
+                    }
+
+                    PR.Add("keys", keys);
+                    PR.Add("datas", data);
+                    PR.Add("classAverage", classData);
+                    PR.Add("gradeAverage", subAverage.ToString("0.00"));
+                    PR.Add("areaAverage", subAverage.ToString("0.00"));
+                    subPR.Add(PR);
+                });
+                //处理全科PR值计算
+                List<string> stuIds = exams[0].ids;
+                /*for (int k=0;k< stuIds.Count;k++) {
+                    if (stuIds[k].Equals("0")) {
+                        stuIds.Remove(stuIds[k]);
+                    }
+                }*/
+                Dictionary<string, object> dataAll = new Dictionary<string, object>();
+                dataAll.Add("name", "Total");
+                dataAll.Add("keys",keys);
+                List<double> stuAll = new List<double>();
+                List<double> sortGradePoint = new List<double>();
+                Dictionary<string, object> classInfo = new Dictionary<string, object>();
+                List<List<List<string>>> GradePR = new List<List<List<string>>>();
+                int m = 0;
+                int p = 0;
+                List<string> allClassAverages = new List<string>();
+                Dictionary<string, object> classAllData = new Dictionary<string, object>();
+                foreach (List<double> classPoint in subSum)
+                {
+                    List<double> sortClassPoint = new List<double>();
+                    int n = 1;
+                    //初始化缺考人数
+                    int people = 0;
+                    double sumTotle = 0;
+                    List<List<string>> classStuInfo = new List<List<string>>();
+                    for (int i = 0;i < classPoint.Count();i++) {
+                        List<string> stu = new List<string>();
+                        keys.ForEach(x =>
+                        {
+                            stu.Add("-");
+                        });
+                        if (stuIds[m] == "0")
+                        {
+                            people++;
+                            n++;
+                            m++;
+                            continue;
+                        }
+                        stu[0] = stuIds[m];
+                        stu[1] = n.ToString();
+                        stu[2] = classPoint[i].ToString();
+                        sortClassPoint.Add(classPoint[i]);
+                        stuAll.Add(classPoint[i]);
+                        sortGradePoint.Add(classPoint[i]);
+                        sumTotle += classPoint[i];
+                        n++;
+                        m++;
+                        classStuInfo.Add(stu);
+                    }                   
+                    double allClassAverage = sumTotle / (classPoint.Count - people);
+                    classAllData.Add(className[p], allClassAverage.ToString("0.00"));
+                    //allClassAverages.Add(allClassAverage.ToString("0.00"));
+                    GradePR.Add(classStuInfo);
+                    sortClassPoint.Sort(delegate (double s1, double s2) { return s2.CompareTo(s1); });
+                    foreach (List<string> stuIn in classStuInfo) {
+                        int index = sortClassPoint.IndexOf(int.Parse(stuIn[2]));
+                        stuIn[3] = (index + 1).ToString();
+                        int CPR = 100 - (100 * (index + 1) - 50) / sortClassPoint.Count;
+                        stuIn[4] = CPR.ToString();
+                        foreach (Student ss in students)
+                        {
+                            if (stuIn[0].Equals(ss.studentId))
+                            {
+                                stuIn[0] = ss.name;
+                                break;
+                            }
+                        }
+                    }
+                    p++;
+                }
+                sortGradePoint.Sort(delegate (double s1, double s2) { return s2.CompareTo(s1); });
+                double allGradeAverage = sortGradePoint.Sum() / sortGradePoint.Count();
+                foreach (List<List<string>> gradeInfo in GradePR)
+                {
+                    foreach (List<string> info in gradeInfo)
+                    {
+                        int index = sortGradePoint.IndexOf(int.Parse(info[2]));
+                        info[5] = (index + 1).ToString();
+                        int GPR = 100 - (100 * int.Parse(info[5]) - 50) / sortGradePoint.Count;
+                        info[6] = GPR.ToString();
+
+                    }
+                }
+                Dictionary<string, object> classDataAll = new Dictionary<string, object>();
+                for (int i = 0; i < GradePR.Count; i++)
+                {
+                    classDataAll.Add(className[i], GradePR[i]);
+                }
+                dataAll.Add("datas", classDataAll);
+                dataAll.Add("classAverage", classAllData);
+                dataAll.Add("gradeAverage", allGradeAverage.ToString("0.00"));
+                dataAll.Add("areaAverage", allGradeAverage.ToString("0.00"));
+                subPR.Add(dataAll);
+            }
+            return subPR;
+
+
+        }
+
+        public List<List<string>> ReName(List<List<string>> datas, List<string> ids, List<Dictionary<string, int[]>> classToName, List<Student> students)
+        {
+            foreach (List<string> tableName in datas)
+            {
+                int index = ids.IndexOf(tableName[0]);
+                if (index == -1)
+                {
+                    continue;
+                }
+                foreach (Dictionary<string, int[]> classKey in classToName)
+                {
+                    bool flag = false;
+                    foreach (KeyValuePair<string, int[]> kvp in classKey)
+                    {
+                        if (kvp.Value[1] >= index && index >= kvp.Value[0])
+                        {
+                            tableName[1] = kvp.Key;
+                            flag = true;
+                            break;
+                        }
+                    }
+                    if (flag)
+                    {
+                        break;
+                    }
+                }
+
+                foreach (Student ss in students)
+                {
+                    if (tableName[0].Equals(ss.studentId))
+                    {
+                        tableName[0] = ss.name;
+                        break;
+                    }
+                }
+            }
+
+            return datas;
+        }
+    }
+}

+ 15 - 0
TEAMModelOS/Service/Analysis/Interfaces/IAchievementService.cs

@@ -0,0 +1,15 @@
+using System.Collections.Generic;
+using TEAMModelOS.SDK.Context.Configuration;
+using TEAMModelOS.Service.Models;
+
+namespace TEAMModelOS.Service.Analysis.Interfaces
+{
+    public interface IAchievementService : IBusinessService
+    {
+        List<Dictionary<string, object>> GetPR(List<ExamResult> exams, List<List<double>> subSum,List<Student> students);
+        Dictionary<string, object> GetAverage(List<ExamResult> exams,List<string> gav, List<string> cav, List<List<double>> subSum, List<Student> students);
+        List<List<string>> ReName(List<List<string>> datas, List<string> ids,
+        List<Dictionary<string, int[]>> classToName, List<Student> students);
+
+    }
+}

+ 12 - 13
TEAMModelOS.Service/Services/Evaluation/Implements/HtmlAnalyzeService.cs

@@ -1,4 +1,4 @@
-using DocumentFormat.OpenXml.Packaging;
+using DocumentFormat.OpenXml.Packaging;
 using HtmlAgilityPack;
 using Microsoft.AspNetCore.Http;
 using OpenXmlPowerTools;
@@ -16,10 +16,9 @@ using TEAMModelOS.SDK.Helper.Common.StringHelper;
 using TEAMModelOS.SDK.Helper.Security.ShaHash;
 using TEAMModelOS.Service.Model.PowerPoint;
 using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Exam.Interfaces;
-namespace TEAMModelOS.Service.Services.Exam.Implements
+namespace TEAMModelOS.Service
 {
-   public class HtmlAnalyzeService : IHtmlAnalyzeService
+   public class HtmlAnalyzeService  
     {
         private static string SummaryTag = "【题文】";
         private static string AnswerTag = "【答案】";
@@ -35,7 +34,7 @@ namespace TEAMModelOS.Service.Services.Exam.Implements
             { "Single", "【单选题】|【结束】" }, { "Multiple", "【多选题】|【结束】" },
             { "Judge", "【判断题】|【结束】" }, { "Complete", "【填空题】|【结束】" },
             { "Subjective", "【问答题】|【结束】" } , { "Compose", "【综合题】|【完结】" }};
-        public List<Models.ItemInfo> AnalyzeWordAsync(string html, string Lang)
+        public static List<Models.ItemInfo> AnalyzeWordAsync(string html, string Lang)
         { 
             //去除class 以及span标签"
             string classpattern = "class=\"([^\"]*)\"";
@@ -80,31 +79,31 @@ namespace TEAMModelOS.Service.Services.Exam.Implements
             return tests;
         }
 
-        private List<Models.ItemInfo> SingleConvert(string TypeKey, List<string> list)
+        private static List<Models.ItemInfo> SingleConvert(string TypeKey, List<string> list)
         {
             List<Models.ItemInfo> testInfos = OptionProcess(TypeKey, list);
             return testInfos;
         }
 
-        private List<Models.ItemInfo> MultipleConvert(string TypeKey, List<string> list)
+        private static List<Models.ItemInfo> MultipleConvert(string TypeKey, List<string> list)
         {
             List<Models.ItemInfo> testInfos = OptionProcess(TypeKey, list);
             return testInfos;
         }
 
-        private List<Models.ItemInfo> JudgeConvert(string TypeKey, List<string> list)
+        private static List<Models.ItemInfo> JudgeConvert(string TypeKey, List<string> list)
         {
             List<Models.ItemInfo> testInfos = OptionProcess(TypeKey, list);
             return testInfos;
         }
 
 
-        private List<Models.ItemInfo> CompleteConvert(string TypeKey, List<string> list)
+        private static List<Models.ItemInfo> CompleteConvert(string TypeKey, List<string> list)
         {
             List<Models.ItemInfo> testInfos = CompleteProcess(TypeKey, list);
             return testInfos;
         }
-        private List<Models.ItemInfo> CompleteProcess(string TypeKey, List<string> tests)
+        private static List<Models.ItemInfo> CompleteProcess(string TypeKey, List<string> tests)
         {
             //List<string> tests = ConvertTest(testHtml);
             List<Models.ItemInfo> testInfos = ConvertTestInfo(tests, TypeKey);
@@ -155,7 +154,7 @@ namespace TEAMModelOS.Service.Services.Exam.Implements
             return testInfos;
         }
 
-        private List<Models.ItemInfo> OptionProcess(string typeKey, List<string> list)
+        private static List<Models.ItemInfo> OptionProcess(string typeKey, List<string> list)
         {
             string[] optionsKeys = Options.Select(s => s.ToString()).ToArray();
             List<Models.ItemInfo> testInfos = ConvertTestInfo(list, typeKey);
@@ -221,7 +220,7 @@ namespace TEAMModelOS.Service.Services.Exam.Implements
         }
 
 
-        private List<Models.ItemInfo> SubjectiveConvert(string TypeKey, List<string> tests)
+        private static List<Models.ItemInfo> SubjectiveConvert(string TypeKey, List<string> tests)
         {
             // List<string> tests = ConvertTest(testHtml);
             List<Models.ItemInfo> testInfos = ConvertTestInfo(tests, TypeKey);
@@ -243,7 +242,7 @@ namespace TEAMModelOS.Service.Services.Exam.Implements
             return testInfos;
         }
 
-        private List<Models.ItemInfo> ComposeConvert(string TypeKey, List<string> list, string Lang)
+        private static List<Models.ItemInfo> ComposeConvert(string TypeKey, List<string> list, string Lang)
         {
             List<Models.ItemInfo> exerciseDtos = new List<Models.ItemInfo>();
             foreach (string html in list)

+ 16 - 17
TEAMModelOS.Service/Services/Evaluation/Implements/ImportExerciseService.cs

@@ -22,30 +22,28 @@ using TEAMModelOS.SDK.Helper.Security.ShaHash;
 using TEAMModelOS.SDK.Module.AzureBlob.Container;
 using TEAMModelOS.SDK.Module.AzureBlob.Interfaces;
 
-using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Exam.Interfaces;
 
 namespace TEAMModelOS.Service.Services.Exam.Implements
 {
-    public class ImportExerciseService : IImportExerciseService
+    public static class ImportExerciseService 
     {
       
        
-        private readonly IAzureBlobDBRepository azureBlobDBRepository;
-        private readonly AzureStorageFactory azureTableDBRepository;
-        public ImportExerciseService(IAzureBlobDBRepository _azureBlobDBRepository, AzureStorageFactory _azureTableDBRepository)
-        {
-            azureBlobDBRepository = _azureBlobDBRepository;
-            azureTableDBRepository = _azureTableDBRepository;
-        }
-        public async Task<Dictionary<string, object>> UploadWord(IFormFile file)
+     //   private readonly IAzureBlobDBRepository azureBlobDBRepository;
+       // private readonly AzureStorageFactory azureTableDBRepository;
+        //public ImportExerciseService(IAzureBlobDBRepository _azureBlobDBRepository, AzureStorageFactory _azureTableDBRepository)
+        //{
+        //   // azureBlobDBRepository = _azureBlobDBRepository;
+        //    azureTableDBRepository = _azureTableDBRepository;
+        //}
+        public static async Task<Dictionary<string, object>> UploadWord(this AzureStorageFactory azureBlobDBRepository, IFormFile file)
         {
 
             Dictionary<string, object> resdict = new Dictionary<string, object>();
             string shaCode = ShaHashHelper.GetSHA1(file.OpenReadStream());
             long length = file.Length;
             Dictionary<string, object> dict = new Dictionary<string, object> { { "Sha1Code", shaCode } };
-            List<AzureBlobModel> models = await azureTableDBRepository.FindListByDict<AzureBlobModel>(dict);
+            List<AzureBlobModel> models = await azureBlobDBRepository.FindListByDict<AzureBlobModel>(dict);
 
             //if (models.IsNotEmpty())
             //{
@@ -61,15 +59,15 @@ namespace TEAMModelOS.Service.Services.Exam.Implements
             //    await file.CopyToAsync(stream);
             //}
             var htmlInfo = ConvertDocxToHtml(file, folder);
-            AzureBlobModel model = await azureBlobDBRepository.UploadTextByFolder(htmlInfo.htmlString, "",htmlInfo.blobPath, "exercise",false);
+            AzureBlobModel model = await AzureStorageBlobExtensions.UploadFileByContainer(azureBlobDBRepository,"hbcn",htmlInfo.htmlString, "exercise", htmlInfo.blobPath, false);
             model.Sha1Code = shaCode;
-            await azureTableDBRepository.Save<AzureBlobModel>(model);
+            await azureBlobDBRepository.Save<AzureBlobModel>(model);
            // FileHelper.DeleteDirAndFiles(BaseConfigModel.ContentRootPath + "/Upload");
             resdict.Add("HtmlString", htmlInfo.htmlString);
             resdict.Add("Sha1Code", shaCode);
             return resdict;
         }
-        public dynamic ConvertDocxToHtml(IFormFile file, string folder)
+        public static dynamic ConvertDocxToHtml(IFormFile file, string folder)
         {
             string FolderName =  DateTime.Now.ToString("yyyyMMdd")+"/"+ folder;
             byte[] byteArray = new byte[file.OpenReadStream().Length];
@@ -162,10 +160,11 @@ namespace TEAMModelOS.Service.Services.Exam.Implements
                             Stream stream = new MemoryStream(Convert.FromBase64String(strs[1]));
                             // long bizno = IdWorker.getInstance().NextId();
                             string filename = shaCode + fileExt;
-                            AzureBlobModel model = azureBlobDBRepository.UploadFileByFolderNAsyn(stream, FolderName, filename, "exercise", false);
+                          //  AzureBlobModel model = azureBlobDBRepository.UploadFileByFolderNAsyn(stream, FolderName, filename, "exercise", false);
                             #endregion
                             XElement img = new XElement(Xhtml.img,
-                                    new XAttribute(NoNamespace.src, model.BlobUrl),
+                                 new XAttribute(NoNamespace.src, strs[1]),
+                                  //  new XAttribute(NoNamespace.src, model.BlobUrl),
                                     imageInfo.ImgStyleAttribute,
                                     imageInfo.AltText != null ?
                                         new XAttribute(NoNamespace.alt, imageInfo.AltText) : null);

+ 5 - 9
TEAMModelOS.Service/Services/Learn/Implements/ServiceBusService.cs

@@ -1,4 +1,4 @@
-using Microsoft.Azure.ServiceBus;
+using Microsoft.Azure.ServiceBus;
 using System;
 using System.Collections.Generic;
 using System.Reflection;
@@ -10,20 +10,16 @@ using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
 using TEAMModelOS.SDK.Helper.Common.JsonHelper;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Module.AzureServiceBus;
-using TEAMModelOS.Service.Services.Learn.Interfaces;
 
 namespace TEAMModelOS.Service.Services.Learn.Implements
 {
     
-    public class ServiceBusService : IServiceBusService
+    public static class ServiceBusService  
     {
-        private readonly IAzureServiceBusService _serviceBus;
-        public ServiceBusService(IAzureServiceBusService azureServiceBus)
-        {
-            _serviceBus = azureServiceBus;
-        }        
+       // private readonly IAzureServiceBusService _serviceBus;
+                
 
-        public async Task<long> SendMessage<T>(string TopicName, string id,string pk, long startTime, int status, string msgId)
+        public static async Task<long> SendMessage<T>(this IAzureServiceBusService _serviceBus ,string TopicName, string id,string pk, long startTime, int status, string msgId)
         {
             ITopicClient topicClient = _serviceBus.GetTopClient(TopicName).topicClient;
             //设定开始时间

+ 58 - 56
TEAMModelOS.Service/Services/PowerPoint/Implement/HtexService.cs

@@ -20,51 +20,50 @@ using Fill = TEAMModelOS.Service.Model.PowerPoint.Fill;
 using Media = TEAMModelOS.Service.Model.PowerPoint.Media;
 using Position = TEAMModelOS.Service.Model.PowerPoint.Position;
 using TEAMModelOS.Service.Services.PowerPoint.Interface;
-using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Exam.Interfaces;
 using TEAMModelOS.SDK.Helper.Common.JsonHelper;
+using TEAMModelOS.Service;
+using TEAMModelOS.SDK.DI;
 
 namespace TEAMModelOS.Service.Services.PowerPoint.Implement
 {
-    public class HtexService : IHtexService
+    public static class HtexService  
     {
-        private string fileShaCode { get; set; }
-        private Dictionary<string, string> slideLayoutClrOvride { get; set; }
+        private static string fileShaCode { get; set; }
+        private static  Dictionary<string, string> slideLayoutClrOvride { get; set; }
         private const int degree = 4;
         //private Dictionary<string, Dictionary<string, string>> styleTable = new Dictionary<string, Dictionary<string, string>>();
         private const double px96 = 96.00, px72 = 72.00, px914400 = 914400.00, px12700 = 12700.00;
         private const double rot60000 = 60000.00;
-        public readonly IAzureBlobDBRepository azureBlobDBRepository;
-        public readonly IHtmlAnalyzeService htmlAnalyzeService;
-        public HtexService(IAzureBlobDBRepository _azureBlobDBRepository, IHtmlAnalyzeService _htmlAnalyzeService)
-        {
-            azureBlobDBRepository = _azureBlobDBRepository;
-            htmlAnalyzeService = _htmlAnalyzeService;
-        }
-        public async Task<Htex> AnalyzeHtmlToHtex(string htmlString, string Lang)
+      //  public readonly IHtmlAnalyzeService htmlAnalyzeService;
+        //public HtexService(IAzureBlobDBRepository _azureBlobDBRepository)
+        //{
+        //    azureBlobDBRepository = _azureBlobDBRepository;
+        //   // htmlAnalyzeService = _htmlAnalyzeService;
+        //}
+        public static async Task<Htex> AnalyzeHtmlToHtex(this AzureStorageFactory azureBlobDBRepository, string htmlString, string Lang)
         {
             Htex htex = new Htex();
-            List<Models.ItemInfo> items = htmlAnalyzeService.AnalyzeWordAsync(htmlString, Lang);
+            List<Models.ItemInfo> items = HtmlAnalyzeService.AnalyzeWordAsync(htmlString, Lang);
             string sha=  ShaHashHelper.GetSHA1(htmlString);
             int index = 0;
             foreach (Models.ItemInfo item in items)
             {
                 Slide slide = new Slide { exercise = item, index = index, source = 2, flag = 2 };
                 index++;
-                AzureBlobModel model =  await azureBlobDBRepository.UploadTextByFolder(slide.ToJson(), sha, index+".json","htex",false);
+                AzureBlobModel model =  await azureBlobDBRepository.UploadFileByContainer("hbcn",slide.ToJson(), "htex/"+sha, index+".json",false);
                 htex.slides.Add(model.BlobUrl);
             }
             htex.page = items.Count;
             return htex;
         }
-        public async Task<Dictionary<string, object>> LoadDoc(IFormFile file)
+        public static async Task<Dictionary<string, object>> LoadDoc(this AzureStorageFactory azureBlobDBRepository, IFormFile file)
         {
             Dictionary<string, object> resdict = new Dictionary<string, object>();
 
             if (FileType.GetExtention(file.FileName).ToLower().Equals("pptx"))
             {
                 
-                return await ConvertPPTX(file, resdict);
+                return await ConvertPPTX(azureBlobDBRepository, file, resdict);
             }
             else if (FileType.GetExtention(file.FileName).ToLower().Equals("pdf"))
             {
@@ -84,7 +83,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
                 sr.Close();
                 xmlDocument.LoadXml(builder.ToString());
                 string shaCode = fileShaCode = ShaHashHelper.GetSHA1(file.OpenReadStream());
-                var rslt_ary = await ProcessPPTX(xmlDocument, shaCode);
+                var rslt_ary = await ProcessPPTX(azureBlobDBRepository, xmlDocument, shaCode);
                 //TODO
                 Dictionary<string, object> data = new Dictionary<string, object> { { "htexl", rslt_ary } };
                 return data;
@@ -95,7 +94,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             }
         }
 
-        public async Task<Dictionary<string, object>> ConvertPPTX(IFormFile file, Dictionary<string, object> resdict)
+        public static async Task<Dictionary<string, object>> ConvertPPTX(this AzureStorageFactory azureBlobDBRepository, IFormFile file, Dictionary<string, object> resdict)
         {
             string shaCode = fileShaCode = ShaHashHelper.GetSHA1(file.OpenReadStream());
 
@@ -109,7 +108,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             XmlDocument xmlDocument = new XmlDocument();
             xmlDocument.LoadXml(xdoc.ToString());
 
-            var rslt_ary = await ProcessPPTX(xmlDocument, shaCode);
+            var rslt_ary = await ProcessPPTX(azureBlobDBRepository, xmlDocument, shaCode);
             //TODO
             Dictionary<string, object> data = new Dictionary<string, object> { { "pptx",rslt_ary} };
             return data;
@@ -121,7 +120,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
         /// <param name="xdoc"></param>
         /// <param name="shaCode"></param>
         /// <returns></returns>
-        public async Task<Htex> ProcessPPTX(XmlDocument xdoc, string shaCode)
+        public static async Task<Htex> ProcessPPTX(this AzureStorageFactory azureBlobDBRepository, XmlDocument xdoc, string shaCode)
         {
             Htex pptx = new Htex();
           //  List<Dictionary<string, object>> post_ary = new List<Dictionary<string, object>>();
@@ -156,7 +155,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
                
                 slide.source = 1;
                 slide.flag = 1;
-                AzureBlobModel model = await azureBlobDBRepository.UploadTextByFolder(slide.ToJson(), shaCode, (i + 1) + ".json", "htex", false);
+                AzureBlobModel model = await azureBlobDBRepository.UploadFileByContainer("hbcn",slide.ToJson(), "htex" + shaCode, (i + 1) + ".json", false);
                 pptx.slides.Add(model.BlobUrl);
                 slides.Add(slide);
                 //  post_ary.Add(new Dictionary<string, object> { { "slide", slideHtml } });
@@ -185,7 +184,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
         //    return cssText;
         //}
 
-        public async Task<Slide> ProcessSingleSlide(XmlDocument xdoc, XmlNode xnode, string sldFileName, int index, dynamic slideSize, XmlNode themeContent, XmlNode tableStyles,Htex pptx)
+        public static async Task<Slide> ProcessSingleSlide(XmlDocument xdoc, XmlNode xnode, string sldFileName, int index, dynamic slideSize, XmlNode themeContent, XmlNode tableStyles,Htex pptx)
         {
 
             var resName = sldFileName.Replace("slides/slide", "slides/_rels/slide") + ".rels";
@@ -342,7 +341,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             return slide;
         }
 
-        public async Task ProcessNodesInSlide(List<Model.PowerPoint.Item> items, string nodeKey, XmlNode node, int order, WarpObj warpObj)
+        public static async Task ProcessNodesInSlide(List<Model.PowerPoint.Item> items, string nodeKey, XmlNode node, int order, WarpObj warpObj)
         {
             //  string result = "";
 
@@ -399,7 +398,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             }
         }
 
-        public async Task ProcessGroupSpNode(List<Model.PowerPoint.Item> items, XmlNode node, int order, WarpObj warpObj)
+        public static async Task ProcessGroupSpNode(List<Model.PowerPoint.Item> items, XmlNode node, int order, WarpObj warpObj)
         {
             var factor = 1.00 * px96 / px914400;
             var xfrmNode = node.GetTextByPath("p:grpSpPr/a:xfrm");
@@ -435,7 +434,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             //return result;
         }
 
-        public async Task ProcessGraphicFrameNode(List<Model.PowerPoint.Item> items, XmlNode node, int order, WarpObj warpObj)
+        public static async Task ProcessGraphicFrameNode(List<Model.PowerPoint.Item> items, XmlNode node, int order, WarpObj warpObj)
         {
         //    var result = "";
             var graphicTypeUri = node.GetTextByPath("a:graphic/a:graphicData/@uri");
@@ -460,7 +459,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             //return result;
         }
 
-        public async Task  GenDiagram(List<Model.PowerPoint.Item> items,  XmlNode node, int order, WarpObj warpObj)
+        public static async Task  GenDiagram(List<Model.PowerPoint.Item> items,  XmlNode node, int order, WarpObj warpObj)
         {
             var xfrmNode = node.GetTextByPath("p:xfrm");
             var dgmRelIds = node.GetTextByPath("a:graphic/a:graphicData/dgm:relIds");
@@ -511,7 +510,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             }
         }
 
-        public  Chart  GenChart(XmlNode node,int order , WarpObj warpObj)
+        public static  Chart  GenChart(XmlNode node,int order , WarpObj warpObj)
         {
             Chart chart = new Chart { index=order,type= "Chart" };
             var slideXfrmNode = node.GetTextByPath("p:xfrm");
@@ -770,7 +769,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             return chart;
         }
 
-        public List<Dictionary<string,object>> ExtractChartData(XmlNodeList nodes) {
+        public static List<Dictionary<string,object>> ExtractChartData(XmlNodeList nodes) {
 
             if (nodes != null) {
                 List<Dictionary<string, object>> listDict = new List<Dictionary<string, object>>();
@@ -841,7 +840,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             return null;
         }
 
-        public async Task<Table> GenTable(XmlNode node, int order, WarpObj warpObj)
+        public static async Task<Table> GenTable(XmlNode node, int order, WarpObj warpObj)
         {
             Table table = new Table();
             table.index = order;
@@ -1125,7 +1124,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             }
             return table;
         }
-       private List<Border> GetTableBorders(XmlNode node, WarpObj warpObj) {
+       private static List<Border> GetTableBorders(XmlNode node, WarpObj warpObj) {
             List<Border> borders = new List<Border>();
             if (node.GetTextByPath("a:bottom") != null) {
                 string xml= "<p:spPr><a:ln>"+  node.GetTextByPath("a:bottom/a:ln").InnerXml + "</p:spPr></a:ln>";
@@ -1173,14 +1172,14 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             return borders;
         }
 
-        public async Task<Model.PowerPoint.Item> ProcessCxnSpNode(XmlNode node, int order, WarpObj warpObj)
+        public static async Task<Model.PowerPoint.Item> ProcessCxnSpNode(XmlNode node, int order, WarpObj warpObj)
         {
             var id = node.GetTextByPath("p:nvCxnSpPr/p:cNvPr/@id");
             var name = node.GetTextByPath("p:nvCxnSpPr/p:cNvPr/@name");
             return await GenShape("CxnSp", node, null, null, id, name, null, null, order, warpObj);
         }
 
-        public async Task<Model.PowerPoint.Item> ProcessSpNode(XmlNode node, int order, WarpObj warpObj)
+        public static async Task<Model.PowerPoint.Item> ProcessSpNode(XmlNode node, int order, WarpObj warpObj)
         {
 
             /*
@@ -1222,7 +1221,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             return item;
         }
 
-        public async Task<Model.PowerPoint.Item> GenShape(string ShapeType, XmlNode node, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode, XmlNode id, XmlNode name, XmlNode idx, XmlNode type, int order, WarpObj warpObj)
+        public static async Task<Model.PowerPoint.Item> GenShape(string ShapeType, XmlNode node, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode, XmlNode id, XmlNode name, XmlNode idx, XmlNode type, int order, WarpObj warpObj)
         {
             var xfrmList = "p:spPr/a:xfrm";
             var slideXfrmNode = node.GetTextByPath(xfrmList);
@@ -1588,7 +1587,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
              
         }
 
-        private async Task<List<Paragraph>> GenTextBody(XmlNode textBodyNode, XmlNode spNode, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode, XmlNode type, WarpObj warpObj)
+        private static async Task<List<Paragraph>> GenTextBody(XmlNode textBodyNode, XmlNode spNode, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode, XmlNode type, WarpObj warpObj)
         {
             List<Paragraph> paragraphs = new List<Paragraph>();
             var slideMasterTextStyles = warpObj.slideMasterTextStyles;
@@ -1659,7 +1658,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             return paragraphs;
         }
 
-        private Text GenSpanElement(XmlNode node, XmlNode spNode, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode, XmlNode type, WarpObj warpObj)
+        private static Text GenSpanElement(XmlNode node, XmlNode spNode, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode, XmlNode type, WarpObj warpObj)
         {
             string text;
             var slideMasterTextStyles = warpObj.slideMasterTextStyles;
@@ -1742,7 +1741,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             };
         }
 
-        private string GetTextVerticalAlign(XmlNode node, XmlNode type, XmlNode slideMasterTextStyles)
+        private static string GetTextVerticalAlign(XmlNode node, XmlNode type, XmlNode slideMasterTextStyles)
         {
             var baseline = node.GetTextByPath("a:rPr/@baseline");
             if (baseline != null)
@@ -1755,7 +1754,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             }
         }
 
-        private string GetTextHorizontalAlign(XmlNode node, XmlNode type, XmlNode slideMasterTextStyles)
+        private static string GetTextHorizontalAlign(XmlNode node, XmlNode type, XmlNode slideMasterTextStyles)
         {
             var getAlgn = node.GetTextByPath("a:pPr/@algn");
             var align = "initial";
@@ -1786,7 +1785,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             return align;
         }
 
-        private string GetFontDecoration(XmlNode node, XmlNode type, XmlNode slideMasterTextStyles)
+        private static string GetFontDecoration(XmlNode node, XmlNode type, XmlNode slideMasterTextStyles)
         {
             if (node.GetTextByPath("a:rPr") != null)
             {
@@ -1817,7 +1816,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             }
         }
 
-        private string GetFontItalic(XmlNode node, XmlNode type, XmlNode slideMasterTextStyles)
+        private static string GetFontItalic(XmlNode node, XmlNode type, XmlNode slideMasterTextStyles)
         {
             var FontBold = node.GetTextByPath("a:rPr/@i");
             if (FontBold != null)
@@ -1837,7 +1836,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             }
         }
 
-        private string GetFontBold(XmlNode node, XmlNode type, XmlNode slideMasterTextStyles)
+        private static string GetFontBold(XmlNode node, XmlNode type, XmlNode slideMasterTextStyles)
         {
             var FontBold = node.GetTextByPath("a:rPr/@b");
             if (FontBold != null)
@@ -1857,7 +1856,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             }
         }
 
-        private string GetFontType(XmlNode node, XmlNode type, XmlNode slideMasterTextStyles, XmlNode themeContent)
+        private static string GetFontType(XmlNode node, XmlNode type, XmlNode slideMasterTextStyles, XmlNode themeContent)
         {
             string typeface = "inherit";
             XmlNode typefaceNode = node.GetTextByPath("a:rPr/a:latin/@typeface");
@@ -1885,7 +1884,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             return typeface;
         }
 
-        private async Task<BuChar> GenBuChar(XmlNode node, XmlNode spNode, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode, XmlNode type, WarpObj warpObj)
+        private static async Task<BuChar> GenBuChar(XmlNode node, XmlNode spNode, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode, XmlNode type, WarpObj warpObj)
         {
             var sldMstrTxtStyles = warpObj.slideMasterTextStyles;
             var slideMasterContent = warpObj.slideMasterContent;
@@ -2215,7 +2214,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             return BuChar;
         }
 
-        private double GetFontSize(XmlNode node, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode, XmlNode type, XmlNode slideMasterTextStyles)
+        private static double GetFontSize(XmlNode node, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode, XmlNode type, XmlNode slideMasterTextStyles)
         {
             double fontSize = 0;
             if (node.GetTextByPath("a:rPr/@sz") != null)
@@ -2267,7 +2266,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             return fontSize;
         }
 
-        private dynamic GetFontColorPr(XmlNode node, XmlNode spNode, XmlNode type, XmlNode sldMstrTxtStyles, XmlNode slideMasterContent, XmlNode themeContent)
+        private static dynamic GetFontColorPr(XmlNode node, XmlNode spNode, XmlNode type, XmlNode sldMstrTxtStyles, XmlNode slideMasterContent, XmlNode themeContent)
         {
             var rPrNode = node.GetTextByPath("a:rPr");
             string filTyp, textBordr;
@@ -2328,7 +2327,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             }
             return new { color, textBordr };
         }
-        public string GetVerticalAlign(XmlNode node, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode)
+        public static string GetVerticalAlign(XmlNode node, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode)
         {
             XmlDocument doc = new XmlDocument();
             doc.LoadXml(node.OuterXml);
@@ -2356,7 +2355,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             }
         }
 
-        public string GetWritingMode(XmlNode node, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode)
+        public static string GetWritingMode(XmlNode node, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode)
         {
             XmlDocument doc = new XmlDocument();
             doc.LoadXml(node.OuterXml);
@@ -2384,7 +2383,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             }
         }
          
-        public string GetHorizontalAlign(XmlNode node, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode,
+        public static string GetHorizontalAlign(XmlNode node, XmlNode slideLayoutSpNode, XmlNode slideMasterSpNode,
             XmlNode typeNode, XmlNode slideMasterTextStyles)
         {
             XmlDocument doc = new XmlDocument();
@@ -2452,7 +2451,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
         /// <param name="index"></param>
         /// <param name="warpObj"></param>
         /// <returns></returns>
-        public async Task<Fill> GetSlideBackgroundFill(XmlNode slideContent, int index, WarpObj warpObj)
+        public static async Task<Fill> GetSlideBackgroundFill(XmlNode slideContent, int index, WarpObj warpObj)
         {
             var bgPr = slideContent.GetTextByPath("pkg:xmlData/p:sld/p:cSld/p:bg/p:bgPr");
             var bgRef = slideContent.GetTextByPath("pkg:xmlData/p:sld/p:cSld/p:bg/p:bgRef");
@@ -2727,7 +2726,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
 
 
 
-        public async Task<Fill> GetPicFill(string type, XmlNode node, WarpObj warpObj)
+        public static async Task<Fill> GetPicFill(string type, XmlNode node, WarpObj warpObj)
         {
 
             //Need to test/////////////////////////////////////////////
@@ -2804,7 +2803,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
         }
 
 
-        public async Task<Fill> GetShapeFill(XmlNode node, WarpObj warpObj)
+        public static async Task<Fill> GetShapeFill(XmlNode node, WarpObj warpObj)
         {
 
             // 1. presentationML
@@ -2964,7 +2963,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
         }
 
 
-        public async Task<AzureBlobModel> GetThumbnailModel(XmlDocument xdoc, string shaCode)
+        public static async Task<AzureBlobModel> GetThumbnailModel(XmlDocument xdoc, string shaCode)
         {
             var thumbnailNode = xdoc.GetTextByPath("//pkg:part[@pkg:name='/docProps/thumbnail.jpeg']");
             if (thumbnailNode != null)
@@ -2976,14 +2975,14 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             return null;
         }
 
-        public XmlNode LoadTheme(XmlDocument xdoc)
+        public static XmlNode LoadTheme(XmlDocument xdoc)
         {
             var themeRelationship = xdoc.GetTextByPath("//pkg:part[@pkg:name='/ppt/_rels/presentation.xml.rels']/pkg:xmlData/rel:Relationships/rel:Relationship[@Type='http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme']/@Target");
             //  "/ppt/theme/theme1.xml"
             string themeURI = "/ppt/" + themeRelationship.Value;
             return xdoc.GetTextByPath("//pkg:part[@pkg:name='" + themeURI + "']");
         }
-        public async Task<AzureBlobModel> SaveBase64ToBolob(string data, string contentType, string FolderName, string fileName)
+        public static async Task<AzureBlobModel> SaveBase64ToBolob(string data, string contentType, string FolderName, string fileName)
         {
             string fileExt;
             if (ContentTypeDict.extdict.TryGetValue(contentType, out string ext))
@@ -3013,13 +3012,16 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
                     fileName += fileExt;
                 }
             }
+
+            string url = "data:"+contentType+";base64,"+data;
             Stream streamBlob = new MemoryStream(Convert.FromBase64String(data));
-            AzureBlobModel model = await azureBlobDBRepository.UploadFileByFolder(streamBlob, FolderName, fileName, "pptx", false);
+            //   AzureBlobModel model = await azureBlobDBRepository.UploadFileByFolder(streamBlob, FolderName, fileName, "pptx", false);
+            AzureBlobModel model =new AzureBlobModel { BlobUrl= url };
             return model;
         }
 
 
-        public async Task<Media> ProcessPicNode(XmlNode node, int order, WarpObj warpObj)
+        public static async Task<Media> ProcessPicNode(XmlNode node, int order, WarpObj warpObj)
         {
             var xfrmList = "p:spPr/a:xfrm";
             var xfrmNode = node.GetTextByPath(xfrmList);

TEAMModelOS.Service/Services/PowerPoint/Implement/ShapeHelper.cs → TEAMModelOS/Service/PowerPoint/Implement/ShapeHelper.cs


TEAMModelOS.Service/Services/PowerPoint/Implement/ShapeSvg.cs → TEAMModelOS/Service/PowerPoint/Implement/ShapeSvg.cs


TEAMModelOS.Service/Services/PowerPoint/Interface/IHtexService.cs → TEAMModelOS/Service/PowerPoint/Interface/IHtexService.cs


+ 5 - 11
TEAMModelOS.Service/Services/Syllabus/Implement/KnowledgeService.cs

@@ -1,23 +1,17 @@
-using System;
+using System;
 using System.Collections.Generic;
 using System.Text;
 using System.Threading.Tasks;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Interface;
 
 namespace TEAMModelOS.Service.Services.Implement
 {
-    public class KnowledgeService : IKnowledgeService
+    public static class KnowledgeService  
     {
-        private AzureCosmosFactory _cosmos;
+       
 
-        public KnowledgeService(AzureCosmosFactory cosmos)
-        {
-            _cosmos = cosmos;
-        }
-
-        public async Task<List<IdPk>> DeleteKnowledge(List<IdPk> listPid)
+        public static async Task<List<IdPk>> DeleteKnowledge(this AzureCosmosFactory _cosmos ,List<IdPk> listPid)
         {
             List<IdPk> idPks = await _cosmos.DeleteAll<Knowledge>(listPid);
             foreach (IdPk Knowledge in idPks)
@@ -32,7 +26,7 @@ namespace TEAMModelOS.Service.Services.Implement
             return idPks;
         }
 
-        public async Task<List<Knowledge>> SaveOrUpdateKnowledge(List<Knowledge> request)
+        public static async Task<List<Knowledge>> SaveOrUpdateKnowledge(this AzureCosmosFactory _cosmos, List<Knowledge> request)
         {
             foreach (Knowledge item in request)
             {

+ 6 - 14
TEAMModelOS.Service/Services/Syllabus/Implement/SyllabusService.cs

@@ -1,4 +1,4 @@
-using System;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -8,26 +8,18 @@ using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.Helper.Common.JsonHelper;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Interface;
 
 namespace TEAMModelOS.Service.Services.Implement
 {
-    public class SyllabusService: ISyllabusService
+    public static class SyllabusService 
     {
-        private readonly AzureCosmosFactory azureCosmosDBRepository;
-
-        public SyllabusService(AzureCosmosFactory azureCosmosDBRepository)
-        {
-            this.azureCosmosDBRepository = azureCosmosDBRepository;
-        }
-
 
         /// <summary>
         /// 查找课纲 
         /// </summary>
         /// <param name="request"></param>
         /// <returns></returns>
-        public async Task<List<SyllabusTree>> Find(Dictionary<string, object> request)
+        public static async Task<List<SyllabusTree>> Find(this AzureCosmosFactory azureCosmosDBRepository,  Dictionary<string, object> request)
         {
             Dictionary<string, object> dict = new Dictionary<string, object>();
             foreach (KeyValuePair<string, object> keyValuePair in request)
@@ -87,7 +79,7 @@ namespace TEAMModelOS.Service.Services.Implement
         }
         
 
-        public async Task<List<Syllabus>> SaveOrUpdateAsNodes(List<SyllabusNode> syllabusNodes)
+        public static async Task<List<Syllabus>> SaveOrUpdateAsNodes(this AzureCosmosFactory azureCosmosDBRepository,  List<SyllabusNode> syllabusNodes)
         {
             List<Syllabus> syllabuses;
 
@@ -143,7 +135,7 @@ namespace TEAMModelOS.Service.Services.Implement
             return syllabuses;
         }
 
-        public async Task<List<SyllabusTree>> SaveOrUpdateAsTree(List<SyllabusTree> request)
+        public static async Task<List<SyllabusTree>> SaveOrUpdateAsTree(this AzureCosmosFactory azureCosmosDBRepository,  List<SyllabusTree> request)
         {
             List<SyllabusNode> nodes = new List<SyllabusNode>();
             Syllabus syllabus = new Syllabus();
@@ -210,7 +202,7 @@ namespace TEAMModelOS.Service.Services.Implement
             return trees;
         }
 
-        public async Task<List<Syllabus>> DeleteSyllabus(Dictionary<string, object> request)
+        public static async Task<List<Syllabus>> DeleteSyllabus(this AzureCosmosFactory azureCosmosDBRepository, Dictionary<string, object> request)
         {
             Dictionary<string, object> dict = new Dictionary<string, object>();
             foreach (KeyValuePair<string, object> keyValuePair in request)

+ 4 - 10
TEAMModelOS.Service/Services/Syllabus/Implement/VolumeService.cs

@@ -1,4 +1,4 @@
-using System;
+using System;
 using System.Collections.Generic;
 using System.Text;
 using System.Threading.Tasks;
@@ -7,21 +7,15 @@ using TEAMModelOS.SDK.Extension.SnowFlake;
 using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Interface;
 
 namespace TEAMModelOS.Service.Services.Implement
 {
-    public class VolumeService : IVolumeService
+    public static class VolumeService 
     {
 
-        private readonly AzureCosmosFactory azureCosmosDBRepository;
+        
 
-        public VolumeService(AzureCosmosFactory azureCosmosDBRepository)
-        {
-            this.azureCosmosDBRepository = azureCosmosDBRepository;
-        }
-
-        public async Task<List<Volume>> SaveOrUpdateVolume(Volume request)
+        public static  async Task<List<Volume>> SaveOrUpdateVolume(this AzureCosmosFactory azureCosmosDBRepository, Volume request)
         {
             if (request.editors != null && request.editors.Count > 5)
             {

+ 0 - 2
TEAMModelOS/Startup.cs

@@ -28,7 +28,6 @@ using TEAMModelOS.SDK.Context.Filter;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Module.AzureServiceBus;
 using TEAMModelOS.Service.Services.Learn.Implements;
-using TEAMModelOS.Service.Services.Learn.Interfaces;
 using VueCliMiddleware;
 
 namespace TEAMModelOS
@@ -95,7 +94,6 @@ namespace TEAMModelOS
             //services.AddAzureBlobStorage().AddConnection(Configuration.GetSection("Azure:Blob").Get<AzureBlobOptions>());
             //使用AzureServiceBus
             services.AddServiceBus().AddServiceBusOptions(Configuration.GetSection("Azure:ServiceBus").Get<AzureServiceBusOptions>());
-            services.AddSingleton<IServiceBusService, ServiceBusService>();
             //HttpContextAccessor,并用来访问HttpContext。
             services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
             //services.AddSingleton<IServiceBusReviceService, ServiceBusReviceService>();

+ 1 - 0
TEAMModelOS/TEAMModelOS.csproj

@@ -43,6 +43,7 @@
   <ItemGroup>
     <Folder Include="JwtRsaFile\" />
     <Folder Include="logfile\" />
+    <Folder Include="Service\Analysis\Implements\" />
     <Folder Include="wwwroot\" />
   </ItemGroup>