Commit ff9d5468 by shenjunjie

Merge branch 'release' into 'master'

Release

See merge request !146
parents 10caf804 78ca909b
...@@ -244,6 +244,12 @@ ...@@ -244,6 +244,12 @@
<artifactId>event-client</artifactId> <artifactId>event-client</artifactId>
<version>${event-client.version}</version> <version>${event-client.version}</version>
</dependency> </dependency>
<!-- 分词jar -->
<dependency>
<groupId>org.ansj</groupId>
<artifactId>ansj_seg</artifactId>
<version>5.0.2</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <plugins>
......
package com.zhiwei.brandkbs2.ansjSeg;
import com.zhiwei.brandkbs2.util.Tools;
import com.zhiwei.tools.order.TreatOrder;
import org.ansj.dic.LearnTool;
import org.ansj.domain.Result;
import org.ansj.domain.Term;
import org.ansj.library.UserDefineLibrary;
import org.ansj.recognition.impl.NatureRecognition;
import org.ansj.splitWord.analysis.NlpAnalysis;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@Component
public class AnsjSeg {
private static Logger logger = LogManager.getLogger(AnsjSeg.class);
private final MyDic myDic;
private final List<String> stopWords; // 停用词集合
private final List<String> positiveWords; // 正面词集合
private final List<String> negativeWords; // 负面词集合
private final List<String> customWords; // 自定义词集合
public AnsjSeg(MyDic myDic) {
this.myDic = myDic;
this.stopWords = MyDic.getStopWords();
this.positiveWords = MyDic.getPositiveWords();
this.negativeWords = MyDic.getNegativeWords();
this.customWords = MyDic.getCustomWords();
}
public void addAnsjSeg(List<String> newStopWords,
List<String> newCustomWords) {
if (newStopWords != null) {
this.stopWords.addAll(newStopWords);
}
if (newCustomWords != null) {
this.customWords.addAll(newCustomWords);
}
}
/**
* @param dataList 设定文件
* @return HashMap<String, Object> 返回类型
* @Title: getFenCi
* @Description: TODO(针对集合分词统计, 并输出正负面词汇)
*/
public Map<String, Object> getFenCi(List<String> dataList) {
Map<String, Object> map = new HashMap<String, Object>(); // 分词总结果
Map<String, Integer> hash = new HashMap<String, Integer>(); // 初步分词结果
// 统计分词
for (String txt : dataList) {
List<Term> termList = getFenci(txt);
if (termList != null) {
for (Term term : termList) {
String words = term.getName();
// 去除停用词和单词
if (words.length() > 1) {
if (hash.containsKey(words)) {
hash.put(words, hash.get(words) + 1);
} else {
hash.put(words, 1);
}
}
}
}
}
// 统计正负面关键词
List<Map<String, Object>> goodResultList = new ArrayList<Map<String, Object>>(); // 正面关键词
List<Map<String, Object>> badResultList = new ArrayList<Map<String, Object>>(); // 负面关键词
// 对分词结果排序
List<Entry<String, Integer>> resultList = TreatOrder
.treatOrderByCountDesc(hash);
try {
// 统计正负面关键词
for (Entry<String, Integer> entry : resultList) {
String word = entry.getKey();
if (positiveWords.contains(word)) {
HashMap<String, Object> goodmap = new HashMap<String, Object>();
goodmap.put("key", entry.getKey());
goodmap.put("value", entry.getValue());
goodResultList.add(goodmap);
} else if (negativeWords.contains(word)) {
HashMap<String, Object> badmap = new HashMap<String, Object>();
badmap.put("key", entry.getKey());
badmap.put("value", entry.getValue());
badResultList.add(badmap);
}
}
} catch (Exception e) {
e.printStackTrace();
}
// 输出正负面关键词
if (goodResultList.size() >= 10) {
goodResultList = goodResultList.subList(0, 10);
}
if (badResultList.size() >= 10) {
badResultList = badResultList.subList(0, 10);
}
if (resultList.size() >= 20) {
resultList = resultList.subList(0, 20);
}
// 将总结果放入词云中
map.put("goodWord", goodResultList);
map.put("badWord", badResultList);
map.put("word", resultList);
return map;
}
/**
* @param dataList
* @param maxNum
* @return
* @return Map<String, Object>
* @TODO (统计分词结果 , 按频次取前maxNum)
* @author 陈炜涛
* @time 2016年11月16日上午11:06:10
*/
public List<Entry<String, Integer>> getFenCi(List<String> dataList, int maxNum) {
Map<String, Object> map = new HashMap<>(); // 分词总结果
Map<String, Integer> hash = new HashMap<>(); // 初步分词结果
// 统计分词
for (String txt : dataList) {
List<Term> termList = getFenci(txt);
if (termList != null) {
for (Term term : termList) {
String words = Tools.filterSpecialCharacter(term.getName());
String wordsPro = term.getNatureStr();
// 去除停用词和单词
if (words.length() > 1) {
switch (wordsPro) {
case "w":
break;
case "r":
break;
case "p":
break;
default:
if (hash.containsKey(words)) {
hash.put(words, hash.get(words) + 1);
} else {
hash.put(words, 1);
}
break;
}
}
}
}
}
Map<String, Integer> stopResults = new HashMap<>();
for (Entry<String, Integer> en : hash.entrySet()) {
if (!stopWords.contains(en.getKey())) {
stopResults.put(en.getKey(), en.getValue());
}
}
// 对分词结果排序
List<Entry<String, Integer>> resultList = treatOrderByCountDesc(stopResults);
if (resultList.size() >= maxNum) {
resultList = resultList.subList(0, maxNum);
}
return resultList;
}
/**
* @param name 设定文件
* @return HashMap<String, Integer> 返回类型
* @Title: getFenCi
* @Description: TODO(针对真文本分词并统计)
*/
public HashMap<String, Integer> getFenCi(String name) {
HashMap<String, Integer> hash = new HashMap<String, Integer>(); // 初步分词结果
List<Term> termList = getFenci(name);
if (termList != null) {
for (Term term : termList) {
String word = term.getName();
if (hash.containsKey(word)) {
hash.put(word, hash.get(word) + 1);
} else {
hash.put(word, 1);
}
}
}
return hash;
}
/**
* @return void 返回类型
* @Title: removeStopWord
* @Description: TODO(分词)
* @ 设定文件
*/
public List<Term> getFenci(String text) {
try {
// 去重停用词(看源码应该是删除分词关键词)
// for (String word : stopWords)
// {
// UserDefineLibrary.removeWord(word);
// }
// 添加自定义词
for (String word : customWords) {
UserDefineLibrary.insertWord(word);
}
// 分词
LearnTool learnTool = new LearnTool();
NlpAnalysis nlp = new NlpAnalysis().setLearnTool(learnTool); //
Result result = nlp.parseStr(text);
new NatureRecognition().recognition(result);
return result.getTerms();
} catch (Exception e) {
logger.error("分词出现问题", e);
return null;
}
}
/**
* @param dataMap 设定文件
* @return List<Entry < String, Integer>> 返回类型
* @Title: treatOrderByCountDesc
* @Description: TODO(根据数量降序)
*/
public static List<Entry<String, Integer>> treatOrderByCountDesc(
Map<String, Integer> dataMap) {
List<Entry<String, Integer>> list = new ArrayList<>(dataMap.entrySet());
list.sort((o1, o2) -> getCompareResult(o1.getValue(), o2.getValue(), false));
return list;
}
/**
* @param time1
* @param time2
* @param asc 设定文件
* @return int 返回类型
* @Title: getCompareResult
* @Description: TODO(排序比较)
*/
private static int getCompareResult(long time1, long time2, boolean asc) {
long result;
if (asc) {
result = time1 - time2;
} else {
result = time2 - time1;
}
if (result > 0) {
result = 1;
} else if (result < 0) {
result = -1;
}
return (int) result;
}
}
\ No newline at end of file
package com.zhiwei.brandkbs2.ansjSeg;
import com.zhiwei.brandkbs2.util.Tools;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.List;
/**
* @author 落花流水
* @Description: 用于自定义词库
* @ClassName: MyDic
* @date 2016年3月28日 上午11:36:01
*/
@Component
public class MyDic {
public final static Logger log = LogManager.getLogger(MyDic.class);
@Value("classpath:ansjWordDic/customDic.txt")
private Resource customDic;
@Value("classpath:ansjWordDic/stopWordsDic.txt")
private Resource stopDic;
@Value("classpath:ansjWordDic/negativeDic.txt")
private Resource negativeDic;
@Value("classpath:ansjWordDic/positiveDic.txt")
private Resource positiveDic;
private static List<String> customWords;
private static List<String> stopWords;
private static List<String> negativeWords;
private static List<String> positiveWords;
@PostConstruct
public void init() {
try {
// 读取词典
customWords = Tools.readListFile(customDic.getInputStream());
stopWords = Tools.readListFile(stopDic.getInputStream());
negativeWords = Tools.readListFile(negativeDic.getInputStream());
positiveWords= Tools.readListFile(positiveDic.getInputStream());
log.info("ansj自定义词典加载:{}条,停用词加载:{}条,负面词典加载:{}条,正面词典加载:{}条", customWords.size(), stopWords.size(), negativeWords.size(), positiveWords.size());
} catch (Exception e) {
log.info("MyDic-init 异常", e);
}
}
/**
* @return List<String> 返回类型
* @Title: getCustomWords
* @Description: TODO(获取用户自定义词)
* 设定文件
*/
public static List<String> getCustomWords() {
return customWords;
}
/**
* @return List<String> 返回类型
* @Title: getCustomWords
* @Description: TODO(获取负面词)
* 设定文件
*/
public static List<String> getNegativeWords() {
return negativeWords;
}
/**
* @return List<String> 返回类型
* @Title: getCustomWords
* @Description: TODO(获取正面词)
* 设定文件
*/
public static List<String> getPositiveWords() {
return positiveWords;
}
/**
* @return List<String> 返回类型
* @Title: getCustomWords
* @Description: TODO(获取停用词)
* 设定文件
*/
public static List<String> getStopWords() {
return stopWords;
}
/**
* @param words 设定文件
* @return boolean 返回类型
* @Title: addCustomWords
* @Description: TODO(向词库中添加自定义词)
*/
public static boolean addCustomWords(List<String> words) {
return addWords(customWords, words);
}
/**
* @param words 设定文件
* @return boolean 返回类型
* @Title: addCustomWords
* @Description: TODO(向词库中添加负面词)
*/
public static boolean addNegativeWords(List<String> words) {
return addWords(negativeWords, words);
}
/**
* @param words 设定文件
* @return boolean 返回类型
* @Title: addCustomWords
* @Description: TODO(向词库中添加正面词)
*/
public static boolean addPositiveWords(List<String> words) {
return addWords(positiveWords, words);
}
/**
* @param words 设定文件
* @return boolean 返回类型
* @Title: addCustomWords
* @Description: TODO(向词库中添加停用词)
*/
public static boolean addStopWords(List<String> words) {
return addWords(stopWords, words);
}
private static boolean addWords(List<String> targetList, List<String> addList) {
if (null == addList) {
return false;
}
for (String word : addList) {
if (!targetList.contains(word)) {
targetList.add(word);
}
}
return true;
}
/**
* @param file
* @param newWordList
* @param @throws IOException 设定文件
* @return BufferedWriter 返回类型
* @Title: writerWords
* @Description: 把新的关键词存入文件
*/
private static boolean writerWords(File file, List<String> newWordList) {
boolean flag = false;
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true), StandardCharsets.UTF_8));
for (String word : newWordList) {
writer.newLine();
writer.write(word);
}
flag = true;
} catch (Exception e) {
log.error("写入数据出错:{}", e.getMessage());
} finally {
try {
if (null != writer) {
writer.close();
}
} catch (IOException e) {
log.error("关闭输出流出错:{}", e.getMessage());
}
}
return flag;
}
}
...@@ -55,6 +55,8 @@ public class AuthAspect { ...@@ -55,6 +55,8 @@ public class AuthAspect {
String token = request.getHeader(jwtKey); String token = request.getHeader(jwtKey);
// 存在有效token // 存在有效token
if (null != token && !Tools.tokenEmpty(token)) { if (null != token && !Tools.tokenEmpty(token)) {
Object proceed;
try {
Map<String, Object> tokenInfo = JwtUtil.unsign(token, Map.class); Map<String, Object> tokenInfo = JwtUtil.unsign(token, Map.class);
String uid = tokenInfo.get(GenericAttribute.USER_ID).toString(); String uid = tokenInfo.get(GenericAttribute.USER_ID).toString();
UserInfo userInfo = UserService.queryUserInfo(uid, request.getHeader("pid")); UserInfo userInfo = UserService.queryUserInfo(uid, request.getHeader("pid"));
...@@ -62,8 +64,11 @@ public class AuthAspect { ...@@ -62,8 +64,11 @@ public class AuthAspect {
userInfo = new UserInfo().setUserId(uid).setProjectId(request.getHeader("pid")); userInfo = new UserInfo().setUserId(uid).setProjectId(request.getHeader("pid"));
} }
UserThreadLocal.set(userInfo); UserThreadLocal.set(userInfo);
Object proceed = joinPoint.proceed(); } catch (Exception ignore) {
} finally {
proceed = joinPoint.proceed();
UserThreadLocal.clear(); UserThreadLocal.clear();
}
// todo 操作记录收集 // todo 操作记录收集
return proceed; return proceed;
} }
......
...@@ -5,16 +5,14 @@ import com.zhiwei.brandkbs2.auth.Auth; ...@@ -5,16 +5,14 @@ import com.zhiwei.brandkbs2.auth.Auth;
import com.zhiwei.brandkbs2.enmus.RoleEnum; import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.model.ResponseResult; import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.service.ProjectService; import com.zhiwei.brandkbs2.service.ProjectService;
import com.zhiwei.brandkbs2.service.UserCenterService;
import com.zhiwei.brandkbs2.service.UserService; import com.zhiwei.brandkbs2.service.UserService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
...@@ -40,6 +38,9 @@ public class LoginController extends BaseController { ...@@ -40,6 +38,9 @@ public class LoginController extends BaseController {
@Resource(name = "projectServiceImpl") @Resource(name = "projectServiceImpl")
private ProjectService ProjectService; private ProjectService ProjectService;
@Resource(name = "userCenterServiceImpl")
private UserCenterService userCenterService;
@ApiOperation("用户登录") @ApiOperation("用户登录")
@PostMapping("/user/login") @PostMapping("/user/login")
public ResponseResult login() { public ResponseResult login() {
...@@ -91,10 +92,22 @@ public class LoginController extends BaseController { ...@@ -91,10 +92,22 @@ public class LoginController extends BaseController {
return ResponseResult.success(ProjectService.getLoginUserAllProjects()); return ResponseResult.success(ProjectService.getLoginUserAllProjects());
} }
@ApiOperation("第三方接入-验证External-Token")
@GetMapping("/user/login/verify/token")
public ResponseResult verifyToken() {
return userCenterService.verifyToken();
}
@ApiOperation("第三方接入-验证External-Ticket")
@GetMapping("/user/login/verify/ticket")
public ResponseResult verifyTicket(@RequestParam String ticket) {
return userCenterService.verifyTicket(ticket);
}
@ApiOperation("测试接口") @ApiOperation("测试接口")
@GetMapping("/test") @GetMapping("/test")
public ResponseResult test() { public ResponseResult test() {
return ResponseResult.success("brandkbs2-success 2022/12/5"); return ResponseResult.success("brandkbs2-success 2023/1/6");
} }
} }
......
...@@ -31,7 +31,7 @@ import javax.annotation.Resource; ...@@ -31,7 +31,7 @@ import javax.annotation.Resource;
public class UserController extends BaseController { public class UserController extends BaseController {
@Resource(name = "userServiceImpl") @Resource(name = "userServiceImpl")
private UserService UserService; private UserService userService;
@Resource(name = "behaviorServiceImpl") @Resource(name = "behaviorServiceImpl")
private BehaviorService behaviorService; private BehaviorService behaviorService;
...@@ -55,7 +55,7 @@ public class UserController extends BaseController { ...@@ -55,7 +55,7 @@ public class UserController extends BaseController {
@RequestParam(value = "keyword", defaultValue = "") String keyword, @RequestParam(value = "keyword", defaultValue = "") String keyword,
@RequestParam(value = "pid") String pid, @RequestParam(value = "pid") String pid,
@RequestParam(value = "role", defaultValue = "-1") int role) { @RequestParam(value = "role", defaultValue = "-1") int role) {
return ResponseResult.success(UserService.findUserList(page, size, keyword, pid, role)); return ResponseResult.success(userService.findUserList(page, size, keyword, pid, role));
} }
@ApiOperation("根据手机号搜索用户信息") @ApiOperation("根据手机号搜索用户信息")
...@@ -64,7 +64,7 @@ public class UserController extends BaseController { ...@@ -64,7 +64,7 @@ public class UserController extends BaseController {
public ResponseResult searchUserDTO(@PathVariable("phoneNumber") long phoneNumber) { public ResponseResult searchUserDTO(@PathVariable("phoneNumber") long phoneNumber) {
CenterUser centerUser = userInfoClient.getUserByPhone(String.valueOf(phoneNumber)); CenterUser centerUser = userInfoClient.getUserByPhone(String.valueOf(phoneNumber));
if (null == centerUser) { if (null == centerUser) {
return ResponseResult.failure("无匹配用户"); return ResponseResult.success(null);
} }
UserDTO userDTO = new UserDTO(); UserDTO userDTO = new UserDTO();
userDTO.setId(String.valueOf(centerUser.getId())); userDTO.setId(String.valueOf(centerUser.getId()));
...@@ -77,9 +77,7 @@ public class UserController extends BaseController { ...@@ -77,9 +77,7 @@ public class UserController extends BaseController {
@ApiOperation("添加用户") @ApiOperation("添加用户")
@PostMapping("/add") @PostMapping("/add")
public ResponseResult addUser(@RequestBody UserDTO userDTO) { public ResponseResult addUser(@RequestBody UserDTO userDTO) {
UserService.addUser(userDTO); return userService.addUser(userDTO);
behaviorService.pushBehaviorOld(OPERATION, "添加用户:" + userDTO.getId(), request);
return ResponseResult.success();
} }
@ApiOperation("删除用户") @ApiOperation("删除用户")
...@@ -89,16 +87,14 @@ public class UserController extends BaseController { ...@@ -89,16 +87,14 @@ public class UserController extends BaseController {
@DeleteMapping("/delete") @DeleteMapping("/delete")
@Auth(role = RoleEnum.ADMIN) @Auth(role = RoleEnum.ADMIN)
public ResponseResult deleteUser(@RequestParam(value = "uid") String userId, @RequestParam(value = "pid") String pid) { public ResponseResult deleteUser(@RequestParam(value = "uid") String userId, @RequestParam(value = "pid") String pid) {
UserService.deleteUser(userId, pid); userService.deleteUser(userId, pid);
behaviorService.pushBehaviorOld(OPERATION, "删除用户:" + userId, request);
return ResponseResult.success(); return ResponseResult.success();
} }
@ApiOperation("编辑用户") @ApiOperation("编辑用户")
@PutMapping("/update") @PutMapping("/update")
public ResponseResult updateUser(@RequestBody UserDTO userDTO) { public ResponseResult updateUser(@RequestBody UserDTO userDTO) {
UserService.updateUser(userDTO); userService.updateUser(userDTO);
behaviorService.pushBehaviorOld(OPERATION, "编辑用户:" + userDTO, request);
return ResponseResult.success(); return ResponseResult.success();
} }
...@@ -113,16 +109,14 @@ public class UserController extends BaseController { ...@@ -113,16 +109,14 @@ public class UserController extends BaseController {
public ResponseResult findSuperAdminList(@RequestParam(value = "page", defaultValue = "1") int page, public ResponseResult findSuperAdminList(@RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "size", defaultValue = "10") int size, @RequestParam(value = "size", defaultValue = "10") int size,
@RequestParam(value = "keyword", defaultValue = "") String keyword) { @RequestParam(value = "keyword", defaultValue = "") String keyword) {
return ResponseResult.success(UserService.findSuperAdminList(page, size, keyword)); return ResponseResult.success(userService.findSuperAdminList(page, size, keyword));
} }
@ApiOperation("添加超级管理员") @ApiOperation("添加超级管理员")
@PostMapping("/add/superAdmin") @PostMapping("/add/superAdmin")
@Auth(role = RoleEnum.SUPER_ADMIN) @Auth(role = RoleEnum.SUPER_ADMIN)
public ResponseResult addSuperAdmin(@RequestBody UserDTO userDTO) { public ResponseResult addSuperAdmin(@RequestBody UserDTO userDTO) {
UserService.addSuperAdmin(userDTO); return userService.addSuperAdmin(userDTO);
behaviorService.pushBehaviorOld(OPERATION, "添加超级管理员:" + userDTO.getId(), request);
return ResponseResult.success();
} }
@ApiOperation("删除超级管理员") @ApiOperation("删除超级管理员")
...@@ -131,8 +125,7 @@ public class UserController extends BaseController { ...@@ -131,8 +125,7 @@ public class UserController extends BaseController {
@DeleteMapping("/delete/superAdmin") @DeleteMapping("/delete/superAdmin")
@Auth(role = RoleEnum.SUPER_ADMIN) @Auth(role = RoleEnum.SUPER_ADMIN)
public ResponseResult deleteSuperAdmin(@RequestParam(value = "uid") String userId) { public ResponseResult deleteSuperAdmin(@RequestParam(value = "uid") String userId) {
UserService.deleteSuperAdmin(userId); userService.deleteSuperAdmin(userId);
behaviorService.pushBehaviorOld(OPERATION, "删除超级管理员:" + userId, request);
return ResponseResult.success(); return ResponseResult.success();
} }
......
...@@ -182,5 +182,12 @@ public class AppArticleController extends BaseController { ...@@ -182,5 +182,12 @@ public class AppArticleController extends BaseController {
return ResponseResult.success(reportService.getPcReportAnalyze(id, true)); return ResponseResult.success(reportService.getPcReportAnalyze(id, true));
} }
@ApiOperation("舆情简报-更新报告结果")
@ApiImplicitParam(name = "id", value = "报告ID", required = true, paramType = "path", dataType = "String")
@PutMapping("/update/{id}")
public ResponseResult updateReportAnalyze(@PathVariable String id) {
reportService.getPcReportAnalyze(id, false);
return ResponseResult.success();
}
} }
...@@ -249,4 +249,11 @@ public class AppEventController extends BaseController { ...@@ -249,4 +249,11 @@ public class AppEventController extends BaseController {
@RequestParam(value = "aggTitle", required = false) String aggTitle){ @RequestParam(value = "aggTitle", required = false) String aggTitle){
return ResponseResult.success(eventService.eventTopArticlesAnalysis(eventId, type, emotion, aggTitle)); return ResponseResult.success(eventService.eventTopArticlesAnalysis(eventId, type, emotion, aggTitle));
} }
@ApiOperation("前台事件库-事件详情-持续事件")
@GetMapping("/detail/continue-event")
public ResponseResult continueEvent(@RequestParam(value = "eventId") String eventId){
eventService.continueEvent(eventId);
return ResponseResult.success();
}
} }
...@@ -73,7 +73,7 @@ public class ChannelEsDao extends EsClientDao { ...@@ -73,7 +73,7 @@ public class ChannelEsDao extends EsClientDao {
} }
public void upsertChannelRecord(List<ChannelRecord> channelRecords) { public void upsertChannelRecord(List<ChannelRecord> channelRecords) {
String index = getChannelRecordIndex(); String index = getChannelRecordIndexes().get(0);
BulkRequest bulkRequest = new BulkRequest(); BulkRequest bulkRequest = new BulkRequest();
Long startTime = null; Long startTime = null;
Long endTime = null; Long endTime = null;
...@@ -119,7 +119,7 @@ public class ChannelEsDao extends EsClientDao { ...@@ -119,7 +119,7 @@ public class ChannelEsDao extends EsClientDao {
@Override @Override
public String[] getIndexes() { public String[] getIndexes() {
return new String[]{getChannelRecordIndex()}; return getChannelRecordIndexes().toArray(new String[0]);
} }
@Override @Override
...@@ -127,14 +127,20 @@ public class ChannelEsDao extends EsClientDao { ...@@ -127,14 +127,20 @@ public class ChannelEsDao extends EsClientDao {
return channelEsClient; return channelEsClient;
} }
public String getChannelRecordIndex() { public List<String> getChannelRecordIndexes() {
// if (test) { List<String> res = new ArrayList<>();
// return GenericAttribute.ES_CHANNEL_INDEX_TEST; // 近3年数据库
// }
// 近1年数据库
Calendar date = Calendar.getInstance(); Calendar date = Calendar.getInstance();
int year = date.get(Calendar.YEAR); int year = date.get(Calendar.YEAR);
return GenericAttribute.ES_CHANNEL_INDEX_PREFIX + year; for (int i = 0; i < 3; i++) {
year -= i;
// 2022年开始有channel_record库
if (year < 2022) {
break;
}
res.add(GenericAttribute.ES_CHANNEL_INDEX_PREFIX + year);
}
return res;
} }
private BoolQueryBuilder channelUniqueBool(String fid) { private BoolQueryBuilder channelUniqueBool(String fid) {
......
...@@ -22,6 +22,6 @@ public class InterceptorConfig implements WebMvcConfigurer { ...@@ -22,6 +22,6 @@ public class InterceptorConfig implements WebMvcConfigurer {
@Override @Override
public void addInterceptors(InterceptorRegistry registry) { public void addInterceptors(InterceptorRegistry registry) {
// 自定义拦截器,添加拦截路径和排除拦截路径 // 自定义拦截器,添加拦截路径和排除拦截路径
registry.addInterceptor(mainAuthInterceptor).addPathPatterns("/app/**","/admin/**").excludePathPatterns(); registry.addInterceptor(mainAuthInterceptor).addPathPatterns("/app/**","/admin/**").excludePathPatterns("/app/event/detail/**");
} }
} }
package com.zhiwei.brandkbs2.pojo.dto; package com.zhiwei.brandkbs2.pojo.dto;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -38,6 +39,6 @@ public class ChannelSearchDTO { ...@@ -38,6 +39,6 @@ public class ChannelSearchDTO {
private Integer[] articlesCount; private Integer[] articlesCount;
@ApiModelProperty("排序字段") @ApiModelProperty("排序字段")
private String sorter = "{\"influence\":\"descend\"}"; private JSONObject sorter;
} }
...@@ -35,6 +35,12 @@ public class UserDTO { ...@@ -35,6 +35,12 @@ public class UserDTO {
private String username; private String username;
/** /**
* 密码
*/
@ApiModelProperty("密码")
private String password;
/**
* 电话号码 * 电话号码
*/ */
@ApiModelProperty("电话号码") @ApiModelProperty("电话号码")
......
...@@ -266,6 +266,6 @@ public interface ChannelService { ...@@ -266,6 +266,6 @@ public interface ChannelService {
Integer[] articlesCount, String sorter); Integer[] articlesCount, String sorter);
PageVO<ChannelVO> getChannelListNew(int page, int pageSize, String keyword, List<String> platforms, List<Integer> emotions, List<String> mediaTypes, PageVO<ChannelVO> getChannelListNew(int page, int pageSize, String keyword, List<String> platforms, List<Integer> emotions, List<String> mediaTypes,
Integer[] articlesCount, String sorter); Integer[] articlesCount, JSONObject sorter);
} }
...@@ -394,4 +394,10 @@ public interface EventService { ...@@ -394,4 +394,10 @@ public interface EventService {
* @return * @return
*/ */
JSONObject eventTopArticlesAnalysis(String eventId, String type, String emotion, String aggTitle); JSONObject eventTopArticlesAnalysis(String eventId, String type, String emotion, String aggTitle);
/**
* 持续事件
* @param eventId 事件id
*/
void continueEvent(String eventId);
} }
package com.zhiwei.brandkbs2.service;
import com.zhiwei.brandkbs2.model.ResponseResult;
/**
* @ClassName: UserCenterService
* @Description 用户中心服务接口
* @author: sjj
* @date: 2023-01-06 11:33
*/
public interface UserCenterService {
/**
* 第三方接入-验证External-Token
* @return
*/
ResponseResult verifyToken();
/**
* 第三方接入-验证External-Ticket
* @param ticket
* @return
*/
ResponseResult verifyTicket(String ticket);
/**
* 用户中心-用户注册
* @param phone 手机号
* @param password 密码
* @return
*/
boolean registerUser(long phone, String password);
}
package com.zhiwei.brandkbs2.service; package com.zhiwei.brandkbs2.service;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.UserInfo; import com.zhiwei.brandkbs2.pojo.UserInfo;
import com.zhiwei.brandkbs2.pojo.dto.UserDTO; import com.zhiwei.brandkbs2.pojo.dto.UserDTO;
import com.zhiwei.brandkbs2.pojo.vo.PageVO; import com.zhiwei.brandkbs2.pojo.vo.PageVO;
...@@ -56,7 +57,7 @@ public interface UserService { ...@@ -56,7 +57,7 @@ public interface UserService {
* *
* @param userDTO * @param userDTO
*/ */
void addUser(UserDTO userDTO); ResponseResult addUser(UserDTO userDTO);
/** /**
* 删除用户 * 删除用户
...@@ -88,7 +89,7 @@ public interface UserService { ...@@ -88,7 +89,7 @@ public interface UserService {
* *
* @param userDTO * @param userDTO
*/ */
void addSuperAdmin(UserDTO userDTO); ResponseResult addSuperAdmin(UserDTO userDTO);
/** /**
* 删除超级管理员 * 删除超级管理员
......
...@@ -971,7 +971,7 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -971,7 +971,7 @@ public class ChannelServiceImpl implements ChannelService {
@Override @Override
public PageVO<ChannelVO> getChannelListNew(int page, int pageSize, String keyword, List<String> platforms, public PageVO<ChannelVO> getChannelListNew(int page, int pageSize, String keyword, List<String> platforms,
List<Integer> emotions, List<String> mediaTypes, Integer[] articlesCount, String sorter) { List<Integer> emotions, List<String> mediaTypes, Integer[] articlesCount, JSONObject sorter) {
try { try {
String projectId = UserThreadLocal.getProjectId(); String projectId = UserThreadLocal.getProjectId();
String contendId = "0"; String contendId = "0";
...@@ -979,7 +979,17 @@ public class ChannelServiceImpl implements ChannelService { ...@@ -979,7 +979,17 @@ public class ChannelServiceImpl implements ChannelService {
BoolQueryBuilder postFilter = getChannelListQuery(projectId, contendId, keyword, platforms, emotions, BoolQueryBuilder postFilter = getChannelListQuery(projectId, contendId, keyword, platforms, emotions,
mediaTypes, articlesCount); mediaTypes, articlesCount);
searchHelper.setPostFilter(postFilter); searchHelper.setPostFilter(postFilter);
if (null == sorter || sorter.isEmpty()) {
searchHelper.setSort(SortBuilders.fieldSort("influence").order(SortOrder.DESC)); searchHelper.setSort(SortBuilders.fieldSort("influence").order(SortOrder.DESC));
} else {
for (Map.Entry<String, Object> entry : sorter.entrySet()) {
if (null == entry.getValue() || entry.getValue().toString().contains("desc")) {
searchHelper.setSort(SortBuilders.fieldSort(entry.getKey()).order(SortOrder.DESC));
} else {
searchHelper.setSort(SortBuilders.fieldSort(entry.getKey()).order(SortOrder.ASC));
}
}
}
searchHelper.setFrom((page - 1) * pageSize); searchHelper.setFrom((page - 1) * pageSize);
searchHelper.setSize(pageSize); searchHelper.setSize(pageSize);
searchHelper.setIndexes(new String[] { ChannelEsDao.CHANNEL_COPY_ES_INDEX_NAME }); searchHelper.setIndexes(new String[] { ChannelEsDao.CHANNEL_COPY_ES_INDEX_NAME });
......
...@@ -33,6 +33,7 @@ import org.apache.logging.log4j.LogManager; ...@@ -33,6 +33,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.joda.time.Period; import org.joda.time.Period;
import org.joda.time.PeriodType; import org.joda.time.PeriodType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update; import org.springframework.data.mongodb.core.query.Update;
...@@ -81,6 +82,9 @@ public class CustomEventServiceImpl implements CustomEventService { ...@@ -81,6 +82,9 @@ public class CustomEventServiceImpl implements CustomEventService {
@Resource @Resource
MongoUtil mongoUtil; MongoUtil mongoUtil;
@Autowired
TextUtil textUtil;
@Override @Override
public List<JSONObject> getCustomEventRankList(Long startTime, Long endTime) { public List<JSONObject> getCustomEventRankList(Long startTime, Long endTime) {
List<JSONObject> resultList = null; List<JSONObject> resultList = null;
...@@ -375,7 +379,7 @@ public class CustomEventServiceImpl implements CustomEventService { ...@@ -375,7 +379,7 @@ public class CustomEventServiceImpl implements CustomEventService {
private List<JSONObject> getHotKeyword(List<BaseMap> articleList) { private List<JSONObject> getHotKeyword(List<BaseMap> articleList) {
List<String> texts = articleList.stream().map(article -> article.getTitle() + article.getContent()).collect(Collectors.toList()); List<String> texts = articleList.stream().map(article -> article.getTitle() + article.getContent()).collect(Collectors.toList());
//分析热评词 //分析热评词
return TextUtil.getHighWordsJson(texts, 30); return textUtil.getHighWordsJson(texts, 30);
} }
/** /**
......
...@@ -863,6 +863,16 @@ public class EventServiceImpl implements EventService { ...@@ -863,6 +863,16 @@ public class EventServiceImpl implements EventService {
return eventClient.eventTopArticlesAnalysis(eventId, type, emotion, aggTitle); return eventClient.eventTopArticlesAnalysis(eventId, type, emotion, aggTitle);
} }
@Override
public void continueEvent(String eventId) {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = Objects.requireNonNull(requestAttributes).getRequest();
String submitterId = JwtUtil.unsign(request.getHeader(jwtKey), Map.class).get(GenericAttribute.USER_ID).toString();
String submitter = userService.queryUserInfo(submitterId, UserThreadLocal.getProjectId()).getNickname();
eventClient.continueEvent(eventId, submitter, submitterId);
}
@Data @Data
public static class MongoQueryUtil { public static class MongoQueryUtil {
......
...@@ -137,6 +137,9 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -137,6 +137,9 @@ public class MarkDataServiceImpl implements MarkDataService {
@Resource(name = "mongoUtil") @Resource(name = "mongoUtil")
MongoUtil mongoUtil; MongoUtil mongoUtil;
@Autowired
TextUtil textUtil;
@Override @Override
public PageVO<MarkFlowEntity> getYuqingMarkList(MarkSearchDTO markSearchDTO) { public PageVO<MarkFlowEntity> getYuqingMarkList(MarkSearchDTO markSearchDTO) {
try { try {
...@@ -504,12 +507,13 @@ public class MarkDataServiceImpl implements MarkDataService { ...@@ -504,12 +507,13 @@ public class MarkDataServiceImpl implements MarkDataService {
log.info("es查询size:{},耗时:{}", texts.size(), System.currentTimeMillis() - s); log.info("es查询size:{},耗时:{}", texts.size(), System.currentTimeMillis() - s);
long s1 = System.currentTimeMillis(); long s1 = System.currentTimeMillis();
// 分析高频词 // 分析高频词
List<JSONObject> highWords = TextUtil.getHighWordsJson(texts, 30); List<JSONObject> highWords = textUtil.getHighWordsJson(texts, 30);
log.info("分析高频词耗时:{}", (System.currentTimeMillis() - s1)); log.info("分析高频词耗时:{}", (System.currentTimeMillis() - s1));
redisUtil.setExpire(redisKey, JSON.toJSONString(highWords)); redisUtil.setExpire(redisKey, JSON.toJSONString(highWords));
return highWords; return highWords;
} catch (IOException e) { } catch (IOException e) {
ExceptionCast.cast(CommonCodeEnum.FAIL, "es查询异常", e); log.error("getMarkHighWord-",e);
ExceptionCast.cast(CommonCodeEnum.FAIL);
} }
return null; return null;
} }
......
package com.zhiwei.brandkbs2.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.service.UserCenterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
/**
* @ClassName: UserCenterServiceImpl
* @Description UserCenterServiceImpl
* @author: sjj
* @date: 2023-01-06 11:36
*/
@Service("userCenterServiceImpl")
public class UserCenterServiceImpl implements UserCenterService {
@Value("${qbjc.userCenter.url}")
private String yuqingInterface;
@Value("${qbjc.userCenter.token}")
private String token;
@Autowired
private RestTemplate restTemplate;
private static final String EXTERNAL_ORIGIN = "External-Origin";
private static final String EXTERNAL_SERVICE = "External-Service";
private static final String EXTERNAL_TOKEN = "External-Token";
private static final String EXTERNAL_TICKET = "External-Ticket";
private static final String SERVICE_NAME = "BRANDKBS";
@Override
public ResponseResult verifyToken() {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set(EXTERNAL_ORIGIN, SERVICE_NAME);
httpHeaders.set(EXTERNAL_SERVICE, SERVICE_NAME);
httpHeaders.set(EXTERNAL_TOKEN, token);
HttpEntity<String> requestEntity = new HttpEntity<>(httpHeaders);
HttpEntity<JSONObject> entity = restTemplate.exchange(yuqingInterface + "/thirdPart/external/verify/token", HttpMethod.GET,
requestEntity, JSONObject.class);
if (null != entity.getBody() || !entity.getBody().getBoolean("status")) {
String ticket = entity.getBody().getJSONObject("data").getString("ticket");
return ResponseResult.success(ticket);
}
return ResponseResult.failure("ticket获取失败");
}
@Override
public ResponseResult verifyTicket(String ticket) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set(EXTERNAL_ORIGIN, SERVICE_NAME);
httpHeaders.set(EXTERNAL_TOKEN, token);
httpHeaders.set(EXTERNAL_TICKET, ticket);
HttpEntity<String> requestEntity = new HttpEntity<>(httpHeaders);
HttpEntity<JSONObject> entity = restTemplate.exchange(yuqingInterface + "/thirdPart/external/verify/ticket", HttpMethod.GET,
requestEntity, JSONObject.class);
if (null != entity.getBody()) {
JSONObject userInfo = entity.getBody().getJSONObject("data");
return ResponseResult.success(userInfo);
}
return ResponseResult.failure("用户信息获取失败");
}
@Override
public boolean registerUser(long phone, String password) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set(EXTERNAL_ORIGIN, SERVICE_NAME);
httpHeaders.set(EXTERNAL_TOKEN, token);
JSONObject json = new JSONObject();
json.put("phone", phone);
json.put("password", password);
HttpEntity<JSONObject> requestEntity = new HttpEntity<>(json, httpHeaders);
HttpEntity<JSONObject> entity = restTemplate.exchange(yuqingInterface + "/thirdPart/external/register/phone", HttpMethod.POST,
requestEntity, JSONObject.class);
return null != entity.getBody() && entity.getBody().getBoolean("status");
}
}
...@@ -10,11 +10,13 @@ import com.zhiwei.brandkbs2.enmus.RoleEnum; ...@@ -10,11 +10,13 @@ import com.zhiwei.brandkbs2.enmus.RoleEnum;
import com.zhiwei.brandkbs2.enmus.response.LoginCodeEnum; import com.zhiwei.brandkbs2.enmus.response.LoginCodeEnum;
import com.zhiwei.brandkbs2.exception.ExceptionCast; import com.zhiwei.brandkbs2.exception.ExceptionCast;
import com.zhiwei.brandkbs2.model.CommonCodeEnum; import com.zhiwei.brandkbs2.model.CommonCodeEnum;
import com.zhiwei.brandkbs2.model.ResponseResult;
import com.zhiwei.brandkbs2.pojo.User; import com.zhiwei.brandkbs2.pojo.User;
import com.zhiwei.brandkbs2.pojo.UserInfo; import com.zhiwei.brandkbs2.pojo.UserInfo;
import com.zhiwei.brandkbs2.pojo.UserRole; import com.zhiwei.brandkbs2.pojo.UserRole;
import com.zhiwei.brandkbs2.pojo.dto.UserDTO; import com.zhiwei.brandkbs2.pojo.dto.UserDTO;
import com.zhiwei.brandkbs2.pojo.vo.PageVO; import com.zhiwei.brandkbs2.pojo.vo.PageVO;
import com.zhiwei.brandkbs2.service.UserCenterService;
import com.zhiwei.brandkbs2.service.UserService; import com.zhiwei.brandkbs2.service.UserService;
import com.zhiwei.brandkbs2.util.MongoUtil; import com.zhiwei.brandkbs2.util.MongoUtil;
import com.zhiwei.brandkbs2.util.Tools; import com.zhiwei.brandkbs2.util.Tools;
...@@ -61,6 +63,9 @@ public class UserServiceImpl implements UserService { ...@@ -61,6 +63,9 @@ public class UserServiceImpl implements UserService {
@Autowired @Autowired
private com.zhiwei.middleware.auth.core.UserInfoClient userInfoClient; private com.zhiwei.middleware.auth.core.UserInfoClient userInfoClient;
@Resource(name = "userCenterServiceImpl")
private UserCenterService userCenterService;
@Override @Override
public UserInfo login() { public UserInfo login() {
String uid = UserThreadLocal.getUserId(); String uid = UserThreadLocal.getUserId();
...@@ -119,21 +124,27 @@ public class UserServiceImpl implements UserService { ...@@ -119,21 +124,27 @@ public class UserServiceImpl implements UserService {
} }
@Override @Override
public void addUser(UserDTO userDTO) { public ResponseResult addUser(UserDTO userDTO) {
if (Objects.isNull(userDTO.getRoleId()) || userDTO.getRoleId() < RoleEnum.ADMIN.getState()) { if (Objects.isNull(userDTO.getRoleId()) || userDTO.getRoleId() < RoleEnum.ADMIN.getState()) {
// 抛出用户权限设置错误异常 // 抛出用户权限设置错误异常
ExceptionCast.cast(CommonCodeEnum.INVALID_PARAM, "用户权限设置异常"); ExceptionCast.cast(CommonCodeEnum.UN_AUTHORISE);
} }
int roleId = UserThreadLocal.getRoleId(); int roleId = UserThreadLocal.getRoleId();
// 只有超管能设置管理员 // 只有超管能设置管理员
if (roleId != RoleEnum.SUPER_ADMIN.getState() && userDTO.getRoleId() <= RoleEnum.ADMIN.getState()) { if (roleId != RoleEnum.SUPER_ADMIN.getState() && userDTO.getRoleId() <= RoleEnum.ADMIN.getState()) {
ExceptionCast.cast(CommonCodeEnum.UN_AUTHORISE); ExceptionCast.cast(CommonCodeEnum.UN_AUTHORISE);
} }
// 有密码则通过用户中心注册
if (null != userDTO.getPassword()) {
if (!userCenterService.registerUser(userDTO.getPhoneNumber(), userDTO.getPassword())) {
return ResponseResult.failure("用户中心注册账号失败");
}
}
User user = userDao.findOneById(userDTO.getId()); User user = userDao.findOneById(userDTO.getId());
// 新用户 // 新用户
if (null == user) { if (null == user) {
userDao.insertOne(createNewUser(userDTO)); userDao.insertOne(createNewUser(userDTO));
return; return ResponseResult.success();
} }
List<UserRole> roles = user.getRoles(); List<UserRole> roles = user.getRoles();
// 无任何角色 // 无任何角色
...@@ -149,6 +160,7 @@ public class UserServiceImpl implements UserService { ...@@ -149,6 +160,7 @@ public class UserServiceImpl implements UserService {
Update update = new Update(); Update update = new Update();
update.set("roles", roles); update.set("roles", roles);
userDao.updateOneByIdWithField(userDTO.getId(), update); userDao.updateOneByIdWithField(userDTO.getId(), update);
return ResponseResult.success();
} }
@Override @Override
...@@ -191,7 +203,13 @@ public class UserServiceImpl implements UserService { ...@@ -191,7 +203,13 @@ public class UserServiceImpl implements UserService {
} }
@Override @Override
public void addSuperAdmin(UserDTO userDTO) { public ResponseResult addSuperAdmin(UserDTO userDTO) {
// 有密码则通过用户中心注册
if (null != userDTO.getPassword()) {
if (!userCenterService.registerUser(userDTO.getPhoneNumber(), userDTO.getPassword())) {
return ResponseResult.failure("用户中心注册账号失败");
}
}
User user = userDao.findOneById(userDTO.getId()); User user = userDao.findOneById(userDTO.getId());
// 老用户 // 老用户
if (null != user) { if (null != user) {
...@@ -200,12 +218,13 @@ public class UserServiceImpl implements UserService { ...@@ -200,12 +218,13 @@ public class UserServiceImpl implements UserService {
update.set("superAdmin", true); update.set("superAdmin", true);
update.set("roles", null); update.set("roles", null);
userDao.updateOneByIdWithField(user.getId(), update); userDao.updateOneByIdWithField(user.getId(), update);
return; return ResponseResult.success();
} }
} }
// 新用户 // 新用户
userDTO.setRoleId(RoleEnum.SUPER_ADMIN.getState()); userDTO.setRoleId(RoleEnum.SUPER_ADMIN.getState());
userDao.insertOne(createNewUser(userDTO)); userDao.insertOne(createNewUser(userDTO));
return ResponseResult.success();
} }
@Override @Override
...@@ -299,9 +318,7 @@ public class UserServiceImpl implements UserService { ...@@ -299,9 +318,7 @@ public class UserServiceImpl implements UserService {
// if (null == userId || null == projectId) { // if (null == userId || null == projectId) {
// ExceptionCast.cast(LoginCodeEnum.LOGIN_EXPIRED_ERROR); // ExceptionCast.cast(LoginCodeEnum.LOGIN_EXPIRED_ERROR);
// } // }
Map<String,Object> userInfoMap = queryUserInfo(UserThreadLocal.getUserId(), UserThreadLocal.getProjectId()).toMap(); return queryUserInfo(UserThreadLocal.getUserId(), UserThreadLocal.getProjectId()).toMap();
return userInfoMap;
} }
private User createNewUser(UserDTO userDTO) { private User createNewUser(UserDTO userDTO) {
......
...@@ -7,6 +7,7 @@ import com.hankcs.hanlp.HanLP; ...@@ -7,6 +7,7 @@ import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.dictionary.CustomDictionary; import com.hankcs.hanlp.dictionary.CustomDictionary;
import com.hankcs.hanlp.dictionary.stopword.CoreStopWordDictionary; import com.hankcs.hanlp.dictionary.stopword.CoreStopWordDictionary;
import com.hankcs.hanlp.seg.common.Term; import com.hankcs.hanlp.seg.common.Term;
import com.zhiwei.brandkbs2.ansjSeg.AnsjSeg;
import com.zhiwei.brandkbs2.common.GenericAttribute; import com.zhiwei.brandkbs2.common.GenericAttribute;
import com.zhiwei.nlp.AggreeBootStarter; import com.zhiwei.nlp.AggreeBootStarter;
import com.zhiwei.nlp.common.AggreeConfig; import com.zhiwei.nlp.common.AggreeConfig;
...@@ -14,6 +15,7 @@ import com.zhiwei.nlp.vo.KResult; ...@@ -14,6 +15,7 @@ import com.zhiwei.nlp.vo.KResult;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -38,6 +40,8 @@ public class TextUtil { ...@@ -38,6 +40,8 @@ public class TextUtil {
private Resource customDic; private Resource customDic;
@Value("classpath:wordDic/stopWordDictionary.txt") @Value("classpath:wordDic/stopWordDictionary.txt")
private Resource stopDic; private Resource stopDic;
@Autowired
private AnsjSeg ansjSeg;
@PostConstruct @PostConstruct
public void init() { public void init() {
...@@ -103,10 +107,11 @@ public class TextUtil { ...@@ -103,10 +107,11 @@ public class TextUtil {
return Tools.sortMap(result, maxSize); return Tools.sortMap(result, maxSize);
} }
public static List<JSONObject> getHighWordsJson(List<String> texts, Integer maxSize) { public List<JSONObject> getHighWordsJson(List<String> texts, Integer maxSize) {
Map<String, Integer> highWords = getHighWords(texts, maxSize); // Map<String, Integer> highWords = getHighWords(texts, maxSize);
List<JSONObject> result = new ArrayList<>(highWords.size()); List<Map.Entry<String, Integer>> wordRate = ansjSeg.getFenCi(texts, maxSize);
for (Map.Entry<String, Integer> entry : highWords.entrySet()) { List<JSONObject> result = new ArrayList<>(wordRate.size());
for (Map.Entry<String, Integer> entry : wordRate) {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("name", entry.getKey()); jsonObject.put("name", entry.getKey());
jsonObject.put("num", entry.getValue()); jsonObject.put("num", entry.getValue());
......
...@@ -536,10 +536,12 @@ public class Tools { ...@@ -536,10 +536,12 @@ public class Tools {
//根据文件路径创建缓冲输入流 //根据文件路径创建缓冲输入流
br = new BufferedReader(new InputStreamReader(inputStream)); br = new BufferedReader(new InputStreamReader(inputStream));
//循环读取文件的每一行,对需要修改的行进行修改,放入缓冲对象中 //循环读取文件的每一行,对需要修改的行进行修改,放入缓冲对象中
while (StringUtils.isNotEmpty(line = StringUtils.trim(br.readLine()))) { while (null != (line = StringUtils.trim(br.readLine()))) {
// 去除多余空格 // 去除多余空格
if (StringUtils.isNotEmpty(line)) {
result.add(line); result.add(line);
} }
}
} catch (Exception e) { } catch (Exception e) {
throw new Exception(e); throw new Exception(e);
} finally { } finally {
......
蓝瘦香菇
\ No newline at end of file
昨天
明天
今天
微博
转发
现在
嘿嘿
还要
赶早不赶晚
这些
日益
倒不如
立地
不只
一般
豁然
将近
毫不
大张旗鼓
不可开交
"
#
!
&
全力
就算
'
$
%
...
*
+
(
她们
)
.
/
各位
,
-
︿
3
2
1
不止
基本
0
不拘
7
这里
6
5
4
;
:
如此
9
8
极度
?
>
首先
=
<
也罢
@
A
当庭
隔夜
不少
不胜
\
_
^
到目前为止
大大
除开
暗中
而外
开始
`
三番两次
宁可
这么
权时
结果
大多
除此以外
单单
如下
几度
何处
如上
~
吧哒
|
放量
即便
当年
不对
顷刻
本人
岂非
趁热
哪边
立马
乘势
何况
这个
人民
率尔
那种
仍然
不能
根据
并肩
相对而言
也好
什么样
累年
扑通
即使
开外
大概
依照
·
乃至
与否
总而言之
高低
切切
多次
比如说
不亦乐乎
如期
简言之
何妨
不管怎样
将才
呆呆地
略为
更为
大约
其次
倍加
不定
除了
之后
难道
不可
风雨无阻
陡然
为了
及至
对于
虽说
彻夜
嘎嘎
不同
大体上
来得及
人人
比方
简而言之
这么些
不至于
这部
谁知
几时
应当
人家
如今
尽量
总的说来
继之
单纯
方才
这么点儿
乘胜
八成
光是
倘或
忽然
从头
出去
切不可
哪年
竟然
是否
而况
加以
从此以后
省得
我们
不力
各个
充其极
次第
岂止
尽管如此
偶而
看上去
截然
甚而
如常
任何
极端
接着
嘎登
皆可
具体地说
凝神
这就是说
千万
好在
从早到晚
各自
取道
纯粹
这种
只限
上去
恐怕
莫非
虽然
碰巧
紧接着
即若
等等
按照
不单
具体说来
一旦
不要
怎样
轰然
每当
接连不断
不比
各种
理应
连袂
什么
那里
后来
日渐
暗自
以免
不然
别人
看来
沙沙
趁势
切莫
从重
尽心尽力
切勿
果真
要不是
并排
自己
保管
差一点
默然
此中
藉以
不惟
的确
此后
待到
末##末
哪些
不然的话
其他
毫无
连声
趁早
几经
挨门挨户
挨次
保险
从小
莫若
刚好
如若
默默地
是的
嗡嗡
请勿
得起
借此
从此
然而
亲眼
略微
刚才
一定
反倒是
按时
倘若
差不多
从无到有
起来
反之则
何止
惯常
姑且
与其
哪个
反而
常言道
大抵
不再
到了儿
再者
并且
趁着
两者
等到
不经意
如何
来着
不由得
怎么样
尽管
知道
旁人
不管
个人
哪里
似的
倒不如说
其余
长此下去
匆匆
多少
当着
就是说
既然
虽则
纵使
呼哧
沿
联袂
或许
来看
俺们
倘然
只是
大凡
而言
当真
因此
不如
据此
更进一步
那么样
纵然
不仅...而且
极为
尽然
长期以来
不妨
不止一次
——
较比
必须
或是
向着
从古到今
尽如人意
毕竟
川流不息
确实
可以
并没有
当场
要不
那儿
纵令
恰巧
无宁
来讲
局外
近年来
起首
,
赶快
需要
即令
大略
将要
不特
然则
极了
但是
不独
何苦
一则
猛然
屡屡
到底
在下
设使
经过
至于
老老实实
猛然间
截至
譬如
很多
一切
别的
要么
趁机
越是
 
按期
何尝
动不动
不外
因为
使得
如果
按说
不大
自从
以便
宁肯
当下
不光
它们
之类
老大
尽可能
尔后
成年累月
如上所述
每个
彼此
从宽
就此
达旦
当口儿
归根结底
看起来
或多或少
当中
据我所知
据实
不免
遵照
固然
缕缕
换言之
策略地
居然
连日来
起见
比照
不成
不仅仅是
长话短说
因而
设若
不论
沿着
恍然
慢说
亲身
哼唷
便
以至
以致
本着
论说
除外
之所以
简直
前后
大家
果然
共总
时候
不怎么
如次
鄙人
亲手
顿时
顺着
叮当
敞开儿
大面儿上
年复一年
打开天窗说亮话
上来
假若
不曾
着呢
快要
此刻
而且
背靠背
假使
陈年
多多益善
另方面
他人
到处
大体
下来
云云
全然
何须
为着
每逢
很少
尚且
只要
不仅仅
顷刻间
常常
日臻
恰似
得天独厚
另外
敢情
率然
并无
届时
每每
成为
他们
尔等
尽快
不消
如其
反之亦然
当即
据悉
前者
必定
[
处处
]
断然
绝非
总的来看
岂但
分期
古来
我们
啪达
顷刻之间
每次
别说
传闻
从优
总的来说
非徒
常言说得好
非得
由于
难说
可是
从今以后
比如
继而
不可抗拒
精光
凭借
略加
平素
绝对
于是
一样
长线
每时每刻
不择手段
理该
拦腰
喔唷
仍旧
屡次
以及
当然
到头来
抑或
宁愿
一方面
举凡
只有
咱们
从新
这样
不得已
十分
自个儿
呼啦
必将
串行
而论
牢牢
成心
哈哈
与此同时
其一
于是乎
看样子
换句话说
全身心
除非
有人
以至于
按理
也许
打从
照着
况且
除却
不了
不得
反手
成年
哎呀
关于
恰恰相反
这儿
累次
其中
动辄
立刻
倒是
毫无例外
从古至今
可见
诚然
莫不
怎么办
亲自
经常
决不
自各儿
这么样
不必
不得了
除去
由此可见
有些
挨个
不仅
进来
大事
全年
绝顶
社会主义
总之
当头
若是
不外乎
要不然
如此等等
分期分批
那么
毋宁
其二
不会
..
背地里
此间
哪儿
不怕
不问
为什么
没有
公然
那会儿
迫于
来不及
不起
千万千万
可能
正如
还有
究竟
及其
不限
偏偏
据称
故此
伙同
敢于
弹指之间
那些
朝着
叮咚
临到
即将
哎哟
而已
尽心竭力
到头
亲口
已经
不但
出来
随着
不得不
非常
另一个
非但
如前所述
--
诸位
那时
即是说
何时
此外
然后
勃然
从来
近几年来
近来
莫如
奋勇
比起
仅仅
故而
穷年累月
乌乎
怪不得
借以
主要
间或
方能
白白
反过来
全都
并没
除此之外
马上
恰恰
传说
从速
上下
哪样
这边
从未
不能不
从不
那个
迟早
不知不觉
挨家挨户
多多少少
几番
有关
连同
互相
怎么
但愿
你们
凑巧
连日
路经
起先
二话没说
之一
这时
即或
连连
其后
各式
当儿
独自
哪天
就是
乘机
常言说
不下
昂然
毫无保留地
趁便
屡次三番
甚至
那末
充其量
该当
另一方面
既...又
瑟瑟
的话
呜呼
或者
立时
反过来说
有的
挨着
再说
够瞧的
过于
就地
极其
何乐而不为
进去
起头
无论
据说
综上所述
抽冷子
才能
极大
恰逢
大举
漫说
接下来
忽地
而是
难得
不但...而且
格外
倘使
还是
从而
本身
乘隙
既是
理当
反倒
可好
不满
交口
基本上
认为
这会儿
充分
并非
不迭
老是
倍感
鉴于
要是
反之
哪怕
除此而外
一下
自身
任凭
几乎
顶多
而又
不时
一个
否则
自家
三天两头
啊呀
难怪
所以
发生
哗啦
多年来
罢了
大致
从轻
那边
那么些
不巧
完全
起初
某个
加之
大不了
归根到底
偶尔
应该
二话不说
日见
不是
大都
愤然
而后
多年前
例如
一些
多多
日复一日
较之
即刻
那样
其它
不料
决非
乘虚
恰如
能够
从严
故意
啊哟
从中
不已
加上
具体来说
较为
分头
直到
>>
隔日
多亏
假如
甚么
作为
暗地里
挨门逐户
恰好
其实
何必
万一
不过
某些
啊哈
基于
不日
尽早
刚巧
一来
同时
三番五次
为何
更加
绝不
除此
不常
进而
另行
急匆匆
通过
话说
若非
极力
存心
http
https
cn
com
呵呵
\ No newline at end of file
...@@ -52,7 +52,7 @@ mark.registry.address=zookeeper://192.168.0.11:2181?backup=192.168.0.30:2181,192 ...@@ -52,7 +52,7 @@ mark.registry.address=zookeeper://192.168.0.11:2181?backup=192.168.0.30:2181,192
mark.provider.group=zhiwei-mark-test_liuyu mark.provider.group=zhiwei-mark-test_liuyu
#\u4E8B\u4EF6\u4E2D\u95F4\u4EF6 #\u4E8B\u4EF6\u4E2D\u95F4\u4EF6
event.registry.address=zookeeper://192.168.0.11:2181?backup=192.168.0.30:2181,192.168.0.35:2181 event.registry.address=zookeeper://192.168.0.11:2181?backup=192.168.0.30:2181,192.168.0.35:2181
event.provider.group=zhiwei-event event.provider.group=zhiwei-event-ygd
#\u7528\u6237\u4E2D\u5FC3 #\u7528\u6237\u4E2D\u5FC3
auth.center.client.consumer.group=zhiwei-auth-dev-liuyu auth.center.client.consumer.group=zhiwei-auth-dev-liuyu
auth.center.client.registry.address=zookeeper://192.168.0.11:2181?backup=192.168.0.30:2181,192.168.0.35:2181 auth.center.client.registry.address=zookeeper://192.168.0.11:2181?backup=192.168.0.30:2181,192.168.0.35:2181
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment