Commit 94a3b577 authored by 朱晨阳's avatar 朱晨阳

Merge remote-tracking branch 'origin/developer' into developer

parents 83dbcaf6 146dcbe1
...@@ -4,7 +4,10 @@ import com.baomidou.mybatisplus.annotation.FieldFill; ...@@ -4,7 +4,10 @@ import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.yeejoin.amos.boot.biz.config.BitTypeHandler;
import lombok.Data; import lombok.Data;
import org.apache.ibatis.type.BigDecimalTypeHandler;
import org.apache.ibatis.type.BigIntegerTypeHandler;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
...@@ -34,7 +37,7 @@ public class BaseEntity implements Serializable{ ...@@ -34,7 +37,7 @@ public class BaseEntity implements Serializable{
/** /**
* 是否删除 * 是否删除
*/ */
@TableField(value = "is_delete") @TableField(value = "is_delete",typeHandler = BitTypeHandler.class)
public Boolean isDelete=false; public Boolean isDelete=false;
} }
package com.yeejoin.amos.boot.biz.config;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
@MappedJdbcTypes(JdbcType.BIT)
public class BitTypeHandler extends BaseTypeHandler<Boolean> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbcType)
throws SQLException {
//原生的boolean会再sql上加上引号比如'0'或者'1',人大金仓不支持,支持不带引号的
//ps.setBoolean(i, parameter);
ps.setInt(i, parameter?1:0);
}
@Override
public Boolean getNullableResult(ResultSet rs, String columnName) throws SQLException {
return rs.getBoolean(columnName);
}
@Override
public Boolean getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return rs.getBoolean(columnIndex);
}
@Override
public Boolean getNullableResult(java.sql.CallableStatement cs, int columnIndex) throws SQLException {
return cs.getBoolean(columnIndex);
}
}
package com.yeejoin.amos.api.householdapi.Utils;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.yeejoin.amos.api.householdapi.constant.TanYinConstant;
import com.yeejoin.amos.api.householdapi.exception.BusinessException;
import com.yeejoin.amos.api.householdapi.face.dto.TanYinAccessTokenDTO;
import com.yeejoin.amos.api.householdapi.face.dto.TanYinBaseResultDTO;
import com.yeejoin.amos.api.householdapi.face.dto.TanYinPageResultDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 碳银接口类
*
* <p>
* ProjectName: amos-boot-zx-biz
* PackageName: com.yeejoin.amos.api.householdapi.Utils
*
* @author yangyang
* @version v1.0
* @date 2024/7/15 10:25
*/
@Slf4j
@Component
public class TanYinApiUtils {
@Value ("${tanYin.api.apiUrl:}")
private String apiUrl;
@Value ("${tanYin.api.clientSecret:}")
private String clientSecret;
@Value ("${tanYin.api.clientKey:}")
private String clientKey;
@Resource (type = RedisUtils.class)
private RedisUtils redisUtils;
/**
* 获取 accessToken 接口
*
* @param clientKey 用户 ID
* @param clientSecret 用户 Secret
* @return {@link String}
* @throws
* @author yangyang
* @date 2024/7/15 14:00
*/
private String getAccessToken(String clientKey, String clientSecret) {
String accessToken = (String) redisUtils.get(TanYinConstant.ACCESS_TOKEN_KEY);
if (StringUtils.isNotEmpty(accessToken)) {
return accessToken;
}
String url = apiUrl + TanYinConstant.getAccessTokenUrl + String.format("?clientSecret=%s&grantType=client_credentials&clientKey=%s", clientSecret, clientKey);
HttpResponse response = HttpUtil.createGet(url).execute();
TanYinAccessTokenDTO accessTokenDTO = parseResponse("获取 accessToken 接口", response, TanYinAccessTokenDTO.class);
putAccessTokenInCache(accessTokenDTO);
return accessTokenDTO.getAccessToken();
}
/**
* 刷新 accessToken 接口
*
* @param clientKey 用户 ID
* @param clientSecret 用户 Secret
* @return {@link String}
* @throws
* @author yangyang
* @date 2024/7/15 13:59
*/
private String refreshAccessToken(String clientKey, String clientSecret) {
String url = apiUrl + TanYinConstant.refreshAccessTokenUrl + String.format("?clientSecret=%s&grantType=client_credentials&clientKey=%s", clientSecret, clientKey);
HttpResponse response = HttpUtil.createGet(url).execute();
TanYinAccessTokenDTO accessTokenDTO = parseResponse("刷新 accessToken 接口", response, TanYinAccessTokenDTO.class);
putAccessTokenInCache(accessTokenDTO);
return accessTokenDTO.getAccessToken();
}
private void putAccessTokenInCache(TanYinAccessTokenDTO accessTokenDTO) {
redisUtils.set(TanYinConstant.ACCESS_TOKEN_KEY, accessTokenDTO.getAccessToken(), accessTokenDTO.getAccessTokenExpiresIn() != null && accessTokenDTO.getAccessTokenExpiresIn() > 2 ? accessTokenDTO.getAccessTokenExpiresIn() - 1 : 1);
}
/**
* 使用GET方法向指定URL发送请求,并解析返回的数据。
*
* @param desc 对请求的描述,用于日志记录。
* @param url 请求的URL地址。
* @param resultClass 返回结果的类型,用于解析响应体。
* @param <T> 请求结果的类型参数。
* @param <R> 返回类型参数,与resultClass相同。
* @return 解析后的返回结果,如果请求失败或URL为空,则返回null。
*/
public <T, R> R get(String desc, String url, Class<T> resultClass) {
// 检查URL是否为空,如果为空则直接返回null。
if (StringUtils.isBlank(url)) {
return null;
}
// 记录请求开始的日志信息。
log.debug("请求 => 碳银{}接口,url:{}", desc, url);
Map<String, String> headers = new HashMap<>();
HttpResponse response;
try {
// 添加Authorization头,使用Bearer令牌模式。
headers.put("Authorization", "Bearer " + getAccessToken(clientKey, clientSecret));
// 发送GET请求并获取响应。
response = HttpUtil.createGet(url).execute();
// 解析响应并返回结果。
return parseResponse(desc, response, resultClass);
} catch (BusinessException businessException) {
// 在业务异常发生时,尝试刷新令牌并重新发送请求。
// 刷新 Access_token
headers.put("Authorization", "Bearer " + refreshAccessToken(clientKey, clientSecret));
response = HttpUtil.createGet(url).execute();
return parseResponse(desc, response, resultClass);
} catch (Exception e) {
// 记录未预期异常的日志信息。
log.warn(String.format("异常 => 碳银%s接口", desc), e);
return null;
}
}
/**
* 使用POST方法向指定URL发送带参数和头部信息的请求,并解析返回的结果。
*
* @param desc 请求描述,用于日志记录。
* @param url 请求的URL地址。
* @param params 请求的参数,以Map形式提供。
* @param headers 请求的头部信息,以Map形式提供。
* @param resultClass 返回结果的类类型,用于解析响应。
* @param <T> 请求参数的泛型类型。
* @param <R> 响应结果的泛型类型。
* @return 解析后的响应结果,如果请求失败或解析异常,可能返回null。
*/
public <T, R> R post(String desc, String url, Map<String, Object> params, Map<String, String> headers, Class<T> resultClass) {
// 检查URL是否为空,如果为空直接返回null。
if (StringUtils.isBlank(url)) {
return null;
}
// 将参数转换为JSON字符串。
String paramsJsonStr = JSON.toJSONString(params);
// 初始化headers,默认添加Authorization头。
if (headers == null) {
headers = new HashMap<>();
}
headers.put("Authorization", "Bearer " + getAccessToken(clientKey, clientSecret));
// 记录请求日志。
log.debug("请求 => 碳银{}接口,url:{},参数:{},headers:{}", desc, url, paramsJsonStr, JSON.toJSONString(headers));
HttpResponse response = null;
try {
// 发送POST请求,带上参数和headers,并执行。
response = HttpUtil.createPost(url).body(paramsJsonStr, MediaType.APPLICATION_JSON_UTF8_VALUE).headerMap(headers, true).execute();
// 解析响应并返回。
return parseResponse(desc, response, resultClass);
} catch (BusinessException businessException) {
if (businessException.isTokenError()) {
// 在业务异常情况下,尝试刷新令牌并重试请求。
// 刷新 Access_token
headers.put("Authorization", "Bearer " + refreshAccessToken(clientKey, clientSecret));
response = HttpUtil.createPost(url).body(paramsJsonStr, MediaType.APPLICATION_JSON_UTF8_VALUE).headerMap(headers, true).execute();
// 解析刷新令牌后的响应并返回。
return parseResponse(desc, response, resultClass);
}
log.warn(String.format("异常 => 碳银%s接口,参数: %s,响应: %s", desc, paramsJsonStr, response != null ? response.body() : businessException.getMessage()));
return null;
} catch (Exception e) {
// 记录未预期的异常日志。
log.warn(String.format("异常 => 碳银%s接口,参数: %s", desc, paramsJsonStr), e);
return null;
}
}
/**
* 使用POST方法发送带分页信息的网络请求。
*
* @param desc 请求描述,用于日志记录。
* @param url 请求的URL地址。
* @param paramsJsonStr 请求参数的JSON字符串形式。
* @param headers 请求的头部信息,可以为null。如果为null,则会添加默认的Authorization头。
* @param resultClass 结果对象的类类型,用于解析响应。
* @param <T> 结果对象的泛型类型。
* @return 返回包含分页信息和请求结果的PageInfo对象,如果请求URL为空,则返回null。
*/
public <T> PageInfo<T> postPage(String desc, String url, String paramsJsonStr, Map<String, String> headers, Class<T> resultClass) {
// 检查URL是否为空,如果为空直接返回null
if (StringUtils.isBlank(url)) {
return null;
}
// 初始化headers,默认添加Authorization头。
if (headers == null) {
headers = new HashMap<>();
}
// 添加Authorization头,使用Bearer令牌模式
headers.put("Authorization", "Bearer " + getAccessToken(clientKey, clientSecret));
// 记录请求日志
log.info("请求 => 碳银{}接口,url:{},参数:{},headers:{}", desc, url, paramsJsonStr, JSON.toJSONString(headers));
HttpResponse response = null;
try {
// 发送POST请求,设置请求体和请求头
response = HttpUtil.createPost(url).body(paramsJsonStr, MediaType.APPLICATION_JSON_UTF8_VALUE).headerMap(headers, true).execute();
// 记录响应日志
log.info("响应 => 碳银{}接口,参数:{},httpCode:{}, response:{}", desc, paramsJsonStr, response.getStatus(), response.body());
// 解析响应,返回分页信息和请求结果
return parsePageResponse(desc, response, resultClass);
} catch (BusinessException businessException) {
if (businessException.isTokenError()) {
// 在业务异常情况下,尝试刷新令牌并重试请求。
// 刷新 Access_token
headers.put("Authorization", "Bearer " + refreshAccessToken(clientKey, clientSecret));
// 重新发送请求并解析响应
response = HttpUtil.createPost(url).body(paramsJsonStr, MediaType.APPLICATION_JSON_UTF8_VALUE).headerMap(headers, true).execute();
return parsePageResponse(desc, response, resultClass);
}
log.warn(String.format("异常 => 碳银%s接口,参数: %s,响应: %s", desc, paramsJsonStr, response != null ? response.body() : businessException.getMessage()));
return null;
} catch (Exception e) {
// 记录异常日志
log.warn(String.format("异常 => 碳银%s接口,参数: %s", desc, paramsJsonStr), e);
return null;
}
}
/**
* 解析响应数据。
* <p>
* 该方法用于处理来自碳银接口的响应,解析响应体并根据预期的结果类型返回相应的数据。
* 如果响应不成功或数据解析失败,将返回null或抛出异常。
*
* @param desc 接口描述,用于日志记录。
* @param response HTTP响应对象,包含响应状态码和响应体。
* @param resultClass 预期结果的类类型,用于解析响应体并转换为相应的Java对象。
* @param <T> 泛型参数,表示响应数据的类型。
* @param <R> 泛型参数,表示返回数据的类型。
* @return 解析后的结果对象,如果响应失败或数据无法解析,则返回null。
*/
@SuppressWarnings ("unchecked")
public <T, R> R parseResponse(String desc, HttpResponse response, Class<T> resultClass) {
// 记录响应日志,包括接口描述、HTTP状态码和响应体。
log.debug("响应 => 碳银{}接口,httpCode:{}, response:{}", desc, response.getStatus(), response.body());
// 检查响应是否成功,如果不成功则直接返回null。
if (!response.isOk()) {
return null;
}
// 解析响应体为TanYinBaseResultDTO对象,用于检查响应的通用状态。
TanYinBaseResultDTO baseResult = JSONObject.parseObject(response.body(), TanYinBaseResultDTO.class);
// 检查响应是否成功并存在有效数据,如果不成功且错误码为401,则抛出业务异常;其他情况返回null。
if (!baseResult.getSuccess() || Objects.isNull(baseResult.getData())) {
throw new BusinessException(baseResult.getCode().toString(), baseResult.getMsg());
}
// 解析响应数据部分,根据其类型进行相应的处理和转换。
JSON result = (JSON) baseResult.getData();
if (result instanceof Map) {
// 如果结果是Map类型,则将其转换为指定的Java对象。
return (R) JSON.parseObject(result.toJSONString()).toJavaObject(resultClass);
}
if (result instanceof List) {
// 如果结果是List类型,则将其转换为指定的Java列表。
return (R) JSON.parseArray(result.toJSONString()).toJavaList(resultClass);
}
// 如果结果类型既不是Map也不是List,则返回null。
return null;
}
/**
* 解析分页响应数据。
* 该方法用于将请求的响应数据解析为特定类型的分页信息对象,方便后续处理和使用。
*
* @param desc 请求描述,用于日志记录,便于问题追踪。
* @param response HTTP响应对象,包含请求的返回状态码和响应体。
* @param resultClass 结果对象的类类型,用于将JSON字符串转换为对应类型的对象。
* @param <T> 泛型参数,表示结果对象的类型。
* @return 返回解析后的分页信息对象,如果响应不成功或数据为空,则返回null。
*/
public <T> PageInfo<T> parsePageResponse(String desc, HttpResponse response, Class<T> resultClass) {
// 记录请求的响应信息到日志,包括描述、HTTP状态码和响应体。
log.info("响应 => 碳银{}接口,httpCode:{}, response:{}", desc, response.getStatus(), response.body());
// 将响应体解析为TanYinBaseResultDTO对象,其中包含分页数据。
TanYinBaseResultDTO<JSONObject> listResult = JSONObject.parseObject(response.body(), TanYinBaseResultDTO.class);
// 检查响应是否成功且数据不为空,如果不满足则直接返回null。
if (!response.isOk() || Objects.isNull(listResult.getData())) {
return null;
}
if ("401".equals(listResult.getCode())) {
// Token 过期
throw new BusinessException(listResult.getCode().toString(), listResult.getMsg());
}
// 初始化PageInfo对象,用于存放解析后的分页数据。
PageInfo<T> pageInfo = new PageInfo<>();
// 从解析结果中获取具体的分页数据对象。
TanYinPageResultDTO tanYinPageResultDTO = JSONObject.parseObject(listResult.getData().toJSONString(), TanYinPageResultDTO.class);
// 将分页数据中的列表数据转换为指定类型的集合。
List<T> newList = (List<T>) tanYinPageResultDTO.getList().parallelStream().map(json -> JSON.toJavaObject((JSON) json, resultClass)).collect(Collectors.toList());
// 将转换后的集合设置到PageInfo对象中。
pageInfo.setList(newList);
// 设置分页信息,包括总页数、每页大小、当前页码和总记录数。
pageInfo.setPages(tanYinPageResultDTO.getTotalPage() == null ? 0 : tanYinPageResultDTO.getTotalPage());
pageInfo.setPageSize(tanYinPageResultDTO.getPageSize() == null ? 0 : tanYinPageResultDTO.getPageSize());
pageInfo.setPageNum(tanYinPageResultDTO.getPageNo() == null ? 0 : tanYinPageResultDTO.getPageNo());
pageInfo.setTotal(tanYinPageResultDTO.getTotal() == null ? 0 : tanYinPageResultDTO.getTotal());
// 返回解析后的分页信息对象。
return pageInfo;
}
}
package com.yeejoin.amos.api.householdapi.constant;
import java.util.HashMap;
/**
* 碳银常量类
* <p>
* ProjectName: amos-boot-zx-biz
* PackageName: com.yeejoin.amos.api.householdapi.constant
*
* @author yangyang
* @version v1.0
* @date 2024/7/15 10:22
*/
public class TanYinConstant {
public static String ACCESS_TOKEN_KEY = "TanYin_Token";
/**
* 获取电站信息
*/
public static String stationListUrl = "/v1/yx/query/station/info";
/**
* 获取客户信息
*/
public static String customerInfoUrl = "/v1/yx/query/customer/info";
/**
* 电站逆变器信息接口
*/
public static String inverterListUrl = "/v1/station/getTodayDetail";
/**
* 获取 Access_Token
*/
public static String getAccessTokenUrl = "/v1/auth/getAccessToken";
/**
* 刷新 Access_Token
*/
public static String refreshAccessTokenUrl = "/v1/auth/refreshAccessToken";
public static final HashMap<String, String> stationStatus = new HashMap<String, String>() {
{
put("0", "在线");
put("1", "离线");
put("2", "异常");
}
};
public static final HashMap<String, String> intoNetWorkStatus = new HashMap<String, String>() {
{
put("0", "普通并网");
}
};
}
...@@ -73,7 +73,8 @@ public class HouseholdTestController { ...@@ -73,7 +73,8 @@ public class HouseholdTestController {
@Autowired
private TanYinDataAcquisitionService tanYinDataAcquisitionService;
/** /**
* 新增户用光伏-厂商API haders * 新增户用光伏-厂商API haders
...@@ -257,8 +258,25 @@ public class HouseholdTestController { ...@@ -257,8 +258,25 @@ public class HouseholdTestController {
/* ---------------- 碳银接口 Test -------------- */
@TycloudOperation(ApiLevel = UserType.PUBLIC, needAuth = false)
@PostMapping(value = "/tanyin/station")
@ApiOperation(httpMethod = "POST", value = "电站基本信息接口", notes = "电站基本信息接口")
public void tanyinStation() {
tanYinDataAcquisitionService.stationList();
}
@TycloudOperation(ApiLevel = UserType.PUBLIC, needAuth = false)
@PostMapping(value = "/tanyin/inverter")
@ApiOperation(httpMethod = "POST", value = "电站逆变器信息接口", notes = "电站逆变器信息接口")
public void tanyinInverter() {
tanYinDataAcquisitionService.inverterList();
}
@TycloudOperation(ApiLevel = UserType.PUBLIC, needAuth = false)
@PostMapping(value = "/tanyin/customer")
@ApiOperation(httpMethod = "POST", value = "客户信息查询接口", notes = "客户信息查询接口")
public void tanyinCustomer() {
tanYinDataAcquisitionService.customerInfoList();
}
} }
package com.yeejoin.amos.api.householdapi.exception;
import org.apache.commons.lang3.StringUtils;
import org.typroject.tyboot.core.foundation.exception.BaseException;
/**
* 自定义异常
*
* @author yangyang
* @version v1.0
* @date 2023/9/19 12:37
*/
public class BusinessException extends BaseException {
private String code;
public BusinessException(String message) {
super(message, BusinessException.class.getSimpleName(), "错误的请求.");
this.code = "-1";
this.httpStatus = 500;
}
public BusinessException(String errorCode, String message) {
super(message, BusinessException.class.getSimpleName(), message);
if (StringUtils.isBlank(errorCode)) {
this.httpStatus = 500;
this.code = errorCode;
} else {
this.httpStatus = Integer.parseInt(errorCode);
this.code = errorCode;
}
}
public boolean isTokenError() {
return "401".equals(this.code);
}
}
package com.yeejoin.amos.api.householdapi.face.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 碳银Access_Token类
* <p>
* ProjectName: amos-boot-zx-biz
* PackageName: com.yeejoin.amos.api.householdapi.face.dto
*
* @author yangyang
* @version v1.0
* @date 2024/7/16 14:08
*/
@NoArgsConstructor
@Data
public class TanYinAccessTokenDTO {
@ApiModelProperty ("业务请求 token")
@JsonProperty ("access_token")
private String accessToken;
@ApiModelProperty ("有效时间")
@JsonProperty ("expires_in")
private Integer accessTokenExpiresIn;
}
package com.yeejoin.amos.api.householdapi.face.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 碳银接口返回类
* <p>
* ProjectName: amos-boot-zx-biz
* PackageName: com.yeejoin.amos.api.householdapi.face.dto
*
* @author yangyang
* @version v1.0
* @date 2024/7/15 14:03
*/
@NoArgsConstructor
@Data
public class TanYinBaseResultDTO<T> {
@JsonProperty ("code")
private Integer code;
@JsonProperty ("data")
private T data;
@JsonProperty ("msg")
private String msg;
@JsonProperty ("deskey")
private Object deskey;
@JsonProperty ("success")
private Boolean success;
@JsonProperty ("fail")
private Boolean fail;
}
package com.yeejoin.amos.api.householdapi.face.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 碳银分页请求类
* <p>
* ProjectName: amos-boot-zx-biz
* PackageName: com.yeejoin.amos.api.householdapi.face.dto
*
* @author yangyang
* @version v1.0
* @date 2024/7/16 14:09
*/
@NoArgsConstructor
@Data
public class TanYinPageResultDTO<T> {
@JsonProperty ("pageNo")
private Integer pageNo;
@JsonProperty ("pageSize")
private Integer pageSize;
@JsonProperty ("totalPage")
private Integer totalPage;
@JsonProperty ("total")
private Integer total;
@JsonProperty ("list")
private List<T> list;
@JsonProperty ("start")
private Integer start;
}
...@@ -8,8 +8,12 @@ import java.io.Serializable; ...@@ -8,8 +8,12 @@ import java.io.Serializable;
@Data @Data
@TableName(value = "td_hygf_station_power_day",autoResultMap = true) @TableName(value = "td_hygf_station_power_day",autoResultMap = true)
public class HYGFJPDayPower implements Serializable { public class HYGFJPDayPower implements Serializable {
private Long createdTime; /**
private String tationId; *
*/
private static final long serialVersionUID = 1L;
private Long createdTime;
private String thirdStationId;
private String hour; private String hour;
private String yearMonthDay; private String yearMonthDay;
private Double power; private Double power;
......
package com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 客户信息
* <p>
* ProjectName: amos-boot-zx-biz
* PackageName: com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine
*
* @author yangyang
* @version v1.0
* @date 2024/7/15 16:11
*/
@NoArgsConstructor
@Data
@TableName (value = "tanyin_customer_info", autoResultMap = true)
public class TanYinCustomerInfo {
@ApiModelProperty ("客户身份证号码")
@TableField ("customer_id_no")
private String customerIdNo;
@ApiModelProperty ("客户姓名")
@TableField ("customer_name")
private String customerName;
@ApiModelProperty ("客户手机号")
@TableField ("customer_phone")
private String customerPhone;
@ApiModelProperty ("客户并网通过时间 毫秒时间戳")
@TableField ("electric_contract_pass")
private Long electricContractPass;
@ApiModelProperty ("项目编号")
@TableField ("project_no")
private String projectNo;
@TableField("create_time")
private Long createTime;
}
package com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 逆变器实时数据
* <p>
* ProjectName: amos-boot-zx-biz
* PackageName: com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine
*
* @author yangyang
* @version v1.0
* @date 2024/7/15 16:10
*/
@NoArgsConstructor
@Data
@TableName (value = "tanyin_inveter_info", autoResultMap = true)
public class TanYinInveterInfo {
@TableField ("project_no")
private String projectNo;
@TableField ("device_name")
private String deviceName;
@TableField ("sn")
private String sn;
@TableField ("supplier")
private Integer supplier;
@ApiModelProperty ("更新时间")
@TableField ("gmt_create")
private String gmtCreate;
@ApiModelProperty ("ID")
@TableField ("id_string")
private String idString;
@ApiModelProperty ("功率")
@TableField ("watt")
private String watt;
@ApiModelProperty ("日发电量")
@TableField ("daily_energy")
private String dailyEnergy;
@ApiModelProperty ("总发电量")
@TableField ("total_energy")
private String totalEnergy;
@ApiModelProperty ("逆变器在线状态:在线;1、离线;2、异常")
@TableField ("status")
private String status;
@ApiModelProperty ("故障原因")
@TableField ("error_detail")
private String errorDetail;
@ApiModelProperty ("故障码")
@TableField ("error_code")
private String errorCode;
@ApiModelProperty ("输入电压 1")
@TableField ("vol0")
private String vol0;
@ApiModelProperty ("输入电压 2")
@TableField ("vol1")
private String vol1;
@ApiModelProperty ("输入电压 3")
@TableField ("vol2")
private String vol2;
@ApiModelProperty ("输入电压 4")
@TableField ("vol3")
private String vol3;
@ApiModelProperty ("输入电压 5")
@TableField ("vol4")
private String vol4;
@ApiModelProperty ("输出电压 1")
@TableField ("vol5")
private String vol5;
@ApiModelProperty ("输出电压 2")
@TableField ("vol6")
private String vol6;
@ApiModelProperty ("输出电压 3")
@TableField ("vol7")
private String vol7;
@ApiModelProperty ("输出电压 3")
@TableField ("vol8")
private String vol8;
@ApiModelProperty ("输出电压 3")
@TableField ("vol9")
private String vol9;
@ApiModelProperty ("输入电压 6")
@TableField ("vol10")
private String vol10;
@ApiModelProperty ("输出电压 3")
@TableField ("vol11")
private String vol11;
@ApiModelProperty ("输出电压 3")
@TableField ("vol12")
private String vol12;
@ApiModelProperty ("输出电压 3")
@TableField ("vol13")
private String vol13;
@ApiModelProperty ("输出电压 3")
@TableField ("vol14")
private String vol14;
@ApiModelProperty ("输出电压 3")
@TableField ("vol15")
private String vol15;
@ApiModelProperty ("输入电流 1")
@TableField ("amp0")
private String amp0;
@ApiModelProperty ("输入电流 2")
@TableField ("amp1")
private String amp1;
@ApiModelProperty ("输入电流 3")
@TableField ("amp2")
private String amp2;
@ApiModelProperty ("输入电流 4")
@TableField ("amp3")
private String amp3;
@ApiModelProperty ("输入电流 5")
@TableField ("amp4")
private String amp4;
@ApiModelProperty ("输入电流 6")
@TableField ("amp5")
private String amp5;
@ApiModelProperty ("输入电流 7")
@TableField ("amp6")
private String amp6;
@ApiModelProperty ("输入电流 8")
@TableField ("amp7")
private String amp7;
@ApiModelProperty ("输入电流 9")
@TableField ("amp8")
private String amp8;
@ApiModelProperty ("输入电流 10")
@TableField ("amp9")
private String amp9;
@ApiModelProperty ("输入电流 11")
@TableField ("amp10")
private String amp10;
@ApiModelProperty ("输入电流 12")
@TableField ("amp11")
private String amp11;
@ApiModelProperty ("输入电流 13")
@TableField ("amp12")
private String amp12;
@ApiModelProperty ("输入电流 14")
@TableField ("amp13")
private String amp13;
@ApiModelProperty ("输入电流 15")
@TableField ("amp14")
private String amp14;
@ApiModelProperty ("输入电流 16")
@TableField ("amp15")
private String amp15;
@ApiModelProperty ("温度(单位:摄氏度)")
@TableField ("temperature")
private String temperature;
@TableField ("create_time")
private Long createTime;
}
package com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 电站基本信息
* <p>
* ProjectName: amos-boot-zx-biz
* PackageName: com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine
*
* @author yangyang
* @version v1.0
* @date 2024/7/15 16:05
*/
@NoArgsConstructor
@Data
@TableName (value = "tanyin_station_info", autoResultMap = true)
public class TanYinStationInfo {
@ApiModelProperty ("项目编号")
@TableField ("project_no")
private String projectNo;
@ApiModelProperty ("姓名")
@TableField ("customer_name")
private String customerName;
@ApiModelProperty ("手机号")
@TableField ("customer_phone")
private String customerPhone;
@ApiModelProperty ("身份证")
@TableField ("customer_id_no")
private String customerIdNo;
@ApiModelProperty ("省")
@TableField ("province")
private String province;
@ApiModelProperty ("市")
@TableField ("city")
private String city;
@ApiModelProperty ("区")
@TableField ("area")
private String area;
@ApiModelProperty ("镇 + 详细地址")
@TableField ("complete_address")
private String completeAddress;
@TableField (value = "inverterList",exist = false)
private List<InverterListDTO> inverterList;
@ApiModelProperty ("装机容量")
@TableField ("capacity_size")
private String capacitySize;
@ApiModelProperty ("累计总发电量")
@TableField ("total_power")
private String totalPower;
@ApiModelProperty ("当年发电量")
@TableField ("year_power")
private String yearPower;
@ApiModelProperty ("当月发电量")
@TableField ("month_power")
private String monthPower;
@ApiModelProperty ("当日发电量")
@TableField ("day_power")
private String dayPower;
@ApiModelProperty ("纬度")
@TableField ("latitude")
private String latitude;
@ApiModelProperty ("经度")
@TableField ("longitude")
private String longitude;
@TableField ("create_time")
private Long createTime;
@NoArgsConstructor
@Data
public static class InverterListDTO {
private String deviceName;
private Integer supplier;
private String sn;
}
}
package com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.TanYinCustomerInfo;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface TanYinCustomerInfoMapper extends BaseMapper<TanYinCustomerInfo> {
@Select("select project_no from tanyin_customer_info")
List<String> listProjectNo();
}
package com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.TanYinInveterInfo;
public interface TanYinInveterInfoMapper extends BaseMapper<TanYinInveterInfo> {
}
package com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.TanYinStationInfo;
public interface TanYinStationInfoMapper extends BaseMapper<TanYinStationInfo> {
}
package com.yeejoin.amos.api.householdapi.face.service;
/**
* <p>
* ProjectName: amos-boot-zx-biz
* PackageName: com.yeejoin.amos.api.householdapi.face.service
*
* @author yangyang
* @version v1.0
* @date 2024/7/15 10:05
*/
public interface TanYinDataAcquisitionService {
/**
* 通过并网时间段查询对应范围内的项目信息
*
* @param
* @return {@link }
* @throws
* @author yangyang
* @date 2024/7/15 16:55
*/
void customerInfoList();
/**
* 电站基本信息
*
* @param
* @return {@link }
* @throws
* @author yangyang
* @date 2024/7/15 16:55
*/
void stationList();
/**
* 电站逆变器信息
*
* @param
* @return {@link }
* @throws
* @author yangyang
* @date 2024/7/15 16:55
*/
void inverterList();
}
...@@ -44,7 +44,7 @@ public class HYGFJPDayPowerImpl implements AscriptionService { ...@@ -44,7 +44,7 @@ public class HYGFJPDayPowerImpl implements AscriptionService {
if(hygfjpDayPower!=null&&!hygfjpDayPower.isEmpty()){ if(hygfjpDayPower!=null&&!hygfjpDayPower.isEmpty()){
for (HYGFJPDayPower dayPower : hygfjpDayPower) { for (HYGFJPDayPower dayPower : hygfjpDayPower) {
JpStation jpStation = jpStationMapper.selectOne(new QueryWrapper<JpStation>(). JpStation jpStation = jpStationMapper.selectOne(new QueryWrapper<JpStation>().
eq("third_station_id", dayPower.getTationId())); eq("third_station_id", dayPower.getThirdStationId()));
if(jpStation!=null) { if(jpStation!=null) {
dayPower.setAmosCompanyCode(jpStation.getAmosCompanyCode()); dayPower.setAmosCompanyCode(jpStation.getAmosCompanyCode());
dayPower.setRegionalCompaniesCode(jpStation.getRegionalCompaniesCode()); dayPower.setRegionalCompaniesCode(jpStation.getRegionalCompaniesCode());
......
...@@ -260,11 +260,11 @@ public class GoLangDataAcquisitionServiceImpl implements GoLangDataAcquisitionSe ...@@ -260,11 +260,11 @@ public class GoLangDataAcquisitionServiceImpl implements GoLangDataAcquisitionSe
hygfjpStationPowerHistoryMapper.insert(hygfjpStationPowerHistory); hygfjpStationPowerHistoryMapper.insert(hygfjpStationPowerHistory);
HYGFJPDayPower hygfjpDayPower = hygfjpDayPowerMapper.selectOne(new QueryWrapper<HYGFJPDayPower>() HYGFJPDayPower hygfjpDayPower = hygfjpDayPowerMapper.selectOne(new QueryWrapper<HYGFJPDayPower>()
.eq("tation_id", stationIds.get(i)).eq("year_month_day", today).eq("hour", hour)); .eq("third_station_id", stationIds.get(i)).eq("year_month_day", today).eq("hour", hour));
if (ObjectUtils.isEmpty(hygfjpDayPower)) { if (ObjectUtils.isEmpty(hygfjpDayPower)) {
hygfjpDayPower = new HYGFJPDayPower(); hygfjpDayPower = new HYGFJPDayPower();
} }
hygfjpDayPower.setTationId(stationIds.get(i)); hygfjpDayPower.setThirdStationId(stationIds.get(i));
hygfjpDayPower.setHour(hour); hygfjpDayPower.setHour(hour);
hygfjpDayPower.setYearMonthDay(today); hygfjpDayPower.setYearMonthDay(today);
hygfjpDayPower.setPower(golangStationDetail.getPower()); hygfjpDayPower.setPower(golangStationDetail.getPower());
......
...@@ -205,11 +205,11 @@ public class GoodWeDataAcquisitionServiceImpl implements GoodWeDataAcquisitionSe ...@@ -205,11 +205,11 @@ public class GoodWeDataAcquisitionServiceImpl implements GoodWeDataAcquisitionSe
hygfjpStationPowerHistoryMapper.insert(hygfjpStationPowerHistory); hygfjpStationPowerHistoryMapper.insert(hygfjpStationPowerHistory);
HYGFJPDayPower hygfjpDayPower = hygfjpDayPowerMapper.selectOne(new QueryWrapper<HYGFJPDayPower>() HYGFJPDayPower hygfjpDayPower = hygfjpDayPowerMapper.selectOne(new QueryWrapper<HYGFJPDayPower>()
.eq("tation_id", jpStation.getThirdStationId()).eq("year_month_day", today).eq("hour", hour)); .eq("third_station_id", jpStation.getThirdStationId()).eq("year_month_day", today).eq("hour", hour));
if (org.springframework.util.ObjectUtils.isEmpty(hygfjpDayPower)) { if (org.springframework.util.ObjectUtils.isEmpty(hygfjpDayPower)) {
hygfjpDayPower = new HYGFJPDayPower(); hygfjpDayPower = new HYGFJPDayPower();
} }
hygfjpDayPower.setTationId(goodWeStationList.getPowerstation_id()); hygfjpDayPower.setThirdStationId(goodWeStationList.getPowerstation_id());
hygfjpDayPower.setHour(hour); hygfjpDayPower.setHour(hour);
hygfjpDayPower.setYearMonthDay(today); hygfjpDayPower.setYearMonthDay(today);
hygfjpDayPower.setPower(jpStation.getRealTimePower()); hygfjpDayPower.setPower(jpStation.getRealTimePower());
......
...@@ -366,14 +366,14 @@ public class ImasterDataServiceImpl implements ImasterDataService { ...@@ -366,14 +366,14 @@ public class ImasterDataServiceImpl implements ImasterDataService {
hygfjpStationPowerHistoryMapper.insert(hygfjpStationPowerHistory); hygfjpStationPowerHistoryMapper.insert(hygfjpStationPowerHistory);
HYGFJPDayPower hygfjpDayPower = hygfjpDayPowerMapper.selectOne( HYGFJPDayPower hygfjpDayPower = hygfjpDayPowerMapper.selectOne(
new QueryWrapper<HYGFJPDayPower>(). new QueryWrapper<HYGFJPDayPower>().
eq("tation_id", imasterStationList.getPlantCode()). eq("third_station_id", imasterStationList.getPlantCode()).
eq("year_month_day", today). eq("year_month_day", today).
eq("hour", hour) eq("hour", hour)
); );
if (ObjectUtils.isEmpty(hygfjpDayPower)) { if (ObjectUtils.isEmpty(hygfjpDayPower)) {
hygfjpDayPower = new HYGFJPDayPower(); hygfjpDayPower = new HYGFJPDayPower();
} }
hygfjpDayPower.setTationId(imasterStationList.getPlantCode()); hygfjpDayPower.setThirdStationId(imasterStationList.getPlantCode());
hygfjpDayPower.setHour(hour); hygfjpDayPower.setHour(hour);
hygfjpDayPower.setYearMonthDay(today); hygfjpDayPower.setYearMonthDay(today);
hygfjpDayPower.setPower(active_power); hygfjpDayPower.setPower(active_power);
......
...@@ -286,12 +286,12 @@ public class KsolarDataAcquisitionServiceImpl implements KSolarDataAcquisitionSe ...@@ -286,12 +286,12 @@ public class KsolarDataAcquisitionServiceImpl implements KSolarDataAcquisitionSe
hygfjpStationPowerHistoryMapper.insert(hygfjpStationPowerHistory); hygfjpStationPowerHistoryMapper.insert(hygfjpStationPowerHistory);
HYGFJPDayPower hygfjpDayPower = hygfjpDayPowerMapper HYGFJPDayPower hygfjpDayPower = hygfjpDayPowerMapper
.selectOne(new QueryWrapper<HYGFJPDayPower>().eq("tation_id", ksolarStation.getStationId()) .selectOne(new QueryWrapper<HYGFJPDayPower>().eq("third_station_id", ksolarStation.getStationId())
.eq("year_month_day", today).eq("hour", hour)); .eq("year_month_day", today).eq("hour", hour));
if (ObjectUtils.isEmpty(hygfjpDayPower)) { if (ObjectUtils.isEmpty(hygfjpDayPower)) {
hygfjpDayPower = new HYGFJPDayPower(); hygfjpDayPower = new HYGFJPDayPower();
} }
hygfjpDayPower.setTationId(ksolarStation.getStationId()); hygfjpDayPower.setThirdStationId(ksolarStation.getStationId());
hygfjpDayPower.setHour(hour); hygfjpDayPower.setHour(hour);
hygfjpDayPower.setYearMonthDay(today); hygfjpDayPower.setYearMonthDay(today);
hygfjpDayPower.setPower(ksolarStation.getPowerInter()); hygfjpDayPower.setPower(ksolarStation.getPowerInter());
......
...@@ -442,12 +442,12 @@ public class SofarDataAcquisitionServiceImpl implements SofarDataAcquisitionServ ...@@ -442,12 +442,12 @@ public class SofarDataAcquisitionServiceImpl implements SofarDataAcquisitionServ
String today = DateUtil.today(); String today = DateUtil.today();
String hour = new Date().getHours() + ":00"; String hour = new Date().getHours() + ":00";
HYGFJPDayPower hygfjpDayPower = hygfjpDayPowerMapper.selectOne( HYGFJPDayPower hygfjpDayPower = hygfjpDayPowerMapper.selectOne(
new QueryWrapper<HYGFJPDayPower>().eq("tation_id", sunlightDto.getId().toString()) new QueryWrapper<HYGFJPDayPower>().eq("third_station_id", sunlightDto.getId().toString())
.eq("year_month_day", today).eq("hour", hour)); .eq("year_month_day", today).eq("hour", hour));
if (ObjectUtils.isEmpty(hygfjpDayPower)) { if (ObjectUtils.isEmpty(hygfjpDayPower)) {
hygfjpDayPower = new HYGFJPDayPower(); hygfjpDayPower = new HYGFJPDayPower();
} }
hygfjpDayPower.setTationId(sunlightDto.getId().toString()); hygfjpDayPower.setThirdStationId(sunlightDto.getId().toString());
hygfjpDayPower.setHour(hour); hygfjpDayPower.setHour(hour);
hygfjpDayPower.setYearMonthDay(today); hygfjpDayPower.setYearMonthDay(today);
hygfjpDayPower.setPower(jpStation.getRealTimePower()); hygfjpDayPower.setPower(jpStation.getRealTimePower());
......
...@@ -347,13 +347,13 @@ public class SunlightServiceImpl implements SunlightService { ...@@ -347,13 +347,13 @@ public class SunlightServiceImpl implements SunlightService {
String today = DateUtil.today(); String today = DateUtil.today();
String hour = new Date().getHours() + ":00"; String hour = new Date().getHours() + ":00";
HYGFJPDayPower hygfjpDayPower = hygfjpDayPowerMapper HYGFJPDayPower hygfjpDayPower = hygfjpDayPowerMapper.selectOne(
.selectOne(new QueryWrapper<HYGFJPDayPower>().eq("tation_id", sunlightDto.getPs_id().toString()) new QueryWrapper<HYGFJPDayPower>().eq("third_station_id", sunlightDto.getPs_id().toString())
.eq("year_month_day", today).eq("hour", hour)); .eq("year_month_day", today).eq("hour", hour));
if (ObjectUtils.isEmpty(hygfjpDayPower)) { if (ObjectUtils.isEmpty(hygfjpDayPower)) {
hygfjpDayPower = new HYGFJPDayPower(); hygfjpDayPower = new HYGFJPDayPower();
} }
hygfjpDayPower.setTationId(sunlightDto.getPs_id().toString()); hygfjpDayPower.setThirdStationId(sunlightDto.getPs_id().toString());
hygfjpDayPower.setHour(hour); hygfjpDayPower.setHour(hour);
hygfjpDayPower.setYearMonthDay(today); hygfjpDayPower.setYearMonthDay(today);
hygfjpDayPower.setPower(jpStation.getRealTimePower()); hygfjpDayPower.setPower(jpStation.getRealTimePower());
...@@ -417,9 +417,13 @@ public class SunlightServiceImpl implements SunlightService { ...@@ -417,9 +417,13 @@ public class SunlightServiceImpl implements SunlightService {
jpStationMapper.insert(jpStation); jpStationMapper.insert(jpStation);
} }
this.setJpInverte(listd, jpStation, listdtx); if (listd != null) {
this.setJpInverte(listd, jpStation, listdtx);
}
this.collectorDetail(listd, jpStation); if (listd != null) {
this.collectorDetail(listd, jpStation);
}
// 电站报表 // 电站报表
// 户用场站日发电量 // 户用场站日发电量
...@@ -1059,10 +1063,12 @@ public class SunlightServiceImpl implements SunlightService { ...@@ -1059,10 +1063,12 @@ public class SunlightServiceImpl implements SunlightService {
try { try {
TimeUnit.MINUTES.sleep(1); TimeUnit.MINUTES.sleep(1);
hygfjpInverterWarn.setCreatedTime(System.currentTimeMillis()); hygfjpInverterWarn.setCreatedTime(System.currentTimeMillis());
hygfjpInverterWarnMapper.insert(hygfjpInverterWarn);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
hygfjpInverterWarnMapper.insert(hygfjpInverterWarn);
} }
hygfjpInverterWarnMapper.insert(hygfjpInverterWarn);
} }
} }
} }
......
package com.yeejoin.amos.api.householdapi.face.service.impl;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapBuilder;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageInfo;
import com.yeejoin.amos.api.householdapi.Utils.RedisUtils;
import com.yeejoin.amos.api.householdapi.Utils.TanYinApiUtils;
import com.yeejoin.amos.api.householdapi.constant.TanYinConstant;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.hygf.JpInverter;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.hygf.JpInverterElectricity;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.hygf.JpStation;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.HYGFJPDayPower;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.HYGFJPInverterElecHistory;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.HYGFJPInverterHistory;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.HYGFJPStationPowerHistory;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.TanYinCustomerInfo;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.TanYinInveterInfo;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.TanYinStationInfo;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.TdHYGFInverterDayGenerate;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.TdHYGFInverterMonthGenerate;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.TdHYGFInverterTotalGenerate;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.TdHYGFInverterYearGenerate;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.TdHYGFStationAllGenerate;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.TdHYGFStationMonthGenerate;
import com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.TdHYGFStationYearGenerate;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.hygf.JpCollectorMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.hygf.JpInverterElectricityMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.hygf.JpInverterMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.hygf.JpStationMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.HYGFJPCollectorHistoryMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.HYGFJPDayPowerMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.HYGFJPInverterElecHistoryMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.HYGFJPInverterHistoryMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.HYGFJPInverterWarnMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.HYGFJPStationPowerHistoryMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.KsolarStationCollectListMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.KsolarStationDetailsMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.KsolarStationEarnMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.KsolarStationMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.TanYinCustomerInfoMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.TanYinInveterInfoMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.TanYinStationInfoMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.TdHYGFInverterDayGenerateMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.TdHYGFInverterMonthGenerateMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.TdHYGFInverterTotalGenerateMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.TdHYGFInverterYearGenerateMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.TdHYGFStationAllGenerateMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.TdHYGFStationMonthGenerateMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.TdHYGFStationYearGenerateMapper;
import com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.TdJpStationMapper;
import com.yeejoin.amos.api.householdapi.face.service.TanYinDataAcquisitionService;
import com.yeejoin.amos.openapi.enums.PVProducerInfoEnum;
import fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 碳银业务类
* <p>
* ProjectName: amos-boot-zx-biz
* PackageName: com.yeejoin.amos.api.householdapi.face.service.impl
*
* @author yangyang
* @version v1.0
* @date 2024/7/15 10:15
*/
@Component
@Slf4j
public class TanYinDataAcquisitionServiceImpl implements TanYinDataAcquisitionService {
@Value ("${tanYin.api.apiUrl:}")
private String apiUrl;
@Resource (type = TanYinApiUtils.class)
private TanYinApiUtils tanYinApiUtils;
@Resource (type = RedisUtils.class)
private RedisUtils redisUtils;
@Resource (type = TanYinCustomerInfoMapper.class)
private TanYinCustomerInfoMapper tanYinCustomerInfoMapper;
@Resource (type = TanYinStationInfoMapper.class)
private TanYinStationInfoMapper tanYinStationInfoMapper;
@Resource (type = TanYinInveterInfoMapper.class)
private TanYinInveterInfoMapper tanYinInveterInfoMapper;
@Autowired
private JpStationMapper jpStationMapper;
@Autowired
private HYGFJPStationPowerHistoryMapper hygfjpStationPowerHistoryMapper;
@Autowired
private HYGFJPInverterHistoryMapper hygfjpInverterHistoryMapper;
@Autowired
private HYGFJPCollectorHistoryMapper hygfjpCollectorHistoryMapper;
@Autowired
private HYGFJPInverterWarnMapper hygfjpInverterWarnMapper;
@Autowired
private HYGFJPInverterElecHistoryMapper hygfjpInverterElecHistoryMapper;
@Autowired
private HYGFJPDayPowerMapper hygfjpDayPowerMapper;
@Autowired
private JpCollectorMapper jpCollectorMapper;
@Autowired
private JpInverterMapper jpInverterMapper;
@Autowired
private JpInverterElectricityMapper jpInverterElectricityMapper;
@Autowired
private TdHYGFInverterDayGenerateMapper tdHYGFInverterDayGenerateMapper;
@Autowired
private TdHYGFInverterMonthGenerateMapper tdHYGFInverterMonthGenerateMapper;
@Autowired
private TdHYGFInverterYearGenerateMapper tdHYGFInverterYearGenerateMapper;
@Autowired
private com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.TdHYGFStationMonthGenerateMapper TdHYGFStationMonthGenerateMapper;
@Autowired
private com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.TdHYGFStationYearGenerateMapper TdHYGFStationYearGenerateMapper;
@Autowired
private com.yeejoin.amos.api.householdapi.face.orm.mapper.tdengine.TdHYGFStationAllGenerateMapper TdHYGFStationAllGenerateMapper;
@Autowired
private TdHYGFInverterTotalGenerateMapper tdHYGFInverterTotalGenerateMapper;
@Autowired
private TdJpStationMapper tdJpStationMapper;
private final static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private final static String pageNo = "1";
private final static String pageSize = "100";
/**
* 每隔 10分钟通过并网时间段同步碳银对应范围内的项目信息
*
* @param
* @return {@link }
* @throws
* @author yangyang
* @date 2024/7/17 13:56
*/
@Scheduled (cron = "${dataRequestScheduled.tanYin}")
@Override
public void customerInfoList() {
long ts = System.currentTimeMillis();
log.info("-------碳银同步项目信息开始: {} ------- ", ts);
Map<String, Object> params = MapBuilder.<String, Object>create()
.put("pageNo", pageNo)
.put("pageSize", pageSize)// 每页行数
.put("startDate", LocalDate.now().minusYears(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))// 开始时间 YYYY-MM-dd
.put("endDate", LocalDate.now().plusDays(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))// 结束时间 YYYY-MM-dd
.build();
PageInfo<TanYinCustomerInfo> tanYinCustomerInfos = tanYinApiUtils.postPage("客户信息", apiUrl + TanYinConstant.customerInfoUrl, JSON.toJSONString(params), null, TanYinCustomerInfo.class);
if (tanYinCustomerInfos == null || CollectionUtils.isEmpty(tanYinCustomerInfos.getList())) {
return;
}
for (TanYinCustomerInfo tanYinCustomerInfo : tanYinCustomerInfos.getList()) {
if (tanYinCustomerInfoMapper.update(tanYinCustomerInfo, new QueryWrapper<TanYinCustomerInfo>().lambda().eq(TanYinCustomerInfo::getProjectNo, tanYinCustomerInfo.getProjectNo())) == 0) {
tanYinCustomerInfoMapper.insert(tanYinCustomerInfo);
}
}
log.info("-------碳银同步项目信息结束: {} ------- ", ts, sdf.format(new Date()));
}
/**
* 每隔 10分钟通过项目编号同步碳银对应电站信息
*
* @param
* @return {@link }
* @throws
* @author yangyang
* @date 2024/7/17 13:57
*/
@Scheduled (cron = "${dataRequestScheduled.tanYin}")
@Async
@Override
public void stationList() {
long ts = System.currentTimeMillis();
log.info("-------碳银同步电站开始: {} ------- ", ts);
List<String> projectNos = tanYinCustomerInfoMapper.listProjectNo();
// projectNos.add("TF2024060312382700202");
// String powerDate = "2024-07-17";
String powerDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
if (CollectionUtils.isEmpty(projectNos)) {
return;
}
List<List<String>> projectNoLists = ListUtil.partition(projectNos, 200);// 每次最多 200个
List<TanYinStationInfo> tanYinStationInfos = new ArrayList<>();
for (List<String> projectNoList : projectNoLists) {
Map<String, Object> params = MapBuilder.<String, Object>create().put("projectNoList", projectNoList).put("powerDate", powerDate).build();
List<TanYinStationInfo> tanYinStationInfoList = tanYinApiUtils.post("电站基本信息", apiUrl + TanYinConstant.stationListUrl, params, null, TanYinStationInfo.class);
if (CollectionUtils.isEmpty(tanYinStationInfoList)) {
return;
}
tanYinStationInfos.addAll(tanYinStationInfoList);
}
if (CollectionUtils.isEmpty(tanYinStationInfos)) {
return;
}
List<String> stationIds = tanYinStationInfos.stream().map(TanYinStationInfo::getProjectNo).collect(Collectors.toList());
List<JpStation> jpStations = jpStationMapper.selectList(new QueryWrapper<JpStation>().eq("third_code", PVProducerInfoEnum.TANYIN.getCode()).in("third_station_id", stationIds));
Map<String, JpStation> jpStationMap = jpStations.stream().collect(Collectors.toMap(JpStation::getThirdStationId, Function.identity()));
List<TanYinInveterInfo> tanYinInveterInfos = new ArrayList();
for (TanYinStationInfo tanYinStationInfo : tanYinStationInfos) {
tanYinStationInfo.setCreateTime(System.currentTimeMillis());
tanYinStationInfoMapper.insert(tanYinStationInfo);
List<TanYinStationInfo.InverterListDTO> inverterList = tanYinStationInfo.getInverterList();
for (TanYinStationInfo.InverterListDTO inverterListDTO : inverterList) {
TanYinInveterInfo tanYinInveterInfo = new TanYinInveterInfo();
tanYinInveterInfo.setProjectNo(tanYinStationInfo.getProjectNo());
tanYinInveterInfo.setDeviceName(inverterListDTO.getDeviceName());
tanYinInveterInfo.setSn(inverterListDTO.getSn());
tanYinInveterInfo.setSupplier(inverterListDTO.getSupplier());
tanYinInveterInfo.setCreateTime(System.currentTimeMillis());
tanYinInveterInfos.add(tanYinInveterInfo);
}
String stationId = tanYinStationInfo.getProjectNo();
JpStation jpStation = jpStationMap.get(stationId);
// 给户用光伏存储的数据赋值
if (ObjectUtils.isEmpty(jpStation)) {
jpStation = new JpStation();
}
jpStation.setCapacity(Double.valueOf(tanYinStationInfo.getCapacitySize()));// 装机容量
jpStation.setAddress(tanYinStationInfo.getProvince() + tanYinStationInfo.getCity() + tanYinStationInfo.getArea() + tanYinStationInfo.getCompleteAddress());
jpStation.setLongitude(tanYinStationInfo.getLongitude());
jpStation.setLatitude(tanYinStationInfo.getLatitude());
jpStation.setUserName(tanYinStationInfo.getCustomerName());
jpStation.setUserPhone(String.valueOf(tanYinStationInfo.getCustomerPhone()));
jpStation.setStationContact(tanYinStationInfo.getProvince() + tanYinStationInfo.getCity() + tanYinStationInfo.getArea() + tanYinStationInfo.getCompleteAddress());
jpStation.setName(tanYinStationInfo.getCustomerName());
jpStation.setThirdCode(PVProducerInfoEnum.TANYIN.getCode());
jpStation.setThirdStationId(tanYinStationInfo.getProjectNo());
jpStation.setDayGenerate(Double.parseDouble(tanYinStationInfo.getDayPower()));
jpStation.setMonthGenerate(Double.parseDouble(tanYinStationInfo.getMonthPower()));
jpStation.setYearGenerate(Double.parseDouble(tanYinStationInfo.getYearPower()));
jpStation.setAccumulatedPower(Double.parseDouble(tanYinStationInfo.getTotalPower()));
// 并网类型
// jpStation.setSnCode(golangStationDetail.getNmicode());
// jpStation.setPrice();
// jpStation.setModuleCount(ObjectUtils.isEmpty(Math.toIntExact(golangStationDetail.getModule())) ? 0 : Math.toIntExact(golangStationDetail.getModule()));
jpStation.setOnGridType(TanYinConstant.intoNetWorkStatus.get("0")); // 没有该字段默认写死
// jpStation.setOnGridTime();
jpStation.setDayIncome(tanYinStationInfo.getDayPower() != null ? Double.parseDouble(tanYinStationInfo.getDayPower()) * 0.45 : 0.0);
jpStation.setMonthIncome(tanYinStationInfo.getMonthPower() != null ? Double.parseDouble(tanYinStationInfo.getMonthPower()) * 0.45 : 0.0);
jpStation.setYearIncome(tanYinStationInfo.getYearPower() != null ? Double.parseDouble(tanYinStationInfo.getYearPower()) * 0.45 : 0.0);
jpStation.setCumulativeIncome(tanYinStationInfo.getTotalPower() != null ? Double.parseDouble(tanYinStationInfo.getTotalPower()) * 0.45 : 0.0);
jpStation.setArea(tanYinStationInfo.getArea());
// jpStation.setEmail();
// jpStation.setAccessTime();
// jpStation.setCreateTime();
// jpStation.setRatedPower();
jpStation.setType("家庭户用");
jpStation.setRecDate(new Date());
if (!ObjectUtils.isEmpty(jpStation.getSequenceNbr())) {
jpStationMapper.updateById(jpStation);
} else {
jpStationMapper.insert(jpStation);
}
HYGFJPStationPowerHistory hygfjpStationPowerHistory = new HYGFJPStationPowerHistory();
hygfjpStationPowerHistory.setCreatedTime(System.currentTimeMillis());
hygfjpStationPowerHistory.setThirdStationId(jpStation.getThirdStationId());
hygfjpStationPowerHistory.setPower(Double.parseDouble(tanYinStationInfo.getTotalPower()));
hygfjpStationPowerHistory.setThirdCode(jpStation.getThirdCode());
hygfjpStationPowerHistory.setTime(System.currentTimeMillis());
// 新加
hygfjpStationPowerHistory.setAmosCompanyCode(jpStation.getAmosCompanyCode());
hygfjpStationPowerHistory.setRegionalCompaniesCode(jpStation.getRegionalCompaniesCode());
hygfjpStationPowerHistory.setStationName(jpStation.getName());
hygfjpStationPowerHistory.setStationState(jpStation.getState());
hygfjpStationPowerHistoryMapper.insert(hygfjpStationPowerHistory);
String today = DateUtil.today();
String hour = new Date().getHours() + ":00";
HYGFJPDayPower hygfjpDayPower = hygfjpDayPowerMapper.selectOne(
new QueryWrapper<HYGFJPDayPower>().eq("third_station_id", stationId)
.eq("year_month_day", today).eq("hour", hour));
if (ObjectUtils.isEmpty(hygfjpDayPower)) {
hygfjpDayPower = new HYGFJPDayPower();
}
hygfjpDayPower.setThirdStationId(stationId);
hygfjpDayPower.setHour(hour);
hygfjpDayPower.setYearMonthDay(today);
hygfjpDayPower.setPower(jpStation.getRealTimePower());
// 新加
hygfjpDayPower.setAmosCompanyCode(jpStation.getAmosCompanyCode());
hygfjpDayPower.setRegionalCompaniesCode(jpStation.getRegionalCompaniesCode());
hygfjpDayPower.setStationName(jpStation.getName());
hygfjpDayPower.setStationState(jpStation.getState());
if (ObjectUtils.isEmpty(hygfjpDayPower.getCreatedTime())) {
hygfjpDayPower.setCreatedTime(System.currentTimeMillis());
hygfjpDayPowerMapper.insert(hygfjpDayPower);
} else {
hygfjpDayPowerMapper.insert(hygfjpDayPower);
}
Date today1 = new Date();
// 户用场站日发电量
TdHYGFStationMonthGenerate TdHYGFStationMonthGenerate = TdHYGFStationMonthGenerateMapper.selectOne(new QueryWrapper<TdHYGFStationMonthGenerate>().eq("third_station_id", stationId).eq("day_time", DateUtil.format(today1, "yyyy-MM-dd")).eq("year_month", DateUtil.format(today1, "yyyy-MM")));
if (ObjectUtils.isEmpty(TdHYGFStationMonthGenerate)) {
TdHYGFStationMonthGenerate = new TdHYGFStationMonthGenerate();
}
TdHYGFStationMonthGenerate.setThirdStationId(stationId);
TdHYGFStationMonthGenerate.setDayTime(DateUtil.format(today1, "yyyy-MM-dd"));
TdHYGFStationMonthGenerate.setYearMonth(DateUtil.format(today1, "yyyy-MM"));
TdHYGFStationMonthGenerate.setGenerate(jpStation.getDayGenerate());
TdHYGFStationMonthGenerate.setFullhour(jpStation.getDayGenerate() / jpStation.getCapacity());
TdHYGFStationMonthGenerate.setIncome(jpStation.getDayIncome());
// 新加
TdHYGFStationMonthGenerate.setAmosCompanyCode(jpStation.getAmosCompanyCode());
TdHYGFStationMonthGenerate.setRegionalCompaniesCode(jpStation.getRegionalCompaniesCode());
TdHYGFStationMonthGenerate.setStationName(jpStation.getName());
TdHYGFStationMonthGenerate.setStationState(jpStation.getState());
if (ObjectUtils.isEmpty(TdHYGFStationMonthGenerate.getCreatedTime())) {
TdHYGFStationMonthGenerate.setCreatedTime(System.currentTimeMillis());
TdHYGFStationMonthGenerateMapper.insert(TdHYGFStationMonthGenerate);
} else {
TdHYGFStationMonthGenerateMapper.insert(TdHYGFStationMonthGenerate);
}
// 户用场站月发电量
TdHYGFStationYearGenerate TdHYGFStationYearGenerate = TdHYGFStationYearGenerateMapper.selectOne(new QueryWrapper<TdHYGFStationYearGenerate>().eq("third_station_id", stationId).eq("month_time", DateUtil.format(today1, "yyyy-MM")).eq("year", DateUtil.format(today1, "yyyy")));
if (ObjectUtils.isEmpty(TdHYGFStationYearGenerate)) {
TdHYGFStationYearGenerate = new TdHYGFStationYearGenerate();
}
TdHYGFStationYearGenerate.setThirdStationId(stationId);
TdHYGFStationYearGenerate.setMonthTime(DateUtil.format(today1, "yyyy-MM"));
TdHYGFStationYearGenerate.setYear(DateUtil.format(today1, "yyyy"));
TdHYGFStationYearGenerate.setGenerate(jpStation.getMonthGenerate());
TdHYGFStationYearGenerate.setFullhour(jpStation.getMonthGenerate() / jpStation.getCapacity());
TdHYGFStationYearGenerate.setIncome(jpStation.getMonthIncome());
// 新加
TdHYGFStationYearGenerate.setAmosCompanyCode(jpStation.getAmosCompanyCode());
TdHYGFStationYearGenerate.setRegionalCompaniesCode(jpStation.getRegionalCompaniesCode());
TdHYGFStationYearGenerate.setStationName(jpStation.getName());
TdHYGFStationYearGenerate.setStationState(jpStation.getState());
if (ObjectUtils.isEmpty(TdHYGFStationYearGenerate.getCreatedTime())) {
TdHYGFStationYearGenerate.setCreatedTime(System.currentTimeMillis());
TdHYGFStationYearGenerateMapper.insert(TdHYGFStationYearGenerate);
} else {
TdHYGFStationYearGenerateMapper.insert(TdHYGFStationYearGenerate);
}
// 户用场站年发电量
TdHYGFStationAllGenerate TdHYGFStationAllGenerate = TdHYGFStationAllGenerateMapper.selectOne(new QueryWrapper<TdHYGFStationAllGenerate>().eq("third_station_id", stationId).eq("year_time", DateUtil.format(today1, "yyyy")).eq("year", DateUtil.format(today1, "yyyy")));
if (ObjectUtils.isEmpty(TdHYGFStationAllGenerate)) {
TdHYGFStationAllGenerate = new TdHYGFStationAllGenerate();
}
TdHYGFStationAllGenerate.setThirdStationId(stationId);
TdHYGFStationAllGenerate.setYearTime(DateUtil.format(today1, "yyyy"));
TdHYGFStationAllGenerate.setYear(DateUtil.format(today1, "yyyy"));
TdHYGFStationAllGenerate.setGenerate(jpStation.getYearGenerate());
TdHYGFStationAllGenerate.setFullhour(jpStation.getYearGenerate() / jpStation.getCapacity());
TdHYGFStationAllGenerate.setIncome(jpStation.getYearIncome());
// 新加
TdHYGFStationAllGenerate.setAmosCompanyCode(jpStation.getAmosCompanyCode());
TdHYGFStationAllGenerate.setRegionalCompaniesCode(jpStation.getRegionalCompaniesCode());
TdHYGFStationAllGenerate.setStationName(jpStation.getName());
TdHYGFStationAllGenerate.setStationState(jpStation.getState());
if (ObjectUtils.isEmpty(TdHYGFStationAllGenerate.getCreatedTime())) {
TdHYGFStationAllGenerate.setCreatedTime(System.currentTimeMillis());
TdHYGFStationAllGenerateMapper.insert(TdHYGFStationAllGenerate);
} else {
TdHYGFStationAllGenerateMapper.insert(TdHYGFStationAllGenerate);
}
}
log.info("-------碳银同步电站结束: {} ------- " + ts + "------- " + sdf.format(new Date()));
log.info("-------碳银同步逆变器开始: {} ------- " + ts + "------- " + sdf.format(new Date()));
inverterList(tanYinInveterInfos);
}
@Override
public void inverterList() {
}
public void inverterList(List<TanYinInveterInfo> tanYinInveterInfos) {
if (CollectionUtils.isEmpty(tanYinInveterInfos)) {
return;
}
List<String> stationIds = tanYinInveterInfos.stream().map(TanYinInveterInfo::getProjectNo).collect(Collectors.toList());
List<JpStation> jpStations = jpStationMapper.selectList(new QueryWrapper<JpStation>().eq("third_code", PVProducerInfoEnum.TANYIN.getCode()).in("third_station_id", stationIds));
Map<String, JpStation> jpStationMap = jpStations.stream().collect(Collectors.toMap(JpStation::getThirdStationId, Function.identity()));
List<String> sns = tanYinInveterInfos.stream().map(TanYinInveterInfo::getSn).distinct().collect(Collectors.toList());
List<List<String>> snLists = ListUtil.partition(sns, 200);// 最多 200 个
JSONObject tanYinInveterInfoResultMap = new JSONObject();
for (List<String> snList : snLists) {
Map<String, Object> params = MapBuilder.<String, Object>create().put("snList", snList).build();
JSONObject tanYinInveterInfoResult = tanYinApiUtils.post("电站逆变器信息", apiUrl + TanYinConstant.inverterListUrl, params, null, JSONObject.class);
if (CollectionUtils.isEmpty(tanYinInveterInfoResult)) {
continue;
}
tanYinInveterInfoResultMap.putAll(tanYinInveterInfoResult);
}
for (TanYinInveterInfo tanYinInveterInfo : tanYinInveterInfos) {
JSONObject tanYinInveterInfoResultJson = tanYinInveterInfoResultMap.getJSONObject(tanYinInveterInfo.getSn());
TanYinInveterInfo tanYinInveterInfoDTO = tanYinInveterInfoResultJson.toJavaObject(TanYinInveterInfo.class);
tanYinInveterInfoDTO.setProjectNo(tanYinInveterInfo.getProjectNo());
tanYinInveterInfoDTO.setDeviceName(tanYinInveterInfo.getDeviceName());
tanYinInveterInfoDTO.setSn(tanYinInveterInfo.getSn());
tanYinInveterInfoDTO.setSupplier(tanYinInveterInfo.getSupplier());
tanYinInveterInfoDTO.setCreateTime(System.currentTimeMillis());
tanYinInveterInfoMapper.insert(tanYinInveterInfoDTO);
JpInverter jpInverter = jpInverterMapper.selectOne(
new QueryWrapper<JpInverter>().eq("third_station_id", tanYinInveterInfo.getProjectNo())
.eq("third_code", PVProducerInfoEnum.TANYIN.getCode())
.eq("sn_code", tanYinInveterInfo.getSn()));
if (org.springframework.util.ObjectUtils.isEmpty(jpInverter)) {
jpInverter = new JpInverter();
}
jpInverter.setBrand(tanYinInveterInfoDTO.getSupplier().toString());
jpInverter.setSnCode(tanYinInveterInfo.getSn());
jpInverter.setId(tanYinInveterInfo.getIdString());
jpInverter.setThirdStationId(tanYinInveterInfo.getProjectNo());
jpInverter.setThirdCode(PVProducerInfoEnum.TANYIN.getCode());
// 0、离线 1、在线 2、异常
jpInverter.setState(TanYinConstant.stationStatus.get(tanYinInveterInfoDTO.getStatus()));
jpInverter.setRecDate(new Date());
jpInverter.setUpdateTime(tanYinInveterInfoDTO.getGmtCreate() != null ? new Date(Long.parseLong(tanYinInveterInfoDTO.getGmtCreate())) : new Date());
JpStation jpStation = jpStationMap.get(tanYinInveterInfo.getProjectNo());
if (jpStation != null) {
if (!"离线".equals(jpStation.getState()) && !"异常".equals(jpStation.getState())) {
jpStation.setState(TanYinConstant.stationStatus.get(tanYinInveterInfoDTO.getStatus()));
jpStationMapper.updateById(jpStation);
jpStationMap.put(tanYinInveterInfo.getProjectNo(), jpStation);
}
// 逆变器没有就空着
// jpInverter.setDayPowerGeneration(jpStation.getDayGenerate());
// jpInverter.setMonthPowerGeneration(jpStation.getMonthGenerate());
// jpInverter.setYearPowerGeneration(jpStation.getYearGenerate());
// jpInverter.setTotalPowerGeneration(jpStation.getAccumulatedPower());
jpInverter.setStationName(jpStation.getName());
jpInverter.setAddr(jpStation.getAddress());
jpInverter.setCapacity(jpStation.getCapacity());
}
jpInverter.setCurrentPower(Double.parseDouble(tanYinInveterInfoDTO.getWatt()));
jpInverter.setDayPowerGeneration(Double.parseDouble(tanYinInveterInfoDTO.getDailyEnergy()));
jpInverter.setTotalPowerGeneration(Double.parseDouble(tanYinInveterInfoDTO.getTotalEnergy()));
jpInverter.setModel(tanYinInveterInfoDTO.getDeviceName());
jpInverter.setName(tanYinInveterInfoDTO.getDeviceName());
if (!ObjectUtils.isEmpty(jpInverter.getSequenceNbr())) {
jpInverterMapper.updateById(jpInverter);
} else {
jpInverterMapper.insert(jpInverter);
}
// 解析电站逆变器信息
// 确认先按照 vol1, amp1 这样入库
for (int k = 0; k <= 15; k++) {
String name = "vol" + k;
JpInverterElectricity jpInverterElectricity = jpInverterElectricityMapper
.selectOne(new QueryWrapper<JpInverterElectricity>()
.eq("sn_code", tanYinInveterInfoDTO.getSn())
.eq("name", name));
if (org.springframework.util.ObjectUtils.isEmpty(jpInverterElectricity)) {
jpInverterElectricity = new JpInverterElectricity();
}
jpInverterElectricity.setInverterId(jpInverter.getId());
jpInverterElectricity.setSnCode(tanYinInveterInfoDTO.getSn());
jpInverterElectricity.setThirdCode(PVProducerInfoEnum.TANYIN.getCode());
jpInverterElectricity.setThirdStationId(jpInverter.getThirdStationId());
// jpInverterElectricity.setType("交流");
// jpInverterElectricity.setFrequency();// 频率
// jpInverterElectricity.setPower();// 功率
jpInverterElectricity.setName(name);
if (tanYinInveterInfoResultJson.get(name) != null && !"".equals(tanYinInveterInfoResultJson.get(name))) {
jpInverterElectricity.setVoltage(Double.valueOf(tanYinInveterInfoResultJson.get(name).toString())); // 电压
}
// jpInverterElectricity.setCurrent(Double.valueOf(hanlderResult.get("amp" + k).toString()));// 电流
if (org.springframework.util.ObjectUtils.isEmpty(jpInverterElectricity.getSequenceNbr())) {
jpInverterElectricityMapper.insert(jpInverterElectricity);
} else {
jpInverterElectricityMapper.updateById(jpInverterElectricity);
}
}
for (int n = 0; n < 15; n++) {
String name = "amp" + n;
JpInverterElectricity jpInverterElectricity = jpInverterElectricityMapper
.selectOne(new QueryWrapper<JpInverterElectricity>()
.eq("sn_code", tanYinInveterInfoDTO.getSn())
.eq("name", name));
if (org.springframework.util.ObjectUtils.isEmpty(jpInverterElectricity)) {
jpInverterElectricity = new JpInverterElectricity();
}
jpInverterElectricity.setInverterId(jpInverter.getId());
jpInverterElectricity.setSnCode(tanYinInveterInfoDTO.getSn());
jpInverterElectricity.setThirdCode(PVProducerInfoEnum.TANYIN.getCode());
jpInverterElectricity.setThirdStationId(jpInverter.getThirdStationId());
// jpInverterElectricity.setType("直流");
jpInverterElectricity.setName(name);
// jpInverterElectricity.setVoltage(Double.valueOf(hanlderResult.get("vpv" + k1).toString()));
if (tanYinInveterInfoResultJson.get(name) != null && !"".equals(tanYinInveterInfoResultJson.get(name))) {
jpInverterElectricity.setCurrent(Double.valueOf(tanYinInveterInfoResultJson.get(name).toString()));
}
// jpInverterElectricity.setPower(Double.valueOf(hanlderResult.get("pow" + k1).toString()));
if (org.springframework.util.ObjectUtils.isEmpty(jpInverterElectricity.getSequenceNbr())) {
jpInverterElectricityMapper.insert(jpInverterElectricity);
} else {
jpInverterElectricityMapper.updateById(jpInverterElectricity);
}
}
HYGFJPInverterElecHistory hygfjpInverterElecHistory = new HYGFJPInverterElecHistory();
hygfjpInverterElecHistory.setThirdStationId(jpInverter.getThirdStationId());
hygfjpInverterElecHistory.setCreatedTime(System.currentTimeMillis());
hygfjpInverterElecHistory.setSnCode(tanYinInveterInfoDTO.getSn());
// hygfjpInverterElecHistory.setUAcCurrent(goodWeInverterCurrentDataDto.getD().getIac1());
// hygfjpInverterElecHistory.setVAcCurrent(goodWeInverterCurrentDataDto.getD().getIac2());
// hygfjpInverterElecHistory.setWAcCurrent(goodWeInverterCurrentDataDto.getD().getIac3());
// hygfjpInverterElecHistory.setUAcVoltage(goodWeInverterCurrentDataDto.getD().getVac1());
// hygfjpInverterElecHistory.setVAcVoltage(goodWeInverterCurrentDataDto.getD().getVac2());
// hygfjpInverterElecHistory.setWAcVoltage(goodWeInverterCurrentDataDto.getD().getVac3());
hygfjpInverterElecHistory.setThirdCode(PVProducerInfoEnum.TANYIN.getCode());
hygfjpInverterElecHistory.setTime(System.currentTimeMillis());
hygfjpInverterElecHistoryMapper.insert(hygfjpInverterElecHistory);
// 逆变器历史
String today = DateUtil.today();
HYGFJPInverterHistory hygfjpInverterHistory = hygfjpInverterHistoryMapper
.selectOne(new QueryWrapper<HYGFJPInverterHistory>()
.eq("sn_code", tanYinInveterInfoDTO.getSn()).eq("date", today));
if (org.springframework.util.ObjectUtils.isEmpty(hygfjpInverterHistory)) {
hygfjpInverterHistory = new HYGFJPInverterHistory();
}
hygfjpInverterHistory.setDate(today);
hygfjpInverterHistory.setThirdStationId(jpInverter.getThirdStationId());
hygfjpInverterHistory.setInverterId(jpInverter.getId());
hygfjpInverterHistory.setSnCode(tanYinInveterInfoDTO.getSn());
hygfjpInverterHistory.setThirdCode(PVProducerInfoEnum.TANYIN.getCode());
if (com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotEmpty(jpInverter.getCapacity())
&& com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotEmpty(jpInverter.getDayPowerGeneration())) {
hygfjpInverterHistory
.setGenerationHours(jpInverter.getDayPowerGeneration() / jpInverter.getCapacity());
}
// hygfjpInverterHistory.setPowerGeneration(tanYinInveterInfoDTO.getWatt());
if (org.springframework.util.ObjectUtils.isEmpty(hygfjpInverterHistory.getCreatedTime())) {
hygfjpInverterHistory.setCreatedTime(System.currentTimeMillis());
hygfjpInverterHistoryMapper.insert(hygfjpInverterHistory);
} else {
hygfjpInverterHistoryMapper.insert(hygfjpInverterHistory);
}
// -----------------------户用光伏日报表----------------------
TdHYGFInverterDayGenerate tdHYGFInverterDayGenerate = new TdHYGFInverterDayGenerate();
tdHYGFInverterDayGenerate.setCreatedTime(System.currentTimeMillis());
tdHYGFInverterDayGenerate.setName(jpInverter.getName());
tdHYGFInverterDayGenerate.setThirdStationId(String.valueOf(jpInverter.getThirdStationId()));
tdHYGFInverterDayGenerate.setSnCode(jpInverter.getSnCode().trim());
tdHYGFInverterDayGenerate.setWorkStatus(jpInverter.getState());
tdHYGFInverterDayGenerate.setDayGen(jpInverter.getDayPowerGeneration());
tdHYGFInverterDayGenerate.setMonthGen(jpInverter.getMonthPowerGeneration());
tdHYGFInverterDayGenerate.setYearGen(jpInverter.getYearPowerGeneration());
tdHYGFInverterDayGenerate.setTotalGen(jpInverter.getTotalPowerGeneration());
tdHYGFInverterDayGenerate.setIgbtTemp(Double.parseDouble(tanYinInveterInfoDTO.getTemperature()));
tdHYGFInverterDayGenerate.setIncome(null);
if (com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotEmpty(jpInverter.getCapacity())
&& com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotEmpty(jpInverter.getDayPowerGeneration())) {
tdHYGFInverterDayGenerate
.setFullhour(jpInverter.getDayPowerGeneration() / jpInverter.getCapacity());
}
if (jpStation != null) {
tdHYGFInverterDayGenerate.setAmosCompanyCode(jpStation.getAmosCompanyCode());
tdHYGFInverterDayGenerate.setRegionalCompaniesCode(jpStation.getRegionalCompaniesCode());
tdHYGFInverterDayGenerate.setStationName(jpStation.getName());
tdHYGFInverterDayGenerate.setStationState(jpStation.getState());
}
tdHYGFInverterDayGenerateMapper.insert(tdHYGFInverterDayGenerate);
// 户用场站月发电量
Date today1 = new Date();
TdHYGFInverterMonthGenerate tdHYGFInverterMonthGenerate = tdHYGFInverterMonthGenerateMapper
.selectOne(new QueryWrapper<TdHYGFInverterMonthGenerate>()
.eq("third_station_id", jpInverter.getThirdStationId())
.eq("sn_code", jpInverter.getSnCode())
.eq("day_time", DateUtil.format(today1, "yyyy-MM-dd"))
.eq("year_month", DateUtil.format(today1, "yyyy-MM")));
if (org.springframework.util.ObjectUtils.isEmpty(tdHYGFInverterMonthGenerate)) {
tdHYGFInverterMonthGenerate = new TdHYGFInverterMonthGenerate();
}
tdHYGFInverterMonthGenerate.setThirdStationId(jpInverter.getThirdStationId());
tdHYGFInverterMonthGenerate.setSnCode(jpInverter.getSnCode().trim());
tdHYGFInverterMonthGenerate.setName(jpInverter.getName());
tdHYGFInverterMonthGenerate.setDayTime(DateUtil.format(today1, "yyyy-MM-dd"));
tdHYGFInverterMonthGenerate.setYearMonth(DateUtil.format(today1, "yyyy-MM"));
tdHYGFInverterMonthGenerate.setGenerate(jpInverter.getDayPowerGeneration());
// 新加
if (jpStation != null) {
tdHYGFInverterMonthGenerate.setAmosCompanyCode(jpStation.getAmosCompanyCode());
tdHYGFInverterMonthGenerate.setRegionalCompaniesCode(jpStation.getRegionalCompaniesCode());
tdHYGFInverterMonthGenerate.setStationName(jpStation.getName());
tdHYGFInverterMonthGenerate.setStationState(jpStation.getState());
}
if (com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotEmpty(jpInverter.getCapacity())
&& com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotEmpty(jpInverter.getDayPowerGeneration())) {
tdHYGFInverterMonthGenerate
.setFullhour(jpInverter.getDayPowerGeneration() / jpInverter.getCapacity());
}
if (org.springframework.util.ObjectUtils.isEmpty(tdHYGFInverterMonthGenerate.getCreatedTime())) {
tdHYGFInverterMonthGenerate.setCreatedTime(System.currentTimeMillis());
tdHYGFInverterMonthGenerateMapper.insert(tdHYGFInverterMonthGenerate);
} else {
tdHYGFInverterMonthGenerateMapper.insert(tdHYGFInverterMonthGenerate);
}
// 户用场站年发电量
TdHYGFInverterYearGenerate tdHYGFInverterYearGenerate = tdHYGFInverterYearGenerateMapper
.selectOne(new QueryWrapper<TdHYGFInverterYearGenerate>()
.eq("third_station_id", jpInverter.getThirdStationId())
.eq("sn_code", jpInverter.getSnCode())
.eq("month_time", DateUtil.format(today1, "yyyy-MM"))
.eq("year", DateUtil.format(today1, "yyyy")));
if (org.springframework.util.ObjectUtils.isEmpty(tdHYGFInverterYearGenerate)) {
tdHYGFInverterYearGenerate = new TdHYGFInverterYearGenerate();
}
tdHYGFInverterYearGenerate.setThirdStationId(jpInverter.getThirdStationId());
tdHYGFInverterYearGenerate.setSnCode(jpInverter.getSnCode().trim());
tdHYGFInverterYearGenerate.setMonthTime(DateUtil.format(today1, "yyyy-MM"));
tdHYGFInverterYearGenerate.setYear(DateUtil.format(today1, "yyyy"));
tdHYGFInverterYearGenerate.setGenerate(jpInverter.getMonthPowerGeneration());
if (com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotEmpty(jpInverter.getCapacity())
&& com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotEmpty(jpInverter.getMonthPowerGeneration())) {
tdHYGFInverterYearGenerate
.setFullhour(jpInverter.getMonthPowerGeneration() / jpInverter.getCapacity());
}
tdHYGFInverterYearGenerate.setName(jpInverter.getName());
// 新加
if (jpStation != null) {
tdHYGFInverterYearGenerate.setAmosCompanyCode(jpStation.getAmosCompanyCode());
tdHYGFInverterYearGenerate.setRegionalCompaniesCode(jpStation.getRegionalCompaniesCode());
tdHYGFInverterYearGenerate.setStationName(jpStation.getName());
tdHYGFInverterYearGenerate.setStationState(jpStation.getState());
}
if (org.springframework.util.ObjectUtils.isEmpty(tdHYGFInverterYearGenerate.getCreatedTime())) {
tdHYGFInverterYearGenerate.setCreatedTime(System.currentTimeMillis());
tdHYGFInverterYearGenerateMapper.insert(tdHYGFInverterYearGenerate);
} else {
tdHYGFInverterYearGenerateMapper.insert(tdHYGFInverterYearGenerate);
}
// 户用场站年发电量
TdHYGFInverterTotalGenerate tdHYGFInverterTotalGenerate = tdHYGFInverterTotalGenerateMapper
.selectOne(new QueryWrapper<TdHYGFInverterTotalGenerate>()
.eq("third_station_id", jpInverter.getThirdStationId())
.eq("sn_code", jpInverter.getSnCode()).eq("year_time", DateUtil.format(today1, "yyyy"))
.eq("year", DateUtil.format(today1, "yyyy")));
if (org.springframework.util.ObjectUtils.isEmpty(tdHYGFInverterTotalGenerate)) {
tdHYGFInverterTotalGenerate = new TdHYGFInverterTotalGenerate();
}
tdHYGFInverterTotalGenerate.setThirdStationId(jpInverter.getThirdStationId());
tdHYGFInverterTotalGenerate.setName(null == jpInverter.getName() ? null : jpInverter.getName());
tdHYGFInverterTotalGenerate.setSnCode(jpInverter.getSnCode().trim());
tdHYGFInverterTotalGenerate.setYearTime(DateUtil.format(today1, "yyyy"));
tdHYGFInverterTotalGenerate.setYear(DateUtil.format(today1, "yyyy"));
tdHYGFInverterTotalGenerate.setGenerate(jpInverter.getYearPowerGeneration());
if (com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotEmpty(jpInverter.getCapacity())
&& com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotEmpty(jpInverter.getYearPowerGeneration())) {
tdHYGFInverterTotalGenerate
.setFullhour(jpInverter.getYearPowerGeneration() / jpInverter.getCapacity());
}
// 新加
if (jpStation != null) {
tdHYGFInverterTotalGenerate.setAmosCompanyCode(jpStation.getAmosCompanyCode());
tdHYGFInverterTotalGenerate.setRegionalCompaniesCode(jpStation.getRegionalCompaniesCode());
tdHYGFInverterTotalGenerate.setStationName(jpStation.getName());
tdHYGFInverterTotalGenerate.setStationState(jpStation.getState());
}
if (org.springframework.util.ObjectUtils.isEmpty(tdHYGFInverterTotalGenerate.getCreatedTime())) {
tdHYGFInverterTotalGenerate.setCreatedTime(System.currentTimeMillis());
tdHYGFInverterTotalGenerateMapper.insert(tdHYGFInverterTotalGenerate);
} else {
tdHYGFInverterTotalGenerateMapper.insert(tdHYGFInverterTotalGenerate);
}
}
}
}
...@@ -9,7 +9,8 @@ public enum PVProducerInfoEnum { ...@@ -9,7 +9,8 @@ public enum PVProducerInfoEnum {
JLY("锦浪云","JLY"), JLY("锦浪云","JLY"),
KSOLAR("科士达","KSD"), KSOLAR("科士达","KSD"),
YG("阳光","YG"), YG("阳光","YG"),
HUAWEI("华为","HW"); HUAWEI("华为","HW"),
TANYIN("碳银","TY");
private String name; private String name;
......
...@@ -72,4 +72,10 @@ dataRequstScheduled.keshida=0 0/50 * * * * ...@@ -72,4 +72,10 @@ dataRequstScheduled.keshida=0 0/50 * * * *
dataRequstScheduled.Sunlight=0 0/50 * * * * dataRequstScheduled.Sunlight=0 0/50 * * * *
dataRequstScheduled.GoodWe=0 0/3 * * * * dataRequstScheduled.GoodWe=0 0/3 * * * *
dataRequstScheduled.Sofar=0 0/50 * * * * dataRequstScheduled.Sofar=0 0/50 * * * *
\ No newline at end of file
# 碳银
tanYin.api.apiUrl=https://userauth.tanwin.cn
tanYin.api.clientSecret=rKrWVa2sXsSZeNAOW43v
tanYin.api.clientKey=yx10001
dataRequestScheduled.tanYin=0 0/10 * * * *
\ No newline at end of file
package com.yeejoin.amos.boot.module.hygf.api.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
*
*
* @author system_generator
* @date 2024-07-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="HygfContractCallRecordDto", description="")
public class HygfContractCallRecordDto extends BaseDto {
private static final long serialVersionUID = 1L;
private String contractId;
private String data;
private String status;
}
...@@ -17,7 +17,7 @@ import java.time.format.DateTimeFormatter; ...@@ -17,7 +17,7 @@ import java.time.format.DateTimeFormatter;
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@TableName("td_hygf_all_power") @TableName("td_hygf_station_power_all")
public class AllPower { public class AllPower {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -26,7 +26,7 @@ public class AllPower { ...@@ -26,7 +26,7 @@ public class AllPower {
/** /**
* 第三方电站id * 第三方电站id
*/ */
@TableField("tation_id") @TableField("third_station_id")
private String thirdStationId; private String thirdStationId;
/** /**
......
...@@ -13,7 +13,7 @@ import org.springframework.data.annotation.Id; ...@@ -13,7 +13,7 @@ import org.springframework.data.annotation.Id;
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@TableName("td_hygf_station_day_generate") @TableName("td_hygf_station_generate_month")
public class DayGenerate { public class DayGenerate {
@Id @Id
private Long createdTime; private Long createdTime;
......
...@@ -14,7 +14,7 @@ import lombok.experimental.Accessors; ...@@ -14,7 +14,7 @@ import lombok.experimental.Accessors;
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@TableName("td_hygf_day_power") @TableName("td_hygf_station_power_day")
public class DayPower { public class DayPower {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -24,7 +24,7 @@ public class DayPower { ...@@ -24,7 +24,7 @@ public class DayPower {
/** /**
* 第三方电站id * 第三方电站id
*/ */
@TableField("tation_id") @TableField("third_station_id")
private String thirdStationId; private String thirdStationId;
/** /**
......
package com.yeejoin.amos.boot.module.hygf.api.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
/**
*
*
* @author system_generator
* @date 2024-07-15
*/
@Data
@EqualsAndHashCode()
@Accessors(chain = true)
@TableName("hygf_contract_call_record")
public class HygfContractCallRecord {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableField("contract_id")
private String contractId;
/**
*
*/
@TableField("data")
private String data;
/**
*
*/
@TableField("status")
private String status;
@TableField("rec_date")
private Date recDate;
}
...@@ -13,7 +13,7 @@ import org.springframework.data.annotation.Id; ...@@ -13,7 +13,7 @@ import org.springframework.data.annotation.Id;
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@TableName("td_hygf_station_month_generate") @TableName("td_hygf_station_generate_year")
public class MonthGenerate { public class MonthGenerate {
@Id @Id
private Long createdTime; private Long createdTime;
......
...@@ -17,7 +17,7 @@ import java.time.format.DateTimeFormatter; ...@@ -17,7 +17,7 @@ import java.time.format.DateTimeFormatter;
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@TableName("td_hygf_month_power") @TableName("td_hygf_station_power_month")
public class MonthPower { public class MonthPower {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -32,7 +32,7 @@ public class MonthPower { ...@@ -32,7 +32,7 @@ public class MonthPower {
/** /**
* 第三方电站id * 第三方电站id
*/ */
@TableField("tation_id") @TableField("third_station_id")
private String thirdStationId; private String thirdStationId;
/** /**
......
...@@ -13,7 +13,7 @@ import org.springframework.data.annotation.Id; ...@@ -13,7 +13,7 @@ import org.springframework.data.annotation.Id;
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@TableName("td_hygf_station_year_generate") @TableName("td_hygf_station_generate_all")
public class YearGenerate { public class YearGenerate {
@Id @Id
private Long createdTime; private Long createdTime;
......
...@@ -17,7 +17,7 @@ import java.time.format.DateTimeFormatter; ...@@ -17,7 +17,7 @@ import java.time.format.DateTimeFormatter;
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@TableName("td_hygf_year_power") @TableName("td_hygf_station_power_year")
public class YearPower { public class YearPower {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -26,7 +26,7 @@ public class YearPower { ...@@ -26,7 +26,7 @@ public class YearPower {
/** /**
* 第三方电站id * 第三方电站id
*/ */
@TableField("tation_id") @TableField("third_station_id")
private String thirdStationId; private String thirdStationId;
/** /**
......
package com.yeejoin.amos.boot.module.hygf.api.mapper;
import com.yeejoin.amos.boot.module.hygf.api.entity.HygfContractCallRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* Mapper 接口
*
* @author system_generator
* @date 2024-07-15
*/
public interface HygfContractCallRecordMapper extends BaseMapper<HygfContractCallRecord> {
}
<?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.yeejoin.amos.boot.module.hygf.api.mapper.HygfContractCallRecordMapper">
</mapper>
...@@ -31,7 +31,7 @@ import java.util.List; ...@@ -31,7 +31,7 @@ import java.util.List;
* @date 2024-01-16 * @date 2024-01-16
*/ */
@RestController @RestController
@Api(tags = "Api") @Api(tags = "并网Api")
@RequestMapping(value = "/basic-grid-acceptance") @RequestMapping(value = "/basic-grid-acceptance")
public class BasicGridAcceptanceController extends BaseController { public class BasicGridAcceptanceController extends BaseController {
......
...@@ -28,7 +28,7 @@ import java.util.List; ...@@ -28,7 +28,7 @@ import java.util.List;
* @date 2023-08-22 * @date 2023-08-22
*/ */
@RestController @RestController
@Api(tags = "Api") @Api(tags = "合同模板Api")
@RequestMapping(value = "/contract-template") @RequestMapping(value = "/contract-template")
public class ContractTemplateController extends BaseController { public class ContractTemplateController extends BaseController {
......
...@@ -33,7 +33,7 @@ import org.typroject.tyboot.core.foundation.enumeration.UserType; ...@@ -33,7 +33,7 @@ import org.typroject.tyboot.core.foundation.enumeration.UserType;
* @date 2024-04-01 * @date 2024-04-01
*/ */
@RestController @RestController
@Api(tags = "Api") @Api(tags = "投融资Api")
@RequestMapping(value = "/financing-info") @RequestMapping(value = "/financing-info")
public class FinancingInfoController extends BaseController { public class FinancingInfoController extends BaseController {
......
...@@ -46,7 +46,7 @@ import java.util.stream.Collectors; ...@@ -46,7 +46,7 @@ import java.util.stream.Collectors;
* @date 2023-08-21 * @date 2023-08-21
*/ */
@RestController @RestController
@Api(tags = "Api") @Api(tags = "农户合同Api")
@RequestMapping(value = "/household-contract") @RequestMapping(value = "/household-contract")
@Slf4j @Slf4j
public class HouseholdContractController extends BaseController { public class HouseholdContractController extends BaseController {
......
...@@ -24,7 +24,7 @@ import org.typroject.tyboot.core.foundation.enumeration.UserType; ...@@ -24,7 +24,7 @@ import org.typroject.tyboot.core.foundation.enumeration.UserType;
* @date 2024-06-18 * @date 2024-06-18
*/ */
@RestController @RestController
@Api(tags = "投融审核表Api") @Api(tags = "发货管理审核表Api")
@RequestMapping(value = "/hygf-preparation-money-auditing") @RequestMapping(value = "/hygf-preparation-money-auditing")
public class HygfPreparationMoneyAuditingController extends BaseController { public class HygfPreparationMoneyAuditingController extends BaseController {
......
...@@ -24,7 +24,7 @@ import org.typroject.tyboot.core.foundation.enumeration.UserType; ...@@ -24,7 +24,7 @@ import org.typroject.tyboot.core.foundation.enumeration.UserType;
* @date 2024-07-02 * @date 2024-07-02
*/ */
@RestController @RestController
@Api(tags = "Api") @Api(tags = "发货管理 补货单Api")
@RequestMapping(value = "/hygf-replenishment") @RequestMapping(value = "/hygf-replenishment")
public class HygfReplenishmentController extends BaseController { public class HygfReplenishmentController extends BaseController {
......
...@@ -27,7 +27,7 @@ import java.util.Map; ...@@ -27,7 +27,7 @@ import java.util.Map;
* @date 2023-07-15 * @date 2023-07-15
*/ */
@RestController @RestController
@Api(tags = "Api") @Api(tags = "电站管理Api")
@RequestMapping(value = "/power-station") @RequestMapping(value = "/power-station")
public class PowerStationController extends BaseController { public class PowerStationController extends BaseController {
......
...@@ -88,6 +88,8 @@ public class QiyuesuoController extends BaseController { ...@@ -88,6 +88,8 @@ public class QiyuesuoController extends BaseController {
ContractFillMapper contractFillMapper; ContractFillMapper contractFillMapper;
@Autowired @Autowired
PeasantHouseholdServiceImpl peasantHouseholdServiceImpl; PeasantHouseholdServiceImpl peasantHouseholdServiceImpl;
@Autowired
HygfContractCallRecordMapper hygfContractCallRecordMapper;
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false) @TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@ApiOperation(httpMethod = "POST", value = "个人token", notes = "个人token") @ApiOperation(httpMethod = "POST", value = "个人token", notes = "个人token")
...@@ -168,6 +170,16 @@ public class QiyuesuoController extends BaseController { ...@@ -168,6 +170,16 @@ public class QiyuesuoController extends BaseController {
String data = this.aesDerypt(content, secretKey); String data = this.aesDerypt(content, secretKey);
System.out.println("契约锁回调接口解析数据" + data); System.out.println("契约锁回调接口解析数据" + data);
CallbackDto CallbackDto = JSON.parseObject(data, CallbackDto.class); CallbackDto CallbackDto = JSON.parseObject(data, CallbackDto.class);
HygfContractCallRecord hygfContractCallRecord = new HygfContractCallRecord();
try {
hygfContractCallRecord.setContractId(CallbackDto.getContractId());
hygfContractCallRecord.setRecDate(new Date());
hygfContractCallRecord.setData(JSON.toJSONString(CallbackDto));
hygfContractCallRecordMapper.insert(hygfContractCallRecord);
}catch (Exception e){
log.info("合同记录表保存失败,合同id"+CallbackDto.getContractId());
}
if ("PERSONAL".equals(CallbackDto.getCallbackType())) { if ("PERSONAL".equals(CallbackDto.getCallbackType())) {
...@@ -228,7 +240,12 @@ public class QiyuesuoController extends BaseController { ...@@ -228,7 +240,12 @@ public class QiyuesuoController extends BaseController {
} }
} }
try {
hygfContractCallRecord.setStatus("success");
hygfContractCallRecordMapper.updateById(hygfContractCallRecord);
}catch (Exception e){
log.info("状态更新失败,合同id:"+CallbackDto.getContractId());
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
throw new BadRequest("契约锁回调失败"); throw new BadRequest("契约锁回调失败");
......
...@@ -36,7 +36,7 @@ import java.util.List; ...@@ -36,7 +36,7 @@ import java.util.List;
* @date 2023-08-29 * @date 2023-08-29
*/ */
@RestController @RestController
@Api(tags = "Api") @Api(tags = "区域公司Api")
@RequestMapping(value = "/regional-companies") @RequestMapping(value = "/regional-companies")
public class RegionalCompaniesController extends BaseController { public class RegionalCompaniesController extends BaseController {
......
...@@ -23,7 +23,7 @@ import java.util.List; ...@@ -23,7 +23,7 @@ import java.util.List;
* @date 2023-08-23 * @date 2023-08-23
*/ */
@RestController @RestController
@Api(tags = "Api") @Api(tags = "盖章信息Api")
@RequestMapping(value = "/seal-dictionary") @RequestMapping(value = "/seal-dictionary")
public class SealDictionaryController extends BaseController { public class SealDictionaryController extends BaseController {
......
...@@ -162,7 +162,6 @@ public class UnitInfoServiceImpl extends BaseService<UnitInfoDto,UnitInfo,UnitIn ...@@ -162,7 +162,6 @@ public class UnitInfoServiceImpl extends BaseService<UnitInfoDto,UnitInfo,UnitIn
} }
@Override @Override
@Transactional
public UnitRegisterDto registerUnit(UnitRegisterDto model) { public UnitRegisterDto registerUnit(UnitRegisterDto model) {
UnitInfoDto regUnitInfo = model.getUnitInfoDto(); UnitInfoDto regUnitInfo = model.getUnitInfoDto();
......
...@@ -226,4 +226,24 @@ cheduled.crons=0 10 0 * * ? ...@@ -226,4 +226,24 @@ cheduled.crons=0 10 0 * * ?
dealer.appcode.manage=studio_normalapp_5155413,studio_normalapp_5133538 dealer.appcode.manage=studio_normalapp_5155413,studio_normalapp_5133538
dealer.appcode.role=1767363928842571777 dealer.appcode.role=1767363928842571777
dealer.amosDealerId=1767820997374775298 dealer.amosDealerId=1767820997374775298
\ No newline at end of file
#Seata Config
seata.tx-service-group=hygf-seata
seata.service.grouplist.hygf-seata=47.92.234.253:8091
# Seata 配置
seata.enabled=true
seata.enable-auto-data-source-proxy=false
seata.datasource.autoproxy.datasource-proxy-mode=original
seata.datasource.autoproxy.enabled=true
seata.datasource.autoproxy.data-source-names=mysql
## 47环境 排除es报错引进无用配置 业务未实际使用es
spring.elasticsearch.rest.uris=http://47.92.234.253:9200
spring.elasticsearch.rest.connection-timeout=30000
spring.elasticsearch.rest.username=elastic
spring.elasticsearch.rest.password=123456
spring.elasticsearch.rest.read-timeout=30000
\ No newline at end of file
...@@ -15,7 +15,7 @@ import java.util.Map; ...@@ -15,7 +15,7 @@ import java.util.Map;
* @createDate: 2023/11/9 * @createDate: 2023/11/9
*/ */
public interface UserEmpowerMapper extends BaseMapper<StdUserEmpower> { public interface UserEmpowerMapper extends BaseMapper<StdUserEmpower> {
@Select("select company_name as companyName , level_ from privilege_company where org_code = #{orgCode}") @Select("select company_name as companyName , `level` from privilege_company where org_code = #{orgCode}")
CompanyModel getCompanyInfoByOrgCode(String orgCode); CompanyModel getCompanyInfoByOrgCode(String orgCode);
} }
...@@ -48,8 +48,8 @@ public class AnalyseController extends BaseController { ...@@ -48,8 +48,8 @@ public class AnalyseController extends BaseController {
@Autowired @Autowired
CommonServiceImpl commonServiceImpl; CommonServiceImpl commonServiceImpl;
@Autowired // @Autowired
IdxBizFanHealthIndexMapper idxBizFanHealthIndexMapper; // IdxBizFanHealthIndexMapper idxBizFanHealthIndexMapper;
@Autowired @Autowired
IAlarmInfoDetailService iAlarmInfoDetailService; IAlarmInfoDetailService iAlarmInfoDetailService;
...@@ -185,7 +185,7 @@ public class AnalyseController extends BaseController { ...@@ -185,7 +185,7 @@ public class AnalyseController extends BaseController {
@ApiOperation(httpMethod = "GET", value = "获取influxdb数据", notes = "获取influxdb数据") @ApiOperation(httpMethod = "GET", value = "获取influxdb数据", notes = "获取influxdb数据")
@GetMapping(value = "/getInfluxdbDataByConditon") @GetMapping(value = "/getInfluxdbDataByConditon")
public ResponseModel<Map<String, Object>> getInfluxdbDataByConditon(@RequestParam String stationType, public ResponseModel<Map<String, Object>> getInfluxdbDataByConditon(@RequestParam String stationType,
@RequestParam String pointId, @RequestParam(required = false) String startTime, @RequestParam(required = false) String pointId, @RequestParam(required = false) String startTime,
@RequestParam(required = false) String endTime) { @RequestParam(required = false) String endTime) {
if (!StringUtils.isEmpty(startTime)) { if (!StringUtils.isEmpty(startTime)) {
...@@ -242,12 +242,12 @@ public class AnalyseController extends BaseController { ...@@ -242,12 +242,12 @@ public class AnalyseController extends BaseController {
|| CharSequenceUtil.isEmpty(map.get("EQUIPINDEX").toString())) { || CharSequenceUtil.isEmpty(map.get("EQUIPINDEX").toString())) {
return ResponseHelper.buildResponse(new HashMap<>()); return ResponseHelper.buildResponse(new HashMap<>());
} }
LambdaQueryWrapper<IdxBizFanHealthIndex> indexLambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<FanHealthIndex> indexLambdaQueryWrapper = new LambdaQueryWrapper<>();
indexLambdaQueryWrapper.eq(IdxBizFanHealthIndex::getStation, map.get("STATION")); indexLambdaQueryWrapper.eq(FanHealthIndex::getStation, map.get("STATION"));
indexLambdaQueryWrapper.eq(IdxBizFanHealthIndex::getEquipmentName, map.get("EQUIPNAME")); indexLambdaQueryWrapper.eq(FanHealthIndex::getEquipmentName, map.get("EQUIPNAME"));
indexLambdaQueryWrapper.eq(IdxBizFanHealthIndex::getPointName, map.get("EQUIPINDEX")).last("limit 1"); indexLambdaQueryWrapper.eq(FanHealthIndex::getPointName, map.get("EQUIPINDEX")).last("limit 1");
List<IdxBizFanHealthIndex> idxBizFanHealthIndices = idxBizFanHealthIndexMapper List<FanHealthIndex> idxBizFanHealthIndices = fanHealthIndexMapper
.selectList(indexLambdaQueryWrapper); .selectList(indexLambdaQueryWrapper);
if (CollectionUtils.isNotEmpty(idxBizFanHealthIndices)) { if (CollectionUtils.isNotEmpty(idxBizFanHealthIndices)) {
pointId = idxBizFanHealthIndices.get(0).getIndexAddress(); pointId = idxBizFanHealthIndices.get(0).getIndexAddress();
......
...@@ -105,7 +105,6 @@ public class BigScreenAnalyseController extends BaseController { ...@@ -105,7 +105,6 @@ public class BigScreenAnalyseController extends BaseController {
return ResponseHelper.buildResponse(stringBigDecimalHashMap); return ResponseHelper.buildResponse(stringBigDecimalHashMap);
} }
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false) @TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@ApiOperation(httpMethod = "GET", value = "场站设备健康状态指数与趋势 - 折线图", notes = "场站设备健康状态指数与趋势 - 折线图") @ApiOperation(httpMethod = "GET", value = "场站设备健康状态指数与趋势 - 折线图", notes = "场站设备健康状态指数与趋势 - 折线图")
@GetMapping(value = "/getHealthListInfo") @GetMapping(value = "/getHealthListInfo")
......
...@@ -2,6 +2,7 @@ package com.yeejoin.amos.boot.module.jxiop.biz.controller; ...@@ -2,6 +2,7 @@ package com.yeejoin.amos.boot.module.jxiop.biz.controller;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
...@@ -45,6 +46,8 @@ import java.sql.Timestamp; ...@@ -45,6 +46,8 @@ import java.sql.Timestamp;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -770,7 +773,10 @@ public class IdxBizFanHealthIndexController extends BaseController { ...@@ -770,7 +773,10 @@ public class IdxBizFanHealthIndexController extends BaseController {
Date endDate = DateUtils.dateParse(endTimeTop); Date endDate = DateUtils.dateParse(endTimeTop);
endTimeTop = formatter.format(endDate); endTimeTop = formatter.format(endDate);
} }
//处理空指针问题 如果为空差15天前数据
if(StrUtil.isEmpty(startTimeTop)){
startTimeTop = LocalDateTime.now().minusDays(15).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
Date startDate = DateUtils.dateParse(startTimeTop); Date startDate = DateUtils.dateParse(startTimeTop);
startTimeTop = formatter.format(startDate); startTimeTop = formatter.format(startDate);
List<FanHealthIndexDay> fanHealthIndexDays = fanHealthIndexDayMapper.selectData(healthLevel, area, equipmentName, subSystem, analysisType, analysisObjType, station, pointName, indexAddress, startTimeTop, endTimeTop,null,null, orgCode); List<FanHealthIndexDay> fanHealthIndexDays = fanHealthIndexDayMapper.selectData(healthLevel, area, equipmentName, subSystem, analysisType, analysisObjType, station, pointName, indexAddress, startTimeTop, endTimeTop,null,null, orgCode);
......
package com.yeejoin.amos.boot.module.jxiop.biz.controller; package com.yeejoin.amos.boot.module.jxiop.biz.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.controller.BaseController; import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.jxiop.biz.dto.IdxBizFanHealthLevelDto; import com.yeejoin.amos.boot.module.jxiop.biz.dto.IdxBizFanHealthLevelDto;
...@@ -101,6 +102,13 @@ public class IdxBizFanHealthLevelController extends BaseController { ...@@ -101,6 +102,13 @@ public class IdxBizFanHealthLevelController extends BaseController {
return ResponseHelper.buildResponse(idxBizFanHealthLevelServiceImpl.queryForIdxBizFanHealthLevelPage(page)); return ResponseHelper.buildResponse(idxBizFanHealthLevelServiceImpl.queryForIdxBizFanHealthLevelPage(page));
} }
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@ApiOperation(httpMethod = "GET",value = "健康等级划分", notes = "健康等级划分")
@GetMapping(value = "/queryHealthLevel")
public ResponseModel<JSONObject> queryHealthLevel() {
return ResponseHelper.buildResponse(idxBizFanHealthLevelServiceImpl.queryHealthLevel());
}
/** /**
* 列表全部数据查询 * 列表全部数据查询
* *
......
package com.yeejoin.amos.boot.module.jxiop.biz.controller; package com.yeejoin.amos.boot.module.jxiop.biz.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.controller.BaseController; import com.yeejoin.amos.boot.biz.common.controller.BaseController;
...@@ -31,6 +33,8 @@ import javax.servlet.http.HttpServletRequest; ...@@ -31,6 +33,8 @@ import javax.servlet.http.HttpServletRequest;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -358,8 +362,12 @@ public class IdxBizPvHealthIndexController extends BaseController { ...@@ -358,8 +362,12 @@ public class IdxBizPvHealthIndexController extends BaseController {
List<PvHealthIndexDay> fanHealthIndexDays = pvHealthIndexDayMapper.selectData(station, requiredType, indexAddress, healthLevel, area, analysisObjType, subarray, pointName, startTimeTop, endTimeTop, equipmentName,(current-1)*size,size, orgCode); List<PvHealthIndexDay> fanHealthIndexDays = pvHealthIndexDayMapper.selectData(station, requiredType, indexAddress, healthLevel, area, analysisObjType, subarray, pointName, startTimeTop, endTimeTop, equipmentName,(current-1)*size,size, orgCode);
Map<String,Object> map = new HashMap<>(); Map<String,Object> map = new HashMap<>();
Double value=null;
if(CollectionUtil.isNotEmpty(fanHealthIndexDays)){
value = Double.parseDouble(df.format(fanHealthIndexDays.get(0).getHealthIndex()));
}
map.put("value", Double.parseDouble(df.format(fanHealthIndexDays.get(0).getHealthIndex()))); map.put("value", value);
return ResponseHelper.buildResponse(map); return ResponseHelper.buildResponse(map);
...@@ -427,7 +435,10 @@ public class IdxBizPvHealthIndexController extends BaseController { ...@@ -427,7 +435,10 @@ public class IdxBizPvHealthIndexController extends BaseController {
Date endDate =DateUtils.dateParse(endTimeTop); Date endDate =DateUtils.dateParse(endTimeTop);
endTimeTop = formatter.format(endDate); endTimeTop = formatter.format(endDate);
} }
//处理空指针问题 如果为空差15天前数据
if(StrUtil.isEmpty(startTimeTop)){
startTimeTop = LocalDateTime.now().minusDays(15).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
Date startDate = DateUtils.dateParse(startTimeTop); Date startDate = DateUtils.dateParse(startTimeTop);
startTimeTop = formatter.format(startDate); startTimeTop = formatter.format(startDate);
......
...@@ -130,6 +130,23 @@ public class TDBigScreenAnalyseController extends BaseController { ...@@ -130,6 +130,23 @@ public class TDBigScreenAnalyseController extends BaseController {
} }
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false) @TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@ApiOperation(httpMethod = "GET", value = "场站设备健康状态指数与趋势 - 仪表盘-10分钟", notes = "场站设备健康状态指数与趋势 - 仪表盘-10分钟")
@GetMapping(value = "/getHealthScoreInfoByMinute")
public ResponseModel<Map<String, Object>> getHealthScoreInfoByMinute(@RequestParam(required = false) String areaCode,
@RequestParam(required = false) String stationCode,
@RequestParam (required = false) String tableName) {
HashMap<String, Object> stringBigDecimalHashMap = new HashMap<>();
if (CharSequenceUtil.isNotEmpty(stationCode)) {
StationBasic stationBasic = stationBasicMapper.selectById(stationCode);
stationCode = stationBasic.getFanGatewayId();
stringBigDecimalHashMap.put("value", idxBizFanHealthIndexMapper.getHealthScoreInfoByStationByMinute(stationCode, tableName));
return ResponseHelper.buildResponse(stringBigDecimalHashMap);
}
stringBigDecimalHashMap.put("value",
idxBizFanHealthIndexMapper.getHealthScoreInfoByLatest(areaCode, stationCode));
return ResponseHelper.buildResponse(stringBigDecimalHashMap);
}
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@ApiOperation(httpMethod = "GET", value = "场站设备健康状态指数与趋势 - 折线图", notes = "场站设备健康状态指数与趋势 - 折线图") @ApiOperation(httpMethod = "GET", value = "场站设备健康状态指数与趋势 - 折线图", notes = "场站设备健康状态指数与趋势 - 折线图")
@GetMapping(value = "/getHealthListInfo") @GetMapping(value = "/getHealthListInfo")
public ResponseModel<Map<String, Object>> getHealthListInfo(@RequestParam(required = false) String areaCode, public ResponseModel<Map<String, Object>> getHealthListInfo(@RequestParam(required = false) String areaCode,
......
...@@ -22,12 +22,13 @@ import com.yeejoin.amos.boot.module.jxiop.biz.entity.IdxBizFanWarningRecord; ...@@ -22,12 +22,13 @@ import com.yeejoin.amos.boot.module.jxiop.biz.entity.IdxBizFanWarningRecord;
public interface IdxBizFanHealthIndexMapper extends BaseMapper<IdxBizFanHealthIndex> { public interface IdxBizFanHealthIndexMapper extends BaseMapper<IdxBizFanHealthIndex> {
BigDecimal getHealthScoreInfo(@Param("areaCode") String areaCode, @Param("stationCode") String stationCode); BigDecimal getHealthScoreInfo(@Param("areaCode") String areaCode, @Param("stationCode") String stationCode);
BigDecimal getHealthScoreInfoByLatest(@Param("areaCode") String areaCode, @Param("stationCode") String stationCode); BigDecimal getHealthScoreInfoByLatest(@Param("areaCode") String areaCode, @Param("stationCode") String stationCode);
BigDecimal getHealthScoreInfoByStation(@Param("stationCode") String stationCode, BigDecimal getHealthScoreInfoByStation(@Param("stationCode") String stationCode,
@Param("tableName") String tableName); @Param("tableName") String tableName);
BigDecimal getHealthScoreInfoByStationByMinute(@Param("stationCode") String stationCode,
@Param("tableName") String tableName);
BigDecimal getHealthScoreInfoByParam(@Param("areaCode") String areaCode, @Param("stationCode") String stationCode, BigDecimal getHealthScoreInfoByParam(@Param("areaCode") String areaCode, @Param("stationCode") String stationCode,
@Param("analysisType") String analysisType); @Param("analysisType") String analysisType);
......
...@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.jxiop.biz.entity.IdxBizFanHealthLevel; import com.yeejoin.amos.boot.module.jxiop.biz.entity.IdxBizFanHealthLevel;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/** /**
* Mapper 接口 * Mapper 接口
* *
...@@ -26,4 +29,9 @@ public interface IdxBizFanHealthLevelMapper extends BaseMapper<IdxBizFanHealthLe ...@@ -26,4 +29,9 @@ public interface IdxBizFanHealthLevelMapper extends BaseMapper<IdxBizFanHealthLe
@Param("groupLowerLimit") String groupLowerLimit, @Param("groupLowerLimit") String groupLowerLimit,
@Param("analysisObjType") String analysisObjType, @Param("analysisObjType") String analysisObjType,
@Param("healthLevel") String healthLevel); @Param("healthLevel") String healthLevel);
/**
* 查询健康等级
* @return
*/
List<Map<String, Object>> queryHealthLevel();
} }
package com.yeejoin.amos.boot.module.jxiop.biz.service.impl; package com.yeejoin.amos.boot.module.jxiop.biz.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.jxiop.biz.dto.IdxBizFanHealthLevelDto; import com.yeejoin.amos.boot.module.jxiop.biz.dto.IdxBizFanHealthLevelDto;
import com.yeejoin.amos.boot.module.jxiop.biz.entity.IdxBizFanHealthLevel; import com.yeejoin.amos.boot.module.jxiop.biz.entity.IdxBizFanHealthLevel;
...@@ -9,6 +12,7 @@ import org.springframework.stereotype.Service; ...@@ -9,6 +12,7 @@ import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService; import org.typroject.tyboot.core.rdbms.service.BaseService;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 服务实现类 * 服务实现类
...@@ -17,7 +21,7 @@ import java.util.List; ...@@ -17,7 +21,7 @@ import java.util.List;
* @date 2023-08-15 * @date 2023-08-15
*/ */
@Service @Service
public class IdxBizFanHealthLevelServiceImpl extends BaseService<IdxBizFanHealthLevelDto,IdxBizFanHealthLevel,IdxBizFanHealthLevelMapper> implements IIdxBizFanHealthLevelService { public class IdxBizFanHealthLevelServiceImpl extends BaseService<IdxBizFanHealthLevelDto, IdxBizFanHealthLevel, IdxBizFanHealthLevelMapper> implements IIdxBizFanHealthLevelService {
/** /**
* 分页查询 * 分页查询
*/ */
...@@ -31,4 +35,67 @@ public class IdxBizFanHealthLevelServiceImpl extends BaseService<IdxBizFanHealth ...@@ -31,4 +35,67 @@ public class IdxBizFanHealthLevelServiceImpl extends BaseService<IdxBizFanHealth
public List<IdxBizFanHealthLevelDto> queryForIdxBizFanHealthLevelList() { public List<IdxBizFanHealthLevelDto> queryForIdxBizFanHealthLevelList() {
return this.queryForList("" , false); return this.queryForList("" , false);
} }
/**
* 查询健康等级
* @return
*/
public JSONObject queryHealthLevel() {
List<Map<String, Object>> maps = this.baseMapper.queryHealthLevel();
JSONObject result = new JSONObject();
result.put("colModel", buildColModel());
result.put("dataGridMock", buildDataGridMock(maps));
return result;
}
private JSONObject buildDataGridMock(List<Map<String, Object>> maps) {
JSONObject result = new JSONObject();
JSONArray dataList = new JSONArray();
if (CollectionUtil.isNotEmpty(maps)) {
result.put("total", maps.size());
int i = 0;
for (Map<String, Object> map : maps) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("_id", ++i);
jsonObject.put("title2_measure", map.get("GROUP_UPPER_LIMIT"));
jsonObject.put("title3_measure", map.get("GROUP_LOWER_LIMIT"));
dataList.add(jsonObject);
}
}
result.put("totalPage", 1);
result.put("pageSize", 10);
result.put("current", 1);
result.put("pagination", false);
result.put("dataList", dataList);
return result;
}
private JSONArray buildColModel() {
JSONArray result = new JSONArray();
JSONObject dengji = new JSONObject();
dengji.put("fid", "title1_measure");
dengji.put("dataIndex", "title1_measure");
dengji.put("name", "title1");
dengji.put("title", "健康等级");
dengji.put("type", "dataGrid");
dengji.put("key", "title1_measure");
JSONObject sx = new JSONObject();
sx.put("fid", "title2_measure");
sx.put("dataIndex", "title2_measure");
sx.put("name", "title2");
sx.put("title", "区间上限值");
sx.put("type", "dataGrid");
sx.put("key", "title2_measure");
JSONObject xx = new JSONObject();
xx.put("fid", "title3_measure");
xx.put("dataIndex", "title3_measure");
xx.put("name", "title3");
xx.put("title", "区间下限值");
xx.put("type", "dataGrid");
xx.put("key", "title3_measure");
result.add(dengji);
result.add(sx);
result.add(xx);
return result;
}
} }
\ No newline at end of file
...@@ -11,7 +11,7 @@ import java.util.Map; ...@@ -11,7 +11,7 @@ import java.util.Map;
public interface FanHealthIndexDayMapper extends BaseMapper<FanHealthIndexDay> { public interface FanHealthIndexDayMapper extends BaseMapper<FanHealthIndexDay> {
@Select("<script>"+ @Select("<script>"+
"SELECT `health_index` AS healthIndex,anomaly,rec_date as recDate, `health_index` AS `value`, substr(analysis_time,1,10) as analysisTime, station,equipment_name AS equipmentName,point_name as pointName, ( CASE HEALTH_LEVEL WHEN '危险' THEN 3 WHEN '警告' THEN 2 WHEN '注意' THEN 1 ELSE 0 END ) AS status FROM analysis_data.fan_health_index_day WHERE analysis_obj_type = #{analysisObjType} and org_code is not null" + "SELECT distinct `health_index` AS healthIndex,anomaly,rec_date as recDate, `health_index` AS `value`, substr(analysis_time,1,10) as analysisTime, station,equipment_name AS equipmentName,point_name as pointName, ( CASE HEALTH_LEVEL WHEN '危险' THEN 3 WHEN '警告' THEN 2 WHEN '注意' THEN 1 ELSE 0 END ) AS status FROM analysis_data.fan_health_index_day WHERE analysis_obj_type = #{analysisObjType} and org_code is not null" +
"<if test='endTimeTop!= null'> and ts &lt;= #{endTimeTop} </if> " + "<if test='endTimeTop!= null'> and ts &lt;= #{endTimeTop} </if> " +
"<if test='startTimeTop!= null'> and ts &gt;= #{startTimeTop} </if> " + "<if test='startTimeTop!= null'> and ts &gt;= #{startTimeTop} </if> " +
"<if test='area!= null'> AND area = #{area} </if> " + "<if test='area!= null'> AND area = #{area} </if> " +
...@@ -34,7 +34,8 @@ public interface FanHealthIndexDayMapper extends BaseMapper<FanHealthIndexDay> { ...@@ -34,7 +34,8 @@ public interface FanHealthIndexDayMapper extends BaseMapper<FanHealthIndexDay> {
@Select("<script>"+ @Select("<script>"+
"SELECT count(1) FROM analysis_data.fan_health_index_day WHERE analysis_obj_type = #{analysisObjType} and org_code is not null" + "SELECT count(1) from ( SELECT distinct `health_index` AS healthIndex,anomaly,rec_date as recDate, `health_index` AS `value`, substr(analysis_time,1,10) as analysisTime, station,equipment_name AS equipmentName,point_name as pointName,\n" +
"( CASE HEALTH_LEVEL WHEN '危险' THEN 3 WHEN '警告' THEN 2 WHEN '注意' THEN 1 ELSE 0 END ) AS status FROM analysis_data.fan_health_index_day WHERE analysis_obj_type = #{analysisObjType} and org_code is not null" +
"<if test='endTimeTop!= null'> and ts &lt;= #{endTimeTop} </if> " + "<if test='endTimeTop!= null'> and ts &lt;= #{endTimeTop} </if> " +
"<if test='startTimeTop!= null'> and ts &gt;= #{startTimeTop} </if> " + "<if test='startTimeTop!= null'> and ts &gt;= #{startTimeTop} </if> " +
"<if test='area!= null'> AND area = #{area} </if> " + "<if test='area!= null'> AND area = #{area} </if> " +
...@@ -44,7 +45,7 @@ public interface FanHealthIndexDayMapper extends BaseMapper<FanHealthIndexDay> { ...@@ -44,7 +45,7 @@ public interface FanHealthIndexDayMapper extends BaseMapper<FanHealthIndexDay> {
"<if test='healthLevel!= null'>AND health_level = #{healthLevel} </if>" + "<if test='healthLevel!= null'>AND health_level = #{healthLevel} </if>" +
"<if test='subSystem!= null'>AND sub_system = #{subSystem} </if> " + "<if test='subSystem!= null'>AND sub_system = #{subSystem} </if> " +
"<if test='equipmentName!= null'>AND equipment_name = #{equipmentName} </if>" + "<if test='equipmentName!= null'>AND equipment_name = #{equipmentName} </if>" +
"<if test='orgCode!= null'>AND org_code like '${orgCode}' </if>" + "<if test='orgCode!= null'>AND org_code like '${orgCode}' </if>)" +
"</script>") "</script>")
int selectDataTotal(@Param("healthLevel")String healthLevel,@Param("area")String area,@Param("equipmentName")String equipmentName,@Param("subSystem")String subSystem,@Param("analysisType")String analysisType,@Param("analysisObjType")String analysisObjType,@Param("station")String station,@Param("pointName")String pointName, @Param("indexAddress")String indexAddress,@Param("startTimeTop") String startTimeTop, @Param("endTimeTop")String endTimeTop, @Param("orgCode")String orgCode); int selectDataTotal(@Param("healthLevel")String healthLevel,@Param("area")String area,@Param("equipmentName")String equipmentName,@Param("subSystem")String subSystem,@Param("analysisType")String analysisType,@Param("analysisObjType")String analysisObjType,@Param("station")String station,@Param("pointName")String pointName, @Param("indexAddress")String indexAddress,@Param("startTimeTop") String startTimeTop, @Param("endTimeTop")String endTimeTop, @Param("orgCode")String orgCode);
......
...@@ -11,7 +11,7 @@ import java.util.Map; ...@@ -11,7 +11,7 @@ import java.util.Map;
public interface PvHealthIndexDayMapper extends BaseMapper<PvHealthIndexDay> { public interface PvHealthIndexDayMapper extends BaseMapper<PvHealthIndexDay> {
@Select("<script>"+ @Select("<script>"+
"SELECT `health_index` AS healthIndex,rec_date as recDate, `health_index` AS `value`, rec_date AS recDate, anomaly, substr(analysis_time,1,10) as analysisTime,station,equipment_name AS equipmentName, point_name as pointName, index_address as indexAddress, ( CASE HEALTH_LEVEL WHEN '危险' THEN 3 WHEN '警告' THEN 2 WHEN '注意' THEN 1 ELSE 0 END ) AS status" + "SELECT distinct `health_index` AS healthIndex,rec_date as recDate, `health_index` AS `value`, rec_date AS recDate, anomaly, substr(analysis_time,1,10) as analysisTime,station,equipment_name AS equipmentName, point_name as pointName, index_address as indexAddress, ( CASE HEALTH_LEVEL WHEN '危险' THEN 3 WHEN '警告' THEN 2 WHEN '注意' THEN 1 ELSE 0 END ) AS status" +
" FROM analysis_data.pv_health_index_day WHERE analysis_obj_type = #{analysisObjType} and org_code is not null" + " FROM analysis_data.pv_health_index_day WHERE analysis_obj_type = #{analysisObjType} and org_code is not null" +
"<if test='endTimeTop!= null'> and ts &lt;= #{endTimeTop} </if> " + "<if test='endTimeTop!= null'> and ts &lt;= #{endTimeTop} </if> " +
"<if test='startTimeTop!= null'> and ts &gt;= #{startTimeTop} </if> " + "<if test='startTimeTop!= null'> and ts &gt;= #{startTimeTop} </if> " +
...@@ -42,7 +42,7 @@ public interface PvHealthIndexDayMapper extends BaseMapper<PvHealthIndexDay> { ...@@ -42,7 +42,7 @@ public interface PvHealthIndexDayMapper extends BaseMapper<PvHealthIndexDay> {
@Select("<script>"+ @Select("<script>"+
"SELECT count(1)" + "SELECT count(1) FROM (SELECT distinct `health_index` AS healthIndex,rec_date as recDate, `health_index` AS `value`, anomaly, substr(analysis_time,1,10) as analysisTime,station,equipment_name AS equipmentName, point_name as pointName, index_address as indexAddress, ( CASE HEALTH_LEVEL WHEN '危险' THEN 3 WHEN '警告' THEN 2 WHEN '注意' THEN 1 ELSE 0 END ) AS status" +
" FROM analysis_data.pv_health_index_day WHERE analysis_obj_type = #{analysisObjType} and org_code is not null" + " FROM analysis_data.pv_health_index_day WHERE analysis_obj_type = #{analysisObjType} and org_code is not null" +
"<if test='endTimeTop!= null'> and ts &lt;= #{endTimeTop} </if> " + "<if test='endTimeTop!= null'> and ts &lt;= #{endTimeTop} </if> " +
"<if test='startTimeTop!= null'> and ts &gt;= #{startTimeTop} </if> " + "<if test='startTimeTop!= null'> and ts &gt;= #{startTimeTop} </if> " +
...@@ -54,7 +54,7 @@ public interface PvHealthIndexDayMapper extends BaseMapper<PvHealthIndexDay> { ...@@ -54,7 +54,7 @@ public interface PvHealthIndexDayMapper extends BaseMapper<PvHealthIndexDay> {
"<if test='subarray!= null'>AND subarray = #{subarray} </if> " + "<if test='subarray!= null'>AND subarray = #{subarray} </if> " +
"<if test='equipmentName!= null'>AND equipment_name = #{equipmentName} </if>" + "<if test='equipmentName!= null'>AND equipment_name = #{equipmentName} </if>" +
// "<if test='gatewayIds != null and gatewayIds.size() > 0'>AND GATEWAY_ID IN <foreach collection='gatewayIds' item='gatewayId' open='(' separator=',' close=')'>#{gatewayId}</foreach></if>" + // "<if test='gatewayIds != null and gatewayIds.size() > 0'>AND GATEWAY_ID IN <foreach collection='gatewayIds' item='gatewayId' open='(' separator=',' close=')'>#{gatewayId}</foreach></if>" +
"<if test='orgCode!= null'>AND org_code like '${orgCode}' </if>" + "<if test='orgCode!= null'>AND org_code like '${orgCode}' </if>)" +
"</script>") "</script>")
int selectDataTotal(@Param("station")String station,@Param("analysisType")String analysisType,@Param("indexAddress")String indexAddress,@Param("healthLevel")String healthLevel,@Param("area")String area,@Param("analysisObjType")String analysisObjType, @Param("subarray")String subarray, @Param("pointName")String pointName,@Param("startTimeTop") String startTimeTop, @Param("endTimeTop")String endTimeTop, @Param("equipmentName")String equipmentName,@Param("orgCode") String orgCode); int selectDataTotal(@Param("station")String station,@Param("analysisType")String analysisType,@Param("indexAddress")String indexAddress,@Param("healthLevel")String healthLevel,@Param("area")String area,@Param("analysisObjType")String analysisObjType, @Param("subarray")String subarray, @Param("pointName")String pointName,@Param("startTimeTop") String startTimeTop, @Param("endTimeTop")String endTimeTop, @Param("equipmentName")String equipmentName,@Param("orgCode") String orgCode);
......
...@@ -131,7 +131,7 @@ ...@@ -131,7 +131,7 @@
<where> <where>
ANALYSIS_TYPE = '按天' ANALYSIS_TYPE = '按天'
<!-- AND DATE_ADD(DATE_FORMAT( REC_DATE, '%Y-%m-%d' ),INTERVAL 1 DAY) = CURRENT_DATE--> <!-- AND DATE_ADD(DATE_FORMAT( REC_DATE, '%Y-%m-%d' ),INTERVAL 1 DAY) = CURRENT_DATE-->
AND CURRENT_DATE = get_time_add(1,'DAY') AND DATE_FORMAT( REC_DATE, '%Y-%m-%d' ) = get_time_sub(1,'DAY')
<if test="stationCode != null and stationCode != ''"> <if test="stationCode != null and stationCode != ''">
AND GATEWAY_ID = #{stationCode} AND GATEWAY_ID = #{stationCode}
AND ANALYSIS_OBJ_TYPE = '场站' AND ANALYSIS_OBJ_TYPE = '场站'
...@@ -139,6 +139,21 @@ ...@@ -139,6 +139,21 @@
</where> </where>
limit 1 limit 1
</select> </select>
<select id="getHealthScoreInfoByStationByMinute" resultType="java.math.BigDecimal">
SELECT
round(IFNULL( HEALTH_INDEX , 100 ), 1) AS healthIndex
FROM
${tableName}
<where>
ANALYSIS_TYPE = '按10分钟'
<if test="stationCode != null and stationCode != ''">
AND GATEWAY_ID = #{stationCode}
AND ANALYSIS_OBJ_TYPE = '场站'
</if>
</where>
order by REC_DATE DESC
limit 1
</select>
<select id="getHealthListInfo" resultType="java.util.Map"> <select id="getHealthListInfo" resultType="java.util.Map">
SELECT SELECT
CEILING(IFNULL( AVG( HEALTH_INDEX ), 100 )) AS avgHealthIndex, CEILING(IFNULL( AVG( HEALTH_INDEX ), 100 )) AS avgHealthIndex,
......
...@@ -27,4 +27,8 @@ ...@@ -27,4 +27,8 @@
ANALYSIS_OBJ_TYPE = #{analysisObjType} ANALYSIS_OBJ_TYPE = #{analysisObjType}
AND HEALTH_LEVEL = #{healthLevel} AND HEALTH_LEVEL = #{healthLevel}
</update> </update>
<select id="queryHealthLevel" resultType="java.util.Map">
SELECT * FROM idx_biz_fan_health_level where ANALYSIS_OBJ_TYPE = '全域' ORDER BY GROUP_UPPER_LIMIT DESC
</select>
</mapper> </mapper>
...@@ -490,9 +490,10 @@ public class MonitorFanIdxController extends BaseController { ...@@ -490,9 +490,10 @@ public class MonitorFanIdxController extends BaseController {
SimpleDateFormat myFmt2 = new SimpleDateFormat("yyyy"); SimpleDateFormat myFmt2 = new SimpleDateFormat("yyyy");
String monthy = myFmt2.format(new Date()); String monthy = myFmt2.format(new Date());
QueryWrapper<StationPlan> wrapper = new QueryWrapper<>(); QueryWrapper<StationPlan> wrapper = new QueryWrapper<>();
wrapper.select(" monthly ,sum(value) value "); wrapper.select("sum(value) as value ,monthly");
wrapper.eq("year", monthy); wrapper.eq("year", monthy);
wrapper.eq("station_basic_id", stationBasic.getSequenceNbr()); wrapper.eq("station_basic_id", stationBasic.getSequenceNbr());
wrapper.groupBy("monthly");
List<Map<String, Object>> list1 = StationPlanMapper.selectMaps(wrapper); List<Map<String, Object>> list1 = StationPlanMapper.selectMaps(wrapper);
Double sumValue = list1 != null && !list1.isEmpty() ? (Double) list1.get(0).get("value") : 0; Double sumValue = list1 != null && !list1.isEmpty() ? (Double) list1.get(0).get("value") : 0;
......
package com.yeejoin.amos.boot.module.jxiop.biz.controller;
import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.IdPasswordAuthModel;
import com.yeejoin.amos.feign.privilege.util.DesUtil;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.doc.TycloudResource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.HashMap;
/**
* TODO 临时方案,后续要优化该方案
*
* @ProjectName amos-qms
* @Author yangyang
* @CreateTime 2024-02-20 10:29
* @Description
**/
@RestController
@TycloudResource(module = "OAuth", value = "OAuth")
@RequestMapping(value = "/bigscreen/oauth")
@Api(tags = "大屏对接")
@Slf4j
public class OAuthResource {
public static final String SECRETKEY = "qaz";
private final static String AUTHORIZE = "http://%s/authorize?redirect_uri=%s";
private final static String AUTOLOGIN = "http://%s/autologin?token=%s&userId=%s&redirectURI=%s";
private final static String BIGSCREEN = "/vizagfun/jepc?appId=jepc1&top=monitor&bottom=ovarall";
@Value("${appKey:AMOS_ADMIN}")
private String APP_KEY;
@Value("${product:AMOS-WEB-ADMIN}")
private String PRODUCT;
@Value("${redirect.host:iiet-jepcc.powerchina.cn:8088}")
private String host;
@TycloudOperation(needAuth = false, ApiLevel = UserType.PUBLIC)
@GetMapping("/redirect")
public void getAuth(@RequestParam("loginId") String loginId, @RequestParam("password") String password, HttpServletRequest request, HttpServletResponse response) throws Exception {
if (ValidationUtil.isEmpty(loginId) || ValidationUtil.isEmpty(password)) {
response.sendRedirect(String.format(AUTHORIZE, host, getRedirectURI(null)));
}
String redirectUrl;
// 已取得认证用户信息,执行相应操作…
RequestContext.setAppKey(APP_KEY);
RequestContext.setProduct(PRODUCT);
// 登录
IdPasswordAuthModel idPasswordAuthModel = new IdPasswordAuthModel();
idPasswordAuthModel.setLoginId(loginId);
idPasswordAuthModel.setPassword(password);
FeignClientResult<HashMap<String, Object>> feignClientResult = null;
try {
feignClientResult = Privilege.authClient.idpassword(idPasswordAuthModel);
} catch (Exception e) {
e.printStackTrace();
}
if (feignClientResult == null || feignClientResult.getStatus() != 200) {
redirectUrl = String.format(AUTHORIZE, host, getRedirectURI(null));
log.info("用户[{}]未在平台创建。。。", loginId);
response.sendRedirect(redirectUrl);
}
String userId = (String) feignClientResult.getResult().get("userId");
String amosToken = (String) feignClientResult.getResult().get("token");
redirectUrl = String.format(AUTOLOGIN, host, amosToken, userId, getRedirectURI(BIGSCREEN));
log.info("重定向访问地址:{}", redirectUrl);
response.sendRedirect(redirectUrl);
}
public String getRedirectURI(String redirectUrl) {
if (StringUtils.isEmpty(redirectUrl)) {
return "";
}
return URLEncoder.encode(redirectUrl);
}
}
...@@ -10,7 +10,7 @@ import java.util.Map; ...@@ -10,7 +10,7 @@ import java.util.Map;
public interface PrivilegeCompanyMapper extends BaseMapper<PrivilegeCompany> { public interface PrivilegeCompanyMapper extends BaseMapper<PrivilegeCompany> {
@Select("select SEQUENCE_NBR as sequenceNbr,ORG_CODE as orgCode,COMPANY_NAME as companyName ,LEVEL from privilege_company where COMPANY_TYPE = 'region' and IS_DELETED = 0 ") @Select("select SEQUENCE_NBR as sequenceNbr,ORG_CODE as orgCode,COMPANY_NAME as companyName ,`LEVEL` from privilege_company where COMPANY_TYPE = 'region' and IS_DELETED = 0 ")
public List<PrivilegeCompany> getAreaCompany(); public List<PrivilegeCompany> getAreaCompany();
......
...@@ -98,4 +98,7 @@ spring.activemq.password=admin ...@@ -98,4 +98,7 @@ spring.activemq.password=admin
spring.jms.pub-sub-domain=false spring.jms.pub-sub-domain=false
myqueue=amos.privilege.v1.JXIOP.AQSC_FDGL.userBusiness myqueue=amos.privilege.v1.JXIOP.AQSC_FDGL.userBusiness
modifypasswordqueue= amos.privilege.v1.JXIOP.AMOS_ADMIN.modifyPassword modifypasswordqueue= amos.privilege.v1.JXIOP.AMOS_ADMIN.modifyPassword
yth.qg.id=1 yth.qg.id=1
\ No newline at end of file emqx.client-user-name=admin
emqx.client-password=public
logic=false
\ No newline at end of file
...@@ -19,11 +19,23 @@ ...@@ -19,11 +19,23 @@
<groupId>com.amosframework.boot</groupId> <groupId>com.amosframework.boot</groupId>
<artifactId>amos-boot-module-common-biz</artifactId> <artifactId>amos-boot-module-common-biz</artifactId>
<version>${amos-biz-boot.version}</version> <version>${amos-biz-boot.version}</version>
<exclusions>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
</exclusion>
</exclusions>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.amosframework.boot</groupId> <groupId>com.amosframework.boot</groupId>
<artifactId>amos-boot-biz-common</artifactId> <artifactId>amos-boot-biz-common</artifactId>
<version>1.0.0</version> <version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
</exclusion>
</exclusions>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.amosframework.boot</groupId> <groupId>com.amosframework.boot</groupId>
...@@ -36,6 +48,11 @@ ...@@ -36,6 +48,11 @@
<artifactId>hutool-all</artifactId> <artifactId>hutool-all</artifactId>
<version>5.7.22</version> <version>5.7.22</version>
</dependency> </dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15to18</artifactId>
<version>1.69</version>
</dependency>
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>org.influxdb</groupId>--> <!-- <groupId>org.influxdb</groupId>-->
<!-- <artifactId>influxdb-java</artifactId>--> <!-- <artifactId>influxdb-java</artifactId>-->
......
package com.yeejoin.amos.boot.module.jxiop.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity.PvDeviceDataEntity;
public interface PvDeviceDataMapper extends BaseMapper<PvDeviceDataEntity> {
}
package com.yeejoin.amos.boot.module.jxiop.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity.PvStationDataEntity;
public interface PvStationDataMapper extends BaseMapper<PvStationDataEntity> {
}
package com.yeejoin.amos.boot.module.jxiop.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity.StationDailyDataEntity;
public interface StationDailyDataMapper extends BaseMapper<StationDailyDataEntity> {
}
package com.yeejoin.amos.boot.module.jxiop.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity.WindDeviceDataEntity;
public interface WindDeviceDataMapper extends BaseMapper<WindDeviceDataEntity> {
}
package com.yeejoin.amos.boot.module.jxiop.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity.WindStationDataEntity;
public interface WindStationDataMapper extends BaseMapper<WindStationDataEntity> {
}
package com.yeejoin.amos.boot.module.jxiop.biz.controller;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.factory.JXDZExecute;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
@RestController
@RequestMapping(value = "/jxdz")
public class JXDZExecuteController {
@Autowired
JXDZExecute jxdzExecute;
@TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
@GetMapping("/testDay")
public String testDay() {
jxdzExecute.dayInterface();
return "Success";
}
@TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
@GetMapping("/testHour")
public String testHour() {
jxdzExecute.hourInterface();
return "Success";
}
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.Enum;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum JXDZAccessTypeEnum {
CAIJI(1, "采集"),
BULU(2, "补录"),
;
private Integer code;
private String remark;
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.Enum;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum JXDZCodeEnum {
XZ("W005", "夏造风电站"),
GF("P001", "泰和前进光伏电站"),
;
private String code;
private String remark;
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.Enum;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum JXDZDataTypeEnum {
FDZJC(1, "风电站监测数据"),
GFDZJC(2, "光伏电站监测数据"),
FDZSBJC(3, "风电站设备监测数据"),
GFDZSBJC(4, "光伏电站设备监测数据"),
DZMTSJ(5, "电站每天数据包括:运维、节能减排、发电效率"),
;
private Integer code;
private String remark;
public static JXDZDataTypeEnum getEnumByCode(Integer code) {
for (JXDZDataTypeEnum jxdzDataTypeEnum : JXDZDataTypeEnum.values()) {
if (jxdzDataTypeEnum.getCode().equals(code)) {
return jxdzDataTypeEnum;
}
}
return null;
}
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName(value = "jxdz_pv_device_data", autoResultMap = true)
public class PvDeviceDataEntity extends BaseEntity {
@TableField("code")
private String code;
@TableField("name")
private String name;
/**
* 毫秒级别时间
*/
@TableField("date_time")
private Long dateTime;
/**
*日发电量
*/
@TableField("generation_daily")
private Double GenerationDaily;
/**
*月发电量
*/
@TableField("generation_month")
private Double GenerationMonth;
/**
*年发电量
*/
@TableField("generation_year")
private Double GenerationYear;
/**
*累计发电量
*/
@TableField("generation_gross")
private Double GenerationGross;
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName(value = "jxdz_pv_station_data", autoResultMap = true)
public class PvStationDataEntity extends BaseEntity {
@TableField("code")
private String code;
@TableField("name")
private String name;
/**
* 毫秒级别时间
*/
@TableField("date_time")
private Long dateTime;
/**
*发电功率
*/
@TableField("generation_power")
private Double GenerationPower;
/**
*总辐射
*/
@TableField("total_radiation")
private Double TotalRadiation;
/**
*直接辐射
*/
@TableField("direct_radiation")
private Double DirectRadiation;
/**
*散射辐射
*/
@TableField("scatter_radiation")
private Double ScatterRadiation;
/**
*日发电量
*/
@TableField("generation_daily")
private Double GenerationDaily;
/**
*月发电量
*/
@TableField("generation_month")
private Double GenerationMonth;
/**
*年发电量
*/
@TableField("generation_year")
private Double GenerationYear;
/**
*累计发电量
*/
@TableField("generation_gross")
private Double GenerationGross;
/**
*利用小时数
*/
@TableField("utilize_hours")
private Double UtilizeHours;
/**
*损失电量
*/
@TableField("loss_electricity")
private Double LossElectricity;
/**
*总辐照度
*/
@TableField("total_irradiance")
private Double TotalIrradiance;
/**
*直接辐照度
*/
@TableField("direct_irradiance")
private Double DirectIrradiance;
/**
*散射辐照度
*/
@TableField("scatter_irradiance")
private Double ScatterIrradiance;
/**
* 日上网电量
*/
@TableField("on_grid_energy_daily")
private Double OnGridEnergyDaily;
/**
* 月上网电量
*/
@TableField("on_grid_energy_month")
private Double OnGridEnergyMonth;
/**
* 年上网电量
*/
@TableField("on_grid_energy_year")
private Double OnGridEnergyYear;
/**
* 累计上网电量
*/
@TableField("on_grid_energy_gross")
private Double OnGridEnergyGross;
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName(value = "jxdz_station_daily_data", autoResultMap = true)
public class StationDailyDataEntity extends BaseEntity {
@TableField("code")
private String code;
@TableField("name")
private String name;
/**
* 毫秒级别时间
*/
@TableField("date_time")
private Long dateTime;
/**
* 工作票总数
*/
@TableField("work_ticket_total_nums")
private Double WorkTicketTotalNums;
/**
* 办理中工作票数
*/
@TableField("work_ticket_processing_nums")
private Double WorkTicketProcessingNums;
/**
* 已作废工作票数
*/
@TableField("work_ticket_invalidated_nums")
private Double WorkTicketInvalidatedNums;
/**
* 执行中工作票总数
*/
@TableField("work_ticket_executing_nums")
private Double WorkTicketExecutingNums;
/**
* 已终结的工作票数
*/
@TableField("work_ticket_terminated_nums")
private Double WorkTicketTerminatedNums;
/**
*定期工作任务
*/
@TableField("regular_tasks_nums")
private Double RegularTasksNums;
/**
* 巡检任务数量
*/
@TableField("inspection_tasks_nums")
private Double InspectionTasksNums;
/**
* 工单总数
*/
@TableField("work_order_total_nums")
private Double WorkOrderTotalNums;
/**
* 工单作废数
*/
@TableField("work_order_invalidated_nums")
private Double WorkOrderInvalidatedNums;
/**
* 工单待开工数
*/
@TableField("work_order_to_be_opened_nums")
private Double WorkOrderToBeOpenedNums;
/**
* 工单终结数
*/
@TableField("work_order_terminated_nums")
private Double WorkOrderTerminatedNums;
/**
* 工单开工数
*/
@TableField("work_order_start_nums")
private Double WorkOrderStartNums;
/**
* 二氧化碳减排量
*/
@TableField("co2_emission_reduction")
private Double Co2EmissionReduction;
/**
* 节约标准煤
*/
@TableField("standard_coal_saving")
private Double StandardCoalSaving;
/**
* 二氧化硫减排量
*/
@TableField("so2_emission_reduction")
private Double So2EmissionReduction;
/**
* 碳粉尘减排量
*/
@TableField("carbon_dust_emission_reduction")
private Double CarbonDustEmissionReduction;
/**
* 发电效率
*/
@TableField("generation_efficiency")
private Double GenerationEfficiency;
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName(value = "jxdz_wind_device_data", autoResultMap = true)
public class WindDeviceDataEntity extends BaseEntity {
@TableField("code")
private String code;
@TableField("name")
private String name;
/**
* 毫秒级别时间
*/
@TableField("date_time")
private Long dateTime;
/**
*日发电量
*/
@TableField("generation_daily")
private Double GenerationDaily;
/**
*月发电量
*/
@TableField("generation_month")
private Double GenerationMonth;
/**
*年发电量
*/
@TableField("generation_year")
private Double GenerationYear;
/**
*累计发电量
*/
@TableField("generation_gross")
private Double GenerationGross;
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName(value = "jxdz_wind_station_data", autoResultMap = true)
public class WindStationDataEntity extends BaseEntity {
@TableField("code")
private String code;
@TableField("name")
private String name;
/**
* 毫秒级别时间
*/
@TableField("date_time")
private Long dateTime;
/**
*发电功率
*/
@TableField("generation_power")
private Double GenerationPower;
/**
* 风速
*/
@TableField("wind_speed")
private Double WindSpeed;
/**
*风向
*/
@TableField("wind_direction")
private Double WindDirection;
/**
*日发电量
*/
@TableField("generation_daily")
private Double GenerationDaily;
/**
* 月发电量
*/
@TableField("generation_month")
private Double GenerationMonth;
/**
* 年发电量
*/
@TableField("generation_year")
private Double GenerationYear;
/**
*累计发电量
*/
@TableField("generation_gross")
private Double GenerationGross;
/**
*利用小时数
*/
@TableField("utilize_hours")
private Double UtilizeHours;
/**
*损失电量
*/
@TableField("loss_electricity")
private Double LossElectricity;
/**
* 日上网电量
*/
@TableField("on_grid_energy_daily")
private Double OnGridEnergyDaily;
/**
* 月上网电量
*/
@TableField("on_grid_energy_month")
private Double OnGridEnergyMonth;
/**
* 年上网电量
*/
@TableField("on_grid_energy_year")
private Double OnGridEnergyYear;
/**
* 累计上网电量
*/
@TableField("on_grid_energy_gross")
private Double OnGridEnergyGross;
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.factory;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.biz.common.utils.DateUtils;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.Enum.JXDZAccessTypeEnum;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.Enum.JXDZCodeEnum;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity.StationDailyDataEntity;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.impl.StationDailyDataServiceImpl;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.utils.JXDZUtils;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo.NeedDataVO;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo.StationDailyDataVO;
import com.yeejoin.amos.boot.module.jxiop.biz.mapper2.JXDZMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
@Service
public class DZMTSJServiceImpl implements IJXDZService {
@Autowired
JXDZUtils jxdzUtils;
@Autowired
StationDailyDataServiceImpl stationDailyDataService;
@Autowired
JXDZMapper jxdzMapper;
@Override
public void backupData(List list, Long dateTime) {
if (CollectionUtil.isNotEmpty(list)) {
List<StationDailyDataEntity> stationDailyDataEntityList = new ArrayList<>();
list.forEach(item -> {
StationDailyDataEntity stationDailyDataEntity = BeanUtil.copyProperties(item, StationDailyDataEntity.class);
stationDailyDataEntity.setDateTime(dateTime);
stationDailyDataEntityList.add(stationDailyDataEntity);
});
stationDailyDataService.saveBatch(stationDailyDataEntityList);
}
}
@Override
public List buildData(Integer accessType, Long dateTime) {
List<StationDailyDataVO> list = new ArrayList<>();
if (JXDZAccessTypeEnum.BULU.getCode().equals(accessType)) {
List<StationDailyDataEntity> stationDailyDataEntityList = stationDailyDataService.list(new LambdaQueryWrapper<StationDailyDataEntity>().eq(StationDailyDataEntity::getDateTime, dateTime));
list = BeanUtil.copyToList(stationDailyDataEntityList, StationDailyDataVO.class);
} else {
list.add(getBusinessData(JXDZCodeEnum.XZ.getCode(), JXDZCodeEnum.XZ.getRemark()));
list.add(getBusinessData(JXDZCodeEnum.GF.getCode(), JXDZCodeEnum.GF.getRemark()));
}
return list;
}
/**
* 获取业务数据
* @param code
* @param name
* @return
*/
private StationDailyDataVO getBusinessData(String code, String name) {
StationDailyDataVO stationDailyDataVO = new StationDailyDataVO();
if(JXDZCodeEnum.XZ.getCode().equals(code)){
stationDailyDataVO.setCode(JXDZUtils.XZ_CODE);
}else if(JXDZCodeEnum.GF.getCode().equals(code)){
stationDailyDataVO.setCode(JXDZUtils.GF_CODE);
}else {
stationDailyDataVO.setCode(code);
}
stationDailyDataVO.setName(name);
stationDailyDataVO.setWorkTicketTotalNums(jxdzMapper.countWorkTicketTotalByCode(code).doubleValue());
stationDailyDataVO.setWorkTicketProcessingNums(jxdzMapper.countWorkTicketProcessingByCode(code).doubleValue());
stationDailyDataVO.setWorkTicketInvalidatedNums(jxdzMapper.countWorkOrderInvalidatedByCode(code).doubleValue());
stationDailyDataVO.setWorkTicketExecutingNums(jxdzMapper.countWorkTicketInvalidatedByCode(code).doubleValue());
stationDailyDataVO.setWorkTicketTerminatedNums(jxdzMapper.countWorkTicketTerminatedByCode(code).doubleValue());
stationDailyDataVO.setRegularTasksNums(jxdzMapper.countRegularTasksByCode(code).doubleValue());
stationDailyDataVO.setInspectionTasksNums(jxdzMapper.countInspectionTasksByCode(code).doubleValue());
stationDailyDataVO.setWorkOrderTotalNums(jxdzMapper.countWorkOrderTotalByCode(code).doubleValue());
stationDailyDataVO.setWorkOrderInvalidatedNums(jxdzMapper.countWorkOrderToBeOpenedByCode(code).doubleValue());
stationDailyDataVO.setWorkOrderToBeOpenedNums(jxdzMapper.countWorkOrderTotalByCode(code).doubleValue());
stationDailyDataVO.setWorkOrderTerminatedNums(jxdzMapper.countWorkOrderTerminatedByCode(code).doubleValue());
stationDailyDataVO.setWorkOrderStartNums(jxdzMapper.countWorkOrderStartByCode(code).doubleValue());
//调用core 接口
JSONObject jsonObject = new JSONObject();
if (JXDZCodeEnum.XZ.getCode().equals(code)) {
String url = "/core/datastorage/gateway/point/list?groupId=1764453166557986818&dataType=analog";
jsonObject = jxdzUtils.sendCoreGetRequest(url);
} else if (JXDZCodeEnum.GF.getCode().equals(code)) {
String url = "/core/datastorage/gateway/point/list?groupId=1770308721235230721&dataType=analog";
jsonObject = jxdzUtils.sendCoreGetRequest(url);
}
if (jsonObject.getInteger("status") == HttpStatus.OK.value()) {
//补充电站测点信息
supplementStationData(jsonObject.getJSONArray("result"), stationDailyDataVO);
supplementBDData(stationDailyDataVO, code);
//补充其他信息
}
return stationDailyDataVO;
}
/**
* 补充部盾提供的数据
* @param stationDailyDataVO
*/
private void supplementBDData(StationDailyDataVO stationDailyDataVO, String code) {
if (JXDZCodeEnum.GF.getCode().equals(code)) {
try {
String yesterday = DateUtils.dateFormat(Date.from(LocalDate.now().minusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant()), "yyyy-MM-dd");
String url = "/screen_api?method=scene_screen.large_screen.get_loss_of_electricity&reporting_data=" + yesterday + "&source_station_id=1701778419827638274&station_type=PV";
JSONObject jsonObject = jxdzUtils.sendCoreGetRequest(url);
if (0 == jsonObject.getInteger("status")) {
JSONObject data = jsonObject.getJSONObject("data");
if (!Objects.isNull(data)) {
stationDailyDataVO.setGenerationEfficiency(data.getDouble("comprehensive_efficiency"));
}
}
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
/**
* 补充场站数据
* @param result
* @param stationDailyDataVO
*/
private void supplementStationData(JSONArray result, StationDailyDataVO stationDailyDataVO) {
if (CollectionUtil.isNotEmpty(result)) {
for (Object o : result) {
if (o instanceof Map) {
Map map = (Map) o;
JSONObject jsonObject = new JSONObject(map);
String pointName = (String) map.get("pointName");
if ("二氧化碳排放量(t)".equals(pointName)) {
stationDailyDataVO.setCo2EmissionReduction(jsonObject.getDouble("value"));
}
if ("节约标准煤(t)".equals(pointName)) {
stationDailyDataVO.setStandardCoalSaving(jsonObject.getDouble("value"));
}
if ("二氧化硫排放量(t)".equals(pointName)) {
stationDailyDataVO.setSo2EmissionReduction(jsonObject.getDouble("value"));
}
if ("碳粉尘减排量(t)".equals(pointName)) {
stationDailyDataVO.setCarbonDustEmissionReduction(jsonObject.getDouble("value"));
}
if ("发电效率".equals(pointName)) {
stationDailyDataVO.setGenerationEfficiency(jsonObject.getDouble("value"));
}
}
}
}
}
@Override
public void sendData(Integer accessType, NeedDataVO needDataVO, List list) {
if (CollectionUtil.isNotEmpty(list)) {
jxdzUtils.sendJXDZPostRequest("/ngnsyncjiangxiyw/accessdaydata/stationDailyData", accessType, needDataVO, list);
}
}
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.factory;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.biz.common.utils.DateUtils;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.Enum.JXDZAccessTypeEnum;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.Enum.JXDZCodeEnum;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity.WindStationDataEntity;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.impl.WindStationDataServiceImpl;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.utils.JXDZUtils;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo.NeedDataVO;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo.WindStationDataVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
@Service
public class FDZJCServiceImpl implements IJXDZService {
@Autowired
JXDZUtils jxdzUtils;
@Autowired
WindStationDataServiceImpl windStationDataService;
@Override
public void backupData(List list, Long dateTime) {
if (CollectionUtil.isNotEmpty(list)) {
List<WindStationDataEntity> windStationDataEntityList = new ArrayList<>();
list.forEach(item -> {
WindStationDataEntity windStationDataEntity = BeanUtil.copyProperties(item, WindStationDataEntity.class);
windStationDataEntity.setDateTime(dateTime);
windStationDataEntityList.add(windStationDataEntity);
});
windStationDataService.saveBatch(windStationDataEntityList);
}
}
@Override
public List buildData(Integer accessType, Long dateTime) {
List<WindStationDataVO> list = new ArrayList<>();
if (JXDZAccessTypeEnum.BULU.getCode().equals(accessType)) {
List<WindStationDataEntity> windStationDataEntityList = windStationDataService.list(new LambdaQueryWrapper<WindStationDataEntity>().eq(WindStationDataEntity::getDateTime, dateTime));
list = BeanUtil.copyToList(windStationDataEntityList, WindStationDataVO.class);
} else {
list.add(getBusinessData(JXDZCodeEnum.XZ.getCode(), JXDZCodeEnum.XZ.getRemark()));
}
return list;
}
private WindStationDataVO getBusinessData(String code, String name) {
WindStationDataVO windStationDataVO = new WindStationDataVO();
if(JXDZCodeEnum.XZ.getCode().equals(code)){
windStationDataVO.setCode(JXDZUtils.XZ_CODE);
}else {
windStationDataVO.setCode(code);
}
windStationDataVO.setName(name);
//调用core 接口
JSONObject jsonObject = new JSONObject();
if (JXDZCodeEnum.XZ.getCode().equals(code)) {
String url = "/core/datastorage/gateway/point/list?groupId=1764453166557986818&dataType=analog";
jsonObject = jxdzUtils.sendCoreGetRequest(url);
}
if (jsonObject.getInteger("status") == HttpStatus.OK.value()) {
//补充电站测点信息
supplementStationData(jsonObject.getJSONArray("result"), windStationDataVO);
supplementBDData(windStationDataVO, code);
}
return windStationDataVO;
}
/**
* 补充部盾提供的数据
* @param windStationDataVO
*/
private void supplementBDData(WindStationDataVO windStationDataVO, String code) {
JSONObject jsonObject = new JSONObject();
if (JXDZCodeEnum.XZ.getCode().equals(code)) {
String yesterday = null;
try {
yesterday = DateUtils.dateFormat(Date.from(LocalDate.now().minusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant()), "yyyy-MM-dd");
} catch (ParseException e) {
throw new RuntimeException(e);
}
String url = "/screen_api?method=scene_screen.large_screen.get_loss_of_electricity&reporting_data=" + yesterday + "&source_station_id=1701779143491878913&station_type=FAN";
jsonObject = jxdzUtils.sendCoreGetRequest(url);
}
if (0 == jsonObject.getInteger("status")) {
JSONObject data = jsonObject.getJSONObject("data");
if (!Objects.isNull(data)) {
windStationDataVO.setLossElectricity(data.getDouble("loss_of_electricity_day"));
windStationDataVO.setOnGridEnergyDaily(data.getDouble("on_grid_energy_day"));
windStationDataVO.setOnGridEnergyMonth(data.getDouble("on_grid_energy_month"));
windStationDataVO.setOnGridEnergyYear(data.getDouble("on_grid_energy_year"));
windStationDataVO.setOnGridEnergyGross(data.getDouble("on_grid_energy"));
}
}
}
/**
* 补充电站数据
* @param result
* @param windStationDataVO
*/
private void supplementStationData(JSONArray result, WindStationDataVO windStationDataVO) {
if (CollectionUtil.isNotEmpty(result)) {
for (Object o : result) {
if (o instanceof Map) {
Map map = (Map) o;
JSONObject jsonObject = new JSONObject(map);
String pointName = (String) map.get("pointName");
if ("发电功率".equals(pointName)) {
windStationDataVO.setGenerationPower(jsonObject.getDouble("value"));
}
if ("瞬时平均风速".equals(pointName)) {
windStationDataVO.setWindSpeed(jsonObject.getDouble("value"));
}
if ("风向".equals(pointName)) {
windStationDataVO.setWindDirection(jsonObject.getDouble("value"));
}
if ("日发电量总和".equals(pointName)) {
windStationDataVO.setGenerationDaily(jsonObject.getDouble("value"));
}
if ("月发电量总和".equals(pointName)) {
windStationDataVO.setGenerationMonth(jsonObject.getDouble("value"));
}
if ("年发电量总和".equals(pointName)) {
windStationDataVO.setGenerationYear(jsonObject.getDouble("value"));
windStationDataVO.setGenerationGross(jsonObject.getDouble("value"));
}
if ("日利用小时数".equals(pointName)) {
windStationDataVO.setUtilizeHours(jsonObject.getDouble("value"));
}
}
}
}
}
@Override
public void sendData(Integer accessType, NeedDataVO needDataVO, List list) {
if (CollectionUtil.isNotEmpty(list)) {
jxdzUtils.sendJXDZPostRequest("/ngnsyncjiangxiyw/accesshourdata/windStationData", accessType, needDataVO, list);
}
}
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.factory;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.Enum.JXDZAccessTypeEnum;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.Enum.JXDZCodeEnum;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity.WindDeviceDataEntity;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.impl.WindDeviceDataServiceImpl;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.utils.JXDZUtils;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo.NeedDataVO;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo.WindDeviceDataVO;
import com.yeejoin.amos.boot.module.jxiop.biz.mapper2.JXDZMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Service
public class FDZSBJCServiceImpl implements IJXDZService {
@Autowired
JXDZUtils jxdzUtils;
@Autowired
WindDeviceDataServiceImpl windDeviceDataService;
@Autowired
JXDZMapper jxdzMapper;
@Override
public void backupData(List list, Long dateTime) {
if (CollectionUtil.isNotEmpty(list)) {
List<WindDeviceDataEntity> windDeviceDataEntityList = new ArrayList<>();
list.forEach(item -> {
WindDeviceDataEntity windDeviceDataEntity = BeanUtil.copyProperties(item, WindDeviceDataEntity.class);
windDeviceDataEntity.setDateTime(dateTime);
windDeviceDataEntityList.add(windDeviceDataEntity);
});
windDeviceDataService.saveBatch(windDeviceDataEntityList);
}
}
@Override
public List buildData(Integer accessType, Long dateTime) {
List<WindDeviceDataVO> list = new ArrayList<>();
if (JXDZAccessTypeEnum.BULU.getCode().equals(accessType)) {
List<WindDeviceDataEntity> windDeviceDataEntityList = windDeviceDataService.list(new LambdaQueryWrapper<WindDeviceDataEntity>().eq(WindDeviceDataEntity::getDateTime, dateTime));
list = BeanUtil.copyToList(windDeviceDataEntityList, WindDeviceDataVO.class);
} else {
JSONArray zzBusinessData = getZZBusinessData();
if (CollectionUtil.isNotEmpty(zzBusinessData)) {
for (Object o : zzBusinessData) {
if (o instanceof Map) {
Map map = (Map) o;
JSONObject jsonObject = new JSONObject(map);
if (jsonObject.getString("name").contains("风机")) {
list.add(getWindDeviceDataVO(jsonObject));
}
}
}
}
}
return list;
}
/**
* 获取风电设备数据
* @param jsonObject
* @return
*/
private WindDeviceDataVO getWindDeviceDataVO(JSONObject jsonObject) {
WindDeviceDataVO windDeviceDataVO = new WindDeviceDataVO();
String sequenceNbr = jsonObject.getString("sequenceNbr");
windDeviceDataVO.setName(jsonObject.getString("name"));
windDeviceDataVO.setCode(getWindDeviceCode(jsonObject.getString("name")));
//开始调用具体列表接口
JSONArray windDeviceJSONArray = getWindDeviceDataBySequenceNbr(sequenceNbr);
if (CollectionUtil.isNotEmpty(windDeviceJSONArray)) {
for (Object o : windDeviceJSONArray) {
if (o instanceof Map) {
Map map = (Map) o;
JSONObject result = new JSONObject(map);
String pointName = (String) map.get("pointName");
if ("日发电量".equals(pointName)) {
windDeviceDataVO.setGenerationDaily(result.getDouble("value"));
}
if ("月发电量".equals(pointName)) {
windDeviceDataVO.setGenerationMonth(result.getDouble("value"));
}
if ("年发电量".equals(pointName)) {
windDeviceDataVO.setGenerationYear(result.getDouble("value"));
windDeviceDataVO.setGenerationGross(result.getDouble("value"));
}
}
}
}
return windDeviceDataVO;
}
/**
* 获取风电设备Code
* @param name
* @return
*/
private String getWindDeviceCode(String name) {
String replaceString = name.replace("风机", "");
Integer value = Integer.valueOf(replaceString);
String field = "%#" + value + "风机系统%";
String replaceField = "%#" + replaceString + "风机系统%";
return jxdzMapper.getDeviceCode(JXDZCodeEnum.XZ.getCode(), field, replaceField);
}
/**
* 根据主键获取具体的风电测点数据
* @param sequenceNbr
* @return
*/
private JSONArray getWindDeviceDataBySequenceNbr(String sequenceNbr) {
JSONObject jsonObject = jxdzUtils.sendCoreGetRequest("/core/datastorage/gateway/point/list?groupId=" + sequenceNbr + "&dataType=analog");
if (!Objects.isNull(jsonObject)) {
if (jsonObject.getInteger("status") == HttpStatus.OK.value()) {
return jsonObject.getJSONArray("result");
}
}
return new JSONArray();
}
/**
* 获取装置测点数据
* @return
*/
private JSONArray getZZBusinessData() {
JSONObject jsonObject = jxdzUtils.sendCoreGetRequest("/core/front-gateway-device/tree?gatewayId=1762633242759958530");
if (!Objects.isNull(jsonObject)) {
if (jsonObject.getInteger("status") == HttpStatus.OK.value()) {
JSONArray result = jsonObject.getJSONArray("result");
if (CollectionUtil.isNotEmpty(result)) {
JSONObject firstObject = result.getJSONObject(0).getJSONArray("children").getJSONObject(0);
if (!Objects.isNull(firstObject)) {
JSONArray children = firstObject.getJSONArray("children");
if (CollectionUtil.isNotEmpty(children)) {
for (Object child : children) {
if (child instanceof Map) {
Map map = (Map) child;
JSONObject childJSON = new JSONObject(map);
if ("装置测点".equals(childJSON.getString("name"))) {
return childJSON.getJSONArray("children");
}
}
}
}
}
}
}
}
return new JSONArray();
}
@Override
public void sendData(Integer accessType, NeedDataVO needDataVO, List list) {
if(CollectionUtil.isNotEmpty(list)){
jxdzUtils.sendJXDZPostRequest("/ngnsyncjiangxiyw/accesshourdata/windDeviceData", accessType, needDataVO, list);
}
}
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.factory;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.biz.common.utils.DateUtils;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.Enum.JXDZAccessTypeEnum;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.Enum.JXDZCodeEnum;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity.PvStationDataEntity;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.impl.PvStationDataServiceImpl;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.utils.JXDZUtils;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo.NeedDataVO;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo.PvStationDataVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
@Service
public class GFDZJCServiceImpl implements IJXDZService {
@Autowired
JXDZUtils jxdzUtils;
@Autowired
PvStationDataServiceImpl pvStationDataService;
@Override
public void backupData(List list, Long dateTime) {
if (CollectionUtil.isNotEmpty(list)) {
List<PvStationDataEntity> pvStationDataEntityList = new ArrayList<>();
list.forEach(item -> {
PvStationDataEntity pvStationDataEntity = BeanUtil.copyProperties(item, PvStationDataEntity.class);
pvStationDataEntity.setDateTime(dateTime);
pvStationDataEntityList.add(pvStationDataEntity);
});
pvStationDataService.saveBatch(pvStationDataEntityList);
}
}
@Override
public List buildData(Integer accessType, Long dateTime) {
List<PvStationDataVO> list = new ArrayList<>();
if (JXDZAccessTypeEnum.BULU.getCode().equals(accessType)) {
List<PvStationDataEntity> windStationDataEntityList = pvStationDataService.list(new LambdaQueryWrapper<PvStationDataEntity>().eq(PvStationDataEntity::getDateTime, dateTime));
list = BeanUtil.copyToList(windStationDataEntityList, PvStationDataVO.class);
} else {
list.add(getBusinessData(JXDZCodeEnum.GF.getCode(), JXDZCodeEnum.GF.getRemark()));
}
return list;
}
private PvStationDataVO getBusinessData(String code, String name) {
PvStationDataVO pvStationDataVO = new PvStationDataVO();
if (JXDZCodeEnum.GF.getCode().equals(code)) {
pvStationDataVO.setCode(JXDZUtils.GF_CODE);
} else {
pvStationDataVO.setCode(code);
}
pvStationDataVO.setName(name);
//调用core 接口
JSONObject jsonObject = new JSONObject();
if (JXDZCodeEnum.GF.getCode().equals(code)) {
String url = "/core/datastorage/gateway/point/list?groupId=1770308721235230721&dataType=analog";
jsonObject = jxdzUtils.sendCoreGetRequest(url);
}
if (jsonObject.getInteger("status") == HttpStatus.OK.value()) {
//补充电站测点信息
supplementStationData(jsonObject.getJSONArray("result"), pvStationDataVO);
supplementBDData(pvStationDataVO, code);
}
return pvStationDataVO;
}
/**
* 补充损失电量
* @param pvStationDataVO
* @param code
*/
private void supplementBDData(PvStationDataVO pvStationDataVO, String code) {
JSONObject jsonObject = new JSONObject();
if (JXDZCodeEnum.GF.getCode().equals(code)) {
String yesterday = null;
try {
yesterday = DateUtils.dateFormat(Date.from(LocalDate.now().minusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant()), "yyyy-MM-dd");
} catch (ParseException e) {
throw new RuntimeException(e);
}
String url = "/screen_api?method=scene_screen.large_screen.get_loss_of_electricity&reporting_data=" + yesterday + "&source_station_id=1701778419827638274&station_type=PV";
jsonObject = jxdzUtils.sendCoreGetRequest(url);
}
if (0 == jsonObject.getInteger("status")) {
JSONObject data = jsonObject.getJSONObject("data");
if (!Objects.isNull(data)) {
pvStationDataVO.setLossElectricity(data.getDouble("loss_of_electricity_day"));
pvStationDataVO.setOnGridEnergyDaily(data.getDouble("on_grid_energy_day"));
pvStationDataVO.setOnGridEnergyMonth(data.getDouble("on_grid_energy_month"));
pvStationDataVO.setOnGridEnergyYear(data.getDouble("on_grid_energy_year"));
pvStationDataVO.setOnGridEnergyGross(data.getDouble("on_grid_energy"));
}
}
}
/**
* 补充场站数据
* @param result
* @param pvStationDataVO
*/
private void supplementStationData(JSONArray result, PvStationDataVO pvStationDataVO) {
if (CollectionUtil.isNotEmpty(result)) {
for (Object o : result) {
if (o instanceof Map) {
Map map = (Map) o;
JSONObject jsonObject = new JSONObject(map);
String pointName = (String) map.get("pointName");
if ("发电功率".equals(pointName)) {
pvStationDataVO.setGenerationPower((Double) map.get("value"));
}
if ("总辐射".equals(pointName)) {
pvStationDataVO.setTotalRadiation(jsonObject.getDouble("value"));
}
if ("直接辐射".equals(pointName)) {
pvStationDataVO.setDirectRadiation(jsonObject.getDouble("value"));
}
if ("散射辐射".equals(pointName)) {
pvStationDataVO.setScatterRadiation(jsonObject.getDouble("value"));
}
if ("直接辐照度".equals(pointName)) {
pvStationDataVO.setDirectIrradiance(jsonObject.getDouble("value"));
}
if ("总辐照度".equals(pointName)) {
pvStationDataVO.setTotalIrradiance(jsonObject.getDouble("value"));
}
if ("散射辐照度".equals(pointName)) {
pvStationDataVO.setScatterIrradiance(jsonObject.getDouble("value"));
}
if ("日发电量".equals(pointName)) {
pvStationDataVO.setGenerationDaily(jsonObject.getDouble("value"));
}
if ("月发电量".equals(pointName)) {
pvStationDataVO.setGenerationMonth(jsonObject.getDouble("value"));
}
if ("年发电量".equals(pointName)) {
pvStationDataVO.setGenerationYear(jsonObject.getDouble("value"));
}
if ("累计发电量".equals(pointName)) {
pvStationDataVO.setGenerationGross(jsonObject.getDouble("value"));
}
if ("利用小时数".equals(pointName)) {
pvStationDataVO.setUtilizeHours(jsonObject.getDouble("value"));
}
}
}
}
}
@Override
public void sendData(Integer accessType, NeedDataVO needDataVO, List list) {
if (CollectionUtil.isNotEmpty(list)) {
jxdzUtils.sendJXDZPostRequest("/ngnsyncjiangxiyw/accesshourdata/pvStationData", accessType, needDataVO, list);
}
}
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.factory;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.Enum.JXDZAccessTypeEnum;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.Enum.JXDZCodeEnum;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity.PvDeviceDataEntity;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.impl.PvDeviceDataServiceImpl;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.utils.JXDZUtils;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo.NeedDataVO;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo.PvDeviceDataVO;
import com.yeejoin.amos.boot.module.jxiop.biz.mapper2.JXDZMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Service
public class GFDZSBJCServiceImpl implements IJXDZService {
@Autowired
JXDZUtils jxdzUtils;
@Autowired
PvDeviceDataServiceImpl pvDeviceDataService;
@Autowired
JXDZMapper jxdzMapper;
@Override
public void backupData(List list, Long dateTime) {
if (CollectionUtil.isNotEmpty(list)) {
List<PvDeviceDataEntity> pvDeviceDataEntityList = new ArrayList<>();
list.forEach(item -> {
PvDeviceDataEntity pvDeviceDataEntity = BeanUtil.copyProperties(item, PvDeviceDataEntity.class);
pvDeviceDataEntity.setDateTime(dateTime);
pvDeviceDataEntityList.add(pvDeviceDataEntity);
});
pvDeviceDataService.saveBatch(pvDeviceDataEntityList);
}
}
@Override
public List buildData(Integer accessType, Long dateTime) {
List<PvDeviceDataVO> list = new ArrayList<>();
if (JXDZAccessTypeEnum.BULU.getCode().equals(accessType)) {
List<PvDeviceDataEntity> windStationDataEntityList = pvDeviceDataService.list(new LambdaQueryWrapper<PvDeviceDataEntity>().eq(PvDeviceDataEntity::getDateTime, dateTime));
list = BeanUtil.copyToList(windStationDataEntityList, PvDeviceDataVO.class);
} else {
JSONArray zzBusinessData = getZZBusinessData();
if (CollectionUtil.isNotEmpty(zzBusinessData)) {
for (Object o : zzBusinessData) {
if (o instanceof Map) {
Map map = (Map) o;
JSONObject jsonObject = new JSONObject(map);
if (jsonObject.getString("name").contains("子阵")) {
list.add(getPvDeviceDataVO(jsonObject));
}
}
}
}
}
return list;
}
/**
* 获取光伏设备数据
* @param jsonObject
* @return
*/
private PvDeviceDataVO getPvDeviceDataVO(JSONObject jsonObject) {
PvDeviceDataVO pvDeviceDataVO = new PvDeviceDataVO();
String sequenceNbr = jsonObject.getString("sequenceNbr");
pvDeviceDataVO.setName(jsonObject.getString("name"));
pvDeviceDataVO.setCode(getPvDeviceCode(jsonObject.getString("name")));
//开始调用具体列表接口
JSONArray windDeviceJSONArray = getPvDeviceDataBySequenceNbr(sequenceNbr);
if (CollectionUtil.isNotEmpty(windDeviceJSONArray)) {
for (Object o : windDeviceJSONArray) {
if (o instanceof Map) {
Map map = (Map) o;
JSONObject result = new JSONObject(map);
String pointLocation = result.getString("pointLocation");
Boolean flag = checkPvDevice(pointLocation, jsonObject.getString("name"));
if (flag) {
String pointName = (String) map.get("pointName");
if (pointName.contains("日发电量")) {
pvDeviceDataVO.setGenerationDaily(result.getDouble("value"));
}
if (pointName.contains("月发电量")) {
pvDeviceDataVO.setGenerationMonth(result.getDouble("value"));
}
if (pointName.contains("年发电量")) {
pvDeviceDataVO.setGenerationYear(result.getDouble("value"));
}
if (pointName.contains("总发电量")) {
pvDeviceDataVO.setGenerationGross(result.getDouble("value"));
}
}
}
}
}
return pvDeviceDataVO;
}
/**
* 校验路径是否是子阵的 路径倒数第三位为子阵
* @param pointLocation
* @param name
* @return
*/
private Boolean checkPvDevice(String pointLocation, String name) {
if (!StrUtil.isEmpty(pointLocation)) {
String[] split = pointLocation.split("/");
if (!Objects.isNull(split)) {
String zdName = split[split.length - 3];
if (zdName.equals(name)) {
return true;
}
}
}
return false;
}
/**
* 获取光伏设备数据根据主键
* @param sequenceNbr
* @return
*/
private JSONArray getPvDeviceDataBySequenceNbr(String sequenceNbr) {
JSONObject jsonObject = jxdzUtils.sendCoreGetRequest("/core/datastorage/gateway/point/list?groupId=" + sequenceNbr + "&dataType=accumulator");
if (!Objects.isNull(jsonObject)) {
if (jsonObject.getInteger("status") == HttpStatus.OK.value()) {
return jsonObject.getJSONArray("result");
}
}
return new JSONArray();
}
/**
* 获取光伏设备Code
* @param name
* @return
*/
private String getPvDeviceCode(String name) {
String replaceString = name.replace("子阵", "");
Integer value = Integer.valueOf(replaceString);
String field = "%#" + value + "光伏阵区系统%";
String replaceField = "%#" + replaceString + "光伏阵区系统%";
return jxdzMapper.getDeviceCode(JXDZCodeEnum.GF.getCode(), field, replaceField);
}
private JSONArray getZZBusinessData() {
JSONObject jsonObject = jxdzUtils.sendCoreGetRequest("/core/front-gateway-device/tree?gatewayId=1762633785632919553");
if (!Objects.isNull(jsonObject)) {
if (jsonObject.getInteger("status") == HttpStatus.OK.value()) {
JSONArray result = jsonObject.getJSONArray("result");
if (CollectionUtil.isNotEmpty(result)) {
JSONObject firstObject = result.getJSONObject(0).getJSONArray("children").getJSONObject(0);
if (!Objects.isNull(firstObject)) {
JSONArray children = firstObject.getJSONArray("children");
if (CollectionUtil.isNotEmpty(children)) {
for (Object child : children) {
if (child instanceof Map) {
Map map = (Map) child;
JSONObject childJSON = new JSONObject(map);
if ("装置测点".equals(childJSON.getString("name"))) {
return childJSON.getJSONArray("children");
}
}
}
}
}
}
}
}
return new JSONArray();
}
@Override
public void sendData(Integer accessType, NeedDataVO needDataVO, List list) {
if(CollectionUtil.isNotEmpty(list)){
jxdzUtils.sendJXDZPostRequest("/ngnsyncjiangxiyw/accesshourdata/pvDeviceData", accessType, needDataVO, list);
}
}
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.factory;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo.NeedDataVO;
import java.util.List;
public interface IJXDZService {
/**
* 备份数据
* @param list
* @param dateTime
*/
void backupData(List list, Long dateTime);
/**
* 构建数据
* @param accessType
* @param dateTime
* @return
*/
List buildData(Integer accessType, Long dateTime);
/**
* 发送数据
* @param accessType
* @param needDataVO
* @param list
*/
void sendData(Integer accessType, NeedDataVO needDataVO, List list);
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.factory;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.Enum.JXDZAccessTypeEnum;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.Enum.JXDZDataTypeEnum;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.utils.JXDZUtils;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.List;
import java.util.Map;
@Component
@Slf4j
public class JXDZExecute {
@Autowired
JXDZUtils jxdzUtils;
@Autowired
JXDZFactory jxdzFactory;
@Value("${scheduledEnable:false}")
private Boolean scheduledEnable;
@Scheduled(cron = "0 0 */1 * * ?")
public void hourInterface() {
if (!scheduledEnable) {
return;
}
log.info("开始执行小时任务");
//发送请求传入的参数
NeedDataVO needDataVO = new NeedDataVO();
needDataVO.setPlatformId(Long.valueOf(1360001));
needDataVO.setDateTime(LocalDateTime.now().withMinute(0).withSecond(0).withNano(0).atZone(ZoneOffset.systemDefault()).toInstant().toEpochMilli());
//构建数据
IJXDZService fdzjcService = jxdzFactory.getJXDZService(JXDZDataTypeEnum.FDZJC);
IJXDZService gfdzjcService = jxdzFactory.getJXDZService(JXDZDataTypeEnum.GFDZJC);
IJXDZService fdzsbjcService = jxdzFactory.getJXDZService(JXDZDataTypeEnum.FDZSBJC);
IJXDZService gfdzsbjcService = jxdzFactory.getJXDZService(JXDZDataTypeEnum.GFDZSBJC);
List<WindStationDataVO> windStationDataVOList = fdzjcService.buildData(JXDZAccessTypeEnum.CAIJI.getCode(), needDataVO.getDateTime());
List<PvStationDataVO> pvStationDataVOList = gfdzjcService.buildData(JXDZAccessTypeEnum.CAIJI.getCode(), needDataVO.getDateTime());
List<WindDeviceDataVO> windDeviceDataVOList = fdzsbjcService.buildData(JXDZAccessTypeEnum.CAIJI.getCode(), needDataVO.getDateTime());
List<PvDeviceDataVO> pvDeviceDataVOList = gfdzsbjcService.buildData(JXDZAccessTypeEnum.CAIJI.getCode(), needDataVO.getDateTime());
//备份数据
fdzjcService.backupData(windStationDataVOList, needDataVO.getDateTime());
gfdzjcService.backupData(pvStationDataVOList, needDataVO.getDateTime());
fdzsbjcService.backupData(windDeviceDataVOList, needDataVO.getDateTime());
gfdzsbjcService.backupData(pvDeviceDataVOList, needDataVO.getDateTime());
//发送请求
fdzjcService.sendData(JXDZAccessTypeEnum.CAIJI.getCode(), needDataVO, windStationDataVOList);
gfdzjcService.sendData(JXDZAccessTypeEnum.CAIJI.getCode(), needDataVO, pvStationDataVOList);
fdzsbjcService.sendData(JXDZAccessTypeEnum.CAIJI.getCode(), needDataVO, windDeviceDataVOList);
gfdzsbjcService.sendData(JXDZAccessTypeEnum.CAIJI.getCode(), needDataVO, pvDeviceDataVOList);
log.info("小时任务执行成功");
}
@Scheduled(cron = "0 0 1 * * ?")
public void dayInterface() {
if (!scheduledEnable) {
return;
}
log.info("开始执行天任务");
//发送请求传入的参数
NeedDataVO needDataVO = new NeedDataVO();
needDataVO.setPlatformId(Long.valueOf(1360001));
needDataVO.setDateTime(LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0).atZone(ZoneOffset.systemDefault()).toInstant().toEpochMilli());
//构建数据
IJXDZService dzmtsjService = jxdzFactory.getJXDZService(JXDZDataTypeEnum.DZMTSJ);
List<StationDailyDataVO> stationDailyDataVOList = dzmtsjService.buildData(JXDZAccessTypeEnum.CAIJI.getCode(), needDataVO.getDateTime());
//备份数据
dzmtsjService.backupData(stationDailyDataVOList, needDataVO.getDateTime());
//发送请求
dzmtsjService.sendData(JXDZAccessTypeEnum.CAIJI.getCode(), needDataVO, stationDailyDataVOList);
//处理补录
listNeed();
log.info("天任务执行成功");
}
/**
* 处理需要补录的数据
*/
private void listNeed() {
log.info("处理补录数据中");
JSONObject listNeedJson = jxdzUtils.sendJXDZGetRequest("/ngnsyncjiangxiyw/needreaccess/listNeed?platformId=1360001");
if (HttpStatus.OK.value() == listNeedJson.getInteger("code")) {
JSONArray data = listNeedJson.getJSONArray("data");
if (CollectionUtil.isNotEmpty(data)) {
log.info("需要补录的数据有{}条", data.size());
for (Object o : data) {
if (o instanceof Map) {
Map needData = (Map) o;
dealListNeedData(new JSONObject(needData));
}
}
} else {
log.info("没有补录的数据需要处理");
}
}
log.info("补录数据处理完成");
}
private void dealListNeedData(JSONObject needData) {
NeedDataVO needDataVO = JSONObject.parseObject(needData.toJSONString(), NeedDataVO.class);
JXDZDataTypeEnum dataTypeEnum = JXDZDataTypeEnum.getEnumByCode(needDataVO.getDataType());
IJXDZService fdzjcService = jxdzFactory.getJXDZService(JXDZDataTypeEnum.FDZJC);
IJXDZService gfdzjcService = jxdzFactory.getJXDZService(JXDZDataTypeEnum.GFDZJC);
IJXDZService fdzsbjcService = jxdzFactory.getJXDZService(JXDZDataTypeEnum.FDZSBJC);
IJXDZService gfdzsbjcService = jxdzFactory.getJXDZService(JXDZDataTypeEnum.GFDZSBJC);
IJXDZService gzmtsjService = jxdzFactory.getJXDZService(JXDZDataTypeEnum.DZMTSJ);
switch (dataTypeEnum) {
case FDZJC:
fdzjcService.sendData(JXDZAccessTypeEnum.BULU.getCode(), needDataVO, fdzjcService.buildData(JXDZAccessTypeEnum.BULU.getCode(), needDataVO.getDateTime()));
break;
case GFDZJC:
gfdzjcService.sendData(JXDZAccessTypeEnum.BULU.getCode(), needDataVO, gfdzjcService.buildData(JXDZAccessTypeEnum.BULU.getCode(), needDataVO.getDateTime()));
break;
case FDZSBJC:
fdzsbjcService.sendData(JXDZAccessTypeEnum.BULU.getCode(), needDataVO, fdzsbjcService.buildData(JXDZAccessTypeEnum.BULU.getCode(), needDataVO.getDateTime()));
break;
case GFDZSBJC:
gfdzsbjcService.sendData(JXDZAccessTypeEnum.BULU.getCode(), needDataVO, gfdzsbjcService.buildData(JXDZAccessTypeEnum.BULU.getCode(), needDataVO.getDateTime()));
break;
case DZMTSJ:
gzmtsjService.sendData(JXDZAccessTypeEnum.BULU.getCode(), needDataVO, gzmtsjService.buildData(JXDZAccessTypeEnum.BULU.getCode(), needDataVO.getDateTime()));
break;
default:
throw new BadRequest("没有找到匹配的补录数据类型");
}
}
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.factory;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.Enum.JXDZDataTypeEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
@Component
public class JXDZFactory {
@Autowired
private FDZJCServiceImpl fdzjcService;
@Autowired
private GFDZJCServiceImpl gfdzjcService;
@Autowired
private FDZSBJCServiceImpl fdzsbjcService;
@Autowired
private GFDZSBJCServiceImpl gfdzsbjcService;
@Autowired
private DZMTSJServiceImpl dzmtsjService;
public IJXDZService getJXDZService(JXDZDataTypeEnum dataType) {
switch (dataType) {
case FDZJC:
return fdzjcService;
case GFDZJC:
return gfdzjcService;
case FDZSBJC:
return fdzsbjcService;
case GFDZSBJC:
return gfdzsbjcService;
case DZMTSJ:
return dzmtsjService;
default:
throw new BadRequest("没有找到匹配的补录数据类型");
}
}
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.impl;
import com.yeejoin.amos.boot.module.jxiop.api.mapper.PvDeviceDataMapper;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity.PvDeviceDataEntity;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService;
@Service
public class PvDeviceDataServiceImpl extends BaseService<PvDeviceDataEntity, PvDeviceDataEntity, PvDeviceDataMapper> {
}
\ No newline at end of file
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.impl;
import com.yeejoin.amos.boot.module.jxiop.api.mapper.PvStationDataMapper;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity.PvStationDataEntity;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService;
@Service
public class PvStationDataServiceImpl extends BaseService<PvStationDataEntity, PvStationDataEntity, PvStationDataMapper> {
}
\ No newline at end of file
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.impl;
import com.yeejoin.amos.boot.module.jxiop.api.mapper.StationDailyDataMapper;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity.StationDailyDataEntity;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService;
@Service
public class StationDailyDataServiceImpl extends BaseService<StationDailyDataEntity, StationDailyDataEntity, StationDailyDataMapper> {
}
\ No newline at end of file
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.impl;
import com.yeejoin.amos.boot.module.jxiop.api.mapper.WindDeviceDataMapper;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity.WindDeviceDataEntity;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService;
@Service
public class WindDeviceDataServiceImpl extends BaseService<WindDeviceDataEntity, WindDeviceDataEntity, WindDeviceDataMapper> {
}
\ No newline at end of file
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.impl;
import com.yeejoin.amos.boot.module.jxiop.api.mapper.WindStationDataMapper;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.entity.WindStationDataEntity;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService;
@Service
public class WindStationDataServiceImpl extends BaseService<WindStationDataEntity, WindStationDataEntity, WindStationDataMapper> {
}
\ No newline at end of file
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.utils;
import cn.hutool.core.codec.Base64;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo.NeedDataVO;
import com.yeejoin.amos.component.robot.AmosRequestContext;
import lombok.extern.slf4j.Slf4j;
import org.bouncycastle.asn1.gm.GMNamedCurves;
import org.bouncycastle.asn1.x9.X9ECParameters;
import org.bouncycastle.crypto.engines.SM2Engine;
import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.crypto.params.ParametersWithRandom;
import org.bouncycastle.math.ec.ECPoint;
import org.bouncycastle.util.encoders.Hex;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.util.List;
import java.util.Objects;
/**
* 江西电建工具类
*/
@Component
@Slf4j
public class JXDZUtils {
@Value("${coreIp:iiet-jepcc.powerchina.cn:8088}")
String coreIp;
@Value("${jxdzIp:122.70.153.215:9003}")
String jxdzIp;
@Value("${jxdzTokenUserName:jiangxi_epc}")
String jxdzTokenUserName;
@Value("${jxdzTokenPassword:123456}")
String jxdzTokenPassword;
@Value("${jxdzPublicKey:04508e9c4df8463c784df2dde2536e792851a8f3fd0e5ff29b7bf1a5d9e3f566aa49a7a5fe7683e3dc4dc30dd7bc8773838a9e4fbcf7dfac53461c8777a6aed691}")
String publicKey;
@Autowired
RestTemplate restTemplate;
@Autowired
AmosRequestContext amosRequestContext;
public static String XZ_CODE="PWC20123608280010";
public static String GF_CODE="PPC17063608260011";
private String dataEncrypt(String obj, String publicKey) {
X9ECParameters sm2ECParameters = GMNamedCurves.getByName("sm2p256v1");
ECDomainParameters domainParameters = new ECDomainParameters(sm2ECParameters.getCurve(), sm2ECParameters.getG(),
sm2ECParameters.getN(), sm2ECParameters.getH());
ECPoint pukPoint = sm2ECParameters.getCurve()
.decodePoint(Hex.decode(publicKey));
ECPublicKeyParameters publicKeyParameters = new ECPublicKeyParameters(pukPoint, domainParameters);
SM2Engine.Mode mode = SM2Engine.Mode.C1C3C2;
SM2Engine sm2Engine = new SM2Engine(mode);
// 设置sm2为加密模式
sm2Engine.init(true, new ParametersWithRandom(publicKeyParameters, new SecureRandom()));
byte[] arrayOfBytes = null;
byte[] in = obj.getBytes(StandardCharsets.UTF_8);
try {
arrayOfBytes = sm2Engine.processBlock(in, 0, in.length);
} catch (Exception e) {
e.printStackTrace();
}
return Base64.encode(arrayOfBytes);
}
/**
* 获取token
* @return
*/
private String getToken() {
String url = "http://" + jxdzIp + "/auth/justLogin";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
JSONObject jsonObject = new JSONObject();
jsonObject.put("username", jxdzTokenUserName);
jsonObject.put("password", jxdzTokenPassword);
HttpEntity<JSONObject> httpEntity = new HttpEntity<>(jsonObject, headers);
try {
ResponseEntity<JSONObject> result = restTemplate.postForEntity(url, httpEntity, JSONObject.class);
if (HttpStatus.OK == result.getStatusCode()) {
JSONObject body = result.getBody();
if (HttpStatus.OK.value() == body.getInteger("code")) {
JSONObject data = body.getJSONObject("data");
return data.getString("access_token");
} else {
throw new BadRequest("获取token失败,失败原因[" + body + "]");
}
} else {
throw new BadRequest("获取token失败,失败原因[" + result + "]");
}
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new BadRequest("获取token失败,失败原因[" + e.getMessage() + "]");
}
}
/**
* 发送GET请求
* @param url
* @return
*/
public JSONObject sendCoreGetRequest(String url) {
String reqUrl = "http://" + coreIp + url;
HttpHeaders headers = new HttpHeaders();
headers.set("Token", amosRequestContext.getToken());
headers.set("Product", amosRequestContext.getProduct());
headers.set("Appkey", amosRequestContext.getAppKey());
HttpEntity entity = new HttpEntity<>(headers);
log.info("发送GET请求,请求地址{}", reqUrl);
try {
ResponseEntity<JSONObject> response = restTemplate.exchange(reqUrl, HttpMethod.GET, entity, JSONObject.class);
if (HttpStatus.OK == response.getStatusCode()) {
log.info("发送请求成功,请求返回体{}", response.getBody());
return response.getBody();
} else {
throw new BadRequest("返回接口异常,失败原因[" + response + "]");
}
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new BadRequest("发送GET请求失败,失败原因[" + e.getMessage() + "]");
}
}
/**
* 发送GET请求
* @param url
* @return
*/
public JSONObject sendJXDZGetRequest(String url) {
String reqUrl = "http://" + jxdzIp + url;
log.info("发送GET请求,请求地址{}", reqUrl);
HttpEntity entity = new HttpEntity<>(buildHttpHeaders());
try {
ResponseEntity<JSONObject> response = restTemplate.exchange(reqUrl, HttpMethod.GET, entity, JSONObject.class);
if (HttpStatus.OK == response.getStatusCode()) {
log.info("发送请求成功,请求返回体{}", response.getBody());
return response.getBody();
} else {
throw new BadRequest("返回接口异常,失败原因[" + response + "]");
}
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new BadRequest("发送GET请求失败,失败原因[" + e.getMessage() + "]");
}
}
/**
* 发送Post请求
* @param url
* @param accessType
* @param needDataVO
* @param data
*/
public void sendJXDZPostRequest(String url, Integer accessType, NeedDataVO needDataVO, List data) {
String reqUrl = "http://" + jxdzIp + url;
log.info("发送POST请求,请求地址{}", reqUrl);
HttpEntity<JSONObject> entity = new HttpEntity<>(buildBody(needDataVO.getPlatformId(), needDataVO.getDateTime(), data, accessType, needDataVO.getReaccessId()), buildHttpHeaders());
try {
ResponseEntity<JSONObject> response = restTemplate.postForEntity(reqUrl, entity, JSONObject.class);
if (HttpStatus.OK == response.getStatusCode()) {
JSONObject body = response.getBody();
if (HttpStatus.OK.value() == body.getInteger("code")) {
log.info("发送JXDZ请求成功,请求返回体{}", response.getBody());
} else {
log.info("发送JXDZ请求失败,请求返回体{}", response.getBody());
throw new BadRequest("发送JXDZ请求失败,失败原因[" + response.getBody() + "]");
}
}
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new BadRequest("发送POST请求失败,失败原因[" + e.getMessage() + "]");
}
}
private HttpHeaders buildHttpHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
String authorization = "Bearer " + getToken();
headers.set("Authorization", authorization);
return headers;
}
/**
* 构建请求体
* @param platformId
* @param time
* @param data
* @param accessType
* @param reaccessId
* @return
*/
private JSONObject buildBody(Long platformId, Long time, List data, Integer accessType, Long reaccessId) {
JSONObject body = new JSONObject();
body.put("accessType", accessType);
body.put("encryptData", buildEncryptData(platformId, time, data, reaccessId));
return body;
}
/**
* 加密数据
* @param platformId
* @param time
* @param data
* @param reaccessId
* @return
*/
private String buildEncryptData(Long platformId, Long time, List data, Long reaccessId) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("platformId", platformId);
if (!Objects.isNull(reaccessId)) {
jsonObject.put("reaccessId", reaccessId);
}
jsonObject.put("time", time);
jsonObject.put("data", data);
return dataEncrypt(jsonObject.toJSONString(), publicKey);
}
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo;
import lombok.Data;
@Data
public class NeedDataVO {
/**
* 补录数据的标识
*/
private Long reaccessId;
/**
* 子系统标识
*/
private Long platformId;
/**
* 需要补录的数据类型
*/
private Integer dataType;
/**
* 毫秒级别时间
*/
private Long dateTime;
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
@Data
public class PvDeviceDataVO {
private String code;
private String name;
/**
*日发电量
*/
@JSONField(name = "GenerationDaily")
private Double GenerationDaily;
/**
*月发电量
*/
@JSONField(name = "GenerationMonth")
private Double GenerationMonth;
/**
*年发电量
*/
@JSONField(name = "GenerationYear")
private Double GenerationYear;
/**
*累计发电量
*/
@JSONField(name = "GenerationGross")
private Double GenerationGross;
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
@Data
public class PvStationDataVO {
private String code;
private String name;
/**
*发电功率
*/
@JSONField(name = "GenerationPower")
private Double GenerationPower;
/**
*总辐射
*/
@JSONField(name = "TotalRadiation")
private Double TotalRadiation;
/**
*直接辐射
*/
@JSONField(name = "DirectRadiation")
private Double DirectRadiation;
/**
*散射辐射
*/
@JSONField(name = "ScatterRadiation")
private Double ScatterRadiation;
/**
*日发电量
*/
@JSONField(name = "GenerationDaily")
private Double GenerationDaily;
/**
*月发电量
*/
@JSONField(name = "GenerationMonth")
private Double GenerationMonth;
/**
*年发电量
*/
@JSONField(name = "GenerationYear")
private Double GenerationYear;
/**
*累计发电量
*/
@JSONField(name = "GenerationGross")
private Double GenerationGross;
/**
*利用小时数
*/
@JSONField(name = "UtilizeHours")
private Double UtilizeHours;
/**
*损失电量
*/
@JSONField(name = "LossElectricity")
private Double LossElectricity;
/**
*总辐照度
*/
@JSONField(name = "TotalIrradiance")
private Double TotalIrradiance;
/**
*直接辐照度
*/
@JSONField(name = "DirectIrradiance")
private Double DirectIrradiance;
/**
*散射辐照度
*/
@JSONField(name = "ScatterIrradiance")
private Double ScatterIrradiance;
/**
* 日上网电量
*/
@JSONField(name = "OnGridEnergyDaily")
private Double OnGridEnergyDaily;
/**
* 月上网电量
*/
@JSONField(name = "OnGridEnergyMonth")
private Double OnGridEnergyMonth;
/**
* 年上网电量
*/
@JSONField(name = "OnGridEnergyYear")
private Double OnGridEnergyYear;
/**
* 累计上网电量
*/
@JSONField(name = "OnGridEnergyGross")
private Double OnGridEnergyGross;
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
/**
* 电站运维数据
*/
@Data
public class StationDailyDataVO {
private String code;
private String name;
/**
* 工作票总数
*/
@JSONField(name = "WorkTicketTotalNums")
private Double WorkTicketTotalNums;
/**
* 办理中工作票数
*/
@JSONField(name = "WorkTicketProcessingNums")
private Double WorkTicketProcessingNums;
/**
* 已作废工作票数
*/
@JSONField(name = "WorkTicketInvalidatedNums")
private Double WorkTicketInvalidatedNums;
/**
* 执行中工作票总数
*/
@JSONField(name = "WorkTicketExecutingNums")
private Double WorkTicketExecutingNums;
/**
* 已终结的工作票数
*/
@JSONField(name = "WorkTicketTerminatedNums")
private Double WorkTicketTerminatedNums;
/**
*定期工作任务
*/
@JSONField(name = "RegularTasksNums")
private Double RegularTasksNums;
/**
* 巡检任务数量
*/
@JSONField(name = "InspectionTasksNums")
private Double InspectionTasksNums;
/**
* 工单总数
*/
@JSONField(name = "WorkOrderTotalNums")
private Double WorkOrderTotalNums;
/**
* 工单作废数
*/
@JSONField(name = "WorkOrderInvalidatedNums")
private Double WorkOrderInvalidatedNums;
/**
* 工单待开工数
*/
@JSONField(name = "WorkOrderToBeOpenedNums")
private Double WorkOrderToBeOpenedNums;
/**
* 工单终结数
*/
@JSONField(name = "WorkOrderTerminatedNums")
private Double WorkOrderTerminatedNums;
/**
* 工单开工数
*/
@JSONField(name = "WorkOrderStartNums")
private Double WorkOrderStartNums;
/**
* 二氧化碳减排量
*/
@JSONField(name = "Co2EmissionReduction")
private Double Co2EmissionReduction;
/**
* 节约标准煤
*/
@JSONField(name = "StandardCoalSaving")
private Double StandardCoalSaving;
/**
* 二氧化硫减排量
*/
@JSONField(name = "So2EmissionReduction")
private Double So2EmissionReduction;
/**
* 碳粉尘减排量
*/
@JSONField(name = "CarbonDustEmissionReduction")
private Double CarbonDustEmissionReduction;
/**
* 发电效率
*/
@JSONField(name = "GenerationEfficiency")
private Double GenerationEfficiency;
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
@Data
public class WindDeviceDataVO {
private String code;
private String name;
/**
*日发电量
*/
@JSONField(name = "GenerationDaily")
private Double GenerationDaily;
/**
*月发电量
*/
@JSONField(name = "GenerationMonth")
private Double GenerationMonth;
/**
*年发电量
*/
@JSONField(name = "GenerationYear")
private Double GenerationYear;
/**
*累计发电量
*/
@JSONField(name = "GenerationGross")
private Double GenerationGross;
}
package com.yeejoin.amos.boot.module.jxiop.biz.jxdz.vo;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
@Data
public class WindStationDataVO {
private String code;
private String name;
/**
*发电功率
*/
@JSONField(name = "GenerationPower")
private Double GenerationPower;
/**
* 风速
*/
@JSONField(name = "WindSpeed")
private Double WindSpeed;
/**
*风向
*/
@JSONField(name = "WindDirection")
private Double WindDirection;
/**
*日发电量
*/
@JSONField(name = "GenerationDaily")
private Double GenerationDaily;
/**
* 月发电量
*/
@JSONField(name = "GenerationMonth")
private Double GenerationMonth;
/**
* 年发电量
*/
@JSONField(name = "GenerationYear")
private Double GenerationYear;
/**
*累计发电量
*/
@JSONField(name = "GenerationGross")
private Double GenerationGross;
/**
*利用小时数
*/
@JSONField(name = "UtilizeHours")
private Double UtilizeHours;
/**
*损失电量
*/
@JSONField(name = "LossElectricity")
private Double LossElectricity;
/**
* 日上网电量
*/
@JSONField(name = "OnGridEnergyDaily")
private Double OnGridEnergyDaily;
/**
* 月上网电量
*/
@JSONField(name = "OnGridEnergyMonth")
private Double OnGridEnergyMonth;
/**
* 年上网电量
*/
@JSONField(name = "OnGridEnergyYear")
private Double OnGridEnergyYear;
/**
* 累计上网电量
*/
@JSONField(name = "OnGridEnergyGross")
private Double OnGridEnergyGross;
}
package com.yeejoin.amos.boot.module.jxiop.biz.mapper2;
import org.apache.ibatis.annotations.Param;
public interface JXDZMapper {
/**
* 获取工作票总数
* @param code
* @return
*/
Integer countWorkTicketTotalByCode(@Param("code") String code);
/**
* 获取处理中工作票总数
* @param code
* @return
*/
Integer countWorkTicketProcessingByCode(@Param("code") String code);
/**
* 获取作废的工作票总数
* @param code
* @return
*/
Integer countWorkTicketInvalidatedByCode(@Param("code") String code);
/**
* 获取已终结的工作票总数
* @param code
* @return
*/
Integer countWorkTicketTerminatedByCode(@Param("code") String code);
/**
* 定期工作任务
* @param code
* @return
*/
Integer countRegularTasksByCode(@Param("code") String code);
/**
* 巡检任务数量
* @param code
* @return
*/
Integer countInspectionTasksByCode(@Param("code") String code);
/**
* 工单总数
* @param code
* @return
*/
Integer countWorkOrderTotalByCode(@Param("code") String code);
/**
* 工单作废数
* @param code
* @return
*/
Integer countWorkOrderInvalidatedByCode(@Param("code") String code);
/**
* 工单待开工数
* @param code
* @return
*/
Integer countWorkOrderToBeOpenedByCode(@Param("code") String code);
/**
* 工单终结数
* @param code
* @return
*/
Integer countWorkOrderTerminatedByCode(@Param("code") String code);
/**
* 工单开工数
* @param code
* @return
*/
Integer countWorkOrderStartByCode(@Param("code") String code);
/**
* 获取设备Code
* @param werks
* @param value
* @return
*/
String getDeviceCode(@Param("werks") String werks, @Param("value") String value, @Param("replaceValue") String replaceValue);
}
...@@ -162,8 +162,13 @@ spring.elasticsearch.rest.username=elastic ...@@ -162,8 +162,13 @@ spring.elasticsearch.rest.username=elastic
spring.elasticsearch.rest.password=Yeejoin@2020 spring.elasticsearch.rest.password=Yeejoin@2020
spring.elasticsearch.rest.read-timeout=30000 spring.elasticsearch.rest.read-timeout=30000
logic=false
coreIp=iiet-jepcc.powerchina.cn:8088
jxdzIp=122.70.153.215:9003
jxdzTokenUserName=jiangxi_epc
jxdzTokenPassword=123456
publicKey=04508e9c4df8463c784df2dde2536e792851a8f3fd0e5ff29b7bf1a5d9e3f566aa49a7a5fe7683e3dc4dc30dd7bc8773838a9e4fbcf7dfac53461c8777a6aed691
scheduledEnable=false
......
<?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.yeejoin.amos.boot.module.jxiop.biz.mapper2.JXDZMapper">
<select id="countWorkTicketTotalByCode" resultType="java.lang.Integer">
select COUNT(1) from yxgl_gzp_main where WERKS=#{code}
</select>
<select id="countWorkTicketProcessingByCode" resultType="java.lang.Integer">
select COUNT(1) from yxgl_gzp_main where WERKS=#{code} and ZSTAT in
('01','02','03','04','05','06','07','08','09','10','11','12','15','17','20','21','22','23','24','25','26','27','28','29','30','31','32','33')
</select>
<select id="countWorkTicketInvalidatedByCode" resultType="java.lang.Integer">
select COUNT(1) from yxgl_gzp_main where WERKS=#{code} and ZSTAT ='19'
</select>
<select id="countWorkTicketTerminatedByCode" resultType="java.lang.Integer">
select COUNT(1) from yxgl_gzp_main where WERKS=#{code} and ZSTAT ='13'
</select>
<select id="countRegularTasksByCode" resultType="java.lang.Integer">
SELECT COUNT(1) from yxgl_dqgz_dqrw where WERKS=#{code}
</select>
<select id="countInspectionTasksByCode" resultType="java.lang.Integer">
select COUNT(1) from yxgl_xhjc_new_xjrw where WERKS=#{code}
</select>
<select id="countWorkOrderTotalByCode" resultType="java.lang.Integer">
select COUNT(1) from fdgl_job_main where WERKS=#{code}
</select>
<select id="countWorkOrderInvalidatedByCode" resultType="java.lang.Integer">
select COUNT(1) from fdgl_job_main where WERKS=#{code} and STATE ='4'
</select>
<select id="countWorkOrderToBeOpenedByCode" resultType="java.lang.Integer">
select COUNT(1) from fdgl_job_main where WERKS=#{code} and STATE ='6'
</select>
<select id="countWorkOrderTerminatedByCode" resultType="java.lang.Integer">
select COUNT(1) from fdgl_job_main where WERKS=#{code} and STATE ='3'
</select>
<select id="countWorkOrderStartByCode" resultType="java.lang.Integer">
select COUNT(1) from fdgl_job_main where WERKS=#{code} and STATE ='1'
</select>
<select id="getDeviceCode" resultType="java.lang.String">
select KKSBM from sjgl_zsj_zsbtz where WERKS=#{werks} and (KKSMS like #{value} or KKSMS like #{replaceValue})
</select>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment