tycg_carviolation_BE/Traffic.Service/Implements/EventService.cs

952 lines
40 KiB
C#

using LiangLiSystem.Services.Helpers;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Omu.ValueInjecter;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Traffic.Data.Models;
using Traffic.Data.ViewModels;
using Traffic.Repository.Infrastructures;
using Traffic.Service.Interfaces;
namespace Traffic.Service.Implements
{
public class EventService : IEventService
{
private readonly IConfiguration _configuration;
private readonly IUnitOfWork _unitOfWork;
private readonly ILogger _logger;
public EventService(IConfiguration configuration, IUnitOfWork unitOfWork, ILogger<EventService> logger)
{
_configuration = configuration;
_unitOfWork = unitOfWork;
_logger = logger;
}
public PageViewModel<IEnumerable<EventSearchByNumberViewModel>> GetEventsByCar(SearchModel searchModel)
{
try
{
var number = $"%{searchModel.Term}%";
var datas = _unitOfWork.EventRepository.GetEventsByCar(number);
var sites = _unitOfWork.SiteInformationRepository.GetSiteInformations();
var eventTypes = _unitOfWork.EventTypeRepository.GetEventTypes();
var count = datas.Count();
int pageCount = count % searchModel.PageSize != 0 ? (count / searchModel.PageSize) + 1 : count / searchModel.PageSize;
switch (searchModel.Order.ToLower())
{
case "id":
default:
datas = searchModel.IsAsc ? datas.OrderBy(x => x.Id) : datas.OrderByDescending(x => x.Id);
break;
case "number":
datas = searchModel.IsAsc ? datas.OrderBy(x => x.Number).ThenBy(x => x.Id) : datas.OrderByDescending(x => x.Number).ThenByDescending(x => x.Id);
break;
case "siteid":
datas = searchModel.IsAsc ? datas.OrderBy(x => x.SiteID).ThenBy(x => x.Id) : datas.OrderByDescending(x => x.SiteID).ThenByDescending(x => x.Id);
break;
case "eventtype":
datas = searchModel.IsAsc ? datas.OrderBy(x => x.EventType).ThenBy(x => x.Id) : datas.OrderByDescending(x => x.EventType).ThenByDescending(x => x.Id);
break;
case "intime":
datas = searchModel.IsAsc ? datas.OrderBy(x => Convert.ToDateTime(x.InTime)).ThenBy(x => x.Id) : datas.OrderByDescending(x => Convert.ToDateTime(x.InTime)).ThenByDescending(x => x.Id);
break;
}
datas = datas.Skip((searchModel.Page - 1) * searchModel.PageSize).Take(searchModel.PageSize);
var result = new List<EventSearchByNumberViewModel>();
foreach (var data in datas)
{
var vm = new EventSearchByNumberViewModel();
vm.Id = data.Id;
vm.Number = data.Number;
vm.InTime = Convert.ToDateTime(data.InTime).ToString("yyyy-MM-dd HH:mm:ss");
vm.SiteName = sites.FirstOrDefault(i => i.SiteID == data.SiteID).SiteName;
vm.EventName = eventTypes.FirstOrDefault(i => i.EventType == sites.FirstOrDefault(i => i.SiteID == data.SiteID).EventType).EventName;
if (data.Punished == "1")
{
vm.Status = "已開單";
}
else if (data.Rejected == "1")
{
vm.Status = "不開單";
}
else if (data.CheckPunish == "1")
{
vm.Status = "開單處理中";
}
else
{
vm.Status = "未處理";
}
result.Add(vm);
}
if (searchModel.Order.ToLower() == "status")
{
result = searchModel.IsAsc ? result.OrderBy(x => x.Status).ThenBy(x => x.Id).ToList() : result.OrderByDescending(x => x.Status).ThenByDescending(x => x.Id).ToList();
}
return new PageViewModel<IEnumerable<EventSearchByNumberViewModel>>
{
RowCount = count,
PageCount = pageCount,
CurrentPage = searchModel.Page,
Data = result,
};
}
catch (Exception ex)
{
_unitOfWork.Rollback();
_logger.LogError(ex.Message);
return new PageViewModel<IEnumerable<EventSearchByNumberViewModel>>();
}
}
public IEnumerable<JoinEventSiteAndUserViewModel> GetEventsByEventType(int userId, string eventType, string startTime, string endTime, string site, string status, string time, string speed)
{
try
{
_logger.LogInformation("GetEventsByEventType Init");
_logger.LogInformation($"GetEventsByEventType userId ={userId}");
_logger.LogInformation($"GetEventsByEventType eventType ={eventType}");
_logger.LogInformation($"GetEventsByEventType startTime ={startTime}");
_logger.LogInformation($"GetEventsByEventType endTime ={endTime}");
_logger.LogInformation($"GetEventsByEventType site ={site}");
var punishCount = Convert.ToInt16(_configuration["EventStatus:Count"]);
var dataCount = _unitOfWork.EventRepository.GetEventByTimeCount(startTime, endTime);
if (dataCount >= punishCount)
{
return null;
}
//異常車牌
var data = _unitOfWork.EventRepository.GetEventByTime(startTime, endTime);
var userSite = _unitOfWork.AccountRepository.GetAccountUserSite(userId);
var sites = new List<SiteInformation>();
foreach (var item in userSite)
{
var sitedata = _unitOfWork.SiteInformationRepository.GetSiteInformationById(item.SiteId);
sites.Add(sitedata);
}
sites = sites.Where(i => i.EventType == eventType).ToList();
data = data.Where(i => sites.Any(j => j.SiteID == i.SiteID));
_logger.LogInformation($"GetEventJoinSiteAndUsers Data.count = {data.Count()}");
if (eventType == "1")
{
data = data.Where(i => Convert.ToDateTime(i.InTime).Hour >= 6);
}
_logger.LogInformation($"GetEventJoinSiteAndUsers Convert.ToDateTime(i.InTime).Hour >= 6 Data.count = {data.Count()}");
var exceptionNumbers = _unitOfWork.EventRepository.GetExceptionNumbers();
data = data.Where(i => ShowThisEvent(exceptionNumbers, i) == true);
if (site != "ALL")
{
data = data.Where(i => i.SiteID == site);
}
if (time != "ALL")
{
if (time == "1")
{
data = data.Where(i => (Convert.ToDateTime(i.OutTime) - Convert.ToDateTime(i.InTime)).TotalSeconds >= 70 && (Convert.ToDateTime(i.OutTime) - Convert.ToDateTime(i.InTime)).TotalSeconds < 190);
}
else if (time == "3")
{
data = data.Where(i => (Convert.ToDateTime(i.OutTime) - Convert.ToDateTime(i.InTime)).TotalSeconds >= 190);
}
}
if (speed != "ALL")
{
data = data.Where(i => Convert.ToDouble(i.Speed) >= Convert.ToDouble(speed));
}
if (status == "未開單")
{
data = data.Where(i => i.Punished == "0" && i.Rejected == "0" && i.CheckPunish == "0" && string.IsNullOrWhiteSpace(i.Ps));
}
else if (status == "已退回")
{
data = data.Where(i => i.Rejected == "1");
}
else if (status == "裁決中")
{
data = data.Where(i => i.CheckPunish == "1");
}
else if (status == "已開罰")
{
data = data.Where(i => i.Punished == "1");
}
else if (status == "不開單")
{
data = data.Where(i => i.Punished == "0" && i.Rejected == "0" && i.CheckPunish == "0" && !string.IsNullOrWhiteSpace(i.Ps));
}
_logger.LogInformation($"GetEventJoinSiteAndUsers All condition Data.count = {data.Count()}");
var cars = _unitOfWork.EventRepository.GetVehicleType();
var eventTypes = _unitOfWork.EventTypeRepository.GetEventTypes();
var result = new List<JoinEventSiteAndUserViewModel>();
foreach (var x in data.ToList())
{
var sitedata = sites.FirstOrDefault(i => i.SiteID == x.SiteID);
var vm = new JoinEventSiteAndUserViewModel
{
Id = x.Id,
UserID = userId.ToString(),
SiteId = x.SiteID,
SiteName = sitedata.SiteName,
Account = x.Account,
Area = sitedata.Area,
County = sitedata.County,
EventName = eventTypes.Any(i => i.EventType == x.EventType) ? eventTypes.FirstOrDefault(i => i.EventType == x.EventType).EventName : "",
CheckPunish = x.CheckPunish,
HandlingTime = x.HandlingTime,
Laws = GetLawsCodes(sitedata.Laws),
UploadTime = x.UploadTime,
VehicleName = cars.Any(i => i.VehicleType == x.VehicleType) ? cars.FirstOrDefault(i => i.VehicleType == x.VehicleType).VehicleName : "",
Ps = x.Ps,
InTime = x.InTime,
OutTime = x.OutTime,
Punished = x.Punished,
Rejected = x.Rejected,
IMGPath1 = x.IMGPath1.Replace("carviolation.tycg.gov.tw:8443", "172.16.1.49:8443"),
//IMGPath2 = x.IMGPath2,
//IMGPath3 = x.IMGPath3,
//IMGPath4 = x.IMGPath4,
//IMGPath5 = x.IMGPath5,
//IMGPath6 = x.IMGPath6,
VideoPath1 = x.VideoPath1.Replace("carviolation.tycg.gov.tw:8443", "172.16.1.49:8443"),
//VideoPath2 = x.VideoPath2,
IMGList = GetFiles(x.IMGPath1.Replace("carviolation.tycg.gov.tw:8443", "172.16.1.49:8443"), _configuration["EventStatus:ImagePath"], x.SiteID, x.EventID),
VideoList = GetFiles(x.VideoPath1.Replace("carviolation.tycg.gov.tw:8443", "172.16.1.49:8443"), _configuration["EventStatus:VideoPath"], x.SiteID, x.EventID),
Number = x.Number,
AlarmTime = x.AlarmTime,
Channel = x.Channel,
CompanyCode = x.CompanyCode,
Distance = x.Distance,
EventID = x.EventID,
EventType = x.EventType,
IsStay = x.IsStay,
LimitTon = x.LimitTon,
LPRTime = x.LPRTime,
//PlateNumber = x.PlateNumber,
Slot = x.Slot,
Speed = x.Speed,
Ton = x.Ton,
TotalPassTime = x.TotalPassTime,
Unsure = x.Unsure,
VehicleType = x.VehicleType,
Status = GetStatus(x)
};
result.Add(vm);
}
return result;
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
return new List<JoinEventSiteAndUserViewModel>();
}
}
private List<LawsCodes> GetLawsCodes(string law)
{
try
{
if (string.IsNullOrWhiteSpace(law))
{
return null;
}
var codes = new List<LawsCodes>();
foreach (var item in law.Split(','))
{
var key = new LawsCodes();
key.LawsCode = item;
codes.Add(key);
}
return codes;
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
return null;
}
}
private static bool ShowThisEvent(IEnumerable<ExceptionNumber> exceptionNumber, Event joinEventSiteAndUser)
{
var date = Convert.ToDateTime(joinEventSiteAndUser.InTime).ToString("yyyy-MM-dd");
var result = exceptionNumber.Where(i => i.Number == joinEventSiteAndUser.Number && date == i.Date);
if (result.Any())
{
return false;
}
else
{
return true;
}
}
public List<string> GetFiles(string url, string path, string siteID, string eventID)
{
try
{
if (_configuration["Mode:IsTest"] == "True")
{
var result = new List<string>
{
url + "/event1.jpg",
url + "/event2.jpg",
url + "/event3.jpg",
url + "/event4.jpg",
url + "/event5.jpg",
url + "/event6.jpg"
};
return result;
}
else
{
//取得圖片的路徑
var folder = new DirectoryInfo($"{path}/{siteID}/{eventID}");
//取得圖片路徑底下有多少 Image
var files = folder.GetFiles();
var result = new List<string>();
foreach (var item in files)
{
result.Add(url + "/" + item.Name);
}
return result;
}
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
return null;
}
}
public PageViewModel<IEnumerable<JoinEventSiteAndUserViewModel>> GetEventByEventType(int userId, string eventType, SearchModel searchModel)
{
throw new NotImplementedException();
}
private static string GetStatus(Event data)
{
if (data.Punished == "1")
{
return "已開罰";
}
else if (data.Rejected == "1")
{
return "已退回";
}
else if (data.CheckPunish == "1")
{
return "裁決中";
}
else if (data.Punished == "0" && data.Rejected == "0" && data.CheckPunish == "0" && !string.IsNullOrWhiteSpace(data.Ps))
{
return "不開單";
}
else
{
return "未開單";
}
}
public PageViewModel<IEnumerable<EventViewModel>> GetEventBySites(string siteId, SearchModel searchModel)
{
try
{
var count = _unitOfWork.EventRepository.GetEventBySitesCount(siteId, searchModel.Term);
var datas = _unitOfWork.EventRepository.GetEventBySites(siteId, searchModel.Page, searchModel.PageSize);
var cars = _unitOfWork.EventRepository.GetVehicleType();
int pageCount = count % searchModel.PageSize != 0 ? (count / searchModel.PageSize) + 1 : count / searchModel.PageSize;
switch (searchModel.Order.ToLower())
{
case "id":
default:
datas = searchModel.IsAsc ? datas.OrderBy(x => x.Id) : datas.OrderByDescending(x => x.Id);
break;
case "siteid":
datas = searchModel.IsAsc ? datas.OrderBy(x => x.SiteID).ThenBy(x => x.Id) : datas.OrderByDescending(x => x.SiteID).ThenByDescending(x => x.Id);
break;
}
datas = datas.Skip((searchModel.Page - 1) * searchModel.PageSize).Take(searchModel.PageSize);
var result = new List<EventViewModel>();
foreach (var data in datas)
{
var vm = new EventViewModel();
vm.InjectFrom(data);
vm.Id = data.Id;
vm.VehicleName = cars.FirstOrDefault(x => x.VehicleType == vm.VehicleType).VehicleName;
result.Add(vm);
}
return new PageViewModel<IEnumerable<EventViewModel>>
{
RowCount = count,
PageCount = pageCount,
CurrentPage = searchModel.Page,
Data = result,
};
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
return new PageViewModel<IEnumerable<EventViewModel>>();
}
}
public EventViewModel GetEventById(int id)
{
try
{
var data = _unitOfWork.EventRepository.GetEventById(id);
var cars = _unitOfWork.EventRepository.GetVehicleTypebyType(data.VehicleType);
if (data != null)
{
var result = new EventViewModel();
result.InjectFrom(data);
result.Id = data.Id;
result.VehicleName = cars.VehicleName;
return result;
}
else
{
return null;
}
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
return null;
}
}
public int GetThisYearEventsCount(string account)
{
try
{
var thisYearStart = $"{DateTime.Now.Year}-01-01 00:00:00";
var thisYearEnd = $"{DateTime.Now.Year}-12-31 23:59:59";
var count = _unitOfWork.EventRepository.GetThisYearEventsCount(thisYearStart, thisYearEnd, account);
return count;
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
return 0;
}
}
public int GetThisMonthEventsCount(string account)
{
try
{
var thisMonthStart = $"{DateTime.Now.AddDays(-DateTime.Now.Day + 1).ToString("yyyy-MM-dd")} 00:00:00";
var thisMonthEnd = $"{DateTime.Now.AddMonths(1).AddDays(-DateTime.Now.AddMonths(1).Day).ToString("yyyy-MM-dd")} 23:59:59";
var count = _unitOfWork.EventRepository.GetThisMonthEventsCount(thisMonthStart, thisMonthEnd, account);
return count;
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
return 0;
}
}
public EventCountViewModel GetEventsCount(string startDatetime, string endDatetime)
{
try
{
var datas = _unitOfWork.EventRepository.GetEvents(startDatetime, endDatetime);
var TotalCount = datas.Count();
var PunishedCount = datas.Where(i => i.Punished == "1").Count();
var CheckPunishedCount = datas.Where(i => i.CheckPunish == "1").Count();
var IsStayCount = datas.Where(i => i.IsStay == "1").Count();
var UnsureCount = datas.Where(i => i.Unsure == "1").Count();
var RejectedCount = datas.Where(i => i.Rejected == "1").Count();
var NoStatusCount = datas.
Where(i => i.Rejected == "0" && i.Unsure == "0" && i.IsStay == "0" && i.CheckPunish == "0" && i.Punished == "0").Count();
var NoPunishedCount = datas.Where(i => i.Rejected == "0" && i.Unsure == "0" && i.IsStay == "0" && i.CheckPunish == "0" && i.Punished == "0" && !string.IsNullOrWhiteSpace(i.Ps)).Count();
var result = new EventCountViewModel()
{
TotalCount = TotalCount,
CheckPunishedCount = CheckPunishedCount,
IsStayCount = IsStayCount,
PunishedCount = PunishedCount,
UnsureCount = UnsureCount,
RejectedCount = RejectedCount,
NoStatusCount = NoStatusCount,
NoPunishedCount = NoPunishedCount
};
return result;
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
return new EventCountViewModel();
}
}
public TradeResultModel InsertEvent(EventViewModel viewModel)
{
try
{
var data = new Event();
data.InjectFrom(viewModel);
var result = _unitOfWork.EventRepository.InsertEvent(data);
_unitOfWork.Complete();
return new TradeResultModel { Success = result, Message = result ? "新增成功" : "新增失敗" };
}
catch (Exception ex)
{
_unitOfWork.Rollback();
_logger.LogError(ex.Message);
return new TradeResultModel() { Success = false, Message = ex.ToString() };
}
}
public TradeResultModel UpdatEvent(int id, EventViewModel viewModel)
{
try
{
var data = new Event();
data.InjectFrom(viewModel);
data.Id = id;
var result = _unitOfWork.EventRepository.UpdateEvent(data);
_unitOfWork.Complete();
return new TradeResultModel { Success = result, Message = result ? "修改成功" : "修改失敗" };
}
catch (Exception ex)
{
_unitOfWork.Rollback();
_logger.LogError(ex.Message);
return new TradeResultModel() { Success = false, Message = ex.ToString() };
}
}
public TradeResultModel UpdatEventCheckPunish(string account, int eventId, string checkPunish, string law)
{
try
{
var data = _unitOfWork.EventRepository.GetEventById(eventId);
if (data == null)
{
return new TradeResultModel { Success = false, Message = "查無此案件" };
}
if (data.Rejected == "1")
{
return new TradeResultModel { Success = false, Message = "此案件的狀態為不開罰" };
}
if (data.Punished == "1")
{
return new TradeResultModel { Success = false, Message = "此案件的狀態為已開罰" };
}
if (data.CheckPunish == "1")
{
if (checkPunish == "1")
{
return new TradeResultModel { Success = false, Message = "此案件的狀態為等待開罰中" };
}
}
if (checkPunish == "0")
{
account = string.Empty;
}
var site = _unitOfWork.SiteInformationRepository.GetSiteInformationBySiteId(data.SiteID);
var eventName = _unitOfWork.EventTypeRepository.GetEventTypeByEventType(site.EventType).EventName;
var vehicleName = _unitOfWork.EventRepository.GetVehicleTypebyType(data.VehicleType).VehicleName;
var user = _unitOfWork.AccountRepository.GetAccountUserByAccount(account);
var organization = _unitOfWork.PoliceStationRepository.GetPoliceStationById(user.PoliceStationId).StationName;
//取得圖片的路徑
var imageFolder = new DirectoryInfo($"{_configuration["EventStatus:ImagePath"]}/{site.SiteID}/{data.EventID}");
//取得圖片路徑底下有多少 Image
var imageFiles = imageFolder.GetFiles();
//建立一個此事件的資料夾在Upload的資料夾裡
var folder = $"{site.SiteID}_{data.EventID}_{data.Number}";
DirectoryInfo uploadFolder = Directory.CreateDirectory(_configuration["EventStatus:Upload"] + folder);
//將Image路徑的資料複製到Upload的資料夾
var images = new List<string>();
foreach (var file in imageFiles)
{
images.Add(file.Name);
File.Copy(imageFolder.FullName + "\\" + file.Name, uploadFolder.FullName + "\\" + file.Name, true);
}
//各個EventType分別產生不同資料夾
switch (site.EventType)
{
case "1":
var json = new JsonCheckPunishEventType1
{
area = site.Area,
county = site.County,
eventID = data.EventID,
siteName = site.SiteName,
alarmTime = Util.GetDateTimeNow(data.AlarmTime),
eventName = eventName,
inTime = Util.GetDateTimeNow(data.InTime),
handlingTime = Util.GetDateTimeNow(data.HandlingTime),
sn = data.Id.ToString(),
plate = data.Number,
outTime = Util.GetDateTimeNow(data.OutTime),
vehicleName = vehicleName,
organization = organization,
policeID = user.UserName,
punishID = law,
images = images,
};
CreateCheckPunishEventTypeJson(_configuration["EventStatus:Upload"], folder, data.SiteID, data.EventID, json);
break;
case "2":
var json2 = new JsonCheckPunishEventType2
{
area = site.Area,
county = site.County,
eventID = data.EventID,
siteName = site.SiteName,
eventName = eventName,
inTime = Util.GetDateTimeNow(data.InTime),
handlingTime = Util.GetDateTimeNow(data.HandlingTime),
sn = data.Id.ToString(),
plate = data.Number,
outTime = Util.GetDateTimeNow(data.OutTime),
vehicleName = vehicleName,
organization = organization,
policeID = user.UserName,
punishID = law,
images = images,
distance = data.Distance,
speed = data.Speed,
totalPassTime = data.TotalPassTime
};
CreateCheckPunishEventTypeJson(_configuration["EventStatus:Upload"], folder, data.SiteID, data.EventID, json2);
break;
case "3":
var json3 = new JsonCheckPunishEventType3
{
area = site.Area,
county = site.County,
eventID = data.EventID,
siteName = site.SiteName,
alarmTime = Util.GetDateTimeNow(data.AlarmTime),
eventName = eventName,
handlingTime = Util.GetDateTimeNow(data.HandlingTime),
sn = data.Id.ToString(),
plate = data.Number,
vehicleName = vehicleName,
organization = organization,
policeID = user.UserName,
punishID = law,
images = images,
};
CreateCheckPunishEventTypeJson(_configuration["EventStatus:Upload"], folder, data.SiteID, data.EventID, json3);
break;
case "4":
var json4 = new JsonCheckPunishEventType4
{
area = site.Area,
county = site.County,
eventID = data.EventID,
siteName = site.SiteName,
alarmTime = Util.GetDateTimeNow(data.AlarmTime),
eventName = eventName,
handlingTime = Util.GetDateTimeNow(data.HandlingTime),
sn = data.Id.ToString(),
plate = data.Number,
vehicleName = vehicleName,
organization = organization,
policeID = user.UserName,
punishID = law,
images = images,
};
CreateCheckPunishEventTypeJson(_configuration["EventStatus:Upload"], folder, data.SiteID, data.EventID, json4);
break;
case "6":
var json6 = new JsonCheckPunishEventType6
{
area = site.Area,
county = site.County,
eventID = data.EventID,
siteName = site.SiteName,
alarmTime = Util.GetDateTimeNow(data.AlarmTime),
eventName = eventName,
handlingTime = Util.GetDateTimeNow(data.HandlingTime),
sn = data.Id.ToString(),
plate = data.Number,
vehicleName = vehicleName,
organization = organization,
policeID = user.UserName,
punishID = law,
images = images,
ton = data.Ton,
};
CreateCheckPunishEventTypeJson(_configuration["EventStatus:Upload"], folder, data.SiteID, data.EventID, json6);
break;
}
var result = _unitOfWork.EventRepository.UpdatEventCheckPunish(account, eventId, checkPunish, law);
_unitOfWork.Complete();
return new TradeResultModel { Success = result, Message = result ? "修改成功" : "修改失敗" };
}
catch (Exception ex)
{
_unitOfWork.Rollback();
_logger.LogError(ex.Message);
return new TradeResultModel() { Success = false, Message = ex.ToString() };
}
}
public TradeResultModel UpdatEventCheckPunishList(string account, List<int> eventIds, string checkPunish, string law)
{
try
{
bool IsSuccess = true;
foreach (var eventId in eventIds)
{
var result = UpdatEventCheckPunish(account, eventId, checkPunish, law).Success;
if (result == false)
{
IsSuccess = false;
}
}
return new TradeResultModel { Success = IsSuccess, Message = IsSuccess ? "修改成功" : "修改失敗" };
}
catch (Exception ex)
{
_unitOfWork.Rollback();
_logger.LogError(ex.Message);
return new TradeResultModel() { Success = false, Message = ex.ToString() };
}
}
public TradeResultModel UpdatEventNoPunish(string account, int eventId, string reason)
{
try
{
var data = _unitOfWork.EventRepository.GetEventById(eventId);
if (data == null)
{
return new TradeResultModel { Success = false, Message = "查無此案件" };
}
if (data.CheckPunish != "0")
{
return new TradeResultModel { Success = false, Message = "此案件的狀態為等待開罰中" };
}
if (data.Rejected != "0")
{
return new TradeResultModel { Success = false, Message = "此案件的狀態已經為不開罰" };
}
if (data.Punished != "0")
{
return new TradeResultModel { Success = false, Message = "此案件的狀態為已開罰" };
}
var result = _unitOfWork.EventRepository.UpdatEventNoPunish(account, eventId, reason);
_unitOfWork.Complete();
return new TradeResultModel { Success = result, Message = result ? "修改成功" : "修改失敗" };
}
catch (Exception ex)
{
_unitOfWork.Rollback();
_logger.LogError(ex.Message);
return new TradeResultModel() { Success = false, Message = ex.ToString() };
}
}
public TradeResultModel UpdatEventCancel(string account, int id)
{
try
{
var data = _unitOfWork.EventRepository.GetEventById(id);
var site = _unitOfWork.SiteInformationRepository.GetSiteInformationBySiteId(data.SiteID);
var eventType = _unitOfWork.EventTypeRepository.GetEventTypeByEventType(site.EventType);
var vichle = _unitOfWork.EventRepository.GetVehicleTypebyType(data.VehicleType);
if (data == null)
{
return new TradeResultModel { Success = false, Message = "查無此案件" };
}
string siteId = data.SiteID;
JsonCancelEvent jsonCancelEvent = new JsonCancelEvent
{
plate = data.Number,
county = site.County,
action = "取消開單",
area = site.Area,
siteName = site.SiteName,
eventID = data.EventID,
policeID = "取消開單測試",
eventName = eventType.EventName,
handlingTime = Convert.ToDateTime(data.HandlingTime).ToString("yyyy-MM-dd HH:mm:ss"),
organization = site.Area,
vehicleName = vichle.VehicleName,
sn = data.Id.ToString(),
};
CreateCancelJson(_configuration["EventStatus:Cancel"], siteId, jsonCancelEvent);
return new TradeResultModel { Success = true, Message = "成功取消開單" };
}
catch (Exception ex)
{
_unitOfWork.Rollback();
_logger.LogError(ex.Message);
return new TradeResultModel() { Success = false, Message = ex.ToString() };
}
}
private static void CreateCheckPunishEventTypeJson(string path, string folder, string siteId, string eventID, object jsonCheckPunishEvent)
{
string fileName = $"{siteId}_{eventID}.json";
path = path + folder + "\\" + fileName;
string Text = JsonConvert.SerializeObject(jsonCheckPunishEvent);
using (FileStream fs = File.Create(path))
{
byte[] info = new UTF8Encoding(true).GetBytes(Text);
fs.Write(info, 0, info.Length);
}
}
private static void CreateCancelJson(string path, string siteId, JsonCancelEvent jsonCancelEvent)
{
string fileName = $"{siteId}_{jsonCancelEvent.eventID}_{jsonCancelEvent.plate}.json";
path = path + fileName;
string Text = JsonConvert.SerializeObject(jsonCancelEvent);
using (FileStream fs = File.Create(path))
{
byte[] info = new UTF8Encoding(true).GetBytes(Text);
fs.Write(info, 0, info.Length);
}
}
public TradeResultModel UpdatEventVehicleType(int id, string vehicleType)
{
try
{
var result = _unitOfWork.EventRepository.UpdateEventVehicleType(id, vehicleType);
_unitOfWork.Complete();
return new TradeResultModel { Success = result, Message = result ? "修改成功" : "修改失敗" };
}
catch (Exception ex)
{
_unitOfWork.Rollback();
_logger.LogError(ex.Message);
return new TradeResultModel() { Success = false, Message = ex.ToString() };
}
}
public TradeResultModel UpdatEventVehicleNumber(int id, string vehicleNumber)
{
try
{
var result = _unitOfWork.EventRepository.UpdateEventVehicleNumber(id, vehicleNumber);
_unitOfWork.Complete();
return new TradeResultModel { Success = result, Message = result ? "修改成功" : "修改失敗" };
}
catch (Exception ex)
{
_unitOfWork.Rollback();
_logger.LogError(ex.Message);
return new TradeResultModel() { Success = false, Message = ex.ToString() };
}
}
public TradeResultModel UpdatEventVehicle(int id, string vehicleType, string vehicleNumber)
{
try
{
var result = _unitOfWork.EventRepository.UpdateEventVehicle(id, vehicleType, vehicleNumber);
_unitOfWork.Complete();
return new TradeResultModel { Success = result, Message = result ? "修改成功" : "修改失敗" };
}
catch (Exception ex)
{
_unitOfWork.Rollback();
_logger.LogError(ex.Message);
return new TradeResultModel() { Success = false, Message = ex.ToString() };
}
}
public TradeResultModel DeleteEvent(int id)
{
try
{
var result = _unitOfWork.EventRepository.DeleteEvent(id);
_unitOfWork.Complete();
return new TradeResultModel { Success = result, Message = result ? "刪除成功" : "刪除失敗" };
}
catch (Exception ex)
{
_unitOfWork.Rollback();
_logger.LogError(ex.Message);
return new TradeResultModel() { Success = false, Message = ex.ToString() };
}
}
public IEnumerable<VehicleTypeViewModel> GetVehicleTypes()
{
try
{
var datas = _unitOfWork.EventRepository.GetVehicleType();
var vms = new List<VehicleTypeViewModel>();
foreach (var data in datas)
{
var vm = new VehicleTypeViewModel();
vm.InjectFrom(data);
vms.Add(vm);
}
return vms;
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
return null;
}
}
}
}