HealthController.java 7.31 KB
package com.iot.scheduler.controller;

import com.iot.scheduler.service.DevicePullService;
import com.iot.scheduler.service.DeviceSearchService;
import com.iot.scheduler.service.EnergyPullService;
import com.iot.scheduler.service.EnergySearchService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
public class HealthController {

    @Resource
    private DevicePullService devicePullService;
    @Resource
    private DeviceSearchService deviceSearchService;
    @Resource
    private EnergySearchService energySearchService;
    @Resource
    private EnergyPullService energyPullService;

    @GetMapping("/health")
    public String health() throws Exception {
        devicePullService.pullDeviceAndPushToIot();
        return "IoT Scheduler is running...";
    }

    @GetMapping("/device/list")
    public Map<String, Object> deviceList(
            @RequestParam(required = false) String deviceName,
            @RequestParam(required = false) String lampState,
            @RequestParam(defaultValue = "1") Integer pageNo,
            @RequestParam(defaultValue = "10") Integer pageSize) {
        return deviceSearchService.queryDeviceList(deviceName, lampState, pageNo, pageSize);
    }

    @GetMapping("/device/stats")
    public Map<String, Object> deviceStats() {
        return deviceSearchService.queryDeviceStats();
    }

    @GetMapping("/device/lampData")
    public Map<String, Object> lampData(
            @RequestParam String dtuSn,
            @RequestParam String date) {
        return deviceSearchService.queryLampData(dtuSn, date);
    }

    @GetMapping("/device/syncDevUtil")
    public String syncDevUtil() {
        devicePullService.pullDevUtilAndSave();
        return "设备利用率数据同步完成";
    }

    @GetMapping("/device/syncOee")
    public String syncOee() {
        devicePullService.pullOeeAndSave();
        return "OEE时序数据同步完成";
    }

    @GetMapping("/device/oeeStats")
    public Map<String, Object> oeeStats(
            @RequestParam String dtuSn,
            @RequestParam(defaultValue = "day") String type,
            @RequestParam(required = false) String startDate,
            @RequestParam(required = false) String endDate) {
        return deviceSearchService.queryOeeStats(dtuSn, type, startDate, endDate);
    }

    /**
     * OEE时序图分页查询(含稼动率)
     * 查询所有设备在指定日期范围内的OEE时序数据,分页返回(每页最多20条)
     *
     * @param startDate 开始日期 yyyy-MM-dd
     * @param endDate   结束日期 yyyy-MM-dd
     * @param pageNo    页码,默认1
     * @param pageSize  每页条数,最大20,默认20
     */
    @GetMapping("/device/oeeTimeline")
    public Map<String, Object> oeeTimeline(
            @RequestParam String startDate,
            @RequestParam String endDate,
            @RequestParam(defaultValue = "1") Integer pageNo,
            @RequestParam(defaultValue = "20") Integer pageSize) {
        return deviceSearchService.queryOeeTimeline(startDate, endDate, pageNo, pageSize);
    }

    /**
     * 智能灯统计稼动率查询(仪表盘)
     * 支持日/周/月查询,返回总时长、稼动率、当前机台状态、异常排行榜、每设备状态时长
     *
     * @param startDate 开始日期 yyyy-MM-dd (day模式必填)
     * @param endDate   结束日期 yyyy-MM-dd (day模式必填)
     */
    @GetMapping("/device/lampStatistics")
    public Map<String, Object> lampStatistics(
            @RequestParam(required = false) String startDate,
            @RequestParam(required = false) String endDate) {
        return deviceSearchService.queryLampStatistics(startDate, endDate);
    }

    /**
     * 开机率查询(基于 dev_util 表)
     * 灭灯(state=0)=未开机,其他灯=开机,每台设备单独计算,不分页
     *
     * @param startDate 开始日期 yyyy-MM-dd
     * @param endDate   结束日期 yyyy-MM-dd
     */
    @GetMapping("/device/bootRate")
    public Map<String, Object> bootRate(
            @RequestParam String startDate,
            @RequestParam String endDate) {
        return deviceSearchService.queryBootRate(startDate, endDate);
    }

    @GetMapping("/energy/history")
    public void energyHistory() {
        energyPullService.pullEnergyHistoryAndSave();
    }

    /**
     * 分页查询能耗设备信息
     *
     * @param deviceName 设备名称(模糊匹配)
     * @param runStatus  状态(0:离线,1:停机,2:待机,3:运行)
     * @param pageNo     页码,默认1
     * @param pageSize   每页条数,默认10
     */
    @GetMapping("/energy/list")
    public Map<String, Object> energyList(
            @RequestParam(required = false) String deviceName,
            @RequestParam(required = false) String runStatus,
            @RequestParam(defaultValue = "1") Integer pageNo,
            @RequestParam(defaultValue = "10") Integer pageSize) {
        return energySearchService.queryEnergyList(deviceName, runStatus, pageNo, pageSize);
    }

    @GetMapping("/energy/stats")
    public Map<String, Object> energyStats() {
        return energySearchService.queryEnergyStats();
    }

    /**
     * 根据dtuSn查询指定日期的设备时用电量和OEE时序
     * 返回时用电量数组、总用电量、OEE时序、总时长、各状态运行时长和占比
     *
     * @param dtuSn 设备序列号
     * @param date  查询日期 yyyy-MM-dd
     */
    @GetMapping("/energy/detail")
    public Map<String, Object> energyDetail(
            @RequestParam String dtuSn,
            @RequestParam String date) {
        return energySearchService.queryEnergyDetailByDate(dtuSn, date);
    }

    /**
     * 根据dtuSn查询指定设备的运行时长明细
     * type=1(时): 传startDate,获取指定日期的运行时长明细
     * type=2(天): 传startDate和endDate,按日统计
     * type=3(月): 查本年年初到现在,按月统计
     *
     * @param dtuSn    设备序列号
     * @param type     类型:1-时,2-天,3-月
     * @param startDate 开始日期 yyyy-MM-dd (type=1,2必填)
     * @param endDate   结束日期 yyyy-MM-dd (type=2必填)
     */
    @GetMapping("/energy/runtimeDetail")
    public Map<String, Object> energyRuntimeDetail(
            @RequestParam String dtuSn,
            @RequestParam(defaultValue = "1") String type,
            @RequestParam(required = false) String startDate,
            @RequestParam(required = false) String endDate) {
        return energySearchService.queryEnergyRuntimeDetail(dtuSn, type, startDate, endDate);
    }

    /**
     * 查询能耗时序状态 - 分页查询
     * 获取指定日期所有设备的用电量数据,计算稼动率和总用电量
     *
     * @param date     查询日期 yyyy-MM-dd
     * @param pageNo   页码,默认1
     * @param pageSize  每页条数,默认12
     */
    @GetMapping("/energy/timelineStatus")
    public Map<String, Object> energyTimelineStatus(
            @RequestParam String date,
            @RequestParam(defaultValue = "1") Integer pageNo,
            @RequestParam(defaultValue = "12") Integer pageSize) {
        return energySearchService.queryEnergyTimelineStatus(date, pageNo, pageSize);
    }
}