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.util.KsolarUtils;
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;
/**
*
* 前端控制器
*
*
* @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 top(@RequestParam("siteIds") List siteIds) {
return AjaxResult.success(screenContentService.top(siteIds));
}
/**
* 光伏发电和消纳 这里的绿电是调后台大屏内容管理的
*/
@ApiOperation(tags = {"光伏发电和消纳"},value = "充电桩数据大屏")
@GetMapping(value = "/photovoltaicAndConsumption")
public AjaxResult photovoltaicAndConsumption() {
//需调用接口 获取光伏发电量
PhotovoltaicAndConsumptionVO vo = new PhotovoltaicAndConsumptionVO();
vo.setTodayGenerateElectricity(new BigDecimal(KsolarUtils.getTodayEnergy(LocalDateTime.now().toString())));
vo.setGreenElectricityToday(vo.getTodayGenerateElectricity().multiply(new BigDecimal("0.94")).setScale(2, RoundingMode.HALF_UP));
return AjaxResult.success(vo);
}
/**
* 累计减排数据
*/
@ApiOperation(tags = {"减排数据"},value = "充电桩数据大屏")
@GetMapping(value = "/emissionReduction")
public AjaxResult emissionReduction (@RequestParam("siteIds") List siteIds) {
return AjaxResult.success( screenContentService.emissionReduction(siteIds));
}
/**
* 光伏发电实时情况
*/
@ApiOperation(tags = {"光伏发电实时情况"},value = "充电桩数据大屏")
@GetMapping(value = "/photovoltaicPowerGeneration")
public AjaxResult photovoltaicPowerGeneration (@RequestParam("siteIds") List siteIds) {
return AjaxResult.success( screenContentService.photovoltaicPowerGeneration(siteIds));
}
/**
* 储能放电情况
*/
@ApiOperation(tags = {"储能放电情况"},value = "充电桩数据大屏")
@GetMapping(value = "/energyStorageDischarge")
public AjaxResult energyStorageDischarge() {
String electricity = KsolarUtils.getElectricity();
List list = systemConfigurationService.list(new LambdaQueryWrapper().in(TSystemConfiguration::getType, 4, 5));
// 昨日放能
TSystemConfiguration sysConfig = list.stream().filter(e -> e.getType() == 4).findFirst().orElse(null);
// 昨日储能
TSystemConfiguration sysConfig1 = list.stream().filter(e -> e.getType() == 5).findFirst().orElse(null);
// 总储能
String s = electricity.split("_")[0];
// 总放能
String s1 = electricity.split("_")[1];
EnergyStorageDischargeVO vo = new EnergyStorageDischargeVO();
BigDecimal subtract = new BigDecimal(s1).subtract(new BigDecimal(sysConfig.getContent()));
vo.setTodayDischarge(subtract);
BigDecimal subtract1 = new BigDecimal(s).subtract(new BigDecimal(sysConfig1.getContent()));
vo.setTodayStorage(subtract1);
return AjaxResult.success(vo);
}
/**
* 停车场共享情况及相关数据
*/
@ApiOperation(tags = {"停车场共享情况及相关数据"},value = "充电桩数据大屏")
@GetMapping(value = "/screen")
public AjaxResult screen(@RequestParam("siteIds") List siteIds) {
List list = screenContentService.list(new LambdaQueryWrapper().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 map = screenContentService.getCarportData();
return AjaxResult.success(map);
}
/**
* 数据回显 站点id
*/
@RequiresPermissions(value = {"/bigScreenContentSetting"}, logical = Logical.OR)
@ApiOperation(tags = {"后台-大屏内容设置-基础信息"},value = "查询")
@GetMapping(value = "/{siteId}")
public AjaxResult detail(@PathVariable("siteId") Integer siteId) {
TScreenContent one = screenContentService.getOne(new LambdaQueryWrapper().eq(TScreenContent::getSiteId, siteId));
return AjaxResult.success(one);
}
/**
* 新增修改
*/
@RequiresPermissions(value = {"/bigScreenContentSetting"}, 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();
}
}