You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
237 lines
8.6 KiB
C#
237 lines
8.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Haoliang.Core.Services;
|
|
using Haoliang.Models.Production;
|
|
using Haoliang.Models.Device;
|
|
using Haoliang.Models.System;
|
|
|
|
namespace Haoliang.Api.Controllers
|
|
{
|
|
[ApiController]
|
|
[Route("api/v1/[controller]")]
|
|
public class ProductionController : ControllerBase
|
|
{
|
|
private readonly IProductionService _productionService;
|
|
private readonly IAlarmService _alarmService;
|
|
private readonly ILoggingService _loggingService;
|
|
private readonly ISystemConfigService _configService;
|
|
|
|
public ProductionController(
|
|
IProductionService productionService,
|
|
IAlarmService alarmService,
|
|
ILoggingService loggingService,
|
|
ISystemConfigService configService)
|
|
{
|
|
_productionService = productionService;
|
|
_alarmService = alarmService;
|
|
_loggingService = loggingService;
|
|
_configService = configService;
|
|
}
|
|
|
|
[HttpGet]
|
|
public async Task<IActionResult> GetAllProduction([FromQuery] DateTime date)
|
|
{
|
|
try
|
|
{
|
|
if (date == default)
|
|
date = DateTime.Today;
|
|
|
|
var summary = await _productionService.GetProductionSummaryAsync(date);
|
|
return Ok(ApiResponse.Success(summary));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await _loggingService.LogErrorAsync("Failed to get production summary", ex);
|
|
return StatusCode(500, ApiResponse.Error("Failed to get production summary"));
|
|
}
|
|
}
|
|
|
|
[HttpGet("statistics")]
|
|
public async Task<IActionResult> GetProductionStatistics([FromQuery] DateTime date)
|
|
{
|
|
try
|
|
{
|
|
if (date == default)
|
|
date = DateTime.Today;
|
|
|
|
var statistics = await _productionService.GetProductionStatisticsAsync(date);
|
|
return Ok(ApiResponse.Success(statistics));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await _loggingService.LogErrorAsync("Failed to get production statistics", ex);
|
|
return StatusCode(500, ApiResponse.Error("Failed to get production statistics"));
|
|
}
|
|
}
|
|
|
|
[HttpGet("device/{deviceId}")]
|
|
public async Task<IActionResult> GetDeviceProduction(
|
|
int deviceId,
|
|
[FromQuery] DateTime date)
|
|
{
|
|
try
|
|
{
|
|
if (date == default)
|
|
date = DateTime.Today;
|
|
|
|
var production = await _productionService.GetTodayProductionAsync(deviceId);
|
|
return Ok(ApiResponse.Success(production));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await _loggingService.LogErrorAsync($"Failed to get production for device {deviceId}", ex);
|
|
return StatusCode(500, ApiResponse.Error("Failed to get device production"));
|
|
}
|
|
}
|
|
|
|
[HttpGet("device/{deviceId}/statistics")]
|
|
public async Task<IActionResult> GetDeviceProductionStatistics(
|
|
int deviceId,
|
|
[FromQuery] DateTime date)
|
|
{
|
|
try
|
|
{
|
|
if (date == default)
|
|
date = DateTime.Today;
|
|
|
|
var statistics = await _productionService.GetProductionStatisticsAsync(deviceId, date);
|
|
return Ok(ApiResponse.Success(statistics));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await _loggingService.LogErrorAsync($"Failed to get statistics for device {deviceId}", ex);
|
|
return StatusCode(500, ApiResponse.Error("Failed to get device statistics"));
|
|
}
|
|
}
|
|
|
|
[HttpGet("device/{deviceId}/quality-rate")]
|
|
public async Task<IActionResult> GetDeviceQualityRate(
|
|
int deviceId,
|
|
[FromQuery] DateTime date)
|
|
{
|
|
try
|
|
{
|
|
if (date == default)
|
|
date = DateTime.Today;
|
|
|
|
var qualityRate = await _productionService.GetQualityRateAsync(deviceId, date);
|
|
return Ok(ApiResponse.Success(qualityRate));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await _loggingService.LogErrorAsync($"Failed to get quality rate for device {deviceId}", ex);
|
|
return StatusCode(500, ApiResponse.Error("Failed to get quality rate"));
|
|
}
|
|
}
|
|
|
|
[HttpPost("calculate")]
|
|
public async Task<IActionResult> CalculateProduction()
|
|
{
|
|
try
|
|
{
|
|
await _productionService.CalculateAllProductionAsync();
|
|
return Ok(ApiResponse.Success(null, "Production calculation completed"));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await _loggingService.LogErrorAsync("Failed to calculate production", ex);
|
|
return StatusCode(500, ApiResponse.Error("Failed to calculate production"));
|
|
}
|
|
}
|
|
|
|
[HttpPost("device/{deviceId}/calculate")]
|
|
public async Task<IActionResult> CalculateDeviceProduction(int deviceId)
|
|
{
|
|
try
|
|
{
|
|
await _productionService.CalculateProductionAsync(deviceId);
|
|
return Ok(ApiResponse.Success(null, "Device production calculation completed"));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await _loggingService.LogErrorAsync($"Failed to calculate production for device {deviceId}", ex);
|
|
return StatusCode(500, ApiResponse.Error("Failed to calculate device production"));
|
|
}
|
|
}
|
|
|
|
[HttpGet("programs")]
|
|
public async Task<IActionResult> GetProductionPrograms([FromQuery] DateTime date)
|
|
{
|
|
try
|
|
{
|
|
if (date == default)
|
|
date = DateTime.Today;
|
|
|
|
var programs = await _productionService.GetProductionProgramsAsync(date);
|
|
return Ok(ApiResponse.Success(programs));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await _loggingService.LogErrorAsync("Failed to get production programs", ex);
|
|
return StatusCode(500, ApiResponse.Error("Failed to get production programs"));
|
|
}
|
|
}
|
|
|
|
[HttpGet("programs/{programName}")]
|
|
public async Task<IActionResult> GetProgramProduction(
|
|
string programName,
|
|
[FromQuery] DateTime date)
|
|
{
|
|
try
|
|
{
|
|
if (date == default)
|
|
date = DateTime.Today;
|
|
|
|
var programData = await _productionService.GetProgramProductionAsync(programName, date);
|
|
return Ok(ApiResponse.Success(programData));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await _loggingService.LogErrorAsync($"Failed to get program production for {programName}", ex);
|
|
return StatusCode(500, ApiResponse.Error("Failed to get program production"));
|
|
}
|
|
}
|
|
|
|
[HttpGet("export")]
|
|
public async Task<IActionResult> ExportProductionData(
|
|
[FromQuery] DateTime startDate,
|
|
[FromQuery] DateTime endDate)
|
|
{
|
|
try
|
|
{
|
|
if (startDate == default)
|
|
startDate = DateTime.Today.AddDays(-7);
|
|
if (endDate == default)
|
|
endDate = DateTime.Today;
|
|
|
|
var exportData = await _productionService.ExportProductionDataAsync(startDate, endDate);
|
|
|
|
var fileName = $"production_{startDate:yyyy-MM-dd}_{endDate:yyyy-MM-dd}.csv";
|
|
return File(exportData, "text/csv", fileName);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await _loggingService.LogErrorAsync("Failed to export production data", ex);
|
|
return StatusCode(500, ApiResponse.Error("Failed to export production data"));
|
|
}
|
|
}
|
|
|
|
[HttpPost("archive")]
|
|
public async Task<IActionResult> ArchiveProductionData([FromQuery] int daysToKeep = 90)
|
|
{
|
|
try
|
|
{
|
|
await _productionService.ArchiveProductionDataAsync(daysToKeep);
|
|
return Ok(ApiResponse.Success(null, "Production data archived successfully"));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await _loggingService.LogErrorAsync("Failed to archive production data", ex);
|
|
return StatusCode(500, ApiResponse.Error("Failed to archive production data"));
|
|
}
|
|
}
|
|
}
|
|
} |