From c87668ee1d1c334a68af678781368a60dd6f20e0 Mon Sep 17 00:00:00 2001 From: Celeste Date: Mon, 29 May 2023 14:22:46 +0800 Subject: [PATCH 1/7] =?UTF-8?q?[=E5=89=8D=E5=8F=B0]=20subDevice=20?= =?UTF-8?q?=E7=B5=90=E6=9D=9F=20loading=20bug=20|=20dashbord=20=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=20chart=20=E6=9B=B4=E6=96=B0=E6=99=82=E6=A9=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frontend/_dashboard.html | 872 +++++---- Frontend/_sysMonAll.html | 1894 ++++++++++---------- Frontend/_sysMonFloor.html | 3414 ++++++++++++++++++------------------ 3 files changed, 3177 insertions(+), 3003 deletions(-) diff --git a/Frontend/_dashboard.html b/Frontend/_dashboard.html index d234eb4..1488571 100644 --- a/Frontend/_dashboard.html +++ b/Frontend/_dashboard.html @@ -2,11 +2,12 @@
-
+
- + + -->
@@ -19,7 +20,7 @@
+ style="font-size: 6rem">
@@ -30,40 +31,42 @@ 昨日用電量 kWH
- +
-
+
-

- 昨日/今日用電比較 (kWh) -

+

昨日/今日用電比較 (kWh)

+
+
+
+ + + +
+ $44.34 / GE +
+ Increased Profit as per redux margins and estimates +
+
+
+
+
78%
+
+
-->
-
+
@@ -83,7 +86,7 @@
+ style="font-size: 8rem">
@@ -95,62 +98,63 @@
+ style="font-size: 6rem">
-
+
-

- 本週/上週用電比較 (kWh) -

+

本週/上週用電比較 (kWh)

-
+
+
+
+ 3,4,5,8,2 +
+
+ +

37.56%

+
+
+
+
+ 5,3,1,7,9 +
+
+ +

759

+
+
+
+
+ 3,4,3,5,5 +
+
+ +

12.17%

+
+
+
+
+ 6,4,7,5,6 +
+
+ +

19.77%

+
+
+
+
--> +
-
@@ -161,28 +165,24 @@
-
- -
+
-
+
-

- 異常狀態 -

+

異常狀態

+ style="max-height: 150px">
+ style="max-height: 150px">
@@ -190,21 +190,18 @@
-
+
-

- 工單進度 -

+

工單進度

-
+ style="max-height: 150px">
+ style="max-height: 150px">
@@ -214,12 +211,9 @@
- - - \ No newline at end of file + }); + diff --git a/Frontend/_sysMonAll.html b/Frontend/_sysMonAll.html index 0901c5e..262b678 100644 --- a/Frontend/_sysMonAll.html +++ b/Frontend/_sysMonAll.html @@ -1,8 +1,8 @@ 
-
-
+
+
@@ -13,1006 +13,1050 @@ aria-hidden="true" data-backdrop="static" data-keyboard="false"> - diff --git a/Frontend/_sysMonFloor.html b/Frontend/_sysMonFloor.html index ab84263..77da459 100644 --- a/Frontend/_sysMonFloor.html +++ b/Frontend/_sysMonFloor.html @@ -1,7 +1,7 @@ 
-
-
-
-
- -
-
+
+
+
+
+ +
+
+
-
From 8aebc49e40a926c5d98b8bbdea836804b0f84cb1 Mon Sep 17 00:00:00 2001 From: dev02 Date: Mon, 29 May 2023 16:21:41 +0800 Subject: [PATCH 2/7] =?UTF-8?q?[=E5=BE=8C=E5=8F=B0]=20=E5=BE=8C=E7=AB=AF?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=92=E7=A8=8B=E6=B5=81=E7=A8=8B,=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9niagara=20=E5=90=8C=E6=AD=A5building=5Fmenu?= =?UTF-8?q?=20=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Quartz/Jobs/ArchiveElectricMeterDayJob.cs | 136 ++++++++++++++++-- .../Implement/ProcEletricMeterService.cs | 31 +++- .../NiagaraDataSynchronizeRepository.cs | 2 +- 3 files changed, 149 insertions(+), 20 deletions(-) diff --git a/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs b/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs index 34812ad..cf7fe03 100644 --- a/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs +++ b/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs @@ -56,6 +56,7 @@ namespace BackendWorkerService.Quartz.Jobs XmlDocument xmlDocument = new XmlDocument(); var sqlArchive = $@"SELECT system_value as Value, system_key as Name FROM variable WHERE deleted = 0 AND system_type = 'archiveConfig'"; + var saveToMSDB = await backgroundServiceRepository.GetOneAsync("select system_value from variable where system_type = 'save_to_ms_db' and deleted = 0"); var variableArchive = await backgroundServiceRepository.GetAllAsync(sqlArchive); var electricMeterGuid = variableArchive.Where(x => x.Name == "ElectricMeterGuid").Select(x => x.Value).FirstOrDefault(); @@ -126,6 +127,7 @@ namespace BackendWorkerService.Quartz.Jobs { await task_Detail.InsertWorkTime("ArchiveElectricMeterDayJob", "Day", "任務開始"); var preDay = now.AddDays(-1); //取得前一天 + var dbDateName = preDay.Year.ToString().PadLeft(4, '0') + preDay.Month.ToString().PadLeft(2, '0'); var startTimestamp = string.Format("{0}T00:00:00.000+08:00", preDay.ToString("yyyy-MM-dd")); var endTimestamp = string.Format("{0}T23:59:59.000+08:00", preDay.ToString("yyyy-MM-dd")); @@ -258,8 +260,26 @@ namespace BackendWorkerService.Quartz.Jobs if (electericArchiveDayRawDatas.Count() > 0) { - var sql = $@" - UPDATE archive_electric_meter_day SET + var sql = $@"CREATE TABLE IF NOT EXISTS `archive_electric_meter_day_{dbDateName}` ( + `device_number` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `point` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `start_timestamp` datetime(6) NOT NULL, + `end_timestamp` datetime(6) NULL DEFAULT NULL, + `count_rawdata` int(11) NULL DEFAULT NULL, + `min_rawdata` decimal(15, 3) NULL DEFAULT NULL, + `max_rawdata` decimal(15, 3) NULL DEFAULT NULL, + `avg_rawdata` decimal(15, 3) NULL DEFAULT NULL, + `sum_rawdata` decimal(15, 3) NULL DEFAULT NULL, + `is_complete` tinyint(3) UNSIGNED NULL DEFAULT NULL COMMENT '是否完成,0:未完成 1:完成', + `repeat_times` int(11) NULL DEFAULT 0 COMMENT '重複次數', + `fail_reason` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '失敗原因', + `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` datetime(6) NULL DEFAULT NULL, + PRIMARY KEY (`device_number`, `point`, `start_timestamp`) USING BTREE + ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + + SET FOREIGN_KEY_CHECKS = 1; + UPDATE archive_electric_meter_day_{dbDateName} SET count_rawdata = @count_rawdata, min_rawdata = @min_rawdata, max_rawdata = @max_rawdata, @@ -273,8 +293,7 @@ namespace BackendWorkerService.Quartz.Jobs AND point = @point AND start_timestamp = @start_timestamp; - - INSERT INTO archive_electric_meter_day ( + INSERT INTO archive_electric_meter_day_{dbDateName} ( device_number, point, start_timestamp, @@ -303,8 +322,45 @@ namespace BackendWorkerService.Quartz.Jobs WHERE ROW_COUNT() = 0;"; var mySql = $@"BEGIN TRANSACTION; + IF OBJECT_ID(N'dbo.archive_water_meter_day_{dbDateName}', N'U') is null + BEGIN + CREATE TABLE [dbo].[archive_electric_meter_day_{dbDateName}]( + [device_number] [varchar](50) NOT NULL, + [point] [varchar](20) NOT NULL, + [start_timestamp] [datetime] NOT NULL, + [end_timestamp] [datetime] NULL, + [count_rawdata] [int] NULL, + [min_rawdata] [decimal](15, 3) NULL, + [max_rawdata] [decimal](15, 3) NULL, + [avg_rawdata] [decimal](15, 3) NULL, + [sum_rawdata] [decimal](15, 3) NULL, + [is_complete] [tinyint] NULL, + [repeat_times] [int] NULL, + [fail_reason] [nvarchar](max) NULL, + [created_at] [datetime] NULL, + [updated_at] [datetime] NULL, + CONSTRAINT [PK_archive_electric_meter_day_{dbDateName}] PRIMARY KEY CLUSTERED + ( + [device_number] ASC, + [point] ASC, + [start_timestamp] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] + ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] - UPDATE archive_electric_meter_day SET + ALTER TABLE [dbo].[archive_electric_meter_day_{dbDateName}] ADD CONSTRAINT [DF_archive_electric_meter_day_{dbDateName}_repeat_times] DEFAULT ((0)) FOR [repeat_times] + + ALTER TABLE [dbo].[archive_electric_meter_day_{dbDateName}] ADD CONSTRAINT [DF_archive_electric_meter_day_{dbDateName}_created_at] DEFAULT (getdate()) FOR [created_at] + + ALTER TABLE [dbo].[archive_electric_meter_day_{dbDateName}] ADD CONSTRAINT [DF_archive_electric_meter_day_{dbDateName}_updated_at] DEFAULT (NULL) FOR [updated_at] + + EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否完成,0:未完成 1:完成' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'archive_electric_meter_day_{dbDateName}', @level2type=N'COLUMN',@level2name=N'is_complete' + + EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'重複次數' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'archive_electric_meter_day_{dbDateName}', @level2type=N'COLUMN',@level2name=N'repeat_times' + + EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'失敗原因' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'archive_electric_meter_day_{dbDateName}', @level2type=N'COLUMN',@level2name=N'fail_reason' + END + + UPDATE archive_electric_meter_day_{dbDateName} SET count_rawdata = @count_rawdata, min_rawdata = @min_rawdata, max_rawdata = @max_rawdata, @@ -320,7 +376,7 @@ namespace BackendWorkerService.Quartz.Jobs IF @@ROWCOUNT = 0 BEGIN - INSERT INTO archive_electric_meter_day ( + INSERT INTO archive_electric_meter_day_{dbDateName} ( device_number, point, start_timestamp, @@ -350,7 +406,10 @@ namespace BackendWorkerService.Quartz.Jobs COMMIT TRANSACTION;"; await backgroundServiceRepository.ExecuteSql(sql, electericArchiveDayRawDatas); - await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electericArchiveDayRawDatas); + if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") + { + await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electericArchiveDayRawDatas); + } } if (waterArchiveDayRawDatas.Count() > 0) { @@ -399,6 +458,43 @@ namespace BackendWorkerService.Quartz.Jobs WHERE ROW_COUNT() = 0;"; var mySql = $@"BEGIN TRANSACTION; + IF OBJECT_ID(N'dbo.archive_water_meter_day_{dbDateName}', N'U') is null + BEGIN + CREATE TABLE [dbo].[archive_water_meter_day_{dbDateName}]( + [device_number] [varchar](50) NOT NULL, + [point] [varchar](20) NOT NULL, + [start_timestamp] [datetime] NOT NULL, + [end_timestamp] [datetime] NULL, + [count_rawdata] [int] NULL, + [min_rawdata] [decimal](15, 3) NULL, + [max_rawdata] [decimal](15, 3) NULL, + [avg_rawdata] [decimal](15, 3) NULL, + [sum_rawdata] [decimal](15, 3) NULL, + [is_complete] [tinyint] NULL, + [repeat_times] [int] NULL, + [fail_reason] [nvarchar](max) NULL, + [created_at] [datetime] NULL, + [updated_at] [datetime] NULL, + CONSTRAINT [PK_archive_water_meter_day_{dbDateName}] PRIMARY KEY CLUSTERED + ( + [device_number] ASC, + [point] ASC, + [start_timestamp] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] + ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] + + ALTER TABLE [dbo].[archive_water_meter_day_{dbDateName}] ADD CONSTRAINT [DF_archive_water_meter_day_{dbDateName}_repeat_times] DEFAULT ((0)) FOR [repeat_times] + + ALTER TABLE [dbo].[archive_water_meter_day_{dbDateName}] ADD CONSTRAINT [DF_archive_water_meter_day_{dbDateName}_created_at] DEFAULT (getdate()) FOR [created_at] + + ALTER TABLE [dbo].[archive_water_meter_day_{dbDateName}] ADD CONSTRAINT [DF_archive_water_meter_day_{dbDateName}_updated_at] DEFAULT (NULL) FOR [updated_at] + + EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否完成,0:未完成 1:完成' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'archive_water_meter_day_{dbDateName}', @level2type=N'COLUMN',@level2name=N'is_complete' + + EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'重複次數' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'archive_water_meter_day_{dbDateName}', @level2type=N'COLUMN',@level2name=N'repeat_times' + + EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'失敗原因' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'archive_water_meter_day_{dbDateName}', @level2type=N'COLUMN',@level2name=N'fail_reason' + END UPDATE archive_water_meter_day SET count_rawdata = @count_rawdata, @@ -446,7 +542,10 @@ namespace BackendWorkerService.Quartz.Jobs COMMIT TRANSACTION;"; await backgroundServiceRepository.ExecuteSql(sql, waterArchiveDayRawDatas); - await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveDayRawDatas); + if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") + { + await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveDayRawDatas); + } } await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Day", "任務完成"); } @@ -691,7 +790,10 @@ namespace BackendWorkerService.Quartz.Jobs COMMIT TRANSACTION;"; await backgroundServiceRepository.ExecuteSql(sql, electricArchiveWeekRawDatas); - await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electricArchiveWeekRawDatas); + if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") + { + await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electricArchiveWeekRawDatas); + } } if (waterArchiveWeekRawDatas.Count() > 0) @@ -790,8 +892,10 @@ namespace BackendWorkerService.Quartz.Jobs COMMIT TRANSACTION;"; await backgroundServiceRepository.ExecuteSql(sql, waterArchiveWeekRawDatas); - await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveWeekRawDatas); - + if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") + { + await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveWeekRawDatas); + } } await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Week", "任務完成"); } @@ -1035,7 +1139,10 @@ namespace BackendWorkerService.Quartz.Jobs COMMIT TRANSACTION;"; await backgroundServiceRepository.ExecuteSql(sql, electricArchiveMonthRawDatas); - await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electricArchiveMonthRawDatas); + if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") + { + await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electricArchiveMonthRawDatas); + } } if (waterArchiveMonthRawDatas.Count() > 0) { @@ -1130,7 +1237,10 @@ namespace BackendWorkerService.Quartz.Jobs COMMIT TRANSACTION;"; await backgroundServiceRepository.ExecuteSql(sql, waterArchiveMonthRawDatas); - await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveMonthRawDatas); + if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") + { + await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveMonthRawDatas); + } } await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Month", "任務完成"); } diff --git a/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs b/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs index 5750872..8478c30 100644 --- a/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs +++ b/BackendWorkerService/Services/Implement/ProcEletricMeterService.cs @@ -52,6 +52,7 @@ namespace BackendWorkerService.Services.Implement var variableArchive = await backgroundServiceRepository.GetAllAsync(sqlArchive); repeatTimes = Convert.ToInt32(variableArchive.Where(x => x.Name == "RepeatTimes").Select(x => x.Value).FirstOrDefault()); + var saveToMSDB = await backgroundServiceRepository.GetOneAsync("select system_value from variable where system_type = 'save_to_ms_db' and deleted = 0"); #region 取得obix 設定 var sqlObix = $@"SELECT system_value as Value, system_key as Name FROM variable WHERE deleted = 0 AND system_type = 'obixConfig'"; @@ -324,7 +325,10 @@ namespace BackendWorkerService.Services.Implement { var Mysql_error_update = string.Format(MYsql_update_format, targetTable); var sql_error_update = string.Format(sql_update_format, targetTable); - await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, electricArchiveDayRawDatas); + if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") + { + await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, electricArchiveDayRawDatas); + } await backgroundServiceRepository.ExecuteSql(Mysql_error_update, electricArchiveDayRawDatas); } } @@ -405,7 +409,10 @@ namespace BackendWorkerService.Services.Implement { var Mysql_error_update = string.Format(MYsql_update_format, targetTable); var sql_error_update = string.Format(sql_update_format, targetTable); - await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, waterArchiveDayRawDatas); + if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") + { + await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, waterArchiveDayRawDatas); + } await backgroundServiceRepository.ExecuteSql(Mysql_error_update, waterArchiveDayRawDatas); } } @@ -489,7 +496,10 @@ namespace BackendWorkerService.Services.Implement { var Mysql_error_update = string.Format(MYsql_update_format, targetTable); var sql_error_update = string.Format(sql_update_format, targetTable); - await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, electricArchiveWeekRawDatas); + if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") + { + await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, electricArchiveWeekRawDatas); + } await backgroundServiceRepository.ExecuteSql(Mysql_error_update, electricArchiveWeekRawDatas); } } @@ -570,7 +580,10 @@ namespace BackendWorkerService.Services.Implement { var Mysql_error_update = string.Format(MYsql_update_format, targetTable); var sql_error_update = string.Format(sql_update_format, targetTable); - await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, waterArchiveWeekRawDatas); + if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") + { + await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, waterArchiveWeekRawDatas); + } await backgroundServiceRepository.ExecuteSql(Mysql_error_update, waterArchiveWeekRawDatas); } } @@ -657,7 +670,10 @@ namespace BackendWorkerService.Services.Implement { var Mysql_error_update = string.Format(MYsql_update_format, targetTable); var sql_error_update = string.Format(sql_update_format, targetTable); - await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, electricArchiveMonthRawDatas); + if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") + { + await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, electricArchiveMonthRawDatas); + } await backgroundServiceRepository.ExecuteSql(MYsql_update_format, electricArchiveMonthRawDatas); } } @@ -741,7 +757,10 @@ namespace BackendWorkerService.Services.Implement { var Mysql_error_update = string.Format(MYsql_update_format, targetTable); var sql_error_update = string.Format(sql_update_format, targetTable); - await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, waterArchiveMonthRawDatas); + if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1") + { + await backgroundServiceMsSqlRepository.ExecuteSql(sql_error_update, waterArchiveMonthRawDatas); + } await backgroundServiceRepository.ExecuteSql(MYsql_update_format, waterArchiveMonthRawDatas); } } diff --git a/Repository/BackendRepository/Implement/NiagaraDataSynchronizeRepository.cs b/Repository/BackendRepository/Implement/NiagaraDataSynchronizeRepository.cs index 522bd0c..d293e89 100644 --- a/Repository/BackendRepository/Implement/NiagaraDataSynchronizeRepository.cs +++ b/Repository/BackendRepository/Implement/NiagaraDataSynchronizeRepository.cs @@ -589,7 +589,7 @@ namespace Repository.BackendRepository.Implement select device_building_tag, device_system_tag, device_name_tag from import_niagara_tag group by device_building_tag, device_system_tag, device_name_tag - ) AS a ON b.device_building_tag = a.building_tag + ) AS a ON b.building_tag = a.device_building_tag and a.device_system_tag = b.main_system_tag and a.device_name_tag = b.sub_system_tag SET b.is_link = 0 WHERE b.building_tag IS NULL"); From 8cb550bff6c4dafbe9633eabbfd7b9f20707dafe Mon Sep 17 00:00:00 2001 From: dev02 Date: Mon, 29 May 2023 16:33:47 +0800 Subject: [PATCH 3/7] =?UTF-8?q?[=E5=89=8D=E5=8F=B0]=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=B0=B4=E9=9B=BB=E8=A1=A8=E5=88=97=E5=87=BAapi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FrontendWebApi/ApiControllers/HydroMeterController.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/FrontendWebApi/ApiControllers/HydroMeterController.cs b/FrontendWebApi/ApiControllers/HydroMeterController.cs index ba6a116..caa4637 100644 --- a/FrontendWebApi/ApiControllers/HydroMeterController.cs +++ b/FrontendWebApi/ApiControllers/HydroMeterController.cs @@ -74,6 +74,8 @@ namespace FrontendWebApi.ApiControllers string sqlWhere = ""; string sqlGroup = ""; string sqlAvgRawData = ""; + string dbDateName = startTime.Split("-")[0].ToString().PadLeft(4, '0') + startTime.Split("-")[1].ToString().PadLeft(2, '0'); + if (input.floor_tag.Count > 0) sqlWhere = $@" and substring_index(substring_index(device_number, '_', 3), '_', -1) in @floor_tag "; @@ -85,7 +87,7 @@ namespace FrontendWebApi.ApiControllers else sqlAvgRawData = " round(avg_rawdata, 2) as avg_rawdata, start_timestamp, end_timestamp "; - var table = input.tableType == "year" ? "archive_electric_meter_day" : "archive_electric_meter_" + input.tableType; + var table = input.tableType == "year" ? "archive_electric_meter_month" : "archive_electric_meter_" + input.tableType + (input.tableType == "day" ? "_" + dbDateName : ""); var dateFormat = input.tableType == "day" || input.tableType == "week" ? "%Y-%m-%d" : input.tableType == "month" ? "%Y-%m" : input.tableType == "year" ? "%Y" : null; var aemmEndDate = input.tableType == "year" ? $"year(DATE_ADD(fd.date, INTERVAL +1 {input.tableType}))" : $"DATE_ADD(fd.date, INTERVAL +1 {input.tableType})"; var aemmStaDate = input.tableType == "year" ? "year(fd.date)" : "fd.date"; @@ -198,6 +200,7 @@ namespace FrontendWebApi.ApiControllers : input.tableType == "month" ? (Int32.Parse(input.startTime.Split("-")[0]) + 1) + "-01-01" : input.tableType == "year" ? (Int32.Parse(input.endTime) + 1).ToString() + "-01-01" : null; + string dbDateName = startTime.Split("-")[0].ToString().PadLeft(4, '0') + startTime.Split("-")[1].ToString().PadLeft(2, '0'); string sqlWhere = ""; string sqlGroup = ""; string sqlAvgRawData = ""; @@ -212,7 +215,7 @@ namespace FrontendWebApi.ApiControllers else sqlAvgRawData = " round(avg_rawdata, 2) as avg_rawdata, start_timestamp, end_timestamp "; - var table = input.tableType == "year" ? "archive_water_meter_day" : "archive_water_meter_" + input.tableType; + var table = input.tableType == "year" ? "archive_electric_meter_month" : "archive_electric_meter_" + input.tableType + (input.tableType == "day" ? "_" + dbDateName : ""); var dateFormat = input.tableType == "day" || input.tableType == "week" ? "%Y-%m-%d" : input.tableType == "month" ? "%Y-%m" : input.tableType == "year" ? "%Y" : null; var sql = $@"set @i = -1; select fd.device_number, aemm.avg_rawdata, DATE_FORMAT(fd.date, @dateFormat) as timestamp From 75692b26da31d8806443ea286eba687258f30975 Mon Sep 17 00:00:00 2001 From: dev02 Date: Mon, 29 May 2023 17:10:19 +0800 Subject: [PATCH 4/7] =?UTF-8?q?[=E5=BE=8C=E5=8F=B0]=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=8E=92=E7=A8=8B=E9=8C=AF=E8=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Quartz/Jobs/ArchiveElectricMeterDayJob.cs | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs b/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs index cf7fe03..e1f6670 100644 --- a/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs +++ b/BackendWorkerService/Quartz/Jobs/ArchiveElectricMeterDayJob.cs @@ -322,7 +322,7 @@ namespace BackendWorkerService.Quartz.Jobs WHERE ROW_COUNT() = 0;"; var mySql = $@"BEGIN TRANSACTION; - IF OBJECT_ID(N'dbo.archive_water_meter_day_{dbDateName}', N'U') is null + IF OBJECT_ID(N'dbo.archive_electric_meter_day_{dbDateName}', N'U') is null BEGIN CREATE TABLE [dbo].[archive_electric_meter_day_{dbDateName}]( [device_number] [varchar](50) NOT NULL, @@ -414,7 +414,25 @@ namespace BackendWorkerService.Quartz.Jobs if (waterArchiveDayRawDatas.Count() > 0) { var sql = $@" - UPDATE archive_water_meter_day SET + CREATE TABLE IF NOT EXISTS `archive_water_meter_day_{dbDateName}` ( + `device_number` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `point` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `start_timestamp` datetime(6) NOT NULL, + `end_timestamp` datetime(6) NULL DEFAULT NULL, + `count_rawdata` int(11) NULL DEFAULT NULL, + `min_rawdata` decimal(15, 3) NULL DEFAULT NULL, + `max_rawdata` decimal(15, 3) NULL DEFAULT NULL, + `avg_rawdata` decimal(15, 3) NULL DEFAULT NULL, + `sum_rawdata` decimal(15, 3) NULL DEFAULT NULL, + `is_complete` tinyint(3) UNSIGNED NULL DEFAULT NULL COMMENT '是否完成,0:未完成 1:完成', + `repeat_times` int(11) NULL DEFAULT 0 COMMENT '重複次數', + `fail_reason` varchar(4000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '失敗原因', + `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` datetime(6) NULL DEFAULT NULL, + PRIMARY KEY (`device_number`, `point`, `start_timestamp`) USING BTREE + ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + + UPDATE archive_water_meter_day_{dbDateName} SET count_rawdata = @count_rawdata, min_rawdata = @min_rawdata, max_rawdata = @max_rawdata, @@ -429,7 +447,7 @@ namespace BackendWorkerService.Quartz.Jobs AND start_timestamp = @start_timestamp; - INSERT INTO archive_water_meter_day ( + INSERT INTO archive_water_meter_day_{dbDateName} ( device_number, point, start_timestamp, @@ -496,7 +514,7 @@ namespace BackendWorkerService.Quartz.Jobs EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'失敗原因' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'archive_water_meter_day_{dbDateName}', @level2type=N'COLUMN',@level2name=N'fail_reason' END - UPDATE archive_water_meter_day SET + UPDATE archive_water_meter_day_{dbDateName} SET count_rawdata = @count_rawdata, min_rawdata = @min_rawdata, max_rawdata = @max_rawdata, @@ -512,7 +530,7 @@ namespace BackendWorkerService.Quartz.Jobs IF @@ROWCOUNT = 0 BEGIN - INSERT INTO archive_water_meter_day ( + INSERT INTO archive_water_meter_day_{dbDateName} ( device_number, point, start_timestamp, From ece045ab398bf1782e22f20b9a7ba86e8dd44df3 Mon Sep 17 00:00:00 2001 From: dev01 Date: Mon, 29 May 2023 18:47:35 +0800 Subject: [PATCH 5/7] =?UTF-8?q?[=E7=87=88=E6=8E=A7=E6=8E=92=E7=A8=8B]=20op?= =?UTF-8?q?eration=5Flog=20=E7=B4=80=E9=8C=84=E7=87=88=E6=8E=A7=E6=8E=92?= =?UTF-8?q?=E7=A8=8B=E9=81=8B=E4=BD=9C=E5=8F=8A=E6=8E=A7=E5=88=B6=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E7=AF=84=E5=9C=8D=E8=A8=98=E9=8C=84=E4=B8=8D=E5=90=8C?= =?UTF-8?q?=E9=A1=9E=E5=9E=8B=E7=A8=8B=E5=BA=8F=E5=BB=BA=E7=BD=AE=20|=20?= =?UTF-8?q?=E7=87=88=E6=8E=A7=E6=8E=92=E7=A8=8B=E9=83=A8=E5=88=86=E5=BE=8C?= =?UTF-8?q?=E7=AB=AF=E6=AD=A6=E6=96=B7=E6=94=B9=E5=85=AB=E6=AE=B5=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E8=AA=BF=E6=95=B4=20|=20=E9=83=A8=E5=88=86=20bug=20?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApiControllers/LightScheduleController.cs | 60 ++++++++++++++++++- .../ApiControllers/UtilityController.cs | 26 ++++++++ FrontendWebApi/Models/LightSchedule.cs | 11 +++- FrontendWebApi/Models/Operation.cs | 23 ++++++- 4 files changed, 115 insertions(+), 5 deletions(-) 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;} + + } + + } From eb0f45ac832fee537d2aecde9afeb50ccbcd5f39 Mon Sep 17 00:00:00 2001 From: dev01 Date: Tue, 30 May 2023 14:36:50 +0800 Subject: [PATCH 6/7] =?UTF-8?q?[=E7=87=88=E6=8E=A7=E6=8E=92=E7=A8=8B]=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E/=E7=B7=A8=E8=BC=AF=20=E7=B4=80=E9=8C=84=20Op?= =?UTF-8?q?eration=5Flog=20=E5=BE=8C=E7=AB=AF=E7=A8=8B=E5=BA=8F=E8=AA=BF?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApiControllers/LightScheduleController.cs | 79 ++++++++++++++----- .../ApiControllers/UtilityController.cs | 26 +----- 2 files changed, 61 insertions(+), 44 deletions(-) diff --git a/FrontendWebApi/ApiControllers/LightScheduleController.cs b/FrontendWebApi/ApiControllers/LightScheduleController.cs index c6d76d7..411cb19 100644 --- a/FrontendWebApi/ApiControllers/LightScheduleController.cs +++ b/FrontendWebApi/ApiControllers/LightScheduleController.cs @@ -1,6 +1,7 @@ using FrontendWebApi.Models; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; +using Newtonsoft.Json; using Repository.BackendRepository.Interface; using Repository.FrontendRepository.Interface; using System; @@ -86,8 +87,29 @@ namespace FrontendWebApi.ApiControllers ApiResult apiResult = new ApiResult(); try { - if(String.IsNullOrEmpty(saveSchedule.light_schedule_guid)) + // Operation_log 輸入參數 + OperationInput opeInput = new OperationInput() { operation_type = 2 }; + + // 取得對應樓層資料 + var targetFloor = await backendRepository.GetOneAsync($@" + select * from floor where floor_guid = @floor_guid", + new { floor_guid = saveSchedule.floor_guid}); + // 取得對應燈控排程主表資料 + var targetScheduleLight = await backendRepository.GetOneAsync($@" + select * from light_schedule where light_schedule_guid = @light_schedule_guid", + new { light_schedule_guid = saveSchedule.light_schedule_guid }); + // 取得對應燈控排程設備資料 + var targetScheduleDevice = await backendRepository.GetAllAsync($@" + select device_guid from schedule_device where light_schedule_guid = @light_schedule_guid", + new { light_schedule_guid = saveSchedule.light_schedule_guid }); + + + opeInput.building_tag = targetFloor.building_tag; + opeInput.floor_tag = targetFloor.full_name; + + if (String.IsNullOrEmpty(saveSchedule.light_schedule_guid)) { + opeInput.action_name = "新增"; Dictionary Schedule = new Dictionary(); var newguid = Guid.NewGuid(); Schedule = new Dictionary() @@ -102,6 +124,7 @@ namespace FrontendWebApi.ApiControllers { "@end_time", saveSchedule.end_time}, { "@created_by", myUser.userinfo_guid} }; + await backendRepository.AddOneByCustomTable(Schedule, "light_schedule"); List> ScheduleDevices = new List>(); foreach (var a in saveSchedule.devicelist) @@ -114,10 +137,14 @@ namespace FrontendWebApi.ApiControllers }; ScheduleDevices.Add(ScheduleDevice); } + opeInput.parameter = JsonConvert.SerializeObject(saveSchedule); + await backendRepository.AddMutiByCustomTable(ScheduleDevices, "schedule_device"); + await InsertOperation(opeInput); } else { + opeInput.action_name = "修改"; Dictionary Schedule = new Dictionary(); Schedule = new Dictionary() { @@ -132,26 +159,10 @@ namespace FrontendWebApi.ApiControllers { "@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){ @@ -170,6 +181,7 @@ namespace FrontendWebApi.ApiControllers if (targetScheduleLight.status != saveSchedule.status) { saveSchedule.changeNames.Add("狀態變更"); } + // 兩邊設備 guid 排序後比較 saveSchedule.devicelist.Sort(); targetScheduleDevice.Sort(); @@ -192,9 +204,10 @@ namespace FrontendWebApi.ApiControllers } await backendRepository.AddMutiByCustomTable(ScheduleDevices, "schedule_device"); + opeInput.parameter = JsonConvert.SerializeObject(saveSchedule); // 若有變更才寫入 operation_log if (saveSchedule.changeNames.Count > 0) { - await utility.InsertOperation(opeInput); + await InsertOperation(opeInput); } } apiResult.Code = "0000"; @@ -350,5 +363,33 @@ namespace FrontendWebApi.ApiControllers } return Ok(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/ApiControllers/UtilityController.cs b/FrontendWebApi/ApiControllers/UtilityController.cs index 85601c6..7d2711f 100644 --- a/FrontendWebApi/ApiControllers/UtilityController.cs +++ b/FrontendWebApi/ApiControllers/UtilityController.cs @@ -156,30 +156,6 @@ 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; - } - } + } } From 4544a323a1bdd73d74904be293eb6d14b73ce2b1 Mon Sep 17 00:00:00 2001 From: dev02 Date: Tue, 30 May 2023 14:54:54 +0800 Subject: [PATCH 7/7] =?UTF-8?q?[=E5=BE=8C=E5=8F=B0]=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=8E=92=E7=A8=8B=E5=9F=B7=E8=A1=8C=E6=99=82=E9=96=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BackendWorkerService/appsettings.Development.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/BackendWorkerService/appsettings.Development.json b/BackendWorkerService/appsettings.Development.json index c92b558..7c9cf15 100644 --- a/BackendWorkerService/appsettings.Development.json +++ b/BackendWorkerService/appsettings.Development.json @@ -7,13 +7,13 @@ } }, "BackgroundServiceCron": { - "ExecutionBackgroundServicePlanJob": "0 0 1 * * ?", - "MessageNotificationJob": "0 0 1 * * ?", - "DataDeliveryJob": "0 0 1 * * ?", - "RegularUpdateDBTableJob": "0 0 1 * * ?", - "ParkingJob": "0 0 1 * * ?", - "ArchiveElectricMeterHourJob": "0 0 1 * * ?", - "ArchiveElectricMeterDayJob": "0 0 1 * * ?", + "ExecutionBackgroundServicePlanJob": "0 0 2 * * ?", + "MessageNotificationJob": "0 0 2 * * ?", + "DataDeliveryJob": "0 0 2 * * ?", + "RegularUpdateDBTableJob": "0 0 2 * * ?", + "ParkingJob": "0 0 2 * * ?", + "ArchiveElectricMeterHourJob": "0 0 2 * * ?", + "ArchiveElectricMeterDayJob": "0 0 2 * * ?", "WeatherAPIJob": "0/5 * * * * ?" }, "DBConfig": {