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.
418 lines
13 KiB
C#
418 lines
13 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Cors;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Haoliang.Models.Device;
|
|
using Haoliang.Data.Repositories;
|
|
|
|
namespace Haoliang.Api.Controllers
|
|
{
|
|
[Route("api/v1/devices")]
|
|
[ApiController]
|
|
[EnableCors("AllowAll")]
|
|
public class DeviceController : ControllerBase
|
|
{
|
|
private readonly DeviceRepository _deviceRepository;
|
|
private readonly DeviceStatusRepository _statusRepository;
|
|
|
|
public DeviceController(DeviceRepository deviceRepository, DeviceStatusRepository statusRepository)
|
|
{
|
|
_deviceRepository = deviceRepository;
|
|
_statusRepository = statusRepository;
|
|
}
|
|
|
|
[HttpGet]
|
|
public IActionResult GetAllDevices()
|
|
{
|
|
try
|
|
{
|
|
var devices = _deviceRepository.GetAllDevices();
|
|
return Ok(new
|
|
{
|
|
success = true,
|
|
data = devices.Select(d => new
|
|
{
|
|
d.Id,
|
|
d.DeviceCode,
|
|
d.DeviceName,
|
|
d.IPAddress,
|
|
d.IsOnline,
|
|
d.IsAvailable,
|
|
d.LastCollectionTime,
|
|
d.CreatedAt,
|
|
d.UpdatedAt
|
|
}),
|
|
message = "获取成功",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return StatusCode(500, new
|
|
{
|
|
success = false,
|
|
message = $"获取设备列表失败: {ex.Message}",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
}
|
|
|
|
[HttpGet("{id}")]
|
|
public IActionResult GetDevice(int id)
|
|
{
|
|
try
|
|
{
|
|
var device = _deviceRepository.GetDeviceById(id);
|
|
if (device == null)
|
|
{
|
|
return NotFound(new
|
|
{
|
|
success = false,
|
|
message = "设备不存在",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
|
|
return Ok(new
|
|
{
|
|
success = true,
|
|
data = device,
|
|
message = "获取成功",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return StatusCode(500, new
|
|
{
|
|
success = false,
|
|
message = $"获取设备失败: {ex.Message}",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
}
|
|
|
|
[HttpPost]
|
|
public IActionResult CreateDevice([FromBody] CNCDevice device)
|
|
{
|
|
try
|
|
{
|
|
// 验证设备编号唯一性
|
|
var existingDevice = _deviceRepository.GetDeviceByCode(device.DeviceCode);
|
|
if (existingDevice != null)
|
|
{
|
|
return BadRequest(new
|
|
{
|
|
success = false,
|
|
message = "设备编号已存在",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
|
|
device.CreatedAt = DateTime.Now;
|
|
device.UpdatedAt = DateTime.Now;
|
|
var createdDevice = _deviceRepository.CreateDevice(device);
|
|
return Ok(new
|
|
{
|
|
success = true,
|
|
data = createdDevice,
|
|
message = "创建成功",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return StatusCode(500, new
|
|
{
|
|
success = false,
|
|
message = $"创建设备失败: {ex.Message}",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
}
|
|
|
|
[HttpPut("{id}")]
|
|
public IActionResult UpdateDevice(int id, [FromBody] CNCDevice device)
|
|
{
|
|
try
|
|
{
|
|
var existingDevice = _deviceRepository.GetDeviceById(id);
|
|
if (existingDevice == null)
|
|
{
|
|
return NotFound(new
|
|
{
|
|
success = false,
|
|
message = "设备不存在",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
|
|
device.Id = id;
|
|
device.UpdatedAt = DateTime.Now;
|
|
var updatedDevice = _deviceRepository.UpdateDevice(device);
|
|
return Ok(new
|
|
{
|
|
success = true,
|
|
data = updatedDevice,
|
|
message = "更新成功",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return StatusCode(500, new
|
|
{
|
|
success = false,
|
|
message = $"更新设备失败: {ex.Message}",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
}
|
|
|
|
[HttpDelete("{id}")]
|
|
public IActionResult DeleteDevice(int id)
|
|
{
|
|
try
|
|
{
|
|
var device = _deviceRepository.GetDeviceById(id);
|
|
if (device == null)
|
|
{
|
|
return NotFound(new
|
|
{
|
|
success = false,
|
|
message = "设备不存在",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
|
|
_deviceRepository.DeleteDevice(id);
|
|
return Ok(new
|
|
{
|
|
success = true,
|
|
message = "删除成功",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return StatusCode(500, new
|
|
{
|
|
success = false,
|
|
message = $"删除设备失败: {ex.Message}",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
}
|
|
|
|
[HttpGet("{id}/status")]
|
|
public IActionResult GetDeviceStatus(int id)
|
|
{
|
|
try
|
|
{
|
|
var device = _deviceRepository.GetDeviceById(id);
|
|
if (device == null)
|
|
{
|
|
return NotFound(new
|
|
{
|
|
success = false,
|
|
message = "设备不存在",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
|
|
var status = _statusRepository.GetLatestDeviceStatus(id);
|
|
return Ok(new
|
|
{
|
|
success = true,
|
|
data = new
|
|
{
|
|
device.Id,
|
|
device.DeviceCode,
|
|
device.DeviceName,
|
|
device.IsOnline,
|
|
device.IsAvailable,
|
|
Status = status?.Status ?? "未知",
|
|
IsRunning = status?.IsRunning ?? false,
|
|
NCProgram = status?.NCProgram,
|
|
CumulativeCount = status?.CumulativeCount ?? 0,
|
|
OperatingMode = status?.OperatingMode,
|
|
RecordTime = status?.RecordTime,
|
|
LastCollectionTime = device.LastCollectionTime
|
|
},
|
|
message = "获取成功",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return StatusCode(500, new
|
|
{
|
|
success = false,
|
|
message = $"获取设备状态失败: {ex.Message}",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
}
|
|
|
|
[HttpGet("{id}/status-history")]
|
|
public IActionResult GetDeviceStatusHistory(int id, DateTime? startTime = null, DateTime? endTime = null)
|
|
{
|
|
try
|
|
{
|
|
var statuses = _statusRepository.GetDeviceStatuses(id, startTime, endTime);
|
|
return Ok(new
|
|
{
|
|
success = true,
|
|
data = statuses.Select(s => new
|
|
{
|
|
s.Id,
|
|
s.DeviceId,
|
|
s.Status,
|
|
s.IsRunning,
|
|
s.NCProgram,
|
|
s.CumulativeCount,
|
|
s.OperatingMode,
|
|
s.RecordTime
|
|
}),
|
|
message = "获取成功",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return StatusCode(500, new
|
|
{
|
|
success = false,
|
|
message = $"获取设备状态历史失败: {ex.Message}",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
}
|
|
|
|
[HttpGet("online")]
|
|
public IActionResult GetOnlineDevices()
|
|
{
|
|
try
|
|
{
|
|
var devices = _deviceRepository.GetOnlineDevices();
|
|
return Ok(new
|
|
{
|
|
success = true,
|
|
data = devices,
|
|
message = "获取成功",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return StatusCode(500, new
|
|
{
|
|
success = false,
|
|
message = $"获取在线设备失败: {ex.Message}",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
}
|
|
|
|
[HttpGet("available")]
|
|
public IActionResult GetAvailableDevices()
|
|
{
|
|
try
|
|
{
|
|
var devices = _deviceRepository.GetAvailableDevices();
|
|
return Ok(new
|
|
{
|
|
success = true,
|
|
data = devices,
|
|
message = "获取成功",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return StatusCode(500, new
|
|
{
|
|
success = false,
|
|
message = $"获取可用设备失败: {ex.Message}",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
}
|
|
|
|
[HttpPost("{id}/toggle-status")]
|
|
public IActionResult ToggleDeviceStatus(int id, [FromBody] bool isAvailable)
|
|
{
|
|
try
|
|
{
|
|
var device = _deviceRepository.GetDeviceById(id);
|
|
if (device == null)
|
|
{
|
|
return NotFound(new
|
|
{
|
|
success = false,
|
|
message = "设备不存在",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
|
|
device.IsAvailable = isAvailable;
|
|
device.UpdatedAt = DateTime.Now;
|
|
var updatedDevice = _deviceRepository.UpdateDevice(device);
|
|
return Ok(new
|
|
{
|
|
success = true,
|
|
data = updatedDevice,
|
|
message = $"设备状态已更新为{(isAvailable ? "可用" : "不可用")}",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return StatusCode(500, new
|
|
{
|
|
success = false,
|
|
message = $"更新设备状态失败: {ex.Message}",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
}
|
|
|
|
[HttpPost("{id}/collect")]
|
|
public IActionResult TriggerCollection(int id)
|
|
{
|
|
try
|
|
{
|
|
var device = _deviceRepository.GetDeviceById(id);
|
|
if (device == null)
|
|
{
|
|
return NotFound(new
|
|
{
|
|
success = false,
|
|
message = "设备不存在",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
|
|
// 这里应该触发数据采集逻辑
|
|
// 简化实现,返回成功响应
|
|
return Ok(new
|
|
{
|
|
success = true,
|
|
message = "采集任务已触发",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return StatusCode(500, new
|
|
{
|
|
success = false,
|
|
message = $"触发采集任务失败: {ex.Message}",
|
|
timestamp = DateTime.Now
|
|
});
|
|
}
|
|
}
|
|
}
|
|
} |