package com.ruoyi.other.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 com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.core.utils.SpringUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.other.domain.TPlatformConfig; import com.ruoyi.other.service.TPlatformConfigService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; import java.util.*; /** * 定时任务:储能放电情况 光伏发电情况 */ @Slf4j @Service public class KsolarUtils { private static String token; private static String accessToken; private static List stationIds= Arrays.asList("2025060710462417","2025060711331323","2025060715425437","2025060716010425"); private static final String KSOLAR_URL = "http://111.230.136.62:8092"; /** * 获取今日总发电量 * @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> getMonthEnergy(String time,String time1) { ArrayList> 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 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.1564")).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() { TPlatformConfig config = SpringUtils.getBean(TPlatformConfigService.class).getOne(Wrappers.lambdaQuery(TPlatformConfig.class).eq(TPlatformConfig::getPlatformName, "科士达")); if (config == null) { config = new TPlatformConfig(); } if (StringUtils.isBlank(config.getAccount()) || StringUtils.isBlank(config.getPassword())) { config.setAccount("环岛光伏"); config.setPassword("cR8GGwIXMI462A8Dfl9eXg=="); } HttpRequest post = HttpUtil.createPost("http://111.230.136.62:8092/authentication/form"); post.basicAuth("kstar","kstarSecret"); post.form("username", config.getAccount()); post.form("password", config.getPassword()); 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", "869916072417147"); 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 JSONObject getListEarn(String time, String token) { try { HttpRequest get = HttpUtil.createGet(KSOLAR_URL.concat("/station/list/earn")); get.header("Authorization", "Bearer "+token); if(StringUtils.isNotEmpty(time)) { 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)){ Object data = jsonObject.get("data"); return JSONObject.parseObject(data.toString()); } return null; } catch (Exception e) { log.error("获取用户的发电量和收益统计-调用第三方接口报错:", e); return null; } } /** * 获取用户的电站状态统计 */ public static JSONObject getListStatus(String token) { try { HttpRequest get = HttpUtil.createGet(KSOLAR_URL.concat("/station/list/status")); get.header("Authorization", "Bearer "+token); HttpResponse execute = get.execute(); String body = execute.body(); JSONObject jsonObject = JSONObject.parseObject(body); String code = jsonObject.get("code").toString(); if("200".equals(code)){ Object data = jsonObject.get("data"); return JSONObject.parseObject(data.toString()); } return null; } catch (Exception e) { log.error("获取用户的电站状态统计-调用第三方接口报错:", e); return null; } } /** * 电站列表信息 */ public static JSONArray getStationListInfo(Integer pageNumber, Integer pageSize, String token) { try { HttpRequest get = HttpUtil.createGet(KSOLAR_URL.concat("/station/list/info")); get.header("Authorization", "Bearer "+token); get.form("pageNumber", pageNumber); get.form("pageSize", pageSize); HttpResponse execute = get.execute(); String body = execute.body(); JSONObject jsonObject = JSONObject.parseObject(body); String code = jsonObject.get("code").toString(); if("0".equals(code)){ String rows = jsonObject.get("rows").toString(); return JSONArray.parseArray(rows); } return null; } catch (Exception e) { log.error("电站列表信息-调用第三方接口报错:", e); return null; } } /** * 电站基本信息列表 */ public static JSONArray getStationListBase(Integer pageNumber, Integer pageSize, String token) { try { HttpRequest post = HttpUtil.createPost(KSOLAR_URL.concat("/station/list/base")); post.header("Authorization", "Bearer "+token); post.header("Content-Type", "application/json"); JSONObject param = new JSONObject(); param.put("pageNumber", pageNumber); param.put("pageSize", pageSize); HttpResponse execute = post.body(param.toJSONString()).execute(); String body = execute.body(); JSONObject jsonObject = JSONObject.parseObject(body); String code = jsonObject.get("code").toString(); if("0".equals(code)){ String rows = jsonObject.get("rows").toString(); return JSONArray.parseArray(rows); } return null; } catch (Exception e) { log.error("电站列表信息-调用第三方接口报错:", e); return null; } } /** * 逆变器列表 */ public static JSONArray getCollectBaseList(Integer pageNumber, Integer pageSize, String token) { try { HttpRequest post = HttpUtil.createPost(KSOLAR_URL.concat("/collect/manager/base/list")); post.header("Authorization", "Bearer "+token); post.header("Content-Type", "application/json"); JSONObject param = new JSONObject(); param.put("pageNumber", pageNumber); param.put("pageSize", pageSize); HttpResponse execute = post.body(param.toJSONString()).execute(); String body = execute.body(); JSONObject jsonObject = JSONObject.parseObject(body); String code = jsonObject.get("code").toString(); if("0".equals(code)){ String rows = jsonObject.get("rows").toString(); return JSONArray.parseArray(rows); } return null; } catch (Exception e) { log.error("逆变器列表-调用第三方接口报错:", e); return null; } } /** * 电站发电量和收益统计明细 */ public static JSONArray getStationElecList(String startDate, String endDate, String token) { try { HttpRequest get = HttpUtil.createGet(KSOLAR_URL.concat("/protocol/station/statistic/elec/detail")); get.header("Authorization", "Bearer "+token); if(StringUtils.isNotEmpty(startDate)) { get.form("startDate", startDate); } if(StringUtils.isNotEmpty(endDate)) { get.form("endDate", endDate); } HttpResponse execute = get.execute(); String body = execute.body(); return JSONArray.parseArray(body); } catch (Exception e) { log.error("电站的电量和收益统计查询-调用第三方接口报错:", e); return null; } } /** * 查询单个电站的发电量和收益 */ public static JSONObject getStationEarnDetail(String stationId, String token) { try { HttpRequest get = HttpUtil.createGet(KSOLAR_URL.concat("/station/detail/earn")); get.header("Authorization", "Bearer "+token); if(StringUtils.isNotEmpty(stationId)) { get.form("stationId", stationId); } HttpResponse execute = get.execute(); String body = execute.body(); JSONObject jsonObject = JSONObject.parseObject(body); Object data = jsonObject.get("data"); return JSONObject.parseObject(data.toString()); } catch (Exception e) { log.error("电站的电量和收益统计查询-调用第三方接口报错:", e); return null; } } }