浏览代码

对 教师投票活动.作业活动.问卷活动.评测活动触发统计。

CrazyIter_Bin 3 年之前
父节点
当前提交
c0b6cc4030

+ 4 - 4
TEAMModelFunction/MonitorCosmosDB.cs

@@ -98,22 +98,22 @@ namespace TEAMModelFunction
                                     TriggerExam.Trigger(_azureCosmos, _serviceBus, _azureStorage, _dingDing, client, input, code, stime, etime, school);
                                     break;
                                 case "Vote":
-                                    TriggerVote.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis);
+                                    TriggerVote.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis, _configuration);
                                     break;
                                 case "Survey":
-                                    TriggerSurvey.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis);
+                                    TriggerSurvey.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis, _configuration);
                                     break;
                                 case "Correct":
                                     TriggerCorrect.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis);
                                     break;
                                 case "ExamLite":
-                                    TriggerExamLite.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis);
+                                    TriggerExamLite.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis, _configuration);
                                     break;
                                 case "Study":
                                     TriggerStudy.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis, _configuration);
                                     break;
                                 case "Homework":
-                                    TriggerHomework.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis);
+                                    TriggerHomework.Trigger(_serviceBus, _azureStorage, _dingDing, client, input, data, _azureRedis, _configuration);
                                     break;
 
                             }

+ 17 - 1
TEAMModelFunction/TriggerExamLite.cs

@@ -2,9 +2,11 @@ using Azure.Cosmos;
 using Azure.Messaging.ServiceBus;
 using HTEXLib.COMM.Helpers;
 using Microsoft.Azure.Documents;
+using Microsoft.Extensions.Configuration;
 using System;
 using System.Collections.Generic;
 using System.Text;
+using System.Threading.Tasks;
 using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
@@ -16,7 +18,7 @@ namespace TEAMModelFunction
     public static class TriggerExamLite
     {
         public static async void Trigger(AzureServiceBusFactory _serviceBus, AzureStorageFactory _azureStorage, DingDing _dingDing,
-                    CosmosClient client, Document input, TriggerData tdata, AzureRedisFactory _azureRedis)
+                    CosmosClient client, Document input, TriggerData tdata, AzureRedisFactory _azureRedis, IConfiguration _configuration)
         {
             try
             {
@@ -87,8 +89,14 @@ namespace TEAMModelFunction
                             //(List<TmdInfo> tchList, _) = await TriggerStuActivity.GetTchList(client, _dingDing, lite.tchLists, lite.school);
                             List<StuActivity> tchActivities = new List<StuActivity>();
 
+                            List<Task> bustasks = new List<Task>();
                             if (tchList.IsNotEmpty())
                             {
+                                School school = null;
+                                if (string.IsNullOrEmpty(lite.school))
+                                {
+                                    school = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(lite.school, new Azure.Cosmos.PartitionKey("Base"));
+                                }
                                 tchList.ForEach(x =>
                                 {
                                     tchActivities.Add(new StuActivity
@@ -111,6 +119,10 @@ namespace TEAMModelFunction
                                         taskStatus = -1,
                                         classIds = lite.tchLists
                                     });
+                                    if (school != null)
+                                    {
+                                        bustasks.Add(StatisticsService.SendServiceBus($"{school.standard}", $"{x.id}", $"{lite.school}", StatisticsService.TeacherExamLite, 1, _configuration, _serviceBus));
+                                    }
                                 });
                             }
                             await ActivityService.SaveStuActivity(client, _dingDing, null, null, tchActivities);
@@ -135,6 +147,10 @@ namespace TEAMModelFunction
                                 };
                                 await _azureStorage.Save<ChangeRecord>(changeRecord);
                             }
+                            if (bustasks.IsNotEmpty())
+                            {
+                                await Task.WhenAll(bustasks);
+                            }
                             break;
                         case "finish":
                             break;

+ 18 - 2
TEAMModelFunction/TriggerHomework.cs

@@ -2,9 +2,11 @@ using Azure.Cosmos;
 using Azure.Messaging.ServiceBus;
 using HTEXLib.COMM.Helpers;
 using Microsoft.Azure.Documents;
+using Microsoft.Extensions.Configuration;
 using System;
 using System.Collections.Generic;
 using System.Text;
+using System.Threading.Tasks;
 using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
@@ -17,7 +19,7 @@ namespace TEAMModelFunction
     public static class TriggerHomework
     {
         public static async void Trigger(AzureServiceBusFactory _serviceBus, AzureStorageFactory _azureStorage, DingDing _dingDing,
-                    CosmosClient client, Document input, TriggerData tdata, AzureRedisFactory _azureRedis)
+                    CosmosClient client, Document input, TriggerData tdata, AzureRedisFactory _azureRedis, IConfiguration _configuration)
         {
             try
             {
@@ -144,9 +146,15 @@ namespace TEAMModelFunction
                             }
                             (List<RMember> tchList, List<RGroupList> classInfos) = await GroupListService.GetStutmdidListids(client, _dingDing, work.tchLists, work.school,ps);
                             // (List<TmdInfo> tmdInfos, List<ClassListInfo> classInfos) = await TriggerStuActivity.GetTchList(client, _dingDing, ids, $"{school}");
-                           // (List<TmdInfo> tchList, _) = await TriggerStuActivity.GetTchList(client, _dingDing, work.tchLists, work.school);
+                            // (List<TmdInfo> tchList, _) = await TriggerStuActivity.GetTchList(client, _dingDing, work.tchLists, work.school);
+                            //List<Task> bustasks = new List<Task>();
                             if (tchList.IsNotEmpty())
                             {
+                                //School school = null;
+                                //if (string.IsNullOrEmpty(work.school))
+                                //{
+                                //    school = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(work.school, new Azure.Cosmos.PartitionKey("Base"));
+                                //}
                                 tchList.ForEach(x =>
                                 {
                                     tchActivities.Add(new StuActivity
@@ -169,6 +177,10 @@ namespace TEAMModelFunction
                                         taskStatus = -1,
                                         classIds = work.tchLists
                                     });
+                                    //if (school != null)
+                                    //{
+                                    //    bustasks.Add(StatisticsService.SendServiceBus($"{school.standard}", $"{x.id}", $"{work.school}", StatisticsService.TeacherHomework, 1, _configuration, _serviceBus));
+                                    //}
                                 });
                             }
                             await ActivityService.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities, tchActivities);
@@ -194,6 +206,10 @@ namespace TEAMModelFunction
                                 };
                                 await _azureStorage.Save<ChangeRecord>(changeRecord);
                             }
+                            //if (bustasks.IsNotEmpty())
+                            //{
+                            //    await Task.WhenAll(bustasks);
+                            //}
                             break;
                         case "finish":
                             break;

+ 4 - 4
TEAMModelFunction/TriggerStudy.cs

@@ -86,7 +86,7 @@ namespace TEAMModelFunction
                             // (List<TmdInfo> tmdInfos, List<ClassListInfo> classInfos) = await TriggerStuActivity.GetTchList(client, _dingDing, ids, $"{school}");
                             //(List<TmdInfo> tchList, _) = await TriggerStuActivity.GetTchList(client, _dingDing, study.tchLists, study.school);
                             List<StuActivity> tchActivities = new List<StuActivity>();
-                            List<Task> tasks = new List<Task>();
+                            List<Task> bustasks = new List<Task>();
                             if (tchList.IsNotEmpty())
                             {
                                 School school = null;
@@ -118,7 +118,7 @@ namespace TEAMModelFunction
                                         classIds = study.tchLists
                                     });
                                     if (school != null) {
-                                        tasks.Add(StatisticsService.SendServiceBus($"{school.standard}", $"{x.id}", $"{study.school}", StatisticsService.OfflineRecord, 1, _configuration, _serviceBus));
+                                        bustasks.Add(StatisticsService.SendServiceBus($"{school.standard}", $"{x.id}", $"{study.school}", StatisticsService.OfflineRecord, 1, _configuration, _serviceBus));
                                     }
                                 });
                             }
@@ -144,9 +144,9 @@ namespace TEAMModelFunction
                                 };
                                 await _azureStorage.Save<ChangeRecord>(changeRecord);
                             }
-                            if (tasks.IsNotEmpty())
+                            if (bustasks.IsNotEmpty())
                             {
-                                await Task.WhenAll(tasks);
+                                await Task.WhenAll(bustasks);
                             }
                            
                             break;

+ 19 - 3
TEAMModelFunction/TriggerSurvey.cs

@@ -19,13 +19,14 @@ using TEAMModelOS.SDK.Models.Cosmos.Common.Inner;
 using TEAMModelOS.SDK.Module.AzureBlob.Configuration;
 using TEAMModelOS.SDK.Models.Service;
 using HTEXLib.COMM.Helpers;
+using Microsoft.Extensions.Configuration;
 
 namespace TEAMModelFunction
 {
    public class TriggerSurvey
     {
         public static async void Trigger( AzureServiceBusFactory _serviceBus, AzureStorageFactory _azureStorage, DingDing _dingDing,
-               CosmosClient client, Document input, TriggerData tdata,AzureRedisFactory _azureRedis)
+               CosmosClient client, Document input, TriggerData tdata,AzureRedisFactory _azureRedis, IConfiguration _configuration)
         {
             try {
                 if ((tdata.status != null && tdata.status.Value == 404) || tdata.ttl > 0)
@@ -153,9 +154,16 @@ namespace TEAMModelFunction
                             (List<RMember> tchList, List<RGroupList> classInfos) = await GroupListService.GetStutmdidListids(client, _dingDing, survey.tchLists, survey.school,ps);
                             // (List<TmdInfo> tmdInfos, List<ClassListInfo> classInfos) = await TriggerStuActivity.GetTchList(client, _dingDing, ids, $"{school}");
                             //(List<TmdInfo> tchList, _) = await TriggerStuActivity.GetTchList(client, _dingDing, survey.tchLists, survey.school);
+                            List<Task> bustasks = new List<Task>();
                             if (tchList.IsNotEmpty())
                             {
-                               tchList.ForEach(x => {
+                                School school = null;
+                                if (string.IsNullOrEmpty(survey.school))
+                                {
+                                    school = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(survey.school, new Azure.Cosmos.PartitionKey("Base"));
+                                }
+
+                                tchList.ForEach(x => {
                                     tchActivities.Add(new StuActivity
                                     {
                                         pk = "Activity",
@@ -176,7 +184,11 @@ namespace TEAMModelFunction
                                         taskStatus = -1,
                                         classIds = survey.tchLists
                                     });
-                                });
+                                   if (school != null)
+                                   {
+                                        bustasks.Add(StatisticsService.SendServiceBus($"{school.standard}", $"{x.id}", $"{survey.school}", StatisticsService.TeacherSurvey, 0, _configuration, _serviceBus));
+                                   }
+                               });
                             }
                             await ActivityService.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities, tchActivities);
                             //向学生或醍摩豆账号发起通知
@@ -228,6 +240,10 @@ namespace TEAMModelFunction
 #if DEBUG
                             await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}问卷调查{tdata.id}将于:{tdata.etime}完成并结算!", GroupNames.成都开发測試群組);
 #endif
+                            if (bustasks.IsNotEmpty())
+                            {
+                                await Task.WhenAll(bustasks);
+                            }
                             break;
                         case "finish":
 #if DEBUG

+ 17 - 1
TEAMModelFunction/TriggerVote.cs

@@ -16,6 +16,7 @@ using TEAMModelOS.SDK.Models.Cosmos.Common;
 using TEAMModelOS.SDK.Models.Cosmos.Common.Inner;
 using TEAMModelOS.SDK.Models.Service;
 using HTEXLib.COMM.Helpers;
+using Microsoft.Extensions.Configuration;
 
 namespace TEAMModelFunction
 {
@@ -23,7 +24,7 @@ namespace TEAMModelFunction
     {
 
         public static async void Trigger( AzureServiceBusFactory _serviceBus, AzureStorageFactory _azureStorage, DingDing _dingDing,
-            CosmosClient client, Document input, TriggerData tdata, AzureRedisFactory _azureRedis)
+            CosmosClient client, Document input, TriggerData tdata, AzureRedisFactory _azureRedis, IConfiguration _configuration)
         {
             try {
                 if ((tdata.status != null && tdata.status.Value == 404) || tdata.ttl > 0)
@@ -159,8 +160,15 @@ namespace TEAMModelFunction
                                 });
                             }
                             (List<RMember> tchList, List<RGroupList> classInfos) = await GroupListService.GetStutmdidListids(client, _dingDing, vote.tchLists, vote.school,ps);
+
+                            List<Task> bustasks = new List<Task>(); 
                             if (tchList.IsNotEmpty())
                             {
+                                School school = null;
+                                if (string.IsNullOrEmpty(vote.school))
+                                {
+                                    school = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(vote.school, new Azure.Cosmos.PartitionKey("Base"));
+                                }
                                 tchList.ForEach(x => {
                                     tchActivities.Add(new StuActivity
                                     {
@@ -182,6 +190,10 @@ namespace TEAMModelFunction
                                         taskStatus = -1,
                                         classIds = classes
                                     });
+                                    if (school != null)
+                                    {
+                                        bustasks.Add(StatisticsService.SendServiceBus($"{school.standard}", $"{x.id}", $"{vote.school}", StatisticsService.TeacherVote, 0, _configuration, _serviceBus));
+                                    }
                                 });
                             }
                             await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}投票活动,:教研组活动:" +
@@ -236,6 +248,10 @@ namespace TEAMModelFunction
 #if DEBUG
                             await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}投票活动{tdata.id}将于:{tdata.etime}完成并结算!", GroupNames.成都开发測試群組);
 #endif
+                            if (bustasks.IsNotEmpty())
+                            {
+                                await Task.WhenAll(bustasks);
+                            }
                             break;
                         case "finish":
 #if DEBUG

+ 111 - 44
TEAMModelOS.SDK/Models/Service/StatisticsService.cs

@@ -1,6 +1,7 @@
 using Azure.Cosmos;
 using Azure.Messaging.ServiceBus;
 using HTEXLib.COMM.Helpers;
+using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Configuration;
 using System;
 using System.Collections.Generic;
@@ -27,6 +28,22 @@ namespace TEAMModelOS.SDK
         /// 线下研修
         /// </summary>
         public const string OfflineRecord = "OfflineRecord";
+        /// <summary>
+        /// 教师投票活动
+        /// </summary>
+        public const string TeacherVote = "TeacherVote";
+        /// <summary>
+        /// 教师作业活动
+        /// </summary>
+        public const string TeacherHomework = "TeacherHomework";
+        /// <summary>
+        /// 教师问卷活动
+        /// </summary>
+        public const string TeacherSurvey = "TeacherSurvey";
+        /// <summary>
+        /// 教师评测活动
+        /// </summary>
+        public const string TeacherExamLite = "TeacherExamLite";
 
         public static async Task SendServiceBus(string standard,string tmdid,string school,string update,int statistics, IConfiguration _configuration, AzureServiceBusFactory _serviceBus) {
 
@@ -44,6 +61,23 @@ namespace TEAMModelOS.SDK
             await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageChange);
         }
 
+        public static async Task GetAreaAndAreaSetting(  string schoolId, string _standard, CosmosClient client, HttpContext httpContext)
+        {
+            School school = null;
+            AreaSetting setting = null;
+            string standard = "";
+            if (string.IsNullOrEmpty(_standard))
+            {
+                standard = _standard;
+            }
+            else if(!string.IsNullOrEmpty(schoolId)) {
+                //优先找校级
+                setting = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<AreaSetting>(schoolId, new PartitionKey("AreaSetting"));
+                //优先找校级
+                school = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(schoolId, new PartitionKey("Base"));
+            }
+
+        }
         public static async Task<List<(List<TeacherTrain> trains, List<RGroupList> yxtrain)>> StatisticsArea(AreaSetting setting, Area area, CosmosClient client, DingDing _dingDing,  HashSet<string> updates)
         {
            List<(List<TeacherTrain> trains, List<RGroupList> yxtrain)> teacherTrains = new List<(List<TeacherTrain> trains, List<RGroupList> yxtrain)>() ;
@@ -183,7 +217,7 @@ namespace TEAMModelOS.SDK
                 }
             }
             //每次都统计活动相关的数据。
-            train= await DoActivity(train, setting, area, client, _school, _tmdid);
+            // train= await DoActivity(train, setting, area, client, _school, _tmdid);
             train.totalTime = train.onlineTime + train.classTime + train.currency.submitTime + train.offlineTime;
             if (train.totalTime >= setting.allTime)
             {
@@ -226,6 +260,26 @@ namespace TEAMModelOS.SDK
                     train = await DoOfflineRecord(train, setting, area, client, _school, _tmdid,studies);
                     train.updateProperty.Remove(OfflineRecord);
                     break;
+                //投票
+                case TeacherVote:
+                    train = await DoTeacherVote(train, setting, area, client, _school, _tmdid);
+                    train.updateProperty.Remove(TeacherVote);
+                    break;
+                //问卷
+                case TeacherSurvey:
+                    train = await DoTeacherSurvey(train, setting, area, client, _school, _tmdid);
+                    train.updateProperty.Remove(TeacherSurvey);
+                    break;
+                //作业
+                //case TeacherHomework:
+                //    train = await DoTeacherHomework(train, setting, area, client, _school, _tmdid);
+                //    train.updateProperty.Remove(TeacherHomework);
+                //    break;
+                //评测
+                case TeacherExamLite:
+                    train = await DoTeacherExamLite(train, setting, area, client, _school, _tmdid);
+                    train.updateProperty.Remove(TeacherExamLite);
+                    break;
                 default:
                     train.updateProperty.Remove(property);
                     break;
@@ -233,109 +287,115 @@ namespace TEAMModelOS.SDK
             return train;
             
         }
-        public static async Task<TeacherTrain> DoActivity(TeacherTrain train, AreaSetting setting, Area area, CosmosClient client, string _school, string _tmdid) {
-            //问卷调查
-            int surveyJoin=0;
+        public static async Task<TeacherTrain> DoTeacherVote(TeacherTrain train, AreaSetting setting, Area area, CosmosClient client, string _school, string _tmdid) {
             int voteJoin = 0;
-            int examJoin = 0;
-            int surveyDone = 0;
             int voteDone = 0;
-            int examDone = 0;
-            int surveyAreaJoin = 0;
             int voteAreaJoin = 0;
-            int examAreaJoin = 0;
-            int surveyAreaDone = 0;
             int voteAreaDone = 0;
-            int examAreaDone = 0;
-
-
-
-            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher")
-                     .GetItemQueryIterator<StuActivity>(queryText: $"select c.owner, c.taskStatus from c where c.type = 'Survey' ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Activity-{_tmdid}") }))
+            //投票活动
+            await foreach (var item in client.GetContainer("TEAMModelOS", "Teacher")
+             .GetItemQueryIterator<StuActivity>(queryText: $"select c.owner, c.taskStatus from c where c.type = 'Vote' ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Activity-{_tmdid}") }))
             {
                 if (!string.IsNullOrEmpty(item.owner))
                 {
                     if (item.owner.Equals("school"))
                     {
-                        surveyJoin += 1;
+                        voteJoin += 1;
                         if (item.taskStatus > 0)
                         {
-                            surveyDone += 1;
+                            voteDone += 1;
                         }
                     }
                     else if (item.owner.Equals("area"))
                     {
-                        surveyAreaJoin += 1;
+                        voteAreaJoin += 1;
                         if (item.taskStatus > 0)
                         {
-                            surveyAreaDone += 1;
+                            voteAreaDone += 1;
                         }
                     }
                 }
             }
-            //评量检测
-            await foreach (var item in client.GetContainer("TEAMModelOS", "Teacher")
-              .GetItemQueryIterator<StuActivity>(queryText: $"select c.owner, c.taskStatus from c where c.type = 'ExamLite' ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Activity-{_tmdid}") }))
+            train.voteJoin = voteJoin;
+            train.voteDone = voteDone;
+            train.voteAreaJoin = voteAreaJoin;
+            train.voteAreaDone = voteAreaDone;
+            return train;
+        }
+        public static async Task<TeacherTrain> DoTeacherSurvey(TeacherTrain train, AreaSetting setting, Area area, CosmosClient client, string _school, string _tmdid)
+        {
+            //问卷调查
+            int surveyJoin = 0;
+            int surveyDone = 0;
+            int surveyAreaJoin = 0;
+            int surveyAreaDone = 0;
+            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher")
+                     .GetItemQueryIterator<StuActivity>(queryText: $"select c.owner, c.taskStatus from c where c.type = 'Survey' ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Activity-{_tmdid}") }))
             {
                 if (!string.IsNullOrEmpty(item.owner))
                 {
                     if (item.owner.Equals("school"))
                     {
-                        examJoin += 1;
+                        surveyJoin += 1;
                         if (item.taskStatus > 0)
                         {
-                            examDone += 1;
+                            surveyDone += 1;
                         }
                     }
                     else if (item.owner.Equals("area"))
                     {
-                        examAreaJoin += 1;
+                        surveyAreaJoin += 1;
                         if (item.taskStatus > 0)
                         {
-                            examAreaDone += 1;
+                            surveyAreaDone += 1;
                         }
                     }
                 }
             }
-            //投票活动
+            train.surveyJoin = surveyJoin;
+            train.surveyDone = surveyDone;
+            train.surveyAreaJoin = surveyAreaJoin;
+            train.surveyAreaDone = surveyAreaDone;
+            return train;
+        }
+        public static async Task<TeacherTrain> DoTeacherExamLite(TeacherTrain train, AreaSetting setting, Area area, CosmosClient client, string _school, string _tmdid)
+        {
+            //问卷调查
+            int examJoin = 0;
+            int examDone = 0;
+            int examAreaJoin = 0;
+            int examAreaDone = 0;
+            //评量检测
             await foreach (var item in client.GetContainer("TEAMModelOS", "Teacher")
-             .GetItemQueryIterator<StuActivity>(queryText: $"select c.owner, c.taskStatus from c where c.type = 'Vote' ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Activity-{_tmdid}") }))
+              .GetItemQueryIterator<StuActivity>(queryText: $"select c.owner, c.taskStatus from c where c.type = 'ExamLite' ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Activity-{_tmdid}") }))
             {
                 if (!string.IsNullOrEmpty(item.owner))
                 {
                     if (item.owner.Equals("school"))
                     {
-                        voteJoin += 1;
+                        examJoin += 1;
                         if (item.taskStatus > 0)
                         {
-                            voteDone += 1;
+                            examDone += 1;
                         }
                     }
                     else if (item.owner.Equals("area"))
                     {
-                        voteAreaJoin += 1;
+                        examAreaJoin += 1;
                         if (item.taskStatus > 0)
                         {
-                            voteAreaDone += 1;
+                            examAreaDone += 1;
                         }
                     }
                 }
             }
-            train.surveyJoin = surveyJoin;
-            train.voteJoin = voteJoin;
             train.examJoin = examJoin;
-            train.surveyDone = surveyDone;
-            train.voteDone = voteDone;
             train.examDone = examDone;
-            train.surveyAreaJoin = surveyAreaJoin;
-            train.voteAreaJoin = voteAreaJoin;
             train.examAreaJoin = examAreaJoin;
-            train.surveyAreaDone = surveyAreaDone;
-            train.voteAreaDone = voteAreaDone;
             train.examAreaDone = examAreaDone;
             return train;
         }
-        
+
         /// <summary>
         /// 课堂实录更新
         /// </summary>
@@ -455,9 +515,16 @@ namespace TEAMModelOS.SDK
                 var files = classVideo.files[0];
                 if (files.score > 0)
                 {
-                    train.classTime=setting.classTime;
+                    train.classTime = setting.classTime;
+                }
+                else
+                {
+                    train.classTime = 0;
                 }
-                train.teacherClasses= new List<TeacherClass> { new Models.TeacherClass { url = files.url, score = files.score, hash = files.hash, name = files.name, size = files.size } };
+                train.teacherClasses = new List<TeacherClass> { new Models.TeacherClass { url = files.url, score = files.score, hash = files.hash, name = files.name, size = files.size } };
+            }
+            else {
+                train.classTime = 0;
             }
             return train;
         }

+ 14 - 0
TEAMModelOS/Controllers/Common/ExamLiteController.cs

@@ -93,6 +93,16 @@ namespace TEAMModelOS.Controllers.Common
         [HttpPost("record-in")]
         public async Task<IActionResult> RecordIn(JsonElement request)
         {
+            object userScope = null;
+            object _standard = null;
+            string standard = null;
+            HttpContext?.Items?.TryGetValue("Scope", out userScope);
+            if (userScope != null && $"{userScope}".Equals(Constant.ScopeTeacher))
+            {
+                HttpContext?.Items?.TryGetValue("Standard", out _standard);
+                standard = _standard != null && string.IsNullOrEmpty($"{userScope}") ? _standard.ToString() : null;
+            }
+            var (userid, _, _, school) = HttpContext.GetAuthTokenInfo();
             try
             {
                 if (!request.TryGetProperty("id", out JsonElement id)) return BadRequest();
@@ -130,6 +140,10 @@ namespace TEAMModelOS.Controllers.Common
                         trExam.teachers.Add(record);
                     }
                     await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(trExam, trExam.id, new PartitionKey($"{trExam.code}"));
+                    if (!string.IsNullOrEmpty(standard) && !string.IsNullOrEmpty(school))
+                    {
+                        await StatisticsService.SendServiceBus($"{standard}", $"{userid}", $"{school}", StatisticsService.TeacherExamLite, 1, _configuration, _serviceBus);
+                    }
                 }
                 else
                 {

+ 10 - 1
TEAMModelOS/Controllers/Common/SurveyController.cs

@@ -429,9 +429,18 @@ namespace TEAMModelOS.Controllers
         [AuthToken(Roles = "teacher,admin,student", Permissions = "schoolAc-upd,schoolAc-read")]
         public async Task<IActionResult> Answer(JsonElement request)
         {
+            object userScope = null;
+            object _standard = null;
+            string standard = null;
+            HttpContext?.Items?.TryGetValue("Scope", out userScope);
+            if (userScope != null && $"{userScope}".Equals(Constant.ScopeTeacher))
+            {
+                HttpContext?.Items?.TryGetValue("Standard", out _standard);
+                standard = _standard != null && string.IsNullOrEmpty($"{userScope}") ? _standard.ToString() : null;
+            }
             var (userid, _, _, school) = HttpContext.GetAuthTokenInfo();
             if (request.TryGetProperty("userid", out JsonElement _userid)) {
-                (int msgid ,int taskStatus) = await ActivityStudentService.Answer(_dingDing,_option, request, _azureCosmos, _azureRedis, $"{userid}",school, _azureStorage);
+                (int msgid ,int taskStatus) = await ActivityStudentService.Answer(_dingDing,_option, request, _azureCosmos, _azureRedis, $"{userid}",school, _azureStorage, standard, _serviceBus, _configuration);
                 return Ok(new { msgid , taskStatus });
             }
             else { return Ok(new { msgid = 0 }); }

+ 24 - 15
TEAMModelOS/Controllers/Common/VoteController.cs

@@ -439,7 +439,8 @@ namespace TEAMModelOS.Controllers
         [AuthToken(Roles = "teacher,admin,student", Permissions = "schoolAc-read,schoolAc-upd")]
         public async Task<IActionResult> Decided(JsonElement request)
         {
-            var (userid, _, _, _) = HttpContext.GetAuthTokenInfo();
+
+            var (userid, _, _, school) = HttpContext.GetAuthTokenInfo();
             if (!request.TryGetProperty("id", out JsonElement id))
             {
                 return BadRequest();
@@ -482,8 +483,17 @@ namespace TEAMModelOS.Controllers
         [AuthToken(Roles = "teacher,admin,student", Permissions = "schoolAc-read,schoolAc-upd")]
         public async Task<IActionResult> Decide(JsonElement request)
         {
+            object userScope = null;
+            object _standard = null;
+            string standard = null;
+            HttpContext?.Items?.TryGetValue("Scope", out userScope);
+            if (userScope != null && $"{userScope}".Equals(Constant.ScopeTeacher))
+            {
+                HttpContext?.Items?.TryGetValue("Standard", out _standard);
+                standard = _standard != null && string.IsNullOrEmpty($"{userScope}") ? _standard.ToString() : null;
+            }
             var (userid, _, _, school) = HttpContext.GetAuthTokenInfo();
-            (int msgid,int taskStatus) = await ActivityStudentService.Decide(_dingDing,_option, request, _azureCosmos, _azureRedis ,_azureStorage, userid, school);
+            (int msgid,int taskStatus) = await ActivityStudentService.Decide(_dingDing,_option, request, _azureCosmos, _azureRedis ,_azureStorage, userid, school, standard,_serviceBus,_configuration);
             return Ok(new { msgid, taskStatus });
         }
         /// <summary>
@@ -502,18 +512,17 @@ namespace TEAMModelOS.Controllers
         /// <returns>
         /// msgid=0投票失败,1投票成功,2不在时间范围内,3不在发布范围内,4投票周期内重复投票,5周期内的可投票数不足,6未设置投票项
         /// </returns>
-        [ProducesDefaultResponseType]
-        [HttpPost("decide-mock")]
-        public async Task<IActionResult> DecideMock(JsonElement request)
-        {
-            //var (userid, _, _, _) = HttpContext.GetAuthTokenInfo();
-            //活动id
-            if (request.TryGetProperty("userid", out JsonElement userid)&& request.TryGetProperty("school", out JsonElement _school))
-            {
-                (int msgid, int taskStatus) = await ActivityStudentService.Decide(_dingDing,_option,request, _azureCosmos, _azureRedis, _azureStorage, $"{userid}",$"{_school}");
-                return Ok(new { msgid ,taskStatus });
-            }
-            else { return Ok(new { msgid = 0 }); }
-        }
+        //[ProducesDefaultResponseType]
+        //[HttpPost("decide-mock")]
+        //public async Task<IActionResult> DecideMock(JsonElement request)
+        //{
+            
+        //    if (request.TryGetProperty("userid", out JsonElement userid)&& request.TryGetProperty("school", out JsonElement _school))
+        //    {
+        //        (int msgid, int taskStatus) = await ActivityStudentService.Decide(_dingDing,_option,request, _azureCosmos, _azureRedis, _azureStorage, $"{userid}",$"{_school}");
+        //        return Ok(new { msgid ,taskStatus });
+        //    }
+        //    else { return Ok(new { msgid = 0 }); }
+        //}
     }
 }

+ 14 - 308
TEAMModelOS/Controllers/Research/AbilityStatisticsController.cs

@@ -280,8 +280,6 @@ namespace TEAMModelOS.Controllers
             if (_update.ValueKind.Equals(JsonValueKind.Array)) {
                 update= _update.ToObject<HashSet<string>>();
             }
-           
-           
             if (!HttpContext.Items.TryGetValue("Standard", out object standard)) return BadRequest();
             var client = _azureCosmos.GetCosmosClient();
             Area area = null;
@@ -366,7 +364,7 @@ namespace TEAMModelOS.Controllers
         [AuthToken(Roles = "teacher,admin,area")]
         public async Task<IActionResult> StatisticsTeacher(JsonElement request) {
             //{"tmdid":"1595321354","school":"hbcn"}
-            var (userid, name, picture, school) = HttpContext.GetAuthTokenInfo();
+            var (_userid, name, picture, school) = HttpContext.GetAuthTokenInfo();
             if (!HttpContext.Items.TryGetValue("Standard", out object standard)) return BadRequest();
             var client = _azureCosmos.GetCosmosClient();
             request.TryGetProperty("update", out JsonElement _update);
@@ -375,6 +373,15 @@ namespace TEAMModelOS.Controllers
             {
                 update = _update.ToObject<HashSet<string>>();
             }
+            request.TryGetProperty("tmdid", out JsonElement _tmdid);
+            string tmdid = "";
+            if (_tmdid.ValueKind.Equals(JsonValueKind.String))
+            {
+                tmdid = $"{_tmdid}";
+            }
+            else {
+                tmdid = $"{_userid}";
+            }
             Area area = null;
             string sql = $"select value(c) from c where c.standard='{standard}'";
             await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<Area>(queryText: sql,
@@ -419,7 +426,7 @@ namespace TEAMModelOS.Controllers
                 TeacherTrain teacherTrain = null;
                 try
                 {
-                    teacherTrain= await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<TeacherTrain>(userid, new PartitionKey($"TeacherTrain-{school}"));
+                    teacherTrain= await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<TeacherTrain>(tmdid, new PartitionKey($"TeacherTrain-{school}"));
                     teacherTrain.name = name;
                     teacherTrain.picture=picture;
                     if (update!=null && update.Count > 0) {
@@ -433,9 +440,9 @@ namespace TEAMModelOS.Controllers
                      teacherTrain = await StatisticsService.StatisticsTeacher(new TeacherTrain
                     {
                         pk= "TeacherTrain",
-                        id = userid,
+                        id = tmdid,
                         code = $"TeacherTrain-{school}",
-                        tmdid = userid,
+                        tmdid = tmdid,
                         school = school,
                         name= name,
                         picture= picture,
@@ -449,307 +456,6 @@ namespace TEAMModelOS.Controllers
 
             }
         }
-        /// <summary>
-        /// 对某个订阅的能力点进行操作
-        /// </summary>
-        /// <param name="request"></param>
-        /// <returns></returns>
-        [ProducesDefaultResponseType]
-        [HttpPost("statistics-self")]
-        [AuthToken(Roles = "teacher,admin,area")]
-        public async Task<IActionResult> StatisticsSelf(JsonElement request)
-        {
-            var (userid, _, _, school) = HttpContext.GetAuthTokenInfo();
-            if (!HttpContext.Items.TryGetValue("Standard", out object standard)) return BadRequest();
-            var client = _azureCosmos.GetCosmosClient();
-            Area area = null;
-            string sql = $"select value(c) from c where c.standard='{standard}'";
-            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<Area>(queryText: sql,
-                  requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-Area") }))
-            {
-                area = item;
-            }
-            AreaSetting setting = null;
-            if (area != null)
-            {
-                try
-                {
-                    //优先找校级
-                    setting = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<AreaSetting>(school, new PartitionKey("AreaSetting"));
-                }
-                catch (CosmosException)
-                {
-                    try
-                    {
-                        setting = await client.GetContainer(Constant.TEAMModelOS, "Normal").ReadItemAsync<AreaSetting>(area.id, new PartitionKey("AreaSetting"));
-                    }
-                    catch (CosmosException)
-                    {
-                        setting = null;
-                    }
-                }
-            }
-            if (setting == null)
-            {
-                setting = new AreaSetting
-                {
-                    allTime = 50,
-                    classTime = 5,
-                    submitTime = 15,
-                    onlineTime = 20,
-                    offlineTime = 10,
-                    lessonMinutes = 45,
-                };
-            }
-            if (!request.TryGetProperty("tmdid", out JsonElement _tmdid)) return BadRequest();
-            if (!request.TryGetProperty("school", out JsonElement _school)) return BadRequest();
-            //总学时
-            int alltime = 0;
-            //能力点订阅数量
-            int subCount = 0;
-            //已学能力点
-            int allAbilityCount = 0;
-            //已通过自测的能力点数量
-            int hasAbilityExercise = 0;
-            //线上研修
-            int onlineTime = 0;
-            //线下研修
-            int offlinelTime = 0;
-            //认证材料
-            int schoolScoreTime = 0;
-            //课堂实录
-            int classVideoTime = 0;
-            //校级研修参与
-            int offlineSchoolJoinCount = 0;
-            //校级研修完成
-            int offlineSchoolDoneCount = 0;
-            //区级研修参与
-            int offlineAreaJoinCount = 0;
-            //区级研修完成
-            int offlineAreaDoneCount = 0;
-
-            int uploadTotalCount = 0;
-            int uploadDoneCount = 0;
-            int surveyJoinCount = 0;
-            int voteJoinCount = 0;
-            int examJoinCount = 0;
-            int surveyDoneCount = 0;
-            int voteDoneCount = 0;
-            int examDoneCount = 0;
-            int surveyAreaJoinCount = 0;
-            int voteAreaJoinCount = 0;
-            int examAreaJoinCount = 0;
-            int surveyAreaDoneCount = 0;
-            int voteAreaDoneCount = 0;
-            int examAreaDoneCount = 0;
-            int videoTime = 0;
-            HashSet<string> abilityIds = new HashSet<string>();
-            await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher")
-               .GetItemQueryIterator<AbilitySub>(queryText: $"select value(c) from c  ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"AbilitySub-{_school}-{_tmdid}") }))
-            {
-                if (item.uploads.IsNotEmpty())
-                {
-                    uploadDoneCount += item.uploads.Count;
-                }
-                subCount += 1;
-                if (item.exerciseScore > 0)
-                {
-                    hasAbilityExercise += 1;
-                }
-                allAbilityCount += item.abilityCount;
-
-                int vtime = (int)item.videoRcds.Sum(x => x.time);
-                videoTime += vtime;
-                int lesson = vtime / setting.lessonMinutes;
-                onlineTime += lesson;
-                if (item.otherScore.IsNotEmpty())
-                {
-                    var schoolScore = item.otherScore.Where(x => x.roleType.Equals("school")).FirstOrDefault();
-                    if (schoolScore != null && schoolScore.score > 0)
-                    {
-                        schoolScoreTime += 5;
-                    }
-                }
-                abilityIds.Add(item.id);
-            }
-            if (abilityIds.Count>0)
-            {
-                string queryText = $"SELECT c.stds FROM c WHERE c.id IN ({string.Join(",", abilityIds.Select(o => $"'{o}'"))})";
-                await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Normal")
-                .GetItemQueryIterator<Ability>(queryText: queryText, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Ability-{standard}") }))
-                {
-                    item.stds.ForEach(x =>
-                    {
-                        if (x.task.IsNotEmpty())
-                        {
-                            uploadTotalCount += 1;
-                        }
-                    });
-                }
-            }
-              
-
-            //owner:  school  area
-            //线下 学校研修活动
-            await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher")
-            .GetItemQueryIterator<StuActivity>(queryText: $"select c.owner, c.taskStatus from c where  c.type = 'Study' ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Activity-{_tmdid}") }))
-            {
-                if (!string.IsNullOrEmpty(item.owner))
-                {
-                    if (item.owner.Equals("school"))
-                    {
-                        offlineSchoolJoinCount += 1;
-                        if (item.taskStatus > 0)
-                        {
-                            offlinelTime += 1;
-                            offlineSchoolDoneCount += 1;
-                        }
-                    }
-                    else if (item.owner.Equals("area"))
-                    {
-                        offlineAreaJoinCount += 1;
-                        if (item.taskStatus > 0)
-                        {
-                            offlinelTime += 1;
-                            offlineSchoolDoneCount += 1;
-                        }
-                    }
-                }
-            }
-            //问卷调查
-            await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher")
-             .GetItemQueryIterator<StuActivity>(queryText: $"select c.owner, c.taskStatus from c where c.type = 'Survey' ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Activity-{_tmdid}") }))
-            {
-                if (!string.IsNullOrEmpty(item.owner))
-                {
-                    if (item.owner.Equals("school"))
-                    {
-                        surveyJoinCount += 1;
-                        if (item.taskStatus > 0)
-                        {
-                            surveyDoneCount += 1;
-                        }
-                    }
-                    else if (item.owner.Equals("area"))
-                    {
-                        surveyAreaJoinCount += 1;
-                        if (item.taskStatus > 0)
-                        {
-                            surveyAreaDoneCount += 1;
-                        }
-                    }
-                }
-            }
-            //评量检测
-            await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher")
-              .GetItemQueryIterator<StuActivity>(queryText: $"select c.owner, c.taskStatus from c where c.type = 'ExamLite' ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Activity-{_tmdid}") }))
-            {
-                if (!string.IsNullOrEmpty(item.owner))
-                {
-                    if (item.owner.Equals("school"))
-                    {
-                        examJoinCount += 1;
-                        if (item.taskStatus > 0)
-                        {
-                            examDoneCount += 1;
-                        }
-                    }
-                    else if (item.owner.Equals("area"))
-                    {
-                        examAreaJoinCount += 1;
-                        if (item.taskStatus > 0)
-                        {
-                            examAreaDoneCount += 1;
-                        }
-                    }
-                }
-            }
-            //投票活动
-            await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher")
-             .GetItemQueryIterator<StuActivity>(queryText: $"select c.owner, c.taskStatus from c where c.type = 'Vote' ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Activity-{_tmdid}") }))
-            {
-                if (!string.IsNullOrEmpty(item.owner))
-                {
-                    if (item.owner.Equals("school"))
-                    {
-                        voteJoinCount += 1;
-                        if (item.taskStatus > 0)
-                        {
-                            voteDoneCount += 1;
-                        }
-                    }
-                    else if (item.owner.Equals("area"))
-                    {
-                        voteAreaJoinCount += 1;
-                        if (item.taskStatus > 0)
-                        {
-                            voteAreaDoneCount += 1;
-                        }
-                    }
-                }
-            }
-            string code = $"ClassVideo-{_school}";
-            try
-            {
-                ClassVideo classVideo = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemAsync<ClassVideo>($"{_tmdid}", new PartitionKey(code));
-                if (classVideo != null && classVideo.files.IsNotEmpty())
-                {
-                    //2021.11.17 15:05,与J哥确认,取课堂实录第一个。前端也只show第一个视频。
-                    var files = classVideo.files[0];
-                    if (files.score > 0)
-                    {
-                        classVideoTime += 5;
-                    }
-                    //classVideo.files.ForEach(x =>
-                    //{
-                    //    if (x.score > 0)
-                    //    {
-                    //        classVideoTime += 1;
-                    //    }
-                    //});
-                }
-            }
-            catch (Exception ex)
-            {
-                classVideoTime = 0;
-            }
-            //处理单项 超标准 学时 
-            alltime += onlineTime >= setting.onlineTime ? setting.onlineTime : onlineTime;
-            alltime += offlinelTime >= setting.offlineTime ? setting.offlineTime : offlinelTime;
-            alltime += schoolScoreTime >= setting.submitTime ? setting.submitTime : schoolScoreTime;
-            alltime += classVideoTime >= setting.classTime ? setting.classTime : classVideoTime;
-            return Ok(new
-            {
-                alltime,
-                subCount,
-                allAbilityCount,
-                onlineTime,
-                schoolScoreTime,
-                classVideoTime,
-                hasAbilityExercise,
-                offlinelTime,
-
-                offlineAreaDoneCount,
-                offlineAreaJoinCount,
-                offlineSchoolDoneCount,
-                offlineSchoolJoinCount,
-                uploadDoneCount,
-                uploadTotalCount,
-                surveyDoneCount,
-                surveyJoinCount,
-                voteDoneCount,
-                voteJoinCount,
-                examJoinCount,
-                examDoneCount,
-                surveyAreaDoneCount,
-                surveyAreaJoinCount,
-                voteAreaDoneCount,
-                voteAreaJoinCount,
-                examAreaJoinCount,
-                examAreaDoneCount,
-                videoTime,
-                setting
-            });
-        }
+        
     }
 }

文件差异内容过多而无法显示
+ 0 - 1248
TEAMModelOS/Controllers/Research/ResearchStatisticsController.cs


+ 2 - 1
TEAMModelOS/Controllers/Teacher/InitController.cs

@@ -269,8 +269,9 @@ namespace TEAMModelOS.Controllers
                 }
                 if (roles.Count == 0)
                 {
+                    //助理,管家
+                    //roles.Add("assist");
                     roles.Add("teacher");
-                    roles.Add("student");
                 }
                 //TODO JJ,调整为取得学校基础设置数据,取代下方學校學制、年級
 

+ 11 - 2
TEAMModelOS/Services/Common/ActivityStudentService.cs

@@ -15,12 +15,14 @@ using StackExchange.Redis;
 using TEAMModelOS.SDK.Models.Cosmos.Common;
 using TEAMModelOS.Controllers;
 using TEAMModelOS.Models;
+using TEAMModelOS.SDK;
 
 namespace TEAMModelOS.Services.Common
 {
     public static class ActivityStudentService
     {
-        public static async Task<(int msgid,int taskStatus)> Decide(DingDing _dingDing, Option _option, JsonElement request,AzureCosmosFactory _azureCosmos,AzureRedisFactory _azureRedis , AzureStorageFactory _azureStorage, string userid ,string school) {
+        public static async Task<(int msgid,int taskStatus)> Decide(DingDing _dingDing, Option _option, JsonElement request,AzureCosmosFactory _azureCosmos,AzureRedisFactory _azureRedis ,
+            AzureStorageFactory _azureStorage, string userid ,string school, string standard, AzureServiceBusFactory _serviceBus, Microsoft.Extensions.Configuration.IConfiguration _configuration) {
             Vote vote = null;
             DateTimeOffset now = DateTimeOffset.UtcNow;
             long curr = now.ToUnixTimeMilliseconds();
@@ -176,6 +178,9 @@ namespace TEAMModelOS.Services.Common
                                     StuActivity activity = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<StuActivity>(vote.id, new PartitionKey($"Activity-{userid}"));
                                     activity.taskStatus = taskStatus;
                                     await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<StuActivity>(activity, vote.id, new PartitionKey($"Activity-{userid}"));
+                                    if (!string.IsNullOrEmpty(standard) && !string.IsNullOrEmpty(school)) {
+                                      await  StatisticsService.SendServiceBus($"{standard}", $"{userid}", $"{school}", StatisticsService.TeacherVote, 1, _configuration, _serviceBus);
+                                    }
                                 }
                                 catch(CosmosException cosex) {
                                     taskStatus = -1;
@@ -476,7 +481,7 @@ namespace TEAMModelOS.Services.Common
         }
 
         
-        public static async Task<(int msgid,int taskStatus)> Answer(DingDing _dingDing, Option _option, JsonElement request, AzureCosmosFactory _azureCosmos, AzureRedisFactory azureRedis, string userid,string school, AzureStorageFactory _azureStorage)
+        public static async Task<(int msgid,int taskStatus)> Answer(DingDing _dingDing, Option _option, JsonElement request, AzureCosmosFactory _azureCosmos, AzureRedisFactory azureRedis, string userid,string school, AzureStorageFactory _azureStorage, string standard, AzureServiceBusFactory _serviceBus, Microsoft.Extensions.Configuration.IConfiguration _configuration)
         {
 
             DateTimeOffset now = DateTimeOffset.UtcNow;
@@ -712,6 +717,10 @@ namespace TEAMModelOS.Services.Common
                                         StuActivity activity = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<StuActivity>(survey.id, new PartitionKey($"Activity-{userid}"));
                                         activity.taskStatus = taskStatus;
                                         await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<StuActivity>(activity, survey.id, new PartitionKey($"Activity-{userid}"));
+                                        if (!string.IsNullOrEmpty(standard) && !string.IsNullOrEmpty(school))
+                                        {
+                                            await StatisticsService.SendServiceBus($"{standard}", $"{userid}", $"{school}", StatisticsService.TeacherSurvey, 1, _configuration, _serviceBus);
+                                        }
                                     } catch (CosmosException cosex) {
                                         if (cosex.Status == 404) {
                                             taskStatus = -1;