瀏覽代碼

添加通用操作记录通用方法,并修改BI的保存的操作记录。

Li 3 年之前
父節點
當前提交
57eb641125

+ 14 - 55
TEAMModeBI/Controllers/BIAbility/AbilityMgmtController.cs

@@ -15,6 +15,7 @@ using HTEXLib.COMM.Helpers;
 using System.Text;
 using TEAMModelOS.SDK.Models.Cosmos.BI;
 using TEAMModelOS.SDK.Extension;
+using TEAMModelOS.SDK.Helper.Common.TableHelper;
 
 namespace TEAMModeBI.Controllers.BIAbility
 {
@@ -31,9 +32,10 @@ namespace TEAMModeBI.Controllers.BIAbility
         private readonly Option _option;
 
         private readonly AzureStorageFactory _azureStorage;
-
+        public readonly string mobel = "册别";
         public AbilityMgmtController(IConfiguration configuration, AzureCosmosFactory azureCosmos, DingDing dingDing, IOptionsSnapshot<Option> option, AzureStorageFactory azureStorage)
         {
+            _configuration = configuration;
             _azureCosmos = azureCosmos;
             _dingDing = dingDing;
             _option = option?.Value;
@@ -113,23 +115,6 @@ namespace TEAMModeBI.Controllers.BIAbility
                     return Ok(new { state = 0,message= "standard 参数异常" });
                 }
 
-                //操作记录
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                OperateLog operateLog = new OperateLog
-                {
-                    PartitionKey = "OperateLog-BI",
-                    RowKey = blobOrTable,
-                    recordID = blobOrTable,
-                    platformSource = "BI",
-                    tmdId = $"{_tmdId}",
-                    tmdName = $"{_tmdName}",
-                    visitApi = "/biabilitymgmt/del-ability",
-                    operateTime = DateTime.Now,
-                    operateType = "删除",
-                    funModule = "册别",
-                    operateDescribe = $"{_tmdName}【{_tmdId}】已操作删除册别,删除ID:{id}"
-                };
-
                 var client = _azureCosmos.GetCosmosClient();
                 List<AbilityTask> syllabus = new List<AbilityTask>();
                 string sql = $"select value(c) from c where c.abilityId='{id}'";
@@ -145,7 +130,9 @@ namespace TEAMModeBI.Controllers.BIAbility
 
                 if (response.Status == 200)
                 {
-                    await _azureStorage.Save<OperateLog>(operateLog);
+                    //保存操作记录
+                    await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: $"{_tmdName}【{_tmdId}】已操作删除册别,删除ID:{id}", type: "ability-del", visitApi: "/biabilitymgmt/del-ability", funModel: mobel);
+
                     return Ok(new { state = 200 });
                 }
                 else return Ok(new { state = response.Status });
@@ -167,16 +154,6 @@ namespace TEAMModeBI.Controllers.BIAbility
         {
             try
             {
-                //操作记录
-                OperateLog operateLog = new OperateLog();
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-
-                operateLog.PartitionKey = "OperateLog-BI";
-                operateLog.RowKey = blobOrTable;
-                operateLog.recordID = blobOrTable;
-                operateLog.platformSource = "BI";
-                operateLog.tmdId = $"{recordAbility.tmdId}";
-                operateLog.tmdName = $"{recordAbility.tmdName}";
                 StringBuilder stringBuilder = new StringBuilder($"{recordAbility.tmdName}【{recordAbility.tmdId}】已操作");
 
                 Ability ability = recordAbility.ability;
@@ -192,7 +169,7 @@ namespace TEAMModeBI.Controllers.BIAbility
                 else return Ok(new { state = 0, message = "参数异常" });
 
                 var azureClient = _azureCosmos.GetCosmosClient();
-
+                string tempType = "";
                 //新增册别
                 if (string.IsNullOrEmpty(ability.id))
                 {
@@ -216,13 +193,11 @@ namespace TEAMModeBI.Controllers.BIAbility
                     {
                         return Ok(new { sate = 2, mesages = "参数异常" });
                     }
-
+                    tempType = "ability-add";
                     ability.id = Guid.NewGuid().ToString();
                     ability.creatorId = string.IsNullOrEmpty($"{ability.creatorId}") ?$"{recordAbility.tmdId}": ability.creatorId;
                     ability.creatorName = string.IsNullOrEmpty($"{ability.creatorName}") ? $"{recordAbility.tmdName}" : ability.creatorName;
                     tempAbility = await azureClient.GetContainer("TEAMModelOS", "Normal").CreateItemAsync(ability, new PartitionKey(ability.code));
-                    operateLog.operateType = "新增";
-                    operateLog.funModule = "册别";
                     stringBuilder.Append($"新增册别信息,册别编号:{tempAbility.id},册别名称:{tempAbility.name}");
                 }
                 //更新册别
@@ -231,9 +206,8 @@ namespace TEAMModeBI.Controllers.BIAbility
                     try
                     {
                         tempAbility = await azureClient.GetContainer(Constant.TEAMModelOS, "Normal").ReplaceItemAsync<Ability>(ability, ability.id, new PartitionKey(ability.code));
-                        operateLog.operateType = "修改";
-                        operateLog.funModule = "册别";
                         stringBuilder.Append($"更新册别信息,册别编号:{tempAbility.id},册别名称:{tempAbility.name}");
+                        tempType = "ability-update";
 
                     }
                     catch (Exception ex)
@@ -243,10 +217,8 @@ namespace TEAMModeBI.Controllers.BIAbility
                     }
                 }
 
-                operateLog.operateDescribe = $"{stringBuilder}";
-                operateLog.visitApi = "/biabilitymgmt/upd-ability";
-                operateLog.operateTime = DateTime.Now;
-                await _azureStorage.Save<OperateLog>(operateLog);
+                //保存操作记录
+                await OperateLogHelper.SaveTableLog(_azureStorage, platform:"BI", tmdId:$"{recordAbility.tmdId}", tmdName:$"{recordAbility.tmdName}", msg: stringBuilder?.ToString(), type: tempType?.ToString(), visitApi: "/biabilitymgmt/upd-ability", funModel: mobel);
 
                 return Ok(new { state = 200, Ability = tempAbility });
             }
@@ -275,20 +247,6 @@ namespace TEAMModeBI.Controllers.BIAbility
 
                 //操作记录
                 string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                OperateLog operateLog = new OperateLog
-                {
-                    PartitionKey = "OperateLog-BI",
-                    RowKey = blobOrTable,
-                    recordID = blobOrTable,
-                    platformSource = "BI",
-                    tmdId = $"{_tmdId}",
-                    tmdName = $"{_tmdName}",
-                    operateType="修改",
-                    funModule="册别",
-                    visitApi = "/biabilitymgmt/upd-isrequired",
-                    operateTime = DateTime.Now,
-                    operateDescribe = $"{_tmdName}【{_tmdId}】已操作设置是否必修状态。标准:{currencys[0].standard}"
-                };
 
                 foreach (var item in currencys)
                 {
@@ -298,12 +256,13 @@ namespace TEAMModeBI.Controllers.BIAbility
                     await cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").ReplaceItemAsync(ability, ability.id, new PartitionKey(ability.code));
                 }
 
-                await _azureStorage.Save<OperateLog>(operateLog);
+                //保存操作记录
+                await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: $"{_tmdName}【{_tmdId}】已操作设置是否必修状态。标准:{currencys[0].standard}",type:"ability-update", visitApi: "/biabilitymgmt/upd-isrequired", funModel: mobel);
                 return Ok(new { state = 200, currencys });
             }
             catch (Exception ex)
             {
-                await _dingDing.SendBotMsg($"BI,{_option.Location}  /biabilitymgmt/upd-isrequired    \n  {ex.Message}{ex.StackTrace}", GroupNames.成都开发測試群組);
+                await _dingDing.SendBotMsg($"BI,{_option.Location}  /biabilitymgmt/upd-isrequired  \n  {ex.Message}{ex.StackTrace}", GroupNames.成都开发測試群組);
                 return BadRequest();
             }
         }

+ 16 - 40
TEAMModeBI/Controllers/BIAbility/AbilityTaskMgmtController.cs

@@ -15,6 +15,8 @@ using HTEXLib.COMM.Helpers;
 using TEAMModelOS.Services.Common;
 using TEAMModelOS.SDK.Models.Cosmos.BI;
 using TEAMModelOS.SDK.Models.Cosmos.Common;
+using TEAMModelOS.SDK.Helper.Common.TableHelper;
+using System.Text;
 
 namespace TEAMModeBI.Controllers.BIAbility
 {
@@ -31,9 +33,11 @@ namespace TEAMModeBI.Controllers.BIAbility
         //钉钉提示信息
         private readonly DingDing _dingDing;
         private readonly Option _option;
+        public readonly string mobel = "章节";
 
         public AbilityTaskMgmtController(IConfiguration configuration, AzureCosmosFactory azureCosmos, DingDing dingDing, IOptionsSnapshot<Option> option, AzureStorageFactory azureStorage)
         {
+            _configuration = configuration;
             _azureCosmos = azureCosmos;
             _dingDing = dingDing;
             _option = option?.Value;
@@ -120,18 +124,9 @@ namespace TEAMModeBI.Controllers.BIAbility
             try
             {
                 var cosmosClient = _azureCosmos.GetCosmosClient();
-                //操作记录
-                OperateLog operateLog = new OperateLog();
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-
-                operateLog.PartitionKey = "OperateLog-BI";
-                operateLog.RowKey = blobOrTable;
-                operateLog.recordID = blobOrTable;
-                operateLog.platformSource = "BI";
-                operateLog.tmdId = $"{recordAbilityTask.tmdId}";
-                operateLog.tmdName = $"{recordAbilityTask.tmdName}";
-                operateLog.visitApi = "/biabilitytask/upd-abilitytask";
 
+                StringBuilder msgBuilder = new StringBuilder($"{recordAbilityTask.tmdName}【{recordAbilityTask.tmdId}】已操作");
+                string type = null;
                 long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
                 foreach (var abilityTaskTree in recordAbilityTask.abilityTask)
                 {
@@ -178,11 +173,8 @@ namespace TEAMModeBI.Controllers.BIAbility
                             abilityTaskTree.auth = abilityTask.auth;
                             await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Normal").ReplaceItemAsync<AbilityTask>(abilityTask, abilityTask.id, new Azure.Cosmos.PartitionKey($"AbilityTask-{recordAbilityTask.standard}"));
                         }
-
-                        operateLog.operateType = "修改";
-                        operateLog.funModule = "章节";
-                        operateLog.operateDescribe = $"{recordAbilityTask.tmdName}【{recordAbilityTask.tmdId}】已操作修改章节功能,章节ID和分区键{abilityTask.id}And{abilityTask.code} ";
-                        operateLog.operateTime = DateTime.Now;
+                        msgBuilder.Append($"修改章节功能,章节ID和分区键{abilityTask.id}And{abilityTask.code}");
+                        type = "abilityTask-update";
                     }
                     else
                     {
@@ -208,14 +200,13 @@ namespace TEAMModeBI.Controllers.BIAbility
                         };
                         await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Normal").CreateItemAsync<AbilityTask>(abilityTask, new Azure.Cosmos.PartitionKey($"AbilityTask-{recordAbilityTask.standard}"));
 
-                        operateLog.operateType = "新增";
-                        operateLog.funModule = "章节";
-                        operateLog.operateDescribe = $"{recordAbilityTask.tmdName}【{recordAbilityTask.tmdId}】已操作新增章节功能,章节ID和分区键{abilityTask.id}And{abilityTask.code} ";
-                        operateLog.operateTime = DateTime.Now;
+                        msgBuilder.Append($"修改章节功能,章节ID和分区键{abilityTask.id}And{abilityTask.code}");
+                        type = "abilityTask-add";
                     }
                 }
 
-                await _azureStorage.Save<OperateLog>(operateLog);
+                //保存操作日志
+                await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{recordAbilityTask.tmdId}", tmdName: $"{recordAbilityTask.tmdName}", msg: msgBuilder?.ToString(), type: type?.ToString(), visitApi: "/biabilitytask/upd-abilitytask", funModel: mobel);
 
                 return Ok(new { state = 200, recordAbilityTask });
             }
@@ -241,28 +232,13 @@ namespace TEAMModeBI.Controllers.BIAbility
                 if (!jsonElement.TryGetProperty("id", out JsonElement id)) return BadRequest();
                 if (!jsonElement.TryGetProperty("tmdId", out JsonElement _tmdId)) return BadRequest();   //醍摩豆账户
                 if (!jsonElement.TryGetProperty("tmdName", out JsonElement _tmdName)) return BadRequest(); //醍摩豆账号名称
-
-                //操作记录
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                OperateLog operateLog = new OperateLog
-                {
-                    PartitionKey = "OperateLog-BI",
-                    RowKey = blobOrTable,
-                    recordID = blobOrTable,
-                    platformSource = "BI",
-                    tmdId = $"{_tmdId}",
-                    tmdName = $"{_tmdName}",
-                    operateType = "删除",
-                    funModule = "章节",
-                    visitApi = "/biabilitytask/delabilitytask",
-                    operateTime = DateTime.Now
-                };
-
+                
                 var cosmosClient = _azureCosmos.GetCosmosClient();
                 var response = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").DeleteItemStreamAsync(id.ToString(), new PartitionKey($"AbilityTask-{standard}"));
 
-                operateLog.operateDescribe = $"{_tmdName}【{_tmdId}】已操作删除册别,删除状态:{response.Status},删除ID:{id}";
-                await _azureStorage.Save<OperateLog>(operateLog);//保存操作记录
+                //保存操作日志
+                await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: $"{_tmdName}【{_tmdId}】已操作删除册别,删除状态:{response.Status},删除ID:{id}", type: "abilitytask-del", visitApi: "/biabilitytask/del-abilitytask", funModel: mobel);
+
                 if (response.Status == 204)
                     return Ok(new { state = 200 });
                 else

+ 7 - 14
TEAMModeBI/Controllers/BISchool/AreaRelevantController.cs

@@ -11,6 +11,7 @@ using TEAMModeBI.Filter;
 using TEAMModelOS.Models;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
+using TEAMModelOS.SDK.Helper.Common.TableHelper;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos.BI;
 
@@ -22,11 +23,13 @@ namespace TEAMModeBI.Controllers.BISchool
     {
         //数据容器
         private readonly AzureCosmosFactory _azureCosmos;
+        private readonly AzureStorageFactory _azureStorage;
         //钉钉提示信息
         private readonly DingDing _dingDing;
         private readonly Option _option;
+        public readonly string mobel = "区级";
 
-        public AreaRelevantController(AzureCosmosFactory azureCosmos, DingDing dingDing, IOptionsSnapshot<Option> option)
+        public AreaRelevantController(AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, DingDing dingDing, IOptionsSnapshot<Option> option)
         {
             _azureCosmos = azureCosmos;
             _dingDing = dingDing;
@@ -97,19 +100,6 @@ namespace TEAMModeBI.Controllers.BISchool
                 //if (!jsonElement.TryGetProperty("areaId", out JsonElement areaId)) return BadRequest();
                 if (!jsonElement.TryGetProperty("schoolId", out JsonElement schoolId)) return BadRequest();
 
-                //操作记录
-                OperateLog operateLog = new OperateLog();
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                operateLog.PartitionKey = "OperateLog-BI";
-                operateLog.RowKey = blobOrTable;
-                operateLog.recordID = blobOrTable;
-                operateLog.platformSource = "BI";
-                operateLog.tmdId = $"{_tmdId}";
-                operateLog.tmdName = $"{_tmdName}";
-                operateLog.visitApi = "/tabledd/set-permissions";
-                operateLog.operateTime = DateTime.Now;
-                operateLog.operateDescribe = $"{_tmdName}【{_tmdId}】已操作学校({schoolId})移除该区域";
-
                 var cosmosClient = _azureCosmos.GetCosmosClient();
                 School tempSchool = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>($"{schoolId}", new PartitionKey("Base"));
 
@@ -118,6 +108,9 @@ namespace TEAMModeBI.Controllers.BISchool
 
                 School school = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<School>(tempSchool, tempSchool.id, new PartitionKey("Base"));
 
+                //保存操作日志
+                await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: $"{_tmdName}【{_tmdId}】已操作学校({schoolId})移除该区域", type: "area-update", visitApi: "/area/set-areashiftschool", funModel: mobel);
+
                 return Ok(new { state = 200, school });
             }
             catch (Exception ex)

+ 8 - 220
TEAMModeBI/Controllers/BISchool/BatchAreaController.cs

@@ -27,6 +27,7 @@ using TEAMModelOS.SDK.Models.Cosmos.BI;
 using Azure.Messaging.ServiceBus;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models.Service;
+using TEAMModelOS.SDK.Helper.Common.TableHelper;
 
 namespace TEAMModeBI.Controllers.BISchool
 {
@@ -163,22 +164,7 @@ namespace TEAMModeBI.Controllers.BISchool
 
                 //操作记录实体
                 var tempStandard = !string.IsNullOrEmpty($"{oldStandard}") && !string.IsNullOrEmpty($"{_oldId}") ? $"{oldStandard}" : "standard2";
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                OperateLog bIOperateLog = new OperateLog
-                {
-                    PartitionKey = "OperateLog-BI",
-                    RowKey = blobOrTable,
-                    recordID = blobOrTable,
-                    platformSource = "BI",
-                    tmdId = $"{_tmdId}",
-                    tmdName = $"{_tmdName}",
-                    operateType = "新增",
-                    funModule = "创区",
-                    operateDescribe = $"{_tmdName}【{_tmdId}】已操作创区功能模块:{name},当前标准【{standard}】,复制的微能力点:{tempStandard}",
-                    visitApi = "batcharea/batch-area",
-                    operateTime = DateTime.Now
-                };
-
+                
                 var cosmosClient = _azureCosmos.GetCosmosClient();//数据库连接
                 //查询新的是否存在
                 await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<Area>(queryText: $"select value(c) from c where c.standard='{standard}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-Area") }))
@@ -470,8 +456,9 @@ namespace TEAMModeBI.Controllers.BISchool
                 var location = _option.Location;
                 await _notificationService.SendNotification(clientID, clientSecret, location, url, notification); //站内发送消息
 
-                //保存操作记录
-                await _azureStorage.Save<OperateLog>(bIOperateLog);
+                //保存操作日志
+                await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: $"{_tmdName}【{_tmdId}】已操作创区功能模块:{name},当前标准【{standard}】,复制的微能力点:{tempStandard}", type: "area-add", visitApi: "/batcharea/batch-area", funModel: "复制能力点");
+
                 return Ok(new { state = 200, area = addArea });
             }
             catch (Exception ex)
@@ -501,21 +488,7 @@ namespace TEAMModeBI.Controllers.BISchool
 
                 //操作记录实体
                 string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                OperateLog bIOperateLog = new OperateLog
-                {
-                    PartitionKey = "OperateLog-BI",
-                    RowKey = blobOrTable,
-                    recordID = blobOrTable,
-                    platformSource = "BI",
-                    tmdId = $"{_tmdId}",
-                    tmdName = $"{_tmdName}",
-                    operateType ="修改",
-                    funModule ="能力点",
-                    operateDescribe = $"{_tmdName}【{_tmdId}】已操作【{_oldStandard}】切换至{_newStandard}微能力点,复制标准:{_newStandard}",
-                    visitApi = "/batcharea/cut-standard",
-                    operateTime = DateTime.Now
-                };
-
+                
                 var cosmosClient = _azureCosmos.GetCosmosClient();
 
                 List<string> abilityIds = new List<string>();  //册别的ID集合
@@ -670,7 +643,8 @@ namespace TEAMModeBI.Controllers.BISchool
                 await _notificationService.SendNotification(clientID, clientSecret, location, url, notification); //发送站内发送消息
 
                 //保存操作记录
-                await _azureStorage.Save<OperateLog>(bIOperateLog);
+                await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: $"{_tmdName}【{_tmdId}】已操作【{_oldStandard}】切换至{_newStandard}微能力点,复制标准:{_newStandard}", type: "standard-cut", visitApi: "/batcharea/cut-standard", funModel: "切换能力点");
+
                 return Ok(new { state = 200 });
             }
             catch (Exception ex)
@@ -680,192 +654,6 @@ namespace TEAMModeBI.Controllers.BISchool
             }
         }
 
-        #region  测试复制文件  流程通,后期删除
-
-        /// <summary>
-        /// 测试复制Blob中的文件  批量创区接口测试完成后删除
-        /// </summary>
-        /// <param name="jsonElement"></param>
-        /// <returns></returns>
-        [ProducesDefaultResponseType]
-        [HttpPost("copybolb")]
-        public async Task<IActionResult> TestCopyBolb(JsonElement jsonElement)
-        {
-            if (!jsonElement.TryGetProperty("cntr", out JsonElement _cntr)) return BadRequest();
-            if (!jsonElement.TryGetProperty("oldurl", out JsonElement _oldurl)) return BadRequest();
-            if (!jsonElement.TryGetProperty("newurl", out JsonElement _newurl)) return BadRequest();
-
-            var cosmosClient = _azureCosmos.GetCosmosClient();
-
-            int index = $"{_oldurl}".IndexOf("/", 0);
-            string oldUrl = index == 0 ? oldUrl = $"{_oldurl}".Substring(1) : oldUrl = $"{_oldurl}";
-
-            var bcc = _azureStorage.GetBlobContainerClient($"{_cntr}");  //获取地址
-
-            var urlSaS = _azureStorage.GetBlobSAS($"{_cntr}", oldUrl, BlobSasPermissions.Read | BlobSasPermissions.List);    // 取得容器sas 和有效期
-            //BlobBaseClient blob = new BlobBaseClient(new Uri(bcc.Uri+$"{setemp[0]}/{_newFile}"));     //新的地址
-            ////var s = blob.SyncCopyFromUri(new Uri(url));           //执行复制操作
-
-            var response = bcc.GetBlobClient($"{_newurl}").SyncCopyFromUri(new Uri(urlSaS));
-            if (response.Value.CopyStatus.Equals(1))
-                return Ok(new { state = 200, message = "复制成功" });
-            else return Ok(new { response.Value.CopyStatus });
-            //var response = await bcc.GetBlobClient($"{_newurl}").StartCopyFromUriAsync(new Uri(urlSaS));
-            //return Ok(new { state = 200 , response.Value,response.HasCompleted,response.HasValue,response.Id});
-        }
-
-        /// <summary>
-        /// 批量复制文件接口  批量创区接口测试完成后删除
-        /// </summary>
-        /// <param name="jsonElement"></param>
-        /// <returns></returns>
-        [ProducesDefaultResponseType]
-        [HttpPost("copybolbFile")]
-        public async Task<IActionResult> TestCopyBolbFile(JsonElement jsonElement)
-        {
-            if (!jsonElement.TryGetProperty("cntr", out JsonElement _cntr)) return BadRequest();
-            if (!jsonElement.TryGetProperty("oldstandard", out JsonElement _oldstandard)) return BadRequest();
-            if (!jsonElement.TryGetProperty("newstandard", out JsonElement _newstandard)) return BadRequest();
-
-            List<string> errmess = new List<string>();
-            List<string> fils = new List<string>();
-            List<Task<Response<BlobCopyInfo>>> file_list = new List<Task<Response<BlobCopyInfo>>>();
-            var client = _azureStorage.GetBlobContainerClient($"{_cntr}");//获取地址
-            await foreach (BlobItem item in client.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"yxpt/{_oldstandard}/"))
-            {
-                fils.Add(item.Name);
-                string oldurl1 = $"{item.Name}".Replace($"/{_oldstandard}/", $"/{_newstandard}/");
-                var urlSaS = _azureStorage.GetBlobSAS($"{_cntr}", item.Name, BlobSasPermissions.Read | BlobSasPermissions.List);    // 取得容器sas 和有效期
-
-                client.GetBlobClient(oldurl1).SyncCopyFromUri(new Uri(urlSaS));
-                //file_list.Add(blobcc.GetBlobClient($"{oldurl1}").SyncCopyFromUriAsync(new Uri(urlSaS)));
-            }
-
-            if (file_list.Count <= 256)
-            {
-                await Task.WhenAll(file_list);
-            }
-            else
-            {
-                int pages = (file_list.Count + 255) / 256;
-                for (int i = 0; i < pages; i++)
-                {
-                    List<Task<Response<BlobCopyInfo>>> file_lists = file_list.Skip((i) * 256).Take(256).ToList();
-                    await Task.WhenAll(file_lists);
-                }
-            }
-
-            return Ok(new { fils.Count, fils });
-        }
-
-        /// <summary>
-        /// 批量删除在复制文件接口  正式完成后删除该接口
-        /// </summary>
-        /// <param name="jsonElement"></param>
-        /// <returns></returns>
-        [ProducesDefaultResponseType]
-        [HttpPost("copyafterdel")]
-        public async Task<IActionResult> CopyAfterDel(JsonElement jsonElement)
-        {
-
-            if (!jsonElement.TryGetProperty("cntr", out JsonElement _cntr)) return BadRequest();
-            if (!jsonElement.TryGetProperty("delstandard", out JsonElement _delstandard)) return BadRequest();
-            if (!jsonElement.TryGetProperty("copystandard", out JsonElement _copystandard)) return BadRequest();
-
-            var blobClient = _azureStorage.GetBlobContainerClient($"{_cntr}");  //获取地址
-
-            //先删除原有的文件
-            List<Task<Response<bool>>> DelList = new List<Task<Response<bool>>>();
-            await foreach (BlobItem blobItem in blobClient.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"yxpt/{_delstandard}/"))
-            {
-                //await blobClient.GetBlobClient(blobItem.Name).DeleteIfExistsAsync();
-                DelList.Add(blobClient.GetBlobBaseClient(blobItem.Name).DeleteIfExistsAsync());
-            }
-
-            if (DelList.Count <= 256)
-            {
-                await Task.WhenAll(DelList);
-            }
-            else
-            {
-                int pages = (DelList.Count + 255) / 256;
-                for (int i = 0; i < pages; i++)
-                {
-                    List<Task<Response<bool>>> delList = DelList.Skip((i) * 256).Take(256).ToList();
-                    await Task.WhenAll(delList);
-                }
-            }
-
-            //在复制新的文件
-            List<Task<Response<BlobCopyInfo>>> CopyList = new List<Task<Response<BlobCopyInfo>>>();
-            await foreach (BlobItem blobItem in blobClient.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"yxpt/{_copystandard}/"))
-            {
-                string oldurl = $"{blobItem.Name}".Replace($"/{_copystandard}/", $"/{_delstandard}/");  //替换旧文件
-                var copyUrlSas = _azureStorage.GetBlobSAS($"{_cntr}", blobItem.Name, BlobSasPermissions.Read | BlobSasPermissions.List);
-
-                //await blobClient.GetBlobClient(oldurl).SyncCopyFromUriAsync(new Uri(copyUrlSas));
-                CopyList.Add(blobClient.GetBlobClient(oldurl).SyncCopyFromUriAsync(new Uri(copyUrlSas)));
-            }
-
-            if (CopyList.Count <= 256)
-            {
-                await Task.WhenAll(CopyList);
-            }
-            else
-            {
-                int pages = (CopyList.Count + 255) / 256;
-                for (int i = 0; i < pages; i++)
-                {
-                    List<Task<Response<BlobCopyInfo>>> copyList = CopyList.Skip((i) * 256).Take(256).ToList();
-                    await Task.WhenAll(copyList);
-                }
-            }
-
-            return Ok(new { state = 200 });
-
-        }
-
-        /// <summary>
-        /// 批量复制文件夹方法   批量创区接口测试完成后删除
-        /// </summary>
-        /// <param name="_cntr"></param>
-        /// <param name="_oldstandard"></param>
-        /// <param name="_newstandard"></param>
-        /// <returns></returns>
-        public async Task<IActionResult> BarchCopyFile(string _cntr, string _oldstandard, string _newstandard)
-        {
-            List<string> errmess = new List<string>();
-            List<Task<Response<BlobCopyInfo>>> file_list = new List<Task<Response<BlobCopyInfo>>>();
-            var client = _azureStorage.GetBlobContainerClient($"{_cntr}");  //获取地址
-            await foreach (BlobItem item in client.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"yxpt/{_oldstandard}/"))
-            {
-                string oldurl1 = $"{item.Name}".Replace($"/{_oldstandard}/", $"/{_newstandard}/");
-                //yxpt/standard6/jyzx/002ea332-0d1f-717c-0589-5f54c3c5ef4a/3 各班分数等级占比分析.mp4
-                var urlSaS = _azureStorage.GetBlobSAS($"{_cntr}", item.Name, BlobSasPermissions.Read | BlobSasPermissions.List);    // 取得容器sas 和有效期
-                //client.GetBlobClient($"{newurl}").SyncCopyFromUri(new Uri(urlSaS));
-                file_list.Add(client.GetBlobClient($"{oldurl1}").SyncCopyFromUriAsync(new Uri(urlSaS)));
-            }
-
-            if (file_list.Count <= 256)
-            {
-                await Task.WhenAll(file_list);
-            }
-            else
-            {
-                int pages = (file_list.Count + 255) / 256;
-                for (int i = 0; i < pages; i++)
-                {
-                    List<Task<Response<BlobCopyInfo>>> file_lists = file_list.Skip((i) * 256).Take(256).ToList();
-                    await Task.WhenAll(file_lists);
-                }
-            }
-
-            if (errmess.Count > 0) return Ok(new { state = 201, errmess });
-            else return Ok(new { state = 200, message = "全部复制成功" });
-        }
-
-        #endregion  
-
     }
 
 }

+ 41 - 124
TEAMModeBI/Controllers/BISchool/BatchSchoolController.cs

@@ -19,6 +19,7 @@ using static TEAMModelOS.SDK.Models.Teacher;
 using Microsoft.AspNetCore.Hosting;  //引用读取文件
 using TEAMModelOS.SDK.Models.Service;
 using System.IO;
+using TEAMModelOS.SDK.Helper.Common.TableHelper;
 
 namespace TEAMModeBI.Controllers.BISchool
 {
@@ -31,6 +32,7 @@ namespace TEAMModeBI.Controllers.BISchool
         private readonly Option _option;
         private readonly AzureStorageFactory _azureStorage;
         private readonly IWebHostEnvironment _environment; //读取文件
+        public readonly string mobel = "学校";
 
         public BatchSchoolController(AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage, IOptionsSnapshot<Option> option, IWebHostEnvironment hostingEnvironment)
         {
@@ -124,19 +126,9 @@ namespace TEAMModeBI.Controllers.BISchool
                 if (!jsonElement.TryGetProperty("tmdName", out JsonElement _tmdName)) return BadRequest();
                 List<Exist> havepower = new List<Exist>(); //已存在的
                 var client = _azureCosmos.GetCosmosClient();
-                //保存操作记录
-                OperateLog operateLog = new OperateLog();
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                operateLog.PartitionKey = "OperateLog-BI";
-                operateLog.RowKey = blobOrTable;
-                operateLog.recordID = blobOrTable;
-                operateLog.platformSource = "BI";
-                operateLog.tmdId = $"{_tmdId}";
-                operateLog.tmdName = $"{_tmdName}";
-                operateLog.visitApi = "/batchschool/get-quitstaff";
-                operateLog.operateTime = DateTime.Now;
+
                 StringBuilder stringBuilder = new StringBuilder($"{_tmdName}【{_tmdId}】账户操作");
-                //更新
+                //更新权限
                 foreach (var id in ids.EnumerateArray())
                 {
                     SchoolTeacher st = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<SchoolTeacher>($"{id}", new PartitionKey($"Teacher-{school_code}"));
@@ -184,14 +176,14 @@ namespace TEAMModeBI.Controllers.BISchool
                     await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<SchoolTeacher>(st, id.GetString(), new PartitionKey($"Teacher-{school_code}"));
                 }
 
-                operateLog.operateDescribe = $"{stringBuilder}";
-                await _azureStorage.Save<OperateLog>(operateLog); //保存操作记录
+                //保存操作记录
+                await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: stringBuilder?.ToString(), type: "ability-update", visitApi: "/batchschool/upd-permissions", funModel: mobel);
 
                 return Ok(new { state = 200, havepower = havepower });
             }
             catch (Exception ex)
             {
-                await _dingDing.SendBotMsg($"BI,{_option.Location}, batchschool/get-quitstaff \n{ex.Message}{ex.StackTrace}", GroupNames.成都开发測試群組);
+                await _dingDing.SendBotMsg($"BI,{_option.Location}, /batchschool/upd-permissions \n{ex.Message}{ex.StackTrace}", GroupNames.成都开发測試群組);
                 return BadRequest();
             }
         }
@@ -208,17 +200,7 @@ namespace TEAMModeBI.Controllers.BISchool
             try
             {
                 List<BISchool> schools = new List<BISchool>();
-                //操作记录
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                OperateLog operateLog = new OperateLog();
-                operateLog.PartitionKey = "OperateLog-BI";
-                operateLog.RowKey = blobOrTable;
-                operateLog.recordID = blobOrTable;
-                operateLog.platformSource = "BI";
-                operateLog.tmdId = $"{foundSchools.tmdId}";
-                operateLog.tmdName = $"{foundSchools.tmdName}";
-                operateLog.operateType = "新增";
-                operateLog.funModule = "创校";
+
                 StringBuilder stringBuilder = new StringBuilder($"{foundSchools.tmdName}【{foundSchools.tmdId}】操作了批量创校功能:");
 
                 if (foundSchools.biSchools.Count > 0)
@@ -300,7 +282,7 @@ namespace TEAMModeBI.Controllers.BISchool
                                     ttl = -1
                                 };
 
-                                stringBuilder.Append($"教师信息:{schoolTeacher.name}【{schoolTeacher.id}】,教师权限:{schoolTeacher.roles.ToString()}");
+                                stringBuilder.Append($"教师信息:{schoolTeacher.name}【{schoolTeacher.id}】,教师权限:{string.Join(",", schoolTeacher.roles)}");
                                 await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey(teacher.code));
                                 await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<SchoolTeacher>(schoolTeacher, new PartitionKey(schoolTeacher.code));
                             }
@@ -336,17 +318,16 @@ namespace TEAMModeBI.Controllers.BISchool
                                     ttl = -1
                                 };
 
-                                stringBuilder.Append($"教师权限:{schoolTeacher.roles}");
+                                stringBuilder.Append($"教师权限:{string.Join(",", schoolTeacher.roles)}");
                                 await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<SchoolTeacher>(schoolTeacher, new PartitionKey(schoolTeacher.code));
                             }
                         }
                     }
                 }
                 else return Ok(new { state = 1, message = "创校信息为空" });
-                operateLog.operateDescribe = $"{stringBuilder}";
-                operateLog.visitApi = "/batchschool/batch-school";
-                operateLog.operateTime = DateTime.Now;
-                await _azureStorage.Save<OperateLog>(operateLog);
+
+                //保存操作记录
+                await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{foundSchools.tmdId}", tmdName: $"{foundSchools.tmdName}", msg: stringBuilder?.ToString(), type: "school-batchAdd", visitApi: "/batchschool/batch-school", funModel: mobel);
 
                 if (schools.Count > 0)
                     return Ok(new { state = 201, message = "已有部分学校批量创建成功;学校编号已经重复!请检查学校编号!", schools = schools });
@@ -573,21 +554,8 @@ namespace TEAMModeBI.Controllers.BISchool
 
                     schoolInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<School>(replaceSchool.school, replaceSchool.school.id, new PartitionKey("Base"));
 
-                    //操作记录
-                    string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                    OperateLog operateLog = new OperateLog
-                    {
-                        PartitionKey = "OperateLog-BI",
-                        RowKey = blobOrTable,
-                        recordID = blobOrTable,
-                        platformSource = "BI",
-                        tmdId = $"{replaceSchool.tmdId}",
-                        tmdName = $"{replaceSchool.tmdName}",
-                        operateDescribe = $"{replaceSchool.tmdName}【{replaceSchool.tmdId}】已操作修改学校,修改的学校:{replaceSchool.school.name}【{replaceSchool.school.id}】",
-                        visitApi = "/batchschool/upd-school",
-                        operateTime = DateTime.Now
-                    };
-                    await _azureStorage.Save<OperateLog>(operateLog);
+                    //保存操作记录
+                    await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{replaceSchool.tmdId}", tmdName: $"{replaceSchool.tmdName}", msg: $"{replaceSchool.tmdName}【{replaceSchool.tmdId}】已操作修改学校,修改的学校:{replaceSchool.school.name}【{replaceSchool.school.id}】", type: "school-update", visitApi: "/batchschool/upd-school", funModel: mobel);
 
                     return Ok(new { state = 200, schoolInfo });
                 }
@@ -627,19 +595,7 @@ namespace TEAMModeBI.Controllers.BISchool
 
                 //操作记录
                 string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                OperateLog operateLog = new OperateLog
-                {
-                    PartitionKey = "OperateLog-BI",
-                    RowKey = blobOrTable,
-                    recordID = blobOrTable,
-                    platformSource = "BI",
-                    tmdId = $"{_tmdId}",
-                    tmdName = $"{_tmdName}",
-                    operateDescribe = $"{_tmdName}【{_tmdId}】已操作修改学校功能,修改的学校:{_schoolId},{string.Join("|", periodS.ToArray())},{picture},{size},{string.Join("|", assistId.ToArray())}",
-                    visitApi = "batchschool/upd-schoolassist",
-                    operateTime = DateTime.Now
-                };
-                await _azureStorage.Save<OperateLog>(operateLog);
+
 
                 var cosmosClient = _azureCosmos.GetCosmosClient();
                 School tempShool = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>($"{_schoolId}", new PartitionKey("Base"));
@@ -774,6 +730,9 @@ namespace TEAMModeBI.Controllers.BISchool
                     schoolAssist.assists = assists;
                 }
 
+                //保存操作记录
+                await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: $"{_tmdName}【{_tmdId}】已操作修改学校功能,修改的学校:{_schoolId},{string.Join("|", periodS.ToArray())},{picture},{size},{string.Join("|", assistId.ToArray())}", type: "TeacherRoles-update", visitApi: "/batchschool/upd-schoolassist", funModel: mobel);
+
                 return Ok(new { state = 200, schoolAssist });
             }
             catch (Exception ex)
@@ -799,23 +758,11 @@ namespace TEAMModeBI.Controllers.BISchool
                 if (!jsonElement.TryGetProperty("periodName", out JsonElement _periodName)) return BadRequest();    //新增学段名称
                 if (!jsonElement.TryGetProperty("tmdId", out JsonElement _tmdId)) return BadRequest();   //醍摩豆账户
                 if (!jsonElement.TryGetProperty("tmdName", out JsonElement _tmdName)) return BadRequest(); //醍摩豆账号名称
-
-                var cosmosClient = _azureCosmos.GetCosmosClient();
-                //操作记录
-                OperateLog operateLog = new OperateLog();
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-
-                operateLog.PartitionKey = "OperateLog-BI";
-                operateLog.RowKey = blobOrTable;
-                operateLog.recordID = blobOrTable;
-                operateLog.platformSource = "BI";
-                operateLog.tmdId = $"{_tmdId}";
-                operateLog.tmdName = $"{_tmdName}";
-                operateLog.visitApi = "/batchschool/upd-schoolPeriod ";
-                operateLog.operateTime = DateTime.Now;
+         
                 StringBuilder stringBuilder = new StringBuilder($"{_tmdId}【{_tmdName}】已操作新增学校的学段");
-
                 School school = new();
+
+                var cosmosClient = _azureCosmos.GetCosmosClient();
                 try
                 {
                     school = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>($"{_schoolCode}", new PartitionKey("Base"));
@@ -839,9 +786,9 @@ namespace TEAMModeBI.Controllers.BISchool
 
                     await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<School>(school, school.id, new PartitionKey("Base"));
 
-                    operateLog.operateDescribe = $"{stringBuilder}";
+                    //保存操作记录
+                    await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: stringBuilder?.ToString(), type: "schoolperiod-add", visitApi: "/batchschool/upd-schoolPeriod", funModel: mobel);
 
-                    await _azureStorage.Save<OperateLog>(operateLog);
                     return Ok(new { state = 200, school });
                 }
                 else return Ok(new { state = 400, school });
@@ -849,7 +796,7 @@ namespace TEAMModeBI.Controllers.BISchool
             }
             catch (Exception ex)
             {
-                await _dingDing.SendBotMsg($"BI,{_option.Location}  /batchschool/upd-schoolPeriod   \n {ex.Message}{ex.StackTrace}", GroupNames.成都开发測試群組);
+                await _dingDing.SendBotMsg($"BI,{_option.Location}  /batchschool/upd-schoolperiod   \n {ex.Message}{ex.StackTrace}", GroupNames.成都开发測試群組);
                 return BadRequest();
             }
         }
@@ -871,21 +818,6 @@ namespace TEAMModeBI.Controllers.BISchool
                 if (!jsonElement.TryGetProperty("setId", out JsonElement _setId)) return BadRequest();          //修改学段的ID
                 if (!jsonElement.TryGetProperty("setName", out JsonElement _setName)) return BadRequest();           //修改学段的名称
 
-                //操作记录
-                OperateLog operateLog = new OperateLog();
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-
-                operateLog.PartitionKey = "OperateLog-BI";
-                operateLog.RowKey = blobOrTable;
-                operateLog.recordID = blobOrTable;
-                operateLog.platformSource = "BI";
-                operateLog.tmdId = $"{_tmdId}";
-                operateLog.tmdName = $"{_tmdName}";
-                operateLog.visitApi = "/batchschool/set-schoolperiod";
-                operateLog.operateTime = DateTime.Now;
-                operateLog.operateDescribe = $"{_tmdId}【{_tmdName}】已操作修改学校学段信息,修改ID和名称:{_setId}{_setName}";
-                await _azureStorage.Save<OperateLog>(operateLog);
-
                 var cosmosClient = _azureCosmos.GetCosmosClient();
                 School school = new();
                 try
@@ -899,6 +831,10 @@ namespace TEAMModeBI.Controllers.BISchool
                     school.period.Find(x => x.id.Equals($"{_setId}")).name = $"{_setName}";
 
                     await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<School>(school, school.id, new PartitionKey("Base"));
+
+                    //保存操作记录
+                    await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: $"{_tmdId}【{_tmdName}】已操作修改学校学段信息,修改ID和名称:{_setId}{_setName}", type: "schoolperiod-update", visitApi: "/batchschool/set-schoolperiod", funModel: mobel);
+
                     return Ok(new { state = 200, school });
                 }
                 else return Ok(new { state = 400, school });
@@ -926,22 +862,6 @@ namespace TEAMModeBI.Controllers.BISchool
                 if (!jsonElement.TryGetProperty("schooId", out JsonElement _schoolCode)) return BadRequest();   //学校编号
                 if (!jsonElement.TryGetProperty("delId", out JsonElement _delId)) return BadRequest();               //删除学段的ID
 
-                //操作记录
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                OperateLog operateLog = new OperateLog
-                {
-                    PartitionKey = "OperateLog-BI",
-                    RowKey = blobOrTable,
-                    recordID = blobOrTable,
-                    platformSource = "BI",
-                    tmdId = $"{_tmdId}",
-                    tmdName = $"{_tmdName}",
-                    visitApi = "/batchschool/del-schoolperiod",
-                    operateTime = DateTime.Now,
-                    operateDescribe = $"{_tmdId}【{_tmdName}】已操作删除学校的学段,删除学段ID和名称:{_delId}"
-                };
-                await _azureStorage.Save<OperateLog>(operateLog);
-
                 var cosmosClient = _azureCosmos.GetCosmosClient();
                 School school = new();
                 try
@@ -955,6 +875,9 @@ namespace TEAMModeBI.Controllers.BISchool
                     school.period.Remove(school.period.Find(x => x.id.Equals($"{_delId}")));
                     await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<School>(school, school.id, new PartitionKey("Base"));
 
+                    //保存操作记录
+                    await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: $"{_tmdId}【{_tmdName}】已操作删除学校的学段,删除学段ID和名称:{_delId}", type: "schoolperiod-del", visitApi: "/batchschool/del-schoolperiod", funModel: mobel);
+
                     return Ok(new { state = 200, school });
                 }
                 else return Ok(new { state = 400, school });
@@ -988,20 +911,8 @@ namespace TEAMModeBI.Controllers.BISchool
                 jsonElement.TryGetProperty("setName", out JsonElement _setName);              //修改学段的名称
                 jsonElement.TryGetProperty("delId", out JsonElement _delId);                  //删除学段的ID
 
-
-                //操作记录
-                OperateLog operateLog = new OperateLog();
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                operateLog.PartitionKey = "OperateLog-BI";
-                operateLog.RowKey = blobOrTable;
-                operateLog.recordID = blobOrTable;
-                operateLog.platformSource = "BI";
-                operateLog.tmdId = $"{_tmdId}";
-                operateLog.tmdName = $"{_tmdName}";
-                operateLog.visitApi = "/batchschool/set-schoolperiodinfo";
-                operateLog.operateTime = DateTime.Now;
                 StringBuilder stringBuilder = new StringBuilder($"{_tmdId}【{_tmdName}】已操作");
-
+                string tempType = null;
                 var cosmosClient = _azureCosmos.GetCosmosClient();
 
                 School school = new();
@@ -1023,6 +934,7 @@ namespace TEAMModeBI.Controllers.BISchool
                             {
                                 school.period.Add(new Period { id = Guid.NewGuid().ToString(), name = $"{_periodName}", campusId = $"{_campusId}" });
                                 stringBuilder.Append($"新增学校学段,在原有校区中添加学段:学段ID:{_campusId}学段名称:{_periodName}");
+
                             }
                             else
                             {
@@ -1032,25 +944,30 @@ namespace TEAMModeBI.Controllers.BISchool
 
                                 stringBuilder.Append($"新增学校学段,新建校区中在添加学段:学段ID:{_campusId}学段名称:{_periodName}");
                             }
+                            tempType = "schoolperiod-add";
                             break;
                         //修改学段
                         case "set":
                             school.period.Find(x => x.id.Equals($"{_setId}")).name = $"{_setName}";
                             stringBuilder.Append($"修改学校学段,修改ID和名称:{_setId}{_setName}");
+                            tempType = "schoolperiod-set";
                             break;
 
                         //删除学段
                         case "del":
                             school.period.Remove(school.period.Find(x => x.id.Equals($"{_delId}")));
                             stringBuilder.Append($"删除学校的学段,删除学段ID和名称:{_delId}");
+                            tempType = "schoolperiod-del";
                             break;
                         default:
                             return Ok(new { state = 1, message = "mode参数错误" });
                     }
-                    operateLog.operateDescribe = $"{stringBuilder}";
-                    await _azureStorage.Save<OperateLog>(operateLog);
+
+                    //保存操作记录
+                    await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: stringBuilder?.ToString(), type: tempType?.ToString(), visitApi: "/batchschool/set-schoolperiodinfo", funModel: mobel);
 
                     await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<School>(school, school.id, new PartitionKey("Base"));
+
                     return Ok(new { state = 200, school });
                 }
                 else return Ok(new { state = 400, school });

+ 5 - 18
TEAMModeBI/Controllers/BISchool/SchoolController.cs

@@ -10,6 +10,7 @@ using System.Threading.Tasks;
 using TEAMModelOS.Models;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
+using TEAMModelOS.SDK.Helper.Common.TableHelper;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos.BI;
 
@@ -23,6 +24,7 @@ namespace TEAMModeBI.Controllers.BISchool
         private readonly DingDing _dingDing;
         private readonly Option _option;
         private readonly AzureStorageFactory _azureStorage;
+        public readonly string mobel = "学校";
 
         public SchoolController(AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage, IOptionsSnapshot<Option> option) 
         {
@@ -98,23 +100,7 @@ namespace TEAMModeBI.Controllers.BISchool
                 List<string> schoolCodes = _schoolCode.ToObject<List<string>>();
 
                 var cosmosCliet = _azureCosmos.GetCosmosClient();
-                //操作记录
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                OperateLog operateLog = new OperateLog
-                {
-                    PartitionKey = "OperateLog-BI",
-                    RowKey = blobOrTable,
-                    recordID = blobOrTable,
-                    platformSource = "BI",
-                    tmdId = $"{_tmdId}",
-                    tmdName = $"{_tmdName}",
-                    visitApi = "/schoolcheck/set-schooljoinarea",
-                    operateType = "修改",
-                    funModule = "学校",
-                    operateTime = DateTime.Now,
-                    operateDescribe = $"{_tmdName}【{_tmdId}】已操作学校加入区域功能,加入的区域:{standard},学校ID:{string.Join("|", schoolCodes.ToArray())}"
-                };
-
+                
                 if (schoolCodes.Count > 0) 
                 {
                     foreach (var tempCode in schoolCodes) 
@@ -129,7 +115,8 @@ namespace TEAMModeBI.Controllers.BISchool
                     }
                 }
 
-                await _azureStorage.Save<OperateLog>(operateLog);   //保存操作记录
+                //保存操作记录
+                await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: $"{_tmdName}【{_tmdId}】已操作学校加入区域功能,加入的区域:{standard},学校ID:{string.Join("|", schoolCodes.ToArray())}", type: "school-join", visitApi: "/schoolcheck/set-schooljoinarea", funModel: mobel);
 
                 return Ok(new { state = 200 });
             }

+ 4 - 18
TEAMModeBI/Controllers/DingDingStruc/DDBackEndController.cs

@@ -21,6 +21,7 @@ using System.Net;
 using HTEXLib.COMM.Helpers;
 using TEAMModelOS.SDK.Models.Cosmos.BI;
 using System.Net.Http.Json;
+using TEAMModelOS.SDK.Helper.Common.TableHelper;
 
 namespace TEAMModeBI.Controllers.DingDingStruc
 {
@@ -104,24 +105,6 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                     userid = v2GetResponse.Result.Userid,
                 };
 
-                //操作记录实体
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                OperateLog operateLog = new OperateLog
-                {
-                    PartitionKey = "OperateLog-BI",
-                    RowKey = blobOrTable,
-                    recordID = blobOrTable,
-                    platformSource = "BI",
-                    tmdId = $"{_tmdId}",
-                    tmdName = $"{_tmdName}",
-                    operateDescribe = $"{_tmdName}【{_tmdId}】已操作创区功能",
-                    visitApi = "ddbackend/get-backendbind",
-                    operateTime = DateTime.Now
-                };
-                //保存操作记录
-                await _azureStorage.Save<OperateLog>(operateLog);
-
-
                 //检查是否有绑定信息
                 var client = _azureCosmos.GetCosmosClient();
                 Teacher teacher = null;
@@ -174,6 +157,9 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                     else return Ok(new { state = 2, message = "醍摩豆账户有误,请检查醍摩豆账户!" });
                 }
 
+                //保存操作记录
+                await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: $"{_tmdName}【{_tmdId}】醍摩豆账号和{v2GetResponse.Result.Name}【{v2GetResponse.Result.Userid}】钉钉账户绑定成功", type: "tabledd-del", visitApi: "/ddbackend/get-backendbind", funModel: "绑定");
+
                 return Ok(new { state = 200, message = "绑定成功!" });
             }
             catch (Exception ex)

+ 15 - 62
TEAMModeBI/Controllers/DingDingStruc/TableDingDingInfoController.cs

@@ -20,6 +20,7 @@ using TEAMModelOS.SDK.Extension;
 using OpenXmlPowerTools;
 using System.Text;
 using Azure.Cosmos;
+using TEAMModelOS.SDK.Helper.Common.TableHelper;
 
 namespace TEAMModeBI.Controllers.DingDingStruc
 {
@@ -37,6 +38,7 @@ namespace TEAMModeBI.Controllers.DingDingStruc
         private readonly DingDing _dingDing;
         private readonly Option _option;
         private readonly IHttpClientFactory _http;
+        public readonly string mobel = "组织员工";
 
         public TableDingDingInfoController(AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage, IOptionsSnapshot<Option> option, IConfiguration configuration, IHttpClientFactory http)
         {
@@ -61,23 +63,6 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                 if (!jsonElement.TryGetProperty("tmdId", out JsonElement _tmdId)) return BadRequest();   //醍摩豆账户
                 if (!jsonElement.TryGetProperty("tmdName", out JsonElement _tmdName)) return BadRequest(); //醍摩豆账号名称
 
-                //操作记录;
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                OperateLog operateLog = new OperateLog()
-                {
-                    PartitionKey = "OperateLog-BI",
-                    RowKey = blobOrTable,
-                    recordID = blobOrTable,
-                    platformSource = "BI",
-                    tmdId = $"{_tmdId}",
-                    tmdName = $"{_tmdName}",
-                    visitApi = "/tabledd/get-dingdingusers",
-                    operateTime = DateTime.Now,
-                    operateType = "修改",
-                    funModule = "钉钉信息",
-                    operateDescribe = $"{_tmdName}【{_tmdId}】账户操作从钉钉组织结构更新至Azure Table表【DDUserInfo】中。"
-                };
-
                 string appKey = _configuration["DingDingAuth:appKey"];
                 string appSecret = _configuration["DingDingAuth:appSecret"];
 
@@ -174,7 +159,8 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                     }
                 }
 
-                await _azureStorage.Save<OperateLog>(operateLog); //保存操作记录
+                //保存操作记录
+                await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: $"{_tmdName}【{_tmdId}】账户操作从钉钉组织结构更新至Azure Table表【DDUserInfo】中。", type: "tabledd-update", visitApi: "/tabledd/get-dingdingusers", funModel: mobel);
 
                 var tempddUserInfos = ddUserInfos.GroupBy(c => c.RowKey).Select(c => c.First()).ToList();//去重
                 //List<DingDingUserInfo> TempdingDingUserInfos = await _azureStorage.SaveOrUpdateAll(dingDingUserInfos);  //只是保存至Table
@@ -259,19 +245,6 @@ namespace TEAMModeBI.Controllers.DingDingStruc
 
                 string divide = _configuration["CustomParam:SiteScope"];
 
-                //操作记录
-                OperateLog operateLog = new OperateLog();
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                operateLog.PartitionKey = "OperateLog-BI";
-                operateLog.RowKey = blobOrTable;
-                operateLog.recordID = blobOrTable;
-                operateLog.platformSource = "BI";
-                operateLog.tmdId = $"{_tmdId}";
-                operateLog.tmdName = $"{_tmdName}";
-                operateLog.visitApi = "/tabledd/set-ddinductionuser";
-                operateLog.operateTime = DateTime.Now;
-                operateLog.operateDescribe = $"{_tmdName}【{_tmdId}】已操作添加待入职员工至table数据表中";
-
                 //获取access_token
                 IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
                 OapiGettokenRequest request = new OapiGettokenRequest() { Appkey = appKey, Appsecret = appSecret };
@@ -301,7 +274,10 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                     }
 
                     List<DingDingUserInfo> tempddUserInfos = await _azureStorage.SaveAll(ddUserInfos);
-                    await _azureStorage.Save<OperateLog>(operateLog); //保存操作记录
+
+                    //保存操作记录
+                    await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: $"{_tmdName}【{_tmdId}】已操作添加待入职员工至table数据表中", type: "tabledd-add", visitApi: "/tabledd/set-ddinductionuser", funModel: mobel);
+
                     if (ddUserInfos.Count == tempddUserInfos.Count)
                     {
                         return Ok(new { state = 200, UserInfo = tempddUserInfos });
@@ -341,19 +317,6 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                 string appSecret = _configuration["DingDingAuth:appSecret"];
                 string divide = _configuration["CustomParam:SiteScope"];
 
-                //操作记录
-                OperateLog operateLog = new OperateLog();
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                operateLog.PartitionKey = "OperateLog-BI";
-                operateLog.RowKey = blobOrTable;
-                operateLog.recordID = blobOrTable;
-                operateLog.platformSource = "BI";
-                operateLog.tmdId = $"{_tmdId}";
-                operateLog.tmdName = $"{_tmdName}";
-                operateLog.visitApi = "/tabledd/del-ddquituser";
-                operateLog.operateTime = DateTime.Now;
-                operateLog.operateDescribe = $"{_tmdName}【{_tmdId}】已操作从table数据表中删除离职员工";
-
                 //获取access_token
                 IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
                 OapiGettokenRequest request = new OapiGettokenRequest() { Appkey = appKey, Appsecret = appSecret };
@@ -378,7 +341,9 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                         await _azureStorage.DeleteSingle<DingDingUserInfo>(divide, $"{itemId}");
                     }
 
-                    await _azureStorage.Save<OperateLog>(operateLog); //保存操作记录
+                    //保存操作记录
+                    await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: $"{_tmdName}【{_tmdId}】已操作从table数据表中删除离职员工", type: "tabledd-del", visitApi: "/tabledd/del-ddquituser", funModel: mobel);
+
                     return Ok(new { state = 200 });
                 }
                 else
@@ -411,19 +376,6 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                 if (!jsonElement.TryGetProperty("rowKey", out JsonElement userId)) return BadRequest();
                 if (!jsonElement.TryGetProperty("permissions", out JsonElement _permissions)) return BadRequest();
 
-                //操作记录
-                OperateLog operateLog = new OperateLog();
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                operateLog.PartitionKey = "OperateLog-BI";
-                operateLog.RowKey = blobOrTable;
-                operateLog.recordID = blobOrTable;
-                operateLog.platformSource = "BI";
-                operateLog.tmdId = $"{_tmdId}";
-                operateLog.tmdName = $"{_tmdName}";
-                operateLog.operateType = "修改";
-                operateLog.funModule = "权限";
-                operateLog.visitApi = "/tabledd/set-permissions";
-                operateLog.operateTime = DateTime.Now;
                 StringBuilder stringBuilder = new StringBuilder($"{_tmdName}【{_tmdId}】醍摩豆账号");
                 List<DingDingUserInfo> ddUserInfo = new List<DingDingUserInfo>();
                 var tempUser = await _azureStorage.FindListByDict<DingDingUserInfo>(new Dictionary<string, object> { { "PartitionKey", $"{partitionKey}" }, { "RowKey", $"{userId}" } });
@@ -433,7 +385,7 @@ namespace TEAMModeBI.Controllers.DingDingStruc
 
                 foreach (var item in tempUser)
                 {
-                    stringBuilder.Append($"操作醍摩豆账户{item.tmdName}【{item.tmdId}】修改权限:{string.Join(" ", listper.ToArray())}");
+                    stringBuilder.Append($"操作醍摩豆账户{item.tmdName}【{item.tmdId}】修改权限:{string.Join("|", listper.ToArray())}");
                     if (string.IsNullOrEmpty($"{item.roles}"))
                     {
                         item.roles = "assist";
@@ -453,8 +405,9 @@ namespace TEAMModeBI.Controllers.DingDingStruc
 
                 ddUserInfo = await _azureStorage.UpdateAll<DingDingUserInfo>(ddUserInfo);
 
-                operateLog.operateDescribe = stringBuilder.ToString();
-                await _azureStorage.Save<OperateLog>(operateLog);  //保存操作记录
+                //保存操作记录
+                await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: stringBuilder?.ToString(), type: "tabledd-del", visitApi: "/tabledd/set-permissions", funModel: "BI权限");
+
                 return Ok(new { state = 200, ddUserInfo, roles, permissions });
             }
             catch (Exception ex)

+ 13 - 443
TEAMModeBI/Controllers/LoginController.cs

@@ -29,6 +29,7 @@ using Newtonsoft.Json.Linq;
 using TEAMModelOS.SDK.Models.Cosmos.BI;
 using Azure.Storage.Sas;
 using System.Net.Http.Json;
+using TEAMModelOS.SDK.Helper.Common.TableHelper;
 //using static DingTalk.Api.Response.OapiV2UserGetResponse;
 
 namespace TEAMModeBI.Controllers
@@ -255,410 +256,6 @@ namespace TEAMModeBI.Controllers
             }
         }
 
-        /// <summary>
-        /// 钉钉绑定醍摩豆信息
-        /// </summary>
-        /// <param name="ddbindparam"></param>
-        /// <returns></returns>
-        [ProducesDefaultResponseType]
-        [HttpPost("bind")]
-        [AllowAnonymous]
-        public async Task<IActionResult> Bind(JsonElement jsonElement)
-        {
-            try
-            {
-                jsonElement.TryGetProperty("mobile", out JsonElement mobile);
-                jsonElement.TryGetProperty("idToken", out JsonElement idToken);
-                if (!jsonElement.TryGetProperty("param", out JsonElement param)) return BadRequest();
-
-                HttpClient httpClient = _http.CreateClient();
-                Teacher teacher = new Teacher();
-                DingDingbinds ddbinds = param.ToObject<DingDingbinds>();  //将json数据转换为实体类
-                TmdidImplicit implicit_token = new TmdidImplicit();
-
-                Dictionary<string, object> dic = new Dictionary<string, object> { { "PartitionKey", "authority-bi" } };//设置只访问BI的权限
-                List<Authority> authorityBIList = await _azureStorage.FindListByDict<Authority>(dic);  //获取权限列表
-                List<string> roles = new List<string>();//角色列表
-                List<string> permissions = new List<string>();//权限列表
-                List<string> depts = new List<string>();    //部门id
-                School school_base = new School();
-                string school_code = null;
-                var auth_token = "";
-
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                OperateLog operateLog = new OperateLog();//操作记录
-                operateLog.PartitionKey = "OperateLog-BI";
-                operateLog.RowKey = blobOrTable;
-                operateLog.recordID = blobOrTable;
-                operateLog.platformSource = "BI";
-                operateLog.tmdId = $"{teacher.id}";
-                operateLog.tmdName = $"{teacher.name}";
-                operateLog.visitApi = "common/login/bind";
-                operateLog.operateTime = DateTime.Now;
-
-                StringBuilder strBuilder = new StringBuilder();
-
-                if (!string.IsNullOrEmpty($"{mobile}")) 
-                {
-                    List<JsonElement> mbs = new List<JsonElement>() { mobile };
-                    string url = _configuration.GetValue<string>("HaBookAuth:CoreId:userinfo");
-
-                    HttpResponseMessage responseMessage = await httpClient.PostAsJsonAsync(url, mbs);
-                    if (responseMessage.StatusCode == HttpStatusCode.OK)
-                    {
-                        string responseBody = await responseMessage.Content.ReadAsStringAsync();
-                        List<JsonElement> json_id = responseBody.ToObject<List<JsonElement>>();
-                        string temp_id = null;
-                        if (json_id.IsNotEmpty()) 
-                        {
-                            temp_id = json_id[0].GetProperty("id").ToString();
-                        }
-
-                        var client = _azureCosmos.GetCosmosClient();
-                        teacher = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<Teacher>(temp_id, new PartitionKey("Base"));
-
-                        string sql = $"SELECT distinct value(c) FROM c join A1 in c.ddbinds where A1.userid='{ddbinds.userid}' and A1.unionid='{ddbinds.unionid}'";
-                        await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sql,
-                            requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
-                        {
-                            teacher = item;
-                            break;
-                        }
-                        if (teacher != null)
-                        {
-                            if (teacher.id.Equals(temp_id))
-                            {
-                                var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
-                                var location = _option.Location;
-                                implicit_token  = await _aoreAPIHttpService.Implicit(
-                                    new Dictionary<string, string>()
-                                    {
-                                        { "grant_type", "implicit" },
-                                        { "client_id",clientID },
-                                        { "account",teacher.id },
-                                        { "nonce",Guid.NewGuid().ToString()}
-                                    }, location, _configuration);
-
-                                if (implicit_token!=null)
-                                {
-                                    var ddbind = teacher.ddbinds.Find(x => x.userid.Equals($"{ddbinds.userid}") && x.unionid.Equals($"{ddbinds.unionid}"));
-                                    if (ddbind == null)
-                                    {
-                                        teacher.ddbinds = new List<Teacher.DingDingBind> { new Teacher.DingDingBind { type = $"{type}", deptIdList = ddbinds.deptIdList, title = ddbinds.title, name = ddbinds.name, unionid = ddbinds.unionid, userid = ddbinds.userid } };
-                                        await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey(teacher.code));
-
-                                        if (teacher.defaultSchool != null)
-                                        {
-                                            var schoolRoles = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(teacher.id, new PartitionKey($"Teacher-{teacher.defaultSchool}"));
-                                            if (schoolRoles.Status == 200)
-                                            {
-                                                using var json = await JsonDocument.ParseAsync(schoolRoles.ContentStream);
-                                                if (json.RootElement.TryGetProperty("roles", out JsonElement _roles) && _roles.ValueKind != JsonValueKind.Null)
-                                                {
-                                                    foreach (var obj in _roles.EnumerateArray())
-                                                    {
-                                                        //初始定义顾问的assistant 更改为assist
-                                                        if (obj.GetString().Equals($"assist"))
-                                                        {
-                                                            roles.Add(obj.GetString());
-                                                        }
-                                                    }
-                                                }
-                                                if (json.RootElement.TryGetProperty("permissions", out JsonElement _permissions) && _permissions.ValueKind != JsonValueKind.Null)
-                                                {
-                                                    foreach (var obj in _permissions.EnumerateArray())
-                                                    {
-                                                        //限制只显示BI权限
-                                                        foreach (var aut in authorityBIList)
-                                                        {
-                                                            if (aut.RowKey.Equals(obj.GetString()))
-                                                            {
-                                                                permissions.Add(obj.GetString());
-                                                            }
-                                                        }
-                                                    }
-                                                }
-                                            }
-
-                                            school_base = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>($"{teacher.defaultSchool}", new PartitionKey("Base"));
-                                            //foreach (var period in school_base.period)
-                                            //{
-                                            //    try
-                                            //    {
-                                            //        await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<ItemCond>($"{period.id}", new PartitionKey($"ItemCond-{teacher.defaultSchool}"));
-                                            //    }
-                                            //    catch (CosmosException)
-                                            //    {
-                                            //        ItemCond itemCond = new ItemCond
-                                            //        {
-                                            //            id = period.id,
-                                            //            pk = "ItemCond",
-                                            //            code = $"ItemCond-{teacher.defaultSchool}",
-                                            //            ttl = -1,
-                                            //        };
-                                            //        await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<ItemCond>(itemCond, new PartitionKey($"ItemCond-{teacher.defaultSchool}"));
-                                            //    }
-                                            //}
-                                            school_code = teacher.defaultSchool;
-                                        }
-
-                                        foreach (var tempdept in ddbinds.deptIdList)
-                                        {
-                                            depts.Add(tempdept.ToString());
-                                        }
-                                        strBuilder.Append($"醍摩豆账户{teacher.id}【{teacher.name}】和钉钉账户{ddbinds.userid}【{ddbinds.name}】进行绑定,绑定成功");
-                                    }
-                                }
-                                else 
-                                {
-                                    if (teacher.ddbinds.IsNotEmpty()) 
-                                    {
-                                        teacher.ddbinds.RemoveAll(x => x.userid.Equals(ddbinds.userid) && x.unionid.Equals(ddbinds.unionid));
-                                        await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey(teacher.code));
-                                    }
-
-                                    strBuilder.Append($"醍摩豆账户{teacher.id}【{teacher.name}】和钉钉账户{ddbinds.userid}【{ddbinds.name}】进行绑定,绑定失败");
-                                    operateLog.operateDescribe = strBuilder.ToString();
-                                    await _azureStorage.Save<OperateLog>(operateLog);
-                                    return Ok(new { state = 1, message = "绑定失败" });                                
-                                }
-                            }
-                            else
-                            {
-                                operateLog.operateDescribe = $"醍摩豆账户{teacher.id}【{teacher.name}】和钉钉账户{ddbinds.userid}【{ddbinds.name}】进行绑定,账号已被别的醍摩豆id绑定";
-                                await _azureStorage.Save<OperateLog>(operateLog);
-
-                                return Ok(new
-                                {
-                                    location = _option.Location,
-                                    //账号已被别的醍摩豆id绑定
-                                    state = 2,
-                                    tmdid = teacher.id,
-                                    name = teacher.name,
-                                    ddid = ddbinds.userid,
-                                    ddname = ddbinds.name
-                                });
-                            }
-                        }
-                        else 
-                        {
-                            teacher = new Teacher
-                            {
-                                id = temp_id,
-                                pk = "Base",
-                                code = "Base",
-                                name = temp_id,
-                                //创建账号并第一次登录IES5则默认赠送1G
-                                size = 1,
-                                defaultSchool = null,
-                                schools = new List<Teacher.TeacherSchool>(),
-                                ddbinds = new List<Teacher.DingDingBind> { new Teacher.DingDingBind { type = $"{type}", deptIdList = ddbinds.deptIdList, title = ddbinds.title, name = ddbinds.name, unionid = ddbinds.unionid, userid = ddbinds.userid } },
-                            };
-                            var container = _azureStorage.GetBlobContainerClient(temp_id);
-                            await container.CreateIfNotExistsAsync(PublicAccessType.None); //尝试创建Teacher私有容器,如存在则不做任何事,保障容器一定存在
-                            teacher = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<Teacher>(teacher, new PartitionKey("Base"));
-
-                            foreach (var tempdept in ddbinds.deptIdList)
-                            {
-                                depts.Add(tempdept.ToString());
-                            }
-
-                            auth_token = JwtAuthExtension.CreateAuthToken(_option.HostName, teacher.id, teacher.name?.ToString(), teacher.picture?.ToString(), _option.JwtSecretKey, scope: Constant.ScopeTeacher, schoolID: school_code?.ToString(), standard: school_base.standard, roles: roles.ToArray(), permissions: permissions.ToArray(), ddDepts: depts.ToArray(), ddsub: ddbinds.userid);
-
-                            strBuilder.Append($"醍摩豆账户{teacher.id}【{teacher.name}】和钉钉账户{ddbinds.userid}【{ddbinds.name}】进行绑定,新建的账户绑定成功");
-                     
-                        }
-                    }
-                    else
-                    {
-                        return Ok(new { state = 3, message = "通过手机号查询用户信息异常" });
-                    }
-                }
-
-                if (!string.IsNullOrEmpty($"{idToken}"))
-                {
-                    var jwt = new JwtSecurityToken($"{idToken}");
-                    //if (!jwt.Payload.Iss.Equals("account.teammodel", StringComparison.OrdinalIgnoreCase)) return BadRequest();
-                    var id = jwt.Payload.Sub;
-                    jwt.Payload.TryGetValue("name", out object name);
-                    jwt.Payload.TryGetValue("picture", out object picture);
-                    //检查是否有绑定信息
-                    var client = _azureCosmos.GetCosmosClient();
-                    teacher = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<Teacher>(id, new PartitionKey("Base"));
-                    string sql = $"select distinct value(c) from c join A1 in c.ddbinds where A1.userid='{ddbinds.userid}' AND A1.unionid ='{ddbinds.unionid}'";
-                    await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sql,
-                        requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
-                    {
-                        teacher = item;
-                        break;
-                    }
-
-                    if (teacher != null)
-                    {
-                        if (teacher.id.Equals(id))
-                        {
-                            var ddbind = teacher.ddbinds.Find(x => x.userid.Equals($"{ddbinds.userid}") && x.unionid.Equals($"{ddbinds.unionid}"));
-                            if (ddbind == null)
-                            {
-                                teacher.ddbinds = new List<Teacher.DingDingBind> { new Teacher.DingDingBind { type = $"{type}", deptIdList = ddbinds.deptIdList, title = ddbinds.title, name = ddbinds.name, unionid = ddbinds.unionid, userid = ddbinds.userid } };
-                                await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey(teacher.code));
-                                
-                                //添加
-                                if (teacher.defaultSchool != null)
-                                {
-                                    var schoolRoles = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(teacher.id, new PartitionKey($"Teacher-{teacher.defaultSchool}"));
-                                    if (schoolRoles.Status == 200)
-                                    {
-                                        using var json = await JsonDocument.ParseAsync(schoolRoles.ContentStream);
-                                        if (json.RootElement.TryGetProperty("roles", out JsonElement _roles) && _roles.ValueKind != JsonValueKind.Null)
-                                        {
-                                            foreach (var obj in _roles.EnumerateArray())
-                                            {
-                                                //初始定义顾问的assistant 更改为assist
-                                                if (obj.GetString().Equals($"assist"))
-                                                {
-                                                    roles.Add(obj.GetString());
-                                                }
-                                            }
-                                        }
-                                        if (json.RootElement.TryGetProperty("permissions", out JsonElement _permissions) && _permissions.ValueKind != JsonValueKind.Null)
-                                        {
-                                            foreach (var obj in _permissions.EnumerateArray())
-                                            {
-                                                //限制只显示BI权限
-                                                foreach (var aut in authorityBIList)
-                                                {
-                                                    if (aut.RowKey.Equals(obj.GetString()))
-                                                    {
-                                                        permissions.Add(obj.GetString());
-                                                    }
-                                                }
-                                            }
-                                        }
-                                    }
-
-                                    school_base = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>($"{teacher.defaultSchool}", new PartitionKey("Base"));
-                                    //foreach (var period in school_base.period)
-                                    //{
-                                    //    try
-                                    //    {
-                                    //        await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<ItemCond>($"{period.id}", new PartitionKey($"ItemCond-{teacher.defaultSchool}"));
-                                    //    }
-                                    //    catch (CosmosException)
-                                    //    {
-                                    //        ItemCond itemCond = new ItemCond
-                                    //        {
-                                    //            id = period.id,
-                                    //            pk = "ItemCond",
-                                    //            code = $"ItemCond-{teacher.defaultSchool}",
-                                    //            ttl = -1,
-                                    //        };
-                                    //        await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<ItemCond>(itemCond, new PartitionKey($"ItemCond-{teacher.defaultSchool}"));
-                                    //    }
-                                    //}
-                                    school_code = teacher.defaultSchool;
-                                }
-
-                                foreach (var tempdept in ddbinds.deptIdList)
-                                {
-                                    depts.Add(tempdept.ToString());
-                                }
-                            }
-
-                            auth_token = JwtAuthExtension.CreateAuthToken(_option.HostName, teacher.id, teacher.name?.ToString(), teacher.picture?.ToString(), _option.JwtSecretKey, scope: Constant.ScopeTeacher, schoolID: school_code?.ToString(), standard: school_base.standard, roles: roles.ToArray(), permissions: permissions.ToArray(), ddDepts: depts.ToArray(), ddsub: ddbinds.userid);
-
-                            operateLog.operateDescribe = $"新建的账户的醍摩豆账户{teacher.id}【{teacher.name}】和钉钉账户{ddbinds.userid}【{ddbinds.name}】进行绑定,绑定成功";
-                            await _azureStorage.Save<OperateLog>(operateLog);
-
-                            return Ok(new
-                            {
-                                state = 200,
-                                auth_token = auth_token,
-                                idToken = idToken,
-                                teacher = teacher,
-                                location = _option.Location,
-                            });
-                        }
-                        else
-                        {
-                            operateLog.operateDescribe = $"醍摩豆账户{teacher.id}【{teacher.name}】和钉钉账户{ddbinds.userid}【{ddbinds.name}】进行绑定,账号已被别的醍摩豆id绑定";
-                            await _azureStorage.Save<OperateLog>(operateLog);
-
-                            return Ok(new
-                            {
-                                location = _option.Location,
-                                //账号已被别的醍摩豆id绑定
-                                state = 2,
-                                tmdid = teacher.id,
-                                name = teacher.name,
-                                userid = ddbinds.userid,
-                                ddname = ddbinds.name
-                            });
-                        }
-                    }
-                    else
-                    {
-                        teacher = new Teacher
-                        {
-                            id = id,
-                            pk = "Base",
-                            code = "Base",
-                            name = name?.ToString(),
-                            picture = picture?.ToString(),
-                            //创建账号并第一次登录IES5则默认赠送1G
-                            size = 1,
-                            defaultSchool = null,
-                            schools = new List<Teacher.TeacherSchool>(),
-                            ddbinds = new List<Teacher.DingDingBind> { new Teacher.DingDingBind { type = $"{type}", deptIdList = ddbinds.deptIdList, title = ddbinds.title, name = ddbinds.name, unionid = ddbinds.unionid, userid = ddbinds.userid } }
-                        };
-
-                        var container = _azureStorage.GetBlobContainerClient(id);
-                        await container.CreateIfNotExistsAsync(PublicAccessType.None); //尝试创建Teacher私有容器,如存在则不做任何事,保障容器一定存在
-                        teacher = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<Teacher>(teacher, new PartitionKey("Base"));
-
-                        foreach (var tempdept in ddbinds.deptIdList)
-                        {
-                            depts.Add(tempdept.ToString());
-                        }
-
-                        auth_token = JwtAuthExtension.CreateAuthToken(_option.HostName, teacher.id, teacher.name?.ToString(), teacher.picture?.ToString(), _option.JwtSecretKey, scope: Constant.ScopeTeacher, schoolID: school_code?.ToString(), standard: school_base.standard, roles: roles.ToArray(), permissions: permissions.ToArray(), ddDepts: depts.ToArray(), ddsub: ddbinds.userid);
-
-                        strBuilder.Append($"醍摩豆账户{teacher.id}【{teacher.name}】和钉钉账户{ddbinds.userid}【{ddbinds.name}】进行绑定,新建的账户绑定成功");                        
-                        await _azureStorage.Save<OperateLog>(operateLog);
-                        return Ok(new
-                        {
-                            state = 200,
-                            auth_token = auth_token,
-                            idToken = id,
-                            //teacher = teacher,
-                            location = _option.Location,
-                        });
-                    }
-                }
-
-                auth_token = JwtAuthExtension.CreateAuthToken(_option.HostName, teacher.id, teacher.name?.ToString(), teacher.picture?.ToString(), _option.JwtSecretKey, scope: Constant.ScopeTeacher, schoolID: school_code.ToString(), standard: school_base.standard, roles: roles.ToArray(), permissions: permissions.ToArray(), ddDepts: depts.ToArray(), ddsub: ddbinds.userid);
-                string temp_idToken = string.IsNullOrEmpty($"{idToken}") ? implicit_token.id_token : idToken.ToString();
-                operateLog.operateDescribe = strBuilder.ToString();
-                return Ok(new
-                {
-                    state = 200,
-                    auth_token = auth_token,
-                    idToken = temp_idToken,
-                    teacher = teacher,
-                    location = _option.Location,
-                });
-            }
-            catch (Exception ex)
-            {
-                await _dingDing.SendBotMsg($"BI,{_option.Location} common/login/bind   \n {ex.Message}{ex.StackTrace} ", GroupNames.成都开发測試群組);
-                return Ok(new
-                {
-                    state = 1,
-                    location = _option.Location                    
-                });
-            }
-        }
-
         /// <summary>
         /// 依据id_Ttoken获取教师信息
         /// </summary>
@@ -927,16 +524,6 @@ namespace TEAMModeBI.Controllers
                 if (!jsonElement.TryGetProperty("partitionKey", out JsonElement partitionKey)) return BadRequest();
                 if (!jsonElement.TryGetProperty("rowKey", out JsonElement userId)) return BadRequest();
 
-                //操作记录
-                OperateLog operateLog = new OperateLog();
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                operateLog.PartitionKey = "OperateLog-BI";
-                operateLog.RowKey = blobOrTable;
-                operateLog.recordID = blobOrTable;
-                operateLog.platformSource = "BI";
-                operateLog.visitApi = "/common/login/set-ddinductionuser";
-                operateLog.operateTime = DateTime.Now;
-
                 HttpClient httpClient = _http.CreateClient();
                 string url = _configuration.GetValue<string>("HaBookAuth:CoreId:userinfo");
                 HttpResponseMessage responseMessage = await httpClient.PostAsJsonAsync(url, moile);
@@ -961,25 +548,20 @@ namespace TEAMModeBI.Controllers
                                 itemUser.picture = item.GetProperty("picture").ToString();
                                 itemUser.mail = item.GetProperty("mail").ToString();
 
-                                operateLog.operateType = "修改";
-                                operateLog.funModule = "钉钉绑定";
-                                operateLog.tmdId = item.GetProperty("id").ToString();
-                                operateLog.tmdName = item.GetProperty("name").ToString();
-                                operateLog.operateDescribe = $"{tmdName}【{tmdId}】醍摩豆账号和{itemUser.name}【{itemUser.RowKey}】钉钉账户绑定成功";
-
+                                //保存操作记录
+                                await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{tmdId}", tmdName: $"{tmdName}", msg: $"{tmdName}【{tmdId}】醍摩豆账号和{itemUser.name}【{itemUser.RowKey}】钉钉账户绑定成功", type: "tabledd-update", visitApi: "/common/login/binguser", funModel: "绑定");
                                 ddUserInfos.Add(itemUser);
                             }
                         }
 
                         var dingDingUserInfos = await _azureStorage.UpdateAll<DingDingUserInfo>(ddUserInfos);
-                        await _azureStorage.Save<OperateLog>(operateLog); //保存操作记录
+
 
                         return Ok(new { state = 200, ddUsers = dingDingUserInfos });
                     }
                     else return Ok(new { state = 400, message = "该手机没有注册提莫信息" });
                 }
                 else return Ok(new { state = responseMessage.StatusCode });
-
             }
             catch (Exception ex)
             {
@@ -1020,16 +602,6 @@ namespace TEAMModeBI.Controllers
                     }
                     else
                     {
-                        //操作记录
-                        OperateLog operateLog = new OperateLog();
-                        string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                        operateLog.PartitionKey = "OperateLog-BI";
-                        operateLog.RowKey = blobOrTable;
-                        operateLog.recordID = blobOrTable;
-                        operateLog.platformSource = "BI";
-                        operateLog.visitApi = "/common/login/get-ddinfo";
-                        operateLog.operateTime = DateTime.Now;
-
                         HttpClient httpClient = _http.CreateClient();
                         string url = _configuration.GetValue<string>("HaBookAuth:CoreId:userinfo");
                         HttpResponseMessage responseMessage = await httpClient.PostAsJsonAsync(url, moile);
@@ -1040,29 +612,27 @@ namespace TEAMModeBI.Controllers
                             if (temp.Length > 0)
                             {
                                 List<JsonElement> itemjson = temp.ToObject<List<JsonElement>>();
+                                string tmdId = null;
+                                string tmdName = null;
                                 foreach (var item in itemjson)
                                 {
-                                    var tmdId = item.GetProperty("id").ToString();
-                                    var tmdName = item.GetProperty("name").ToString();
-                                    itemUser.tmdId = tmdId;
-                                    itemUser.tmdName = tmdName;
+                                    tmdId = item.GetProperty("id").ToString();
+                                    tmdName = item.GetProperty("name").ToString();
+                                    itemUser.tmdId = tmdId?.ToString();
+                                    itemUser.tmdName = tmdName?.ToString();
                                     itemUser.tmdMobile = item.GetProperty("mobile").ToString();
                                     itemUser.picture = item.GetProperty("picture").ToString();
                                     itemUser.mail = item.GetProperty("mail").ToString();
                                     roles = !string.IsNullOrEmpty($"{itemUser.roles}") ? new List<string>(itemUser.roles.Split(",")) : new List<string>();
                                     permissions = !string.IsNullOrEmpty($"{itemUser.permissions}") ? new List<string>(itemUser.permissions.Split(",")) : new List<string>();
 
-                                    operateLog.operateType = "修改";
-                                    operateLog.funModule = "钉钉绑定";
-                                    operateLog.tmdId = item.GetProperty("id").ToString();
-                                    operateLog.tmdName = item.GetProperty("name").ToString();
-                                    operateLog.operateDescribe = $"{tmdName}【{tmdId}】醍摩豆账号和{itemUser.name}【{itemUser.RowKey}】钉钉账户绑定成功";
-
                                     ddUserInfos.Add(itemUser);
                                 }
 
                                 ddUserInfos = await _azureStorage.UpdateAll<DingDingUserInfo>(ddUserInfos);
-                                await _azureStorage.Save<OperateLog>(operateLog); //保存操作记录
+
+                                //保存操作记录
+                                await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: tmdId?.ToString(), tmdName: tmdName?.ToString(), msg: $"{tmdName}【{tmdId}】醍摩豆账号和{itemUser.name}【{itemUser.RowKey}】钉钉账户绑定成功", type: "tabledd-update", visitApi: "/common/login/get-ddinfo", funModel: "绑定");
                             }
                             else return Ok(new { state = 400, message = "该手机没有注册醍摩豆账号信息" });
                         }

+ 5 - 15
TEAMModeBI/Controllers/OperateRecord/OperateLogController.cs

@@ -11,6 +11,8 @@ using TEAMModelOS.Models;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Models.Cosmos.BI;
 using System.Text;
+using TEAMModelOS.SDK.Models.Table;
+using TEAMModelOS.SDK.Helper.Common.TableHelper;
 
 namespace TEAMModeBI.Controllers.OperateRecord
 {
@@ -85,18 +87,6 @@ namespace TEAMModeBI.Controllers.OperateRecord
                 jsonElement.TryGetProperty("endDate", out JsonElement endDate);
                 jsonElement.TryGetProperty("rowKey", out JsonElement rowKey);
 
-                //操作记录
-                OperateLog operateLog = new OperateLog();
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
-                operateLog.PartitionKey = "OperateLog-BI";
-                operateLog.RowKey = blobOrTable;
-                operateLog.recordID = blobOrTable;
-                operateLog.platformSource = "BI";
-                operateLog.tmdId = $"{_tmdId}";
-                operateLog.tmdName = $"{_tmdName}";
-                operateLog.visitApi = "/operatelog/del-operatelogbydate";
-                operateLog.operateTime = DateTime.Now;
-
                 //var temp = await _azureStorage.Delete<OperateLog>(partitionKey: "OperateLog-BI", rowKey: $"{startDate}");  //删除单个
                 StringBuilder operateStr = new StringBuilder($"{_tmdName}【{_tmdId}】账户删除操作记录,");
                 StringBuilder tableStrWhere = new StringBuilder();
@@ -112,8 +102,9 @@ namespace TEAMModeBI.Controllers.OperateRecord
                 }
                 var temp = await _azureStorage.DeleteStringWhere<OperateLog>(rowKey: tableStrWhere.ToString());
 
-                operateLog.operateDescribe = operateStr.ToString();
-                await _azureStorage.Save<OperateLog>(operateLog); //保存操作记录
+                //保存操作记录
+                await OperateLogHelper.SaveTableLog(_azureStorage, platform: "BI", tmdId: $"{_tmdId}", tmdName: $"{_tmdName}", msg: operateStr?.ToString(), type: "operatelog-del", visitApi: "/operatelog/del-operatelogbydate", funModel: "日志");
+
                 if (temp.Count > 0)
                 {
                     return Ok(new { state = 200 });
@@ -125,7 +116,6 @@ namespace TEAMModeBI.Controllers.OperateRecord
                 await _dingDing.SendBotMsg($"BI, {_option.Location} /operatelog/del-operatelogbydate  {ex.Message}{ex.StackTrace}", GroupNames.成都开发測試群組);
                 return BadRequest();
             }
-
         }
 
 

+ 46 - 0
TEAMModelOS.SDK/Helper/Common/TableHelper/OperateLogHelper.cs

@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.SDK.Models.Table;
+
+namespace TEAMModelOS.SDK.Helper.Common.TableHelper
+{
+    public class OperateLogHelper
+    {
+        /// <summary>
+        /// 保存操作日志
+        /// </summary>
+        /// <param name="_azureStorage"></param>
+        /// <param name="platform">日志平台:BI 、 IES5</param>
+        /// <param name="tmdId">醍摩豆ID</param>
+        /// <param name="tmdName">醍摩豆名称</param>
+        /// <param name="msg">操作描述</param>
+        /// <param name="type">日志类型: school-update school-del    名词-动词组合方式</param>
+        /// <param name="visitApi">访问接口</param>
+        /// <param name="funModel">模块名称 存中文</param>
+        /// <param name="scope">使用范围  private school</param>
+        /// <param name="owner">数据归属  学校编码或者醍摩豆id</param>
+        /// <param name="leve">日志等级,1普通 2重要 3非常重要</param>
+        /// <returns></returns>
+        public static async Task SaveTableLog(AzureStorageFactory _azureStorage, string platform, string tmdId, string tmdName, string msg, string type, string visitApi,string funModel = null, string scope = null, string owner = null, int leve = 1)
+        {
+            OperateLog operateLog = new OperateLog();
+            operateLog.PartitionKey = $"Log-{platform}";
+            operateLog.RowKey = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
+            operateLog.platform = platform;
+            operateLog.tmdId = tmdId;
+            operateLog.tmdName = tmdName;
+            operateLog.msg = msg;
+            operateLog.type = type;
+            operateLog.visitApi = visitApi;
+            operateLog.funModule = $"{funModel}";
+            operateLog.scope = $"{scope}";
+            operateLog.owner = $"{owner}";
+            operateLog.leve = leve;
+
+            await _azureStorage.Save<OperateLog>(operateLog);
+        }
+    }
+}

+ 0 - 58
TEAMModelOS.SDK/Models/Cosmos/BI/OperateLog.cs

@@ -1,58 +0,0 @@
-using Microsoft.Azure.Cosmos.Table;
-using System;
-using System.Collections.Generic;
-using System.Text;
-using TEAMModelOS.SDK.Context.Attributes.Azure;
-
-namespace TEAMModelOS.SDK.Models.Cosmos.BI
-{
-    [TableName(Name = "OperateLog")]
-    public class OperateLog: TableEntity
-    {
-
-        /// <summary>
-        /// Blob和
-        /// </summary>
-        public string recordID { get; set; }
-
-        /// <summary>
-        /// 平台;BI 、 IES5
-        /// </summary>
-        public string platformSource { get; set; }
-
-        /// <summary>
-        /// 醍摩豆ID
-        /// </summary>
-        public string tmdId { get; set; }
-
-        /// <summary>
-        /// 醍摩豆名称
-        /// </summary>
-        public string tmdName { get; set; }
-
-        /// <summary>
-        /// 操作描述
-        /// </summary>
-        public string operateDescribe { get; set; }
-
-        /// <summary>
-        /// 操作类型 0查询 1增加 2修改 3删除 4登录
-        /// </summary>
-        public string operateType { get; set; }
-
-        /// <summary>
-        /// 功能模块
-        /// </summary>
-        public string funModule { get; set; }
-
-        /// <summary>
-        /// 访问的Api
-        /// </summary>
-        public string visitApi { get; set; }
-
-        /// <summary>
-        /// 操作时间
-        /// </summary>
-        public DateTime operateTime { get; set; }
-    }
-}

+ 64 - 0
TEAMModelOS.SDK/Models/Table/OperateLog.cs

@@ -0,0 +1,64 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using TEAMModelOS.SDK.Context.Attributes.Azure;
+using Microsoft.Azure.Cosmos.Table;
+
+namespace TEAMModelOS.SDK.Models.Table
+{
+    [TableName(Name = "OperateLogs")]
+    public class OperateLog : TableEntity
+    {
+        /// <summary>
+        /// 日志平台:BI 、 IES5
+        /// </summary>
+        public string platform { get; set; }
+
+        /// <summary>
+        /// 日志等级,1普通 2重要 3非常重要
+        /// </summary>
+        public int leve { get; set; } = 1;
+
+        /// <summary>
+        /// 醍摩豆ID
+        /// </summary>
+        public string tmdId { get; set; }
+
+        /// <summary>
+        /// 醍摩豆名称
+        /// </summary>
+        public string tmdName { get; set; }
+
+        /// <summary>
+        /// 操作描述
+        /// </summary>
+        public string msg { get; set; }
+
+        /// <summary>
+        /// 日志类型: school-update school-del    名词-动词组合方式
+        /// </summary>
+        public string type { get; set; }
+
+        /// <summary>
+        /// 模块名称 存中文
+        /// </summary>
+        public string funModule { get; set; }
+
+        /// <summary>
+        /// 访问接口
+        /// </summary>
+        public string visitApi { get; set; }
+
+        /// <summary>
+        /// 使用范围  private school
+        /// </summary>
+        public string scope { get; set; }
+
+        /// <summary>
+        /// 数据归属  学校编码或者醍摩豆id
+        /// </summary>
+        public string owner { get; set; }
+
+
+    }
+}