mirror of
https://github.com/201206030/novel-plus.git
synced 2025-06-24 04:46:37 +00:00
作家专区新增稿费收入查询(订阅明细+稿费汇总)
This commit is contained in:
@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author 11797
|
||||
@ -103,7 +104,7 @@ public class AuthorController extends BaseController{
|
||||
* 发布章节内容
|
||||
* */
|
||||
@PostMapping("addBookContent")
|
||||
public ResultBean addBookContent(Long bookId,String indexName,String content,HttpServletRequest request){
|
||||
public ResultBean addBookContent(Long bookId,String indexName,String content,Byte isVip,HttpServletRequest request){
|
||||
//查询作家信息
|
||||
Author author = authorService.queryAuthor(getUserDetails(request).getId());
|
||||
|
||||
@ -116,11 +117,40 @@ public class AuthorController extends BaseController{
|
||||
content = content.replaceAll("\\n","<br>")
|
||||
.replaceAll("\\s"," ");
|
||||
//发布章节内容
|
||||
bookService.addBookContent(bookId,indexName,content,author.getId());
|
||||
bookService.addBookContent(bookId,indexName,content,isVip,author.getId());
|
||||
|
||||
return ResultBean.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 作家日收入统计数据分页列表查询
|
||||
* */
|
||||
@PostMapping("listIncomeDailyByPage")
|
||||
public ResultBean listIncomeDailyByPage(@RequestParam(value = "curr", defaultValue = "1") int page,
|
||||
@RequestParam(value = "limit", defaultValue = "10") int pageSize ,
|
||||
@RequestParam(value = "bookId", defaultValue = "0") Long bookId,
|
||||
@RequestParam(value = "startTime",defaultValue = "2020-05-01") Date startTime,
|
||||
@RequestParam(value = "endTime",defaultValue = "2030-01-01") Date endTime,
|
||||
HttpServletRequest request){
|
||||
|
||||
return ResultBean.ok(new PageInfo<>(authorService.listIncomeDailyByPage(page,pageSize,getUserDetails(request).getId(),bookId,startTime,endTime)
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 作家月收入统计数据分页列表查询
|
||||
* */
|
||||
@PostMapping("listIncomeMonthByPage")
|
||||
public ResultBean listIncomeMonthByPage(@RequestParam(value = "curr", defaultValue = "1") int page,
|
||||
@RequestParam(value = "limit", defaultValue = "10") int pageSize ,
|
||||
@RequestParam(value = "bookId", defaultValue = "0") Long bookId,
|
||||
HttpServletRequest request){
|
||||
|
||||
return ResultBean.ok(new PageInfo<>(authorService.listIncomeMonthByPage(page,pageSize,getUserDetails(request).getId(),bookId)
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,24 @@
|
||||
package com.java2nb.novel.core.config;
|
||||
|
||||
import lombok.Data;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 作家收入配置
|
||||
* @author cd
|
||||
*/
|
||||
@Component
|
||||
@Data
|
||||
@ConfigurationProperties(prefix = "author.income")
|
||||
public class AuthorIncomeConfig {
|
||||
|
||||
private BigDecimal taxRate;
|
||||
|
||||
private BigDecimal shareProportion;
|
||||
|
||||
private BigDecimal exchangeProportion;
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package com.java2nb.novel.core.config;
|
||||
|
||||
import com.java2nb.novel.core.converter.DateConverter;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.format.FormatterRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
|
||||
|
||||
|
||||
/**
|
||||
* @author xiongxiaoyang
|
||||
*/
|
||||
@Configuration
|
||||
public class WebMvcConfig extends WebMvcConfigurerAdapter {
|
||||
@Override
|
||||
public void addFormatters(FormatterRegistry registry) {
|
||||
registry.addConverter(new DateConverter());
|
||||
}
|
||||
}
|
@ -0,0 +1,142 @@
|
||||
package com.java2nb.novel.core.schedule;
|
||||
|
||||
|
||||
import com.java2nb.novel.core.config.AuthorIncomeConfig;
|
||||
import com.java2nb.novel.core.utils.DateUtil;
|
||||
import com.java2nb.novel.entity.Author;
|
||||
import com.java2nb.novel.entity.AuthorIncomeDetail;
|
||||
import com.java2nb.novel.entity.Book;
|
||||
import com.java2nb.novel.service.AuthorService;
|
||||
import com.java2nb.novel.service.BookService;
|
||||
import com.java2nb.novel.service.UserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 作家日收入统计任务
|
||||
*
|
||||
* @author cd
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class DailyIncomeStaSchedule {
|
||||
|
||||
private final AuthorService authorService;
|
||||
|
||||
private final UserService userService;
|
||||
|
||||
private final BookService bookService;
|
||||
|
||||
|
||||
/**
|
||||
* 每天凌晨0点统计上一天数据
|
||||
*/
|
||||
@Scheduled(cron = "0 0 0 * * ?")
|
||||
public void statistics() {
|
||||
|
||||
//获取昨天的日期时间
|
||||
Date yesterday = DateUtil.getYesterday();
|
||||
//获取昨天的开始时间
|
||||
Date startTime = DateUtil.getDateStartTime(yesterday);
|
||||
//获取昨天的结束时间
|
||||
Date endTime = DateUtil.getDateEndTime(yesterday);
|
||||
|
||||
//每次查询的作家数量
|
||||
int needAuthorNumber = 10;
|
||||
//查询出来的真实作家数量
|
||||
int realAuthorNumber;
|
||||
//每次查询最大申请时间
|
||||
Date maxAuthorCreateTime = new Date();
|
||||
do {
|
||||
//1.查询作家列表
|
||||
List<Author> authors = authorService.queryAuthorList(needAuthorNumber, maxAuthorCreateTime);
|
||||
realAuthorNumber = authors.size();
|
||||
for (Author author : authors) {
|
||||
maxAuthorCreateTime = author.getCreateTime();
|
||||
Long authorId = author.getId();
|
||||
Long userId = author.getUserId();
|
||||
//2.查询作家作品
|
||||
List<Book> books = bookService.queryBookList(authorId);
|
||||
|
||||
int buyTotalMember = 0;
|
||||
int buyTotalCount = 0;
|
||||
int buyTotalAccount = 0;
|
||||
List<Long> bookIds = new ArrayList<>(books.size());
|
||||
for (Book book : books) {
|
||||
|
||||
Long bookId = book.getId();
|
||||
|
||||
//3.查询该作家作品昨日的订阅人数
|
||||
int buyMember = userService.queryBuyMember(bookId, startTime, endTime);
|
||||
|
||||
int buyCount = 0;
|
||||
|
||||
int buyAccount = 0;
|
||||
|
||||
|
||||
if (buyMember > 0) {
|
||||
//4.查询该作家作品昨日的订阅次数
|
||||
buyCount = userService.queryBuyCount(bookId, startTime, endTime);
|
||||
//5.查询该作家作品昨日的订阅总额
|
||||
buyAccount = userService.queryBuyAccount(bookId, startTime, endTime);
|
||||
}
|
||||
|
||||
//6.判断该作家作品昨日收入数据是否统计入库
|
||||
boolean isStatistics = authorService.queryIsStatisticsDaily(bookId, yesterday);
|
||||
if (!isStatistics) {
|
||||
//7.该作家作品昨日收入数据未统计入库,分作品统计数据入库
|
||||
AuthorIncomeDetail authorIncomeDetail = new AuthorIncomeDetail();
|
||||
authorIncomeDetail.setAuthorId(authorId);
|
||||
authorIncomeDetail.setUserId(userId);
|
||||
authorIncomeDetail.setBookId(bookId);
|
||||
authorIncomeDetail.setIncomeDate(yesterday);
|
||||
authorIncomeDetail.setIncomeNumber(buyMember);
|
||||
authorIncomeDetail.setIncomeCount(buyCount);
|
||||
authorIncomeDetail.setIncomeAccount(buyAccount);
|
||||
authorIncomeDetail.setCreateTime(new Date());
|
||||
authorService.saveDailyIncomeSta(authorIncomeDetail);
|
||||
}
|
||||
|
||||
|
||||
buyTotalCount += buyCount;
|
||||
buyTotalAccount += buyAccount;
|
||||
bookIds.add(bookId);
|
||||
|
||||
}
|
||||
|
||||
//8.判断该作家所有作品昨日收入数据是否统计入库
|
||||
boolean isStatistics = authorService.queryIsStatisticsDaily(authorId,0L, yesterday);
|
||||
if (!isStatistics) {
|
||||
if (buyTotalCount > 0) {
|
||||
//总订阅次数大于0,则订阅人数也大于0
|
||||
buyTotalMember = userService.queryBuyTotalMember(bookIds, startTime, endTime);
|
||||
}
|
||||
|
||||
//9.作家所有作品昨日收入数据统计入库
|
||||
AuthorIncomeDetail authorIncomeAllDetail = new AuthorIncomeDetail();
|
||||
authorIncomeAllDetail.setAuthorId(authorId);
|
||||
authorIncomeAllDetail.setUserId(userId);
|
||||
authorIncomeAllDetail.setBookId(0L);
|
||||
authorIncomeAllDetail.setIncomeDate(yesterday);
|
||||
authorIncomeAllDetail.setIncomeNumber(buyTotalMember);
|
||||
authorIncomeAllDetail.setIncomeCount(buyTotalCount);
|
||||
authorIncomeAllDetail.setIncomeAccount(buyTotalAccount);
|
||||
authorIncomeAllDetail.setCreateTime(new Date());
|
||||
authorService.saveDailyIncomeSta(authorIncomeAllDetail);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} while (needAuthorNumber == realAuthorNumber);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,129 @@
|
||||
package com.java2nb.novel.core.schedule;
|
||||
|
||||
|
||||
import com.java2nb.novel.core.config.AuthorIncomeConfig;
|
||||
import com.java2nb.novel.core.utils.DateUtil;
|
||||
import com.java2nb.novel.entity.*;
|
||||
import com.java2nb.novel.service.AuthorService;
|
||||
import com.java2nb.novel.service.BookService;
|
||||
import com.java2nb.novel.service.UserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 作家日收入统计任务
|
||||
*
|
||||
* @author cd
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class MonthIncomeStaSchedule {
|
||||
|
||||
private final AuthorService authorService;
|
||||
|
||||
private final BookService bookService;
|
||||
|
||||
private final AuthorIncomeConfig authorIncomeConfig;
|
||||
|
||||
/**
|
||||
* 每个月1号凌晨2点统计上个月数据
|
||||
*/
|
||||
@Scheduled(cron = "0 0 2 1 * ?")
|
||||
public void statistics() {
|
||||
|
||||
//获取上个月的开始时间和结束时间
|
||||
Date startTime = DateUtil.getLastMonthStartTime();
|
||||
Date endTime = DateUtil.getLastMonthEndTime();
|
||||
|
||||
//每次查询的作家数量
|
||||
int needAuthorNumber = 10;
|
||||
//查询出来的真实作家数量
|
||||
int realAuthorNumber;
|
||||
//每次查询最大申请时间
|
||||
Date maxAuthorCreateTime = new Date();
|
||||
do {
|
||||
//1.查询作家列表
|
||||
List<Author> authors = authorService.queryAuthorList(needAuthorNumber, maxAuthorCreateTime);
|
||||
realAuthorNumber = authors.size();
|
||||
for (Author author : authors) {
|
||||
maxAuthorCreateTime = author.getCreateTime();
|
||||
Long authorId = author.getId();
|
||||
Long userId = author.getUserId();
|
||||
//2.查询作家作品
|
||||
List<Book> books = bookService.queryBookList(authorId);
|
||||
|
||||
Long totalPreTaxIncome = 0L;
|
||||
Long totalAfterTaxIncome = 0L;
|
||||
for (Book book : books) {
|
||||
|
||||
Long bookId = book.getId();
|
||||
|
||||
|
||||
//3.月收入数据未统计入库,分作品统计数据入库
|
||||
Long monthIncome = authorService.queryTotalAccount(userId, bookId, startTime, endTime);
|
||||
|
||||
BigDecimal monthIncomeShare = new BigDecimal(monthIncome)
|
||||
.multiply(authorIncomeConfig.getShareProportion());
|
||||
Long preTaxIncome = monthIncomeShare
|
||||
.multiply(authorIncomeConfig.getExchangeProportion())
|
||||
.multiply(new BigDecimal(100))
|
||||
.longValue();
|
||||
|
||||
totalPreTaxIncome += preTaxIncome;
|
||||
|
||||
Long afterTaxIncome = monthIncomeShare
|
||||
.multiply(authorIncomeConfig.getTaxRate())
|
||||
.multiply(authorIncomeConfig.getExchangeProportion())
|
||||
.multiply(new BigDecimal(100))
|
||||
.longValue();
|
||||
|
||||
totalAfterTaxIncome += afterTaxIncome;
|
||||
|
||||
//4.查询月收入统计是否入库
|
||||
if (monthIncome > 0 && !authorService.queryIsStatisticsMonth(bookId, endTime)) {
|
||||
AuthorIncome authorIncome = new AuthorIncome();
|
||||
authorIncome.setAuthorId(authorId);
|
||||
authorIncome.setUserId(userId);
|
||||
authorIncome.setBookId(bookId);
|
||||
authorIncome.setPreTaxIncome(preTaxIncome);
|
||||
authorIncome.setAfterTaxIncome(afterTaxIncome);
|
||||
authorIncome.setIncomeMonth(endTime);
|
||||
authorIncome.setCreateTime(new Date());
|
||||
|
||||
authorService.saveAuthorIncomeSta(authorIncome);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (totalPreTaxIncome > 0 && !authorService.queryIsStatisticsMonth(0L, endTime)) {
|
||||
|
||||
AuthorIncome authorIncome = new AuthorIncome();
|
||||
authorIncome.setAuthorId(authorId);
|
||||
authorIncome.setUserId(userId);
|
||||
authorIncome.setBookId(0L);
|
||||
authorIncome.setPreTaxIncome(totalPreTaxIncome);
|
||||
authorIncome.setAfterTaxIncome(totalAfterTaxIncome);
|
||||
authorIncome.setIncomeMonth(endTime);
|
||||
authorIncome.setCreateTime(new Date());
|
||||
|
||||
authorService.saveAuthorIncomeSta(authorIncome);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
} while (needAuthorNumber == realAuthorNumber);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -2,8 +2,11 @@ package com.java2nb.novel.service;
|
||||
|
||||
|
||||
import com.java2nb.novel.entity.Author;
|
||||
import com.java2nb.novel.entity.AuthorIncome;
|
||||
import com.java2nb.novel.entity.AuthorIncomeDetail;
|
||||
import com.java2nb.novel.entity.FriendLink;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -39,4 +42,87 @@ public interface AuthorService {
|
||||
* @return 作家对象
|
||||
* */
|
||||
Author queryAuthor(Long userId);
|
||||
|
||||
/**
|
||||
* 查询作家列表
|
||||
* @return 作家列表
|
||||
* @param limit 查询条数
|
||||
* @param maxAuthorCreateTime 最大申请时间
|
||||
*/
|
||||
List<Author> queryAuthorList(int limit, Date maxAuthorCreateTime);
|
||||
|
||||
/**
|
||||
* 查询收入日统计是否入库
|
||||
* @param bookId 作品ID
|
||||
* @param date 收入时间
|
||||
* @return true:已入库,false:未入库
|
||||
*/
|
||||
boolean queryIsStatisticsDaily(Long bookId, Date date);
|
||||
|
||||
|
||||
/**
|
||||
* 保存日收入统计(按作品)
|
||||
* @param authorIncomeDetail 收入详情
|
||||
* */
|
||||
void saveDailyIncomeSta(AuthorIncomeDetail authorIncomeDetail);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 查询月收入统计是否入库
|
||||
* @param bookId 作品ID
|
||||
* @param incomeDate 收入时间
|
||||
* @return true:已入库,false:未入库
|
||||
* */
|
||||
boolean queryIsStatisticsMonth(Long bookId, Date incomeDate);
|
||||
|
||||
/**
|
||||
* 查询时间段内总订阅额
|
||||
*
|
||||
* @param userId
|
||||
* @param bookId 作品ID
|
||||
* @param startTime 开始时间
|
||||
* @param endTime 结束时间
|
||||
* @return 订阅额(屋币)
|
||||
* */
|
||||
Long queryTotalAccount(Long userId, Long bookId, Date startTime, Date endTime);
|
||||
|
||||
|
||||
/**
|
||||
* 保存月收入统计
|
||||
* @param authorIncome 收入详情
|
||||
* */
|
||||
void saveAuthorIncomeSta(AuthorIncome authorIncome);
|
||||
|
||||
/**
|
||||
* 查询收入日统计是否入库
|
||||
* @param authorId 作家ID
|
||||
* @param bookId 作品ID
|
||||
* @param date 收入时间
|
||||
* @return true:已入库,false:未入库
|
||||
*/
|
||||
boolean queryIsStatisticsDaily(Long authorId, Long bookId, Date date);
|
||||
|
||||
/**
|
||||
*作家日收入统计数据分页列表查询
|
||||
* @param userId
|
||||
* @param page 页码
|
||||
* @param pageSize 分页大小
|
||||
* @param bookId 小说ID
|
||||
* @param startTime 开始时间
|
||||
* @param endTime 结束时间
|
||||
* @return 日收入统计数据列表
|
||||
*/
|
||||
List<AuthorIncomeDetail> listIncomeDailyByPage(int page, int pageSize, Long userId, Long bookId, Date startTime, Date endTime);
|
||||
|
||||
|
||||
/**
|
||||
* 作家月收入统计数据分页列表查询
|
||||
* @param page 页码
|
||||
* @param pageSize 分页大小
|
||||
* @param userId 用户ID
|
||||
* @param bookId 小说ID
|
||||
* @return
|
||||
* */
|
||||
List<AuthorIncome> listIncomeMonthByPage(int page, int pageSize, Long userId, Long bookId);
|
||||
}
|
||||
|
@ -225,9 +225,9 @@ public interface BookService {
|
||||
* @param bookId 小说ID
|
||||
* @param indexName 章节名
|
||||
* @param content 章节内容
|
||||
* @param authorId 作者ID
|
||||
* */
|
||||
void addBookContent(Long bookId, String indexName, String content, Long authorId);
|
||||
* @param isVip 是否收费
|
||||
* @param authorId 作者ID */
|
||||
void addBookContent(Long bookId, String indexName, String content, Byte isVip, Long authorId);
|
||||
|
||||
|
||||
/**
|
||||
@ -237,4 +237,11 @@ public interface BookService {
|
||||
* @return 书籍列表
|
||||
* */
|
||||
List<Book> queryBookByUpdateTimeByPage(Date startDate, int limit);
|
||||
|
||||
/**
|
||||
* 查询作品列表
|
||||
* @param authorId 作家ID
|
||||
* @return 作品列表
|
||||
*/
|
||||
List<Book> queryBookList(Long authorId);
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import com.java2nb.novel.vo.BookShelfVO;
|
||||
import com.java2nb.novel.entity.User;
|
||||
import com.java2nb.novel.vo.UserFeedbackVO;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -138,4 +139,40 @@ public interface UserService {
|
||||
* @param buyRecord 购买信息
|
||||
* */
|
||||
void buyBookIndex(Long userId, UserBuyRecord buyRecord);
|
||||
|
||||
/**
|
||||
* 查询作品时间段内的订阅人数
|
||||
* @param bookId 作品ID
|
||||
* @param startTime 开始时间
|
||||
* @param endTime 结束时间
|
||||
* @return 订阅人数
|
||||
*/
|
||||
int queryBuyMember(Long bookId, Date startTime, Date endTime);
|
||||
|
||||
/**
|
||||
* 查询作品时间段内的订阅次数
|
||||
* @param bookId 作品ID
|
||||
* @param startTime 开始时间
|
||||
* @param endTime 结束时间
|
||||
* @return 订阅次数
|
||||
*/
|
||||
int queryBuyCount(Long bookId, Date startTime, Date endTime);
|
||||
|
||||
/**
|
||||
* 查询作品时间段内的订阅总额(屋币)
|
||||
* @param bookId 作品ID
|
||||
* @param startTime 开始时间
|
||||
* @param endTime 结束时间
|
||||
* @return 订阅总额(屋币)
|
||||
*/
|
||||
int queryBuyAccount(Long bookId, Date startTime, Date endTime);
|
||||
|
||||
/**
|
||||
* 查询作者时间段内的订阅人数
|
||||
* @param bookIds z作者的所有作品ID
|
||||
* @param startTime 开始时间
|
||||
* @param endTime 结束时间
|
||||
* @return 订阅人数
|
||||
*/
|
||||
int queryBuyTotalMember(List<Long> bookIds, Date startTime, Date endTime);
|
||||
}
|
||||
|
@ -1,10 +1,13 @@
|
||||
package com.java2nb.novel.service.impl;
|
||||
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.java2nb.novel.core.cache.CacheKey;
|
||||
import com.java2nb.novel.core.cache.CacheService;
|
||||
import com.java2nb.novel.core.enums.ResponseStatus;
|
||||
import com.java2nb.novel.core.exception.BusinessException;
|
||||
import com.java2nb.novel.entity.Author;
|
||||
import com.java2nb.novel.entity.AuthorIncome;
|
||||
import com.java2nb.novel.entity.AuthorIncomeDetail;
|
||||
import com.java2nb.novel.entity.FriendLink;
|
||||
import com.java2nb.novel.mapper.*;
|
||||
import com.java2nb.novel.service.AuthorService;
|
||||
@ -38,6 +41,11 @@ public class AuthorServiceImpl implements AuthorService {
|
||||
|
||||
private final AuthorCodeMapper authorCodeMapper;
|
||||
|
||||
private final AuthorIncomeDetailMapper authorIncomeDetailMapper;
|
||||
|
||||
|
||||
private final AuthorIncomeMapper authorIncomeMapper;
|
||||
|
||||
|
||||
@Override
|
||||
public Boolean checkPenName(String penName) {
|
||||
@ -89,4 +97,108 @@ public class AuthorServiceImpl implements AuthorService {
|
||||
.build()
|
||||
.render(RenderingStrategies.MYBATIS3)).get(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Author> queryAuthorList(int needAuthorNumber, Date maxAuthorCreateTime) {
|
||||
return authorMapper.selectMany(select(AuthorDynamicSqlSupport.id, AuthorDynamicSqlSupport.userId)
|
||||
.from(AuthorDynamicSqlSupport.author)
|
||||
.where(AuthorDynamicSqlSupport.createTime, isLessThan(maxAuthorCreateTime))
|
||||
.orderBy(AuthorDynamicSqlSupport.createTime.descending())
|
||||
.limit(needAuthorNumber)
|
||||
.build()
|
||||
.render(RenderingStrategies.MYBATIS3));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean queryIsStatisticsDaily(Long bookId, Date date) {
|
||||
|
||||
return authorIncomeDetailMapper.selectMany(select(AuthorIncomeDetailDynamicSqlSupport.id)
|
||||
.from(AuthorIncomeDetailDynamicSqlSupport.authorIncomeDetail)
|
||||
.where(AuthorIncomeDetailDynamicSqlSupport.bookId, isEqualTo(bookId))
|
||||
.and(AuthorIncomeDetailDynamicSqlSupport.incomeDate, isEqualTo(date))
|
||||
.build()
|
||||
.render(RenderingStrategies.MYBATIS3)).size() > 0;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveDailyIncomeSta(AuthorIncomeDetail authorIncomeDetail) {
|
||||
authorIncomeDetailMapper.insertSelective(authorIncomeDetail);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean queryIsStatisticsMonth(Long bookId, Date incomeDate) {
|
||||
return authorIncomeMapper.selectMany(select(AuthorIncomeDynamicSqlSupport.id)
|
||||
.from(AuthorIncomeDynamicSqlSupport.authorIncome)
|
||||
.where(AuthorIncomeDynamicSqlSupport.bookId, isEqualTo(bookId))
|
||||
.and(AuthorIncomeDynamicSqlSupport.incomeMonth, isEqualTo(incomeDate))
|
||||
.build()
|
||||
.render(RenderingStrategies.MYBATIS3)).size() > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long queryTotalAccount(Long userId, Long bookId, Date startTime, Date endTime) {
|
||||
|
||||
return authorIncomeDetailMapper.selectStatistic(select(sum(AuthorIncomeDetailDynamicSqlSupport.incomeAccount))
|
||||
.from(AuthorIncomeDetailDynamicSqlSupport.authorIncomeDetail)
|
||||
.where(AuthorIncomeDetailDynamicSqlSupport.userId, isEqualTo(userId))
|
||||
.and(AuthorIncomeDetailDynamicSqlSupport.bookId, isEqualTo(bookId))
|
||||
.and(AuthorIncomeDetailDynamicSqlSupport.incomeDate, isGreaterThanOrEqualTo(startTime))
|
||||
.and(AuthorIncomeDetailDynamicSqlSupport.incomeDate, isLessThanOrEqualTo(endTime))
|
||||
.build()
|
||||
.render(RenderingStrategies.MYBATIS3));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void saveAuthorIncomeSta(AuthorIncome authorIncome) {
|
||||
authorIncomeMapper.insertSelective(authorIncome);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean queryIsStatisticsDaily(Long authorId, Long bookId, Date date) {
|
||||
return authorIncomeDetailMapper.selectMany(select(AuthorIncomeDetailDynamicSqlSupport.id)
|
||||
.from(AuthorIncomeDetailDynamicSqlSupport.authorIncomeDetail)
|
||||
.where(AuthorIncomeDetailDynamicSqlSupport.authorId, isEqualTo(authorId))
|
||||
.and(AuthorIncomeDetailDynamicSqlSupport.bookId, isEqualTo(bookId))
|
||||
.and(AuthorIncomeDetailDynamicSqlSupport.incomeDate, isEqualTo(date))
|
||||
.build()
|
||||
.render(RenderingStrategies.MYBATIS3)).size() > 0;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<AuthorIncomeDetail> listIncomeDailyByPage(int page, int pageSize, Long userId, Long bookId, Date startTime, Date endTime) {
|
||||
PageHelper.startPage(page, pageSize);
|
||||
return authorIncomeDetailMapper.selectMany(
|
||||
select(AuthorIncomeDetailDynamicSqlSupport.incomeDate, AuthorIncomeDetailDynamicSqlSupport.incomeAccount
|
||||
, AuthorIncomeDetailDynamicSqlSupport.incomeCount, AuthorIncomeDetailDynamicSqlSupport.incomeNumber)
|
||||
.from(AuthorIncomeDetailDynamicSqlSupport.authorIncomeDetail)
|
||||
.where(AuthorIncomeDetailDynamicSqlSupport.userId, isEqualTo(userId))
|
||||
.and(AuthorIncomeDetailDynamicSqlSupport.bookId, isEqualTo(bookId))
|
||||
.and(AuthorIncomeDetailDynamicSqlSupport.incomeDate, isGreaterThanOrEqualTo(startTime))
|
||||
.and(AuthorIncomeDetailDynamicSqlSupport.incomeDate, isLessThanOrEqualTo(endTime))
|
||||
.orderBy(AuthorIncomeDetailDynamicSqlSupport.incomeDate.descending())
|
||||
.build()
|
||||
.render(RenderingStrategies.MYBATIS3));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<AuthorIncome> listIncomeMonthByPage(int page, int pageSize, Long userId, Long bookId) {
|
||||
PageHelper.startPage(page, pageSize);
|
||||
return authorIncomeMapper.selectMany(select(AuthorIncomeDynamicSqlSupport.incomeMonth
|
||||
, AuthorIncomeDynamicSqlSupport.preTaxIncome
|
||||
, AuthorIncomeDynamicSqlSupport.afterTaxIncome
|
||||
, AuthorIncomeDynamicSqlSupport.payStatus
|
||||
, AuthorIncomeDynamicSqlSupport.confirmStatus)
|
||||
.from(AuthorIncomeDynamicSqlSupport.authorIncome)
|
||||
.where(AuthorIncomeDynamicSqlSupport.userId, isEqualTo(userId))
|
||||
.and(AuthorIncomeDynamicSqlSupport.bookId, isEqualTo(bookId))
|
||||
.orderBy(AuthorIncomeDynamicSqlSupport.incomeMonth.descending())
|
||||
.build()
|
||||
.render(RenderingStrategies.MYBATIS3));
|
||||
}
|
||||
}
|
||||
|
@ -531,13 +531,17 @@ public class BookServiceImpl implements BookService {
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void addBookContent(Long bookId, String indexName, String content, Long authorId) {
|
||||
public void addBookContent(Long bookId, String indexName, String content, Byte isVip, Long authorId) {
|
||||
|
||||
Book book = queryBookDetail(bookId);
|
||||
if (!authorId.equals(book.getAuthorId())) {
|
||||
//并不是更新自己的小说
|
||||
return;
|
||||
}
|
||||
if(book.getStatus() != 1){
|
||||
//小说未上架,不能设置VIP
|
||||
isVip = 0;
|
||||
}
|
||||
Long lastIndexId = new IdWorker().nextId();
|
||||
Date currentDate = new Date();
|
||||
int wordCount = content.length();
|
||||
@ -567,7 +571,7 @@ public class BookServiceImpl implements BookService {
|
||||
lastBookIndex.setIndexName(indexName);
|
||||
lastBookIndex.setIndexNum(indexNum);
|
||||
lastBookIndex.setBookId(bookId);
|
||||
lastBookIndex.setIsVip(book.getStatus());
|
||||
lastBookIndex.setIsVip(isVip);
|
||||
lastBookIndex.setCreateTime(currentDate);
|
||||
lastBookIndex.setUpdateTime(currentDate);
|
||||
bookIndexMapper.insertSelective(lastBookIndex);
|
||||
@ -594,5 +598,15 @@ public class BookServiceImpl implements BookService {
|
||||
.render(RenderingStrategies.MYBATIS3));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Book> queryBookList(Long authorId) {
|
||||
|
||||
return bookMapper.selectMany(select(id, bookName)
|
||||
.from(book)
|
||||
.where(BookDynamicSqlSupport.authorId,isEqualTo(authorId))
|
||||
.build()
|
||||
.render(RenderingStrategies.MYBATIS3));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -303,6 +303,51 @@ public class UserServiceImpl implements UserService {
|
||||
.render(RenderingStrategies.MYBATIS3));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queryBuyMember(Long bookId, Date startTime, Date endTime) {
|
||||
return userMapper.selectStatistic(select(countDistinct(UserBuyRecordDynamicSqlSupport.userId))
|
||||
.from(UserBuyRecordDynamicSqlSupport.userBuyRecord)
|
||||
.where(UserBuyRecordDynamicSqlSupport.bookId,isEqualTo(bookId))
|
||||
.and(UserBuyRecordDynamicSqlSupport.createTime,isGreaterThanOrEqualTo(startTime))
|
||||
.and(UserBuyRecordDynamicSqlSupport.createTime,isLessThanOrEqualTo(endTime))
|
||||
.build()
|
||||
.render(RenderingStrategies.MYBATIS3));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queryBuyCount(Long bookId, Date startTime, Date endTime) {
|
||||
return userMapper.selectStatistic(select(count(UserBuyRecordDynamicSqlSupport.id))
|
||||
.from(UserBuyRecordDynamicSqlSupport.userBuyRecord)
|
||||
.where(UserBuyRecordDynamicSqlSupport.bookId,isEqualTo(bookId))
|
||||
.and(UserBuyRecordDynamicSqlSupport.createTime,isGreaterThanOrEqualTo(startTime))
|
||||
.and(UserBuyRecordDynamicSqlSupport.createTime,isLessThanOrEqualTo(endTime))
|
||||
.build()
|
||||
.render(RenderingStrategies.MYBATIS3));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queryBuyAccount(Long bookId, Date startTime, Date endTime) {
|
||||
return userMapper.selectStatistic(select(sum(UserBuyRecordDynamicSqlSupport.buyAmount))
|
||||
.from(UserBuyRecordDynamicSqlSupport.userBuyRecord)
|
||||
.where(UserBuyRecordDynamicSqlSupport.bookId,isEqualTo(bookId))
|
||||
.and(UserBuyRecordDynamicSqlSupport.createTime,isGreaterThanOrEqualTo(startTime))
|
||||
.and(UserBuyRecordDynamicSqlSupport.createTime,isLessThanOrEqualTo(endTime))
|
||||
.build()
|
||||
.render(RenderingStrategies.MYBATIS3));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queryBuyTotalMember(List<Long> bookIds, Date startTime, Date endTime) {
|
||||
return userMapper.selectStatistic(select(countDistinct(UserBuyRecordDynamicSqlSupport.userId))
|
||||
.from(UserBuyRecordDynamicSqlSupport.userBuyRecord)
|
||||
.where(UserBuyRecordDynamicSqlSupport.bookId,isIn(bookIds))
|
||||
.and(UserBuyRecordDynamicSqlSupport.createTime,isGreaterThanOrEqualTo(startTime))
|
||||
.and(UserBuyRecordDynamicSqlSupport.createTime,isLessThanOrEqualTo(endTime))
|
||||
.build()
|
||||
.render(RenderingStrategies.MYBATIS3));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user