diff --git a/FrontendWebApi/ApiControllers/LightScheduleController.cs b/FrontendWebApi/ApiControllers/LightScheduleController.cs index 846899b..c6d76d7 100644 --- a/FrontendWebApi/ApiControllers/LightScheduleController.cs +++ b/FrontendWebApi/ApiControllers/LightScheduleController.cs @@ -7,8 +7,11 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Linq.Expressions; using System.Net; using System.Net.Http; +using System.Reflection; +using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Threading.Tasks; @@ -37,8 +40,12 @@ namespace FrontendWebApi.ApiControllers ApiResult> apiResult = new ApiResult>(); try { + var floor_tag = await backendRepository.GetOneAsync($@" + select full_name from floor where floor_guid = @floor_guid and deleted = 0 + ",new { floor_guid = post.floor_guid}); + lightDevices = await backendRepository.GetAllAsync($@" - select * from device where building_guid = '{post.building_guid}' and sub_system_guid = '{post.sub_system_guid}' and floor_guid = '{post.floor_guid}' and deleted = 0 and status = 0 order by priority + select * from device where device_building_tag = '{post.building_tag}' and device_name_tag = '{post.sub_system_tag}' and device_floor_tag = '{floor_tag}' and deleted = 0 and status = 0 order by priority "); if(!String.IsNullOrEmpty(post.schedule_guid)) @@ -124,6 +131,52 @@ namespace FrontendWebApi.ApiControllers { "@updated_by", myUser.userinfo_guid}, { "@updated_at", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} }; + + // Operation_log 輸入參數 + OperationInput opeInput = new OperationInput() { operation_type = 2, action_name = "修改" }; + // 取得對應樓層資料 + var targetFloor = await backendRepository.GetOneAsync($@" + select * from floor where floor_guid = '{saveSchedule.floor_guid}' + "); + // 取得對應燈控排程主表資料 + var targetScheduleLight = await backendRepository.GetOneAsync($@" + select * from light_schedule where light_schedule_guid = '{saveSchedule.light_schedule_guid}' + "); + // 取得對應燈控排程設備資料 + var targetScheduleDevice = await backendRepository.GetAllAsync($@" + select device_guid from schedule_device where light_schedule_guid = '{saveSchedule.light_schedule_guid}' + "); + opeInput.building_tag = targetFloor.building_tag; + opeInput.floor_tag = targetFloor.full_name; + // 比較欄位 + List compareTargetProps = new List() { "full_name", "week", "cycle", "floor_guid", "start_time", "end_time" }; + List compareTargetValues = new List(); + UtilityController utility = new UtilityController(backendRepository,frontendRepository); + Type modelType = saveSchedule.GetType(); + // 根據每個欄位比較 + foreach(var prop in compareTargetProps){ + PropertyInfo propertyInfo = modelType.GetProperty(prop); + if (propertyInfo == null) continue; + // 比較 saveSchedule 與 targetSchedule + var value = propertyInfo.GetValue(saveSchedule,null)?.ToString(); + var newValue = propertyInfo.GetValue(targetScheduleLight, null)?.ToString(); + // 只要不對就是排程變更 + if (value != newValue) { + saveSchedule.changeNames.Add("排程變更"); + break; + } + } + // 判斷是否為狀態變更 + if (targetScheduleLight.status != saveSchedule.status) { + saveSchedule.changeNames.Add("狀態變更"); + } + // 兩邊設備 guid 排序後比較 + saveSchedule.devicelist.Sort(); + targetScheduleDevice.Sort(); + if (saveSchedule.devicelist != targetScheduleDevice) { + saveSchedule.changeNames.Add("設備變更"); + } + await backendRepository.UpdateOneByCustomTable(Schedule, "light_schedule", $" light_schedule_guid = '{saveSchedule.light_schedule_guid}'"); await backendRepository.PurgeOneByGuidWithCustomDBNameAndTable("schedule_device", $" light_schedule_guid = '{saveSchedule.light_schedule_guid}'"); List> ScheduleDevices = new List>(); @@ -138,6 +191,11 @@ namespace FrontendWebApi.ApiControllers ScheduleDevices.Add(ScheduleDevice); } await backendRepository.AddMutiByCustomTable(ScheduleDevices, "schedule_device"); + + // 若有變更才寫入 operation_log + if (saveSchedule.changeNames.Count > 0) { + await utility.InsertOperation(opeInput); + } } apiResult.Code = "0000"; apiResult.Data = "成功"; diff --git a/FrontendWebApi/ApiControllers/UtilityController.cs b/FrontendWebApi/ApiControllers/UtilityController.cs index c0da082..85601c6 100644 --- a/FrontendWebApi/ApiControllers/UtilityController.cs +++ b/FrontendWebApi/ApiControllers/UtilityController.cs @@ -155,5 +155,31 @@ namespace FrontendWebApi.ApiControllers return apiResult; } + + public async Task InsertOperation(OperationInput input) { + try + { + //記錄使用者操作紀錄 + Dictionary userOperatorLog = new Dictionary() + { + { "@user_guid", myUser.userinfo_guid }, + { "@operation_type", input.operation_type }, //1:名稱修改 + { "@building_tag", input.building_tag }, + { "@main_system_tag", input.main_system_tag }, + { "@sub_system_tag", input.sub_system_tag }, + { "@floor_tag", input.floor_tag }, + { "@device_guid", input.device_guid }, + { "@action_name", input.action_name }, + { "@parameter", JsonConvert.SerializeObject(input.parameter) }, + }; + + await backendRepository.AddOneByCustomTable(userOperatorLog, "operation_log"); + + return true; + } + catch (Exception ex) { + return false; + } + } } } diff --git a/FrontendWebApi/Models/LightSchedule.cs b/FrontendWebApi/Models/LightSchedule.cs index c2f84eb..674457a 100644 --- a/FrontendWebApi/Models/LightSchedule.cs +++ b/FrontendWebApi/Models/LightSchedule.cs @@ -7,8 +7,8 @@ namespace FrontendWebApi.Models { public class GetDevicePost { - public string building_guid { get; set; } - public string sub_system_guid { get; set; } + public string building_tag { get; set; } + public string sub_system_tag { get; set; } public string floor_guid { get; set; } public string schedule_guid { get; set; } } @@ -33,6 +33,7 @@ namespace FrontendWebApi.Models public class SaveSchedule : Schedule { public List devicelist { get; set; } + public List changeNames { get; set; } = new List(); } public class ScheduleTable : Schedule { @@ -44,7 +45,13 @@ namespace FrontendWebApi.Models public List Floors { get; set; } } + public class ScheduleDevice + { + public int Id { get; set; } + public string light_schedule_guid { get; set; } + public string device_guid { get; set; } + } } diff --git a/FrontendWebApi/Models/Operation.cs b/FrontendWebApi/Models/Operation.cs index a11b0ae..887cb6c 100644 --- a/FrontendWebApi/Models/Operation.cs +++ b/FrontendWebApi/Models/Operation.cs @@ -84,7 +84,7 @@ namespace FrontendWebApi.Models public string notice { get; set; } public string description { get; set; } public string work_type_name - { + { get { Dictionary name = new Dictionary() @@ -118,7 +118,7 @@ namespace FrontendWebApi.Models } public class Operation_Record_File : Actor - { + { public int id { get; set; } public byte deleted { get; set; } public int record_id { get; set; } @@ -138,4 +138,23 @@ namespace FrontendWebApi.Models public DateTime? startdate { get; set; } public DateTime? enddate { get; set; } } + + public class OperationInput + { + public int id { get; set; } + public string user_guid { get; set;} + public string building_tag { get; set; } + public string main_system_tag { get; set;} + public string sub_system_tag { get; set;} + public string floor_tag { get; set;} + public string device_guid { get; set;} + public short operation_type { get; set;} + public string parameter { get; set;} + public string action_name { get; set;} + public string value { get; set;} + public DateTime? created_at { get; set;} + + } + + }