首页,报警数据,检测数据
This commit is contained in:
parent
f71dac2ac2
commit
846c921a65
|
|
@ -97,6 +97,21 @@
|
||||||
<param name="Source">需要解密的字符串</param>
|
<param name="Source">需要解密的字符串</param>
|
||||||
<returns>解密后的字符串</returns>
|
<returns>解密后的字符串</returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:langguanApi.Controllers.AlertController.export(System.Nullable{System.DateTime},System.Nullable{System.DateTime})">
|
||||||
|
<summary>
|
||||||
|
export data
|
||||||
|
</summary>
|
||||||
|
<param name="start"></param>
|
||||||
|
<param name="end"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:langguanApi.Controllers.AlertController.TestAdd(langguanApi.Model.AddAlertDto)">
|
||||||
|
<summary>
|
||||||
|
add alert
|
||||||
|
</summary>
|
||||||
|
<param name="input"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:langguanApi.Controllers.DeviceController.#ctor(langguanApi.Service.DeviceService)">
|
<member name="M:langguanApi.Controllers.DeviceController.#ctor(langguanApi.Service.DeviceService)">
|
||||||
<summary>
|
<summary>
|
||||||
|
|
||||||
|
|
@ -879,6 +894,36 @@
|
||||||
id
|
id
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="P:langguanApi.Model.Entity.Detection.DeviceId">
|
||||||
|
<summary>
|
||||||
|
deviceId
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:langguanApi.Model.Entity.Detection.DeviceName">
|
||||||
|
<summary>
|
||||||
|
deviceName
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:langguanApi.Model.Entity.Detection.OrganizedName">
|
||||||
|
<summary>
|
||||||
|
organizedName
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:langguanApi.Model.Entity.Detection.keyword">
|
||||||
|
<summary>
|
||||||
|
keyword
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:langguanApi.Model.Entity.Detection.Standard">
|
||||||
|
<summary>
|
||||||
|
standard
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:langguanApi.Model.Entity.Detection.deviceValue">
|
||||||
|
<summary>
|
||||||
|
deviceValue
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="T:langguanApi.Model.Entity.Ledger">
|
<member name="T:langguanApi.Model.Entity.Ledger">
|
||||||
<summary>
|
<summary>
|
||||||
台账
|
台账
|
||||||
|
|
@ -1550,19 +1595,27 @@
|
||||||
注册日期
|
注册日期
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:langguanApi.Service.AlertService.Add(langguanApi.Model.Alert)">
|
<member name="M:langguanApi.Service.AlertService.Add(langguanApi.Model.AddAlertDto)">
|
||||||
<summary>
|
<summary>
|
||||||
新加
|
新加
|
||||||
</summary>
|
</summary>
|
||||||
<param name="input"></param>
|
<param name="input"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:langguanApi.Service.AlertService.IndexData">
|
<member name="M:langguanApi.Service.AlertService.IndexData(System.Int32)">
|
||||||
<summary>
|
<summary>
|
||||||
首页数据,最近7天的
|
首页数据,最近7天的
|
||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:langguanApi.Service.AlertService.ExportData(System.Nullable{System.DateTime},System.Nullable{System.DateTime})">
|
||||||
|
<summary>
|
||||||
|
导出数据
|
||||||
|
</summary>
|
||||||
|
<param name="start"></param>
|
||||||
|
<param name="end"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:langguanApi.Service.AlertService.GetPage(langguanApi.Model.reqpage)">
|
<member name="M:langguanApi.Service.AlertService.GetPage(langguanApi.Model.reqpage)">
|
||||||
<summary>
|
<summary>
|
||||||
分页取数据
|
分页取数据
|
||||||
|
|
@ -1723,6 +1776,19 @@
|
||||||
<param name="exp"></param>
|
<param name="exp"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:langguanApi.Service.DetectionService.GetIndexData(System.Int32)">
|
||||||
|
<summary>
|
||||||
|
//获取最新的数据
|
||||||
|
</summary>
|
||||||
|
<param name="num"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:langguanApi.Service.DetectionService.Export(System.DateTime,System.DateTime)">
|
||||||
|
<summary>
|
||||||
|
导出数据
|
||||||
|
</summary>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:langguanApi.Service.DeviceService.Add(langguanApi.Model.DeviceAddDto)">
|
<member name="M:langguanApi.Service.DeviceService.Add(langguanApi.Model.DeviceAddDto)">
|
||||||
<summary>
|
<summary>
|
||||||
新加
|
新加
|
||||||
|
|
@ -1914,7 +1980,7 @@
|
||||||
HomeService
|
HomeService
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:langguanApi.Service.HomeService.#ctor(langguanApi.Service.DeviceService,langguanApi.Service.Hj212Service,Microsoft.Extensions.Configuration.IConfiguration,langguanApi.Common.CacheManager,langguanApi.Service.WeatherService,langguanApi.Service.AlertService)">
|
<member name="M:langguanApi.Service.HomeService.#ctor(langguanApi.Service.DeviceService,langguanApi.Service.Hj212Service,Microsoft.Extensions.Configuration.IConfiguration,langguanApi.Common.CacheManager,langguanApi.Service.WeatherService,langguanApi.Service.AlertService,langguanApi.Service.DetectionService)">
|
||||||
<summary>
|
<summary>
|
||||||
HomeService
|
HomeService
|
||||||
</summary>
|
</summary>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
using langguanApi.Model;
|
||||||
|
using langguanApi.Service;
|
||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace langguanApi.Controllers
|
||||||
|
{
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
[ApiController]
|
||||||
|
public class AlertController : ControllerBase
|
||||||
|
{
|
||||||
|
private readonly AlertService _alertService;
|
||||||
|
public AlertController(AlertService alertService)
|
||||||
|
{
|
||||||
|
_alertService = alertService;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// export data 默认最近7天数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="start"></param>
|
||||||
|
/// <param name="end"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("export")]
|
||||||
|
public async Task<IActionResult> export(DateTime? start, DateTime? end)
|
||||||
|
{
|
||||||
|
start = start.HasValue ? start.Value.Date : DateTime.Now.AddDays(-7);
|
||||||
|
end = end.HasValue ? end.Value.Date.AddDays(1) : DateTime.Now.Date.AddDays(1);
|
||||||
|
var alerts = await _alertService.ExportData(start, end);
|
||||||
|
return File(alerts, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||||||
|
$"{start.Value.ToString("yyyy-MM-dd")}-{end.Value.ToString("yyyy-MM-dd")}_设备报警.xlsx");
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// add alert
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost("TestAdd")]
|
||||||
|
public async Task<IActionResult> TestAdd(AddAlertDto input)
|
||||||
|
{
|
||||||
|
var result = await _alertService.Add(input);
|
||||||
|
return Ok(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -10,4 +10,14 @@
|
||||||
public string AlertType { get; set; }
|
public string AlertType { get; set; }
|
||||||
public string AlertContent { get; set; }
|
public string AlertContent { get; set; }
|
||||||
}
|
}
|
||||||
|
public class AddAlertDto
|
||||||
|
{
|
||||||
|
public string DeviceId { get; set; }
|
||||||
|
public string DeviceMn { get; set; }
|
||||||
|
public string deviceName { get; set; }
|
||||||
|
public string DeviceType { get; set; }
|
||||||
|
public string DeviceStatus { get; set; }
|
||||||
|
public string AlertType { get; set; }
|
||||||
|
public string AlertContent { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
namespace langguanApi.Model.Entity
|
||||||
|
{
|
||||||
|
public class Detection : BaseModel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// deviceId
|
||||||
|
/// </summary>
|
||||||
|
public string DeviceId { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// deviceName
|
||||||
|
/// </summary>
|
||||||
|
public string DeviceName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// organizedName
|
||||||
|
/// </summary>
|
||||||
|
public string OrganizedName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// keyword
|
||||||
|
/// </summary>
|
||||||
|
public string keyword { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// standard
|
||||||
|
/// </summary>
|
||||||
|
public string Standard { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// deviceValue
|
||||||
|
/// </summary>
|
||||||
|
public string deviceValue { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
using langguanApi.Model;
|
using langguanApi.Model;
|
||||||
using langguanApi.Model.Dto;
|
using langguanApi.Model.Dto;
|
||||||
using langguanApi.Model.Entity;
|
using langguanApi.Model.Entity;
|
||||||
|
using Mapster;
|
||||||
using Npoi.Mapper;
|
using Npoi.Mapper;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
|
|
||||||
|
|
@ -18,11 +19,12 @@ namespace langguanApi.Service
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="input"></param>
|
/// <param name="input"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<ApiResult> Add(Alert input)
|
public async Task<ApiResult> Add(AddAlertDto input)
|
||||||
{
|
{
|
||||||
if (input != null)
|
if (input != null)
|
||||||
{
|
{
|
||||||
await base.CreateAsync(input);
|
var entity = input.Adapt<Alert>();
|
||||||
|
await base.CreateAsync(entity);
|
||||||
return new ApiResult { code = 0, msg = "" };
|
return new ApiResult { code = 0, msg = "" };
|
||||||
}
|
}
|
||||||
return new ApiResult { code = -1, msg = "" }; ;
|
return new ApiResult { code = -1, msg = "" }; ;
|
||||||
|
|
@ -31,28 +33,45 @@ namespace langguanApi.Service
|
||||||
/// 首页数据,最近7天的
|
/// 首页数据,最近7天的
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<object> IndexData()
|
public async Task<object> IndexData(int num = 50)
|
||||||
{
|
{
|
||||||
Expression<Func<Alert, bool>> exp = filter => filter.CreateDateTime >= DateTime.Now.AddDays(-7) && filter.IsDelete == false;
|
Expression<Func<Alert, bool>> exp = filter => filter.IsDelete == false;
|
||||||
return (await base.GetListWithExp(exp)).OrderByDescending(s => s.CreateDateTime);
|
return (await base.GetListWithExp(exp))
|
||||||
|
.OrderByDescending(s => s.CreateDateTime)
|
||||||
|
.Take(num)
|
||||||
|
.Select(s => new
|
||||||
|
{
|
||||||
|
s.AlertContent,
|
||||||
|
s.deviceName,
|
||||||
|
s.CreateDateTime
|
||||||
|
}).ToList();
|
||||||
}
|
}
|
||||||
public async Task<byte[]> ExportData(DateTime start, DateTime end)
|
/// <summary>
|
||||||
|
///导出数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="start"></param>
|
||||||
|
/// <param name="end"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<byte[]> ExportData(DateTime? start, DateTime? end)
|
||||||
{
|
{
|
||||||
|
|
||||||
Expression<Func<Alert, bool>> exp = filter => filter.CreateDateTime >= start
|
Expression<Func<Alert, bool>> exp = filter => filter.CreateDateTime >= start
|
||||||
&& filter.CreateDateTime <= end
|
&& filter.CreateDateTime <= end
|
||||||
&& filter.IsDelete == false;
|
&& filter.IsDelete == false;
|
||||||
var list = await base.GetListWithExp(exp);
|
var list = (await base.GetListWithExp(exp)).OrderByDescending(s => s.CreateDateTime).ToList();
|
||||||
var mapper = new Mapper();
|
if (list.Any())
|
||||||
mapper.Map<Alert>("报警开始时间", s => s.CreateDateTime.ToString("yyyy-MM-dd HH:mm:ss"))
|
{
|
||||||
.Map<Alert>("设备名称", s => s.deviceName)
|
var mapper = new Mapper();
|
||||||
// .Map<Alert>("工序", s => s.)
|
mapper.Map<Alert>("报警开始时间", s => s.CreateDateTime)
|
||||||
.Map<Ledger>("新能源", s => s.NewCar ? "是" : "否")
|
.Map<Alert>("设备名称", s => s.deviceName)
|
||||||
.Map<Ledger>("燃油车", s => s.Emissions)
|
// .Map<Alert>("工序", s => s.)
|
||||||
.Map<Ledger>("出厂日间 ", s => s.OutTime)
|
.Map<Alert>("内容", s => s.AlertContent)
|
||||||
.Format<Alert>("yyyy-MM-dd HH:mm:ss", s => s.CreateDateTime);
|
.Format<Alert>("yyyy-MM-dd HH:mm:ss", s => s.CreateDateTime);
|
||||||
MemoryStream stream = new MemoryStream();
|
MemoryStream stream = new MemoryStream();
|
||||||
mapper.Save(stream, list.ToList(), sheetName: "sheet1", leaveOpen: true);
|
mapper.Save(stream, list, sheetName: "sheet1", leaveOpen: true);
|
||||||
return stream.ToArray();
|
return stream.ToArray();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 分页取数据
|
/// 分页取数据
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
using langguanApi.Extensions.AutoDI;
|
||||||
|
using langguanApi.Model;
|
||||||
|
using langguanApi.Model.Entity;
|
||||||
|
using Npoi.Mapper;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
|
||||||
|
namespace langguanApi.Service
|
||||||
|
{
|
||||||
|
[ServiceInjection(InjectionType.Transient)]
|
||||||
|
public class DetectionService : BaseService<Detection>
|
||||||
|
{
|
||||||
|
public DetectionService(IConfiguration config) : base(config, nameof(Detection))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// //获取最新的数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="num"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<object> GetIndexData(int num = 50)
|
||||||
|
{
|
||||||
|
Expression<Func<Detection, bool>> exp = filter => true;
|
||||||
|
var result = (await GetListWithExp(exp)).OrderByDescending(s => s.CreateDateTime).Take(num).ToList();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 导出数据
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<byte[]> Export(DateTime start, DateTime end)
|
||||||
|
{
|
||||||
|
Expression<Func<Detection, bool>> exp = filter => filter.CreateDateTime >= start && filter.CreateDateTime <= end;
|
||||||
|
var result = (await GetListWithExp(exp)).OrderBy(s => s.CreateDateTime).ToList();
|
||||||
|
var mapper = new Mapper();
|
||||||
|
mapper.Map<Detection>("时间", s => s.CreateDateTime.ToString("yyyy-MM-dd HH:mm:ss"))
|
||||||
|
.Map<Detection>("工序", s => s.OrganizedName)
|
||||||
|
.Map<Detection>("设备名称", s => s.DeviceName)
|
||||||
|
.Map<Detection>("项目", s => s.keyword)
|
||||||
|
.Map<Detection>("检测值", s => s.deviceValue)
|
||||||
|
.Format<Detection>("yyyy-MM-dd HH:mm:ss", s => s.CreateDateTime);
|
||||||
|
MemoryStream stream = new MemoryStream();
|
||||||
|
mapper.Save(stream, result.ToList(), sheetName: "sheet1", leaveOpen: true);
|
||||||
|
return stream.ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -18,6 +18,7 @@ namespace langguanApi.Service
|
||||||
private CacheManager _cacheManager;
|
private CacheManager _cacheManager;
|
||||||
private readonly WeatherService _weatherService;
|
private readonly WeatherService _weatherService;
|
||||||
private readonly AlertService _alertService;
|
private readonly AlertService _alertService;
|
||||||
|
private readonly DetectionService _detectionService;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// HomeService
|
/// HomeService
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -25,7 +26,8 @@ namespace langguanApi.Service
|
||||||
/// <param name="hj212Service"></param>
|
/// <param name="hj212Service"></param>
|
||||||
public HomeService(DeviceService device, Hj212Service hj212Service,
|
public HomeService(DeviceService device, Hj212Service hj212Service,
|
||||||
IConfiguration configuration, CacheManager cacheManager,
|
IConfiguration configuration, CacheManager cacheManager,
|
||||||
WeatherService weatherService, AlertService alertService)
|
WeatherService weatherService, AlertService alertService,
|
||||||
|
DetectionService detectionService)
|
||||||
{
|
{
|
||||||
_deviceService = device;
|
_deviceService = device;
|
||||||
_hj212Service = hj212Service;
|
_hj212Service = hj212Service;
|
||||||
|
|
@ -33,6 +35,7 @@ namespace langguanApi.Service
|
||||||
_cacheManager = cacheManager;
|
_cacheManager = cacheManager;
|
||||||
_weatherService = weatherService;
|
_weatherService = weatherService;
|
||||||
_alertService = alertService;
|
_alertService = alertService;
|
||||||
|
_detectionService = detectionService;
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// view
|
/// view
|
||||||
|
|
@ -46,16 +49,33 @@ namespace langguanApi.Service
|
||||||
Yesterday = 0.8,
|
Yesterday = 0.8,
|
||||||
LastWeek = 0.6,
|
LastWeek = 0.6,
|
||||||
};
|
};
|
||||||
|
|
||||||
Expression<Func<Model.HJ212, bool>> filter = exp => true;
|
Expression<Func<Model.HJ212, bool>> filter = exp => true;
|
||||||
var Realtime = await _hj212Service.Realtime();
|
// 首页设备报警数据
|
||||||
var getViewTop = await _hj212Service.GetViewTop();
|
|
||||||
var alerts = await _alertService.IndexData();
|
var alerts = await _alertService.IndexData();
|
||||||
|
// 首页设备检测数据
|
||||||
|
var detections = await _detectionService.GetIndexData();
|
||||||
// 获取天气信息,缓存1小时,如果不存在,则调用WeatherService获取
|
// 获取天气信息,缓存1小时,如果不存在,则调用WeatherService获取
|
||||||
Func<Task<object>> getWeatherFunc = async () => await _weatherService.GetWeather();
|
Func<Task<object>> getWeatherFunc = async () => await _weatherService.GetWeather();
|
||||||
var weather = await _cacheManager.GetConvertVale(RedisKeylist.Weather, getWeatherFunc, 60 * 60);
|
var weather = await _cacheManager.GetConvertVale(RedisKeylist.Weather, getWeatherFunc, 60 * 60);
|
||||||
Func<Task<object>> getAriQualityFunc= async () => await _weatherService.GetAirQuality();
|
// 获取空气质量,缓存2小时,如果不存在,则调用WeatherService获取
|
||||||
|
Func<Task<object>> getAriQualityFunc = async () => await _weatherService.GetAirQuality();
|
||||||
var ariQuality = await _cacheManager.GetConvertVale(RedisKeylist.AriQuality, getAriQualityFunc, 60 * 120);
|
var ariQuality = await _cacheManager.GetConvertVale(RedisKeylist.AriQuality, getAriQualityFunc, 60 * 120);
|
||||||
|
|
||||||
|
//首页清洁运输比例
|
||||||
|
var cleaData = new
|
||||||
|
{
|
||||||
|
yesterday = 0.8,
|
||||||
|
lastWeek = 0.6
|
||||||
|
};
|
||||||
|
var day = new
|
||||||
|
{
|
||||||
|
day = new { voc = "70mg/m3", cemes = "100mg/m3" },
|
||||||
|
week = new
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
return new ApiResult
|
return new ApiResult
|
||||||
{
|
{
|
||||||
code = 0,
|
code = 0,
|
||||||
|
|
@ -71,11 +91,13 @@ namespace langguanApi.Service
|
||||||
title = _configuration.GetValue<string>("Home:Title"),
|
title = _configuration.GetValue<string>("Home:Title"),
|
||||||
},
|
},
|
||||||
devices,
|
devices,
|
||||||
|
cleanData,
|
||||||
ariQuality,
|
ariQuality,
|
||||||
Realtime,
|
Realtime = "",
|
||||||
getViewTop,
|
getViewTop = "",
|
||||||
weather,
|
weather,
|
||||||
alerts
|
alerts,
|
||||||
|
detections
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue