修改巨蛋水電歸檔邏輯,新增月歸檔sql會自動建立table語法
This commit is contained in:
parent
58e7ec1be9
commit
c35aeb2f2e
@ -121,12 +121,12 @@ namespace BackendWorkerService
|
||||
//);
|
||||
//#endregion
|
||||
|
||||
#region 停車場管理(設定每 5秒 執行一次)
|
||||
services.AddSingleton<ParkingJob>();
|
||||
services.AddSingleton(
|
||||
new JobSchedule(jobType: typeof(ParkingJob), cronExpression: configuration.GetValue<string>("BackgroundServiceCron:ParkingJob"))
|
||||
);
|
||||
#endregion
|
||||
//#region 停車場管理(設定每 5秒 執行一次)
|
||||
//services.AddSingleton<ParkingJob>();
|
||||
//services.AddSingleton(
|
||||
//new JobSchedule(jobType: typeof(ParkingJob), cronExpression: configuration.GetValue<string>("BackgroundServiceCron:ParkingJob"))
|
||||
//);
|
||||
//#endregion
|
||||
|
||||
//#region 電錶歸檔(設定每 小時 執行一次)
|
||||
//services.AddSingleton<ArchiveElectricMeterHourJob>();
|
||||
@ -142,12 +142,12 @@ namespace BackendWorkerService
|
||||
);
|
||||
#endregion
|
||||
|
||||
#region 定時取得氣象API
|
||||
services.AddSingleton<Quartz.Jobs.WeatherAPIJob>();
|
||||
services.AddSingleton(
|
||||
new JobSchedule(jobType: typeof(Quartz.Jobs.WeatherAPIJob), cronExpression: configuration.GetValue<string>("BackgroundServiceCron:WeatherAPIJob"))
|
||||
);
|
||||
#endregion
|
||||
//#region 定時取得氣象API
|
||||
//services.AddSingleton<Quartz.Jobs.WeatherAPIJob>();
|
||||
//services.AddSingleton(
|
||||
//new JobSchedule(jobType: typeof(Quartz.Jobs.WeatherAPIJob), cronExpression: configuration.GetValue<string>("BackgroundServiceCron:WeatherAPIJob"))
|
||||
//);
|
||||
//#endregion
|
||||
|
||||
}).ConfigureLogging((hostContext, logFactory) => {
|
||||
IConfiguration configuration = hostContext.Configuration;
|
||||
|
@ -141,8 +141,8 @@ namespace BackendWorkerService.Quartz.Jobs
|
||||
try
|
||||
{
|
||||
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 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"));
|
||||
@ -153,17 +153,11 @@ namespace BackendWorkerService.Quartz.Jobs
|
||||
// <reltime name='interval' val = 'PT1D' />
|
||||
// </obj>";
|
||||
|
||||
#region 從前次 成功日期到昨天為止
|
||||
|
||||
var preDay = now.AddDays(-1); //取得前一天
|
||||
|
||||
var dbDateName = preDay.Year.ToString().PadLeft(4, '0') + preDay.Month.ToString().PadLeft(2, '0');
|
||||
|
||||
#endregion
|
||||
|
||||
//Stopwatch stopWatch = new Stopwatch();
|
||||
//stopWatch.Start();
|
||||
|
||||
#region 從前次 成功日期到昨天為止
|
||||
|
||||
//抓取每個設備的資料
|
||||
List<Dictionary<string, object>> electericArchiveDayRawDatas = new List<Dictionary<string, object>>();
|
||||
List<Dictionary<string, object>> waterArchiveDayRawDatas = new List<Dictionary<string, object>>();
|
||||
@ -173,8 +167,10 @@ namespace BackendWorkerService.Quartz.Jobs
|
||||
var endDay = System.DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
|
||||
foreach (DateTime day in EachDay(startDay, endDay))
|
||||
{
|
||||
var sDay = string.Format("{0}T00:00:00.000+08:00", day.ToString("yyyy-MM-dd").Replace(" ", "T"));
|
||||
var eDay = string.Format("{0}T00:15:00.000+08:00", day.AddDays(1).ToString("yyyy-MM-dd").Replace(" ", "T"));
|
||||
//var sDay = string.Format("{0}T00:00:00.000+08:00", day.ToString("yyyy-MM-dd").Replace(" ", "T")); // 巨蛋用此時間抓到的實際是T00:15:00的資料
|
||||
var sDay = string.Format("{0}T23:59:59.000+08:00", day.AddDays(-1).ToString("yyyy-MM-dd").Replace(" ", "T")); // 巨蛋用此時間抓到的實際是T00:00:00的資料
|
||||
|
||||
var eDay = string.Format("{0}T00:00:00.000+08:00", day.AddDays(1).ToString("yyyy-MM-dd").Replace(" ", "T"));
|
||||
|
||||
|
||||
string historyQueryFilter = $@"<obj is='obix: HistoryFilter'>
|
||||
@ -252,11 +248,13 @@ namespace BackendWorkerService.Quartz.Jobs
|
||||
foreach (var deviceNumberPoint in waterDeviceNumberPoints)
|
||||
{
|
||||
var startDay = deviceNumberPoint.archive_lastDate.ToString("yyyy-MM-dd");
|
||||
var endDay = System.DateTime.Now.ToString("yyyy-MM-dd");
|
||||
var endDay = System.DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
|
||||
foreach (DateTime day in EachDay(startDay, endDay))
|
||||
{
|
||||
var sDay = string.Format("{0}T00:00:00.000+08:00", day.ToString("yyyy-MM-dd").Replace(" ", "T"));
|
||||
var eDay = string.Format("{0}T00:15:00.000+08:00", day.AddDays(1).ToString("yyyy-MM-dd").Replace(" ", "T"));
|
||||
//var sDay = string.Format("{0}T00:00:00.000+08:00", day.ToString("yyyy-MM-dd").Replace(" ", "T")); // 巨蛋用此時間抓到的實際是T00:15:00的資料
|
||||
var sDay = string.Format("{0}T23:59:59.000+08:00", day.AddDays(-1).ToString("yyyy-MM-dd").Replace(" ", "T")); // 巨蛋用此時間抓到的實際是T00:00:00的資料
|
||||
|
||||
var eDay = string.Format("{0}T00:00:00.000+08:00", day.AddDays(1).ToString("yyyy-MM-dd").Replace(" ", "T"));
|
||||
|
||||
|
||||
string historyQueryFilter = $@"<obj is='obix: HistoryFilter'>
|
||||
@ -334,7 +332,7 @@ namespace BackendWorkerService.Quartz.Jobs
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
//stopWatch.Stop();
|
||||
//logger.LogInformation("【ArchiveElectricMeterDayJob】【天歸檔】【效能檢驗】[取得資料花費時間]{0} 毫秒", stopWatch.ElapsedMilliseconds);
|
||||
|
||||
@ -1090,22 +1088,24 @@ namespace BackendWorkerService.Quartz.Jobs
|
||||
try
|
||||
{
|
||||
await task_Detail.InsertWorkTime("ArchiveElectricMeterDayJob", "Month", "水電表月任務開始");
|
||||
var FirstDay = now.AddDays(-now.Day + 1);
|
||||
//var LastDay = now.AddMonths(1).AddDays(-now.AddMonths(1).Day);
|
||||
var LastDay = FirstDay.AddMonths(1);
|
||||
var preDay = now.AddDays(-1); //取得前一天
|
||||
|
||||
var dayInMonth = DateTime.DaysInMonth(preDay.Year, preDay.Month);
|
||||
var FirstDay = preDay.AddDays(- dayInMonth + 1);
|
||||
//var LastDay = now.AddMonths(1).AddDays(-now.AddMonths(1).Day); // 這是抓到該月最後一天
|
||||
var LastDay = FirstDay.AddMonths(1); //但實際應該抓隔月第一天
|
||||
|
||||
|
||||
var dayInMonth = DateTime.DaysInMonth(now.Year, now.Month);
|
||||
|
||||
var startTimestamp = string.Format("{0}T00:00:00.000+08:00", FirstDay.ToString("yyyy-MM-dd"));
|
||||
var startTimestamp = string.Format("{0}T23:59:59.000+08:00", FirstDay.AddDays(-1).ToString("yyyy-MM-dd")); // 巨蛋要這樣抓數據才是對的
|
||||
//var endTimestamp = string.Format("{0}T23:59:59.000+08:00", LastDay.ToString("yyyy-MM-dd"));
|
||||
var endTimestamp = string.Format("{0}T00:15:00.000+08:00", LastDay.ToString("yyyy-MM-dd")); // 240131 jay for dome
|
||||
var endTimestamp = string.Format("{0}T00:00:00.000+08:00", LastDay.ToString("yyyy-MM-dd")); // 240131 jay for dome
|
||||
|
||||
|
||||
var historyQueryFilter = $@"<obj is='obix: HistoryFilter'>
|
||||
<abstime name='start' val='{startTimestamp}' />
|
||||
<abstime name='end' val='{endTimestamp}' />
|
||||
<reltime name='interval' val = 'PT{dayInMonth}D' />
|
||||
<reltime name='interval' val = 'PT{dayInMonth+1}D' />
|
||||
</obj>";
|
||||
|
||||
//Stopwatch stopWatch = new Stopwatch();
|
||||
@ -1258,7 +1258,29 @@ namespace BackendWorkerService.Quartz.Jobs
|
||||
if (electricArchiveMonthRawDatas.Count() > 0)
|
||||
{
|
||||
var sql = $@"
|
||||
CREATE TABLE IF NOT EXISTS `archive_electric_water_meter_month` (
|
||||
`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,
|
||||
`sub_result` 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_water_meter_month SET
|
||||
start_timestamp = @start_timestamp,
|
||||
end_timestamp = @end_timestamp,
|
||||
count_rawdata = @count_rawdata,
|
||||
min_rawdata = @min_rawdata,
|
||||
max_rawdata = @max_rawdata,
|
||||
@ -1304,8 +1326,48 @@ namespace BackendWorkerService.Quartz.Jobs
|
||||
WHERE ROW_COUNT() = 0;";
|
||||
|
||||
var mySql = $@"BEGIN TRANSACTION;
|
||||
IF OBJECT_ID(N'dbo.archive_electric_water_meter_month', N'U') is null
|
||||
BEGIN
|
||||
CREATE TABLE [dbo].[archive_electric_water_meter_month](
|
||||
[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,
|
||||
[sub_result] [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_water_meter_month] 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_electric_water_meter_month] ADD CONSTRAINT [DF_archive_electric_water_meter_month_repeat_times] DEFAULT ((0)) FOR [repeat_times]
|
||||
|
||||
ALTER TABLE [dbo].[archive_electric_water_meter_month] ADD CONSTRAINT [DF_archive_electric_water_meter_month_created_at] DEFAULT (getdate()) FOR [created_at]
|
||||
|
||||
ALTER TABLE [dbo].[archive_electric_water_meter_month] ADD CONSTRAINT [DF_archive_electric_water_meter_month_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_water_meter_month', @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_water_meter_month', @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_water_meter_month', @level2type=N'COLUMN',@level2name=N'fail_reason'
|
||||
END
|
||||
|
||||
UPDATE archive_electric_water_meter_month SET
|
||||
start_timestamp = @start_timestamp,
|
||||
end_timestamp = @end_timestamp,
|
||||
count_rawdata = @count_rawdata,
|
||||
min_rawdata = @min_rawdata,
|
||||
max_rawdata = @max_rawdata,
|
||||
@ -1362,7 +1424,29 @@ namespace BackendWorkerService.Quartz.Jobs
|
||||
if (waterArchiveMonthRawDatas.Count() > 0)
|
||||
{
|
||||
var sql = $@"
|
||||
CREATE TABLE IF NOT EXISTS `archive_electric_water_meter_month` (
|
||||
`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,
|
||||
`sub_result` 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_water_meter_month SET
|
||||
start_timestamp = @start_timestamp,
|
||||
end_timestamp = @end_timestamp,
|
||||
count_rawdata = @count_rawdata,
|
||||
min_rawdata = @min_rawdata,
|
||||
max_rawdata = @max_rawdata,
|
||||
@ -1408,8 +1492,48 @@ namespace BackendWorkerService.Quartz.Jobs
|
||||
WHERE ROW_COUNT() = 0;";
|
||||
|
||||
var mySql = $@"BEGIN TRANSACTION;
|
||||
IF OBJECT_ID(N'dbo.archive_electric_water_meter_month', N'U') is null
|
||||
BEGIN
|
||||
CREATE TABLE [dbo].[archive_electric_water_meter_month](
|
||||
[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,
|
||||
[sub_result] [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_water_meter_month] 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_electric_water_meter_month] ADD CONSTRAINT [DF_archive_electric_water_meter_month_repeat_times] DEFAULT ((0)) FOR [repeat_times]
|
||||
|
||||
ALTER TABLE [dbo].[archive_electric_water_meter_month] ADD CONSTRAINT [DF_archive_electric_water_meter_month_created_at] DEFAULT (getdate()) FOR [created_at]
|
||||
|
||||
ALTER TABLE [dbo].[archive_electric_water_meter_month] ADD CONSTRAINT [DF_archive_electric_water_meter_month_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_water_meter_month', @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_water_meter_month', @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_water_meter_month', @level2type=N'COLUMN',@level2name=N'fail_reason'
|
||||
END
|
||||
|
||||
UPDATE archive_electric_water_meter_month SET
|
||||
start_timestamp = @start_timestamp,
|
||||
end_timestamp = @end_timestamp,
|
||||
count_rawdata = @count_rawdata,
|
||||
min_rawdata = @min_rawdata,
|
||||
max_rawdata = @max_rawdata,
|
||||
|
@ -19,7 +19,7 @@
|
||||
},
|
||||
"DBConfig": {
|
||||
"MySqlDBConfig": {
|
||||
"Server": "CYGthbCeGtAXT4s1NOSJHQ==", //0.202
|
||||
"Server": "CYGthbCeGtAXT4s1NOSJHQ==", //0.132
|
||||
"Port": "mkF51jVbg40V5K5eTh2Ckw==", //3306
|
||||
//"Database": "VJB2XC+lAtzuHObDGMVOAA==", //30
|
||||
//"Database": "IgYBsgG2VLKKxFb64j7LOA==", //wsp
|
||||
|
Loading…
Reference in New Issue
Block a user