Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
J
jxyq
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
贾庆卫
jxyq
Commits
994c6705
提交
994c6705
authored
4月 15, 2023
作者:
JQW
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
推荐资讯
上级
a58dbbc6
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
692 行增加
和
0 行删除
+692
-0
MemRecommendController.java
...om/zzsn/clb/member/controller/MemRecommendController.java
+151
-0
MemRecommend.java
...rc/main/java/com/zzsn/clb/member/entity/MemRecommend.java
+61
-0
MemRecommendMapper.java
...n/java/com/zzsn/clb/member/mapper/MemRecommendMapper.java
+20
-0
MemRecommendMapper.xml
...ava/com/zzsn/clb/member/mapper/xml/MemRecommendMapper.xml
+6
-0
IMemRecommendService.java
...ava/com/zzsn/clb/member/service/IMemRecommendService.java
+34
-0
MemRecommendServiceImpl.java
...zzsn/clb/member/service/impl/MemRecommendServiceImpl.java
+123
-0
ISubjectService.java
...c/main/java/com/zzsn/clb/web/service/ISubjectService.java
+35
-0
SubjectServiceImpl.java
...ava/com/zzsn/clb/web/service/impl/SubjectServiceImpl.java
+262
-0
没有找到文件。
service-web/src/main/java/com/zzsn/clb/member/controller/MemRecommendController.java
0 → 100644
浏览文件 @
994c6705
package
com
.
zzsn
.
clb
.
member
.
controller
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.zzsn.clb.member.service.IMemRecommendAsynService
;
import
com.zzsn.clb.member.service.ISubjectTreeService
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.shiro.SecurityUtils
;
import
org.jeecg.common.api.vo.Result
;
import
org.jeecg.common.aspect.annotation.AutoLog
;
import
org.jeecg.common.system.vo.LoginUser
;
import
com.zzsn.clb.member.entity.MemRecommend
;
import
com.zzsn.clb.member.service.IMemRecommendService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.jeecg.common.system.base.controller.JeecgController
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.web.bind.annotation.*
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
/**
* @Description: 会员-推荐资讯表
* @Author: jeecg-boot
* @Date: 2023-04-03
* @Version: V1.0
*/
@Slf4j
@Api
(
tags
=
"会员-推荐资讯表"
)
@RestController
@RequestMapping
(
"/mach/mem/recommend"
)
public
class
MemRecommendController
extends
JeecgController
<
MemRecommend
,
IMemRecommendService
>
{
@Resource
private
IMemRecommendService
memRecommendService
;
@Resource
IMemRecommendAsynService
memRecommendAsynService
;
/**
* 分页列表查询
*
* @param memRecommend
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog
(
value
=
"会员-推荐资讯表-分页列表查询"
)
@ApiOperation
(
value
=
"会员-推荐资讯表-分页列表查询"
,
notes
=
"会员-推荐资讯表-分页列表查询"
)
@GetMapping
(
value
=
"/list"
)
public
Result
<?>
queryPageList
(
MemRecommend
memRecommend
,
@RequestParam
(
name
=
"pageNo"
,
defaultValue
=
"1"
)
Integer
pageNo
,
@RequestParam
(
name
=
"pageSize"
,
defaultValue
=
"10"
)
Integer
pageSize
,
HttpServletRequest
req
)
{
//获取推荐关键词,标签信息并积分排序
LambdaQueryWrapper
<
MemRecommend
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
LoginUser
user
=
(
LoginUser
)
SecurityUtils
.
getSubject
().
getPrincipal
();
queryWrapper
.
eq
(
MemRecommend:
:
getUserId
,
user
.
getId
());
queryWrapper
.
gt
(
MemRecommend:
:
getScore
,
0
);
queryWrapper
.
orderByDesc
(
MemRecommend:
:
getScore
);
List
<
MemRecommend
>
list
=
memRecommendService
.
list
(
queryWrapper
);
List
result
=
new
ArrayList
();
//计算结束位置
Integer
endIndex
=
pageSize
*
pageNo
;
//根据关键词及标签装配资讯信息
for
(
MemRecommend
recommend
:
list
)
{
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
Integer
size
=
3
;
String
labelId
=
null
;
String
keyWord
=
null
;
if
(
recommend
.
getType
()
==
2
)
{
keyWord
=
recommend
.
getKeyWord
();
size
=
5
;
}
else
{
labelId
=
recommend
.
getLabelId
();
}
List
<
Map
<
String
,
Object
>>
newsList
=
memRecommendService
.
getNewsList
(
size
,
keyWord
,
labelId
);
result
.
addAll
(
newsList
);
//超过100条退出
if
(
result
.
size
()
>=
100
)
break
;
}
if
(
result
.
size
()
==
0
)
return
Result
.
OK
(
result
);
if
(
result
.
size
()
<
endIndex
)
endIndex
=
result
.
size
();
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
int
pages
=
(
int
)
Math
.
ceil
(
result
.
size
()
*
10
*
0.1
/
pageSize
);
pageNo
=
pageNo
>
pages
?
pages
:
pageNo
;
map
.
put
(
"current"
,
pageNo
);
map
.
put
(
"size"
,
pageSize
);
map
.
put
(
"total"
,
result
.
size
());
map
.
put
(
"pages"
,
pages
);
map
.
put
(
"records"
,
result
.
subList
(
pageSize
*
(
pageNo
-
1
),
endIndex
));
return
Result
.
OK
(
map
);
}
/**
* 添加
*
* @param memRecommend
* @return
*/
@AutoLog
(
value
=
"会员-推荐资讯表-添加"
)
@ApiOperation
(
value
=
"会员-推荐资讯表-添加"
,
notes
=
"会员-推荐资讯表-添加"
)
@PostMapping
(
value
=
"/add"
)
public
Result
<?>
add
(
@RequestBody
MemRecommend
memRecommend
)
{
boolean
flag
=
true
;
LambdaQueryWrapper
<
MemRecommend
>
queryWrapper
=
new
LambdaQueryWrapper
<>();
//栏目
if
(
memRecommend
.
getType
()
==
0
)
{
if
(
StringUtils
.
isBlank
(
memRecommend
.
getSubjectId
()))
return
Result
.
error
(
"专题Id不能为空!"
);
memRecommend
.
setScore
(
1
);
memRecommend
.
setKeyWord
(
null
);
memRecommend
.
setLabelId
(
null
);
queryWrapper
.
eq
(
MemRecommend:
:
getSubjectId
,
memRecommend
.
getSubjectId
());
}
else
if
(
memRecommend
.
getType
()
==
1
)
{
//资讯信息
if
(
StringUtils
.
isBlank
(
memRecommend
.
getSubjectId
()))
return
Result
.
error
(
"专题Id不能为空!"
);
if
(
StringUtils
.
isBlank
(
memRecommend
.
getLabelId
()))
return
Result
.
error
(
"标签Id不能为空!"
);
memRecommend
.
setScore
(
2
);
memRecommend
.
setKeyWord
(
null
);
queryWrapper
.
eq
(
MemRecommend:
:
getSubjectId
,
memRecommend
.
getSubjectId
());
queryWrapper
.
eq
(
MemRecommend:
:
getLabelId
,
memRecommend
.
getLabelId
());
}
else
if
(
memRecommend
.
getType
()
==
2
)
{
//关键词
if
(
StringUtils
.
isBlank
(
memRecommend
.
getKeyWord
()))
return
Result
.
error
(
"关键词不能为空!"
);
memRecommend
.
setScore
(
5
);
memRecommend
.
setSubjectId
(
null
);
memRecommend
.
setLabelId
(
null
);
queryWrapper
.
eq
(
MemRecommend:
:
getKeyWord
,
memRecommend
.
getKeyWord
());
}
else
{
flag
=
false
;
}
if
(
flag
)
{
memRecommendAsynService
.
insert
(
memRecommend
,
queryWrapper
);
}
return
Result
.
OK
(
"添加成功!"
);
}
}
service-web/src/main/java/com/zzsn/clb/member/entity/MemRecommend.java
0 → 100644
浏览文件 @
994c6705
package
com
.
zzsn
.
clb
.
member
.
entity
;
import
java.io.Serializable
;
import
java.util.Date
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
org.jeecgframework.poi.excel.annotation.Excel
;
/**
* @Description: 会员-推荐资讯表
* @Author: jeecg-boot
* @Date: 2023-04-03
* @Version: V1.0
*/
@Data
@TableName
(
"mem_recommend"
)
@EqualsAndHashCode
(
callSuper
=
false
)
@Accessors
(
chain
=
true
)
@ApiModel
(
value
=
"mem_recommend对象"
,
description
=
"会员-推荐资讯表"
)
public
class
MemRecommend
{
/**id*/
@TableId
(
type
=
IdType
.
ASSIGN_ID
)
@ApiModelProperty
(
value
=
"id"
)
private
java
.
lang
.
String
id
;
/**1 资讯 2 关键词*/
@Excel
(
name
=
"1 资讯 2 关键词"
,
width
=
15
)
@ApiModelProperty
(
value
=
"0 专题 1 资讯 2 关键词"
)
private
java
.
lang
.
Integer
type
;
/**分数*/
@Excel
(
name
=
"分数"
,
width
=
15
)
@ApiModelProperty
(
value
=
"分数"
)
private
java
.
lang
.
Integer
score
;
/**用户Id*/
@Excel
(
name
=
"用户Id"
,
width
=
15
)
@ApiModelProperty
(
value
=
"用户Id"
)
private
java
.
lang
.
String
userId
;
/**关键词*/
@Excel
(
name
=
"关键词"
,
width
=
15
)
@ApiModelProperty
(
value
=
"关键词"
)
private
java
.
lang
.
String
keyWord
;
/**专题Id*/
@Excel
(
name
=
"专题Id"
,
width
=
15
)
@ApiModelProperty
(
value
=
"专题Id"
)
private
java
.
lang
.
String
subjectId
;
/**标签id*/
@Excel
(
name
=
"标签id"
,
width
=
15
)
@ApiModelProperty
(
value
=
"标签id"
)
private
java
.
lang
.
String
labelId
;
}
service-web/src/main/java/com/zzsn/clb/member/mapper/MemRecommendMapper.java
0 → 100644
浏览文件 @
994c6705
package
com
.
zzsn
.
clb
.
member
.
mapper
;
import
java.util.List
;
import
org.apache.ibatis.annotations.Param
;
import
com.zzsn.clb.member.entity.MemRecommend
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.apache.ibatis.annotations.Update
;
/**
* @Description: 会员-推荐资讯表
* @Author: jeecg-boot
* @Date: 2023-04-03
* @Version: V1.0
*/
public
interface
MemRecommendMapper
extends
BaseMapper
<
MemRecommend
>
{
@Update
(
"update mem_recommend set score=score+#{score} where subject_id=#{subjectId} and user_id=#{userId}"
)
boolean
updateScoreBySubjectId
(
@Param
(
"subjectId"
)
String
subjectId
,
@Param
(
"userId"
)
String
userId
,
@Param
(
"score"
)
Integer
score
);
}
service-web/src/main/java/com/zzsn/clb/member/mapper/xml/MemRecommendMapper.xml
0 → 100644
浏览文件 @
994c6705
<?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.zzsn.clb.member.mapper.MemRecommendMapper"
>
</mapper>
\ No newline at end of file
service-web/src/main/java/com/zzsn/clb/member/service/IMemRecommendService.java
0 → 100644
浏览文件 @
994c6705
package
com
.
zzsn
.
clb
.
member
.
service
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.zzsn.clb.member.entity.MemRecommend
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
java.util.List
;
import
java.util.Map
;
/**
* @Description: 会员-推荐资讯表
* @Author: jeecg-boot
* @Date: 2023-04-03
* @Version: V1.0
*/
public
interface
IMemRecommendService
extends
IService
<
MemRecommend
>
{
/***
* 获取推荐信息
* @param size
* @param keyWord
* @param labelId
* @return
*/
List
<
Map
<
String
,
Object
>>
getNewsList
(
Integer
size
,
String
keyWord
,
String
labelId
);
/***
* 根据subjectId更新用户积分
* @param subjectId
* @param userId
* @param score
*/
void
updateScoreBySubjectId
(
String
subjectId
,
String
userId
,
Integer
score
);
}
service-web/src/main/java/com/zzsn/clb/member/service/impl/MemRecommendServiceImpl.java
0 → 100644
浏览文件 @
994c6705
package
com
.
zzsn
.
clb
.
member
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.zzsn.clb.member.entity.MemRecommend
;
import
com.zzsn.clb.member.mapper.MemRecommendMapper
;
import
com.zzsn.clb.member.mapper.SubjectMapper
;
import
com.zzsn.clb.member.service.IMemRecommendService
;
import
com.zzsn.clb.member.service.ISubjectTreeService
;
import
com.zzsn.common.Constants
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.lucene.search.join.ScoreMode
;
import
org.apache.shiro.SecurityUtils
;
import
org.elasticsearch.action.search.SearchRequest
;
import
org.elasticsearch.action.search.SearchResponse
;
import
org.elasticsearch.client.RequestOptions
;
import
org.elasticsearch.client.RestHighLevelClient
;
import
org.elasticsearch.common.Strings
;
import
org.elasticsearch.index.query.BoolQueryBuilder
;
import
org.elasticsearch.index.query.NestedQueryBuilder
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.elasticsearch.search.SearchHit
;
import
org.elasticsearch.search.builder.SearchSourceBuilder
;
import
org.elasticsearch.search.sort.SortOrder
;
import
org.jeecg.common.system.vo.LoginUser
;
import
org.springframework.stereotype.Service
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.annotation.Resource
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* @Description: 会员-推荐资讯表
* @Author: jeecg-boot
* @Date: 2023-04-03
* @Version: V1.0
*/
@Service
public
class
MemRecommendServiceImpl
extends
ServiceImpl
<
MemRecommendMapper
,
MemRecommend
>
implements
IMemRecommendService
{
@Resource
private
RestHighLevelClient
client
;
@Override
public
List
<
Map
<
String
,
Object
>>
getNewsList
(
Integer
size
,
String
keyWord
,
String
labelId
)
{
return
getSubjectArticleList
(
1
,
size
,
keyWord
,
labelId
);
}
@Override
public
void
updateScoreBySubjectId
(
String
subjectId
,
String
userId
,
Integer
score
)
{
this
.
getBaseMapper
().
updateScoreBySubjectId
(
subjectId
,
userId
,
score
);
}
/***
* @param current
* @param size
* @param keyWord
* @param labelId
* @return
*/
private
List
<
Map
<
String
,
Object
>>
getSubjectArticleList
(
Integer
current
,
Integer
size
,
String
keyWord
,
String
labelId
)
{
SearchSourceBuilder
searchSourceBuilder
=
new
SearchSourceBuilder
();
BoolQueryBuilder
boolBuilder
=
(
BoolQueryBuilder
)
searchSourceBuilder
.
query
();
if
(
boolBuilder
==
null
)
{
boolBuilder
=
QueryBuilders
.
boolQuery
();
}
NestedQueryBuilder
nestedQueryBuilder
=
null
;
//标签查询
if
(
StringUtils
.
isNotBlank
(
labelId
))
{
nestedQueryBuilder
=
QueryBuilders
.
nestedQuery
(
"labels"
,
QueryBuilders
.
termsQuery
(
"labels.relationId"
,
labelId
),
ScoreMode
.
None
);
boolBuilder
.
must
(
nestedQueryBuilder
);
}
//关键词查询
if
(
StringUtils
.
isNotBlank
(
keyWord
))
{
boolBuilder
.
must
(
QueryBuilders
.
matchPhraseQuery
(
"content"
,
keyWord
));
}
boolBuilder
.
must
(
QueryBuilders
.
termQuery
(
"checkStatus"
,
1
));
// 0 未审核 1 审核 ?
boolBuilder
.
must
(
QueryBuilders
.
termQuery
(
"deleteFlag"
,
0
));
//未删除
//分页
searchSourceBuilder
.
from
((
current
-
1
)
*
size
).
size
(
size
);
searchSourceBuilder
.
sort
(
"publishDate"
,
SortOrder
.
DESC
);
String
[]
includes
=
new
String
[]{
"title"
,
"publishDate"
,
"subjectId"
,
"id"
,
"origin"
,
"subjectName"
};
String
[]
excludes
=
Strings
.
EMPTY_ARRAY
;
searchSourceBuilder
.
fetchSource
(
includes
,
excludes
);
searchSourceBuilder
.
query
(
boolBuilder
);
return
getSubjectArticleList
(
searchSourceBuilder
);
}
/***
* 执行专题信息查询操作
* @param searchSourceBuilder
* @return
*/
private
List
<
Map
<
String
,
Object
>>
getSubjectArticleList
(
SearchSourceBuilder
searchSourceBuilder
)
{
try
{
SearchRequest
searchRequest
=
new
SearchRequest
(
Constants
.
ES_DATA_FOR_SUBJECT
);
searchSourceBuilder
.
trackTotalHits
(
true
);
searchRequest
.
source
(
searchSourceBuilder
);
SearchResponse
search
=
client
.
search
(
searchRequest
,
RequestOptions
.
DEFAULT
);
List
<
Map
<
String
,
Object
>>
records
=
new
ArrayList
<>();
for
(
SearchHit
documentFields
:
search
.
getHits
().
getHits
())
{
records
.
add
(
documentFields
.
getSourceAsMap
());
}
return
records
;
}
catch
(
IOException
e
)
{
log
.
error
(
"查询es专题资讯数据失败,e:{}"
,
e
);
}
return
null
;
}
}
service-web/src/main/java/com/zzsn/clb/web/service/ISubjectService.java
0 → 100644
浏览文件 @
994c6705
package
com
.
zzsn
.
clb
.
web
.
service
;
import
java.util.List
;
import
java.util.Map
;
public
interface
ISubjectService
{
/***
* 专题数据统计
* @param type 本月-month 季度-quarter 本年-year
* @param size 返回数据条数
* @param subjectType 专题类型 通用-1 事件-2
* @return
*/
public
List
<
Map
<
String
,
Object
>>
getSubjectCollect
(
String
type
,
Integer
size
,
Integer
subjectType
);
/***
* 专题趋势
* @param queryBgDate 开始日期
* @param queryEndate 结束日期
* @return
*/
List
<
Map
<
String
,
Object
>>
getDaySubjectTrend
(
String
queryBgDate
,
String
queryEndate
);
/***
* 舆情走势
* @param queryBgDate 开始日期
* @param queryEndate 结束日期
* @param type 1-正面 2-负面
* @return
*/
List
<
Map
<
String
,
Object
>>
getPubliOpinionTrend
(
String
queryBgDate
,
String
queryEndate
,
Integer
type
);
}
service-web/src/main/java/com/zzsn/clb/web/service/impl/SubjectServiceImpl.java
0 → 100644
浏览文件 @
994c6705
package
com
.
zzsn
.
clb
.
web
.
service
.
impl
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.zzsn.clb.fegin.IServiceProjectClient
;
import
com.zzsn.clb.web.service.ISubjectService
;
import
com.zzsn.common.Constants
;
import
com.zzsn.utils.UDateUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.lucene.search.join.ScoreMode
;
import
org.elasticsearch.action.search.SearchRequest
;
import
org.elasticsearch.action.search.SearchResponse
;
import
org.elasticsearch.client.RequestOptions
;
import
org.elasticsearch.client.RestHighLevelClient
;
import
org.elasticsearch.index.query.BoolQueryBuilder
;
import
org.elasticsearch.index.query.NestedQueryBuilder
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.elasticsearch.search.SearchHit
;
import
org.elasticsearch.search.aggregations.AggregationBuilders
;
import
org.elasticsearch.search.aggregations.BucketOrder
;
import
org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramAggregationBuilder
;
import
org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval
;
import
org.elasticsearch.search.aggregations.bucket.histogram.Histogram
;
import
org.elasticsearch.search.aggregations.bucket.terms.Terms
;
import
org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder
;
import
org.elasticsearch.search.builder.SearchSourceBuilder
;
import
org.elasticsearch.search.collapse.CollapseBuilder
;
import
org.elasticsearch.search.sort.SortOrder
;
import
org.jeecg.common.api.vo.Result
;
import
org.jeecg.common.util.DateUtils
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.io.IOException
;
import
java.util.*
;
import
java.util.stream.Collectors
;
@Slf4j
@Service
public
class
SubjectServiceImpl
implements
ISubjectService
{
@Resource
private
RestHighLevelClient
client
;
@Resource
IServiceProjectClient
serviceProjectClient
;
@Override
public
List
<
Map
<
String
,
Object
>>
getSubjectCollect
(
String
type
,
Integer
size
,
Integer
subjectType
)
{
SearchSourceBuilder
searchSourceBuilder
=
new
SearchSourceBuilder
();
BoolQueryBuilder
boolBuilder
=
(
BoolQueryBuilder
)
searchSourceBuilder
.
query
();
if
(
boolBuilder
==
null
)
{
boolBuilder
=
QueryBuilders
.
boolQuery
();
}
//开始日期
String
queryBgDate
=
null
;
//结束日期
String
queryEndate
=
null
;
String
timeFiled
=
"publishDate"
;
Date
now
=
new
Date
();
//如果是本月
if
(
type
.
equals
(
"month"
))
{
queryBgDate
=
DateUtils
.
formatDate
(
new
Date
(),
"yyyy-MM-01"
);
queryEndate
=
DateUtils
.
formatDate
(
DateUtils
.
getTimesMonthNight
(),
"yyyy-MM-dd"
);
}
//如果是季度
if
(
type
.
equals
(
"quarter"
))
{
queryBgDate
=
DateUtils
.
formatDate
(
UDateUtils
.
getCurrentQuarterStartTime
(),
"yyyy-MM-01"
);
queryEndate
=
DateUtils
.
formatDate
(
UDateUtils
.
getCurrentQuarterEndTime
(),
"yyyy-MM-dd"
);
}
//如果是本年
if
(
type
.
equals
(
"year"
))
{
queryBgDate
=
DateUtils
.
formatDate
(
new
Date
(),
"yyyy-01-01"
);
queryEndate
=
DateUtils
.
formatDate
(
new
Date
(),
"yyyy-12-31"
);
}
if
(
queryBgDate
==
null
)
return
null
;
boolBuilder
.
must
(
QueryBuilders
.
rangeQuery
(
timeFiled
).
gte
(
queryBgDate
));
boolBuilder
.
must
(
QueryBuilders
.
rangeQuery
(
timeFiled
).
lt
(
queryEndate
));
boolBuilder
.
must
(
QueryBuilders
.
termQuery
(
"checkStatus"
,
1
));
// 0 未审核 1 审核 ?
boolBuilder
.
must
(
QueryBuilders
.
termQuery
(
"deleteFlag"
,
0
));
//未删除
JSONObject
jo
=
new
JSONObject
();
jo
.
put
(
"subjectType"
,
subjectType
);
Result
<
JSONObject
>
result
=
serviceProjectClient
.
getSubjectList
(
jo
,
1
,
200
);
if
(!
result
.
isSuccess
())
return
null
;
JSONArray
jsonArray
=
result
.
getResult
().
getJSONArray
(
"records"
);
boolBuilder
.
must
(
QueryBuilders
.
termsQuery
(
"subjectId"
,
jsonArray
.
stream
().
map
(
m
->
((
Map
)
m
).
get
(
"id"
)).
collect
(
Collectors
.
toList
())));
searchSourceBuilder
.
query
(
boolBuilder
);
TermsAggregationBuilder
aggregation
=
AggregationBuilders
//别名
.
terms
(
"num"
)
//聚合字段名
.
field
(
"subjectId.keyword"
)
//降序
.
order
(
BucketOrder
.
count
(
false
))
//聚合结果数据量,默认只返回前十条
.
size
(
size
);
searchSourceBuilder
.
aggregation
(
aggregation
);
Terms
terms
=
(
Terms
)
getEsList
(
searchSourceBuilder
,
"num"
);
List
<
Map
<
String
,
Object
>>
records
=
new
ArrayList
<>();
for
(
Terms
.
Bucket
buck
:
terms
.
getBuckets
())
{
records
.
add
(
new
HashMap
<
String
,
Object
>()
{
{
put
(
"name"
,
getSubjectName
(
jsonArray
,
buck
.
getKeyAsString
()));
put
(
"num"
,
buck
.
getDocCount
());
}
});
}
return
records
;
}
public
List
<
Map
<
String
,
Object
>>
getDaySubjectTrend
(
String
queryBgDate
,
String
queryEndate
)
{
SearchSourceBuilder
searchSourceBuilder
=
new
SearchSourceBuilder
();
BoolQueryBuilder
boolBuilder
=
(
BoolQueryBuilder
)
searchSourceBuilder
.
query
();
if
(
boolBuilder
==
null
)
{
boolBuilder
=
QueryBuilders
.
boolQuery
();
}
String
today
=
DateUtils
.
formatDate
(
DateUtils
.
getTimesMonthNight
(),
"yyyy-MM-dd"
);
if
(
StringUtils
.
isBlank
(
queryBgDate
))
{
queryBgDate
=
today
;
}
if
(
StringUtils
.
isBlank
(
queryEndate
))
{
queryEndate
=
today
;
}
String
timeFiled
=
"publishDate"
;
boolBuilder
.
must
(
QueryBuilders
.
rangeQuery
(
timeFiled
).
gte
(
queryBgDate
));
boolBuilder
.
must
(
QueryBuilders
.
rangeQuery
(
timeFiled
).
lte
(
queryEndate
));
boolBuilder
.
must
(
QueryBuilders
.
termQuery
(
"checkStatus"
,
1
));
// 0 未审核 1 审核 ?
boolBuilder
.
must
(
QueryBuilders
.
termQuery
(
"deleteFlag"
,
0
));
//未删除
JSONObject
jo
=
new
JSONObject
();
jo
.
put
(
"subjectType"
,
1
);
Result
<
JSONObject
>
result
=
serviceProjectClient
.
getSubjectList
(
jo
,
1
,
200
);
if
(!
result
.
isSuccess
())
return
null
;
JSONArray
jsonArray
=
result
.
getResult
().
getJSONArray
(
"records"
);
boolBuilder
.
must
(
QueryBuilders
.
termsQuery
(
"subjectId"
,
jsonArray
.
stream
().
map
(
m
->
((
Map
)
m
).
get
(
"id"
)).
collect
(
Collectors
.
toList
())));
searchSourceBuilder
.
query
(
boolBuilder
);
DateHistogramAggregationBuilder
aggregation
=
AggregationBuilders
.
dateHistogram
(
"publishDate"
)
.
field
(
"publishDate"
)
.
format
(
"yyyy-MM-dd"
)
.
fixedInterval
(
DateHistogramInterval
.
DAY
);
aggregation
.
subAggregation
(
AggregationBuilders
//别名
.
terms
(
"num"
)
//聚合字段名
.
field
(
"subjectId.keyword"
)
//降序
.
order
(
BucketOrder
.
count
(
false
))
//聚合结果数据量,默认只返回前十条
.
size
(
100
));
searchSourceBuilder
.
aggregation
(
aggregation
);
Histogram
terms
=
(
Histogram
)
getEsList
(
searchSourceBuilder
,
"publishDate"
);
List
<
Map
<
String
,
Object
>>
records
=
new
ArrayList
<>();
for
(
Histogram
.
Bucket
buckDate
:
terms
.
getBuckets
())
{
Terms
byAgeAggregation
=
buckDate
.
getAggregations
().
get
(
"num"
);
for
(
Terms
.
Bucket
buck
:
byAgeAggregation
.
getBuckets
())
{
records
.
add
(
new
HashMap
<
String
,
Object
>()
{
{
put
(
"name"
,
getSubjectName
(
jsonArray
,
buck
.
getKeyAsString
()));
put
(
"date"
,
buckDate
.
getKeyAsString
());
put
(
"num"
,
buck
.
getDocCount
());
}
});
}
}
return
records
;
}
/***
* 执行专题信息查询操作
* @param searchSourceBuilder
* @return
*/
private
Object
getEsList
(
SearchSourceBuilder
searchSourceBuilder
,
String
groupName
)
{
try
{
SearchRequest
searchRequest
=
new
SearchRequest
(
Constants
.
ES_DATA_FOR_SUBJECT
);
searchSourceBuilder
.
trackTotalHits
(
true
);
searchRequest
.
source
(
searchSourceBuilder
);
SearchResponse
search
=
client
.
search
(
searchRequest
,
RequestOptions
.
DEFAULT
);
return
search
.
getAggregations
().
get
(
groupName
);
}
catch
(
IOException
e
)
{
log
.
error
(
"查询es专题资讯数据失败,e:{}"
,
e
);
}
return
null
;
}
private
String
getSubjectName
(
JSONArray
records
,
String
id
)
{
Optional
<
Object
>
model
=
records
.
stream
().
filter
(
f
->
((
Map
)
f
).
get
(
"id"
).
equals
(
id
)).
findFirst
();
if
(
model
.
isPresent
())
return
((
Map
)
model
.
get
()).
get
(
"subjectName"
).
toString
();
else
return
""
;
}
public
List
<
Map
<
String
,
Object
>>
getPubliOpinionTrend
(
String
queryBgDate
,
String
queryEndate
,
Integer
type
)
{
String
today
=
DateUtils
.
formatDate
(
DateUtils
.
getTimesMonthNight
(),
"yyyy-MM-dd"
);
if
(
StringUtils
.
isBlank
(
queryBgDate
))
{
queryBgDate
=
today
;
}
if
(
StringUtils
.
isBlank
(
queryEndate
))
{
queryEndate
=
today
;
}
SearchSourceBuilder
searchSourceBuilder
=
new
SearchSourceBuilder
();
BoolQueryBuilder
boolBuilder
=
(
BoolQueryBuilder
)
searchSourceBuilder
.
query
();
if
(
boolBuilder
==
null
)
{
boolBuilder
=
QueryBuilders
.
boolQuery
();
}
String
timeFiled
=
"publishDate"
;
boolBuilder
.
must
(
QueryBuilders
.
rangeQuery
(
timeFiled
).
gte
(
queryBgDate
));
boolBuilder
.
must
(
QueryBuilders
.
rangeQuery
(
timeFiled
).
lte
(
queryEndate
));
NestedQueryBuilder
nestedQueryBuilder
=
null
;
if
(
type
==
1
)
//正面
nestedQueryBuilder
=
QueryBuilders
.
nestedQuery
(
"labels"
,
QueryBuilders
.
termsQuery
(
"labels.relationId"
,
"1631119657360347137"
),
ScoreMode
.
None
);
else
if
(
type
==
2
)
//负面
nestedQueryBuilder
=
QueryBuilders
.
nestedQuery
(
"labels"
,
QueryBuilders
.
termsQuery
(
"labels.relationId"
,
"1631119691724279810"
),
ScoreMode
.
None
);
else
return
null
;
boolBuilder
.
must
(
nestedQueryBuilder
);
boolBuilder
.
must
(
QueryBuilders
.
termQuery
(
"checkStatus"
,
1
));
// 0 未审核 1 审核 ?
boolBuilder
.
must
(
QueryBuilders
.
termQuery
(
"deleteFlag"
,
0
));
//未删除
searchSourceBuilder
.
query
(
boolBuilder
);
DateHistogramAggregationBuilder
aggregation
=
AggregationBuilders
.
dateHistogram
(
"publishDate"
)
.
field
(
"publishDate"
)
.
format
(
"yyyy-MM-dd"
)
.
fixedInterval
(
DateHistogramInterval
.
DAY
);
searchSourceBuilder
.
aggregation
(
aggregation
);
List
<
Map
<
String
,
Object
>>
records
=
new
ArrayList
<>();
Histogram
byAgeAggregation
=
(
Histogram
)
getEsList
(
searchSourceBuilder
,
"publishDate"
);
for
(
Histogram
.
Bucket
buck
:
byAgeAggregation
.
getBuckets
())
{
records
.
add
(
new
HashMap
<
String
,
Object
>()
{
{
put
(
"date"
,
buck
.
getKeyAsString
());
put
(
"num"
,
buck
.
getDocCount
());
}
});
}
return
records
;
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论