ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OtherFallbackFactory.java
@@ -12,6 +12,8 @@ import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -104,6 +106,31 @@ public R<Region> getRegionBuyCode(String code) { return R.fail("远程调用根据code查询名称失败:"+throwable.getMessage()); } @Override public R<List<TSystemConfiguration>> getTSystemConfiguration() { return R.fail("远程调用获取配置失败:"+throwable.getMessage()); } @Override public R<BigDecimal> getCarDisCharge() { return R.fail("远程调用获取配置失败:"+throwable.getMessage()); } @Override public R<BigDecimal> getGreenElectricity(List<Integer> siteIds) { return R.fail("远程调用获取配置失败:"+throwable.getMessage()); } @Override public R carportData(String parkingPlace) { return R.fail("远程调用获取配置失败:"+throwable.getMessage()); } @Override public R<HashMap<String, Object>> getCarportData() { return R.fail("远程调用获取配置失败:"+throwable.getMessage()); } }; } } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OtherClient.java
@@ -11,6 +11,8 @@ import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -74,4 +76,22 @@ R<List<TEnterpriseUserApplication>> getTnterPrise(); @GetMapping("/region/getRegionBuyCode/{code}") R<Region> getRegionBuyCode(@PathVariable("code") String code); @GetMapping("/region/getTSystemConfiguration") R<List<TSystemConfiguration>> getTSystemConfiguration(); @GetMapping(value = "/region/getCarDisCharge") R<BigDecimal> getCarDisCharge(); @PostMapping(value = "/region/getGreenElectricity") R<BigDecimal> getGreenElectricity(@RequestBody List<Integer> siteIds); @PostMapping(value = "/region/carportData") R carportData(String parkingPlace); @GetMapping(value = "/region/getCarportData") R<HashMap<String, Object>> getCarportData(); } ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/controller/LargeScreenController.java
@@ -37,33 +37,33 @@ } @SneakyThrows @ApiOperation(tags = {"大屏-停车场充电功率曲线图"},value = "停车场充电功率曲线图") @GetMapping("/getChargingPower") public R<List<LargeChargingPowerVo>> getChargingPower(){ String sevenDayAgo = LocalDate.now().minusDays(7) + " 00:00:00"; String oneDayAgo = LocalDate.now().minusDays(1) + " 23:59:59"; Date oneDayAgoTime = format.parse(oneDayAgo); Date sevenDayAgoTime = format.parse(sevenDayAgo); ArrayList<LargeChargingPowerVo> largeChargingPowerVos = new ArrayList<>(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); List<UploadRealTimeMonitoringData> rangeTimeData = uploadRealTimeMonitoringDataService.getRangeTimeData(sevenDayAgoTime,oneDayAgoTime ); for (int count = 7; count > 0; count--) { LargeChargingPowerVo largeChargingPowerVo = new LargeChargingPowerVo(); String time = LocalDate.now().minusDays(count).toString(); List<UploadRealTimeMonitoringData> list = rangeTimeData.stream().filter(e -> simpleDateFormat.format(e.getCreate_time()).contains(time)).collect(Collectors.toList()); if(!list.isEmpty()){ System.out.println(list); BigDecimal powerAverage = list.stream().map(UploadRealTimeMonitoringData::getPower).reduce(BigDecimal.ZERO, BigDecimal::add).divide(BigDecimal.valueOf(list.size()), 0, RoundingMode.HALF_UP); largeChargingPowerVo.setPower(powerAverage); } largeChargingPowerVo.setTime(time); largeChargingPowerVos.add(largeChargingPowerVo); } return R.ok(largeChargingPowerVos); } // @SneakyThrows // @ApiOperation(tags = {"大屏-停车场充电功率曲线图"},value = "停车场充电功率曲线图") // @GetMapping("/getChargingPower") // public R<List<LargeChargingPowerVo>> getChargingPower(){ // String sevenDayAgo = LocalDate.now().minusDays(7) + " 00:00:00"; // String oneDayAgo = LocalDate.now().minusDays(1) + " 23:59:59"; // Date oneDayAgoTime = format.parse(oneDayAgo); // Date sevenDayAgoTime = format.parse(sevenDayAgo); // ArrayList<LargeChargingPowerVo> largeChargingPowerVos = new ArrayList<>(); // SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); // List<UploadRealTimeMonitoringData> rangeTimeData = uploadRealTimeMonitoringDataService.getRangeTimeData(sevenDayAgoTime,oneDayAgoTime ); // for (int count = 7; count > 0; count--) { // LargeChargingPowerVo largeChargingPowerVo = new LargeChargingPowerVo(); // String time = LocalDate.now().minusDays(count).toString(); // // List<UploadRealTimeMonitoringData> list = rangeTimeData.stream().filter(e -> simpleDateFormat.format(e.getCreate_time()).contains(time)).collect(Collectors.toList()); // if(!list.isEmpty()){ // System.out.println(list); // BigDecimal powerAverage = list.stream().map(UploadRealTimeMonitoringData::getPower).reduce(BigDecimal.ZERO, BigDecimal::add).divide(BigDecimal.valueOf(list.size()), 0, RoundingMode.HALF_UP); // largeChargingPowerVo.setPower(powerAverage); // } // largeChargingPowerVo.setTime(time); // largeChargingPowerVos.add(largeChargingPowerVo); // } // // return R.ok(largeChargingPowerVos); // } ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/controller/TScreenContentController.java
New file @@ -0,0 +1,157 @@ package com.ruoyi.jianguan.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.jianguan.service.TScreenContentService; import com.ruoyi.jianguan.service.TSystemConfigurationService; import com.ruoyi.jianguan.util.KsolarUtils; import com.ruoyi.jianguan.vo.*; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.other.api.domain.TScreenContent; import com.ruoyi.other.api.domain.TSystemConfiguration; import com.ruoyi.other.api.feignClient.OtherClient; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; 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; @Autowired private OtherClient otherClient; /** * 顶部-累计电量 */ @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() { //需调用接口 获取光伏发电量 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<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() { String electricity = KsolarUtils.getElectricity(); R<List<TSystemConfiguration>> systemConfiguration = otherClient.getTSystemConfiguration(); List<TSystemConfiguration> list = systemConfiguration.getData(); // List<TSystemConfiguration> list = systemConfigurationService.list(new LambdaQueryWrapper<TSystemConfiguration>().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<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); } } ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/mapper/TScreenContentMapper.java
New file @@ -0,0 +1,35 @@ package com.ruoyi.jianguan.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.other.api.domain.TScreenContent; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; import java.util.HashMap; import java.util.List; /** * <p> * 服务实现类 * </p> * * @author huliguo * @since 2025/5/23 */ @Mapper public interface TScreenContentMapper extends BaseMapper<TScreenContent> { BigDecimal getCarDisCharge(@Param("siteIds") List<Integer> siteIds); BigDecimal getGreenElectricity(@Param("siteIds") List<Integer> siteIds); void carportData(@Param("parkingPlace") Integer parkingPlace, @Param("remainPlace") Integer remainPlace); HashMap<String, Object> getCarportData(); } ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/service/TScreenContentService.java
New file @@ -0,0 +1,35 @@ package com.ruoyi.jianguan.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.jianguan.vo.EmissionReductionVO; import com.ruoyi.jianguan.vo.PhotovoltaicPowerGenerationVO; import com.ruoyi.jianguan.vo.ScreenTopVO; import com.ruoyi.other.api.domain.TScreenContent; import java.util.HashMap; import java.util.List; /** * <p> * 服务实现类 * </p> * * @author huliguo * @since 2025/5/23 */ public interface TScreenContentService extends IService<TScreenContent> { EmissionReductionVO emissionReduction(List<Integer> siteIds); PhotovoltaicPowerGenerationVO photovoltaicPowerGeneration(List<Integer> siteIds); ScreenTopVO top(List<Integer> siteIds); void carportData(Integer parkingPlace, Integer remainPlace); HashMap<String, Object> getCarportData(); } ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/service/impl/TScreenContentServiceImpl.java
New file @@ -0,0 +1,169 @@ package com.ruoyi.jianguan.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.domain.R; import com.ruoyi.jianguan.mapper.TScreenContentMapper; import com.ruoyi.jianguan.mapper.TSystemConfigurationMapper; import com.ruoyi.jianguan.service.TScreenContentService; import com.ruoyi.jianguan.util.KsolarUtils; import com.ruoyi.jianguan.vo.EmissionReductionVO; import com.ruoyi.jianguan.vo.PhotovoltaicPowerGenerationVO; import com.ruoyi.jianguan.vo.ScreenTopVO; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.other.api.domain.TScreenContent; import com.ruoyi.other.api.feignClient.OtherClient; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; import java.util.*; /** * <p> * 服务实现类 * </p> * * @author huliguo * @since 2025/5/23 */ @Service public class TScreenContentServiceImpl extends ServiceImpl<TScreenContentMapper, TScreenContent> implements TScreenContentService { @Resource private ChargingOrderClient chargingOrderClient; @Resource private OtherClient otherClient; @Override public EmissionReductionVO emissionReduction(List<Integer> siteIds) { ScreenTopVO top = top(Arrays.asList(25, 26)); //需调用接口 计算光伏减排 EmissionReductionVO vo = new EmissionReductionVO(); //获取总电量 计算累计充电二氧化碳减排量 BigDecimal charge=top.getCarCharge(); BigDecimal multiplier = new BigDecimal("0.1404"); //计算累计充电二氧化碳减排量 if (charge.compareTo(BigDecimal.ZERO) != 0) { // 定义乘数和除数 // 0.1404 // 计算:charge × 0.1404 ÷ 1000 charge = charge .multiply(multiplier) // 乘以 0.1404 .divide(new BigDecimal("1000"),2, RoundingMode.HALF_DOWN); // 除以 1000,保留6位小数,四舍五入 } vo.setCharge(charge); //获取累计储能放电量 String s = KsolarUtils.getElectricity().split("_")[0]; vo.setEnergyStorage(new BigDecimal(s).multiply(multiplier) // 乘以 0.1404 .divide(new BigDecimal("1000"),2, RoundingMode.HALF_DOWN)); //获取累计发电 vo.setPhotovoltaic(KsolarUtils.getYearAllEnergy()); //总数: BigDecimal total = vo.getPhotovoltaic().add(vo.getEnergyStorage()).add(vo.getCharge()); vo.setTotal(total); //计算比率 vo.setPhotovoltaicRate(calculateRatio(vo.getPhotovoltaic(),vo.getTotal()).multiply(new BigDecimal("100"))); vo.setEnergyStorageRate(calculateRatio(vo.getEnergyStorage(),vo.getTotal()).multiply(new BigDecimal("100"))); vo.setChargeRate(calculateRatio(vo.getCharge(),vo.getTotal()).multiply(new BigDecimal("100"))); return vo; } //百分比计算 public static BigDecimal calculateRatio(BigDecimal part, BigDecimal total) { if (total.compareTo(BigDecimal.ZERO) == 0) { throw new ArithmeticException("分母不能为零"); } return part.divide(total, 4, RoundingMode.HALF_UP); } @Override public PhotovoltaicPowerGenerationVO photovoltaicPowerGeneration(List<Integer> siteIds) { PhotovoltaicPowerGenerationVO vo = new PhotovoltaicPowerGenerationVO(); List<LocalDate> dates = new ArrayList<>(); List<Double> values = new ArrayList<>(); LocalDate today = LocalDate.now(); ArrayList<Map<String, Object>> monthEnergy = KsolarUtils.getMonthEnergy(today.minusDays(7).toString().substring(0, 7), today.minusDays(1).toString().substring(0, 7)); // 生成每天数据 for (int i = 7; i >= 1; i--) {//升序 LocalDate day = today.minusDays(i); dates.add(day); Map<String, Object> stringObjectMap = monthEnergy.stream().filter(e -> e.get("time").toString().contains(day.toString())).findFirst().orElse(null); if(stringObjectMap!=null){ values.add(Double.valueOf(stringObjectMap.get("value").toString())); }else { values.add(0.0); } } vo.setDates(dates); vo.setValues(values); return vo; } @Override public ScreenTopVO top(List<Integer> siteIds) { ScreenTopVO vo = new ScreenTopVO(); BigDecimal charge=new BigDecimal("0.00"); BigDecimal carCharge=new BigDecimal("0.00"); BigDecimal greenElectricity=new BigDecimal("0.00"); if (siteIds!=null && !siteIds.isEmpty()){ //获取充电量 R<BigDecimal> r = chargingOrderClient.getSumDegreeBySiteIds(Arrays.asList(25,26)); if (r.getCode()==200){ charge=r.getData(); } //汽车放电量 R<BigDecimal> r1 = otherClient.getCarDisCharge(); if (r1.getCode()==200){ carCharge=r1.getData(); } //累计绿电消纳电量 R<BigDecimal> r2 = otherClient.getGreenElectricity(siteIds); if (r2.getCode()==200){ greenElectricity=r2.getData(); } } vo.setCarCharge(charge); vo.setCarDisCharge(carCharge); vo.setGreenElectricity(greenElectricity); //计算储能充电量 String electricity = KsolarUtils.getElectricity(); vo.setStorageCharge(new BigDecimal( electricity.split("_")[0])); vo.setPhotovoltaic(new BigDecimal(KsolarUtils.getAllEnergy(LocalDate.now().toString()))); vo.setGreenElectricity(vo.getPhotovoltaic().multiply(new BigDecimal("0.94")).setScale(2, RoundingMode.HALF_UP)); vo.setStorageDisCharge(new BigDecimal(electricity.split("_")[1])); return vo; } @Override public void carportData(Integer parkingPlace, Integer remainPlace) { otherClient.carportData(parkingPlace+"_"+remainPlace); } @Override public HashMap<String, Object> getCarportData() { R<HashMap<String, Object>> r = otherClient.getCarportData(); HashMap<String, Object> carportData = r.getData(); int count = Integer.valueOf(carportData.get("parkingPlace").toString()) - Integer.valueOf(carportData.get("remainPlace").toString()); carportData.put("useCarport",count); return carportData; } } ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/util/KsolarUtils.java
New file @@ -0,0 +1,235 @@ package com.ruoyi.jianguan.util; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson2.JSONObject; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; import java.util.*; /** * 定时任务:储能放电情况 光伏发电情况 */ @Service public class KsolarUtils { private static String token; private static String accessToken; private static List<String> stationIds= Arrays.asList("2025060710462417","2025060711331323","2025060715425437","2025060716010425"); /** * 获取今日总发电量 * @param time * @return */ public static Double getTodayEnergy(String time) { try { HttpRequest get = HttpUtil.createGet("http://111.230.136.62:8092/station/list/earn"); get.header("Authorization", "Bearer "+token); get.form("startDate", time); HttpResponse execute = get.execute(); String body = execute.body(); JSONObject jsonObject = JSONObject.parseObject(body); String code = jsonObject.get("code").toString(); if(!"200".equals(code)){ token = token(); return getTodayEnergy(time); } Object data = jsonObject.get("data"); JSONObject jsonObject1 = JSONObject.parseObject(data.toString()); Double earn = jsonObject1.getDouble("dayGeneration"); return earn; } catch (Exception e) { e.printStackTrace(); token = token(); return getTodayEnergy(time); } } public static ArrayList<Map<String, Object>> getMonthEnergy(String time,String time1) { ArrayList<Map<String, Object>> list = new ArrayList<>(); try { HttpRequest get = HttpUtil.createGet("http://111.230.136.62:8092/protocol/user/statistic/elec/chart"); get.header("Authorization", "Bearer "+token); get.form("stime", time); get.form("attribId", "201"); HttpResponse execute = get.execute(); String body = execute.body(); if(body.contains("code")){ token = token(); return getMonthEnergy(time,time1); } JSONArray jsonArray = JSONArray.parseArray(body); for (Object o1 : jsonArray) { HashMap<String, Object> stringObjectHashMap = new HashMap<>(); JSONObject jsonObject = JSONObject.parseObject(o1.toString()) ; stringObjectHashMap.put("time", jsonObject.getString("saveTime")); stringObjectHashMap.put("value", jsonObject.getString("attribValue")); list.add(stringObjectHashMap); } // 相同月份 if(!time.equals(time1)){ list.addAll(getMonthEnergy(time1,time1)); } return list; } catch (Exception e) { e.printStackTrace(); token = token(); return getMonthEnergy(time,time1); } } /** * 光伏累计 * @return */ public static Double getAllEnergy(String time) { try { HttpRequest get = HttpUtil.createGet("http://111.230.136.62:8092/station/list/earn"); get.header("Authorization", "Bearer "+token); get.form("startDate", time); HttpResponse execute = get.execute(); String body = execute.body(); JSONObject jsonObject = JSONObject.parseObject(body); String code = jsonObject.get("code").toString(); if(!"200".equals(code)){ token = token(); return getAllEnergy(time); } Object data = jsonObject.get("data"); JSONObject jsonObject1 = JSONObject.parseObject(data.toString()); Double earn = jsonObject1.getDouble("totalGeneration"); return earn; } catch (Exception e) { e.printStackTrace(); token = token(); return getAllEnergy(time); } } /** * 光伏碳减排 * @return */ public static BigDecimal getYearAllEnergy() { Double yearAllEnergy = getYearAllEnergy(stationIds.get(0)); Double yearAllEnergy1 = getYearAllEnergy(stationIds.get(1)); Double yearAllEnergy2 = getYearAllEnergy(stationIds.get(2)); Double yearAllEnergy3 = getYearAllEnergy(stationIds.get(3)); double v = yearAllEnergy + yearAllEnergy1 + yearAllEnergy2 + yearAllEnergy3; BigDecimal divide = new BigDecimal(v).multiply(new BigDecimal("0.1404")).divide(new BigDecimal("1000"), 2, RoundingMode.DOWN); return divide; } private static Double getYearAllEnergy(String stationId) { try { HttpRequest get = HttpUtil.createGet("http://111.230.136.62:8092/protocol/station/statistic/elec/chart"); get.header("Authorization", "Bearer "+token); get.form("stationId", stationId); get.form("attribId", "202"); get.form("stime",LocalDate.now().getYear()+"" ); HttpResponse execute = get.execute(); String body = execute.body(); JSONArray jsonArray = JSONArray.parseArray(body); Object o1 = jsonArray.get(0); JSONObject jsonObject = JSONObject.parseObject(o1.toString()); String code = jsonObject.get("attribValue").toString(); Double earn = Double.valueOf(code); return earn; } catch (Exception e) { e.printStackTrace(); token = token(); return getYearAllEnergy(stationId); } } public static String token() { HttpRequest post = HttpUtil.createPost("http://111.230.136.62:8092/authentication/form"); post.basicAuth("kstar","kstarSecret"); post.form("username", "环岛光伏"); post.form("password", "cR8GGwIXMI462A8Dfl9eXg=="); HttpResponse execute = post.execute(); String body = execute.body(); JSONObject jsonObject = JSONObject.parseObject(body); String token = jsonObject.getString("token"); JSONObject jsonObject1 = JSONObject.parseObject(token); String access_token = jsonObject1.getString("access_token"); return access_token; } public static String getAccessToken(){ HttpRequest post = HttpRequest.post("https://www.zsdcloud.cn:8443/openApi/getAccessToken.action?accessId=87bde117-1f29-4371-8d4d-82324d17ddc3"); HttpResponse execute = post.execute(); String body = execute.body(); JSONObject jsonObject = JSONObject.parseObject(body); return jsonObject.getString("result"); } /** * 消纳数据 * @return */ public static String getElectricity(){ String valueTotal = "0"; String value = "0"; HttpRequest post = HttpRequest.post("https://www.zsdcloud.cn:8443/openApi/equipment/select.action"); post.form("token", accessToken); post.form("keyCode", "869916072003947"); post.form("version", "V2"); HttpResponse execute = post.execute(); String body = execute.body(); JSONObject jsonObject = JSONObject.parseObject(body); String string = jsonObject.get("statusCode").toString(); if(!string.equals("200")){ accessToken = getAccessToken(); return getElectricity(); } String string1 = jsonObject.getString("result"); JSONObject jsonObject1 = JSONObject.parseObject(string1); String realInfo = jsonObject1.getString("childList"); JSONArray jsonArray = JSONArray.parseArray(realInfo); for (Object o : jsonArray) { JSONObject jsonObject2 = JSONObject.parseObject(o.toString()); String string2 = jsonObject2.get("valueList").toString(); JSONArray jsonArray1 = JSONArray.parseArray(string2); for (Object o1 : jsonArray1) { JSONObject jsonObject3 = JSONObject.parseObject(o1.toString()); if(jsonObject3.get("Name").toString().equals("系统累计充电量")){ valueTotal= jsonObject3.get("Value").toString(); } if(jsonObject3.get("Name").toString().equals("系统累计放电量")){ value= jsonObject3.get("Value").toString(); } } } return valueTotal+"_"+value; } public static void main(String[] args) throws Exception { String electricity = getElectricity(); System.out.println(electricity); } } ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/EmissionReductionVO.java
New file @@ -0,0 +1,27 @@ package com.ruoyi.jianguan.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data public class EmissionReductionVO { @ApiModelProperty("累计光伏发电二氧化碳减排量(吨)") private BigDecimal photovoltaic = new BigDecimal("1.39"); @ApiModelProperty("累计光伏发电二氧化碳减排量(占比率)") private BigDecimal photovoltaicRate ; @ApiModelProperty("累计储能二氧化碳减排量(吨)") private BigDecimal energyStorage ; @ApiModelProperty("累计储能二氧化碳减排量(占比率)") private BigDecimal energyStorageRate ; @ApiModelProperty("累计充电二氧化碳减排量(吨)") private BigDecimal charge; @ApiModelProperty("累计充电二氧化碳减排量(占比率)") private BigDecimal chargeRate ; @ApiModelProperty("总计二氧化碳减排量(吨)") private BigDecimal total ; } ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/EnergyStorageDischargeVO.java
New file @@ -0,0 +1,18 @@ package com.ruoyi.jianguan.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data public class EnergyStorageDischargeVO { @ApiModelProperty("储能配置") private Integer config=115; @ApiModelProperty("今日储能") private BigDecimal todayStorage; @ApiModelProperty("今日放能") private BigDecimal todayDischarge; } ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/PhotovoltaicAndConsumptionVO.java
New file @@ -0,0 +1,20 @@ package com.ruoyi.jianguan.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data public class PhotovoltaicAndConsumptionVO { @ApiModelProperty("光伏面积") private Integer area = 3593; @ApiModelProperty("装机容量") private BigDecimal capacity = new BigDecimal("759.52"); @ApiModelProperty("今日已发电") private BigDecimal todayGenerateElectricity=new BigDecimal("0"); @ApiModelProperty("今日绿电消纳值") private BigDecimal greenElectricityToday=new BigDecimal("0.00"); } ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/PhotovoltaicPowerGenerationVO.java
New file @@ -0,0 +1,15 @@ package com.ruoyi.jianguan.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDate; import java.util.List; @Data public class PhotovoltaicPowerGenerationVO { @ApiModelProperty("日期") private List<LocalDate> dates; @ApiModelProperty("数据") private List<Double> values; } ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/ScreenStorageConfigVO.java
New file @@ -0,0 +1,37 @@ package com.ruoyi.jianguan.vo; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDate; @Data public class ScreenStorageConfigVO { /** * 系统建设日期 */ @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate systemCreateTime; /** * 储能放电量 随机增长,每日不超过100度 */ private BigDecimal storageDisCharge; /** * 最后一次更改时间 */ @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate lastUpdated; /** * 储能放电情况 今日放能 */ private BigDecimal todayDischarge; /** * 储能放电情况 今日储能 */ private BigDecimal todayStorage; } ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/ScreenTopVO.java
New file @@ -0,0 +1,24 @@ package com.ruoyi.jianguan.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data public class ScreenTopVO { @ApiModelProperty("汽车充电量") private BigDecimal carCharge; @ApiModelProperty("汽车放电量") private BigDecimal carDisCharge; @ApiModelProperty("光伏发电量") private BigDecimal photovoltaic; @ApiModelProperty("光伏用电量") private BigDecimal greenElectricity; @ApiModelProperty("储能充电量") private BigDecimal storageCharge; @ApiModelProperty("储能放电量") private BigDecimal storageDisCharge; } ruoyi-service/ruoyi-jianguan/src/main/resources/mapper/jianguan/TScreenContentMapper.xml
New file @@ -0,0 +1,40 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.jianguan.mapper.TScreenContentMapper"> <update id="carportData"> update t_screen_carport set parking_place = #{parkingPlace}, remain_place = #{remainPlace} where id =1 </update> <select id="getCarDisCharge" resultType="java.math.BigDecimal"> select sum(car_discharge) FROM t_screen_content WHERE site_id in <foreach item="item" index="index" collection="siteIds" open="(" separator="," close=")"> #{item} </foreach> </select> <select id="getGreenElectricity" resultType="java.math.BigDecimal"> select sum(green_electricity) FROM t_screen_content WHERE site_id in <foreach item="item" index="index" collection="siteIds" open="(" separator="," close=")"> #{item} </foreach> </select> <select id="getCarportData" resultType="java.util.HashMap"> select parking_place as parkingPlace, remain_place as remainPlace from t_screen_carport where id =1 </select> </mapper> ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -2396,9 +2396,12 @@ /** * 充电桩数据大屏 获取站点集合中总的充电量 */ @ResponseBody @GetMapping("/getSumDegreeBySiteIds") public R<BigDecimal> getSumDegreeBySiteIds(@RequestParam("siteIds") List<Integer> SiteIds){ return R.ok(chargingOrderService.getSumDegreeBySiteIds(SiteIds)); Double sumDegreeBySiteIds = chargingOrderService.getSumDegreeBySiteIds(SiteIds); return R.ok(new BigDecimal(sumDegreeBySiteIds)); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java
@@ -30,6 +30,7 @@ import org.apache.poi.ss.usermodel.Workbook; import org.omg.CORBA.PRIVATE_MEMBER; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; @@ -59,7 +60,7 @@ private TVipOrderService vipOrderService; @Resource private AppUserClient appUserClient; @Resource @Autowired private OtherClient otherClient; ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
@@ -147,7 +147,7 @@ List<OrderCountByDate> countOrdersByDate(@Param("startTime")LocalDateTime startTime, @Param("endTime")LocalDateTime endTime,@Param("gunIds")List<Integer> gunIds); BigDecimal getSumDegreeBySiteIds(@Param("siteIds") List<Integer> siteIds); Double getSumDegreeBySiteIds(@Param("siteIds") List<Integer> siteIds); /** ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
@@ -329,7 +329,7 @@ */ R<StatisticsOfBatteryVO> getStatisticsOfBattery(); BigDecimal getSumDegreeBySiteIds(List<Integer> siteIds); Double getSumDegreeBySiteIds(List<Integer> siteIds); /** * 获取启动失败且时间超过1小时的订单 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -4324,9 +4324,10 @@ } @Override public BigDecimal getSumDegreeBySiteIds(List<Integer> siteIds) { return this.baseMapper.getSumDegreeBySiteIds(siteIds); public Double getSumDegreeBySiteIds(List<Integer> siteIds) { Double sumDegreeBySiteIds = this.baseMapper.getSumDegreeBySiteIds(siteIds); return sumDegreeBySiteIds; } ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -1765,15 +1765,7 @@ ORDER BY DATE(create_time, '%m/%d') ASC </select> <select id="getSumDegreeBySiteIds" resultType="java.math.BigDecimal"> select sum(t2.charging_capacity) from t_charging_order t1 left join t_charging_order_summary_data t2 on t1.id =t2. charging_order_id where t1.del_flag=0 and t1.site_id in <foreach item="item" index="index" collection="siteIds" open="(" separator="," close=")"> #{item} </foreach> </select> <select id="findFailedStartupOrder" resultType="com.ruoyi.order.api.model.TChargingOrder"> SELECT @@ -1826,4 +1818,17 @@ FROM t_charging_order_refund) </select> <select id="getSumDegreeBySiteIds" resultType="java.lang.Double"> SELECT IFNULL(SUM(t2.charging_capacity), 0.0) AS sumDegreeBySiteIds FROM t_charging_order t1 LEFT JOIN t_charging_order_summary_data t2 ON t1.id = t2.charging_order_id WHERE t1.del_flag = 0 <if test="siteIds != null and siteIds.size() > 0"> AND t1.site_id IN <foreach collection="siteIds" item="item" open="(" separator="," close=")"> #{item} </foreach> </if> </select> </mapper> ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java
@@ -6,13 +6,20 @@ import com.ruoyi.common.security.annotation.Logical; import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.other.api.domain.Region; import com.ruoyi.other.api.domain.TSystemConfiguration; import com.ruoyi.other.mapper.TScreenContentMapper; import com.ruoyi.other.service.IRegionService; import com.ruoyi.other.service.TScreenContentService; import com.ruoyi.other.service.TSystemConfigurationService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.Arrays; import java.util.HashMap; import java.util.List; /** @@ -25,6 +32,12 @@ @Resource private IRegionService regionService; @Resource private TSystemConfigurationService tSystemConfigurationService; @Resource private TScreenContentMapper screenContentMapper; @@ -50,4 +63,43 @@ Region list = regionService.getOne(new LambdaQueryWrapper<Region>().eq(Region::getCode, code)); return R.ok(list); } @ResponseBody @GetMapping("/getTSystemConfiguration") public R<List<TSystemConfiguration>> getTSystemConfiguration(){ List<TSystemConfiguration> list = tSystemConfigurationService.list(new LambdaQueryWrapper<TSystemConfiguration>().in(TSystemConfiguration::getType, 4, 5)); return R.ok(list); } @GetMapping(value = "/getCarDisCharge") @ResponseBody public R<BigDecimal> getCarDisCharge(){ BigDecimal carDisCharge = screenContentMapper.getCarDisCharge(Arrays.asList(25,26)); return R.ok(carDisCharge); } @PostMapping(value = "/getGreenElectricity") @ResponseBody public R<BigDecimal> getGreenElectricity(@RequestBody List<Integer> siteIds){ BigDecimal greenElectricity = screenContentMapper.getGreenElectricity(siteIds); return R.ok(greenElectricity); } @PostMapping(value = "/carportData") @ResponseBody public void carportData(String parkingPlace){ String[] split = parkingPlace.split("_"); Integer parkingPlace1 = Integer.parseInt(split[0]); Integer remainPlace = Integer.parseInt(split[1]); screenContentMapper.carportData(parkingPlace1,remainPlace); } @GetMapping(value = "/getCarportData") @ResponseBody public R<HashMap<String, Object>> getCarportData(){ HashMap<String, Object> carportData = screenContentMapper.getCarportData(); return R.ok(carportData); } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TScreenContentServiceImpl.java
@@ -47,8 +47,6 @@ @Resource private ChargingOrderClient chargingOrderClient; @Resource private TSystemConfigurationMapper systemConfigurationMapper; @Override public EmissionReductionVO emissionReduction(List<Integer> siteIds) {