merge
This commit is contained in:
commit
e6c134b47c
@ -7,6 +7,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Haukcode.WkHtmlToPdfDotNet" Version="1.5.86" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.19" />
|
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.19" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="3.1.19" />
|
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="3.1.19" />
|
||||||
<PackageReference Include="ncrontab" Version="3.3.1" />
|
<PackageReference Include="ncrontab" Version="3.3.1" />
|
||||||
|
@ -6,6 +6,7 @@ using Microsoft.Extensions.Logging;
|
|||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
|
using NPOI.SS.Formula.Functions;
|
||||||
using Quartz;
|
using Quartz;
|
||||||
using Repository.BackendRepository.Interface;
|
using Repository.BackendRepository.Interface;
|
||||||
using Repository.Helper;
|
using Repository.Helper;
|
||||||
@ -140,9 +141,10 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
await task_Detail.InsertWorkTime("ArchiveElectricMeterDayJob", "Day", "水電表天任務開始");
|
await task_Detail.InsertWorkTime("ArchiveElectricMeterDayJob", "Day", "水電表天任務開始");
|
||||||
//var preDay = now.AddDays(-1); //取得前一天
|
var preDay = now.AddDays(-1); //取得前一天
|
||||||
//var dbDateName = preDay.Year.ToString().PadLeft(4, '0') + preDay.Month.ToString().PadLeft(2, '0');
|
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 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"));
|
//var endTimestamp = string.Format("{0}T23:59:59.000+08:00", preDay.ToString("yyyy-MM-dd"));
|
||||||
@ -153,17 +155,11 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
// <reltime name='interval' val = 'PT1D' />
|
// <reltime name='interval' val = 'PT1D' />
|
||||||
// </obj>";
|
// </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 stopWatch = new Stopwatch();
|
||||||
//stopWatch.Start();
|
//stopWatch.Start();
|
||||||
|
|
||||||
|
#region 從前次 成功日期到昨天為止
|
||||||
|
|
||||||
//抓取每個設備的資料
|
//抓取每個設備的資料
|
||||||
List<Dictionary<string, object>> electericArchiveDayRawDatas = new List<Dictionary<string, object>>();
|
List<Dictionary<string, object>> electericArchiveDayRawDatas = new List<Dictionary<string, object>>();
|
||||||
List<Dictionary<string, object>> waterArchiveDayRawDatas = new List<Dictionary<string, object>>();
|
List<Dictionary<string, object>> waterArchiveDayRawDatas = new List<Dictionary<string, object>>();
|
||||||
@ -173,7 +169,9 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
var endDay = System.DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
|
var endDay = System.DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
|
||||||
foreach (DateTime day in EachDay(startDay, endDay))
|
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 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:15:00.000+08:00", day.AddDays(1).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"));
|
||||||
|
|
||||||
|
|
||||||
@ -252,10 +250,12 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
foreach (var deviceNumberPoint in waterDeviceNumberPoints)
|
foreach (var deviceNumberPoint in waterDeviceNumberPoints)
|
||||||
{
|
{
|
||||||
var startDay = deviceNumberPoint.archive_lastDate.ToString("yyyy-MM-dd");
|
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))
|
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 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:15:00.000+08:00", day.AddDays(1).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"));
|
||||||
|
|
||||||
|
|
||||||
@ -334,12 +334,16 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
//stopWatch.Stop();
|
//stopWatch.Stop();
|
||||||
//logger.LogInformation("【ArchiveElectricMeterDayJob】【天歸檔】【效能檢驗】[取得資料花費時間]{0} 毫秒", stopWatch.ElapsedMilliseconds);
|
//logger.LogInformation("【ArchiveElectricMeterDayJob】【天歸檔】【效能檢驗】[取得資料花費時間]{0} 毫秒", stopWatch.ElapsedMilliseconds);
|
||||||
|
|
||||||
if (electericArchiveDayRawDatas.Count() > 0)
|
if (electericArchiveDayRawDatas.Count() > 0)
|
||||||
{
|
{
|
||||||
|
foreach (var row in electericArchiveDayRawDatas)
|
||||||
|
{
|
||||||
|
row.TryGetValue("@start_timestamp", out var yyyymmData);
|
||||||
|
dbDateName = System.DateTime.Parse(yyyymmData.ToString()).ToString("yyyyMM");
|
||||||
var sql = $@"CREATE TABLE IF NOT EXISTS `archive_electric_water_meter_day_{dbDateName}` (
|
var sql = $@"CREATE TABLE IF NOT EXISTS `archive_electric_water_meter_day_{dbDateName}` (
|
||||||
`device_number` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
`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,
|
`point` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||||
@ -495,14 +499,19 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
END
|
END
|
||||||
|
|
||||||
COMMIT TRANSACTION;";
|
COMMIT TRANSACTION;";
|
||||||
await backgroundServiceRepository.ExecuteSql(sql, electericArchiveDayRawDatas);
|
await backgroundServiceRepository.ExecuteSql(sql, row);
|
||||||
if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1")
|
if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1")
|
||||||
{
|
{
|
||||||
await backgroundServiceMsSqlRepository.ExecuteSql(mySql, electericArchiveDayRawDatas);
|
await backgroundServiceMsSqlRepository.ExecuteSql(mySql, row);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (waterArchiveDayRawDatas.Count() > 0)
|
if (waterArchiveDayRawDatas.Count() > 0)
|
||||||
{
|
{
|
||||||
|
foreach (var row in waterArchiveDayRawDatas)
|
||||||
|
{
|
||||||
|
row.TryGetValue("@start_timestamp", out var yyyymmData);
|
||||||
|
dbDateName = System.DateTime.Parse(yyyymmData.ToString()).ToString("yyyyMM");
|
||||||
var sql = $@"
|
var sql = $@"
|
||||||
CREATE TABLE IF NOT EXISTS `archive_electric_water_meter_day_{dbDateName}` (
|
CREATE TABLE IF NOT EXISTS `archive_electric_water_meter_day_{dbDateName}` (
|
||||||
`device_number` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
`device_number` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||||
@ -659,13 +668,14 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
END
|
END
|
||||||
|
|
||||||
COMMIT TRANSACTION;";
|
COMMIT TRANSACTION;";
|
||||||
await backgroundServiceRepository.ExecuteSql(sql, waterArchiveDayRawDatas);
|
await backgroundServiceRepository.ExecuteSql(sql, row);
|
||||||
if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1")
|
if (!string.IsNullOrEmpty(saveToMSDB) && saveToMSDB == "1")
|
||||||
{
|
{
|
||||||
await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveDayRawDatas);
|
await backgroundServiceMsSqlRepository.ExecuteSql(mySql, row);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Day", "任務完成");
|
}
|
||||||
|
await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Day", "水電表天任務完成");
|
||||||
}
|
}
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
@ -1090,14 +1100,18 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
await task_Detail.InsertWorkTime("ArchiveElectricMeterDayJob", "Month", "水電表月任務開始");
|
await task_Detail.InsertWorkTime("ArchiveElectricMeterDayJob", "Month", "水電表月任務開始");
|
||||||
var FirstDay = now.AddDays(-now.Day + 1);
|
var preDay = now.AddDays(-1); //取得前一天
|
||||||
//var LastDay = now.AddMonths(1).AddDays(-now.AddMonths(1).Day);
|
|
||||||
var LastDay = FirstDay.AddMonths(1);
|
var dayInMonth = DateTime.DaysInMonth(preDay.Year, preDay.Month);
|
||||||
|
var FirstDay = new DateTime(preDay.Year, preDay.Month, 1);
|
||||||
|
//var LastDay = now.AddMonths(1).AddDays(-now.AddMonths(1).Day); // 這是抓到該月最後一天
|
||||||
|
var LastDay = now;
|
||||||
|
|
||||||
|
|
||||||
var dayInMonth = DateTime.DaysInMonth(now.Year, now.Month);
|
|
||||||
|
|
||||||
|
//var startTimestamp = string.Format("{0}T23:59:59.000+08:00", FirstDay.AddDays(-1).ToString("yyyy-MM-dd")); // 巨蛋要這樣抓數據才是對的
|
||||||
var startTimestamp = string.Format("{0}T00:00:00.000+08:00", FirstDay.ToString("yyyy-MM-dd"));
|
var startTimestamp = string.Format("{0}T00:00:00.000+08:00", FirstDay.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}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:15:00.000+08:00", LastDay.ToString("yyyy-MM-dd")); // 240131 jay for dome
|
||||||
|
|
||||||
@ -1105,7 +1119,7 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
var historyQueryFilter = $@"<obj is='obix: HistoryFilter'>
|
var historyQueryFilter = $@"<obj is='obix: HistoryFilter'>
|
||||||
<abstime name='start' val='{startTimestamp}' />
|
<abstime name='start' val='{startTimestamp}' />
|
||||||
<abstime name='end' val='{endTimestamp}' />
|
<abstime name='end' val='{endTimestamp}' />
|
||||||
<reltime name='interval' val = 'PT{dayInMonth}D' />
|
<reltime name='interval' val = 'PT{dayInMonth+1}D' />
|
||||||
</obj>";
|
</obj>";
|
||||||
|
|
||||||
//Stopwatch stopWatch = new Stopwatch();
|
//Stopwatch stopWatch = new Stopwatch();
|
||||||
@ -1258,7 +1272,29 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
if (electricArchiveMonthRawDatas.Count() > 0)
|
if (electricArchiveMonthRawDatas.Count() > 0)
|
||||||
{
|
{
|
||||||
var sql = $@"
|
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
|
UPDATE archive_electric_water_meter_month SET
|
||||||
|
start_timestamp = @start_timestamp,
|
||||||
|
end_timestamp = @end_timestamp,
|
||||||
count_rawdata = @count_rawdata,
|
count_rawdata = @count_rawdata,
|
||||||
min_rawdata = @min_rawdata,
|
min_rawdata = @min_rawdata,
|
||||||
max_rawdata = @max_rawdata,
|
max_rawdata = @max_rawdata,
|
||||||
@ -1304,8 +1340,48 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
WHERE ROW_COUNT() = 0;";
|
WHERE ROW_COUNT() = 0;";
|
||||||
|
|
||||||
var mySql = $@"BEGIN TRANSACTION;
|
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
|
UPDATE archive_electric_water_meter_month SET
|
||||||
|
start_timestamp = @start_timestamp,
|
||||||
|
end_timestamp = @end_timestamp,
|
||||||
count_rawdata = @count_rawdata,
|
count_rawdata = @count_rawdata,
|
||||||
min_rawdata = @min_rawdata,
|
min_rawdata = @min_rawdata,
|
||||||
max_rawdata = @max_rawdata,
|
max_rawdata = @max_rawdata,
|
||||||
@ -1362,7 +1438,29 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
if (waterArchiveMonthRawDatas.Count() > 0)
|
if (waterArchiveMonthRawDatas.Count() > 0)
|
||||||
{
|
{
|
||||||
var sql = $@"
|
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
|
UPDATE archive_electric_water_meter_month SET
|
||||||
|
start_timestamp = @start_timestamp,
|
||||||
|
end_timestamp = @end_timestamp,
|
||||||
count_rawdata = @count_rawdata,
|
count_rawdata = @count_rawdata,
|
||||||
min_rawdata = @min_rawdata,
|
min_rawdata = @min_rawdata,
|
||||||
max_rawdata = @max_rawdata,
|
max_rawdata = @max_rawdata,
|
||||||
@ -1408,8 +1506,48 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
WHERE ROW_COUNT() = 0;";
|
WHERE ROW_COUNT() = 0;";
|
||||||
|
|
||||||
var mySql = $@"BEGIN TRANSACTION;
|
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
|
UPDATE archive_electric_water_meter_month SET
|
||||||
|
start_timestamp = @start_timestamp,
|
||||||
|
end_timestamp = @end_timestamp,
|
||||||
count_rawdata = @count_rawdata,
|
count_rawdata = @count_rawdata,
|
||||||
min_rawdata = @min_rawdata,
|
min_rawdata = @min_rawdata,
|
||||||
max_rawdata = @max_rawdata,
|
max_rawdata = @max_rawdata,
|
||||||
@ -1463,7 +1601,7 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveMonthRawDatas);
|
await backgroundServiceMsSqlRepository.ExecuteSql(mySql, waterArchiveMonthRawDatas);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Month", "任務完成");
|
await task_Detail.InsertWorkTime_End("ArchiveElectricMeterDayJob", "Month", "水電表月任務完成");
|
||||||
}
|
}
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
@ -1520,6 +1658,14 @@ namespace BackendWorkerService.Quartz.Jobs
|
|||||||
for (var day = strtday.Date; day.Date <= endday.Date; day = day.AddDays(1))
|
for (var day = strtday.Date; day.Date <= endday.Date; day = day.AddDays(1))
|
||||||
yield return day;
|
yield return day;
|
||||||
}
|
}
|
||||||
|
public IEnumerable<DateTime> EachMonth(string from, string thru)
|
||||||
|
{
|
||||||
|
var strtday = DateTime.Parse(from);
|
||||||
|
var endday = DateTime.Parse(thru);
|
||||||
|
for (var _month = strtday.Date; _month.Month <= endday.Month; _month = _month.AddDays(1))
|
||||||
|
yield return _month;
|
||||||
|
|
||||||
|
}
|
||||||
private List<Dictionary<string, object>> ArrangeRawData(DeviceNumberPoint deviceNumberPoint, JObject jsonResult)
|
private List<Dictionary<string, object>> ArrangeRawData(DeviceNumberPoint deviceNumberPoint, JObject jsonResult)
|
||||||
{
|
{
|
||||||
List<Dictionary<string, object>> arrangeRawDatas = new List<Dictionary<string, object>>();
|
List<Dictionary<string, object>> arrangeRawDatas = new List<Dictionary<string, object>>();
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
},
|
},
|
||||||
"DBConfig": {
|
"DBConfig": {
|
||||||
"MySqlDBConfig": {
|
"MySqlDBConfig": {
|
||||||
"Server": "CYGthbCeGtAXT4s1NOSJHQ==", //0.202
|
"Server": "CYGthbCeGtAXT4s1NOSJHQ==", //0.132
|
||||||
"Port": "mkF51jVbg40V5K5eTh2Ckw==", //3306
|
"Port": "mkF51jVbg40V5K5eTh2Ckw==", //3306
|
||||||
//"Database": "VJB2XC+lAtzuHObDGMVOAA==", //30
|
//"Database": "VJB2XC+lAtzuHObDGMVOAA==", //30
|
||||||
//"Database": "IgYBsgG2VLKKxFb64j7LOA==", //wsp
|
//"Database": "IgYBsgG2VLKKxFb64j7LOA==", //wsp
|
||||||
|
@ -19,6 +19,7 @@ using Microsoft.Extensions.Configuration;
|
|||||||
using Serilog.Core;
|
using Serilog.Core;
|
||||||
using static FrontendWebApi.ApiControllers.TenantBillController;
|
using static FrontendWebApi.ApiControllers.TenantBillController;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -109,7 +110,8 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
apiResult.Msg = "新增用戶失敗。";
|
apiResult.Msg = "新增用戶失敗。";
|
||||||
if (exception.Message.Contains($" for key 'PRIMARY'"))
|
if (exception.Message.Contains($" for key 'PRIMARY'"))
|
||||||
{
|
{
|
||||||
apiResult.Msg = "已有相同使用者。";
|
apiResult.Code = "0001";
|
||||||
|
apiResult.Msg = "已有相同用戶。";
|
||||||
}
|
}
|
||||||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||||
}
|
}
|
||||||
@ -143,6 +145,7 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
apiResult.Msg = "修改失敗。";
|
apiResult.Msg = "修改失敗。";
|
||||||
if (exception.Message.Contains($"a foreign key constraint"))
|
if (exception.Message.Contains($"a foreign key constraint"))
|
||||||
{
|
{
|
||||||
|
apiResult.Code = "0001";
|
||||||
apiResult.Msg = "水電報表仍有該用戶,無法修改名稱。";
|
apiResult.Msg = "水電報表仍有該用戶,無法修改名稱。";
|
||||||
}
|
}
|
||||||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||||
@ -170,6 +173,7 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
apiResult.Msg = "刪除用戶失敗。";
|
apiResult.Msg = "刪除用戶失敗。";
|
||||||
if (exception.Message.Contains($"a foreign key constraint"))
|
if (exception.Message.Contains($"a foreign key constraint"))
|
||||||
{
|
{
|
||||||
|
apiResult.Code = "0001";
|
||||||
apiResult.Msg = "水電報表仍有該用戶,無法刪除。";
|
apiResult.Msg = "水電報表仍有該用戶,無法刪除。";
|
||||||
}
|
}
|
||||||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||||
@ -190,14 +194,7 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
string building_tag = tb.building_tag;
|
string building_tag = tb.building_tag;
|
||||||
string ElecOrWater = tableType == "elec" ? "E4" : "W1";
|
string ElecOrWater = tableType == "elec" ? "E4" : "W1";
|
||||||
string sqlString = null;
|
string sqlString = null;
|
||||||
if (building_tag == "ALL")
|
if (building_tag == "D2")
|
||||||
{
|
|
||||||
sqlString =
|
|
||||||
$"SELECT bill_id,a.device_number,a.full_name,start_timestamp,end_timestamp,result,bill,tenant_name,tenant_guid " +
|
|
||||||
$"from {TenantBilltable} a join device b on a.device_number =b.device_number" +
|
|
||||||
$"where a.device_name_tag = '{ElecOrWater}' ";
|
|
||||||
}
|
|
||||||
else if (building_tag == "D2")
|
|
||||||
{
|
{
|
||||||
sqlString =
|
sqlString =
|
||||||
$"SELECT bill_id,a.device_number,a.full_name,start_timestamp,end_timestamp,result,bill,tenant_name,tenant_guid " +
|
$"SELECT bill_id,a.device_number,a.full_name,start_timestamp,end_timestamp,result,bill,tenant_name,tenant_guid " +
|
||||||
@ -248,19 +245,28 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
startMonth = tb.start_timestamp.Split("-")[0] + tb.start_timestamp.Split("-")[1];
|
startMonth = tb.start_timestamp.Split("-")[0] + tb.start_timestamp.Split("-")[1];
|
||||||
endMonth = tb.end_timestamp.Split("-")[0] + tb.end_timestamp.Split("-")[1];
|
endMonth = tb.end_timestamp.Split("-")[0] + tb.end_timestamp.Split("-")[1];
|
||||||
}
|
}
|
||||||
if (start_timestamp == "")
|
else
|
||||||
{
|
{
|
||||||
apiResult.Code = "9999";
|
sqlString =
|
||||||
apiResult.Msg = "請選擇起始日期。";
|
$@"UPDATE {TenantBilltable}
|
||||||
return apiResult;
|
set tenant_name = (SELECT tenant_name from archive_electric_meter_tenant_list WHERE tenant_guid = '{tb.tenant_guid}'),
|
||||||
}
|
result = 0,
|
||||||
if (end_timestamp == "")
|
bill= 0,
|
||||||
{
|
start_timestamp = '{start_timestamp}',
|
||||||
apiResult.Code = "9999";
|
end_timestamp = '{end_timestamp}',
|
||||||
apiResult.Msg = "請選擇結束日期。";
|
updated_at = '{updated_at}',
|
||||||
return apiResult;
|
tenant_guid = '{tb.tenant_guid}'
|
||||||
}
|
WHERE device_number = '{tb.device_number}'";
|
||||||
|
|
||||||
|
await backendRepository.ExecuteSql(sqlString);
|
||||||
|
|
||||||
|
|
||||||
|
apiResult.Code = "0000";
|
||||||
|
apiResult.Data = "修改成功";
|
||||||
|
return apiResult;
|
||||||
|
}
|
||||||
|
if (tb.tenant_guid != "" && tb.tenant_guid != null)
|
||||||
|
{
|
||||||
if (startMonth == endMonth)
|
if (startMonth == endMonth)
|
||||||
{
|
{
|
||||||
sqlString =
|
sqlString =
|
||||||
@ -279,31 +285,87 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//sqlString =
|
string month = "";
|
||||||
// $"UPDATE {TenantBilltable} " +
|
DateTime date1 = DateTime.Parse(start_timestamp);
|
||||||
// $"set tenant_name = (SELECT tenant_name from archive_electric_meter_tenant_list WHERE tenant_guid = '{tb.tenant_guid}'), start_timestamp = '{start_timestamp}',end_timestamp = '{end_timestamp}' , " +
|
DateTime date2 = DateTime.Parse(end_timestamp);
|
||||||
// $"result= " +
|
int monthsApart = ((date2.Year - date1.Year) * 12) + date2.Month - date1.Month;
|
||||||
// $"(SELECT sum(sub_result) " +
|
for (var i = 1; i <= monthsApart; i++)
|
||||||
// $"FROM ( " +
|
{
|
||||||
// $" SELECT start_timestamp,device_number, sub_result " +
|
month += $@"UNION ALL
|
||||||
// $" FROM archive_electric_water_meter_day_{startMonth} " +
|
SELECT start_timestamp,device_number, sub_result
|
||||||
// $" WHERE device_number = '{tb.device_number}' " +
|
FROM archive_electric_water_meter_day_{date1.AddMonths(i).ToString("yyyyMM")}
|
||||||
// $" UNION ALL " +
|
WHERE device_number = '{tb.device_number}' ";
|
||||||
// $" SELECT start_timestamp,device_number, sub_result " +
|
|
||||||
// $" FROM archive_electric_water_meter_day_{endMonth} " +
|
|
||||||
// $" WHERE device_number = '{tb.device_number}' " +
|
|
||||||
// $") combined_result " +
|
|
||||||
// $"WHERE start_timestamp BETWEEN '{start_timestamp}' and '{end_timestamp}' " +
|
|
||||||
// $"GROUP BY device_number) ," +
|
|
||||||
// $"bill = " +
|
|
||||||
// $"ROUND(result *(SELECT {bill_per} from {TenantListtable} WHERE tenant_guid = '{tb.tenant_guid}') ), " +
|
|
||||||
// $"updated_at = '{updated_at}', " +
|
|
||||||
// $"tenant_guid = '{tb.tenant_guid}' " +
|
|
||||||
// $"WHERE device_number = '{tb.device_number}'";
|
|
||||||
apiResult.Code = "9999";
|
|
||||||
apiResult.Msg = "請選擇同一個月份";
|
|
||||||
return apiResult;
|
|
||||||
}
|
}
|
||||||
|
sqlString =
|
||||||
|
$@"UPDATE {TenantBilltable}
|
||||||
|
set tenant_name = (SELECT tenant_name from archive_electric_meter_tenant_list WHERE tenant_guid = '{tb.tenant_guid}'), start_timestamp = '{start_timestamp}',end_timestamp = '{end_timestamp}' ,
|
||||||
|
result=
|
||||||
|
(SELECT sum(sub_result)
|
||||||
|
FROM (
|
||||||
|
SELECT start_timestamp,device_number, sub_result
|
||||||
|
FROM archive_electric_water_meter_day_{startMonth}
|
||||||
|
WHERE device_number = '{tb.device_number}' "+
|
||||||
|
$@"{month}" +
|
||||||
|
$@" ) combined_result
|
||||||
|
WHERE start_timestamp BETWEEN '{start_timestamp}' and '{end_timestamp}'
|
||||||
|
GROUP BY device_number) ,
|
||||||
|
bill =
|
||||||
|
ROUND(result *(SELECT {bill_per} from {TenantListtable} WHERE tenant_guid = '{tb.tenant_guid}') ),
|
||||||
|
updated_at = '{updated_at}',
|
||||||
|
tenant_guid = '{tb.tenant_guid}'
|
||||||
|
WHERE device_number = '{tb.device_number}'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (startMonth == endMonth)
|
||||||
|
{
|
||||||
|
sqlString =
|
||||||
|
$"UPDATE {TenantBilltable} " +
|
||||||
|
$"set tenant_name = (SELECT tenant_name from archive_electric_meter_tenant_list WHERE tenant_guid = '{tb.tenant_guid}'), start_timestamp = '{start_timestamp}',end_timestamp = '{end_timestamp}' , " +
|
||||||
|
$"result= " +
|
||||||
|
$"(select sum(sub_result) " +
|
||||||
|
$"from archive_electric_water_meter_day_{startMonth} " +
|
||||||
|
$"WHERE device_number = '{tb.device_number}' and start_timestamp BETWEEN '{start_timestamp}' and '{end_timestamp}' " +
|
||||||
|
$"GROUP BY device_number) , " +
|
||||||
|
$"bill = 0 ," +
|
||||||
|
$"updated_at = '{updated_at}', " +
|
||||||
|
$"tenant_guid = '{tb.tenant_guid}' " +
|
||||||
|
$"WHERE device_number = '{tb.device_number}'";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string month = "";
|
||||||
|
DateTime date1 = DateTime.Parse(start_timestamp);
|
||||||
|
DateTime date2 = DateTime.Parse(end_timestamp);
|
||||||
|
int monthsApart = ((date2.Year - date1.Year) * 12) + date2.Month - date1.Month;
|
||||||
|
for (var i = 1; i <= monthsApart; i++)
|
||||||
|
{
|
||||||
|
month += $@"UNION ALL
|
||||||
|
SELECT start_timestamp,device_number, sub_result
|
||||||
|
FROM archive_electric_water_meter_day_{date1.AddMonths(i).ToString("yyyyMM")}
|
||||||
|
WHERE device_number = '{tb.device_number}' ";
|
||||||
|
}
|
||||||
|
sqlString =
|
||||||
|
$@"UPDATE {TenantBilltable}
|
||||||
|
set tenant_name = (SELECT tenant_name from archive_electric_meter_tenant_list WHERE tenant_guid = '{tb.tenant_guid}'), start_timestamp = '{start_timestamp}',end_timestamp = '{end_timestamp}' ,
|
||||||
|
result=
|
||||||
|
(SELECT sum(sub_result)
|
||||||
|
FROM (
|
||||||
|
SELECT start_timestamp,device_number, sub_result
|
||||||
|
FROM archive_electric_water_meter_day_{startMonth}
|
||||||
|
WHERE device_number = '{tb.device_number}' " +
|
||||||
|
$@"{month}" +
|
||||||
|
$@" ) combined_result
|
||||||
|
WHERE start_timestamp BETWEEN '{start_timestamp}' and '{end_timestamp}'
|
||||||
|
GROUP BY device_number) ,
|
||||||
|
bill = 0,
|
||||||
|
updated_at = '{updated_at}',
|
||||||
|
tenant_guid = '{tb.tenant_guid}'
|
||||||
|
WHERE device_number = '{tb.device_number}'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await backendRepository.ExecuteSql(sqlString);
|
await backendRepository.ExecuteSql(sqlString);
|
||||||
@ -316,6 +378,11 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
{
|
{
|
||||||
apiResult.Code = "9999";
|
apiResult.Code = "9999";
|
||||||
apiResult.Msg = "修改水電參考報表失敗。";
|
apiResult.Msg = "修改水電參考報表失敗。";
|
||||||
|
if (exception.Message.Contains($"doesn't exist"))
|
||||||
|
{
|
||||||
|
apiResult.Code = "0001";
|
||||||
|
apiResult.Msg = "選取的區間有部分無資料。";
|
||||||
|
}
|
||||||
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,7 +399,7 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
{
|
{
|
||||||
string sqlString =
|
string sqlString =
|
||||||
$@"SELECT
|
$@"SELECT
|
||||||
a.tenant_name,a.start_timestamp,a.end_timestamp,bill_perKWH,bill_perRCV,
|
a.tenant_name,min(a.start_timestamp)as start_timestamp,max(a.end_timestamp) as end_timestamp,bill_perKWH,bill_perRCV,
|
||||||
SUM(CASE WHEN device_name_tag = 'E4' THEN result ELSE 0 END) AS elec_result,
|
SUM(CASE WHEN device_name_tag = 'E4' THEN result ELSE 0 END) AS elec_result,
|
||||||
SUM(CASE WHEN device_name_tag = 'W1' THEN result ELSE 0 END) AS water_result,
|
SUM(CASE WHEN device_name_tag = 'W1' THEN result ELSE 0 END) AS water_result,
|
||||||
SUM(CASE WHEN device_name_tag = 'E4' THEN bill ELSE 0 END) AS elec_bill,
|
SUM(CASE WHEN device_name_tag = 'E4' THEN bill ELSE 0 END) AS elec_bill,
|
||||||
@ -340,8 +407,7 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
SUM(bill) AS total_bill
|
SUM(bill) AS total_bill
|
||||||
FROM archive_electric_meter_tenant_bill a
|
FROM archive_electric_meter_tenant_bill a
|
||||||
JOIN archive_electric_meter_tenant_list b on a.tenant_guid = b.tenant_guid
|
JOIN archive_electric_meter_tenant_list b on a.tenant_guid = b.tenant_guid
|
||||||
GROUP BY a.tenant_name
|
GROUP BY a.tenant_name;";
|
||||||
HAVING SUM(bill) != 0";
|
|
||||||
|
|
||||||
outputBill = await backendRepository.GetAllAsync<OutputBill>(sqlString);
|
outputBill = await backendRepository.GetAllAsync<OutputBill>(sqlString);
|
||||||
string filePath = CreateOutputForm(outputBill);
|
string filePath = CreateOutputForm(outputBill);
|
||||||
|
@ -13,9 +13,9 @@
|
|||||||
"JwtLifeSeconds": 3600
|
"JwtLifeSeconds": 3600
|
||||||
},
|
},
|
||||||
"FilePath": {
|
"FilePath": {
|
||||||
"OutputForm": "D:\\jay.chang\\dome\\FrontendWebApi\\wwwroot\\upload\\OutputForm\\", //水電報表 檔案儲存位置
|
"OutputForm": "C:\\jay.chang\\ibms\\FrontendWebApi\\wwwroot\\upload\\OutputForm\\", //水電報表 檔案儲存位置
|
||||||
"OutputFormTemplate": "D:\\jay.chang\\dome\\FrontendWebApi\\wwwroot\\upload\\OutputFormTemplate\\import.html", // 水電報表範本檔位置
|
"OutputFormTemplate": "C:\\jay.chang\\ibms\\FrontendWebApi\\wwwroot\\upload\\OutputFormTemplate\\import.html", // 水電報表範本檔位置
|
||||||
"Image": "D:\\jay.chang\\dome\\FrontendWebApi\\wwwroot\\upload\\OutputFormTemplate\\dome.png" // 明細的圖片
|
"Image": "C:\\jay.chang\\ibms\\FrontendWebApi\\wwwroot\\img\\dome.png" // 明細的圖片
|
||||||
},
|
},
|
||||||
"DBConfig": {
|
"DBConfig": {
|
||||||
"MySqlDBConfig": {
|
"MySqlDBConfig": {
|
||||||
|
Loading…
Reference in New Issue
Block a user