소스 검색

Merge branch 'develop5.0-tmd' into develop5.0-grouplist

CrazyIter_Bin 3 년 전
부모
커밋
3b042e5d91
31개의 변경된 파일1876개의 추가작업 그리고 948개의 파일을 삭제
  1. 83 0
      TEAMModeBI/Controllers/BIHome/HomeStatisController.cs
  2. 225 0
      TEAMModeBI/Controllers/DingDingStruc/DDDeptController.cs
  3. 17 0
      TEAMModeBI/Controllers/DingDingStruc/DDPowerController.cs
  4. 530 0
      TEAMModeBI/Controllers/DingDingStruc/DDStructController.cs
  5. 1 1
      TEAMModeBI/Controllers/LoginController.cs
  6. 41 0
      TEAMModelOS.SDK/Models/Cosmos/BI/DeptNode.cs
  7. 26 7
      TEAMModelOS.SDK/Models/Cosmos/Common/SheetConfig.cs
  8. 1 1
      TEAMModelOS.SDK/Models/Service/GroupListService.cs
  9. 1 1
      TEAMModelOS.SDK/Models/Service/StuListService.cs
  10. 5 3
      TEAMModelOS/ClientApp/src/common/HtexRender.vue
  11. 34 8
      TEAMModelOS/ClientApp/src/common/MyHTEXRender.vue
  12. 2 2
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReportCharts/KeyPointPerformChart.vue
  13. 2 2
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReportCharts/RecognizePerformChart.vue
  14. 1 1
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperView.vue
  15. 2 2
      TEAMModelOS/ClientApp/src/components/student-web/HomeView/HomeView.vue
  16. 4 4
      TEAMModelOS/ClientApp/src/components/student-web/HomeView/newHomeView.vue
  17. 2 2
      TEAMModelOS/ClientApp/src/utils/evTools.js
  18. 4 4
      TEAMModelOS/ClientApp/src/view/ability/TestPaper.vue
  19. 16 18
      TEAMModelOS/ClientApp/src/view/classrecord/ClassRecord.less
  20. 548 588
      TEAMModelOS/ClientApp/src/view/classrecord/ClassRecord.vue
  21. 3 3
      TEAMModelOS/ClientApp/src/view/classrecord/CorrectRate.vue
  22. 19 19
      TEAMModelOS/ClientApp/src/view/classrecord/OptionCount.vue
  23. 1 1
      TEAMModelOS/ClientApp/src/view/evaluation/bank/index.less
  24. 2 2
      TEAMModelOS/ClientApp/src/view/evaluation/bank/index.vue
  25. 1 0
      TEAMModelOS/ClientApp/src/view/evaluation/index/TestPaper.vue
  26. 1 1
      TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.less
  27. 7 5
      TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.vue
  28. 2 1
      TEAMModelOS/ClientApp/src/view/questionnaire/ManageQuestionnaire.vue
  29. 282 259
      TEAMModelOS/Controllers/Third/ScController.cs
  30. 1 1
      TEAMModelOS/TEAMModelOS.csproj
  31. 12 12
      TEAMModelOS/appsettings.Development.json

+ 83 - 0
TEAMModeBI/Controllers/BIHome/HomeStatisController.cs

@@ -0,0 +1,83 @@
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Text.Json;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.Models;
+using Azure.Cosmos;
+using Microsoft.Extensions.Options;
+
+namespace TEAMModeBI.Controllers.BIHome
+{
+    [Route("homestatis")]
+    [ApiController]
+    public class HomeStatisController : ControllerBase
+    {
+        private readonly AzureCosmosFactory _azureCosmos;
+        private readonly DingDing _dingDing;
+        private readonly Option _option;
+
+        public HomeStatisController(AzureCosmosFactory azureCosmos, DingDing dingDing, IOptionsSnapshot<Option> option) 
+        {
+            _azureCosmos = azureCosmos;
+            _dingDing = dingDing;
+            _option = option?.Value;
+        }
+
+
+        /// <summary>
+        /// 获取人数
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("numberpeople")]
+        public async Task<IActionResult> NumberPeople(JsonElement jsonElement)  
+        {
+            if (!jsonElement.TryGetProperty("schooolId", out JsonElement schoolId)) return BadRequest();
+
+            var client = _azureCosmos.GetCosmosClient();
+
+            //依据学校查询教师人数
+            List<string> teacherCount_list = new();
+            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryStreamIterator(queryText: $"select c.id from c join S1 in c.schools where S1.schoolId='{schoolId}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") })) 
+            {
+                using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0) 
+                {
+                    var accounts = json.RootElement.GetProperty("Documents").EnumerateArray();
+                    while (accounts.MoveNext()) 
+                    {
+                        JsonElement account = accounts.Current;
+                        teacherCount_list.Add(account.GetProperty("id").GetString());
+                    }
+                }
+            }
+
+            //
+            List<string> studentCount_List = new();
+            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryStreamIterator(queryText: $"select c.id from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-{schoolId}") })) 
+            {
+                using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                {
+                    var accounts = json.RootElement.GetProperty("Documents").EnumerateArray();
+                    while (accounts.MoveNext()) 
+                    {
+                        JsonElement account = accounts.Current;
+                        studentCount_List.Add(account.GetProperty("id").GetString());
+                    }
+                }
+            }
+
+
+
+            return Ok(new { SchoolTeacherCount = teacherCount_list.Count });
+
+
+        }
+    }
+}

+ 225 - 0
TEAMModeBI/Controllers/DingDingStruc/DDDeptController.cs

@@ -0,0 +1,225 @@
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Configuration;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.Models;
+using DingTalk.Api;
+using DingTalk.Api.Request;
+using DingTalk.Api.Response;
+using TEAMModelOS.SDK.Models.Cosmos.BI;
+using System.Text.Json;
+using Azure.Cosmos;
+
+namespace TEAMModeBI.Controllers.DingDingStruc
+{
+    [Route("branch")]
+    [ApiController]
+    public class DDDeptController : ControllerBase
+    {
+        private readonly IConfiguration _configuration;
+        //数据容器
+        private readonly AzureCosmosFactory _azureCosmos;
+        //钉钉提示信息
+        private readonly DingDing _dingDing;
+        private readonly Option _option;
+
+        public DDDeptController(IConfiguration configuration,AzureCosmosFactory azureCosmos)
+        {
+            _configuration = configuration;
+            _azureCosmos = azureCosmos;
+        }
+
+        #region   从钉钉拿数据存CosmosDB中
+
+        /// <summary>
+        /// 获取部门机构
+        /// </summary>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("get-depts")]
+        public async Task<IActionResult> GetDDDepts() 
+        {
+            try
+            {
+                string appKey = _configuration["DingDingAuth:appKey"];
+                string appSecret = _configuration["DingDingAuth:appSecret"];
+                string agentld = _configuration["DingDingAuth:Agentld"];
+
+                //获取access_token
+                DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
+                OapiGettokenRequest request = new OapiGettokenRequest() { Appkey = appKey, Appsecret = appSecret };
+                request.SetHttpMethod("Get");
+                OapiGettokenResponse response = client.Execute(request);
+                if (response.IsError)
+                {
+                    return BadRequest();
+                }
+
+                //access_token的有效期为7200秒(2小时),有效期内重复获取会返回相同结果并自动续期,过期后获取会返回新的access_token
+                string access_token = response.AccessToken;
+
+                //获取一级部门列表
+                IDingTalkClient V2departClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
+                OapiV2DepartmentListsubRequest reqPartment1 = new OapiV2DepartmentListsubRequest() { DeptId = 1L, Language = "zh_CN" };
+                OapiV2DepartmentListsubResponse rspPartment1 = V2departClient.Execute(reqPartment1, access_token);
+                if (rspPartment1.IsError)
+                {
+                    return BadRequest();
+                }
+
+                DeptNode deptNodes = new DeptNode();
+                deptNodes.id = agentld;
+                deptNodes.code = "DDPartment";
+                deptNodes.pk = "DDPartment";
+                deptNodes.ttl = -1;
+
+                List<DeptInfo> deptlist = new List<DeptInfo>();
+                if (rspPartment1.Result != null) 
+                {
+                    foreach (var depts in rspPartment1.Result) 
+                    {
+                        DeptInfo deptInfo = new DeptInfo();
+                        deptInfo.id = depts.DeptId;
+                        deptInfo.pid = depts.ParentId;
+                        deptInfo.name = depts.Name;
+
+                        //获取一级部门用户列表
+                        IDingTalkClient userListClient1 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listid");
+                        OapiUserListidRequest reqUsers1 = new OapiUserListidRequest() { DeptId = depts.DeptId };
+                        OapiUserListidResponse rspUsers1 = userListClient1.Execute(reqUsers1, access_token);
+                        if (rspUsers1.Result != null)
+                        {
+                            deptInfo.users = rspUsers1.Result.UseridList;
+                        }
+
+                        //获取二级部门列表
+                        OapiV2DepartmentListsubRequest reqPartment2 = new OapiV2DepartmentListsubRequest() { DeptId = depts.DeptId, Language = "zh_CN" };
+                        OapiV2DepartmentListsubResponse rspPartment2 = V2departClient.Execute(reqPartment2, access_token);
+                        if (rspPartment2.Result != null)
+                        {
+                            foreach (var depts2 in rspPartment2.Result)
+                            {
+                                DeptInfo deptInfo2 = new DeptInfo();
+                                deptInfo2.id = depts2.DeptId;
+                                deptInfo2.pid = depts2.ParentId;
+                                deptInfo2.name = depts2.Name;
+
+                                //获取三级部门用户列表
+                                OapiUserListidRequest reqUsers2 = new OapiUserListidRequest() { DeptId = depts2.DeptId };
+                                OapiUserListidResponse rspUsers2 = userListClient1.Execute(reqUsers2, access_token);
+                                if (rspUsers2.Result != null)
+                                {
+                                    //添加三级部门用户
+                                    deptInfo2.users = rspUsers2.Result.UseridList;
+                                }
+
+                                //获取三级部门列表
+                                OapiV2DepartmentListsubRequest reqPartment3 = new OapiV2DepartmentListsubRequest() { DeptId = depts2.DeptId, Language = "zh_CN" };
+                                OapiV2DepartmentListsubResponse rspPartment3 = V2departClient.Execute(reqPartment3, access_token);
+                                if (rspPartment3.Result != null) 
+                                {
+                                    foreach (var depts3 in rspPartment3.Result) 
+                                    {
+                                        DeptInfo deptInfo3 = new DeptInfo();
+                                        deptInfo3.id = depts3.DeptId;
+                                        deptInfo3.pid = depts3.ParentId;
+                                        deptInfo3.name = depts3.Name;
+
+                                        //获取三级部门用户列表
+                                        OapiUserListidRequest reqUsers3 = new OapiUserListidRequest() { DeptId = depts3.DeptId };
+                                        OapiUserListidResponse rspUsers3 = userListClient1.Execute(reqUsers3, access_token);
+                                        if (rspUsers3.Result != null)
+                                        {
+                                            //添加三级部门用户
+                                            deptInfo3.users = rspUsers3.Result.UseridList;
+                                        }
+
+                                        //获取四级部门列表
+                                        OapiV2DepartmentListsubRequest reqPartment4 = new OapiV2DepartmentListsubRequest() { DeptId = depts3.DeptId, Language = "zh_CN" };
+                                        OapiV2DepartmentListsubResponse rspPartment4 = V2departClient.Execute(reqPartment4, access_token);
+                                        if (rspPartment4.Result != null)
+                                        {
+                                            foreach (var depts4 in rspPartment4.Result)
+                                            {
+                                                DeptInfo deptInfo4 = new DeptInfo();
+                                                deptInfo4.id = depts4.DeptId;
+                                                deptInfo4.pid = depts4.ParentId;
+                                                deptInfo4.name = depts4.Name;
+
+                                                //获取四级部门用户列表
+                                                OapiUserListidRequest reqUsers4 = new OapiUserListidRequest() { DeptId = depts4.DeptId };
+                                                OapiUserListidResponse rspUsers4 = userListClient1.Execute(reqUsers4, access_token);
+                                                if (rspUsers4.Result != null)
+                                                {
+                                                    //添加四级部门用户
+                                                    deptInfo4.users = rspUsers4.Result.UseridList;
+                                                }
+
+                                                deptlist.Add(deptInfo4);
+                                            }                                        
+                                        }
+                                        deptlist.Add(deptInfo3);
+                                    }
+                                }
+                                deptlist.Add(deptInfo2);
+                            }
+                        }
+                        deptlist.Add(deptInfo);
+                    }
+                }
+                deptNodes.depts = deptlist;
+                await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync<DeptNode>(deptNodes, new Azure.Cosmos.PartitionKey($"DDPartment"));
+
+                return Ok(new { state = 200, message = "钉钉的组织架构添加到数据库成功", deptNodes = deptNodes });
+            }
+            catch (Exception ex)
+            {
+                return Ok(new { state = 1, message = $"访问失败!状态:{ex.StackTrace} 错误:{ex.Message}" });
+            }
+        }
+
+        #endregion  
+
+        #region 从数据库获取(设置、修改、)钉钉组织架构信息
+
+        /// <summary>
+        /// 依据当前部门编号获取下级部门信息
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("get-partment")]
+        public async Task<IActionResult> GetPartment(JsonElement jsonElement)
+        {
+            try
+            {
+                if (!jsonElement.TryGetProperty("pid", out JsonElement pid)) return BadRequest();
+
+                var client = _azureCosmos.GetCosmosClient();              
+                List<DeptInfo> deptInfos = new List<DeptInfo>();
+                string sqltxt = $"select a1.id,a1.pid,a1.name,a1.users from c join a1 IN c.depts where a1.pid={pid}";
+                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<DeptInfo>(queryText: sqltxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("DDPartment") }))
+                {
+                    deptInfos.Add(item);
+                }
+
+                return Ok(new { state = 200, deptInfos });
+            }
+            catch (Exception ex)
+            {
+                return Ok(new { state = 1, message = $"访问失败! 状态:{ex.StackTrace} 错误:{ex.Message}" });
+            }
+        }
+
+
+
+
+
+
+        #endregion
+    }
+}

+ 17 - 0
TEAMModeBI/Controllers/DingDingStruc/DDPowerController.cs

@@ -0,0 +1,17 @@
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace TEAMModeBI.Controllers.DingDingStruc
+{
+    [Route("power")]
+    [ApiController]
+    public class DDPowerController : ControllerBase
+    {
+        //public 
+
+    }
+}

+ 530 - 0
TEAMModeBI/Controllers/DingDingStruc/DDStructController.cs

@@ -0,0 +1,530 @@
+using DingTalk.Api;
+using DingTalk.Api.Request;
+using DingTalk.Api.Response;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.Json;
+using System.Threading.Tasks;
+using TEAMModelOS.Models;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.SDK.Models.Service;
+
+namespace TEAMModeBI.Controllers.DingDingStruc
+{
+    [Route("dd")]
+    [ApiController]
+    public class DDStructController : ControllerBase
+    {
+        private readonly IConfiguration _configuration;
+        //数据容器
+        private readonly AzureCosmosFactory _azureCosmos;
+        //文件容器
+        private readonly AzureStorageFactory _azureStorage;
+        //钉钉提示信息
+        private readonly DingDing _dingDing;
+        private readonly Option _option;
+
+        public DDStructController(IConfiguration configuration, AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, DingDing dingDing, IOptionsSnapshot<Option> option, CoreAPIHttpService aoreAPIHttpService)
+        {
+            _configuration = configuration;
+            _azureCosmos = azureCosmos;
+            _azureStorage = azureStorage;
+            _dingDing = dingDing;
+            _option = option?.Value;
+        }
+
+        /// <summary>
+        /// 获取组织架构列表
+        /// </summary>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("ddminstruc")]
+        public async Task<IActionResult> DDMainStruc()
+        {
+            string str_appKey = _configuration["DingDingAuth:appKey"];
+            string str_appSecret = _configuration["DingDingAuth:appSecret"];
+
+            //获取企业内部应用的accessToken
+            IDingTalkClient Iclient = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
+            OapiGettokenRequest request = new OapiGettokenRequest();
+            request.Appkey = str_appKey;
+            request.Appsecret = str_appSecret;
+            request.SetHttpMethod("GET");
+            OapiGettokenResponse tokenResponse = Iclient.Execute(request);
+            if (tokenResponse.IsError)
+            {
+                return Ok(new { status = 0, message = "请检查配置" });
+            }
+            string access_token1 = tokenResponse.AccessToken;
+            IDingTalkClient dingTalkClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/org/union/trunk/get");
+            OapiOrgUnionTrunkGetRequest oapiOrgUnionTrunkGetRequest = new OapiOrgUnionTrunkGetRequest();
+            OapiOrgUnionTrunkGetResponse oapiOrgUnionTrunkGetResponse = dingTalkClient.Execute(oapiOrgUnionTrunkGetRequest, tokenResponse.AccessToken);
+
+            return Ok(new { oapiOrgUnionTrunkGetResponse.RequestId , oapiOrgUnionTrunkGetResponse.Body, oapiOrgUnionTrunkGetResponse.Result });
+
+        }
+
+        /// <summary>
+        /// 获取分支组织列表信息
+        /// </summary>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("ddbranchstruc")]
+        public async Task<IActionResult> DDBranchStruc()
+        {
+            string str_appKey = _configuration["DingDingAuth:appKey"];
+            string str_appSecret = _configuration["DingDingAuth:appSecret"];
+
+            //获取企业内部应用的accessToken
+            IDingTalkClient Iclient = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
+            OapiGettokenRequest request = new OapiGettokenRequest();
+            request.Appkey = str_appKey;
+            request.Appsecret = str_appSecret;
+            request.SetHttpMethod("GET");
+            OapiGettokenResponse tokenResponse = Iclient.Execute(request);
+            if (tokenResponse.IsError)
+            {
+                return Ok(new { status = 0, message = "请检查配置" });
+            }
+            IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/org/union/branch/get");
+            OapiOrgUnionBranchGetRequest req = new OapiOrgUnionBranchGetRequest();
+            OapiOrgUnionBranchGetResponse rsp = client.Execute(req, tokenResponse.AccessToken);
+
+
+            return Ok(new { Result = rsp.Result, Body = rsp.Body, RequestId = rsp.RequestId, SubErrCode = rsp.SubErrCode, Success = rsp.Success });
+        }
+
+
+        /// <summary>
+        /// 获取企业部门列表
+        /// </summary>
+        [ProducesDefaultResponseType]
+        [HttpPost("get-deptlist")]
+        public async Task<IActionResult>  GetDeptList()
+        {
+            try
+            {
+                string appKey = _configuration["DingDingAuth:appKey"];
+                string appSecret = _configuration["DingDingAuth:appSecret"];
+
+                //获取access_token
+                DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
+                OapiGettokenRequest request = new OapiGettokenRequest();
+                request.Appkey = appKey;
+                request.Appsecret = appSecret;
+                request.SetHttpMethod("Get");
+                OapiGettokenResponse response = client.Execute(request);
+                if (response.IsError)
+                {
+                    return BadRequest();
+                }
+
+                //access_token的有效期为7200秒(2小时),有效期内重复获取会返回相同结果并自动续期,过期后获取会返回新的access_token
+                string access_token = response.AccessToken;
+
+                //获取一级部门列表
+                IDingTalkClient v2ListsubClient1 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
+                OapiV2DepartmentListsubRequest reqlistsub1 = new OapiV2DepartmentListsubRequest() { DeptId = 1L, Language = "zh_CN" };
+                OapiV2DepartmentListsubResponse rsplistsub1 = v2ListsubClient1.Execute(reqlistsub1, access_token);
+                List<DeptInfo> templsit = new List<DeptInfo>();
+
+                if (rsplistsub1.Result != null)
+                {
+                    foreach (var deptList in rsplistsub1.Result)
+                    {
+                        DeptInfo deptInfo = new DeptInfo();
+                        deptInfo.deptId = deptList.DeptId;
+                        deptInfo.deptName = deptList.Name;
+                        deptInfo.parentId = deptList.ParentId;
+
+                        //获取一级部门用户列表
+                        IDingTalkClient userListClient1 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listid");
+                        OapiUserListidRequest reqUserList1 = new OapiUserListidRequest() { DeptId = deptList.DeptId };
+                        OapiUserListidResponse rspUserList1 = userListClient1.Execute(reqUserList1, access_token);
+                        if (rspUserList1.Result != null)
+                        {
+                            deptInfo.ddUserList = rspUserList1.Result.UseridList;
+                        }
+
+                        //获取用户详细信息
+                        IDingTalkClient v2UserListClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
+                        OapiV2UserGetRequest reqv2UserList = new OapiV2UserGetRequest();
+                        OapiV2UserGetResponse rspv2UserList = v2UserListClient.Execute(reqv2UserList, access_token);
+
+                        //获取二级部门列表
+                        OapiV2DepartmentListsubRequest reqlistsub = new OapiV2DepartmentListsubRequest() { DeptId = deptList.DeptId, Language = "zh_CN" };
+                        OapiV2DepartmentListsubResponse rsplistsub = v2ListsubClient1.Execute(reqlistsub, access_token);
+
+                        List<DeptBaseResponseDomain> deptBaseResponseDomainList = new List<DeptBaseResponseDomain>();
+                        if (rsplistsub.Result != null)
+                        {
+                            foreach (var deptlist2 in rsplistsub.Result)
+                            {
+                                //添加二级部门
+                                DeptBaseResponseDomain deptBaseResponseDomain2 = new DeptBaseResponseDomain();
+                                deptBaseResponseDomain2.deptId = deptlist2.DeptId;
+                                deptBaseResponseDomain2.Name = deptlist2.Name;
+                                deptBaseResponseDomain2.ParentId = deptlist2.ParentId;
+
+                                //获取三级部门用户列表
+                                OapiUserListidRequest reqUserList2 = new OapiUserListidRequest() { DeptId = deptlist2.DeptId };
+                                OapiUserListidResponse rspUserList2 = userListClient1.Execute(reqUserList2, access_token);
+                                if (rspUserList2.Result != null)
+                                {
+                                    //添加三级部门用户
+                                    deptBaseResponseDomain2.ddUserList = rspUserList2.Result.UseridList;
+                                }
+                                //获取三级部门列表
+                                OapiV2DepartmentListsubRequest reqlistsub3 = new OapiV2DepartmentListsubRequest() { DeptId = deptlist2.DeptId, Language = "zh_CN" };
+                                OapiV2DepartmentListsubResponse rsplistsub3 = v2ListsubClient1.Execute(reqlistsub3, access_token);
+
+                                List<DeptBaseResponseDomain> deptBaseResponseDomain3List = new List<DeptBaseResponseDomain>();
+
+                                if (rsplistsub3.Result != null)
+                                {
+                                    foreach (var dept3List in rsplistsub3.Result)
+                                    {
+                                        //添加三级部门
+                                        DeptBaseResponseDomain deptBaseResponseDomain3 = new DeptBaseResponseDomain();
+                                        deptBaseResponseDomain3.deptId = dept3List.DeptId;
+                                        deptBaseResponseDomain3.Name = dept3List.Name;
+                                        deptBaseResponseDomain3.ParentId = dept3List.ParentId;
+
+                                        //获取部门用户列表
+                                        OapiUserListidRequest reqUserList3 = new OapiUserListidRequest() { DeptId = dept3List.DeptId };
+                                        OapiUserListidResponse rspUserList3 = userListClient1.Execute(reqUserList3, access_token);
+                                        if (rspUserList3.Result != null)
+                                        {
+                                            //添加三级部门的用户
+                                            deptBaseResponseDomain3.ddUserList = rspUserList3.Result.UseridList;
+                                        }
+
+                                        //获取部门列表  四级目录
+                                        OapiV2DepartmentListsubRequest reqlistsub4 = new OapiV2DepartmentListsubRequest() { DeptId = dept3List.DeptId, Language = "zh_CN" };
+                                        OapiV2DepartmentListsubResponse rsplistsu4 = v2ListsubClient1.Execute(reqlistsub4, access_token);
+
+                                        List<DeptBaseResponseDomain> deptBaseResponseDomain4List = new List<DeptBaseResponseDomain>();
+                                        if (rsplistsu4.Result != null)
+                                        {
+
+                                            foreach (var dept4List in rsplistsu4.Result)
+                                            {
+                                                DeptBaseResponseDomain deptBaseResponseDomain4 = new DeptBaseResponseDomain();
+                                                deptBaseResponseDomain4.deptId = dept4List.DeptId;
+                                                deptBaseResponseDomain4.Name = dept4List.Name;
+                                                deptBaseResponseDomain4.ParentId = dept4List.ParentId;
+                                                deptBaseResponseDomain4List.Add(deptBaseResponseDomain4);
+
+                                                //获取三级部门用户列表
+                                                OapiUserListidRequest reqUserList4 = new OapiUserListidRequest() { DeptId = dept4List.DeptId };
+                                                OapiUserListidResponse rspUserList4 = userListClient1.Execute(reqUserList4, access_token);
+                                                if (rspUserList4.Result != null)
+                                                {
+                                                    //添加四级部门的用户
+                                                    deptBaseResponseDomain4.ddUserList = rspUserList4.Result.UseridList;
+                                                }
+                                            }
+                                        }
+                                        //添加四级部门列表
+                                        deptBaseResponseDomain3.LowerDeip_List = deptBaseResponseDomain4List;
+                                        deptBaseResponseDomain3List.Add(deptBaseResponseDomain3);
+                                    }
+                                }
+                                //添加三级部门列表
+                                deptBaseResponseDomain2.LowerDeip_List = deptBaseResponseDomain3List;
+                                deptBaseResponseDomainList.Add(deptBaseResponseDomain2);
+                            }
+                        }
+                        //添加二级部门列表
+                        deptInfo.deptList = deptBaseResponseDomainList;
+                        templsit.Add(deptInfo);
+                    }
+                }
+                return Ok(new { state = 200, deptlist = templsit });
+            }
+            catch (Exception ex)
+            {
+                return Ok(new { state = 1, message=$"查询失败!:状态:{ex.StackTrace}错误:{ex.Message}" }) ;
+            }
+        }
+
+        /// <summary>
+        /// 获取当前用户的父级集合
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("get-parentdept")]
+        public async Task<IActionResult> GetParentDept(JsonElement jsonElement) 
+        {
+            try
+            {
+                if (!jsonElement.TryGetProperty("userId", out JsonElement userId)) return Ok(new { state = 1, message = "参数错误!" });
+
+                string appKey = _configuration["DingDingAuth:appKey"];
+                string appSecret = _configuration["DingDingAuth:appSecret"];
+
+                //获取access_token
+                DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
+                OapiGettokenRequest request = new OapiGettokenRequest();
+                request.Appkey = appKey;
+                request.Appsecret = appSecret;
+                request.SetHttpMethod("Get");
+                OapiGettokenResponse response = client.Execute(request);
+                if (response.IsError)
+                {
+                    return BadRequest();
+                }
+
+                //access_token的有效期为7200秒(2小时),有效期内重复获取会返回相同结果并自动续期,过期后获取会返回新的access_token
+                string access_token = response.AccessToken; 
+
+                IDingTalkClient v2DeartDeptClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listparentbyuser");
+                OapiV2DepartmentListparentbyuserRequest reqDeartDept = new OapiV2DepartmentListparentbyuserRequest() { Userid = userId.ToString() };
+                OapiV2DepartmentListparentbyuserResponse rspDeartDept = v2DeartDeptClient.Execute(reqDeartDept, access_token);
+
+                if (rspDeartDept.Result != null)
+                {
+                    List<long> userParentDept = new List<long>();
+                    //var parentDept = rspDeartDept.Result.ParentList;
+                    foreach (var temp in rspDeartDept.Result.ParentList)
+                    {
+                        foreach (var deptTemp in temp.ParentDeptIdList)
+                        {
+                            userParentDept.Add(deptTemp);
+                        }
+                    }
+
+                    return Ok(new { state = 200, parentList = userParentDept });
+                }
+
+                return Ok(new { state = 2, message = "访问失败!" });
+            }
+            catch (Exception ex)
+            {
+                return Ok(new { state = 2, message = $"访问失败!状态:{ex.StackTrace} 错误:{ex.Message}" });
+            }
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public async Task<IActionResult> SetDeptList(JsonElement jsonElement) 
+        {
+            try
+            {
+                string appKey = _configuration["DingDingAuth:appKey"];
+                string appSecret = _configuration["DingDingAuth:appSecret"];
+
+                //获取access_token
+                DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
+                OapiGettokenRequest request = new OapiGettokenRequest();
+                request.Appkey = appKey;
+                request.Appsecret = appSecret;
+                request.SetHttpMethod("Get");
+                OapiGettokenResponse response = client.Execute(request);
+                if (response.IsError)
+                {
+                    return BadRequest();
+                }
+
+                //access_token的有效期为7200秒(2小时),有效期内重复获取会返回相同结果并自动续期,过期后获取会返回新的access_token
+                string access_token = response.AccessToken;
+
+                //获取部门列表 一级目录
+                IDingTalkClient v2ListsubClient1 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
+                OapiV2DepartmentListsubRequest reqlistsub1 = new OapiV2DepartmentListsubRequest() { DeptId = 1L, Language = "zh_CN" };
+                OapiV2DepartmentListsubResponse rsplistsub1 = v2ListsubClient1.Execute(reqlistsub1, access_token);
+                List<DeptInfo> templsit = new List<DeptInfo>();
+
+                if (rsplistsub1.Result != null)
+                {
+                    foreach (var deptList in rsplistsub1.Result)
+                    {
+                        DeptInfo deptInfo = new DeptInfo();
+                        deptInfo.deptId = deptList.DeptId;
+                        deptInfo.deptName = deptList.Name;
+                        deptInfo.parentId = deptList.ParentId;
+
+                        //获取一级部门用户列表
+                        IDingTalkClient userListClient1 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listid");
+                        OapiUserListidRequest reqUserList1 = new OapiUserListidRequest() { DeptId = deptList.DeptId };
+                        OapiUserListidResponse rspUserList1 = userListClient1.Execute(reqUserList1, access_token);
+                        if (rspUserList1.Result != null)
+                        {
+                            deptInfo.ddUserList = rspUserList1.Result.UseridList;
+                        }
+
+                        //获取用户详细信息
+                        IDingTalkClient v2UserListClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
+                        OapiV2UserGetRequest reqv2UserList = new OapiV2UserGetRequest();
+                        OapiV2UserGetResponse rspv2UserList = v2UserListClient.Execute(reqv2UserList, access_token);
+
+                        //获取二级部门列表
+                        OapiV2DepartmentListsubRequest reqlistsub = new OapiV2DepartmentListsubRequest() { DeptId = deptList.DeptId, Language = "zh_CN" };
+                        OapiV2DepartmentListsubResponse rsplistsub = v2ListsubClient1.Execute(reqlistsub, access_token);
+
+                        List<DeptBaseResponseDomain> deptBaseResponseDomainList = new List<DeptBaseResponseDomain>();
+                        if (rsplistsub.Result != null)
+                        {
+                            foreach (var deptlist2 in rsplistsub.Result)
+                            {
+                                //添加二级部门
+                                DeptBaseResponseDomain deptBaseResponseDomain2 = new DeptBaseResponseDomain();
+                                deptBaseResponseDomain2.deptId = deptlist2.DeptId;
+                                deptBaseResponseDomain2.Name = deptlist2.Name;
+                                deptBaseResponseDomain2.ParentId = deptlist2.ParentId;
+
+                                //获取三级部门用户列表
+                                OapiUserListidRequest reqUserList2 = new OapiUserListidRequest() { DeptId = deptlist2.DeptId };
+                                OapiUserListidResponse rspUserList2 = userListClient1.Execute(reqUserList2, access_token);
+                                if (rspUserList2.Result != null)
+                                {
+                                    //添加三级部门用户
+                                    deptBaseResponseDomain2.ddUserList = rspUserList2.Result.UseridList;
+                                }
+                                //获取三级部门列表
+                                OapiV2DepartmentListsubRequest reqlistsub3 = new OapiV2DepartmentListsubRequest() { DeptId = deptlist2.DeptId, Language = "zh_CN" };
+                                OapiV2DepartmentListsubResponse rsplistsub3 = v2ListsubClient1.Execute(reqlistsub3, access_token);
+
+                                List<DeptBaseResponseDomain> deptBaseResponseDomain3List = new List<DeptBaseResponseDomain>();
+
+                                if (rsplistsub3.Result != null)
+                                {
+                                    foreach (var dept3List in rsplistsub3.Result)
+                                    {
+                                        //添加三级部门
+                                        DeptBaseResponseDomain deptBaseResponseDomain3 = new DeptBaseResponseDomain();
+                                        deptBaseResponseDomain3.deptId = dept3List.DeptId;
+                                        deptBaseResponseDomain3.Name = dept3List.Name;
+                                        deptBaseResponseDomain3.ParentId = dept3List.ParentId;
+
+                                        //获取部门用户列表
+                                        OapiUserListidRequest reqUserList3 = new OapiUserListidRequest() { DeptId = dept3List.DeptId };
+                                        OapiUserListidResponse rspUserList3 = userListClient1.Execute(reqUserList3, access_token);
+                                        if (rspUserList3.Result != null)
+                                        {
+                                            //添加三级部门的用户
+                                            deptBaseResponseDomain3.ddUserList = rspUserList3.Result.UseridList;
+                                        }
+
+                                        //获取部门列表  四级目录
+                                        OapiV2DepartmentListsubRequest reqlistsub4 = new OapiV2DepartmentListsubRequest() { DeptId = dept3List.DeptId, Language = "zh_CN" };
+                                        OapiV2DepartmentListsubResponse rsplistsu4 = v2ListsubClient1.Execute(reqlistsub4, access_token);
+
+                                        List<DeptBaseResponseDomain> deptBaseResponseDomain4List = new List<DeptBaseResponseDomain>();
+                                        if (rsplistsu4.Result != null)
+                                        {
+
+                                            foreach (var dept4List in rsplistsu4.Result)
+                                            {
+                                                DeptBaseResponseDomain deptBaseResponseDomain4 = new DeptBaseResponseDomain();
+                                                deptBaseResponseDomain4.deptId = dept4List.DeptId;
+                                                deptBaseResponseDomain4.Name = dept4List.Name;
+                                                deptBaseResponseDomain4.ParentId = dept4List.ParentId;
+                                                deptBaseResponseDomain4List.Add(deptBaseResponseDomain4);
+
+                                                //获取三级部门用户列表
+                                                OapiUserListidRequest reqUserList4 = new OapiUserListidRequest() { DeptId = dept4List.DeptId };
+                                                OapiUserListidResponse rspUserList4 = userListClient1.Execute(reqUserList4, access_token);
+                                                if (rspUserList4.Result != null)
+                                                {
+                                                    //添加四级部门的用户
+                                                    deptBaseResponseDomain4.ddUserList = rspUserList4.Result.UseridList;
+                                                }
+                                            }
+                                        }
+                                        //添加四级部门列表
+                                        deptBaseResponseDomain3.LowerDeip_List = deptBaseResponseDomain4List;
+                                        deptBaseResponseDomain3List.Add(deptBaseResponseDomain3);
+                                    }
+                                }
+                                //添加三级部门列表
+                                deptBaseResponseDomain2.LowerDeip_List = deptBaseResponseDomain3List;
+                                deptBaseResponseDomainList.Add(deptBaseResponseDomain2);
+                            }
+                        }
+                        //添加二级部门列表
+                        deptInfo.deptList = deptBaseResponseDomainList;
+                        templsit.Add(deptInfo);
+                    }
+                }
+                return Ok(new { state = 200, deptlist = templsit });
+            }
+            catch (Exception ex)
+            {
+                return Ok(new { state = 1, message = $"查询失败!:状态:{ex.StackTrace}错误:{ex.Message}" });
+            }
+        }
+
+
+
+
+
+        public record DeptInfo 
+        {
+            /// <summary>
+            /// 部门ID
+            /// </summary>
+            public long deptId { get; set; }
+
+            /// <summary>
+            /// 部门名称
+            /// </summary>
+            public string deptName { get; set; }
+
+            /// <summary>
+            /// 父部门id,根部门为1
+            /// </summary>
+            public long parentId { get; set; }
+
+            /// <summary>
+            /// 部门集合
+            /// </summary>
+            public List<DeptBaseResponseDomain> deptList { get; set; }
+
+            /// <summary>
+            /// 钉钉用户列表
+            /// </summary>
+            public List<string> ddUserList { get; set; }
+
+
+        }
+
+        public record DeptBaseResponseDomain 
+        {
+            /// <summary>
+            /// 部门ID
+            /// </summary>
+            public long deptId { get; set; }
+
+            /// <summary>
+            /// 部门名称
+            /// </summary>
+            public string Name { get; set; }
+
+            /// <summary>
+            /// 父部门ID
+            /// </summary>
+            public long ParentId { get; set; }
+
+            /// <summary>
+            /// 下级列表
+            /// </summary>
+            public List<DeptBaseResponseDomain> LowerDeip_List { get; set; }
+
+            /// <summary>
+            /// 钉钉用户列表
+            /// </summary>
+            public List<string> ddUserList { get; set; }
+
+        }
+
+    }
+}

+ 1 - 1
TEAMModeBI/Controllers/LoginController.cs

@@ -324,7 +324,7 @@ namespace TEAMModeBI.Controllers
                         var ddbind = teacher.ddbinds.Find(x => x.userid.Equals($"{dingDingBind.userid}") && x.unionid.Equals($"{dingDingBind.unionid}"));
                         if (ddbind != null)
                         {
-                            return Ok(new { status = 200, id_token = implicit_token.id_token, access_token = implicit_token.access_token, expires_in = implicit_token.expires_in, token_type = implicit_token.token_type });
+                            return Ok(new { status = 200, teacher = teacher, id_token = implicit_token.id_token, access_token = implicit_token.access_token, expires_in = implicit_token.expires_in, token_type = implicit_token.token_type });
                         }
                     }
                     return Ok(new { status = 1, dingdinginfo = dingDingBind });

+ 41 - 0
TEAMModelOS.SDK/Models/Cosmos/BI/DeptNode.cs

@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Text;
+
+namespace TEAMModelOS.SDK.Models.Cosmos.BI
+{
+    /// <summary>
+    /// 所有部门信息
+    /// </summary>
+    public class DeptNode: CosmosEntity
+    {
+        public List<DeptInfo> depts { get; set; }
+    }
+
+    /// <summary>
+    /// 单个部门信息
+    /// </summary>
+    public class DeptInfo
+    {
+
+        [Required(ErrorMessage = "{0} 必须填写")]
+        public long id { get; set; }
+
+        /// <summary>
+        /// 父级
+        /// </summary>
+        [Required(ErrorMessage = "{0} 必须填写")]
+        public long pid { get; set; }
+
+        /// <summary>
+        /// 部门名称
+        /// </summary>
+        public string name { get; set; }
+
+        /// <summary>
+        /// 用户列表
+        /// </summary>
+        public List<string> users { get; set; }
+    }
+}

+ 26 - 7
TEAMModelOS.SDK/Models/Cosmos/Common/SheetConfig.cs

@@ -90,18 +90,37 @@ namespace TEAMModelOS.SDK.Models
         /// </summary>
         public List<ConfigContent> contents { get; set; }
     }
+    //public class ConfigContent
+    //{
+    //    public int index { get; set; }
+    //    public int count { get; set; }
+    //    public int type { get; set; }
+    //    public int x { get; set; }
+    //    public int y { get; set; }
+    //    public int width { get; set; }
+    //    public int height { get; set; }
+    //    public int pageNum { get; set; }
+    //    public int vblockCount { get; set; }
+    //    public int hblockCount { get; set; }
+    //    public int id { get; set; }        
+    //}
     public class ConfigContent
     {
         public int index { get; set; }
         public int count { get; set; }
         public int type { get; set; }
-        public int x { get; set; }
-        public int y { get; set; }
-        public int width { get; set; }
-        public int height { get; set; }
         public int pageNum { get; set; }
-        public int vblockCount { get; set; }
-        public int hblockCount { get; set; }
-        public int id { get; set; }        
+        public List<Pos> pos { get; set; } = new List<Pos>();
+        public List<Point> points = new List<Point>();
+    }
+    public  class Pos
+    {
+        public double x { get; set; }
+        public double y { get; set; }
+    }
+    public class Point { 
+        public string ans { get; set; }
+        public int row { get; set; }
+        public List<Pos> pos { get; set; } = new List<Pos>();
     }
 }

+ 1 - 1
TEAMModelOS.SDK/Models/Service/GroupListService.cs

@@ -556,7 +556,7 @@ namespace TEAMModelOS.SDK.Models.Service
                 foreach (MQActivity activity in datas)
                 {
                     //已经完结的不再允许加入,还未开始的。
-                    if (activity.progress.Equals("finish") || activity.progress.Equals("pending"))
+                    if (string.IsNullOrEmpty(activity.progress)|| activity.progress.Equals("finish") || activity.progress.Equals("pending"))
                     {
                         continue;
                     }

+ 1 - 1
TEAMModelOS.SDK/Models/Service/StuListService.cs

@@ -63,7 +63,7 @@ namespace TEAMModelFunction
                 foreach (MQActivity activity in datas)
                 {
                     //已经完结的不再允许加入
-                    if (activity.progress.Equals("finish") || activity.progress.Equals("pending"))
+                    if (string.IsNullOrEmpty(activity.progress)|| activity.progress.Equals("finish") || activity.progress.Equals("pending"))
                     {
                         continue;
                     }

+ 5 - 3
TEAMModelOS/ClientApp/src/common/HtexRender.vue

@@ -33,6 +33,8 @@ export default {
     },
     data() {
         return {
+            stageWidth:810,
+            stageHeight:450,
             stage: '',
             layersinfo: '',
             renderData: {
@@ -53,14 +55,14 @@ export default {
             page === 0 ? (pagenow = page) : (pagenow = page - 1);
             return new Promise(async (r, j) => {
                 // var scaling =(window.innerHeight / res.height).toFixed(2) &&res.height !== ""? (window.innerHeight / res.height).toFixed(2): 0;
-                var scaling = 1280 / jsonUrl.width
+                var scaling = this.stageWidth / jsonUrl.width
                 console.log('缩放比例', scaling)
                 var stageX = (window.innerWidth - jsonUrl.width * scaling) / 2 && jsonUrl.width !== "" ? (window.innerWidth - jsonUrl.width * scaling) / 2 : 0;
                 var callUrl = urlHost;
                 var stage = new Konva.Stage({
                     container: "container",
-                    width: 1280,
-                    height: 720,
+                    width: this.stageWidth,
+                    height: this.stageHeight,
                     scale: scaling,
                     x: 0,
                     y: 0,

+ 34 - 8
TEAMModelOS/ClientApp/src/common/MyHTEXRender.vue

@@ -1,8 +1,8 @@
 <template>
     <div class="htex-render-wrap">
         <HTEXRender :renderJson="curPageData"></HTEXRender>
-        <div class="page-wrap">
-            <Page v-if="indexData.slides" :total="indexData.slides.length" :page-size="1" size="small" @on-change="toPage"/>
+        <div :class="isInner ? 'page-wrap-inner' : 'page-wrap'">
+            <Page v-if="indexData.slides" :total="indexData.slides.length" :current="curPage" :page-size="1" size="small" @on-change="toPage" />
             <!-- <Icon type="md-expand" class="full-screen" @click="fullScreen"/> -->
         </div>
     </div>
@@ -18,6 +18,15 @@ export default {
             type: String,
             default: '',
             required: true
+        },
+        //换页是否内部显示
+        isInner: {
+            type: Boolean,
+            default: false
+        },
+        page: {
+            type: Number,
+            default: 1
         }
     },
     data() {
@@ -33,12 +42,13 @@ export default {
         }
     },
     methods: {
-        fullScreen(){
+        fullScreen() {
             this.$Message.warning('全屏功能开发中')
         },
-        toPage(page){
+        toPage(page) {
             console.log(page)
             this.renderPage(page)
+            this.$emit('onPageChange', page)
         },
         /**
          * @param page 页码 index = page - 1 
@@ -91,22 +101,38 @@ export default {
                 }
             },
             immediate: true
+        },
+        page: {
+            handler(n, o) {
+                this.renderPage(n)
+            }
         }
     }
 }
 </script>
 <style lang="less" scoped>
-.htex-render-wrap{
+.htex-render-wrap {
+    position: relative;
     width: fit-content;
     background: rgba(255, 255, 255, 1);
 }
-.page-wrap{
+.page-wrap {
+    width: 100%;
+    height: fit-content;
+    background: rgba(81, 90, 110, 0.8);
+    padding: 8px 4px;
+    text-align: center;
+}
+.page-wrap-inner {
     width: 100%;
     height: fit-content;
-    background: rgba(81, 90, 110, .8);
+    background: rgba(81, 90, 110, 0.7);
     padding: 8px 4px;
+    position: absolute;
+    bottom: 0px;
+    text-align: center;
 }
-.full-screen{
+.full-screen {
     float: right;
     color: white;
     margin-top: -18px;

+ 2 - 2
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReportCharts/KeyPointPerformChart.vue

@@ -129,8 +129,8 @@ export default {
         },
     },
     mounted() {
-        // this.getknowledge()
-        // this.setMap()
+        this.getknowledge()
+        this.setMap()
     },
     watch: {
         knowledge: {

+ 2 - 2
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReportCharts/RecognizePerformChart.vue

@@ -103,8 +103,8 @@ export default {
         },
     },
     mounted() {
-        // this.getFiled()
-        // this.setMap()
+        this.getFiled()
+        this.setMap()
     },
     watch: {
         filed: {

+ 1 - 1
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperView.vue

@@ -30,7 +30,7 @@
                                 <svg-icon icon-class="test" class="title-icon" />
                                 <span style="margin-top:5px">{{ item.subject.name }}{{getItemTitle.scope == 'school' ? $t('studentWeb.exam.isSubject'):''}}</span>
                                 <div v-show="item.stuAns != undefined">
-                                    <div :class="{ unfinished: item.stuAns.length == 0 ,finished:item.stuAns.length != 0 }">
+                                    <div :class="{ unfinished: item.stuAns.length === 0 ,finished: item.stuAns.length != 0 }">
                                         <Icon style="margin-top: -10px; margin-left: -8px;" type="ios-checkmark" size="36" />
                                     </div>
                                 </div>

+ 2 - 2
TEAMModelOS/ClientApp/src/components/student-web/HomeView/HomeView.vue

@@ -157,8 +157,8 @@
                                             {{ item.name }}
                                             <p>{{ item.teaName }}</p>
                                         </div>
-                                        <p class="time">上课时间:{{ item.classTime }}</p>
-                                        <p class="place">上课教室:{{ item.roomName }}</p>
+                                        <p class="time">{{ $t("studentWeb.baseInfo.classTime") }}:{{ item.classTime }}</p>
+                                        <p class="place">{{ $t("studentWeb.courseContent.classroom") }}:{{ item.roomName }}</p>
                                     </div>
                                 </div>
                                 <div v-else class="no-data">{{ $t("studentWeb.public.noData") }}</div>

+ 4 - 4
TEAMModelOS/ClientApp/src/components/student-web/HomeView/newHomeView.vue

@@ -63,8 +63,8 @@
                                             {{ item.name }}
                                             <p>{{ item.teaName }}</p>
                                         </div>
-                                        <p class="time">上课时间:{{ item.classTime }}</p>
-                                        <p class="place">上课教室:{{ item.roomName }}</p>
+                                        <p class="time">{{ $t("studentWeb.baseInfo.classTime") }}:{{ item.classTime }}</p>
+                                        <p class="place">{{ $t("studentWeb.courseContent.classroom") }}:{{ item.roomName }}</p>
                                     </div>
                                 </div>
                                 <div v-else class="no-data">{{ $t("studentWeb.public.noData") }}</div>
@@ -622,7 +622,7 @@ export default {
         }
     }
 
-    .calenderCard {
+    // .calenderCard {
         /* .ivu-card-body {
             padding: 28px;
             padding-bottom: 0px;
@@ -635,7 +635,7 @@ export default {
                 padding-bottom: 0px;
             }
         } */
-    }
+    // }
 
     .addClass {
         .ivu-input-icon {

+ 2 - 2
TEAMModelOS/ClientApp/src/utils/evTools.js

@@ -11,8 +11,8 @@ import { app } from '@/boot-app.js'
 
 export default {
 	/* 根据登录后的用户信息获取blobHOST域名 */
-	getBlobHost(){
-		let s = store.state.user.userProfile.blob_uri || store.state.user.studentProfile.blob_uri
+	getBlobHost(url){
+		let s = url || store.state.user.userProfile.blob_uri || store.state.user.studentProfile.blob_uri
 		let pattern = /[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?/
 		return s.split('//')[0] + '//' + s.match(pattern)[0]
 	},

+ 4 - 4
TEAMModelOS/ClientApp/src/view/ability/TestPaper.vue

@@ -184,7 +184,7 @@
 					let sasData = {
 						sas: '?' + this.$store.state.user.userProfile.osblob_sas,
 						name: 'teammodelos',
-						url: s.split(s.substring(s.lastIndexOf('/')))[0]
+						url: this.$evTools.getBlobHost(s)
 					}
 					//初始化Blob
 					let containerClient = new blobTool(sasData.url, sasData.name, sasData.sas, 'school')
@@ -209,7 +209,7 @@
 					let sasData = {
 						sas: '?' + this.$store.state.user.userProfile.osblob_sas,
 						name: 'teammodelos',
-						url: s.split(s.substring(s.lastIndexOf('/')))[0]
+						url: this.$evTools.getBlobHost(s)
 					}
 					//初始化Blob
 					let containerClient = new blobTool(sasData.url, sasData.name, sasData.sas, 'school')
@@ -262,7 +262,7 @@
 					let sasData = {
 						sas: '?' + this.$store.state.user.userProfile.osblob_sas,
 						name: 'teammodelos',
-						url: s.split(s.substring(s.lastIndexOf('/')))[0]
+						url: this.$evTools.getBlobHost(s)
 					}
 					//初始化Blob
 					let containerClient = new blobTool(
@@ -312,7 +312,7 @@
 						let sasData = {
 							sas: '?' + this.$store.state.user.userProfile.osblob_sas,
 							name: 'teammodelos',
-							url: s.split(s.substring(s.lastIndexOf('/')))[0]
+							url: this.$evTools.getBlobHost(s)
 						}
 						//初始化Blob
 						let containerClient = new blobTool(

+ 16 - 18
TEAMModelOS/ClientApp/src/view/classrecord/ClassRecord.less

@@ -17,7 +17,7 @@
 
     .course-name {
         background: #1CC0F3;
-        padding: 4px 13px;
+        padding: 2px 15px;
         margin-right: 10px;
         color: white;
         border-radius: 18px;
@@ -26,15 +26,14 @@
     }
 
     .record-name {
-        color: white;
         font-size: 18px;
         font-weight: bold;
         vertical-align: top;
     }
 
-    .label-text {
-        color: white;
-    }
+    // .label-text {
+    //     color: white;
+    // }
 
     .label-value {
         color: #1CC0F3;
@@ -115,13 +114,13 @@
 }
 
 .content-title {
-    border-left: 10px solid #1CC0F3;
-    color: white;
+    border-left: 8px solid #1CC0F3;
+    // color: white;
     padding-left: 14px;
     line-height: 20px;
     font-size: 20px;
     margin-top: 25px;
-    margin-bottom: 20px;
+    margin-bottom: 6px;
 }
 
 .page-content {
@@ -159,9 +158,9 @@
 
 .interaction-record-wrap {
     width: 100%;
-    box-shadow: 5px 5px 500px #404040 inset;
+    box-shadow: 5px 5px 500px #f0f0f0 inset;
     border-radius: 4px;
-    border: 1px solid #404040;
+    border: 1px solid #f0f0f0;
     margin-bottom: 10px;
     position: relative;
     /*padding: 40px 80px 20px 50px;*/
@@ -216,11 +215,11 @@
     right: 10px;
     top: 0px;
     text-align: center;
-    background: rgba(255, 255, 255, 0.1);
+    background: white;
     z-index:999;
     .type-icon {
         font-size: 30px;
-        color: white;
+        // color: white;
         display: block;
         cursor: pointer;
         margin-bottom: 15px;
@@ -303,7 +302,7 @@
         margin-top: 5px;
 
         .question-info {
-            color: white;
+            // color: white;
         }
 
         &::before {
@@ -337,7 +336,7 @@
     display: none;
 
     .tools-icon {
-        color: white;
+        // color: white;
         font-size: 16px;
         cursor: pointer;
         margin-right: 15px;
@@ -393,13 +392,12 @@
     position: absolute;
     left: 0px;
     bottom: -24px;
-    color: white;
 }
 .answer-time {
     position: absolute;
     right: 0px;
     bottom: -24px;
-    color: white;
+    // color: white;
 }
 
 .message-info {
@@ -407,11 +405,11 @@
 }
 
 .student-name {
-    color: white
+    color: #1cc0f3;
 }
 
 .text-label {
-    color: white;
+    // color: white;
     margin-bottom: 10px;
     /*display:inline-block;
     vertical-align:top;*/

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 548 - 588
TEAMModelOS/ClientApp/src/view/classrecord/ClassRecord.vue


+ 3 - 3
TEAMModelOS/ClientApp/src/view/classrecord/CorrectRate.vue

@@ -10,9 +10,9 @@
                 option: {
                     title: {
                         text: '正确率统计',
-                        textStyle: {
-                            color: 'white'
-                        },
+                        // textStyle: {
+                        //     color: 'white'
+                        // },
                         right: '70',
                         top:'10'
                     },

+ 19 - 19
TEAMModelOS/ClientApp/src/view/classrecord/OptionCount.vue

@@ -10,9 +10,9 @@
                 option: {
                     title: {
                         text: '选项分布',
-                        textStyle: {
-                            color: 'white'
-                        },
+                        // textStyle: {
+                        //     color: 'white'
+                        // },
                         right: '85',
                         top:'10'
                     },
@@ -34,26 +34,26 @@
                     xAxis: {
                         type: 'value',
                         boundaryGap: [0, 0.01],
-                        axisLabel: {
-                            color:'white'
-                        },
-                        axisLine: {
-                            lineStyle: {
-                                color:'white'
-                            }
-                        }
+                        // axisLabel: {
+                        //     color:'white'
+                        // },
+                        // axisLine: {
+                        //     lineStyle: {
+                        //         color:'white'
+                        //     }
+                        // }
                     },
                     yAxis: {
                         type: 'category',
                         data: ['A', 'B', 'C', 'D'],
-                        axisLabel: {
-                            color:'white'
-                        },
-                        axisLine: {
-                            lineStyle: {
-                                color:'white'
-                            }
-                        }
+                        // axisLabel: {
+                        //     color:'white'
+                        // },
+                        // axisLine: {
+                        //     lineStyle: {
+                        //         color:'white'
+                        //     }
+                        // }
                     },
                     series: [
                         {

+ 1 - 1
TEAMModelOS/ClientApp/src/view/evaluation/bank/index.less

@@ -24,7 +24,7 @@
 
     .ev-list-operation {
         position: fixed;
-		top: 65px;
+		top: 45px;
         right: 10px;
         height: 60px;
         display: flex;

+ 2 - 2
TEAMModelOS/ClientApp/src/view/evaluation/bank/index.vue

@@ -109,13 +109,13 @@
 			},
 
 			/** 前往组卷页面 */
-			goCreatePaper(type,isFromItemBank) {
+			goCreatePaper(type) {
 				this.$router.push({
 					name: this.$route.name === 'personalBank' ? 'newPrivatePaper' : 'newSchoolPaper',
 					params:{
 						scope : this.$route.name === 'personalBank' ? 'private' : 'school',
 						type: type,
-						isFromItemBank:isFromItemBank
+						isFromItemBank:this.currentTab === 'exercise'
 					}
 				})
 			},

+ 1 - 0
TEAMModelOS/ClientApp/src/view/evaluation/index/TestPaper.vue

@@ -219,6 +219,7 @@
 					localStorage.setItem('c_edit_paper', JSON.stringify(this.paperInfo))
 				}
 				console.log(this.paperInfo)
+				this.$store.commit('clearAllConfig')
 				this.$router.push({
 					name: 'answerSheet',
 					params: {

+ 1 - 1
TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.less

@@ -253,7 +253,7 @@
 }
 .record-action-wrap{
     float:right;
-    color:white;
+    // color:white;
     font-size:14px;
     padding-right:30px;
 }

+ 7 - 5
TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.vue

@@ -126,11 +126,11 @@
                                 <List>
                                     <ListItem v-for="(item,index) in itemNum" :key="index">
                                         <ListItemMeta @click.native="toClassRecoerd">
-                                            <p slot="title" class="record-name">力的组成</p>
-                                            <span slot="avatar" style="margin-top:4px;display: inline-block;margin-left:10px;">
-                                                <Icon custom="iconfont icon-whiteboard" size="30" color="white" />
-                                            </span>
-                                            <div slot="description" style="color:white;">
+                                            <p slot="title" class="record-name" style="padding-left:10px">力的组成</p>
+                                            <!-- <span slot="avatar" style="margin-top:4px;display: inline-block;margin-left:10px;">
+                                                <Icon custom="iconfont icon-whiteboard" size="30"/>
+                                            </span> -->
+                                            <div slot="description" style="padding-left:10px">
                                                 <span class="hiteacher-version">
                                                     V3.0.32
                                                 </span>
@@ -1564,6 +1564,8 @@ export default {
         }
     },
     created() {
+        this.itemNum = this.$store.state.config.srvAdrType == 'product' ? 0 : 5
+
         this.getAllStuList()
         //直接读取登录成功拿到得学校基础信息
         this.$store.dispatch('user/getSchoolProfile').then(res => {

+ 2 - 1
TEAMModelOS/ClientApp/src/view/questionnaire/ManageQuestionnaire.vue

@@ -543,7 +543,8 @@
 						let sasData = {
 							sas: '?' + this.$store.state.user.osblob_sas,
 							name: 'teammodelos',
-							url: s.split(s.substring(s.lastIndexOf('/')))[0]
+							// url: s.split(s.substring(s.lastIndexOf('/')))[0]
+							url: this.$evTools.getBlobHost(s)
 						}
 						//初始化Blob
 						let containerClient = new blobTool(

+ 282 - 259
TEAMModelOS/Controllers/Third/ScController.cs

@@ -105,7 +105,7 @@ namespace TEAMModelOS.Controllers.Third
             GetProjectInfoByTrainComID.code = Code;
             GetProjectInfoByTrainComID.title = "5.3.1.1获取项目列表";
 
-            /*
+          
             // 5.3.1.2获取学员名单
             Code = "GetTeachersListByProject";
             parameterMap = new Dictionary<string, object>();
@@ -141,45 +141,52 @@ namespace TEAMModelOS.Controllers.Third
             GetDiagnosisListByProject_V2.code = Code;
             GetDiagnosisListByProject_V2.title = "5.3.1.3通过项目编号获取学员测评能力项V2";
 
-
+            ScsResult UpdateTeacherSituation = null;
             // 5.3.1.4学员培训基本情况回写
-            Code = "UpdateTeacherSituation";
-            parameterMap = new Dictionary<string, object>();
-            parameterMap.Add("TrainComID", trainComID);
-            parameterMap.Add("PXID", "23");
-            parameterMap.Add("TID", "145504");
-            parameterMap.Add("TeacherName", "柏成伟");
-            parameterMap.Add("CourseHour", "50");
-            parameterMap.Add("ResearchText", "学习成果描述,字符长度<=300");
-            parameterMap.Add("ComPassed", "2");//0、未认定  1、合格  2、优秀  3、不合格  4、其他
-            ScsResult UpdateTeacherSituation = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
-            UpdateTeacherSituation.code = Code;
-            UpdateTeacherSituation.title = "5.3.1.4学员培训基本情况回写";
-
-
-            // 5.3.1.5学员能力点测评结果回写
-            Code = "UpdateTeacherDiagnosis";
-            parameterMap = new Dictionary<string, object>();
-            parameterMap.Add("TrainComID", trainComID);
-            parameterMap.Add("PXID", "65314");
-            parameterMap.Add("TID", "17542");
-            parameterMap.Add("DiagnosisNum", "A3");
-            //0"未认定", 1"合格", 2"优秀", 3"不合格"
-            parameterMap.Add("zpresult", "1");
-            parameterMap.Add("hpresult", "1");
-            parameterMap.Add("xzpresult", "1");
-            List<Dictionary<string, string>> pfilesA = new List<Dictionary<string, string>>();
-            parameterMap.Add("pfiles", pfilesA);
-            Dictionary<string, string> pfileMapA = new Dictionary<string, string>();
-            pfileMapA.Add("url", "https://scnltsfiles.scedu.com.cn/upload/infofj/202104011628463774.pdf");
-            pfileMapA.Add("fileName", "XXX.pdf");
-            pfileMapA.Add("fileSize", "247767");
-            pfileMapA.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
-            pfileMapA.Add("fileType", "pdf");
-            pfilesA.Add(pfileMapA);
-            ScsResult UpdateTeacherDiagnosis = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
-            UpdateTeacherDiagnosis.code = Code;
-            UpdateTeacherDiagnosis.title = "5.3.1.5学员能力点测评结果回写";
+            try {
+                Code = "UpdateTeacherSituation";
+                parameterMap = new Dictionary<string, object>();
+                parameterMap.Add("TrainComID", trainComID);
+                parameterMap.Add("PXID", "23");
+                parameterMap.Add("TID", "145504");
+                parameterMap.Add("TeacherName", "柏成伟");
+                parameterMap.Add("CourseHour", "50");
+                parameterMap.Add("ResearchText", "学习成果描述,字符长度<=300");
+                parameterMap.Add("ComPassed", "2");//0、未认定  1、合格  2、优秀  3、不合格  4、其他
+                UpdateTeacherSituation = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
+                UpdateTeacherSituation.code = Code;
+                UpdateTeacherSituation.title = "5.3.1.4学员培训基本情况回写";
+            } catch (Exception ex) { }
+            ScsResult UpdateTeacherDiagnosis = null;
+            try
+            {
+
+                // 5.3.1.5学员能力点测评结果回写
+                Code = "UpdateTeacherDiagnosis";
+                parameterMap = new Dictionary<string, object>();
+                parameterMap.Add("TrainComID", trainComID);
+                parameterMap.Add("PXID", "65314");
+                parameterMap.Add("TID", "17542");
+                parameterMap.Add("DiagnosisNum", "A3");
+                //0"未认定", 1"合格", 2"优秀", 3"不合格"
+                parameterMap.Add("zpresult", "1");
+                parameterMap.Add("hpresult", "1");
+                parameterMap.Add("xzpresult", "1");
+                List<Dictionary<string, string>> pfilesA = new List<Dictionary<string, string>>();
+                parameterMap.Add("pfiles", pfilesA);
+                Dictionary<string, string> pfileMapA = new Dictionary<string, string>();
+                pfileMapA.Add("url", "https://scnltsfiles.scedu.com.cn/upload/infofj/202104011628463774.pdf");
+                pfileMapA.Add("fileName", "XXX.pdf");
+                pfileMapA.Add("fileSize", "247767");
+                pfileMapA.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
+                pfileMapA.Add("fileType", "pdf");
+                pfilesA.Add(pfileMapA);
+                UpdateTeacherDiagnosis = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
+                UpdateTeacherDiagnosis.code = Code;
+                UpdateTeacherDiagnosis.title = "5.3.1.5学员能力点测评结果回写";
+            }
+            catch (Exception ex) { 
+            }
 
 
             // 5.3.1.6获取能力测评体系字典值数据
@@ -243,238 +250,254 @@ namespace TEAMModelOS.Controllers.Third
             GetSingleTeacherByProject.code = Code;
             GetSingleTeacherByProject.title = "5.3.1.11获取跳转学员信息";
 
-
-            // 5.3.1.12学员培训基本情况批量回写
-            Code = "UpdateTeacherListSituation";
+            ScsResult UpdateTeacherListSituation = null;
             Dictionary<string, object> parameterContent = new Dictionary<string, object>();
             List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
-            parameterContent.Add("TrainComID", trainComID);
-            parameterContent.Add("List", list);
-            // {"TrainComID":"39","List":[{"ResearchText":"","ComPassed":1,"PXID":"35455","CourseHour":"50.0","TID":"411105","TeacherName":"付绍令"}]}
-            {
-                Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
-
-                parameterMapData.Add("PXID", "23");
-                parameterMapData.Add("TID", "145504");
-                parameterMapData.Add("TeacherName", "柏成伟");
-                parameterMapData.Add("CourseHour", "50");
-                parameterMapData.Add("ResearchText", "学习成果描述,字符长度<=300");
-                parameterMapData.Add("ComPassed", "2");//0、未认定  1、合格  2、优秀  3、不合格  4、其他
-                list.Add(parameterMapData);
-                parameterMapData = new Dictionary<string, object>();
-
-                parameterMapData.Add("PXID", "23");
-                parameterMapData.Add("TID", "145504");
-                parameterMapData.Add("TeacherName", "柏成伟");
-                parameterMapData.Add("CourseHour", "50");
-                parameterMapData.Add("ResearchText", "学习成果描述,字符长度<=300");
-                parameterMapData.Add("ComPassed", "2");//0、未认定  1、合格  2、优秀  3、不合格  4、其他
-                list.Add(parameterMapData);
-                parameterMapData = new Dictionary<string, object>();
-
-                parameterMapData.Add("PXID", "22");
-                parameterMapData.Add("TID", "21348");
-                parameterMapData.Add("TeacherName", "邓泽燕");
-                parameterMapData.Add("CourseHour", "50");
-                parameterMapData.Add("ResearchText", "学习成果描述,字符长度<=300");
-                parameterMapData.Add("ComPassed", "2");//0、未认定  1、合格  2、优秀  3、不合格  4、其他
-                list.Add(parameterMapData);
-                parameterMapData = new Dictionary<string, object>();
-                parameterMapData.Add("PXID", "35546");
-                parameterMapData.Add("TID", "411182");
-                parameterMapData.Add("TeacherName", "刘晓莉");
-                parameterMapData.Add("CourseHour", "50");
-                parameterMapData.Add("ResearchText", "");
-                parameterMapData.Add("ComPassed", "1");//0、未认定  1、合格  2、优秀  3、不合格  4、其他
-                list.Add(parameterMapData);
+            try
+            { // 5.3.1.12学员培训基本情况批量回写
+                Code = "UpdateTeacherListSituation";
+              
+              
+                parameterContent.Add("TrainComID", trainComID);
+                parameterContent.Add("List", list);
+                // {"TrainComID":"39","List":[{"ResearchText":"","ComPassed":1,"PXID":"35455","CourseHour":"50.0","TID":"411105","TeacherName":"付绍令"}]}
+                {
+                    Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
+
+                    parameterMapData.Add("PXID", "23");
+                    parameterMapData.Add("TID", "145504");
+                    parameterMapData.Add("TeacherName", "柏成伟");
+                    parameterMapData.Add("CourseHour", "50");
+                    parameterMapData.Add("ResearchText", "学习成果描述,字符长度<=300");
+                    parameterMapData.Add("ComPassed", "2");//0、未认定  1、合格  2、优秀  3、不合格  4、其他
+                    list.Add(parameterMapData);
+                    parameterMapData = new Dictionary<string, object>();
+
+                    parameterMapData.Add("PXID", "23");
+                    parameterMapData.Add("TID", "145504");
+                    parameterMapData.Add("TeacherName", "柏成伟");
+                    parameterMapData.Add("CourseHour", "50");
+                    parameterMapData.Add("ResearchText", "学习成果描述,字符长度<=300");
+                    parameterMapData.Add("ComPassed", "2");//0、未认定  1、合格  2、优秀  3、不合格  4、其他
+                    list.Add(parameterMapData);
+                    parameterMapData = new Dictionary<string, object>();
+
+                    parameterMapData.Add("PXID", "22");
+                    parameterMapData.Add("TID", "21348");
+                    parameterMapData.Add("TeacherName", "邓泽燕");
+                    parameterMapData.Add("CourseHour", "50");
+                    parameterMapData.Add("ResearchText", "学习成果描述,字符长度<=300");
+                    parameterMapData.Add("ComPassed", "2");//0、未认定  1、合格  2、优秀  3、不合格  4、其他
+                    list.Add(parameterMapData);
+                    parameterMapData = new Dictionary<string, object>();
+                    parameterMapData.Add("PXID", "35546");
+                    parameterMapData.Add("TID", "411182");
+                    parameterMapData.Add("TeacherName", "刘晓莉");
+                    parameterMapData.Add("CourseHour", "50");
+                    parameterMapData.Add("ResearchText", "");
+                    parameterMapData.Add("ComPassed", "1");//0、未认定  1、合格  2、优秀  3、不合格  4、其他
+                    list.Add(parameterMapData);
+                }
+                UpdateTeacherListSituation = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterContent);
+                UpdateTeacherListSituation.code = Code;
+                UpdateTeacherListSituation.title = "5.3.1.12学员培训基本情况批量回写";
             }
-            ScsResult UpdateTeacherListSituation = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterContent);
-            UpdateTeacherListSituation.code = Code;
-            UpdateTeacherListSituation.title = "5.3.1.12学员培训基本情况批量回写";
-
-
-
-            // 5.3.1.13学员能力点测评结果批量回写
-            Code = "UpdateTeacherListDiagnosis";
-            parameterContent = new Dictionary<string, object>();
-            list = new List<Dictionary<string, object>>();
-            parameterContent.Add("TrainComID", trainComID);
-            parameterContent.Add("List", list);
-            {
-                Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
+            catch (Exception ex) { }
+
+            ScsResult UpdateTeacherListDiagnosis = null;
+            try
+            { // 5.3.1.13学员能力点测评结果批量回写
+                Code = "UpdateTeacherListDiagnosis";
+                parameterContent = new Dictionary<string, object>();
+                list = new List<Dictionary<string, object>>();
+                parameterContent.Add("TrainComID", trainComID);
+                parameterContent.Add("List", list);
+                {
+                    Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
+
+                    parameterMapData.Add("PXID", "3079");
+                    parameterMapData.Add("TID", "14597");
+                    parameterMapData.Add("DiagnosisNum", "A6");
+                    //0"未认定", 1"合格", 2"优秀", 3"不合格"
+                    parameterMapData.Add("zpresult", "1");
+                    parameterMapData.Add("hpresult", "2");
+                    parameterMapData.Add("xzpresult", "2");
+                    List<Dictionary<string, object>> pfiles = new List<Dictionary<string, object>>();
+                    parameterMapData.Add("pfiles", pfiles);
+                    Dictionary<string, object> pfileMap = new Dictionary<string, object>();
+                    pfileMap.Add("url", "https://srt-read-online.3ren.cn/basebusiness/material/20210422/1619055398463iE97VWe36i001.mp4");
+                    pfileMap.Add("fileName", "697a58c2375f7a031456c893e1e1860c.mp4");
+                    pfileMap.Add("fileSize", "17036168");
+                    pfileMap.Add("md5", "");
+                    pfileMap.Add("fileType", "video");
+                    pfiles.Add(pfileMap);
+
+                    list.Add(parameterMapData);
+
+                    pfileMap = new Dictionary<string, object>();
+                    pfileMap.Add("url", "https://srt-read-online.3ren.cn/basebusiness/material/20210422/1619055446704gbKuNF8eas001.pdf");
+                    pfileMap.Add("fileName", "A6技术支持的课堂反思.pdf");
+                    pfileMap.Add("fileSize", "32192");
+                    pfileMap.Add("md5", "");
+                    pfileMap.Add("fileType", "pdf");
+                    pfiles.Add(pfileMap);
+
+                    list.Add(parameterMapData);
+                }
 
-                parameterMapData.Add("PXID", "3079");
-                parameterMapData.Add("TID", "14597");
-                parameterMapData.Add("DiagnosisNum", "A6");
-                //0"未认定", 1"合格", 2"优秀", 3"不合格"
-                parameterMapData.Add("zpresult", "1");
-                parameterMapData.Add("hpresult", "2");
-                parameterMapData.Add("xzpresult", "2");
-                List<Dictionary<string, object>> pfiles = new List<Dictionary<string, object>>();
-                parameterMapData.Add("pfiles", pfiles);
-                Dictionary<string, object> pfileMap = new Dictionary<string, object>();
-                pfileMap.Add("url", "https://srt-read-online.3ren.cn/basebusiness/material/20210422/1619055398463iE97VWe36i001.mp4");
-                pfileMap.Add("fileName", "697a58c2375f7a031456c893e1e1860c.mp4");
-                pfileMap.Add("fileSize", "17036168");
-                pfileMap.Add("md5", "");
-                pfileMap.Add("fileType", "video");
-                pfiles.Add(pfileMap);
-
-                list.Add(parameterMapData);
-
-                pfileMap = new Dictionary<string, object>();
-                pfileMap.Add("url", "https://srt-read-online.3ren.cn/basebusiness/material/20210422/1619055446704gbKuNF8eas001.pdf");
-                pfileMap.Add("fileName", "A6技术支持的课堂反思.pdf");
-                pfileMap.Add("fileSize", "32192");
-                pfileMap.Add("md5", "");
-                pfileMap.Add("fileType", "pdf");
-                pfiles.Add(pfileMap);
-
-                list.Add(parameterMapData);
+                {
+                    Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
+
+                    parameterMapData.Add("PXID", "3062");
+                    parameterMapData.Add("TID", "401268");
+                    parameterMapData.Add("DiagnosisNum", "A1");
+                    //0"未认定", 1"合格", 2"优秀", 3"不合格"
+                    parameterMapData.Add("zpresult", "1");
+                    parameterMapData.Add("hpresult", "2");
+                    parameterMapData.Add("xzpresult", "2");
+                    List<Dictionary<string, object>> pfiles = new List<Dictionary<string, object>>();
+                    parameterMapData.Add("pfiles", pfiles);
+                    Dictionary<string, object> pfileMap = new Dictionary<string, object>();
+                    pfileMap.Add("url", "https://srt-read-online.3ren.cn/basebusiness/material/20210422/1619058650000bphKFbDVSa001.pdf");
+                    pfileMap.Add("fileName", "学情分析.pdf");
+                    pfileMap.Add("fileSize", "94926");
+                    pfileMap.Add("md5", "");
+                    pfileMap.Add("fileType", "pdf");
+                    pfiles.Add(pfileMap);
+
+                    list.Add(parameterMapData);
+
+                    pfileMap = new Dictionary<string, object>();
+                    pfileMap.Add("url", "https://srt-read-online.3ren.cn/basebusiness/material/20210422/1619058698452gF19jmiuML001.mp4");
+                    pfileMap.Add("fileName", "种子萌发学情分析.mp4");
+                    pfileMap.Add("fileSize", "12692368");
+                    pfileMap.Add("md5", "");
+                    pfileMap.Add("fileType", "video");
+                    pfiles.Add(pfileMap);
+                    list.Add(parameterMapData);
+                }
+                 UpdateTeacherListDiagnosis = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterContent);
+                UpdateTeacherListDiagnosis.code = Code;
+                UpdateTeacherListDiagnosis.title = "5.3.1.13学员能力点测评结果批量回写";
             }
-
-            {
-                Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
-
-                parameterMapData.Add("PXID", "3062");
-                parameterMapData.Add("TID", "401268");
-                parameterMapData.Add("DiagnosisNum", "A1");
-                //0"未认定", 1"合格", 2"优秀", 3"不合格"
-                parameterMapData.Add("zpresult", "1");
-                parameterMapData.Add("hpresult", "2");
-                parameterMapData.Add("xzpresult", "2");
-                List<Dictionary<string, object>> pfiles = new List<Dictionary<string, object>>();
-                parameterMapData.Add("pfiles", pfiles);
-                Dictionary<string, object> pfileMap = new Dictionary<string, object>();
-                pfileMap.Add("url", "https://srt-read-online.3ren.cn/basebusiness/material/20210422/1619058650000bphKFbDVSa001.pdf");
-                pfileMap.Add("fileName", "学情分析.pdf");
-                pfileMap.Add("fileSize", "94926");
-                pfileMap.Add("md5", "");
-                pfileMap.Add("fileType", "pdf");
-                pfiles.Add(pfileMap);
-
-                list.Add(parameterMapData);
-
-                pfileMap = new Dictionary<string, object>();
-                pfileMap.Add("url", "https://srt-read-online.3ren.cn/basebusiness/material/20210422/1619058698452gF19jmiuML001.mp4");
-                pfileMap.Add("fileName", "种子萌发学情分析.mp4");
-                pfileMap.Add("fileSize", "12692368");
-                pfileMap.Add("md5", "");
-                pfileMap.Add("fileType", "video");
-                pfiles.Add(pfileMap);
-                list.Add(parameterMapData);
+            catch (Exception ex) { 
             }
-            ScsResult UpdateTeacherListDiagnosis = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterContent);
-            UpdateTeacherListDiagnosis.code = Code;
-            UpdateTeacherListDiagnosis.title = "5.3.1.13学员能力点测评结果批量回写";
-
 
 
-
-            // 5.3.1.14学员校本研修PDF回写
-            Code = "UploadSBTARPDF";
-            parameterMap = new Dictionary<string, object>();
-            parameterMap.Add("TrainComID", trainComID);
-            parameterMap.Add("PXID", "16");
-            parameterMap.Add("TID", "16");
-
-            parameterMap.Add("url", "http://image1.cersp.com.cn/scpx/images/article/file/20190318/upload__51f98fc8_1697695ae73__7ffe_00001297.pdf");
-            parameterMap.Add("fileName", "XXX.pdf");
-            parameterMap.Add("fileSize", "247767");
-            parameterMap.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
-            parameterMap.Add("fileType", "pdf");
-            ScsResult UploadSBTARPDF = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
-            UploadSBTARPDF.code = Code;
-            UploadSBTARPDF.title = "5.3.1.14学员校本研修PDF回写";
-
-
-
-            // 5.3.1.15学员校本教研PDF批量回写
-            Code = "UploadSBTARPDFList";
-            parameterContent = new Dictionary<string, object>();
-            list = new List<Dictionary<string, object>>();
-            parameterContent.Add("TrainComID", trainComID);
-            parameterContent.Add("List", list);
-            {
-                Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
-                parameterMapData.Add("PXID", "65309");
-                parameterMapData.Add("TID", "253940");
-                parameterMapData.Add("url", "https://scnltsfiles.scedu.com.cn/upload/infofj/202104011628463774.pdf");
-                parameterMapData.Add("fileName", "XXX.pdf");
-                parameterMapData.Add("fileSize", "247767");
-                parameterMapData.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
-                parameterMapData.Add("fileType", "pdf");
-                list.Add(parameterMapData);
+            ScsResult UploadSBTARPDF = null;
+            try
+            {   // 5.3.1.14学员校本研修PDF回写
+                Code = "UploadSBTARPDF";
+                parameterMap = new Dictionary<string, object>();
+                parameterMap.Add("TrainComID", trainComID);
+                parameterMap.Add("PXID", "16");
+                parameterMap.Add("TID", "16");
+
+                parameterMap.Add("url", "http://image1.cersp.com.cn/scpx/images/article/file/20190318/upload__51f98fc8_1697695ae73__7ffe_00001297.pdf");
+                parameterMap.Add("fileName", "XXX.pdf");
+                parameterMap.Add("fileSize", "247767");
+                parameterMap.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
+                parameterMap.Add("fileType", "pdf");
+                UploadSBTARPDF = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
+                UploadSBTARPDF.code = Code;
+                UploadSBTARPDF.title = "5.3.1.14学员校本研修PDF回写";
             }
-            {
-                Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
-                parameterMapData.Add("PXID", "65306");
-                parameterMapData.Add("TID", "32393");
-                parameterMapData.Add("url", "https://scnltsfiles.scedu.com.cn/upload/infofj/202104011628463774.pdf");
-                parameterMapData.Add("fileName", "XXX.pdf");
-                parameterMapData.Add("fileSize", "247767");
-                parameterMapData.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
-                parameterMapData.Add("fileType", "pdf");
-                list.Add(parameterMapData);
+            catch (Exception ex) { 
             }
-            ScsResult UploadSBTARPDFList = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterContent);
-            UploadSBTARPDFList.code = Code;
-            UploadSBTARPDFList.title = "5.3.1.15学员校本教研PDF批量回写";
-
 
-
-            // 5.3.1.16学员课堂实录回写
-            Code = "UploadKTSL";
-            parameterMap = new Dictionary<string, object>();
-            parameterMap.Add("TrainComID", trainComID);
-            parameterMap.Add("PXID", "16");
-            parameterMap.Add("TID", "16");
-            parameterMap.Add("url", "https://xxx.mp4");
-            parameterMap.Add("url2", "https://xxx.mp4");
-            parameterMap.Add("fileName", "XXX.mp4");
-            parameterMap.Add("fileSize", "247767");
-            parameterMap.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
-            parameterMap.Add("fileType", "mp4");
-            ScsResult UploadKTSL = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
-            UploadKTSL.code = Code;
-            UploadKTSL.title = "5.3.1.16学员课堂实录回写";
-
-
-            //  5.3.1.17学员课堂实录批量回写
-            Code = "UploadKTSLList";
-            parameterContent = new Dictionary<string, object>();
-            list = new List<Dictionary<string, object>>();
-            parameterContent.Add("TrainComID", trainComID);
-            parameterContent.Add("List", list);
-            {
-                Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
-                parameterMapData.Add("PXID", "16");
-                parameterMapData.Add("TID", "16");
-                parameterMapData.Add("url", "https://xxx.mp4");
-                parameterMapData.Add("url2", "https://xxx.mp4");
-                parameterMapData.Add("fileName", "XXX.mp4");
-                parameterMapData.Add("fileSize", "247767");
-                parameterMapData.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
-                parameterMapData.Add("fileType", "mp4");
-                list.Add(parameterMapData);
+            ScsResult UploadSBTARPDFList = null;
+            try
+            { // 5.3.1.15学员校本教研PDF批量回写
+                Code = "UploadSBTARPDFList";
+                parameterContent = new Dictionary<string, object>();
+                list = new List<Dictionary<string, object>>();
+                parameterContent.Add("TrainComID", trainComID);
+                parameterContent.Add("List", list);
+                {
+                    Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
+                    parameterMapData.Add("PXID", "65309");
+                    parameterMapData.Add("TID", "253940");
+                    parameterMapData.Add("url", "https://scnltsfiles.scedu.com.cn/upload/infofj/202104011628463774.pdf");
+                    parameterMapData.Add("fileName", "XXX.pdf");
+                    parameterMapData.Add("fileSize", "247767");
+                    parameterMapData.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
+                    parameterMapData.Add("fileType", "pdf");
+                    list.Add(parameterMapData);
+                }
+                {
+                    Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
+                    parameterMapData.Add("PXID", "65306");
+                    parameterMapData.Add("TID", "32393");
+                    parameterMapData.Add("url", "https://scnltsfiles.scedu.com.cn/upload/infofj/202104011628463774.pdf");
+                    parameterMapData.Add("fileName", "XXX.pdf");
+                    parameterMapData.Add("fileSize", "247767");
+                    parameterMapData.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
+                    parameterMapData.Add("fileType", "pdf");
+                    list.Add(parameterMapData);
+                }
+                UploadSBTARPDFList = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterContent);
+                UploadSBTARPDFList.code = Code;
+                UploadSBTARPDFList.title = "5.3.1.15学员校本教研PDF批量回写";
             }
+            catch (Exception ex) { }
+            ScsResult UploadKTSL = null;
+            try
             {
-                Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
-                parameterMapData.Add("PXID", "16");
-                parameterMapData.Add("TID", "16");
-                parameterMapData.Add("url", "https://xxx.mp4");
-                parameterMapData.Add("url2", "https://xxx.mp4");
-                parameterMapData.Add("fileName", "XXX.mp4");
-                parameterMapData.Add("fileSize", "247767");
-                parameterMapData.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
-                parameterMapData.Add("fileType", "mp4");
-                list.Add(parameterMapData);
-            }
-            ScsResult UploadKTSLList = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterContent);
-            UploadKTSLList.code = Code;
-            UploadKTSLList.title = "5.3.1.17学员课堂实录批量回写";
-
+                // 5.3.1.16学员课堂实录回写
+                Code = "UploadKTSL";
+                parameterMap = new Dictionary<string, object>();
+                parameterMap.Add("TrainComID", trainComID);
+                parameterMap.Add("PXID", "16");
+                parameterMap.Add("TID", "16");
+                parameterMap.Add("url", "https://xxx.mp4");
+                parameterMap.Add("url2", "https://xxx.mp4");
+                parameterMap.Add("fileName", "XXX.mp4");
+                parameterMap.Add("fileSize", "247767");
+                parameterMap.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
+                parameterMap.Add("fileType", "mp4");
+                 UploadKTSL = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
+                UploadKTSL.code = Code;
+                UploadKTSL.title = "5.3.1.16学员课堂实录回写";
+            } catch (Exception ex) { }
+            ScsResult UploadKTSLList = null;
+            try
+            {
+                //  5.3.1.17学员课堂实录批量回写
+                Code = "UploadKTSLList";
+                parameterContent = new Dictionary<string, object>();
+                list = new List<Dictionary<string, object>>();
+                parameterContent.Add("TrainComID", trainComID);
+                parameterContent.Add("List", list);
+                {
+                    Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
+                    parameterMapData.Add("PXID", "16");
+                    parameterMapData.Add("TID", "16");
+                    parameterMapData.Add("url", "https://xxx.mp4");
+                    parameterMapData.Add("url2", "https://xxx.mp4");
+                    parameterMapData.Add("fileName", "XXX.mp4");
+                    parameterMapData.Add("fileSize", "247767");
+                    parameterMapData.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
+                    parameterMapData.Add("fileType", "mp4");
+                    list.Add(parameterMapData);
+                }
+                {
+                    Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
+                    parameterMapData.Add("PXID", "16");
+                    parameterMapData.Add("TID", "16");
+                    parameterMapData.Add("url", "https://xxx.mp4");
+                    parameterMapData.Add("url2", "https://xxx.mp4");
+                    parameterMapData.Add("fileName", "XXX.mp4");
+                    parameterMapData.Add("fileSize", "247767");
+                    parameterMapData.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
+                    parameterMapData.Add("fileType", "mp4");
+                    list.Add(parameterMapData);
+                }
+                UploadKTSLList = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterContent);
+                UploadKTSLList.code = Code;
+                UploadKTSLList.title = "5.3.1.17学员课堂实录批量回写";
 
+            }
+            catch (Exception ex) { }
 
             // 5.3.1.18根据机构ID、项目ID、子项目ID返回学校列表
             Code = "GetSchoolList";
@@ -535,8 +558,8 @@ namespace TEAMModelOS.Controllers.Third
                 GetProjectDiagnosis,
                 GetSchoolDiagnosis
             });
-            */
-            return Ok(GetProjectInfoByTrainComID);
+            
+            //return Ok(GetProjectInfoByTrainComID);
         }
 
         public class ScsResult {

+ 1 - 1
TEAMModelOS/TEAMModelOS.csproj

@@ -84,5 +84,5 @@
     </ItemGroup>
   </Target>
 
-  <ProjectExtensions><VisualStudio><UserProperties appsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
+  <ProjectExtensions><VisualStudio><UserProperties appsettings_1json__JsonSchema="" clientapp_4package_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
 </Project>

+ 12 - 12
TEAMModelOS/appsettings.Development.json

@@ -56,19 +56,19 @@
     }
   },
   "Third": {
-    //"scsyxpt": {
-    //  "passKey": "VgEQfEjwzfvFn8my", //机构安全码
-    //  "trainComID": "2065", //机构ID
-    //  "privateKey": "4DB15444DEEDBB28B718ACB09217B5FC", //机构 AES 密钥
-    //  "url": "http://testscts.scedu.com.cn/webservice/EduService.asmx/RequestService"
-    //  //"url": "https://scts.scedu.com.cn/webservice/EduService.asmx/RequestService" 
-    //},
     "scsyxpt": {
-      "passKey": "fst4clhyXqrhXblY", //机构安全码
-      "trainComID": "3069", //机构ID
-      "privateKey": "52C1C240E4BE086DD15DB10814E243E6", //机构 AES 密钥
-      //"url": "http://testscts.scedu.com.cn/webservice/EduService.asmx/RequestService"
-      "url": "https://scts.scedu.com.cn/webservice/EduService.asmx/RequestService"
+      "passKey": "VgEQfEjwzfvFn8my", //机构安全码
+      "trainComID": "2065", //机构ID 2065 65324
+      "privateKey": "4DB15444DEEDBB28B718ACB09217B5FC", //机构 AES 密钥
+      "url": "http://testscts.scedu.com.cn/webservice/EduService.asmx/RequestService"
+      //"url": "https://scts.scedu.com.cn/webservice/EduService.asmx/RequestService" 
     }
+    //"scsyxpt": {
+    //  "passKey": "fst4clhyXqrhXblY", //机构安全码
+    //  "trainComID": "3069", //机构ID
+    //  "privateKey": "52C1C240E4BE086DD15DB10814E243E6", //机构 AES 密钥
+    //  //"url": "http://testscts.scedu.com.cn/webservice/EduService.asmx/RequestService"
+    //  "url": "https://scts.scedu.com.cn/webservice/EduService.asmx/RequestService"
+    //}
   }
 }