Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-zx-biz
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Jobs
Commits
Open sidebar
项目统一框架
一体化_户用光伏项目代码
amos-boot-zx-biz
Commits
4bd7ccf7
Commit
4bd7ccf7
authored
Jul 16, 2024
by
yangyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
对接 碳银电站接口
parent
d6cbfbe9
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
1332 additions
and
2 deletions
+1332
-2
TanYinApiUtils.java
...m/yeejoin/amos/api/householdapi/Utils/TanYinApiUtils.java
+335
-0
TanYinConstant.java
...eejoin/amos/api/householdapi/constant/TanYinConstant.java
+38
-0
HouseholdTestController.java
.../api/householdapi/controller/HouseholdTestController.java
+1
-1
BusinessException.java
...in/amos/api/householdapi/exception/BusinessException.java
+29
-0
TanYinAccessTokenDTO.java
.../amos/api/householdapi/face/dto/TanYinAccessTokenDTO.java
+29
-0
TanYinBaseResultDTO.java
...n/amos/api/householdapi/face/dto/TanYinBaseResultDTO.java
+39
-0
TanYinPageResultDTO.java
...n/amos/api/householdapi/face/dto/TanYinPageResultDTO.java
+40
-0
TanYinCustomerInfo.java
...ace/orm/houseapi/entity/tdeingine/TanYinCustomerInfo.java
+46
-0
TanYinInveterInfo.java
...face/orm/houseapi/entity/tdeingine/TanYinInveterInfo.java
+142
-0
TanYinStationInfo.java
...face/orm/houseapi/entity/tdeingine/TanYinStationInfo.java
+102
-0
TanYinCustomerInfoMapper.java
...pi/face/orm/mapper/tdengine/TanYinCustomerInfoMapper.java
+14
-0
TanYinInveterInfoMapper.java
...api/face/orm/mapper/tdengine/TanYinInveterInfoMapper.java
+9
-0
TanYinStationInfoMapper.java
...api/face/orm/mapper/tdengine/TanYinStationInfoMapper.java
+9
-0
TanYinDataAcquisitionService.java
...useholdapi/face/service/TanYinDataAcquisitionService.java
+46
-0
TanYinDataAcquisitionServiceImpl.java
...i/face/service/impl/TanYinDataAcquisitionServiceImpl.java
+451
-0
PVProducerInfoEnum.java
...va/com/yeejoin/amos/openapi/enums/PVProducerInfoEnum.java
+2
-1
No files found.
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/Utils/TanYinApiUtils.java
0 → 100644
View file @
4bd7ccf7
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
;
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
)
{
// 在业务异常情况下,尝试刷新令牌并重试请求。
// 刷新 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
);
}
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
;
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
)
{
// 在业务异常情况下,尝试刷新令牌并重试请求。
// 刷新 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
);
}
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
()))
{
if
(
"401"
.
equals
(
baseResult
.
getCode
()))
{
// Token 过期
throw
new
BusinessException
(
baseResult
.
getCode
().
toString
(),
baseResult
.
getMsg
());
}
return
null
;
}
// 解析响应数据部分,根据其类型进行相应的处理和转换。
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
;
}
}
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/constant/TanYinConstant.java
0 → 100644
View file @
4bd7ccf7
package
com
.
yeejoin
.
amos
.
api
.
householdapi
.
constant
;
/**
* 碳银常量类
* <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"
;
}
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/controller/HouseholdTestController.java
View file @
4bd7ccf7
...
@@ -277,6 +277,6 @@ public class HouseholdTestController {
...
@@ -277,6 +277,6 @@ public class HouseholdTestController {
@PostMapping
(
value
=
"/tanyin/customer"
)
@PostMapping
(
value
=
"/tanyin/customer"
)
@ApiOperation
(
httpMethod
=
"POST"
,
value
=
"客户信息查询接口"
,
notes
=
"客户信息查询接口"
)
@ApiOperation
(
httpMethod
=
"POST"
,
value
=
"客户信息查询接口"
,
notes
=
"客户信息查询接口"
)
public
void
tanyinCustomer
()
{
public
void
tanyinCustomer
()
{
tanYinDataAcquisitionService
.
customerList
();
tanYinDataAcquisitionService
.
customer
Info
List
();
}
}
}
}
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/exception/BusinessException.java
0 → 100644
View file @
4bd7ccf7
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
{
public
BusinessException
(
String
message
)
{
super
(
message
,
BusinessException
.
class
.
getSimpleName
(),
"错误的请求."
);
this
.
httpStatus
=
500
;
}
public
BusinessException
(
String
message
,
String
errorCode
)
{
super
(
message
,
BusinessException
.
class
.
getSimpleName
(),
message
);
if
(
StringUtils
.
isBlank
(
errorCode
))
{
this
.
httpStatus
=
500
;
}
else
{
this
.
httpStatus
=
Integer
.
parseInt
(
errorCode
);
}
}
}
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/face/dto/TanYinAccessTokenDTO.java
0 → 100644
View file @
4bd7ccf7
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
;
}
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/face/dto/TanYinBaseResultDTO.java
0 → 100644
View file @
4bd7ccf7
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
;
}
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/face/dto/TanYinPageResultDTO.java
0 → 100644
View file @
4bd7ccf7
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
;
}
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/face/orm/houseapi/entity/tdeingine/TanYinCustomerInfo.java
0 → 100644
View file @
4bd7ccf7
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
;
}
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/face/orm/houseapi/entity/tdeingine/TanYinInveterInfo.java
0 → 100644
View file @
4bd7ccf7
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
(
"功率"
)
@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
(
"输入电压 6"
)
@TableField
(
"vol10"
)
private
String
vol10
;
@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
(
"amp10"
)
private
String
amp10
;
@ApiModelProperty
(
"输出电压 1"
)
@TableField
(
"vol5"
)
private
String
vol5
;
@ApiModelProperty
(
"输出电压 2"
)
@TableField
(
"vol6"
)
private
String
vol6
;
@ApiModelProperty
(
"输出电压 3"
)
@TableField
(
"vol7"
)
private
String
vol7
;
@ApiModelProperty
(
"输出电流 1"
)
@TableField
(
"amp5"
)
private
String
amp5
;
@ApiModelProperty
(
"输出电流 2"
)
@TableField
(
"amp6"
)
private
String
amp6
;
@ApiModelProperty
(
"输出电流 3"
)
@TableField
(
"amp7"
)
private
String
amp7
;
@ApiModelProperty
(
"温度(单位:摄氏度)"
)
@TableField
(
"temperature"
)
private
String
temperature
;
@TableField
(
"create_time"
)
private
Long
createTime
;
}
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/face/orm/houseapi/entity/tdeingine/TanYinStationInfo.java
0 → 100644
View file @
4bd7ccf7
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
;
}
}
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/face/orm/mapper/tdengine/TanYinCustomerInfoMapper.java
0 → 100644
View file @
4bd7ccf7
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
();
}
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/face/orm/mapper/tdengine/TanYinInveterInfoMapper.java
0 → 100644
View file @
4bd7ccf7
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
>
{
}
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/face/orm/mapper/tdengine/TanYinStationInfoMapper.java
0 → 100644
View file @
4bd7ccf7
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
>
{
}
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/face/service/TanYinDataAcquisitionService.java
0 → 100644
View file @
4bd7ccf7
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
();
}
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/api/householdapi/face/service/impl/TanYinDataAcquisitionServiceImpl.java
0 → 100644
View file @
4bd7ccf7
package
com
.
yeejoin
.
amos
.
api
.
householdapi
.
face
.
service
.
impl
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.map.MapBuilder
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.Wrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.StringUtils
;
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.GoLangConstant
;
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.JpStation
;
import
com.yeejoin.amos.api.householdapi.face.orm.houseapi.entity.tdeingine.HYGFJPDayPower
;
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.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"
);
@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"
,
"1"
)
.
put
(
"pageSize"
,
"100"
)
// 每页行数
.
put
(
"startDate"
,
LocalDate
.
now
().
minusDays
(
360
).
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
()));
}
@Scheduled
(
cron
=
"${dataRequestScheduled.tanYin}"
)
@Async
@Override
public
void
stationList
()
{
long
ts
=
System
.
currentTimeMillis
();
log
.
info
(
"-------碳银同步电站开始: {} ------- "
,
ts
);
List
<
String
>
projectNos
=
tanYinCustomerInfoMapper
.
listProjectNo
();
projectNos
.
add
(
"TF2024060312382700202"
);
if
(
CollectionUtils
.
isEmpty
(
projectNos
))
{
return
;
}
Map
<
String
,
Object
>
params
=
MapBuilder
.<
String
,
Object
>
create
().
put
(
"projectNoList"
,
projectNos
).
put
(
"powerDate"
,
"2024-07-16"
).
build
();
List
<
TanYinStationInfo
>
tanYinStationInfos
=
tanYinApiUtils
.
post
(
"电站基本信息"
,
apiUrl
+
TanYinConstant
.
stationListUrl
,
params
,
null
,
TanYinStationInfo
.
class
);
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
()));
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
());
tanYinInveterInfoMapper
.
insert
(
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();
// if (!ObjectUtils.isEmpty(golangStationDetail.getModule())) {
// jpStation.setModuleCount(ObjectUtils.isEmpty(Math.toIntExact(golangStationDetail.getModule())) ? 0 : Math.toIntExact(golangStationDetail.getModule()));
// }
// jpStation.setState(GoLangConstant.stationStaus.get(String.valueOf(golangStationDetail.getState())));
// jpStation.setThirdStationId(String.valueOf(golangStationDetail.getId()));
// jpStation.setRealTimePower();
// jpStation.setOnGridType();
// jpStation.setDayIncome();
// jpStation.setMonthIncome();
// jpStation.setYearIncome();
// jpStation.setCumulativeIncome();
// jpStation.setArea();
// jpStation.setEmail();
// jpStation.setOnGridTime();
// 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
);
// ------ 这里要重写
// HYGFJPDayPower hygfjpDayPower = hygfjpDayPowerMapper.selectOne(new QueryWrapper<HYGFJPDayPower>().eq("tation_id", stationId).eq("year_month_day", today).eq("hour", hour));
// if (ObjectUtils.isEmpty(hygfjpDayPower)) {
// hygfjpDayPower = new HYGFJPDayPower();
// }
// hygfjpDayPower.setTationId(stationId);
//
// hygfjpDayPower.setHour(hour);
// hygfjpDayPower.setYearMonthDay(today);
// hygfjpDayPower.setPower(in.getPower());
//
// // 新加
// 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
()));
}
@Scheduled
(
cron
=
"${dataRequestScheduled.tanYin}"
)
@Override
public
void
inverterList
()
{
long
ts
=
System
.
currentTimeMillis
();
log
.
info
(
"-------碳银同步逆变器开始: {} ------- "
,
ts
);
Wrapper
<
TanYinInveterInfo
>
queryWrapper
=
new
QueryWrapper
<>();
List
<
TanYinInveterInfo
>
tanYinInveterInfos
=
tanYinInveterInfoMapper
.
selectList
(
queryWrapper
);
if
(
CollectionUtils
.
isEmpty
(
tanYinInveterInfos
))
{
return
;
}
List
<
String
>
snList
=
tanYinInveterInfos
.
stream
().
map
(
TanYinInveterInfo:
:
getSn
).
distinct
().
collect
(
Collectors
.
toList
());
Map
<
String
,
TanYinInveterInfo
>
tanYinInveterInfoMap
=
tanYinInveterInfos
.
stream
().
collect
(
Collectors
.
toMap
(
TanYinInveterInfo:
:
getSn
,
v
->
v
,
(
k1
,
k2
)
->
k1
));
Map
<
String
,
Object
>
params
=
MapBuilder
.<
String
,
Object
>
create
().
put
(
"snList"
,
snList
).
build
();
JSONObject
tanYinInveterInfoResultMap
=
tanYinApiUtils
.
post
(
"电站逆变器信息"
,
apiUrl
+
TanYinConstant
.
inverterListUrl
,
params
,
null
,
JSONObject
.
class
);
if
(
CollectionUtils
.
isEmpty
(
tanYinInveterInfoMap
))
{
return
;
}
for
(
TanYinInveterInfo
tanYinInveterInfo
:
tanYinInveterInfos
)
{
TanYinInveterInfo
tanYinInveterInfoDTO
=
tanYinInveterInfoResultMap
.
getJSONObject
(
tanYinInveterInfo
.
getSn
()).
toJavaObject
(
TanYinInveterInfo
.
class
);
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.setName(goodWeINverterDetailDto.getIt_name());
jpInverter
.
setSnCode
(
tanYinInveterInfo
.
getSn
());
// jpInverter.setId(String.valueOf(goodWeINverterDetailDto.getId()));
// jpInverter.setCapacity(goodWeINverterDetailDto.getIt_capacity());
jpInverter
.
setThirdStationId
(
tanYinInveterInfo
.
getProjectNo
());
jpInverter
.
setThirdCode
(
PVProducerInfoEnum
.
TANYIN
.
getCode
());
// if (ObjectUtil.isNotEmpty(jpStation) && StringUtils.isNotEmpty(jpStation.getName())) {
// jpInverter.setStationName(jpStation.getName());
// }
jpInverter
.
setRecDate
(
new
Date
());
if
(
tanYinInveterInfoDTO
.
getGmtCreate
()
!=
null
)
{
// jpInverter.setUpdateTime(new Date(tanYinInveterInfoDTO.getGmtCreate()));
}
//
// jpInverter.setRatedPower(inverterDetailDto.getPower() != null
// ? Double.valueOf(inverterDetailDto.getPower())
// : null); // 额定功率
jpInverter
.
setCurrentPower
(
Double
.
parseDouble
(
tanYinInveterInfoDTO
.
getWatt
()));
jpInverter
.
setDayPowerGeneration
(
Double
.
parseDouble
(
tanYinInveterInfoDTO
.
getDailyEnergy
()));
// jpInverter.setMonthPowerGeneration(inverterDetailDto.getEMonth());
// jpInverter.setYearPowerGeneration(inverterDetailDto.getEYear());
jpInverter
.
setTotalPowerGeneration
(
Double
.
parseDouble
(
tanYinInveterInfoDTO
.
getTotalEnergy
()));
jpInverter
.
setBrand
(
tanYinInveterInfoDTO
.
getSupplier
().
toString
());
jpInverter
.
setModel
(
tanYinInveterInfoDTO
.
getDeviceName
());
if
(!
ObjectUtils
.
isEmpty
(
jpInverter
.
getSequenceNbr
()))
{
jpInverterMapper
.
updateById
(
jpInverter
);
}
else
{
jpInverterMapper
.
insert
(
jpInverter
);
}
}
}
}
amos-boot-data/amos-boot-data-housepvapi/src/main/java/com/yeejoin/amos/openapi/enums/PVProducerInfoEnum.java
View file @
4bd7ccf7
...
@@ -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
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment