Pu Zhibing
3 天以前 49f98d682437c5d91fa07a72bdc3cb45c0600f82
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TScreenContentController.java
New file
@@ -0,0 +1,189 @@
package com.ruoyi.other.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.other.api.domain.TNotice;
import com.ruoyi.other.api.domain.TScreenContent;
import com.ruoyi.other.api.domain.TSystemConfiguration;
import com.ruoyi.other.api.dto.NoticeQueryDto;
import com.ruoyi.other.service.TNoticeService;
import com.ruoyi.other.service.TScreenContentService;
import com.ruoyi.other.service.TSystemConfigurationService;
import com.ruoyi.other.util.EnergyRefreshService;
import com.ruoyi.other.vo.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Arrays;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author huliguo
 * @since 2025/5/23
 */
@RestController
@RequestMapping("/t_screen_content")
public class TScreenContentController {
    @Resource
    private TScreenContentService screenContentService;
    @Resource
    private EnergyRefreshService energyRefreshService;
    @Resource
    private TSystemConfigurationService systemConfigurationService;
    /**
     * 顶部-累计电量
     */
    @ApiOperation(tags = {"顶部-累计电量"},value = "充电桩数据大屏")
    @GetMapping(value = "/top")
    public AjaxResult<ScreenTopVO> top(@RequestParam("siteIds") List<Integer> siteIds) {
        return AjaxResult.success(screenContentService.top(siteIds));
    }
    /**
     * 光伏发电和消纳  这里的绿电是调后台大屏内容管理的
     */
    @ApiOperation(tags = {"光伏发电和消纳"},value = "充电桩数据大屏")
    @GetMapping(value = "/photovoltaicAndConsumption")
    public AjaxResult<PhotovoltaicAndConsumptionVO> photovoltaicAndConsumption() {
        //需调用接口 获取光伏发电量
        List<Integer> siteIds= Arrays.asList(25,26);
        PhotovoltaicAndConsumptionVO vo = new PhotovoltaicAndConsumptionVO();
        List<TScreenContent> list = screenContentService.list(new LambdaQueryWrapper<TScreenContent>().in(TScreenContent::getSiteId, siteIds));
        if(list==null|| list.isEmpty()){
            return AjaxResult.success(vo);
        }
        vo.setGreenElectricityToday(list.get(0).getGreenElectricityToday());
        list.remove(0);
        list.forEach(x->{
            vo.setGreenElectricityToday(vo.getGreenElectricityToday().add(x.getGreenElectricityToday()));
        });
        TSystemConfiguration sysConfig = systemConfigurationService.getOne(new LambdaQueryWrapper<TSystemConfiguration>()
                .eq(TSystemConfiguration::getType,4));
        BigDecimal refreshValueOne = new BigDecimal(sysConfig.getContent());
        vo.setTodayGenerateElectricity(refreshValueOne);
        vo.setGreenElectricityToday(refreshValueOne.multiply(new BigDecimal("0.94")).setScale(2, RoundingMode.HALF_UP));
        return AjaxResult.success(vo);
    }
    /**
     * 累计减排数据
     */
    @ApiOperation(tags = {"减排数据"},value = "充电桩数据大屏")
    @GetMapping(value = "/emissionReduction")
    public AjaxResult<EmissionReductionVO> emissionReduction (@RequestParam("siteIds") List<Integer> siteIds) {
        return AjaxResult.success( screenContentService.emissionReduction(siteIds));
    }
    /**
     * 光伏发电实时情况
     */
    @ApiOperation(tags = {"光伏发电实时情况"},value = "充电桩数据大屏")
    @GetMapping(value = "/photovoltaicPowerGeneration")
    public AjaxResult<PhotovoltaicPowerGenerationVO> photovoltaicPowerGeneration (@RequestParam("siteIds") List<Integer> siteIds) {
        return AjaxResult.success( screenContentService.photovoltaicPowerGeneration(siteIds));
    }
    /**
     * 储能放电情况
     */
    @ApiOperation(tags = {"储能放电情况"},value = "充电桩数据大屏")
    @GetMapping(value = "/energyStorageDischarge")
    public AjaxResult<EnergyStorageDischargeVO> energyStorageDischarge() {
        //需调用接口 获取光伏发电量
        EnergyStorageDischargeVO vo = new EnergyStorageDischargeVO();
        //今日放能   10:00-11:59 每1分钟随机增值0.5-1,放满90停止;用第一次放能值为基数(85)开始累加,17:00-21:59 每1分钟随机增值0.5-1,放满90停止。
        vo.setTodayDischarge(energyRefreshService.getTodayDischarge());
        //今日储能  00:00-次日7:59 每1分钟随机增长0.5-1,储满115停止,12:00-16:59 每1分钟随机增长0.5-1,增加到115减第一次放能剩余值(如放能值为85,则放能剩余值为90-85)结束;
        vo.setTodayStorage(energyRefreshService.getTodayStorage());
        return AjaxResult.success(vo);
    }
    /**
     * 停车场共享情况及相关数据
     */
    @ApiOperation(tags = {"停车场共享情况及相关数据"},value = "充电桩数据大屏")
    @GetMapping(value = "/screen")
    public AjaxResult<TScreenContent> screen(@RequestParam("siteIds") List<Integer> siteIds) {
        List<TScreenContent> list = screenContentService.list(new LambdaQueryWrapper<TScreenContent>().in(TScreenContent::getSiteId, siteIds));
        TScreenContent tScreenContent = new TScreenContent();
        if(list==null|| list.isEmpty()){
            return AjaxResult.success(tScreenContent);
        }
        BeanUtils.copyProperties(list.get(0),tScreenContent);
        list.remove(0);
        list.forEach(x->{
            tScreenContent.setCarDischarge(tScreenContent.getCarDischarge().add(x.getCarDischarge()));
            tScreenContent.setGreenElectricity(tScreenContent.getGreenElectricity().add(x.getGreenElectricity()));
            tScreenContent.setGreenElectricityToday(tScreenContent.getGreenElectricityToday().add(x.getGreenElectricityToday()));
            tScreenContent.setValueOne(tScreenContent.getValueOne().add(x.getValueOne()));
            tScreenContent.setValueTwo(tScreenContent.getValueTwo().add(x.getValueTwo()));
            tScreenContent.setValueThree(tScreenContent.getValueThree().add(x.getValueThree()));
            if(tScreenContent.getStatisticalDeadline().getTime()<(x.getStatisticalDeadline().getTime())) {
                tScreenContent.setStatisticalDeadline(x.getStatisticalDeadline());
            }
        });
        return AjaxResult.success(tScreenContent);
    }
    @ApiOperation(tags = {"车位数据传输"},value = "充电桩数据大屏")
    @PostMapping(value = "/carportData")
    public AjaxResult<?> carportData(Integer parkingPlace,Integer remainPlace) {
        screenContentService.carportData(parkingPlace,remainPlace);
        return AjaxResult.success();
    }
    @ApiOperation(tags = {"获取车位数据传输"},value = "充电桩数据大屏")
    @GetMapping(value = "/getCarportData")
    public AjaxResult<?> getCarportData() {
        HashMap<String,Object> map = screenContentService.getCarportData();
        return AjaxResult.success(map);
    }
    /**
     * 数据回显 站点id
     */
    //todo 鉴权
    @RequiresPermissions(value = {"/publicAnnouncementManagement"}, logical = Logical.OR)
    @ApiOperation(tags = {"后台-大屏内容设置-基础信息"},value = "查询")
    @GetMapping(value = "/{siteId}")
    public AjaxResult<TScreenContent> detail(@PathVariable("siteId") Integer siteId) {
        TScreenContent one = screenContentService.getOne(new LambdaQueryWrapper<TScreenContent>().eq(TScreenContent::getSiteId, siteId));
        return AjaxResult.success(one);
    }
    /**
     * 新增修改
     */
    //todo 鉴权
    @RequiresPermissions(value = {"",""}, logical = Logical.OR)
    @ApiOperation(tags = {"后台-大屏内容设置-基础信息"},value = "新增修改")
    @PostMapping(value = "/saveOrUpdate")
    @Log(title = "【大屏管理】新增修改内容", businessType = BusinessType.INSERT)
    public AjaxResult saveOrUpdate(@RequestBody TScreenContent screenContent) {
        screenContentService.saveOrUpdate(screenContent);
        return AjaxResult.success();
    }
}