集成后台管理系统,上线智能爬虫程序

This commit is contained in:
xxy
2019-11-15 07:15:20 +08:00
parent 7b861d2fb0
commit 53cff722d1
1125 changed files with 275618 additions and 62 deletions

View File

@ -0,0 +1,609 @@
package xyz.zinglizingli.books.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.pagehelper.PageHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.util.StringUtils;
import org.springframework.web.client.RestTemplate;
import tk.mybatis.orderbyhelper.OrderByHelper;
import xyz.zinglizingli.books.constant.CacheKeyConstans;
import xyz.zinglizingli.books.mapper.BookContentMapper;
import xyz.zinglizingli.books.mapper.BookIndexMapper;
import xyz.zinglizingli.books.mapper.BookMapper;
import xyz.zinglizingli.books.mapper.ScreenBulletMapper;
import xyz.zinglizingli.books.po.*;
import xyz.zinglizingli.common.cache.CommonCacheUtil;
import xyz.zinglizingli.common.utils.RestTemplateUtil;
import java.io.IOException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Service
public class BookService {
@Autowired
private BookMapper bookMapper;
@Autowired
private BookIndexMapper bookIndexMapper;
@Autowired
private BookContentMapper bookContentMapper;
@Autowired
private ScreenBulletMapper screenBulletMapper;
@Autowired
private CommonCacheUtil cacheUtil;
RestTemplate restTemplate = RestTemplateUtil.getInstance("utf-8");
private Logger log = LoggerFactory.getLogger(BookService.class);
public void saveBookAndIndexAndContent(Book book, List<BookIndex> bookIndex, List<BookContent> bookContent) {
//一次最多只允许插入20条记录,否则影响服务器响应,如果没有插入所有更新,则更新时间设为昨天
/*if(bookIndex.size()>100){
book.setUpdateTime(new Date(book.getUpdateTime().getTime()-1000*60*60*24));
}
*/
boolean isUpdate = false;
Long bookId = -1l;
book.setBookName(book.getBookName().trim());
book.setAuthor(book.getAuthor().trim());
BookExample example = new BookExample();
example.createCriteria().andBookNameEqualTo(book.getBookName()).andAuthorEqualTo(book.getAuthor());
List<Book> books = bookMapper.selectByExample(example);
if (books.size() > 0) {
//更新
bookId = books.get(0).getId();
book.setId(bookId);
bookMapper.updateByPrimaryKeySelective(book);
isUpdate = true;
} else {
if (book.getVisitCount() == null) {
Long visitCount = generateVisiteCount(book.getScore());
book.setVisitCount(visitCount);
}
//插入
int rows = bookMapper.insertSelective(book);
if (rows > 0) {
bookId = book.getId();
}
}
if (bookId >= 0) {
//查询目录已存在数量
/* BookIndexExample bookIndexExample = new BookIndexExample();
bookIndexExample.createCriteria().andBookIdEqualTo(bookId);
int indexCount = bookIndexMapper.countByExample(bookIndexExample);*/
BookIndex lastIndex = null;
List<BookIndex> newBookIndexList = new ArrayList<>();
List<BookContent> newContentList = new ArrayList<>();
for (int i = 0; i < bookIndex.size(); i++) {
BookContent bookContentItem = bookContent.get(i);
if (!bookContentItem.getContent().contains("正在手打中,请稍等片刻,内容更新后,需要重新刷新页面,才能获取最新更新")) {
BookIndex bookIndexItem = bookIndex.get(i);
bookIndexItem.setBookId(bookId);
bookContentItem.setBookId(bookId);
//bookContentItem.setIndexId(bookIndexItem.getId());暂时使用bookId和IndexNum查询content
bookContentItem.setIndexNum(bookIndexItem.getIndexNum());
newBookIndexList.add(bookIndexItem);
newContentList.add(bookContentItem);
lastIndex = bookIndexItem;
}
//一次最多只允许插入20条记录,否则影响服务器响应
if (isUpdate && i % 20 == 0 && newBookIndexList.size() > 0) {
insertIndexListAndContentList(newBookIndexList, newContentList);
newBookIndexList = new ArrayList<>();
newContentList = new ArrayList<>();
try {
Thread.sleep(1000 * 60 * 5);
} catch (InterruptedException e) {
log.error(e.getMessage(), e);
throw new RuntimeException(e.getMessage());
}
}
}
if (newBookIndexList.size() > 0) {
insertIndexListAndContentList(newBookIndexList, newContentList);
}
if (isUpdate) {
sendNewstIndex(lastIndex);
} else {
sendNewstBook(bookId);
}
cacheUtil.del(CacheKeyConstans.NEWST_BOOK_LIST_KEY);
}
}
@Transactional
public void insertIndexListAndContentList(List<BookIndex> newBookIndexList, List<BookContent> newContentList) {
bookIndexMapper.insertBatch(newBookIndexList);
bookContentMapper.insertBatch(newContentList);
}
private Long generateVisiteCount(Float score) {
int baseNum = (int) (Math.pow(score * 10, (int) (score - 5)) / 2);
return Long.parseLong(baseNum + new Random().nextInt(1000) + "");
}
/**
* 分页查询
*/
public List<Book> search(int page, int pageSize,
String userId, String ids, String keyword, String bookStatus, Integer catId, Integer softCat, String softTag, String sortBy, String sort) {
if (!StringUtils.isEmpty(userId)) {
sortBy = "user_ref_book.id";
sort = "DESC";
}
PageHelper.startPage(page, pageSize);
// 排序设置[注意orderby 紧跟分页后面]
if (!StringUtils.isEmpty(sortBy)) {
OrderByHelper.orderBy(sortBy + " " + sort);
}
List<Book> books = bookMapper.search(userId, ids, keyword, catId, softCat, softTag, bookStatus);
return books;
}
public String getCatNameById(Integer catid) {
String catName = "其他";
switch (catid) {
case 1: {
catName = "玄幻奇幻";
break;
}
case 2: {
catName = "武侠仙侠";
break;
}
case 3: {
catName = "都市言情";
break;
}
case 4: {
catName = "历史军事";
break;
}
case 5: {
catName = "科幻灵异";
break;
}
case 6: {
catName = "网游竞技";
break;
}
case 7: {
catName = "女生频道";
break;
}
case 8: {
catName = "轻小说";
break;
}
default: {
break;
}
}
return catName;
}
public Book queryBaseInfo(Long bookId) {
return bookMapper.selectByPrimaryKey(bookId);
}
public List<BookIndex> queryNewIndexList(Long bookId) {
PageHelper.startPage(1, 15);
BookIndexExample example = new BookIndexExample();
example.createCriteria().andBookIdEqualTo(bookId);
example.setOrderByClause("index_num DESC");
return bookIndexMapper.selectByExample(example);
}
public List<BookIndex> queryAllIndexList(Long bookId) {
BookIndexExample example = new BookIndexExample();
example.createCriteria().andBookIdEqualTo(bookId);
example.setOrderByClause("index_num ASC");
return bookIndexMapper.selectByExample(example);
}
public BookContent queryBookContent(Long bookId, Integer indexNum) {
BookContent content = (BookContent) cacheUtil.getObject(CacheKeyConstans.BOOK_CONTENT_KEY_PREFIX + "_" + bookId + "_" + indexNum);
if (content == null) {
BookContentExample example = new BookContentExample();
example.createCriteria().andBookIdEqualTo(bookId).andIndexNumEqualTo(indexNum);
List<BookContent> bookContents = bookContentMapper.selectByExample(example);
content = bookContents.size() > 0 ? bookContents.get(0) : null;
/*try {
content.setContent(chargeBookContent(content.getContent()));
} catch (IOException e) {
log.error(e.getMessage(), e);
}*/
cacheUtil.setObject(CacheKeyConstans.BOOK_CONTENT_KEY_PREFIX + "_" + bookId + "_" + indexNum, content, 60 * 60 * 24);
}
return content;
}
private String chargeBookContent(String content) throws IOException {
StringBuilder contentBuilder = new StringBuilder(content);
int length = content.length();
if (length > 100) {
String jsonResult = cacheUtil.get(CacheKeyConstans.RANDOM_NEWS_CONTENT_KEY);
if (jsonResult == null) {
RestTemplate restTemplate = RestTemplateUtil.getInstance("utf-8");
MultiValueMap<String, String> mmap = new LinkedMultiValueMap<>();
HttpHeaders headers = new HttpHeaders();
headers.add("Host", "channel.chinanews.com");
headers.add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(mmap, headers);
String body = restTemplate.postForEntity("http://channel.chinanews.com/cns/cjs/sh.shtml", request, String.class).getBody();
Pattern pattern = Pattern.compile("specialcnsdata\\s*=\\s*\\{\"docs\":(.+)};\\s+newslist\\s*=\\s*specialcnsdata;");
Matcher matcher = pattern.matcher(body);
if (matcher.find()) {
jsonResult = matcher.group(1);
cacheUtil.set(CacheKeyConstans.RANDOM_NEWS_CONTENT_KEY, jsonResult, 60 * 60 * 1);
}
}
if (jsonResult.length() > 5) {
List<Map<String, String>> list = new ObjectMapper().readValue(jsonResult, List.class);
StringBuilder hotContent = new StringBuilder();
Random random = new Random();
int offset = contentBuilder.indexOf("", 100);
for (Map<String, String> map : list) {
if (offset >= 100) {
hotContent.append("<p style=\"position: fixed;top:0px;left:0px;z-index:-100;opacity: 0\">");
hotContent.append(map.get("pubtime"));
hotContent.append("</p>");
contentBuilder.insert(offset + 1, hotContent.toString());
offset = contentBuilder.indexOf("", offset + 1 + hotContent.length());
if (offset > 100) {
hotContent.delete(0, hotContent.length());
hotContent.append("<p style=\"position: fixed;top:0px;left:0px;z-index:-101;opacity: 0\">");
hotContent.append(map.get("title"));
hotContent.append("</p>");
contentBuilder.insert(offset + 1, hotContent.toString());
offset = contentBuilder.indexOf("", offset + 1 + hotContent.length());
if (offset >= 100) {
hotContent.delete(0, hotContent.length());
hotContent.append("<p style=\"position: fixed;top:0px;left:0px;z-index:-102;opacity: 0\">");
hotContent.append(map.get("content"));
hotContent.append("</p>");
contentBuilder.insert(offset + 1, hotContent.toString());
offset = contentBuilder.indexOf("", offset + 1 + hotContent.length());
if (offset >= 100) {
hotContent.delete(0, hotContent.length());
hotContent.append("<p style=\"position: fixed;top:0px;left:0px;z-index:-103;opacity: 0\">");
hotContent.append("<img src=\"" + map.get("galleryphoto") + "\"/>");
hotContent.append("</p>");
contentBuilder.insert(offset + 1, hotContent.toString());
offset = contentBuilder.indexOf("", offset + 1 + hotContent.length());
hotContent.delete(0, hotContent.length());
}
}
}
}
}
}
}
return contentBuilder.toString();
}
public void addVisitCount(Long bookId) {
bookMapper.addVisitCount(bookId);
}
public String queryIndexNameByBookIdAndIndexNum(Long bookId, Integer indexNum) {
BookIndexExample example = new BookIndexExample();
example.createCriteria().andBookIdEqualTo(bookId).andIndexNumEqualTo(indexNum);
return bookIndexMapper.selectByExample(example).get(0).getIndexName();
}
public List<Integer> queryMaxAndMinIndexNum(Long bookId) {
List<Integer> result = new ArrayList<>();
BookIndexExample example = new BookIndexExample();
example.createCriteria().andBookIdEqualTo(bookId);
example.setOrderByClause("index_num desc");
List<BookIndex> bookIndices = bookIndexMapper.selectByExample(example);
if (bookIndices.size() > 0) {
result.add(bookIndices.get(0).getIndexNum());
result.add(bookIndices.get(bookIndices.size() - 1).getIndexNum());
}
return result;
}
/**
* 查询该书籍目录数量
*/
public List<Integer> queryIndexCountByBookNameAndBAuthor(String bookName, String author) {
List<Integer> result = new ArrayList<>();
BookExample example = new BookExample();
example.createCriteria().andBookNameEqualTo(bookName).andAuthorEqualTo(author);
List<Book> books = bookMapper.selectByExample(example);
if (books.size() > 0) {
Long bookId = books.get(0).getId();
BookIndexExample bookIndexExample = new BookIndexExample();
bookIndexExample.createCriteria().andBookIdEqualTo(bookId);
List<BookIndex> bookIndices = bookIndexMapper.selectByExample(bookIndexExample);
if (bookIndices != null && bookIndices.size() > 0) {
for (BookIndex bookIndex : bookIndices) {
result.add(bookIndex.getIndexNum());
}
}
}
return result;
}
public Book queryRandomBook() {
return bookMapper.queryRandomBook();
}
public Map<String, Object> queryNewstBook() {
final String SENDIDS = "sendWeiboIds";
Set<Long> sendIds = (Set<Long>) cacheUtil.getObject(SENDIDS);
if (sendIds == null) {
sendIds = new HashSet<>();
}
String newstIndexName = null;
Book book = null;
book = bookMapper.queryNewstBook(sendIds);
Map<String, Object> data = new HashMap<>();
if (book != null && book.getId() != null) {
newstIndexName = bookIndexMapper.queryNewstIndexName(book.getId());
if (!StringUtils.isEmpty(newstIndexName)) {
sendIds.add(book.getId());
cacheUtil.setObject(SENDIDS, sendIds, 60 * 60 * 24 * 2);
data.put("book", book);
data.put("newstIndexName", newstIndexName);
}
}
return data;
}
public String getSoftCatNameById(Integer softCat) {
String catName = "其他";
switch (softCat) {
case 21: {
catName = "魔幻";
break;
}
case 22: {
catName = "玄幻";
break;
}
case 23: {
catName = "古风";
break;
}
case 24: {
catName = "科幻";
break;
}
case 25: {
catName = "校园";
break;
}
case 26: {
catName = "都市";
break;
}
case 27: {
catName = "游戏";
break;
}
case 28: {
catName = "同人";
break;
}
case 29: {
catName = "悬疑";
break;
}
case 0: {
catName = "动漫";
break;
}
default: {
break;
}
}
return catName;
}
public void sendBullet(Long contentId, String bullet) {
ScreenBullet screenBullet = new ScreenBullet();
screenBullet.setContentId(contentId);
screenBullet.setScreenBullet(bullet);
screenBullet.setCreateTime(new Date());
screenBulletMapper.insertSelective(screenBullet);
}
public List<ScreenBullet> queryBullet(Long contentId) {
ScreenBulletExample example = new ScreenBulletExample();
example.createCriteria().andContentIdEqualTo(contentId);
example.setOrderByClause("create_time asc");
return screenBulletMapper.selectByExample(example);
}
public String queryIndexList(Long bookId, int count) {
BookIndexExample example = new BookIndexExample();
example.createCriteria().andBookIdEqualTo(bookId).andIndexNumEqualTo(count);
return bookIndexMapper.selectByExample(example).get(0).getIndexName();
}
public String queryContentList(Long bookId, int count) {
BookContentExample example = new BookContentExample();
example.createCriteria().andBookIdEqualTo(bookId).andIndexNumEqualTo(count);
return bookContentMapper.selectByExample(example).get(0).getContent();
}
public int countIndex(Long bookId) {
BookIndexExample example = new BookIndexExample();
example.createCriteria().andBookIdEqualTo(bookId);
return bookIndexMapper.countByExample(example);
}
public List<String> queryNewstBookIdList() {
return bookMapper.queryNewstBookIdList();
}
public List<String> queryEndBookIdList() {
return bookMapper.queryEndBookIdList();
}
private void sendNewstBook(Long bookId) {
try {
if (bookId >= 0) {
//List<String> idList = queryEndBookIdList();
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.TEXT_PLAIN);
//headers.add("User-Agent","curl/7.12.1");
headers.add("Host", "data.zz.baidu.com");
String reqBody = "";
reqBody += ("https://www.zinglizingli.xyz/book/" + bookId + ".html" + "\n");
//reqBody += ("http://www.zinglizingli.xyz/book/" + bookId + ".html" + "\n");
headers.setContentLength(reqBody.length());
HttpEntity<String> request = new HttpEntity<>(reqBody, headers);
System.out.println("推送数据:" + reqBody);
ResponseEntity<String> stringResponseEntity = restTemplate.postForEntity("http://data.zz.baidu.com/urls?site=www.zinglizingli.xyz&token=IuK7oVrPKe3U606x", request, String.class);
System.out.println("推送URL结果code:" + stringResponseEntity.getStatusCode().value() + ",body:" + stringResponseEntity.getBody());
Thread.sleep(1000 * 3);
//reqBody += ("http://www.zinglizingli.xyz/book/" + bookId + ".html" + "\n");
System.out.println("推送数据:" + reqBody);
stringResponseEntity = restTemplate.postForEntity("http://data.zz.baidu.com/urls?appid=1643715155923937&token=fkEcTlId6Cf21Sz3&type=batch", request, String.class);
System.out.println("推送URL结果code:" + stringResponseEntity.getStatusCode().value() + ",body:" + stringResponseEntity.getBody());
}
} catch (InterruptedException e) {
log.info(e.getMessage(), e);
}
}
private void sendNewstIndex(BookIndex bookIndex) {
try {
if (bookIndex != null) {
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.TEXT_PLAIN);
headers.add("Host", "data.zz.baidu.com");
String reqBody = "";
//目录只推送最新一条
reqBody += ("https://www.zinglizingli.xyz/book/" +
bookIndex.getBookId() + "/" +
bookIndex.getIndexNum() + ".html" + "\n");
headers.setContentLength(reqBody.length());
HttpEntity<String> request = new HttpEntity<>(reqBody, headers);
System.out.println("推送数据:" + reqBody);
ResponseEntity<String> stringResponseEntity = restTemplate.
postForEntity("http://data.zz.baidu.com/urls?" +
"site=www.zinglizingli.xyz&token=IuK7oVrPKe3U606x"
, request, String.class);
System.out.println("推送URL结果code:" + stringResponseEntity.getStatusCode().value() + ",body:" + stringResponseEntity.getBody());
Thread.sleep(1000 * 3);
//reqBody += ("http://www.zinglizingli.xyz/book/" + index.getBookId() + "/" + index.getIndexNum() + ".html" + "\n");
System.out.println("推送数据:" + reqBody);
stringResponseEntity = restTemplate.postForEntity("http://data.zz.baidu.com/urls?appid=1643715155923937&token=fkEcTlId6Cf21Sz3&type=batch", request, String.class);
System.out.println("推送URL结果code:" + stringResponseEntity.getStatusCode().value() + ",body:" + stringResponseEntity.getBody());
}
} catch (InterruptedException e) {
log.info(e.getMessage(), e);
}
}
public List<Integer> queryPreAndNextIndexNum(Long bookId, Integer indexNum) {
List<Integer> result = new ArrayList<>();
BookIndexExample example = new BookIndexExample();
example.createCriteria().andBookIdEqualTo(bookId).andIndexNumGreaterThan(indexNum);
example.setOrderByClause("index_num asc");
List<BookIndex> bookIndices = bookIndexMapper.selectByExample(example);
if (bookIndices.size() > 0) {
result.add(bookIndices.get(0).getIndexNum());
} else {
result.add(indexNum);
}
example = new BookIndexExample();
example.createCriteria().andBookIdEqualTo(bookId).andIndexNumLessThan(indexNum);
example.setOrderByClause("index_num DESC");
bookIndices = bookIndexMapper.selectByExample(example);
if (bookIndices.size() > 0) {
result.add(bookIndices.get(0).getIndexNum());
} else {
result.add(indexNum);
}
return result;
}
/**
* 查询推荐书籍数据
* */
public List<Book> queryRecBooks(List<Map<String, String>> configMap) {
return bookMapper.queryRecBooks(configMap);
}
}

View File

@ -0,0 +1,113 @@
package xyz.zinglizingli.books.service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.io.UnsupportedEncodingException;
@Service
public class MailService {
private final Logger logger = LoggerFactory.getLogger(MailService.class);
@Value("${spring.mail.username}")
//使用@Value注入application.properties中指定的用户名
private String from;
String nickName = "精品小说楼";
@Autowired
//用于发送文件
private JavaMailSender mailSender;
public void sendSimpleMail(String to, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(to);//收信人
message.setSubject(subject);//主题
message.setText(content);//内容
message.setFrom(from);//发信人
mailSender.send(message);
}
public void sendHtmlMail(String to, String subject, String content){
logger.info("发送HTML邮件开始{},{},{}", to, subject, content);
//使用MimeMessageMIME协议
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper;
//MimeMessageHelper帮助我们设置更丰富的内容
try {
helper = new MimeMessageHelper(message, true);
helper.setFrom(new InternetAddress(from, nickName, "UTF-8"));
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);//true代表支持html
mailSender.send(message);
logger.info("发送HTMLto"+to+"邮件成功");
} catch (Exception e) {
logger.error("发送HTML邮件失败", e);
}
}
public void sendAttachmentMail(String to, String subject, String content, String filePath) {
logger.info("发送带附件邮件开始:{},{},{},{}", to, subject, content, filePath);
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper;
try {
helper = new MimeMessageHelper(message, true);
//true代表支持多组件如附件图片等
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = file.getFilename();
helper.addAttachment(fileName, file);//添加附件,可多次调用该方法添加多个附件
mailSender.send(message);
logger.info("发送带附件邮件成功");
} catch (MessagingException e) {
logger.error("发送带附件邮件失败", e);
}
}
public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId) {
logger.info("发送带图片邮件开始:{},{},{},{},{}", to, subject, content, rscPath, rscId);
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper;
try {
helper = new MimeMessageHelper(message, true);
helper.setFrom(new InternetAddress(from, nickName, "UTF-8"));
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
FileSystemResource res = new FileSystemResource(new File(rscPath));
helper.addInline(rscId, res);//重复使用添加多个图片
mailSender.send(message);
logger.info("发送带图片邮件成功");
} catch (Exception e) {
logger.error("发送带图片邮件失败", e);
}
}
}

View File

@ -0,0 +1,86 @@
package xyz.zinglizingli.books.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import xyz.zinglizingli.books.mapper.UserMapper;
import xyz.zinglizingli.books.mapper.UserRefBookMapper;
import xyz.zinglizingli.books.po.User;
import xyz.zinglizingli.books.po.UserExample;
import xyz.zinglizingli.books.po.UserRefBook;
import xyz.zinglizingli.books.po.UserRefBookExample;
import xyz.zinglizingli.books.util.MD5Util;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
@Autowired
private UserRefBookMapper userRefBookMapper;
public boolean isExistLoginName(String loginName) {
UserExample example = new UserExample();
example.createCriteria().andLoginNameEqualTo(loginName);
return userMapper.countByExample(example)>0?true:false;
}
public void regist(User user) {
user.setPassword(MD5Util.MD5Encode(user.getPassword(),"utf-8"));
userMapper.insertSelective(user);
}
public void login(User user) {
UserExample example = new UserExample();
example.createCriteria().andLoginNameEqualTo(user.getLoginName())
.andPasswordEqualTo(MD5Util.MD5Encode(user.getPassword(),"utf-8"));
List<User> users = userMapper.selectByExample(example);
if(users.size() > 0){
user.setId(users.get(0).getId());
}else {
user.setId(null);
}
}
public void addToCollect(Long bookId, long userId) {
UserRefBook userRefBook = new UserRefBook();
userRefBook.setBookId(bookId);
userRefBook.setUserId(userId);
UserRefBookExample example = new UserRefBookExample();
example.createCriteria().andBookIdEqualTo(bookId).andUserIdEqualTo(userId);
userRefBookMapper.deleteByExample(example);
userRefBookMapper.insertSelective(userRefBook);
}
public boolean isCollect(Long bookId, long userId) {
UserRefBookExample example = new UserRefBookExample();
example.createCriteria().andBookIdEqualTo(bookId).andUserIdEqualTo(userId);
return userRefBookMapper.countByExample(example)>0?true:false;
}
public void cancelToCollect(Long bookId, long userId) {
UserRefBookExample example = new UserRefBookExample();
example.createCriteria().andBookIdEqualTo(bookId).andUserIdEqualTo(userId);
userRefBookMapper.deleteByExample(example);
}
public void collectOrCancelBook(Long userid, Long bookId) {
boolean collect = isCollect(bookId, userid);
if(collect){
cancelToCollect(bookId, userid);;
}else{
addToCollect(bookId, userid);
}
}
}