parking-webapi/WebApi_data_value/Controllers/Yuntech_in_car_tableController.cs

567 lines
23 KiB
C#
Raw Normal View History

2024-02-04 19:20:00 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
2024-03-05 19:49:58 +08:00
using Parking_space_WebAPI.Models;
using Parking_space_WebAPI.Services;
using Parking_space_WebAPI.ViewModel;
using Parking_space_WebAPI.Authorization;
2024-02-04 19:20:00 +08:00
2024-03-05 19:49:58 +08:00
namespace Parking_space_WebAPI.Controllers
2024-02-04 19:20:00 +08:00
{
2024-02-04 19:20:00 +08:00
[Route("api/[controller]")]
[ApiController]
2024-02-09 16:44:45 +08:00
[Authorize]
2024-04-24 16:33:49 +08:00
[ApiExplorerSettings(GroupName = "校園大內網")]
2024-02-04 19:20:00 +08:00
public class Yuntech_in_car_tableController : ControllerBase
{
private readonly SqlContext _context;
public Yuntech_in_car_tableController(SqlContext context)
{
_context = context;
}
#region
/// <summary>
/// 獲取進入雲科的所有資料
/// </summary>
2024-02-04 19:20:00 +08:00
// GET: api/Yuntech_in_car_table
[HttpGet]
public async Task<ActionResult<IEnumerable<Yuntech_in_car_table>>> Getyuntech_in_car_table()
{
var in_car_table = await (from c in _context.yuntech_in_car_table
orderby c.in_time descending
select new Yuntech_in_car_table
{
license_plate_number = c.license_plate_number,
in_time = c.in_time,
out_time = c.out_time,
location = c.location,
}
).ToListAsync();
return in_car_table;
}
#endregion
2024-02-04 19:20:00 +08:00
2024-02-19 11:24:08 +08:00
#region 100
/// <summary>
/// 獲取進入雲科的100筆資料
/// </summary>
// GET: api/Yuntech_in_car_table
[HttpGet("Amount-{num}")]
public async Task<ActionResult<IEnumerable<Yuntech_in_car_table>>> Getyuntech_in_car_100_table(int num)
{
var in_car_table = await (from c in _context.yuntech_in_car_table
orderby c.in_time descending
select new Yuntech_in_car_table
{
license_plate_number = c.license_plate_number,
in_time = c.in_time,
out_time = c.out_time,
location = c.location,
}
).Skip(num).Take(100).ToListAsync();
return in_car_table;
}
#endregion
2024-02-04 19:20:00 +08:00
#region
/// <summary>
/// 獲取進入的單獨地區的所有資料
/// </summary>
/// <param name="id"> 哪個門口</param>
/// <returns></returns>
2024-02-04 19:20:00 +08:00
// GET: api/Yuntech_in_car_table/5
[HttpGet("location-{id}")]
public async Task<IEnumerable<Yuntech_in_car_table>> GetYuntech_in_car_table(string id)
{
var in_car_table = await (from c in _context.yuntech_in_car_table
2024-02-21 15:29:01 +08:00
where c.location == id
orderby c.in_time descending
select new Yuntech_in_car_table
{
license_plate_number = c.license_plate_number,
in_time = c.in_time,
out_time = c.out_time,
location = c.location,
}).Skip(0).Take(500).ToListAsync();
2024-02-04 19:20:00 +08:00
return in_car_table;
}
#endregion
#region
/// <summary>
/// 獲取時間內的車輛
/// </summary>
/// <param name="id">位置名稱</param>
/// <param name="start_time">起始時間</param>
/// <param name="end_time">結束時間</param>
/// <returns></returns>
[HttpGet("location_name_1_-{id}-start_time-{start_time}-end_time-{end_time}")]
2024-02-21 15:29:01 +08:00
public async Task<IEnumerable<Yuntech_in_car_table>> GetYuntech_in_car_table_date(string id, DateTime start_time, DateTime end_time)
{
var in_car_table = await (from c in _context.yuntech_in_car_table
where c.location == id
where c.in_time >= start_time
where c.in_time <= end_time
select new Yuntech_in_car_table
{
license_plate_number = c.license_plate_number,
in_time = c.in_time,
out_time = c.out_time,
location = c.location,
}).ToListAsync();
return in_car_table;
}
#endregion
#region
/// <summary>
/// 透過車牌號碼搜尋所有資料
/// </summary>
/// <param name="id">車牌號碼 ex:ABC4321</param>
/// <returns></returns>
[HttpGet("license_plate_number-{id}")]
public async Task<IEnumerable<Yuntech_in_car_table>> Getlicense_plate_number(string id)
{
var in_car_table = await (from c in _context.yuntech_in_car_table
where c.license_plate_number == id
orderby c.in_time descending
select new Yuntech_in_car_table
{
license_plate_number = c.license_plate_number,
in_time = c.in_time,
out_time = c.out_time,
location = c.location,
}).ToListAsync();
return in_car_table;
}
#endregion
#region
/// <summary>
/// 獲取進入的單獨地區的單筆資料
/// </summary>
/// <param name="id">地區</param>
/// <param name="time">進入時間 ex:2024-02-05T12:21:48.395Z</param>
/// <returns></returns>
2024-02-04 19:20:00 +08:00
// GET: api/Yuntech_in_car_table/5
[HttpGet("location_name-{id}-time-{time}")]
2024-02-04 19:20:00 +08:00
public async Task<ActionResult<Yuntech_in_car_table>> One_data(string id, DateTime time)
{
var in_car_table = await (from c in _context.yuntech_in_car_table
where c.location == id
where c.in_time == time
select new Yuntech_in_car_table
{
2024-02-21 15:29:01 +08:00
license_plate_number = c.license_plate_number,
in_time = c.in_time,
out_time = c.out_time,
car_img = c.car_img,
location = c.location,
2024-04-30 16:07:28 +08:00
out_car_img = c.out_car_img
}).FirstAsync();
2024-02-04 19:20:00 +08:00
return in_car_table;
}
#endregion
2024-02-08 23:44:13 +08:00
#region
/// <summary>
/// 尋找規定時間內每日進入人數
/// </summary>
/// <returns></returns>
[HttpGet("get_day_in_car-{day}")]
public async Task<IEnumerable<object>> Getdayvalue(int day)
{
// 取得今日日期
DateTime today = DateTime.Today;
// 取得 30 天前的日期
DateTime DaysAgo = today.AddDays(-day);
var dateValue = new List<object>();
// 使用 for 迴圈逐日計算次數
2024-02-21 15:29:01 +08:00
for (int i = 1; i <= day; i++)
2024-02-08 23:44:13 +08:00
{
DateTime date_1 = DaysAgo;
date_1 = date_1.AddDays(i);
DateTime date_2 = DaysAgo;
2024-02-21 15:29:01 +08:00
date_2 = date_2.AddDays(i + 1);
2024-02-08 23:44:13 +08:00
var dailyCount = await _context.yuntech_in_car_table
.Where(c => c.in_time >= date_1.Date) // 只選擇指定日期的資料
.Where(c => c.in_time <= date_2.Date) // 只選擇指定日期的資料
.CountAsync(); // 計算該日期的次數
dateValue.Add(new { Date = date_1, Occurrences = dailyCount });
}
return dateValue;
}
#endregion
2024-02-04 19:20:00 +08:00
2024-02-21 15:29:01 +08:00
#region
///<summary>
///尋找所有進出校園的地點
/// </summary>
/// <returns></returns>
[HttpGet("location_name")]
public async Task<IEnumerable<object>> Get_in_Yuntech_location_name()
{
var location_name_table = await _context.yuntech_in_car_table
.GroupBy(c=>c.location)
.Select(group => new
{
location_name = group.Key,
})
.ToListAsync();
return location_name_table;
}
#endregion
2024-02-04 19:20:00 +08:00
#region
/// <summary>
/// 新增進入雲科的車輛資料
/// </summary>
/// <param name="yuntech_in_car_table"></param>
/// <returns></returns>
2024-02-04 19:20:00 +08:00
// POST: api/Yuntech_in_car_table
// To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
[HttpPost]
public async Task<ActionResult<Yuntech_in_car_table>> PostYuntech_in_car_table(Yuntech_in_car_table yuntech_in_car_table)
{
if (_context.yuntech_in_car_table == null)
{
return Problem("Entity set 'SqlContext.yuntech_in_car_table' is null.");
}
2024-02-04 19:20:00 +08:00
try
{
//比對1分鐘內有無重複記錄到
DateTime now_time = DateTime.Now;
// 取得 59秒前的時間
DateTime time_59s_ago = now_time.AddSeconds(-59);
var in_car_data = await (from c in _context.yuntech_in_car_table
where c.license_plate_number == yuntech_in_car_table.license_plate_number
where c.out_time == null
orderby c.in_time descending
select c).FirstOrDefaultAsync();
if (in_car_data != null && in_car_data.in_time > time_59s_ago)
{
return Ok();
}
//比對30秒內出去與進入的時間對比
//取得30秒前的時間
DateTime time_30s_ago = now_time.AddSeconds(-30);
var out_car_data = await (from c in _context.yuntech_in_car_table
where c.license_plate_number == yuntech_in_car_table.license_plate_number
orderby c.out_time descending
select c).FirstOrDefaultAsync();
if (out_car_data != null && out_car_data.out_time > time_30s_ago)
{
2024-05-16 13:18:20 +08:00
return Ok(out_car_data);
}
// 新增資料
2024-02-04 19:20:00 +08:00
yuntech_in_car_table.in_time = DateTime.Now;
yuntech_in_car_table.out_time = null;
_context.yuntech_in_car_table.Add(yuntech_in_car_table);
2024-02-04 19:20:00 +08:00
await _context.SaveChangesAsync();
// 車位數量-1
var yuntech_parking = await _context.yuntech_parking.FirstOrDefaultAsync();
if (yuntech_parking != null)
{
string now_num_str = yuntech_parking.now_num;
int now_num_int;
Int32.TryParse(now_num_str, out now_num_int);
now_num_int = now_num_int - 1;
now_num_str=now_num_int.ToString();
yuntech_parking.now_num = now_num_str;
// 保存更改
await _context.SaveChangesAsync();
}
2024-02-04 19:20:00 +08:00
}
catch (DbUpdateException)
{
if (Yuntech_in_car_tableExists(yuntech_in_car_table.in_time))
{
return Conflict();
}
else
{
throw;
}
}
return CreatedAtAction("GetYuntech_in_car_table", new { id = yuntech_in_car_table.in_time }, yuntech_in_car_table);
}
#endregion
2024-02-04 19:20:00 +08:00
2024-05-20 21:52:12 +08:00
#region City_parking
/// <summary>
/// City_parking 新增進入資料
/// </summary>
/// <param name="yuntech_in_car_table"></param>
/// <returns></returns>
// POST: api/Yuntech_in_car_table
// To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
[HttpPost("city_parking_in_car_data")]
public async Task<ActionResult<Yuntech_in_car_table>> PostYuntech_in_car_table_for__city_parking(Yuntech_in_car_table yuntech_in_car_table)
{
if (_context.yuntech_in_car_table == null)
{
return Problem("Entity set 'SqlContext.yuntech_in_car_table' is null.");
}
try
{
//比對1分鐘內有無重複記錄到
DateTime now_time = DateTime.Now;
// 取得 59秒前的時間
DateTime time_59s_ago = now_time.AddSeconds(-59);
var in_car_data = await (from c in _context.yuntech_in_car_table
where c.license_plate_number == yuntech_in_car_table.license_plate_number
where c.out_time == null
orderby c.in_time descending
select c).FirstOrDefaultAsync();
if (in_car_data != null && in_car_data.in_time > time_59s_ago)
{
return Ok();
}
//比對30秒內出去與進入的時間對比
//取得30秒前的時間
DateTime time_30s_ago = now_time.AddSeconds(-30);
var out_car_data = await (from c in _context.yuntech_in_car_table
where c.license_plate_number == yuntech_in_car_table.license_plate_number
orderby c.out_time descending
select c).FirstOrDefaultAsync();
if (out_car_data != null && out_car_data.out_time > time_30s_ago)
{
return Ok(out_car_data);
}
// 新增資料
yuntech_in_car_table.in_time = DateTime.Now;
yuntech_in_car_table.out_time = null;
_context.yuntech_in_car_table.Add(yuntech_in_car_table);
await _context.SaveChangesAsync();
// 車位數量-1
var yuntech_parking = await _context.yuntech_parking.FirstOrDefaultAsync();
if (yuntech_parking != null)
{
string now_num_str = yuntech_parking.now_num;
int now_num_int;
Int32.TryParse(now_num_str, out now_num_int);
now_num_int = now_num_int - 1;
now_num_str = now_num_int.ToString();
yuntech_parking.now_num = now_num_str;
// 保存更改
await _context.SaveChangesAsync();
}
}
catch (DbUpdateException)
{
if (Yuntech_in_car_tableExists(yuntech_in_car_table.in_time))
{
return Conflict();
}
else
{
throw;
}
}
return CreatedAtAction("GetYuntech_in_car_table", new { id = yuntech_in_car_table.in_time }, yuntech_in_car_table);
}
#endregion
#region
/// <summary>
/// 新增出去雲科的車輛資料
/// </summary>
/// <param name="yuntech_in_car_table"></param>
/// <returns></returns>
// POST: api/Yuntech_in_car_table
// To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
[HttpPost("out_car")]
public async Task<ActionResult<Yuntech_in_car_table>> PostYuntech_out_car_table(Yuntech_in_car_table yuntech_out_car_table)
{
if (_context.yuntech_in_car_table == null)
{
return Problem("Entity set 'SqlContext.yuntech_in_car_table' is null.");
}
var license_plate_number = yuntech_out_car_table.license_plate_number;
var out_car_img = yuntech_out_car_table.out_car_img;
var in_car_data = await(from c in _context.yuntech_in_car_table
where c.license_plate_number == license_plate_number
where c.out_time ==null
orderby c.in_time descending
select c).FirstOrDefaultAsync();
DateTime now_time = DateTime.Now;
// 取得 30秒前的時間
DateTime time_30s_ago = now_time.AddSeconds(-30);
if (in_car_data != null && in_car_data.in_time<time_30s_ago)
{
// 处理找到记录的情况
_context.yuntech_in_car_table.Remove(in_car_data);
await _context.SaveChangesAsync();
in_car_data.out_time = DateTime.Now;
in_car_data.out_car_img = out_car_img;
_context.yuntech_in_car_table.Add(in_car_data);
await _context.SaveChangesAsync();
// 車位數量+1
var yuntech_parking = await _context.yuntech_parking.FirstOrDefaultAsync();
if (yuntech_parking != null)
{
string now_num_str = yuntech_parking.now_num;
int now_num_int;
Int32.TryParse(now_num_str, out now_num_int);
now_num_int = now_num_int + 1;
now_num_str = now_num_int.ToString();
yuntech_parking.now_num = now_num_str;
// 保存更改
await _context.SaveChangesAsync();
}
}
else
{
// 处理未找到记录的情况
await _context.SaveChangesAsync();
}
return Ok();
}
#endregion
2024-05-20 21:52:12 +08:00
#region City_parking
/// <summary>
/// City_parking 新增出去資料
/// </summary>
/// <param name="yuntech_in_car_table"></param>
/// <returns></returns>
// POST: api/Yuntech_in_car_table
// To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
[HttpPost("city_parking_out_car_data")]
public async Task<ActionResult<Yuntech_in_car_table>> PostYuntech_out_car_table_for_city_parking(Yuntech_in_car_table yuntech_out_car_table)
{
if (_context.yuntech_in_car_table == null)
{
return Problem("Entity set 'SqlContext.yuntech_in_car_table' is null.");
}
var license_plate_number = yuntech_out_car_table.license_plate_number;
var out_car_img = yuntech_out_car_table.out_car_img;
var in_car_data = await (from c in _context.yuntech_in_car_table
where c.license_plate_number == license_plate_number
where c.out_time == null
orderby c.in_time descending
select c).FirstOrDefaultAsync();
DateTime now_time = DateTime.Now;
// 取得 30秒前的時間
DateTime time_30s_ago = now_time.AddSeconds(-30);
if (in_car_data != null && in_car_data.in_time < time_30s_ago)
{
// 处理找到记录的情况
_context.yuntech_in_car_table.Remove(in_car_data);
await _context.SaveChangesAsync();
in_car_data.out_time = DateTime.Now;
in_car_data.out_car_img = out_car_img;
_context.yuntech_in_car_table.Add(in_car_data);
await _context.SaveChangesAsync();
// 車位數量+1
var yuntech_parking = await _context.yuntech_parking.FirstOrDefaultAsync();
if (yuntech_parking != null)
{
string now_num_str = yuntech_parking.now_num;
int now_num_int;
Int32.TryParse(now_num_str, out now_num_int);
now_num_int = now_num_int + 1;
now_num_str = now_num_int.ToString();
yuntech_parking.now_num = now_num_str;
// 保存更改
await _context.SaveChangesAsync();
}
}
else
{
// 处理未找到记录的情况
await _context.SaveChangesAsync();
}
return Ok();
}
#endregion
#region
/// <summary>
/// 刪除指定資料
/// </summary>
/// <param name="license_plate_number">車牌號碼</param>
/// <param name="time">資料新增時間</param>
/// <returns></returns>
[HttpDelete("license_plate_number-{license_plate_number}-time-{time}")]
public async Task<IActionResult> Deletein_car_table(string license_plate_number, DateTime time)
{
var in_car_table = await (from c in _context.yuntech_in_car_table
where c.license_plate_number == license_plate_number
where c.in_time == time
select c).FirstAsync();
_context.yuntech_in_car_table.Remove(in_car_table);
await _context.SaveChangesAsync();
return NoContent();
}
#endregion
2024-02-04 19:20:00 +08:00
private bool Yuntech_in_car_tableExists(DateTime? id)
{
return (_context.yuntech_in_car_table?.Any(e => e.in_time == id)).GetValueOrDefault();
}
}
}