Merge branch 'master' of https://gitea.mjm-staging.developers-homelab.net/BIMS/BIMS
This commit is contained in:
commit
9da9ff177a
@ -42,31 +42,22 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<a href="#" onclick="searchDate()" class="btn btn-info">查詢</a>
|
<a href="#" onclick="searchDate()" class="btn btn-info">查詢</a>
|
||||||
<a href="#" class="btn btn-info waves-effect waves-themed">
|
<a href="#" onclick="exportExcel()" class="btn btn-info waves-effect waves-themed">
|
||||||
<span class="fal fa-file-excel mr-1"></span>
|
<span class="fal fa-file-excel mr-1"></span>
|
||||||
匯出
|
匯出
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row mb-2">
|
<div class="row col mb-2">
|
||||||
<div id="devPointsList" class="btn-group">
|
<div id="devPointsList" class="btn-group">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="col-md-4">
|
||||||
<div class="frame-wrap">
|
<div class="frame-wrap">
|
||||||
<table id="tableData" class="table table-bordered table-striped text-center m-0">
|
<table id="historyTable" class="table table-bordered table-striped text-center m-0 w-100">
|
||||||
<thead class="thead-themed">
|
|
||||||
<tr>
|
|
||||||
<th>設備名稱</th>
|
|
||||||
<th>數值</th>
|
|
||||||
<th>紀錄時間</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -77,6 +68,7 @@
|
|||||||
</main>
|
</main>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
var historyTable = null;
|
||||||
$(function () {
|
$(function () {
|
||||||
initList();
|
initList();
|
||||||
|
|
||||||
@ -90,6 +82,9 @@
|
|||||||
initApp.listFilter($('#js_nested_list'), $('#js_nested_list_filter'));
|
initApp.listFilter($('#js_nested_list'), $('#js_nested_list_filter'));
|
||||||
//init navigation
|
//init navigation
|
||||||
initApp.buildNavigation($('#js_nested_list'));
|
initApp.buildNavigation($('#js_nested_list'));
|
||||||
|
|
||||||
|
loadTable(null);
|
||||||
|
$(`[onclick="setDateType('today')"]`).click();
|
||||||
});
|
});
|
||||||
|
|
||||||
function initList() {
|
function initList() {
|
||||||
@ -192,30 +187,24 @@
|
|||||||
var edt = new Date(new Date().setDate(sdt.getDate() + 1));
|
var edt = new Date(new Date().setDate(sdt.getDate() + 1));
|
||||||
start = start ?? sdt.toLocaleDateString();
|
start = start ?? sdt.toLocaleDateString();
|
||||||
end = end ?? edt.toLocaleDateString();
|
end = end ?? edt.toLocaleDateString();
|
||||||
getHistoryDataByBaja(pageAct.deviceNumber + "_" + pageAct.deviceItem,
|
// getHistoryDataByBaja(pageAct.deviceNumber + "_" + pageAct.deviceItem,
|
||||||
new Date(start).getTime(),
|
//new Date(start).getTime(),
|
||||||
new Date(end).getTime(),
|
//new Date(end).getTime(),
|
||||||
pageAct.deviceName,
|
//pageAct.deviceName,
|
||||||
"Mitsubishi_Sup",
|
// "Mitsubishi_Sup",
|
||||||
callBackFromHistory);
|
// callBackFromHistory);
|
||||||
}
|
}
|
||||||
|
|
||||||
function callBackFromHistory(res) {
|
function callBackFromHistory(res) {
|
||||||
let strHtml = ``;
|
|
||||||
res = JSON.parse(res);
|
res = JSON.parse(res);
|
||||||
if (res.data.length > 0) {
|
loadTable(res.data);
|
||||||
$.each(res.data, function (index, val) {
|
if (historyTable != null) {
|
||||||
strHtml += `<tr>
|
let t = $('#historyTable').dataTable();
|
||||||
<td>${val.deviceName}</td>
|
|
||||||
<td>${val.value}</td>
|
|
||||||
<td>${displayDate(val.timestamp)}</td>
|
|
||||||
</tr>`;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else
|
|
||||||
strHtml += `<tr><td colspan="3">查無資料</td></tr>`;
|
|
||||||
|
|
||||||
$('#tableData tbody').html(strHtml);
|
t.fnClearTable();
|
||||||
|
if (res.data.length > 0)
|
||||||
|
t.fnAddData(res.data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setValue(deviceNumber, deviceName, deviceItem) {
|
function setValue(deviceNumber, deviceName, deviceItem) {
|
||||||
@ -274,7 +263,7 @@
|
|||||||
|
|
||||||
if (pageAct.dateType == "day")
|
if (pageAct.dateType == "day")
|
||||||
end = new Date(new Date().setDate(start.getDate() + 1));
|
end = new Date(new Date().setDate(start.getDate() + 1));
|
||||||
else if (pageAct.dateType == "month") {
|
else if (pageAct.dateType == "month") {
|
||||||
start = new Date($('#getmonth').val());
|
start = new Date($('#getmonth').val());
|
||||||
end = new Date(new Date().setDate(start.getDate() + 30));
|
end = new Date(new Date().setDate(start.getDate() + 30));
|
||||||
}
|
}
|
||||||
@ -294,5 +283,51 @@
|
|||||||
let day= date.split('/')[2];
|
let day= date.split('/')[2];
|
||||||
return month + "/" + day + "/" + year;
|
return month + "/" + day + "/" + year;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadTable(data) {
|
||||||
|
let tag = "#historyTable";
|
||||||
|
|
||||||
|
let column_defs = [
|
||||||
|
{ "targets": [0], "width": "20%", "sortable": true },
|
||||||
|
{ "targets": [1], "width": "20%", "sortable": true },
|
||||||
|
{ "targets": [2], "width": "20%", "sortable": true }
|
||||||
|
];
|
||||||
|
|
||||||
|
let columns = [
|
||||||
|
{
|
||||||
|
"title": "設備名稱",
|
||||||
|
"data": "deviceName",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "數值",
|
||||||
|
"data": "value",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "紀錄時間",
|
||||||
|
"data": "timestamp",
|
||||||
|
"render": function (date) {
|
||||||
|
return displayDate(date, "datetime");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
historyTable = new YourTeam.JqDataTables.getTableByStatic(tag, data, columns, column_defs, null, null, null, null, "tpi");
|
||||||
|
}
|
||||||
|
|
||||||
|
function exportExcel() {
|
||||||
|
let url = baseApiUrl + "/History/OpeExportExcel";
|
||||||
|
objSendData.Data = $('#historyTable').dataTable().fnGetData();
|
||||||
|
|
||||||
|
$.each(objSendData.Data, function (i, v) {
|
||||||
|
v.starttime = (pageAct.dateType == "month" ? new Date($('#getmonth').val()) : new Date($('#startdate').val()));
|
||||||
|
v.endtime = $('#enddate input').val() === "" ? null : new Date($('#enddate input').val());
|
||||||
|
v.dateType = pageAct.dateType;
|
||||||
|
});
|
||||||
|
|
||||||
|
ytAjax = new YourTeam.Ajax(url, objSendData, function (rel) {
|
||||||
|
if (rel.code == "0000")
|
||||||
|
location.href = baseApiUrl + "/api/df?fileName=" + rel.data + "&token=" + localStorage.getItem("JWT-Authorization");
|
||||||
|
}, null, "POST").send();
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
@ -16,6 +16,9 @@ using System.Threading.Tasks;
|
|||||||
using System.Xml;
|
using System.Xml;
|
||||||
using NPOI.XSSF.UserModel;
|
using NPOI.XSSF.UserModel;
|
||||||
using NPOI.SS.UserModel;
|
using NPOI.SS.UserModel;
|
||||||
|
using Microsoft.AspNetCore.Mvc.Infrastructure;
|
||||||
|
using Microsoft.AspNetCore.StaticFiles;
|
||||||
|
using NPOI.HPSF;
|
||||||
|
|
||||||
namespace FrontendWebApi.ApiControllers
|
namespace FrontendWebApi.ApiControllers
|
||||||
{
|
{
|
||||||
@ -39,105 +42,130 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="lhe"></param>
|
/// <param name="lhe"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public FileResult OpeExportExcel([FromBody] List<HistoryExport> lhe)
|
public ActionResult<ApiResult<string>> OpeExportExcel([FromBody] List<HistoryExport> lhe)
|
||||||
{
|
{
|
||||||
var workbook = new XSSFWorkbook();
|
ApiResult<string> apiResult = new ApiResult<string>();
|
||||||
#region excel設定
|
|
||||||
IFont font12 = workbook.CreateFont();
|
|
||||||
font12.FontName = "新細明體";
|
|
||||||
font12.FontHeightInPoints = 12;
|
|
||||||
ICellStyle style12 = workbook.CreateCellStyle();
|
|
||||||
style12.SetFont(font12);
|
|
||||||
style12.Alignment = HorizontalAlignment.Center;
|
|
||||||
style12.VerticalAlignment = VerticalAlignment.Center;
|
|
||||||
IFont font12Times = workbook.CreateFont();
|
|
||||||
font12Times.FontName = "Times New Roman";
|
|
||||||
font12Times.FontHeightInPoints = 12;
|
|
||||||
IFont font18 = workbook.CreateFont();
|
|
||||||
font18.FontName = "新細明體";
|
|
||||||
font18.FontHeightInPoints = 18;
|
|
||||||
font18.IsBold = true;
|
|
||||||
ICellStyle styleTitle18 = workbook.CreateCellStyle();
|
|
||||||
styleTitle18.SetFont(font18);
|
|
||||||
styleTitle18.Alignment = HorizontalAlignment.Center;
|
|
||||||
styleTitle18.VerticalAlignment = VerticalAlignment.Center;
|
|
||||||
ICellStyle styleLeft12 = workbook.CreateCellStyle();
|
|
||||||
styleLeft12.SetFont(font12);
|
|
||||||
styleLeft12.Alignment = HorizontalAlignment.Left;
|
|
||||||
styleLeft12.VerticalAlignment = VerticalAlignment.Center;
|
|
||||||
ICellStyle styleLine12 = workbook.CreateCellStyle();
|
|
||||||
styleLine12.SetFont(font12);
|
|
||||||
styleLine12.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
|
|
||||||
styleLine12.VerticalAlignment = VerticalAlignment.Center;
|
|
||||||
styleLine12.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
|
|
||||||
styleLine12.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
|
|
||||||
styleLine12.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
|
|
||||||
styleLine12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
|
|
||||||
ICellStyle stylein12 = workbook.CreateCellStyle();
|
|
||||||
stylein12.SetFont(font12Times);
|
|
||||||
stylein12.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left;
|
|
||||||
stylein12.VerticalAlignment = VerticalAlignment.Center;
|
|
||||||
stylein12.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
|
|
||||||
stylein12.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
|
|
||||||
stylein12.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
|
|
||||||
stylein12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
|
|
||||||
stylein12.WrapText = true;
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
var sheet = workbook.CreateSheet("歷史資料");
|
if (lhe == null)
|
||||||
int RowPosition = 0;
|
|
||||||
#region set cell
|
|
||||||
IRow row = sheet.CreateRow(RowPosition);
|
|
||||||
sheet.SetColumnWidth(0, 4 * 160 * 12);
|
|
||||||
sheet.SetColumnWidth(1, 4 * 160 * 12);
|
|
||||||
sheet.SetColumnWidth(2, 4 * 160 * 12);
|
|
||||||
ICell cell = row.CreateCell(0);
|
|
||||||
cell.SetCellValue("設備名稱");
|
|
||||||
cell.CellStyle = styleLine12;
|
|
||||||
cell = row.CreateCell(1);
|
|
||||||
cell.SetCellValue("數值");
|
|
||||||
cell.CellStyle = styleLine12;
|
|
||||||
cell = row.CreateCell(2);
|
|
||||||
cell.SetCellValue("記錄時間");
|
|
||||||
cell.CellStyle = styleLine12;
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
if (lhe.Count > 0)
|
|
||||||
{
|
{
|
||||||
foreach (var he in lhe)
|
apiResult.Code = "0001";
|
||||||
{
|
apiResult.Msg = "沒有資料匯入";
|
||||||
RowPosition += 1;
|
return apiResult;
|
||||||
row = sheet.CreateRow(RowPosition);
|
|
||||||
for (var i = 0; i < 3; i++)
|
|
||||||
{
|
|
||||||
cell = row.CreateCell(i);
|
|
||||||
if (i == 0)
|
|
||||||
{
|
|
||||||
cell.SetCellValue(he.device_name);
|
|
||||||
}
|
|
||||||
if (i == 1)
|
|
||||||
{
|
|
||||||
cell.SetCellValue(he.value);
|
|
||||||
}
|
|
||||||
if (i == 2)
|
|
||||||
{
|
|
||||||
cell.SetCellValue(he.record_time);
|
|
||||||
}
|
|
||||||
|
|
||||||
cell.CellStyle = style12;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var ms = new NpoiMemoryStream
|
try
|
||||||
{
|
{
|
||||||
AllowClose = false
|
var fileDateName = lhe.FirstOrDefault().dateType == "month" ? lhe.FirstOrDefault().starttime.ToString("yyyy-MM") : lhe.FirstOrDefault().endtime == null ? lhe.FirstOrDefault().starttime.ToString("yyyy-MM-dd") : lhe.FirstOrDefault().starttime.ToString("yyyy-MM-dd") + "_" + ((DateTime)lhe.FirstOrDefault().endtime).ToString("yyyy-MM-dd");
|
||||||
};
|
var fileName = "廠商資料_"+fileDateName+".xlsx";
|
||||||
workbook.Write(ms);
|
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "excel", "history");
|
||||||
ms.Flush();
|
|
||||||
ms.Seek(0, SeekOrigin.Begin);
|
|
||||||
|
|
||||||
return File(ms, "application/vnd.ms-excel", "廠商資料.xlsx");
|
if (!System.IO.Directory.Exists(filePath))
|
||||||
|
System.IO.Directory.CreateDirectory(filePath);
|
||||||
|
|
||||||
|
using (var fs = new FileStream(Path.Combine(filePath, fileName), FileMode.Create, FileAccess.Write))
|
||||||
|
{
|
||||||
|
IWorkbook workbook = new XSSFWorkbook();
|
||||||
|
#region excel設定
|
||||||
|
IFont font12 = workbook.CreateFont();
|
||||||
|
font12.FontName = "新細明體";
|
||||||
|
font12.FontHeightInPoints = 12;
|
||||||
|
ICellStyle style12 = workbook.CreateCellStyle();
|
||||||
|
style12.SetFont(font12);
|
||||||
|
style12.Alignment = HorizontalAlignment.Center;
|
||||||
|
style12.VerticalAlignment = VerticalAlignment.Center;
|
||||||
|
IFont font12Times = workbook.CreateFont();
|
||||||
|
font12Times.FontName = "Times New Roman";
|
||||||
|
font12Times.FontHeightInPoints = 12;
|
||||||
|
IFont font18 = workbook.CreateFont();
|
||||||
|
font18.FontName = "新細明體";
|
||||||
|
font18.FontHeightInPoints = 18;
|
||||||
|
font18.IsBold = true;
|
||||||
|
ICellStyle styleTitle18 = workbook.CreateCellStyle();
|
||||||
|
styleTitle18.SetFont(font18);
|
||||||
|
styleTitle18.Alignment = HorizontalAlignment.Center;
|
||||||
|
styleTitle18.VerticalAlignment = VerticalAlignment.Center;
|
||||||
|
ICellStyle styleLeft12 = workbook.CreateCellStyle();
|
||||||
|
styleLeft12.SetFont(font12);
|
||||||
|
styleLeft12.Alignment = HorizontalAlignment.Left;
|
||||||
|
styleLeft12.VerticalAlignment = VerticalAlignment.Center;
|
||||||
|
ICellStyle styleLine12 = workbook.CreateCellStyle();
|
||||||
|
styleLine12.SetFont(font12);
|
||||||
|
styleLine12.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
|
||||||
|
styleLine12.VerticalAlignment = VerticalAlignment.Center;
|
||||||
|
styleLine12.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
|
styleLine12.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
|
styleLine12.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
|
styleLine12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
|
ICellStyle stylein12 = workbook.CreateCellStyle();
|
||||||
|
stylein12.SetFont(font12Times);
|
||||||
|
stylein12.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left;
|
||||||
|
stylein12.VerticalAlignment = VerticalAlignment.Center;
|
||||||
|
stylein12.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
|
stylein12.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
|
stylein12.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
|
stylein12.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
|
||||||
|
stylein12.WrapText = true;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
ISheet sheet = workbook.CreateSheet("歷史資料");
|
||||||
|
int RowPosition = 0;
|
||||||
|
#region set cell
|
||||||
|
IRow row = sheet.CreateRow(RowPosition);
|
||||||
|
sheet.SetColumnWidth(0, 4 * 160 * 12);
|
||||||
|
sheet.SetColumnWidth(1, 4 * 160 * 12);
|
||||||
|
sheet.SetColumnWidth(2, 4 * 160 * 12);
|
||||||
|
ICell cell = row.CreateCell(0);
|
||||||
|
cell.SetCellValue("設備名稱");
|
||||||
|
cell.CellStyle = styleLine12;
|
||||||
|
cell = row.CreateCell(1);
|
||||||
|
cell.SetCellValue("數值");
|
||||||
|
cell.CellStyle = styleLine12;
|
||||||
|
cell = row.CreateCell(2);
|
||||||
|
cell.SetCellValue("記錄時間");
|
||||||
|
cell.CellStyle = styleLine12;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
if (lhe.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (var he in lhe)
|
||||||
|
{
|
||||||
|
RowPosition += 1;
|
||||||
|
row = sheet.CreateRow(RowPosition);
|
||||||
|
for (var i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
cell = row.CreateCell(i);
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
cell.SetCellValue(he.deviceName);
|
||||||
|
}
|
||||||
|
if (i == 1)
|
||||||
|
{
|
||||||
|
cell.SetCellValue(he.value);
|
||||||
|
}
|
||||||
|
if (i == 2)
|
||||||
|
{
|
||||||
|
cell.SetCellValue(he.timestamp.ToString("yyyy-MM-dd HH:mm") + ":00");//
|
||||||
|
}
|
||||||
|
|
||||||
|
cell.CellStyle = style12;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
workbook.Write(fs);
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResult.Code = "0000";
|
||||||
|
apiResult.Data = fileName;
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
apiResult.Code = "9999";
|
||||||
|
apiResult.Msg = "系統內部錯誤,請聯絡管理者。";
|
||||||
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||||
|
return Ok(apiResult);
|
||||||
|
}
|
||||||
|
return Ok(apiResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -12,6 +12,7 @@ using Repository.BackendRepository.Interface;
|
|||||||
using Repository.FrontendRepository.Interface;
|
using Repository.FrontendRepository.Interface;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IdentityModel.Tokens.Jwt;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
@ -135,5 +136,19 @@ namespace FrontendWebApi.ApiControllers
|
|||||||
|
|
||||||
return Ok(apiResult);
|
return Ok(apiResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("api/df")]
|
||||||
|
public ActionResult DownloadFile(string fileName, string token)
|
||||||
|
{
|
||||||
|
var jwt = new JwtSecurityTokenHandler().ReadJwtToken(token);
|
||||||
|
if (jwt == null)
|
||||||
|
return Unauthorized(HttpStatusCode.Unauthorized);
|
||||||
|
else if (fileName == null)
|
||||||
|
return NotFound("找不到文件");
|
||||||
|
|
||||||
|
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "excel", "history");
|
||||||
|
return File(System.IO.File.ReadAllBytes(Path.Combine(filePath, fileName)), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -265,8 +265,11 @@ namespace FrontendWebApi.Models
|
|||||||
|
|
||||||
public class HistoryExport
|
public class HistoryExport
|
||||||
{
|
{
|
||||||
public string device_name { get; set; }
|
public string deviceName { get; set; }
|
||||||
public string value { get; set; }
|
public int value { get; set; }
|
||||||
public string record_time { get; set; }
|
public DateTime timestamp { get; set; }
|
||||||
|
public DateTime starttime { get; set; }
|
||||||
|
public DateTime? endtime { get; set; }
|
||||||
|
public string dateType { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user