zhouj1203@hotmail.com hace 6 años
padre
commit
5397a5de20

+ 10 - 3
TEAMModelOS.Model/Evaluation/Dtos/Own/ItemBankDto.cs

@@ -11,16 +11,23 @@ namespace TEAMModelOS.Model.Evaluation.Dtos.Own
     {
         public ItemBankDto()
         {
-            Options = new List<CodeValue>();
+            Option = new List<CodeValue>();
             Answer = new List<string>();
+            Children = new List<ItemBankDto>();
         }
+        public string ShaCode { get; set; }
         public string PartitionKey { get; set; }
         public string RowKey { get; set; }
-        public string ShaCode { get; set; }
         public string Question { get; set; }
-        public List<CodeValue> Options { get; set; }
+        public List<CodeValue> Option { get; set; }
         public List<string> Answer { get; set; }
         public string Explain { get; set; }
         public string Type { get; set; }
+        public string ResourceCode { get; set; }
+        public string SubjectCode { get; set; }
+        public string PShaCode { get; set; }
+        public int ResourceType { get; set; }
+        [IgnoreMember]
+        public List<ItemBankDto> Children { get; set; }
     }
 }

+ 27 - 0
TEAMModelOS.Model/Evaluation/Dtos/Own/UseItemBankDto.cs

@@ -0,0 +1,27 @@
+using MessagePack;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using TEAMModelOS.Model.Core.Dtos;
+
+namespace TEAMModelOS.Model.Evaluation.Dtos.Own
+{
+    [MessagePackObject(keyAsPropertyName: true)]
+    public class UseItemBankDto
+    {
+        public UseItemBankDto()
+        {
+            Option = new List<CodeValue>();
+            Answer = new List<string>();
+        }
+        public string PartitionKey { get; set; }
+        public string RowKey { get; set; }
+        public string ShaCode { get; set; }
+        public string Question { get; set; }
+        public List<CodeValue> Option { get; set; }
+        public List<string> Answer { get; set; }
+        public string Explain { get; set; }
+        public string Type { get; set; }
+        public string Pid { get; set; }
+    }
+}

+ 26 - 1
TEAMModelOS.Model/Evaluation/Models/ItemBank.cs

@@ -72,6 +72,31 @@ namespace TEAMModelOS.Model.EvaluaTion.Models
         /// <summary>
         /// 使用计数
         /// </summary>
-        public string UsageCount { get; set; }
+        public int UsageCount { get; set; }
+        /// <summary>
+        /// 复合题型ID
+        /// </summary>
+        public string Pid { get; set; }
+        /// </summary>
+        public string ResourceId { get; set; }
+        /// <summary>
+        /// 资源类型
+        /// </summary>
+        public int ResourceType { get; set; }
+        /// <summary>
+        /// 学校编码
+        /// </summary>
+        public string ResourceCode { get; set; }
+        public string ResourceName { get; set; }
+        /// <summary>
+        /// 科目编码
+        /// </summary>
+        public string SubjectCode { get; set; }
+        /// <summary>
+        /// 创建者
+        /// </summary>
+        public string Creator { get; set; }
+        public string CreatorCode { get; set; }
+
     }
 }

+ 103 - 0
TEAMModelOS.Model/Evaluation/Models/UseItemBank.cs

@@ -0,0 +1,103 @@
+using MessagePack;
+using Microsoft.WindowsAzure.Storage.Table;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using TEAMModelOS.SDK.Context.Attributes.Azure;
+
+namespace TEAMModelOS.Model.EvaluaTion.Models
+{
+    [TableSpace(Name = "Evaluation")]
+    [MessagePackObject(keyAsPropertyName: true)]
+    public class UseItemBank : TableEntity
+    {
+        public string Id { get; set; }
+        /// <summary>
+        /// 题目
+        /// </summary>
+        public string Question { get; set; }
+        /// <summary>
+        /// 题目顺序 可移植到试卷库
+        /// </summary>
+        public string Index { get; set; }
+        /// <summary>
+        /// 题目类型
+        /// </summary>
+        public string Type { get; set; }
+        /// <summary>
+        /// 主客观类型
+        /// </summary>
+        public string Objective { get; set; }
+        /// <summary>
+        /// 分值 可移植到试卷库
+        /// </summary>
+        public string Point { get; set; }
+        /// <summary>
+        /// 选项
+        /// </summary>
+        public string Option { get; set; }
+        /// <summary>
+        /// 标准答案
+        /// </summary>
+        public string Answer { get; set; }
+        /// <summary>
+        /// 对应科目
+        /// </summary>
+        public string ConceptSubject { get; set; }
+        /// <summary>
+        /// 知识块
+        /// </summary>
+        public string ConceptArea { get; set; }
+        /// <summary>
+        /// 知识点
+        /// </summary>
+        /// 
+        public string Concept { get; set; }
+        /// <summary>
+        /// 详解
+        /// </summary>
+        public string Explain { get; set; }
+        /// <summary>
+        /// 难度
+        /// </summary>
+        public string Difficulty { get; set; }
+        /// <summary>
+        /// 重要性
+        /// </summary>
+        public string Importance { get; set; }
+        /// <summary>
+        /// 预计作答时间
+        /// </summary>
+        public string Time { get; set; }
+        /// <summary>
+        /// 使用计数
+        /// </summary>
+        public int UsageCount { get; set; }
+        //引用父类ID
+        public string Pid { get; set; }
+        /// <summary>
+        /// 数据源ID
+        /// </summary>
+        public string ResourceId { get; set; }
+        /// <summary>
+        /// 资源类型
+        /// </summary>
+        public string ResourceType { get; set; }
+        /// <summary>
+        /// 学校编码
+        /// </summary>
+        public string ResourceCode { get; set; }
+        public string ResourceName { get; set; }
+        /// <summary>
+        /// 科目编码
+        /// </summary>
+        public string SubjectCode { get; set; }
+        /// <summary>
+        /// 创建者
+        /// </summary>
+        public string Creator { get; set; }
+        public string CreatorCode { get; set; }
+
+
+    }
+}

+ 82 - 4
TEAMModelOS.Service/Evaluation/Implements/ItemBankService.cs

@@ -4,7 +4,10 @@ using System.Text;
 using System.Threading.Tasks;
 using TEAMModelOS.Model.Evaluation.Dtos.Own;
 using TEAMModelOS.Model.EvaluaTion.Models;
+using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.Helper.Common.JsonHelper;
+using TEAMModelOS.SDK.Helper.Common.StringHelper;
+using TEAMModelOS.SDK.Helper.Security.ShaHash;
 using TEAMModelOS.Service.Core.Implements;
 using TEAMModelOS.Service.EvaluaTion.Interfaces;
 
@@ -24,14 +27,49 @@ namespace TEAMModelOS.Service.EvaluaTion.Implements
             List<ItemBank> itemBanks = new List<ItemBank>();
             items.ForEach(p =>
             {
-                if (p.PartitionKey != null)
+                string RowKeyP = this.GetRowKeys(p);
+                if (p.Children.Count > 0) {
+                    p.Children.ForEach(q =>
+                    {
+                        if (q.RowKey != null)
+                        {
+                            itemBanks.Add(new ItemBank()
+                            {
+                                RowKey = q.RowKey,
+                                PartitionKey = lang,
+                                Question = q.Question,
+                                Option = MessagePackHelper.ObjectToJson(q.Option),
+                                Answer = MessagePackHelper.ObjectToJson(q.Answer),
+                                Explain = q.Explain,
+                                Type = q.Type
+                            });
+                        }
+                        else
+                        {
+                            string RowKey = this.GetRowKeys(q);
+                            itemBanks.Add(new ItemBank()
+                            {
+                                RowKey = RowKey,
+                                PartitionKey = lang,
+                                Question = q.Question,
+                                Option = MessagePackHelper.ObjectToJson(q.Option),
+                                Answer = MessagePackHelper.ObjectToJson(q.Answer),
+                                Explain = q.Explain,
+                                Type = q.Type,
+                                Pid = RowKeyP
+                            });
+                        }
+                    });
+                }
+               
+                if (p.RowKey != null)
                 {
                     itemBanks.Add(new ItemBank()
                     {
                         RowKey = p.RowKey,
                         PartitionKey = lang,
                         Question = p.Question,
-                        Option = MessagePackHelper.ObjectToJson(p.Options),
+                        Option = MessagePackHelper.ObjectToJson(p.Option),
                         Answer = MessagePackHelper.ObjectToJson(p.Answer),
                         Explain = p.Explain,
                         Type = p.Type
@@ -40,10 +78,10 @@ namespace TEAMModelOS.Service.EvaluaTion.Implements
                 else {
                     itemBanks.Add(new ItemBank()
                     {
-                        RowKey = Guid.NewGuid().ToString(),
+                        RowKey = RowKeyP,
                         PartitionKey = lang,
                         Question = p.Question,
-                        Option = MessagePackHelper.ObjectToJson(p.Options),
+                        Option = MessagePackHelper.ObjectToJson(p.Option),
                         Answer = MessagePackHelper.ObjectToJson(p.Answer),
                         Explain = p.Explain,
                         Type = p.Type
@@ -54,5 +92,45 @@ namespace TEAMModelOS.Service.EvaluaTion.Implements
 
             return items;
         }
+        /// <summary>
+        /// 获取不同身份形成得唯一标识
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public string GetRowKeys(ItemBankDto dto) {
+            if (dto.Type.Equals("Complete")|| dto.Type.Equals("Subjective")) {
+                ///dto.Question = HtmlHelper.DoUselessTag(dto.Question);
+                dto.Question = HtmlHelper.DoTextImg(dto.Question);
+                dto.ShaCode = ShaHashHelper.GetSHA1(dto.Question);
+                if (dto.ResourceType == 0)
+                {
+                    dto.RowKey = dto.SubjectCode + "-" + dto.ShaCode;
+                }
+                else
+                {
+                    dto.RowKey = dto.ResourceCode + "-" + dto.SubjectCode + "-" + dto.ShaCode;
+                }
+                return dto.RowKey;
+            }
+            else {
+                StringBuilder builder = new StringBuilder();
+                builder.Append(dto.Question);
+                dto.Option.ForEach(p =>
+                {
+                    builder.Append(p.Code + "" + p.Value);
+                });
+                dto.ShaCode = ShaHashHelper.GetSHA1(HtmlHelper.DoTextImg(builder.ToString()));
+                if (dto.ResourceType == 0)
+                {
+                    dto.RowKey = dto.SubjectCode + "-" + dto.ShaCode;
+                }
+                else
+                {
+                    dto.RowKey = dto.ResourceCode + "-" + dto.SubjectCode + "-" + dto.ShaCode;
+                }
+                return dto.RowKey;
+            }
+            
+        }
     }
 }

+ 59 - 0
TEAMModelOS.Service/Evaluation/Implements/UseItemBankService.cs

@@ -0,0 +1,59 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using TEAMModelOS.Model.Evaluation.Dtos.Own;
+using TEAMModelOS.Model.EvaluaTion.Models;
+using TEAMModelOS.SDK.Helper.Common.JsonHelper;
+using TEAMModelOS.Service.Core.Implements;
+using TEAMModelOS.Service.EvaluaTion.Interfaces;
+
+namespace TEAMModelOS.Service.EvaluaTion.Implements
+{
+    public class UseItemBankService : BaseService, IUseItemBankService
+    {
+        public async Task<List<UseItemBank>> GetItemBanks(Dictionary<string, object> map)
+        {
+            List<UseItemBank> itemBanks = await FindListByDict<UseItemBank>(map);
+            return itemBanks;
+        }
+
+        public  async Task<List<UseItemBankDto>> SaveOrUpdateAsync(List<UseItemBankDto> items,string lang)
+        {
+            List<UseItemBank> itemBanks = new List<UseItemBank>();
+            items.ForEach(p =>
+            {
+                if (p.PartitionKey != null)
+                {
+                    itemBanks.Add(new UseItemBank()
+                    {
+                        RowKey = p.RowKey,
+                        PartitionKey = lang,
+                        Question = p.Question,
+                        Option = MessagePackHelper.ObjectToJson(p.Option),
+                        Answer = MessagePackHelper.ObjectToJson(p.Answer),
+                        Explain = p.Explain,
+                        Type = p.Type,
+                        Pid = p.Pid
+                    });
+                }
+                else {
+                    itemBanks.Add(new UseItemBank()
+                    {
+                        RowKey = Guid.NewGuid().ToString(),
+                        PartitionKey = lang,
+                        Question = p.Question,
+                        Option = MessagePackHelper.ObjectToJson(p.Option),
+                        Answer = MessagePackHelper.ObjectToJson(p.Answer),
+                        Explain = p.Explain,
+                        Type = p.Type,
+                        Pid = p.Pid
+                    });
+                }
+            });
+            await SaveOrUpdateAll(itemBanks);
+
+            return items;
+        }
+    }
+}

+ 17 - 0
TEAMModelOS.Service/Evaluation/Interfaces/IUseItemBankService.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using TEAMModelOS.Model.Evaluation.Dtos.Own;
+using TEAMModelOS.Model.EvaluaTion.Models;
+using TEAMModelOS.Service.Core.Interfaces;
+
+namespace TEAMModelOS.Service.EvaluaTion.Interfaces
+{
+    public interface IUseItemBankService : IBusinessService, IBaseService
+    {
+
+        Task<List<UseItemBankDto>> SaveOrUpdateAsync(List<UseItemBankDto> items,string lang);
+        Task<List<UseItemBank>> GetItemBanks(Dictionary<string, object> map);
+    }
+}

+ 28 - 1
TEAMModelOS/Controllers/Evaluation/EvaluationController.cs

@@ -23,12 +23,15 @@ namespace TEAMModelOS.Controllers.Evaluation
     {
         private readonly IEvaluatingService evaluatingService;
         private readonly IItemBankService itemBankService;
+        private readonly IUseItemBankService useItemBankService;
         private readonly ITestPaperService testPaperService;
         public EvaluationController(IEvaluatingService _evaluatingService,
-            IItemBankService _itemBankService, ITestPaperService _testPaperService) {
+            IItemBankService _itemBankService, ITestPaperService _testPaperService,
+            IUseItemBankService _useItemBankService) {
             evaluatingService = _evaluatingService;
             itemBankService = _itemBankService;
             testPaperService = _testPaperService;
+            useItemBankService = _useItemBankService;
         }
         [HttpPost("evaluation")]
         public async Task<BaseJosnRPCResponse> SaveOrUpdateEvaluation(JosnRPCRequest<Evaluating> request) {
@@ -82,5 +85,29 @@ namespace TEAMModelOS.Controllers.Evaluation
             return builder.build();
 
         }
+
+        [HttpPost("UseItemBank")]
+        public async Task<BaseJosnRPCResponse> SaveOrUpdateUseItemBank(JosnRPCRequest<List<UseItemBankDto>> request)
+        {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+
+            List<UseItemBankDto> itemBankDtos = await useItemBankService.SaveOrUpdateAsync(request.@params, request.lang);
+            return builder.Data(itemBankDtos).build();
+
+        }
+        [HttpPost("FindUseItemBank")]
+        public async Task<BaseJosnRPCResponse> FindUseItemBank(JosnRPCRequest<Dictionary<string, object>> request)
+        {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            List<UseItemBank> itemBankDtos = await useItemBankService.GetItemBanks(request.@params);
+            ///return builder.Data(itemBankDtos).build();
+            if (itemBankDtos.IsNotEmpty())
+            {
+                builder.Data(itemBankDtos);
+            }
+            else builder.Data(new object[] { });
+            return builder.build();
+
+        }
     }
 }

+ 1 - 0
TEAMModelOS/Controllers/Evaluation/ExamController.cs

@@ -1,3 +1,4 @@
+
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;