Commit c35625b7 by 侯昆

更新

1 parent 8421c5ff
......@@ -15,8 +15,11 @@ package com.dookay.cihai.admin.controller;
****************************************/
import com.alibaba.fastjson.JSON;
import com.dookay.cihai.admin.controller.form.AddRelationForm;
import com.dookay.cihai.core.word.domain.WordDomain;
import com.dookay.cihai.core.word.domain.WordRelationDomain;
import com.dookay.cihai.core.word.query.WordQuery;
import com.dookay.cihai.core.word.service.IWordRelationService;
import com.dookay.cihai.core.word.service.IWordService;
import com.dookay.coral.common.core.exception.ServiceException;
import com.dookay.coral.common.core.utils.lang.StringUtils;
......@@ -26,6 +29,7 @@ import com.dookay.coral.common.web.response.JsonResult;
import com.dookay.coral.common.web.utils.upload.model.ImageModel;
import com.hankcs.hanlp.HanLP;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
......@@ -40,6 +44,7 @@ import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 词条相关控制器
......@@ -54,6 +59,8 @@ public class WordRelateController extends BaseController {
@Autowired
private IWordService wordService;
@Autowired
private IWordRelationService wordRelationService;
@Autowired
private ResourcesMappingProperties resourcesMappingProperties;
/**
......@@ -73,7 +80,7 @@ public class WordRelateController extends BaseController {
List<ImageModel> modelList = doUpload(word, image);
List<ImageModel> current = new ArrayList<>();
if (StringUtils.isNotEmpty(wordDomain.getBaikePhotos())) {
current = ImageModel.toList(wordDomain.getBaikePhotos());
current = ImageModel.toList(wordDomain.getBaikePhotos());
}
current.addAll(modelList);
wordDomain.setBaikePhotos(JSON.toJSONString(current));
......@@ -144,6 +151,26 @@ public class WordRelateController extends BaseController {
wordDomain.setBaikeVideo(JSON.toJSONString(current));
wordService.update(wordDomain);
return successResult("success", modelList);
}
/**
* 添加关联
*
* @author houkun
* @date 2018/1/11
*/
@RequestMapping(value = "/relation/add", method = RequestMethod.POST)
public JsonResult relationAdd(@ModelAttribute AddRelationForm addRelationForm) {
WordQuery q = new WordQuery();
q.setWordIn(addRelationForm.getWords());
List<WordDomain> wordList = wordService.getList(q);
if (wordList.size() < addRelationForm.getWords().size()) {
return errorResult("存在无效词");
}
List<WordRelationDomain> wordRelationList = wordList.stream()
.map(w -> new WordRelationDomain(w.getId(), addRelationForm.getGroupSlug()))
.collect(Collectors.toList());
wordRelationService.saveBatch(wordRelationList);
return successResult("success");
}
}
package com.dookay.cihai.admin.controller.form;
/*****************************************
* *
* @dookay.com Internet make it happen *
* ----------- ----------------------- *
* dddd ddddd Internet make it happen *
* o o o Internet make it happen *
* k k k Internet make it happen *
* a a a Internet make it happen *
* yyyy yyyyy Internet make it happen *
* ----------- ----------------------- *
* @dookay.com Internet make it happen *
* *
****************************************/
import lombok.Data;
import java.util.List;
/**
* @author houkun
* @date 2018/1/11
*/
@Data
public class AddRelationForm {
private String groupSlug;
private List<String> words;
}
......@@ -152,6 +152,6 @@ public class HomeController extends BaseController {
@RequestMapping(value = "/statement", method = RequestMethod.GET)
@ApiOperation(value = "推荐词条", httpMethod = "GET", produces = MimeTypeUtils.APPLICATION_JSON_VALUE, response = RecommendStatementDTO.class)
public JsonResult recommendStatement() {
return successResult("推荐词条", wordService.RecomendStatement());
return successResult("推荐词条", wordService.recomendStatement());
}
}
package com.dookay.cihai.core.word.domain;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
import java.util.List;
/**
* 词条关系
* @author wangwei
* @since 2018年01月11日
* @version V1.0
*/
@Data
@Table(name = "t_word_relation")
@NoArgsConstructor
public class WordRelationDomain implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@Id
private Long id;
/**
*
*/
private Long wordId;
/**
*
*/
private String groupSlug;
/**
*
*/
private Date createTime;
public WordRelationDomain(Long wordId, String groupSlug) {
this.wordId = wordId;
this.groupSlug = groupSlug;
this.createTime = new Date();
}
}
......@@ -20,6 +20,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
import java.util.stream.Collectors;
/**
* 推荐词条
......@@ -37,7 +38,7 @@ public class RecommendStatementDTO {
@ApiModelProperty("相关词")
private List<String> relatedStatement;
public static RecommendStatementDTO fromDomain(WordDomain word) {
public static RecommendStatementDTO fromDomain(WordDomain word, List<WordDomain> related) {
String description = "";
String baikeBrief = word.getBaikeBrief();
int i = StringUtils.indexOf(baikeBrief, '。');
......@@ -47,6 +48,8 @@ public class RecommendStatementDTO {
RecommendStatementDTO dto = new RecommendStatementDTO();
dto.setWord(word.getWord());
dto.setDescription(description);
List<String> relatedStatement = related.stream().filter(w -> !w.getWord().equals(word.getWord())).map(WordDomain::getWord).collect(Collectors.toList());
dto.setRelatedStatement(relatedStatement);
return dto;
}
}
package com.dookay.cihai.core.word.mapper;
import com.dookay.coral.common.core.persistence.Mapper;
import com.dookay.cihai.core.word.domain.WordRelationDomain;
/**
* 词条关系
* @author wangwei
* @since 2018年01月11日
* @version V1.0
*/
public interface WordRelationMapper extends Mapper<WordRelationDomain> {
}
package com.dookay.cihai.core.word.query;
import com.dookay.cihai.core.word.domain.WordDomain;
import com.dookay.coral.common.core.persistence.Query;
import com.dookay.coral.common.core.persistence.criteria.QueryCriteria;
import lombok.Data;
import tk.mybatis.mapper.entity.Example;
import com.dookay.coral.common.core.persistence.criteria.QueryCriteria;
import com.dookay.cihai.core.word.domain.WordDomain;
import java.util.List;
......@@ -18,18 +18,26 @@ import java.util.List;
@Data
public class WordQuery extends Query {
private List<Long> ids;
private String word;
private String keyword;
private List<String> keywordList;
private List<String> wordIn;
@Override
public QueryCriteria toCriteria() {
QueryCriteria queryCriteria = new QueryCriteria(WordDomain.class);
Example.Criteria criteria = queryCriteria.createCriteria();
if (valid(ids)) {
criteria.andIn("id", ids);
}
if (valid(word)) {
criteria.andEqualTo("word", word);
}
if (valid(wordIn)) {
criteria.andIn("word", wordIn);
}
if (valid(keyword)) {
String str = "%" + keyword + "%";
criteria.andCondition(String.format("(word like '%s' or word_alias like '%s')", str, str));
......
package com.dookay.cihai.core.word.query;
import com.dookay.coral.common.core.persistence.Query;
import lombok.Data;
import tk.mybatis.mapper.entity.Example;
import com.dookay.coral.common.core.persistence.criteria.QueryCriteria;
import com.dookay.cihai.core.word.domain.WordRelationDomain;
import java.rmi.activation.ActivationGroup_Stub;
/**
* 词条关系
* @author wangwei
* @since 2018年01月11日
* @version V1.0
*/
@Data
public class WordRelationQuery extends Query {
private String groupSlug;
private Long wordId;
@Override
public QueryCriteria toCriteria() {
QueryCriteria queryCriteria = new QueryCriteria(WordRelationDomain.class);
Example.Criteria criteria = queryCriteria.createCriteria();
if (valid(groupSlug)) {
criteria.andEqualTo("groupSlug", groupSlug);
}
if(valid(wordId)) {
criteria.andEqualTo("wordId", wordId);
}
//todo 写查询逻辑
return queryCriteria;
}
}
package com.dookay.cihai.core.word.service;
import com.dookay.cihai.core.word.domain.WordDomain;
import com.dookay.cihai.core.word.domain.WordRelationDomain;
import com.dookay.coral.common.core.service.IBaseService;
import java.util.List;
/**
* @author wangwei
* @version V1.0
* @since 2018年01月11日
*/
public interface IWordRelationService extends IBaseService<WordRelationDomain> {
/**
* 批量保存
* @author houkun
* @date 2018/1/11
*/
void saveBatch(List<WordRelationDomain> wordRelationDomainList);
/**
* 获取相关词
* @param wordId
* @return
* @author houkun
* @date 2018/1/11
*/
List<WordDomain> getRelateWord(Long wordId);
}
......@@ -24,5 +24,5 @@ public interface IWordService extends IBaseService<WordDomain> {
* @author houkun
* @date 2018/1/10
*/
RecommendStatementDTO RecomendStatement();
RecommendStatementDTO recomendStatement();
}
package com.dookay.cihai.core.word.service.impl;
import com.dookay.cihai.core.word.domain.WordDomain;
import com.dookay.cihai.core.word.domain.WordRelationDomain;
import com.dookay.cihai.core.word.mapper.WordRelationMapper;
import com.dookay.cihai.core.word.query.WordQuery;
import com.dookay.cihai.core.word.query.WordRelationQuery;
import com.dookay.cihai.core.word.service.IWordRelationService;
import com.dookay.cihai.core.word.service.IWordService;
import com.dookay.coral.common.core.exception.ServiceException;
import com.dookay.coral.common.core.service.impl.BaseServiceImpl;
import com.dookay.coral.common.core.utils.lang.CollectionUtils;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
/**
* 词条关系
*
* @author wangwei
* @version V1.0
* @since 2018年01月11日
*/
@SuppressWarnings("ALL")
@Service("wordRelationService")
public class WordRelationServiceImpl extends BaseServiceImpl<WordRelationDomain> implements IWordRelationService {
@Autowired
private WordRelationMapper wordRelationMapper;
@Autowired
private IWordService wordService;
@Override
public void saveBatch(List<WordRelationDomain> wordRelationDomainList) {
if (CollectionUtils.isEmpty(wordRelationDomainList)) {
return;
}
String groupSlug = wordRelationDomainList.get(0).getGroupSlug();
WordRelationQuery q = new WordRelationQuery();
q.setGroupSlug(groupSlug);
List<WordRelationDomain> currentList = super.getList(q);
List<Long> currentWordIds = currentList.stream().map(WordRelationDomain::getWordId).collect(Collectors.toList());
List<Long> toWordIds = wordRelationDomainList.stream().map(WordRelationDomain::getWordId).collect(Collectors.toList());
List<Long> left = (List<Long>) CollectionUtils.subtract(toWordIds, currentWordIds);
List<WordRelationDomain> toInsertDomainList = wordRelationDomainList.stream().filter(w -> left.contains(w.getWordId())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(toInsertDomainList)) {
return;
}
int i = wordRelationMapper.insertList(toInsertDomainList);
if (i != toInsertDomainList.size()) {
throw new ServiceException("创建关系失败");
}
}
@Override
public List<WordDomain> getRelateWord(Long wordId) {
WordRelationQuery q = new WordRelationQuery();
q.setWordId(wordId);
WordRelationDomain wordRelate = super.getFirst(q);
if (wordRelate == null) {
return new ArrayList<>();
}
String groupSlug = wordRelate.getGroupSlug();
WordRelationQuery q2 = new WordRelationQuery();
q2.setGroupSlug(groupSlug);
List<WordRelationDomain> relateDomains = super.getList(q2);
if (CollectionUtils.isEmpty(relateDomains)) {
return new ArrayList<>();
}
List<Long> relateWordIds = relateDomains.stream().map(WordRelationDomain::getWordId).collect(Collectors.toList());
WordQuery wq = new WordQuery();
wq.setIds(relateWordIds);
List<WordDomain> list = wordService.getList(wq);
return list;
}
}
......@@ -2,13 +2,17 @@ package com.dookay.cihai.core.word.service.impl;
import com.dookay.cihai.core.word.dto.OneCharacterDTO;
import com.dookay.cihai.core.word.dto.RecommendStatementDTO;
import com.dookay.cihai.core.word.service.IWordRelationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import com.dookay.coral.common.core.service.impl.BaseServiceImpl;
import com.dookay.cihai.core.word.mapper.WordMapper;
import com.dookay.cihai.core.word.domain.WordDomain;
import com.dookay.cihai.core.word.service.IWordService;
import java.util.List;
/**
* 词条
* @author wangwei
......@@ -22,6 +26,10 @@ public class WordServiceImpl extends BaseServiceImpl<WordDomain> implements IWor
@Autowired
private WordMapper wordMapper;
@Autowired
@Lazy
private IWordRelationService wordRelationService;
@Override
public OneCharacterDTO oneDayOnCharacter() {
WordDomain wordDomain = wordMapper.selectWordLengthLessOrEquealThan(3);
......@@ -29,8 +37,9 @@ public class WordServiceImpl extends BaseServiceImpl<WordDomain> implements IWor
}
@Override
public RecommendStatementDTO RecomendStatement() {
public RecommendStatementDTO recomendStatement() {
WordDomain wordDomain = wordMapper.selectWordLengthMoreThan(3);
return RecommendStatementDTO.fromDomain(wordDomain);
List<WordDomain> relateWord = wordRelationService.getRelateWord(wordDomain.getId());
return RecommendStatementDTO.fromDomain(wordDomain, relateWord);
}
}
......@@ -24,16 +24,19 @@
<property name="smallint" value="Boolean"/>
</javaTypeResolver>
<table tableName="t_custom_dictionary" domainObjectName="CustomDictionary"
packageName="com.dookay.cihai.core.word" desc="自定义字典" author="wangwei">
</table>
<table tableName="t_word" domainObjectName="Word"
packageName="com.dookay.cihai.core.word" desc="词条" author="wangwei">
</table>
<table tableName="t_theme" domainObjectName="Theme"
packageName="com.dookay.cihai.core.theme" desc="专题" author="wangwei">
</table>
<table tableName="t_theme_word" domainObjectName="ThemeWord"
packageName="com.dookay.cihai.core.theme" desc="专题词条关系" author="wangwei">
<!--<table tableName="t_custom_dictionary" domainObjectName="CustomDictionary"-->
<!--packageName="com.dookay.cihai.core.word" desc="自定义字典" author="wangwei">-->
<!--</table>-->
<!--<table tableName="t_word" domainObjectName="Word"-->
<!--packageName="com.dookay.cihai.core.word" desc="词条" author="wangwei">-->
<!--</table>-->
<!--<table tableName="t_theme" domainObjectName="Theme"-->
<!--packageName="com.dookay.cihai.core.theme" desc="专题" author="wangwei">-->
<!--</table>-->
<!--<table tableName="t_theme_word" domainObjectName="ThemeWord"-->
<!--packageName="com.dookay.cihai.core.theme" desc="专题词条关系" author="wangwei">-->
<!--</table>-->
<table tableName="t_word_relation" domainObjectName="WordRelation"
packageName="com.dookay.cihai.core.word" desc="词条关系" author="wangwei">
</table>
</context>
\ No newline at end of file
<?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.dookay.cihai.core.word.mapper.WordRelationMapper" >
<!-- 公共查询语句 -->
<sql id="selectSql">
select
<trim suffixOverrides="," >
a.`id` as 'id',
a.`word_id` as 'wordId',
a.`group_slug` as 'groupSlug',
a.`create_time` as 'createTime',
</trim>
from
`t_word_relation` as a
</sql>
</mapper>
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!