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
e5ec5d41
Commit
e5ec5d41
authored
May 28, 2024
by
chenzhao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
收益预测接口 分析bug修复
parent
60f881c8
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
389 additions
and
43 deletions
+389
-43
TDBigScreenAnalyseController.java
...le/jxiop/biz/controller/TDBigScreenAnalyseController.java
+42
-31
TdengineTimeServiceImpl.java
...odule/jxiop/biz/service/impl/TdengineTimeServiceImpl.java
+5
-0
IdxBizFanHealthIndexMapper.xml
...n/resources/mapper/cluster/IdxBizFanHealthIndexMapper.xml
+6
-6
StationBasicMapper.xml
...xiop-api/src/main/resources/mapper/StationBasicMapper.xml
+2
-0
EarningsForecastController.java
...dule/jxiop/biz/controller/EarningsForecastController.java
+78
-0
CommonMapper.java
...join/amos/boot/module/jxiop/biz/mapper2/CommonMapper.java
+12
-0
CommonServiceImpl.java
...boot/module/jxiop/biz/service/impl/CommonServiceImpl.java
+30
-6
EarningsForecastImpl.java
...t/module/jxiop/biz/service/impl/EarningsForecastImpl.java
+185
-0
CommonMapper.xml
...en-biz/src/main/resources/mapper/cluster/CommonMapper.xml
+29
-0
No files found.
amos-boot-system-jxiop/amos-boot-module-jxiop-analyse-biz/src/main/java/com/yeejoin/amos/boot/module/jxiop/biz/controller/TDBigScreenAnalyseController.java
View file @
e5ec5d41
...
@@ -13,6 +13,7 @@ import com.yeejoin.amos.boot.module.jxiop.biz.Enum.WarningPeriodEnum;
...
@@ -13,6 +13,7 @@ import com.yeejoin.amos.boot.module.jxiop.biz.Enum.WarningPeriodEnum;
import
com.yeejoin.amos.boot.module.jxiop.biz.service.IPermissionService
;
import
com.yeejoin.amos.boot.module.jxiop.biz.service.IPermissionService
;
import
com.yeejoin.amos.boot.module.jxiop.biz.tdengine.*
;
import
com.yeejoin.amos.boot.module.jxiop.biz.tdengine.*
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
org.springframework.format.annotation.DateTimeFormat
;
...
@@ -241,26 +242,25 @@ public class TDBigScreenAnalyseController extends BaseController {
...
@@ -241,26 +242,25 @@ public class TDBigScreenAnalyseController extends BaseController {
List
<
Integer
>
jgList
=
new
ArrayList
<>();
List
<
Integer
>
jgList
=
new
ArrayList
<>();
List
<
String
>
list
=
new
ArrayList
<>();
List
<
String
>
list
=
new
ArrayList
<>();
FeignClientResult
<
List
<
CompanyModel
>>
listFeignClientResult
=
Privilege
.
companyClient
.
queryAgencyList
(
"AREA"
);
//
FeignClientResult<List<CompanyModel>> listFeignClientResult = Privilege.companyClient.queryAgencyList("AREA");
//
List
<
CompanyModel
>
companyModels
=
new
ArrayList
<>();
//
List<CompanyModel> companyModels = new ArrayList<>();
//
if
(!
ObjectUtils
.
isEmpty
(
listFeignClientResult
))
{
//
if (!ObjectUtils.isEmpty(listFeignClientResult)) {
if
(
listFeignClientResult
.
getStatus
()
==
200
)
{
//
if (listFeignClientResult.getStatus() == 200) {
companyModels
=
listFeignClientResult
.
getResult
();
//
companyModels = listFeignClientResult.getResult();
}
else
{
//
} else {
throw
new
RuntimeException
(
listFeignClientResult
.
getMessage
());
//
throw new RuntimeException(listFeignClientResult.getMessage());
}
//
}
}
//
}
List
<
String
>
collect
=
companyModels
.
stream
().
map
(
t
->
t
.
getCompanyName
()).
collect
(
Collectors
.
toList
());
//
List<String> collect = companyModels.stream().map(t -> t.getCompanyName()).collect(Collectors.toList());
if
(
"idx_biz_fan_warning_record"
.
equals
(
tableName
))
{
if
(
"idx_biz_fan_warning_record"
.
equals
(
tableName
))
{
list
=
collect
;
//
list = collect;
// list = Arrays.asList("华中片区", "西北片区", "西南片区", "华南片区", "华东片区", "东北片区", "华北片区
");
list
=
Arrays
.
asList
(
"华中区域"
,
"西北区域"
,
"西南区域"
,
"华南区域"
,
"华东区域"
,
"东北区域"
,
"华北区域
"
);
}
else
{
}
else
{
list
=
collect
;
// list = collect;
Collections
.
reverse
(
list
);
list
=
Arrays
.
asList
(
"华北区域"
,
"东北区域"
,
"华东区域"
,
"华南区域"
,
"西南区域"
,
"西北区域"
,
"华中区域"
);
// list = Arrays.asList("华北片区", "东北片区", "华东片区", "华南片区", "西南片区", "西北片区", "华中片区");
}
}
list
.
forEach
(
item
->
{
list
.
forEach
(
item
->
{
wxList
.
add
(
wxMap
.
getOrDefault
(
item
,
0
));
wxList
.
add
(
wxMap
.
getOrDefault
(
item
,
0
));
...
@@ -295,18 +295,22 @@ public class TDBigScreenAnalyseController extends BaseController {
...
@@ -295,18 +295,22 @@ public class TDBigScreenAnalyseController extends BaseController {
List
<
String
>
list
=
new
ArrayList
<>();
List
<
String
>
list
=
new
ArrayList
<>();
FeignClientResult
<
List
<
CompanyModel
>>
listFeignClientResult
=
Privilege
.
companyClient
.
queryAgencyList
(
"AREA"
);
// FeignClientResult<List<CompanyModel>> listFeignClientResult = Privilege.companyClient.queryAgencyList("AREA");
//
// List<CompanyModel> companyModels = new ArrayList<>();
//
// if (!ObjectUtils.isEmpty(listFeignClientResult)) {
// if (listFeignClientResult.getStatus() == 200) {
// companyModels = listFeignClientResult.getResult();
// } else {
// throw new RuntimeException(listFeignClientResult.getMessage());
// }
// }
// list = companyModels.stream().map(CompanyModel::getCompanyName).collect(Collectors.toList());
//
list
=
Arrays
.
asList
(
"华北区域"
,
"东北区域"
,
"华东区域"
,
"华南区域"
,
"西南区域"
,
"西北区域"
,
"华中区域"
);
List
<
CompanyModel
>
companyModels
=
new
ArrayList
<>();
if
(!
ObjectUtils
.
isEmpty
(
listFeignClientResult
))
{
if
(
listFeignClientResult
.
getStatus
()
==
200
)
{
companyModels
=
listFeignClientResult
.
getResult
();
}
else
{
throw
new
RuntimeException
(
listFeignClientResult
.
getMessage
());
}
}
list
=
companyModels
.
stream
().
map
(
CompanyModel:
:
getCompanyName
).
collect
(
Collectors
.
toList
());
List
<
Object
>
seriesData
=
new
ArrayList
<>();
List
<
Object
>
seriesData
=
new
ArrayList
<>();
list
.
forEach
(
item
->
seriesData
.
add
(
collect
.
getOrDefault
(
item
,
100.0
)));
list
.
forEach
(
item
->
seriesData
.
add
(
collect
.
getOrDefault
(
item
,
100.0
)));
resultMap
.
put
(
"axisData"
,
list
);
resultMap
.
put
(
"axisData"
,
list
);
...
@@ -337,6 +341,10 @@ public class TDBigScreenAnalyseController extends BaseController {
...
@@ -337,6 +341,10 @@ public class TDBigScreenAnalyseController extends BaseController {
}
}
Integer
count
=
fanWaringRecordMapper
.
getEquipWarningInfoByPageCount
(
arae
,
station
,
stationType
,
warningName
,
Integer
count
=
fanWaringRecordMapper
.
getEquipWarningInfoByPageCount
(
arae
,
station
,
stationType
,
warningName
,
stationId
,
startDate
,
endDate
);
stationId
,
startDate
,
endDate
);
//前端存在分页bug 此处限制分页后筛选导致页面超出问题
if
(
count
>
0
&&
current
>
(
count
/
10
+
1
)){
current
=
1
;
}
// List<IdxBizFanWarningRecord> idxBizFanWarningRecordIPage =
// List<IdxBizFanWarningRecord> idxBizFanWarningRecordIPage =
// idxBizFanWarningRecordMapper.getEquipWarningInfoByPage(arae, station,
// idxBizFanWarningRecordMapper.getEquipWarningInfoByPage(arae, station,
// stationType, (current - 1) * size, size, warningName, stationId, startDate,
// stationType, (current - 1) * size, size, warningName, stationId, startDate,
...
@@ -347,6 +355,7 @@ public class TDBigScreenAnalyseController extends BaseController {
...
@@ -347,6 +355,7 @@ public class TDBigScreenAnalyseController extends BaseController {
Page
<
FanWarningRecord
>
idxBizFanWarningRecordPage
=
new
Page
<>(
current
,
size
);
Page
<
FanWarningRecord
>
idxBizFanWarningRecordPage
=
new
Page
<>(
current
,
size
);
idxBizFanWarningRecordPage
.
setRecords
(
idxBizFanWarningRecordIPage
);
idxBizFanWarningRecordPage
.
setRecords
(
idxBizFanWarningRecordIPage
);
idxBizFanWarningRecordPage
.
setTotal
(
count
);
idxBizFanWarningRecordPage
.
setTotal
(
count
);
idxBizFanWarningRecordPage
.
setCurrent
(
current
);
return
ResponseHelper
.
buildResponse
(
idxBizFanWarningRecordPage
);
return
ResponseHelper
.
buildResponse
(
idxBizFanWarningRecordPage
);
}
}
...
@@ -816,9 +825,11 @@ public class TDBigScreenAnalyseController extends BaseController {
...
@@ -816,9 +825,11 @@ public class TDBigScreenAnalyseController extends BaseController {
StationBasic
stationBasic
=
stationBasicMapper
.
selectById
(
stationId
);
StationBasic
stationBasic
=
stationBasicMapper
.
selectById
(
stationId
);
String
nameByIndexAddress
=
idxBizFanHealthIndexMapper
.
getPointNameByIndexAddress
(
indexAddress
,
tableName
,
String
nameByIndexAddress
=
idxBizFanHealthIndexMapper
.
getPointNameByIndexAddress
(
indexAddress
,
tableName
,
stationBasic
.
getFanGatewayId
());
stationBasic
.
getFanGatewayId
());
int
num
=
0
;
if
(
StringUtils
.
isNotEmpty
(
tableName2
)){
num
=
idxBizFanHealthIndexMapper
.
getIsWarningByPointId
(
indexAddress
,
stationBasic
.
getFanGatewayId
(),
tableName2
);
}
int
num
=
idxBizFanHealthIndexMapper
.
getIsWarningByPointId
(
indexAddress
,
stationBasic
.
getFanGatewayId
(),
tableName2
);
HashMap
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
HashMap
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"text"
,
nameByIndexAddress
);
resultMap
.
put
(
"text"
,
nameByIndexAddress
);
...
...
amos-boot-system-jxiop/amos-boot-module-jxiop-analyse-biz/src/main/java/com/yeejoin/amos/boot/module/jxiop/biz/service/impl/TdengineTimeServiceImpl.java
View file @
e5ec5d41
...
@@ -167,7 +167,12 @@ public class TdengineTimeServiceImpl {
...
@@ -167,7 +167,12 @@ public class TdengineTimeServiceImpl {
levelDesc
=
item
.
getHealthLevel
();
levelDesc
=
item
.
getHealthLevel
();
break
;
break
;
}
}
if
(
healthIndex
==
0
&&
item
.
getGroupLowerLimit
()
==
healthIndex
){
levelDesc
=
item
.
getHealthLevel
();
break
;
}
}
}
return
levelDesc
;
return
levelDesc
;
}
}
...
...
amos-boot-system-jxiop/amos-boot-module-jxiop-analyse-biz/src/main/resources/mapper/cluster/IdxBizFanHealthIndexMapper.xml
View file @
e5ec5d41
...
@@ -290,7 +290,7 @@
...
@@ -290,7 +290,7 @@
<where>
<where>
ANALYSIS_OBJ_TYPE = '场站'
ANALYSIS_OBJ_TYPE = '场站'
AND ANALYSIS_TYPE = '按天'
AND ANALYSIS_TYPE = '按天'
AND DATE_FORMAT( REC_DATE, "%Y-%m-%d" ) = CURRENT_DATE
AND DATE_FORMAT( REC_DATE, "%Y-%m-%d" ) = CURRENT_DATE
- INTERVAL 1 DAY
<if
test=
"areaCode != null and areaCode != ''"
>
<if
test=
"areaCode != null and areaCode != ''"
>
AND ARAE like concat('%', #{areaCode}, '%')
AND ARAE like concat('%', #{areaCode}, '%')
</if>
</if>
...
@@ -446,14 +446,14 @@
...
@@ -446,14 +446,14 @@
</select>
</select>
<select
id=
"getSubSystemInfo"
resultType=
"java.util.Map"
>
<select
id=
"getSubSystemInfo"
resultType=
"java.util.Map"
>
SELECT
SELECT
round(IFNULL( HEALTH_INDEX, 100 ), 1) AS healthIndex,
round(IFNULL( HEALTH_INDEX, 100 ), 1) AS healthIndex,
``
SUB_SYSTEM AS subSystem
SUB_SYSTEM AS subSystem
FROM
FROM
fan_health_index_latest_data
fan_health_index_latest_data
<where>
<where>
ANALYSIS_OBJ_TYPE = '子系统'
ANALYSIS_OBJ_TYPE = '子系统'
AND ANALYSIS_TYPE = '按天'
AND ANALYSIS_TYPE = '按天'
AND DATE_FORMAT( REC_DATE, "%Y-%m-%d" ) = CURRENT_DATE
AND DATE_FORMAT( REC_DATE, "%Y-%m-%d" ) = CURRENT_DATE
- INTERVAL 1 DAY
<if
test=
"equipmentName != null and equipmentName != ''"
>
<if
test=
"equipmentName != null and equipmentName != ''"
>
AND EQUIPMENT_NAME like concat( '%', #{equipmentName} ,'风机')
AND EQUIPMENT_NAME like concat( '%', #{equipmentName} ,'风机')
</if>
</if>
...
@@ -490,7 +490,7 @@
...
@@ -490,7 +490,7 @@
<where>
<where>
ANALYSIS_OBJ_TYPE = '设备'
ANALYSIS_OBJ_TYPE = '设备'
AND ANALYSIS_TYPE = '按天'
AND ANALYSIS_TYPE = '按天'
AND DATE_FORMAT( REC_DATE, "%Y-%m-%d" ) = CURRENT_DATE
AND DATE_FORMAT( REC_DATE, "%Y-%m-%d" ) = CURRENT_DATE
- INTERVAL 1 DAY
<if
test=
"gatewayId != null and gatewayId != ''"
>
<if
test=
"gatewayId != null and gatewayId != ''"
>
AND GATEWAY_ID = #{gatewayId}
AND GATEWAY_ID = #{gatewayId}
</if>
</if>
...
@@ -608,7 +608,7 @@
...
@@ -608,7 +608,7 @@
<where>
<where>
ANALYSIS_OBJ_TYPE = '子阵'
ANALYSIS_OBJ_TYPE = '子阵'
AND ANALYSIS_TYPE = '按天'
AND ANALYSIS_TYPE = '按天'
AND DATE_FORMAT( REC_DATE, "%Y-%m-%d" ) = CURRENT_DATE
AND DATE_FORMAT( REC_DATE, "%Y-%m-%d" ) = CURRENT_DATE
- INTERVAL 1 DAY
<if
test=
"gatewayId != null and gatewayId != ''"
>
<if
test=
"gatewayId != null and gatewayId != ''"
>
AND GATEWAY_ID = #{gatewayId}
AND GATEWAY_ID = #{gatewayId}
</if>
</if>
...
@@ -625,7 +625,7 @@
...
@@ -625,7 +625,7 @@
<where>
<where>
ANALYSIS_OBJ_TYPE = '设备'
ANALYSIS_OBJ_TYPE = '设备'
AND ANALYSIS_TYPE = '按天'
AND ANALYSIS_TYPE = '按天'
AND DATE_FORMAT( REC_DATE, "%Y-%m-%d" ) = CURRENT_DATE
AND DATE_FORMAT( REC_DATE, "%Y-%m-%d" ) = CURRENT_DATE
- INTERVAL 1 DAY
<if
test=
"subarray != null and subarray != ''"
>
<if
test=
"subarray != null and subarray != ''"
>
AND SUBARRAY = concat('#', #{subarray})
AND SUBARRAY = concat('#', #{subarray})
</if>
</if>
...
...
amos-boot-system-jxiop/amos-boot-module-jxiop-api/src/main/resources/mapper/StationBasicMapper.xml
View file @
e5ec5d41
...
@@ -209,6 +209,8 @@
...
@@ -209,6 +209,8 @@
station_basic
station_basic
where
where
area_code = #{areaCode}
area_code = #{areaCode}
and
is_delete = 0
</select>
</select>
</mapper>
</mapper>
amos-boot-system-jxiop/amos-boot-module-jxiop-bigscreen-biz/src/main/java/com/yeejoin/amos/boot/module/jxiop/biz/controller/EarningsForecastController.java
0 → 100644
View file @
e5ec5d41
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jxiop
.
biz
.
controller
;
import
cn.hutool.core.map.MapBuilder
;
import
cn.hutool.http.HttpUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.yeejoin.amos.boot.module.jxiop.api.dto.StationBasicDto
;
import
com.yeejoin.amos.boot.module.jxiop.api.entity.StationBasic
;
import
com.yeejoin.amos.boot.module.jxiop.api.mapper.StationBasicMapper
;
import
com.yeejoin.amos.boot.module.jxiop.biz.ESDto.ESMoonPowerGeneration
;
import
com.yeejoin.amos.boot.module.jxiop.biz.constants.CommonConstans
;
import
com.yeejoin.amos.boot.module.jxiop.biz.mapper2.CommonMapper
;
import
com.yeejoin.amos.boot.module.jxiop.biz.service.impl.CommonServiceImpl
;
import
com.yeejoin.amos.boot.module.jxiop.biz.service.impl.EarningsForecastImpl
;
import
org.apache.http.client.HttpClient
;
import
org.elasticsearch.action.get.GetResponse
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.typroject.tyboot.core.foundation.enumeration.UserType
;
import
org.typroject.tyboot.core.restful.doc.TycloudOperation
;
import
org.typroject.tyboot.core.restful.utils.ResponseHelper
;
import
org.typroject.tyboot.core.restful.utils.ResponseModel
;
import
java.nio.charset.StandardCharsets
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
static
com
.
alibaba
.
fastjson
.
JSON
.
toJSONString
;
import
static
java
.
lang
.
Boolean
.
TRUE
;
@RestController
@RequestMapping
(
"earningsForecast"
)
public
class
EarningsForecastController
{
@Autowired
private
StationBasicMapper
stationBasicMapper
;
@Autowired
private
EarningsForecastImpl
earningsForecast
;
@RequestMapping
(
value
=
"earningsForecast"
,
method
=
RequestMethod
.
GET
)
@TycloudOperation
(
needAuth
=
false
,
ApiLevel
=
UserType
.
AGENCY
)
public
ResponseModel
<
Object
>
earningsForecast
(
@RequestParam
(
required
=
true
,
value
=
"stationId"
)
Long
stationId
,
@RequestParam
(
required
=
true
,
value
=
"type"
)
String
type
){
return
ResponseHelper
.
buildResponse
(
earningsForecast
.
earningsForecast
(
stationId
,
type
));
}
@RequestMapping
(
value
=
"getStationListByArae"
,
method
=
RequestMethod
.
GET
)
@TycloudOperation
(
needAuth
=
false
,
ApiLevel
=
UserType
.
AGENCY
)
public
ResponseModel
<
List
<
Map
<
String
,
Object
>>>
getStationListByArae
(
String
araeCode
,
String
stationType
){
List
<
Map
<
String
,
Object
>>
maps
=
new
ArrayList
<>();
if
(
stationType
.
equals
(
"FDZ"
)){
stationBasicMapper
.
getStationsByAreaCode
(
araeCode
).
stream
().
filter
(
a
->
a
.
getStationType
().
equals
(
stationType
)).
forEach
(
e
->{
maps
.
add
(
MapBuilder
.<
String
,
Object
>
create
().
put
(
"text"
,
e
.
getStationName
()).
put
(
"value"
,
e
.
getSequenceNbr
()).
build
());
});
}
else
{
stationBasicMapper
.
getStationsByAreaCode
(
araeCode
).
stream
().
filter
(
a
->!
a
.
getStationType
().
equals
(
stationType
)).
forEach
(
e
->{
maps
.
add
(
MapBuilder
.<
String
,
Object
>
create
().
put
(
"text"
,
e
.
getStationName
()).
put
(
"value"
,
e
.
getSequenceNbr
()).
build
());
});
}
return
ResponseHelper
.
buildResponse
(
maps
);
}
}
amos-boot-system-jxiop/amos-boot-module-jxiop-bigscreen-biz/src/main/java/com/yeejoin/amos/boot/module/jxiop/biz/mapper2/CommonMapper.java
0 → 100644
View file @
e5ec5d41
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jxiop
.
biz
.
mapper2
;
import
org.apache.ibatis.annotations.Select
;
import
java.util.List
;
import
java.util.Map
;
public
interface
CommonMapper
{
List
<
Map
<
String
,
String
>>
selectAgo10Month
();
List
<
Map
<
String
,
String
>>
selectLast3Month
();
}
amos-boot-system-jxiop/amos-boot-module-jxiop-bigscreen-biz/src/main/java/com/yeejoin/amos/boot/module/jxiop/biz/service/impl/CommonServiceImpl.java
View file @
e5ec5d41
...
@@ -31,6 +31,7 @@ import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms;
...
@@ -31,6 +31,7 @@ import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms;
import
org.elasticsearch.search.aggregations.bucket.terms.Terms
;
import
org.elasticsearch.search.aggregations.bucket.terms.Terms
;
import
org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder
;
import
org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder
;
import
org.elasticsearch.search.aggregations.metrics.AvgAggregationBuilder
;
import
org.elasticsearch.search.aggregations.metrics.AvgAggregationBuilder
;
import
org.elasticsearch.search.aggregations.metrics.Sum
;
import
org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder
;
import
org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.PageRequest
;
...
@@ -423,7 +424,7 @@ public class CommonServiceImpl {
...
@@ -423,7 +424,7 @@ public class CommonServiceImpl {
return
null
;
return
null
;
}
}
public
<
T
>
List
<
T
>
getListDataByCondtions
(
Map
<
String
,
List
<
String
>>
mustQuerCondtion
,
Map
<
String
,
String
>
shouldQuerCondtion
,
Class
<
T
>
tClass
,
Map
<
String
,
String
>
likeQuerCondtion
)
{
public
<
T
>
TreeMap
<
String
,
Double
>
getListDataByCondtionsSum
(
Map
<
String
,
List
<
String
>>
mustQuerCondtion
,
List
<
Map
<
String
,
String
>
>
shouldQuerCondtion
,
Class
<
T
>
tClass
,
Map
<
String
,
String
>
likeQuerCondtion
)
{
BoolQueryBuilder
queryBuilder
=
QueryBuilders
.
boolQuery
();
BoolQueryBuilder
queryBuilder
=
QueryBuilders
.
boolQuery
();
if
(!
ObjectUtils
.
isEmpty
(
mustQuerCondtion
))
{
if
(!
ObjectUtils
.
isEmpty
(
mustQuerCondtion
))
{
for
(
String
key
:
mustQuerCondtion
.
keySet
())
{
for
(
String
key
:
mustQuerCondtion
.
keySet
())
{
...
@@ -432,9 +433,14 @@ public class CommonServiceImpl {
...
@@ -432,9 +433,14 @@ public class CommonServiceImpl {
}
}
}
}
if
(!
ObjectUtils
.
isEmpty
(
shouldQuerCondtion
))
{
if
(!
ObjectUtils
.
isEmpty
(
shouldQuerCondtion
))
{
for
(
String
key
:
shouldQuerCondtion
.
keySet
())
{
BoolQueryBuilder
boolQueryBuilder
=
QueryBuilders
.
boolQuery
();
queryBuilder
.
should
(
QueryBuilders
.
wildcardQuery
(
key
,
shouldQuerCondtion
.
get
(
key
)));
shouldQuerCondtion
.
forEach
(
e
->{
for
(
String
key
:
e
.
keySet
())
{
boolQueryBuilder
.
should
(
QueryBuilders
.
wildcardQuery
(
key
,
e
.
get
(
key
)));
}
}
});
boolQueryBuilder
.
minimumShouldMatch
(
1
);
queryBuilder
.
must
(
boolQueryBuilder
);
}
}
if
(!
ObjectUtils
.
isEmpty
(
likeQuerCondtion
))
{
if
(!
ObjectUtils
.
isEmpty
(
likeQuerCondtion
))
{
...
@@ -442,15 +448,33 @@ public class CommonServiceImpl {
...
@@ -442,15 +448,33 @@ public class CommonServiceImpl {
queryBuilder
.
must
(
QueryBuilders
.
wildcardQuery
(
key
,
"*"
+
likeQuerCondtion
.
get
(
key
)
+
"*"
));
queryBuilder
.
must
(
QueryBuilders
.
wildcardQuery
(
key
,
"*"
+
likeQuerCondtion
.
get
(
key
)
+
"*"
));
}
}
}
}
// 如果只对一个字段进行分组写一个就好
TermsAggregationBuilder
tb1
=
AggregationBuilders
.
terms
(
"group_day"
).
field
(
"day.keyword"
);
// gatewayId
tb1
.
subAggregation
(
AggregationBuilders
.
sum
(
"sum_valueDouble"
).
field
(
"value"
));
Query
query
=
new
NativeSearchQueryBuilder
()
Query
query
=
new
NativeSearchQueryBuilder
()
.
withQuery
(
queryBuilder
)
.
withQuery
(
queryBuilder
)
.
addAggregation
(
tb1
)
.
build
();
.
build
();
query
.
setTrackTotalHits
(
true
);
query
.
setTrackTotalHits
(
true
);
SearchHits
search
=
elasticsearchTemplate
.
search
(
query
,
tClass
);
SearchHits
search
=
elasticsearchTemplate
.
search
(
query
,
tClass
);
if
(
search
.
hasSearchHits
())
{
if
(
search
.
hasSearchHits
())
{
List
<
SearchHit
<
T
>>
searchHitList
=
search
.
getSearchHits
();
List
<
SearchHit
<
T
>>
searchHitList
=
search
.
getSearchHits
();
List
<
T
>
list
=
searchHitList
.
stream
().
map
(
hit
->
hit
.
getContent
()).
collect
(
Collectors
.
toList
());
Terms
groupDayAgg
=
search
.
getAggregations
().
get
(
"group_day"
);
return
list
;
TreeMap
<
String
,
Double
>
groupedSums
=
new
TreeMap
<>();
for
(
Terms
.
Bucket
entry
:
groupDayAgg
.
getBuckets
())
{
// 获取分组的键(即 "day" 字段的值)
String
day
=
entry
.
getKeyAsString
();
// 获取该分组下的 "sum_valueDouble" 聚合结果
Sum
sumAgg
=
entry
.
getAggregations
().
get
(
"sum_valueDouble"
);
double
sumValue
=
sumAgg
.
getValue
();
// 在这里处理每个分组和对应的总和
// 例如,你可以将它们存储在一个Map中,键是日期,值是总和
groupedSums
.
put
(
day
,
sumValue
);
}
return
groupedSums
;
}
}
return
null
;
return
null
;
}
}
...
...
amos-boot-system-jxiop/amos-boot-module-jxiop-bigscreen-biz/src/main/java/com/yeejoin/amos/boot/module/jxiop/biz/service/impl/EarningsForecastImpl.java
0 → 100644
View file @
e5ec5d41
package
com
.
yeejoin
.
amos
.
boot
.
module
.
jxiop
.
biz
.
service
.
impl
;
import
cn.hutool.http.HttpUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.yeejoin.amos.boot.module.jxiop.api.entity.StationBasic
;
import
com.yeejoin.amos.boot.module.jxiop.api.mapper.StationBasicMapper
;
import
com.yeejoin.amos.boot.module.jxiop.biz.ESDto.ESMoonPowerGeneration
;
import
com.yeejoin.amos.boot.module.jxiop.biz.constants.CommonConstans
;
import
com.yeejoin.amos.boot.module.jxiop.biz.mapper2.CommonMapper
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
java.util.*
;
import
java.util.stream.Collectors
;
@Service
public
class
EarningsForecastImpl
{
@Autowired
private
CommonServiceImpl
commonService
;
@Autowired
private
CommonMapper
commonMapper
;
@Value
(
"${forecast.url}"
)
private
String
forecastUrl
;
@Autowired
private
StationBasicMapper
stationBasicMapper
;
public
Object
earningsForecast
(
Long
stationId
,
String
type
){
List
<
Map
<
String
,
String
>>
list
=
commonMapper
.
selectAgo10Month
();
List
<
Map
<
String
,
String
>>
lastThreeMonth
=
commonMapper
.
selectLast3Month
();
Map
<
String
,
List
<
String
>>
queryCondtion1
=
new
HashMap
<>();
StationBasic
stationBasic
=
stationBasicMapper
.
selectById
(
stationId
);
if
(
type
.
equals
(
"FDZ"
)){
queryCondtion1
.
put
(
CommonConstans
.
QueryStringGateWayId
,
Arrays
.
asList
(
stationBasic
.
getFanGatewayId
()));
}
else
{
queryCondtion1
.
put
(
CommonConstans
.
QueryStringGateWayId
,
Arrays
.
asList
(
stationBasic
.
getBoosterGatewayId
()));
}
List
<
Map
<
String
,
String
>>
objects
=
new
ArrayList
<>();
TreeMap
<
String
,
String
>
months
=
new
TreeMap
<>();
list
.
forEach
(
e
->{
Map
<
String
,
String
>
likeQueryCondtion
=
new
HashMap
<>();
likeQueryCondtion
.
put
(
"id.keyword"
,
e
.
get
(
"MonthYear"
)+
"*"
);
objects
.
add
(
likeQueryCondtion
);
String
key
=
e
.
get
(
"MonthYear"
).
split
(
"-"
)[
1
];
months
.
put
(
String
.
valueOf
(
Integer
.
parseInt
(
key
)),
e
.
get
(
"MonthYear"
));
});
TreeMap
<
String
,
Double
>
map
=
commonService
.
getListDataByCondtionsSum
(
queryCondtion1
,
objects
,
ESMoonPowerGeneration
.
class
,
null
);
TreeMap
<
String
,
Double
>
carbonDioxide
=
new
TreeMap
<>();
TreeMap
<
String
,
Double
>
standardCoal
=
new
TreeMap
<>();
TreeMap
<
String
,
Double
>
toner
=
new
TreeMap
<>();
TreeMap
<
String
,
Double
>
sulfurDioxide
=
new
TreeMap
<>();
//计算历史月发电量的收益
map
.
keySet
().
forEach
(
e
->{
carbonDioxide
.
put
(
months
.
get
(
e
),
Double
.
valueOf
(
String
.
format
(
"%.3f"
,
map
.
get
(
e
)
*
CommonConstans
.
carbonDioxide
)));
standardCoal
.
put
(
months
.
get
(
e
),
Double
.
valueOf
(
String
.
format
(
"%.3f"
,
map
.
get
(
e
)
*
CommonConstans
.
standardCoal
)));
toner
.
put
(
months
.
get
(
e
),
Double
.
valueOf
(
String
.
format
(
"%.3f"
,
map
.
get
(
e
)
*
CommonConstans
.
toner
)));
sulfurDioxide
.
put
(
months
.
get
(
e
),
Double
.
valueOf
(
String
.
format
(
"%.3f"
,
map
.
get
(
e
)
*
CommonConstans
.
sulfurDioxide
)));
});
List
<
TreeMap
<
String
,
List
<
List
<
String
>>>>
resultList
=
new
ArrayList
<>();
TreeMap
<
String
,
List
<
List
<
String
>>>
Co2Map
=
new
TreeMap
();
TreeMap
<
String
,
List
<
List
<
String
>>>
standardCoalMap
=
new
TreeMap
();
TreeMap
<
String
,
List
<
List
<
String
>>>
tonerMap
=
new
TreeMap
();
TreeMap
<
String
,
List
<
List
<
String
>>>
sulfurDioxideMap
=
new
TreeMap
();
TreeMap
<
String
,
List
<
List
<
String
>>>
Co2ForecastMap
=
new
TreeMap
();
TreeMap
<
String
,
List
<
List
<
String
>>>
standardCoalForecastMap
=
new
TreeMap
();
TreeMap
<
String
,
List
<
List
<
String
>>>
tonerForecastMap
=
new
TreeMap
();
TreeMap
<
String
,
List
<
List
<
String
>>>
sulfurDioxideForecastMap
=
new
TreeMap
();
//组装历史数据折线图数据
List
<
List
<
String
>>
Co2List
=
this
.
buildResultData
(
carbonDioxide
);
Co2Map
.
put
(
"data"
,
Co2List
);
List
<
List
<
String
>>
standardCoalList
=
this
.
buildResultData
(
standardCoal
);
standardCoalMap
.
put
(
"data"
,
standardCoalList
);
List
<
List
<
String
>>
tonerList
=
this
.
buildResultData
(
toner
);
tonerMap
.
put
(
"data"
,
tonerList
);
List
<
List
<
String
>>
sulfurDioxideList
=
this
.
buildResultData
(
sulfurDioxide
);
sulfurDioxideMap
.
put
(
"data"
,
sulfurDioxideList
);
//查询预测收益接口
JSONObject
carbonDioxideData
=
getResponse
(
"二氧化碳减排量"
,
carbonDioxide
.
values
().
stream
().
collect
(
Collectors
.
toList
()));
JSONObject
standardCoalData
=
getResponse
(
"标准煤减排量"
,
standardCoal
.
values
().
stream
().
collect
(
Collectors
.
toList
()));
JSONObject
tonerData
=
getResponse
(
"炭粉尘减排量"
,
toner
.
values
().
stream
().
collect
(
Collectors
.
toList
()));
JSONObject
sulfurDioxideData
=
getResponse
(
"二氧化硫减排量"
,
sulfurDioxide
.
values
().
stream
().
collect
(
Collectors
.
toList
()));
//将预测返回的数据组装成组件需要的格式
List
<
List
<
String
>>
carbonDioxideList
=
this
.
buildData
(
lastThreeMonth
,
carbonDioxideData
,
Co2List
);
Co2ForecastMap
.
put
(
"data"
,
carbonDioxideList
);
List
<
List
<
String
>>
standardCoalLists
=
this
.
buildData
(
lastThreeMonth
,
standardCoalData
,
standardCoalList
);
standardCoalForecastMap
.
put
(
"data"
,
standardCoalLists
);
List
<
List
<
String
>>
tonerLists
=
this
.
buildData
(
lastThreeMonth
,
tonerData
,
tonerList
);
tonerForecastMap
.
put
(
"data"
,
tonerLists
);
List
<
List
<
String
>>
sulfurDioxideLists
=
this
.
buildData
(
lastThreeMonth
,
sulfurDioxideData
,
sulfurDioxideList
);
sulfurDioxideForecastMap
.
put
(
"data"
,
sulfurDioxideLists
);
resultList
.
add
(
Co2Map
);
resultList
.
add
(
standardCoalMap
);
resultList
.
add
(
tonerMap
);
resultList
.
add
(
sulfurDioxideMap
);
resultList
.
add
(
Co2ForecastMap
);
resultList
.
add
(
standardCoalForecastMap
);
resultList
.
add
(
tonerForecastMap
);
resultList
.
add
(
sulfurDioxideForecastMap
);
return
resultList
;
}
List
<
List
<
String
>>
buildResultData
(
TreeMap
<
String
,
Double
>
map
){
List
<
List
<
String
>>
lists
=
new
ArrayList
<>();
map
.
keySet
().
forEach
(
e
->{
List
<
String
>
list
=
Arrays
.
asList
(
e
,
String
.
valueOf
(
map
.
get
(
e
)));
lists
.
add
(
list
);
});
return
lists
;
}
String
buildParams
(
String
name
,
List
<
Double
>
values
){
HashMap
<
Object
,
Object
>
requestParams
=
new
HashMap
<>();
HashMap
<
Object
,
Object
>
valueLabel
=
new
HashMap
<>();
HashMap
<
Object
,
Object
>
value
=
new
HashMap
<>();
value
.
put
(
"值"
,
values
);
valueLabel
.
put
(
name
,
value
);
value
.
put
(
"名称"
,
name
);
HashMap
<
Object
,
Object
>
params
=
new
HashMap
<>();
HashMap
<
Object
,
Object
>
basic
=
new
HashMap
<>();
HashMap
<
Object
,
Object
>
dispPrecision
=
new
HashMap
<>();
dispPrecision
.
put
(
"disp_precision"
,
3
);
params
.
put
(
"config"
,
dispPrecision
);
basic
.
put
(
"data"
,
name
);
basic
.
put
(
"seasonal_length"
,
values
.
size
()/
2
);
basic
.
put
(
"model_type"
,
"additive"
);
basic
.
put
(
"model_component_type"
,
"seasonal_only"
);
basic
.
put
(
"is_generate_forecast"
,
true
);
basic
.
put
(
"forecast_number"
,
"3"
);
params
.
put
(
"basic"
,
basic
);
requestParams
.
put
(
"params"
,
params
);
requestParams
.
put
(
"dataset"
,
valueLabel
);
return
JSON
.
toJSONString
(
requestParams
);
}
JSONObject
getResponse
(
String
name
,
List
<
Double
>
values
){
String
requestParam
=
buildParams
(
name
,
values
);
Map
<
String
,
String
>
hashMaphead
=
new
HashMap
<>();
hashMaphead
.
put
(
"Content-Type"
,
"application/x-www-form-urlencoded;charset=utf-8"
);
String
respone
=
HttpUtil
.
createPost
(
forecastUrl
).
headerMap
(
hashMaphead
,
false
).
body
(
requestParam
).
execute
().
body
();
return
JSONObject
.
parseObject
(
respone
);
}
List
<
List
<
String
>>
buildData
(
List
<
Map
<
String
,
String
>>
data
,
JSONObject
obj
,
List
<
List
<
String
>>
lists
){
JSONObject
dataObject
=
obj
.
getJSONObject
(
"data"
);
// 从data对象中提取forecast和history数组
JSONArray
forecastArray
=
dataObject
.
getJSONArray
(
"forecast"
);
for
(
int
i
=
0
;
i
<
forecastArray
.
size
();
i
++)
{
List
<
String
>
list
=
Arrays
.
asList
(
data
.
get
(
i
).
get
(
"MonthYear"
),
forecastArray
.
getString
(
i
));
lists
.
add
(
list
);
}
return
lists
;
}
}
amos-boot-system-jxiop/amos-boot-module-jxiop-bigscreen-biz/src/main/resources/mapper/cluster/CommonMapper.xml
0 → 100644
View file @
e5ec5d41
<?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.CommonMapper"
>
<select
id=
"selectAgo10Month"
resultType=
"map"
>
WITH RECURSIVE month_sequence AS (
SELECT 0 AS num
UNION ALL
SELECT num + 1 FROM month_sequence WHERE num
<
9
)
SELECT DATE_FORMAT(DATE_SUB(NOW(), INTERVAL (num + 1) MONTH), '%Y-%m') AS MonthYear
FROM month_sequence
ORDER BY MonthYear DESC;
</select>
<select
id=
"selectLast3Month"
resultType=
"map"
>
WITH RECURSIVE month_sequence AS (
SELECT 0 AS num
UNION ALL
SELECT num + 1 FROM month_sequence WHERE num
<
2
)
SELECT DATE_FORMAT(DATE_SUB(NOW(), INTERVAL -(num ) MONTH), '%Y-%m') AS MonthYear
FROM month_sequence
ORDER BY MonthYear ASC;
</select>
</mapper>
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