diff --git a/c:/var/java2nb/uploaded_files/2020/11/03/6c31f006-7252-4cac-a8fb-dbf7d26da4f8.png b/c:/var/java2nb/uploaded_files/2020/11/03/6c31f006-7252-4cac-a8fb-dbf7d26da4f8.png new file mode 100644 index 0000000..32d2d40 Binary files /dev/null and b/c:/var/java2nb/uploaded_files/2020/11/03/6c31f006-7252-4cac-a8fb-dbf7d26da4f8.png differ diff --git a/novel-common/src/main/java/com/java2nb/novel/core/converter/DateConverter.java b/novel-common/src/main/java/com/java2nb/novel/core/converter/DateConverter.java new file mode 100644 index 0000000..a15d65d --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/core/converter/DateConverter.java @@ -0,0 +1,62 @@ +package com.java2nb.novel.core.converter; + +import org.springframework.core.convert.converter.Converter; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * 表单形式的全局时间类型转换器 + * @author xiongxiaoyang + */ +public class DateConverter implements Converter { + + private static final List formats = new ArrayList<>(4); + + static { + formats.add("yyyy-MM"); + formats.add("yyyy-MM-dd"); + formats.add("yyyy-MM-dd HH:mm"); + formats.add("yyyy-MM-dd HH:mm:ss"); + } + + @Override + public Date convert(String source) { + String value = source.trim(); + if ("".equals(value)) { + return null; + } + if (source.matches("^\\d{4}-\\d{1,2}$")) { + return parseDate(source, formats.get(0)); + } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) { + return parseDate(source, formats.get(1)); + } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) { + return parseDate(source, formats.get(2)); + } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) { + return parseDate(source, formats.get(3)); + } else { + throw new IllegalArgumentException("Invalid boolean value '" + source + "'"); + } + } + + /** + * 格式化日期 + * + * @param dateStr String 字符型日期 + * @param format String 格式 + * @return Date 日期 + */ + private Date parseDate(String dateStr, String format) { + Date date = null; + try { + DateFormat dateFormat = new SimpleDateFormat(format); + date = dateFormat.parse(dateStr); + } catch (Exception e) { + e.printStackTrace(); + } + return date; + } +} diff --git a/novel-common/src/main/java/com/java2nb/novel/core/utils/DateUtil.java b/novel-common/src/main/java/com/java2nb/novel/core/utils/DateUtil.java new file mode 100644 index 0000000..c41bb36 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/core/utils/DateUtil.java @@ -0,0 +1,119 @@ +package com.java2nb.novel.core.utils; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.TimeZone; + +/** + * 日期工具 + * @author cd + */ +public class DateUtil { + + public static final String DATE_PATTERN = "yyyy-MM-dd"; + public static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; + public static final String TIME_PATTERN = "HH:mm:ss"; + + /** + * 获取昨天的日期时间 + * */ + public static Date getYesterday(){ + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE, -1); + return calendar.getTime(); + } + + /** + * 根据日期,获取当天开始时间 + * */ + public static Date getDateStartTime(Date date){ + Calendar calendar = new GregorianCalendar(); + calendar.setTime(date); + /* + * Calendar.HOUR_OF_DAY:是指获取24小时制的小时,取值范围:0-23; + * Calendar.HOUR:是指获取12小时制的小时,取值范围:0-12,凌晨和中午都是0,不是12; + * 需要配合Calendar.AM_PM使用; + * */ + calendar.set(Calendar.HOUR_OF_DAY,0); + calendar.set(Calendar.MINUTE,0); + calendar.set(Calendar.SECOND,0); + calendar.set(Calendar.MILLISECOND,0); + return calendar.getTime(); + } + + /** + * 根据日期,获取当天结束时间 + * */ + public static Date getDateEndTime(Date date){ + Calendar calendar = new GregorianCalendar(); + calendar.setTime(date); + calendar.set(Calendar.HOUR_OF_DAY,23); + calendar.set(Calendar.MINUTE,59); + calendar.set(Calendar.SECOND,59); + calendar.set(Calendar.MILLISECOND,999); + return calendar.getTime(); + } + + /** + * 获取上个月开始时间 + * + * @return + */ + public static Date getLastMonthStartTime(){ + // 获取当前日期 + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.YEAR, 0); + calendar.add(Calendar.MONTH, -1); + // 设置为1号,当前日期既为本月第一天 + calendar.set(Calendar.DAY_OF_MONTH, 1); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + + return calendar.getTime(); + } + + /** + * 获取上个月结束时间 + * + * @return + */ + public static Date getLastMonthEndTime(){ + // 获取当前日期 + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.YEAR, 0); + calendar.add(Calendar.MONTH, -1); + // 获取当前月最后一天 + calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + calendar.set(Calendar.MILLISECOND, 999); + + return calendar.getTime(); + } + + + /** + * 格式化日期 + * */ + public static String formatDate(Date date,String patten){ + + return new SimpleDateFormat(patten).format(date); + } + + + public static void main(String[] args) { + System.out.println(formatDate(getYesterday(),DATE_TIME_PATTERN)); + System.out.println(formatDate(getDateStartTime(getYesterday()),DATE_TIME_PATTERN)); + System.out.println(formatDate(getDateEndTime(getYesterday()),DATE_TIME_PATTERN)); + System.out.println(formatDate(getLastMonthStartTime(),DATE_TIME_PATTERN)); + System.out.println(formatDate(getLastMonthEndTime(),DATE_TIME_PATTERN)); + } + + + +} diff --git a/novel-common/src/main/java/com/java2nb/novel/entity/AuthorIncome.java b/novel-common/src/main/java/com/java2nb/novel/entity/AuthorIncome.java new file mode 100644 index 0000000..3310455 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/entity/AuthorIncome.java @@ -0,0 +1,152 @@ +package com.java2nb.novel.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.util.Date; +import javax.annotation.Generated; + +public class AuthorIncome { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long authorId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long bookId; + + @JsonFormat(pattern = "yyyy年MM月", timezone = "GMT+8") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date incomeMonth; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long preTaxIncome; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long afterTaxIncome; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte payStatus; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte confirmStatus; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String detail; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getAuthorId() { + return authorId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setAuthorId(Long authorId) { + this.authorId = authorId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getBookId() { + return bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getIncomeMonth() { + return incomeMonth; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIncomeMonth(Date incomeMonth) { + this.incomeMonth = incomeMonth; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getPreTaxIncome() { + return preTaxIncome; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPreTaxIncome(Long preTaxIncome) { + this.preTaxIncome = preTaxIncome; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getAfterTaxIncome() { + return afterTaxIncome; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setAfterTaxIncome(Long afterTaxIncome) { + this.afterTaxIncome = afterTaxIncome; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getPayStatus() { + return payStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPayStatus(Byte payStatus) { + this.payStatus = payStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getConfirmStatus() { + return confirmStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setConfirmStatus(Byte confirmStatus) { + this.confirmStatus = confirmStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getDetail() { + return detail; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setDetail(String detail) { + this.detail = detail == null ? null : detail.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/entity/AuthorIncomeDetail.java b/novel-common/src/main/java/com/java2nb/novel/entity/AuthorIncomeDetail.java new file mode 100644 index 0000000..e6a19ce --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/entity/AuthorIncomeDetail.java @@ -0,0 +1,126 @@ +package com.java2nb.novel.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.util.Date; +import javax.annotation.Generated; + +public class AuthorIncomeDetail { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long authorId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long bookId; + + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date incomeDate; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer incomeAccount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer incomeCount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer incomeNumber; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getAuthorId() { + return authorId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setAuthorId(Long authorId) { + this.authorId = authorId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getBookId() { + return bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getIncomeDate() { + return incomeDate; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIncomeDate(Date incomeDate) { + this.incomeDate = incomeDate; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getIncomeAccount() { + return incomeAccount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIncomeAccount(Integer incomeAccount) { + this.incomeAccount = incomeAccount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getIncomeCount() { + return incomeCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIncomeCount(Integer incomeCount) { + this.incomeCount = incomeCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getIncomeNumber() { + return incomeNumber; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIncomeNumber(Integer incomeNumber) { + this.incomeNumber = incomeNumber; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorIncomeDetailDynamicSqlSupport.java b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorIncomeDetailDynamicSqlSupport.java new file mode 100644 index 0000000..cca0bf3 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorIncomeDetailDynamicSqlSupport.java @@ -0,0 +1,64 @@ +package com.java2nb.novel.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class AuthorIncomeDetailDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final AuthorIncomeDetail authorIncomeDetail = new AuthorIncomeDetail(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = authorIncomeDetail.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = authorIncomeDetail.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn authorId = authorIncomeDetail.authorId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookId = authorIncomeDetail.bookId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn incomeDate = authorIncomeDetail.incomeDate; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn incomeAccount = authorIncomeDetail.incomeAccount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn incomeCount = authorIncomeDetail.incomeCount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn incomeNumber = authorIncomeDetail.incomeNumber; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = authorIncomeDetail.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class AuthorIncomeDetail extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn authorId = column("author_id", JDBCType.BIGINT); + + public final SqlColumn bookId = column("book_id", JDBCType.BIGINT); + + public final SqlColumn incomeDate = column("income_date", JDBCType.DATE); + + public final SqlColumn incomeAccount = column("income_account", JDBCType.INTEGER); + + public final SqlColumn incomeCount = column("income_count", JDBCType.INTEGER); + + public final SqlColumn incomeNumber = column("income_number", JDBCType.INTEGER); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public AuthorIncomeDetail() { + super("author_income_detail"); + } + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorIncomeDetailMapper.java b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorIncomeDetailMapper.java new file mode 100644 index 0000000..0815fa1 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorIncomeDetailMapper.java @@ -0,0 +1,222 @@ +package com.java2nb.novel.mapper; + +import static com.java2nb.novel.mapper.AuthorIncomeDetailDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.entity.AuthorIncomeDetail; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import javax.annotation.Generated; + +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.BasicColumn; +import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider; +import org.mybatis.dynamic.sql.select.CountDSLCompleter; +import org.mybatis.dynamic.sql.select.SelectDSLCompleter; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.UpdateDSLCompleter; +import org.mybatis.dynamic.sql.update.UpdateModel; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; +import org.mybatis.dynamic.sql.util.mybatis3.MyBatis3Utils; + +@Mapper +public interface AuthorIncomeDetailMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + BasicColumn[] selectList = BasicColumn.columnList(id, userId, authorId, bookId, incomeDate, incomeAccount, incomeCount, incomeNumber, createTime); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insertMultiple") + int insertMultiple(MultiRowInsertStatementProvider multipleInsertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("AuthorIncomeDetailResult") + Optional selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="AuthorIncomeDetailResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="author_id", property="authorId", jdbcType=JdbcType.BIGINT), + @Result(column="book_id", property="bookId", jdbcType=JdbcType.BIGINT), + @Result(column="income_date", property="incomeDate", jdbcType=JdbcType.DATE), + @Result(column="income_account", property="incomeAccount", jdbcType=JdbcType.INTEGER), + @Result(column="income_count", property="incomeCount", jdbcType=JdbcType.INTEGER), + @Result(column="income_number", property="incomeNumber", jdbcType=JdbcType.INTEGER), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default long count(CountDSLCompleter completer) { + return MyBatis3Utils.countFrom(this::count, authorIncomeDetail, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int delete(DeleteDSLCompleter completer) { + return MyBatis3Utils.deleteFrom(this::delete, authorIncomeDetail, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return delete(c -> + c.where(id, isEqualTo(id_)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(AuthorIncomeDetail record) { + return MyBatis3Utils.insert(this::insert, record, authorIncomeDetail, c -> + c.map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(authorId).toProperty("authorId") + .map(bookId).toProperty("bookId") + .map(incomeDate).toProperty("incomeDate") + .map(incomeAccount).toProperty("incomeAccount") + .map(incomeCount).toProperty("incomeCount") + .map(incomeNumber).toProperty("incomeNumber") + .map(createTime).toProperty("createTime") + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertMultiple(Collection records) { + return MyBatis3Utils.insertMultiple(this::insertMultiple, records, authorIncomeDetail, c -> + c.map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(authorId).toProperty("authorId") + .map(bookId).toProperty("bookId") + .map(incomeDate).toProperty("incomeDate") + .map(incomeAccount).toProperty("incomeAccount") + .map(incomeCount).toProperty("incomeCount") + .map(incomeNumber).toProperty("incomeNumber") + .map(createTime).toProperty("createTime") + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(AuthorIncomeDetail record) { + return MyBatis3Utils.insert(this::insert, record, authorIncomeDetail, c -> + c.map(id).toPropertyWhenPresent("id", record::getId) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(authorId).toPropertyWhenPresent("authorId", record::getAuthorId) + .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) + .map(incomeDate).toPropertyWhenPresent("incomeDate", record::getIncomeDate) + .map(incomeAccount).toPropertyWhenPresent("incomeAccount", record::getIncomeAccount) + .map(incomeCount).toPropertyWhenPresent("incomeCount", record::getIncomeCount) + .map(incomeNumber).toPropertyWhenPresent("incomeNumber", record::getIncomeNumber) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Optional selectOne(SelectDSLCompleter completer) { + return MyBatis3Utils.selectOne(this::selectOne, selectList, authorIncomeDetail, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default List select(SelectDSLCompleter completer) { + return MyBatis3Utils.selectList(this::selectMany, selectList, authorIncomeDetail, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default List selectDistinct(SelectDSLCompleter completer) { + return MyBatis3Utils.selectDistinct(this::selectMany, selectList, authorIncomeDetail, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Optional selectByPrimaryKey(Long id_) { + return selectOne(c -> + c.where(id, isEqualTo(id_)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int update(UpdateDSLCompleter completer) { + return MyBatis3Utils.update(this::update, authorIncomeDetail, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + static UpdateDSL updateAllColumns(AuthorIncomeDetail record, UpdateDSL dsl) { + return dsl.set(id).equalTo(record::getId) + .set(userId).equalTo(record::getUserId) + .set(authorId).equalTo(record::getAuthorId) + .set(bookId).equalTo(record::getBookId) + .set(incomeDate).equalTo(record::getIncomeDate) + .set(incomeAccount).equalTo(record::getIncomeAccount) + .set(incomeCount).equalTo(record::getIncomeCount) + .set(incomeNumber).equalTo(record::getIncomeNumber) + .set(createTime).equalTo(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + static UpdateDSL updateSelectiveColumns(AuthorIncomeDetail record, UpdateDSL dsl) { + return dsl.set(id).equalToWhenPresent(record::getId) + .set(userId).equalToWhenPresent(record::getUserId) + .set(authorId).equalToWhenPresent(record::getAuthorId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(incomeDate).equalToWhenPresent(record::getIncomeDate) + .set(incomeAccount).equalToWhenPresent(record::getIncomeAccount) + .set(incomeCount).equalToWhenPresent(record::getIncomeCount) + .set(incomeNumber).equalToWhenPresent(record::getIncomeNumber) + .set(createTime).equalToWhenPresent(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(AuthorIncomeDetail record) { + return update(c -> + c.set(userId).equalTo(record::getUserId) + .set(authorId).equalTo(record::getAuthorId) + .set(bookId).equalTo(record::getBookId) + .set(incomeDate).equalTo(record::getIncomeDate) + .set(incomeAccount).equalTo(record::getIncomeAccount) + .set(incomeCount).equalTo(record::getIncomeCount) + .set(incomeNumber).equalTo(record::getIncomeNumber) + .set(createTime).equalTo(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(AuthorIncomeDetail record) { + return update(c -> + c.set(userId).equalToWhenPresent(record::getUserId) + .set(authorId).equalToWhenPresent(record::getAuthorId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(incomeDate).equalToWhenPresent(record::getIncomeDate) + .set(incomeAccount).equalToWhenPresent(record::getIncomeAccount) + .set(incomeCount).equalToWhenPresent(record::getIncomeCount) + .set(incomeNumber).equalToWhenPresent(record::getIncomeNumber) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + ); + } + + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultType(value = Long.class) + Long selectStatistic(SelectStatementProvider selectStatement); +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorIncomeDynamicSqlSupport.java b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorIncomeDynamicSqlSupport.java new file mode 100644 index 0000000..8d46122 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorIncomeDynamicSqlSupport.java @@ -0,0 +1,74 @@ +package com.java2nb.novel.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class AuthorIncomeDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final AuthorIncome authorIncome = new AuthorIncome(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = authorIncome.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = authorIncome.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn authorId = authorIncome.authorId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookId = authorIncome.bookId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn incomeMonth = authorIncome.incomeMonth; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn preTaxIncome = authorIncome.preTaxIncome; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn afterTaxIncome = authorIncome.afterTaxIncome; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn payStatus = authorIncome.payStatus; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn confirmStatus = authorIncome.confirmStatus; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn detail = authorIncome.detail; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = authorIncome.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class AuthorIncome extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn authorId = column("author_id", JDBCType.BIGINT); + + public final SqlColumn bookId = column("book_id", JDBCType.BIGINT); + + public final SqlColumn incomeMonth = column("income_month", JDBCType.DATE); + + public final SqlColumn preTaxIncome = column("pre_tax_income", JDBCType.BIGINT); + + public final SqlColumn afterTaxIncome = column("after_tax_income", JDBCType.BIGINT); + + public final SqlColumn payStatus = column("pay_status", JDBCType.TINYINT); + + public final SqlColumn confirmStatus = column("confirm_status", JDBCType.TINYINT); + + public final SqlColumn detail = column("detail", JDBCType.VARCHAR); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public AuthorIncome() { + super("author_income"); + } + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorIncomeMapper.java b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorIncomeMapper.java new file mode 100644 index 0000000..8b38480 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorIncomeMapper.java @@ -0,0 +1,240 @@ +package com.java2nb.novel.mapper; + +import static com.java2nb.novel.mapper.AuthorIncomeDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.entity.AuthorIncome; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.BasicColumn; +import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider; +import org.mybatis.dynamic.sql.select.CountDSLCompleter; +import org.mybatis.dynamic.sql.select.SelectDSLCompleter; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.UpdateDSLCompleter; +import org.mybatis.dynamic.sql.update.UpdateModel; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; +import org.mybatis.dynamic.sql.util.mybatis3.MyBatis3Utils; + +@Mapper +public interface AuthorIncomeMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + BasicColumn[] selectList = BasicColumn.columnList(id, userId, authorId, bookId, incomeMonth, preTaxIncome, afterTaxIncome, payStatus, confirmStatus, detail, createTime); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insertMultiple") + int insertMultiple(MultiRowInsertStatementProvider multipleInsertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("AuthorIncomeResult") + Optional selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="AuthorIncomeResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="author_id", property="authorId", jdbcType=JdbcType.BIGINT), + @Result(column="book_id", property="bookId", jdbcType=JdbcType.BIGINT), + @Result(column="income_month", property="incomeMonth", jdbcType=JdbcType.DATE), + @Result(column="pre_tax_income", property="preTaxIncome", jdbcType=JdbcType.BIGINT), + @Result(column="after_tax_income", property="afterTaxIncome", jdbcType=JdbcType.BIGINT), + @Result(column="pay_status", property="payStatus", jdbcType=JdbcType.TINYINT), + @Result(column="confirm_status", property="confirmStatus", jdbcType=JdbcType.TINYINT), + @Result(column="detail", property="detail", jdbcType=JdbcType.VARCHAR), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default long count(CountDSLCompleter completer) { + return MyBatis3Utils.countFrom(this::count, authorIncome, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int delete(DeleteDSLCompleter completer) { + return MyBatis3Utils.deleteFrom(this::delete, authorIncome, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return delete(c -> + c.where(id, isEqualTo(id_)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(AuthorIncome record) { + return MyBatis3Utils.insert(this::insert, record, authorIncome, c -> + c.map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(authorId).toProperty("authorId") + .map(bookId).toProperty("bookId") + .map(incomeMonth).toProperty("incomeMonth") + .map(preTaxIncome).toProperty("preTaxIncome") + .map(afterTaxIncome).toProperty("afterTaxIncome") + .map(payStatus).toProperty("payStatus") + .map(confirmStatus).toProperty("confirmStatus") + .map(detail).toProperty("detail") + .map(createTime).toProperty("createTime") + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertMultiple(Collection records) { + return MyBatis3Utils.insertMultiple(this::insertMultiple, records, authorIncome, c -> + c.map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(authorId).toProperty("authorId") + .map(bookId).toProperty("bookId") + .map(incomeMonth).toProperty("incomeMonth") + .map(preTaxIncome).toProperty("preTaxIncome") + .map(afterTaxIncome).toProperty("afterTaxIncome") + .map(payStatus).toProperty("payStatus") + .map(confirmStatus).toProperty("confirmStatus") + .map(detail).toProperty("detail") + .map(createTime).toProperty("createTime") + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(AuthorIncome record) { + return MyBatis3Utils.insert(this::insert, record, authorIncome, c -> + c.map(id).toPropertyWhenPresent("id", record::getId) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(authorId).toPropertyWhenPresent("authorId", record::getAuthorId) + .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) + .map(incomeMonth).toPropertyWhenPresent("incomeMonth", record::getIncomeMonth) + .map(preTaxIncome).toPropertyWhenPresent("preTaxIncome", record::getPreTaxIncome) + .map(afterTaxIncome).toPropertyWhenPresent("afterTaxIncome", record::getAfterTaxIncome) + .map(payStatus).toPropertyWhenPresent("payStatus", record::getPayStatus) + .map(confirmStatus).toPropertyWhenPresent("confirmStatus", record::getConfirmStatus) + .map(detail).toPropertyWhenPresent("detail", record::getDetail) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Optional selectOne(SelectDSLCompleter completer) { + return MyBatis3Utils.selectOne(this::selectOne, selectList, authorIncome, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default List select(SelectDSLCompleter completer) { + return MyBatis3Utils.selectList(this::selectMany, selectList, authorIncome, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default List selectDistinct(SelectDSLCompleter completer) { + return MyBatis3Utils.selectDistinct(this::selectMany, selectList, authorIncome, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Optional selectByPrimaryKey(Long id_) { + return selectOne(c -> + c.where(id, isEqualTo(id_)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int update(UpdateDSLCompleter completer) { + return MyBatis3Utils.update(this::update, authorIncome, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + static UpdateDSL updateAllColumns(AuthorIncome record, UpdateDSL dsl) { + return dsl.set(id).equalTo(record::getId) + .set(userId).equalTo(record::getUserId) + .set(authorId).equalTo(record::getAuthorId) + .set(bookId).equalTo(record::getBookId) + .set(incomeMonth).equalTo(record::getIncomeMonth) + .set(preTaxIncome).equalTo(record::getPreTaxIncome) + .set(afterTaxIncome).equalTo(record::getAfterTaxIncome) + .set(payStatus).equalTo(record::getPayStatus) + .set(confirmStatus).equalTo(record::getConfirmStatus) + .set(detail).equalTo(record::getDetail) + .set(createTime).equalTo(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + static UpdateDSL updateSelectiveColumns(AuthorIncome record, UpdateDSL dsl) { + return dsl.set(id).equalToWhenPresent(record::getId) + .set(userId).equalToWhenPresent(record::getUserId) + .set(authorId).equalToWhenPresent(record::getAuthorId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(incomeMonth).equalToWhenPresent(record::getIncomeMonth) + .set(preTaxIncome).equalToWhenPresent(record::getPreTaxIncome) + .set(afterTaxIncome).equalToWhenPresent(record::getAfterTaxIncome) + .set(payStatus).equalToWhenPresent(record::getPayStatus) + .set(confirmStatus).equalToWhenPresent(record::getConfirmStatus) + .set(detail).equalToWhenPresent(record::getDetail) + .set(createTime).equalToWhenPresent(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(AuthorIncome record) { + return update(c -> + c.set(userId).equalTo(record::getUserId) + .set(authorId).equalTo(record::getAuthorId) + .set(bookId).equalTo(record::getBookId) + .set(incomeMonth).equalTo(record::getIncomeMonth) + .set(preTaxIncome).equalTo(record::getPreTaxIncome) + .set(afterTaxIncome).equalTo(record::getAfterTaxIncome) + .set(payStatus).equalTo(record::getPayStatus) + .set(confirmStatus).equalTo(record::getConfirmStatus) + .set(detail).equalTo(record::getDetail) + .set(createTime).equalTo(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(AuthorIncome record) { + return update(c -> + c.set(userId).equalToWhenPresent(record::getUserId) + .set(authorId).equalToWhenPresent(record::getAuthorId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(incomeMonth).equalToWhenPresent(record::getIncomeMonth) + .set(preTaxIncome).equalToWhenPresent(record::getPreTaxIncome) + .set(afterTaxIncome).equalToWhenPresent(record::getAfterTaxIncome) + .set(payStatus).equalToWhenPresent(record::getPayStatus) + .set(confirmStatus).equalToWhenPresent(record::getConfirmStatus) + .set(detail).equalToWhenPresent(record::getDetail) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + ); + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/UserMapper.java b/novel-common/src/main/java/com/java2nb/novel/mapper/UserMapper.java index 10a3820..89069f5 100644 --- a/novel-common/src/main/java/com/java2nb/novel/mapper/UserMapper.java +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/UserMapper.java @@ -8,14 +8,8 @@ import java.util.Collection; import java.util.List; import java.util.Optional; import javax.annotation.Generated; -import org.apache.ibatis.annotations.DeleteProvider; -import org.apache.ibatis.annotations.InsertProvider; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Result; -import org.apache.ibatis.annotations.ResultMap; -import org.apache.ibatis.annotations.Results; -import org.apache.ibatis.annotations.SelectProvider; -import org.apache.ibatis.annotations.UpdateProvider; + +import org.apache.ibatis.annotations.*; import org.apache.ibatis.type.JdbcType; import org.mybatis.dynamic.sql.BasicColumn; import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter; @@ -229,4 +223,8 @@ public interface UserMapper { .where(id, isEqualTo(record::getId)) ); } + + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultType(value = Integer.class) + Integer selectStatistic(SelectStatementProvider selectStatement); } \ No newline at end of file diff --git a/novel-common/src/main/resources/mybatis/generatorConfig.xml b/novel-common/src/main/resources/mybatis/generatorConfig.xml index b559604..03f5bfc 100644 --- a/novel-common/src/main/resources/mybatis/generatorConfig.xml +++ b/novel-common/src/main/resources/mybatis/generatorConfig.xml @@ -44,7 +44,7 @@ - +
diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/AuthorController.java b/novel-front/src/main/java/com/java2nb/novel/controller/AuthorController.java index dac110b..6c4bcd8 100644 --- a/novel-front/src/main/java/com/java2nb/novel/controller/AuthorController.java +++ b/novel-front/src/main/java/com/java2nb/novel/controller/AuthorController.java @@ -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","
") .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) + )); + } + diff --git a/novel-front/src/main/java/com/java2nb/novel/core/config/AuthorIncomeConfig.java b/novel-front/src/main/java/com/java2nb/novel/core/config/AuthorIncomeConfig.java new file mode 100644 index 0000000..1fc1743 --- /dev/null +++ b/novel-front/src/main/java/com/java2nb/novel/core/config/AuthorIncomeConfig.java @@ -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; + +} diff --git a/novel-front/src/main/java/com/java2nb/novel/core/config/WebMvcConfig.java b/novel-front/src/main/java/com/java2nb/novel/core/config/WebMvcConfig.java new file mode 100644 index 0000000..f9552e0 --- /dev/null +++ b/novel-front/src/main/java/com/java2nb/novel/core/config/WebMvcConfig.java @@ -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()); + } +} diff --git a/novel-front/src/main/java/com/java2nb/novel/core/schedule/DailyIncomeStaSchedule.java b/novel-front/src/main/java/com/java2nb/novel/core/schedule/DailyIncomeStaSchedule.java new file mode 100644 index 0000000..8ffde36 --- /dev/null +++ b/novel-front/src/main/java/com/java2nb/novel/core/schedule/DailyIncomeStaSchedule.java @@ -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 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 books = bookService.queryBookList(authorId); + + int buyTotalMember = 0; + int buyTotalCount = 0; + int buyTotalAccount = 0; + List 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); + + + } + +} diff --git a/novel-front/src/main/java/com/java2nb/novel/core/schedule/MonthIncomeStaSchedule.java b/novel-front/src/main/java/com/java2nb/novel/core/schedule/MonthIncomeStaSchedule.java new file mode 100644 index 0000000..c0dc232 --- /dev/null +++ b/novel-front/src/main/java/com/java2nb/novel/core/schedule/MonthIncomeStaSchedule.java @@ -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 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 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); + + + } + +} diff --git a/novel-front/src/main/java/com/java2nb/novel/service/AuthorService.java b/novel-front/src/main/java/com/java2nb/novel/service/AuthorService.java index 5f96320..fae2dbe 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/AuthorService.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/AuthorService.java @@ -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 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 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 listIncomeMonthByPage(int page, int pageSize, Long userId, Long bookId); } diff --git a/novel-front/src/main/java/com/java2nb/novel/service/BookService.java b/novel-front/src/main/java/com/java2nb/novel/service/BookService.java index 18e67ff..21afe4a 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/BookService.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/BookService.java @@ -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 queryBookByUpdateTimeByPage(Date startDate, int limit); + + /** + * 查询作品列表 + * @param authorId 作家ID + * @return 作品列表 + */ + List queryBookList(Long authorId); } diff --git a/novel-front/src/main/java/com/java2nb/novel/service/UserService.java b/novel-front/src/main/java/com/java2nb/novel/service/UserService.java index 680091e..a1bbdd1 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/UserService.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/UserService.java @@ -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 bookIds, Date startTime, Date endTime); } diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java index 287f3fe..29881fd 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java @@ -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 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 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 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)); + } } diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java index 78d6434..8056c50 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java @@ -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 queryBookList(Long authorId) { + + return bookMapper.selectMany(select(id, bookName) + .from(book) + .where(BookDynamicSqlSupport.authorId,isEqualTo(authorId)) + .build() + .render(RenderingStrategies.MYBATIS3)); + } + } diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/UserServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/UserServiceImpl.java index 8c86b46..99ae5f7 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/UserServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/UserServiceImpl.java @@ -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 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)); + } + + diff --git a/novel-front/src/main/resources/application.yml b/novel-front/src/main/resources/application.yml index cf1f7f9..c805afc 100644 --- a/novel-front/src/main/resources/application.yml +++ b/novel-front/src/main/resources/application.yml @@ -49,4 +49,11 @@ xss: urlPatterns: /book/addBookComment,/user/addFeedBack,/author/addBook,/author/addBookContent,/author/register.html - +author: + income: + #税率(扣税后所得比率) + tax-rate: 0.9 + #分佣比例 + share-proportion: 0.7 + #兑换比率(人民币) + exchange-proportion: 0.01 diff --git a/novel-front/src/main/resources/templates/author/author_income.html b/novel-front/src/main/resources/templates/author/author_income.html new file mode 100644 index 0000000..b3fa62c --- /dev/null +++ b/novel-front/src/main/resources/templates/author/author_income.html @@ -0,0 +1,227 @@ + + + + + + + + 作家管理系统-小说精品屋 + + + + + + +
+ +
+ +
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + +
+ 月份 + + 税前收入 + + 税后收入 + + 支付状态 +
+
+
+ + + + + + + + + + + + + + + + diff --git a/novel-front/src/main/resources/templates/author/author_income_detail.html b/novel-front/src/main/resources/templates/author/author_income_detail.html new file mode 100644 index 0000000..9121cb3 --- /dev/null +++ b/novel-front/src/main/resources/templates/author/author_income_detail.html @@ -0,0 +1,225 @@ + + + + + + + + 作家管理系统-小说精品屋 + + + + + + +
+ +
+ +
+
+
+ + + +
+
+
+ + +
+ + + + + + + + + + + + + + +
+ 日期 + + 订阅总额 + + 订阅次数 + + 订阅人数 +
+
+
+
+ +
+
+
+
+ + + + + + + + + + diff --git a/novel-front/src/main/resources/templates/author/book_add.html b/novel-front/src/main/resources/templates/author/book_add.html index 6112579..e794da1 100644 --- a/novel-front/src/main/resources/templates/author/book_add.html +++ b/novel-front/src/main/resources/templates/author/book_add.html @@ -32,8 +32,9 @@ diff --git a/novel-front/src/main/resources/templates/author/content_add.html b/novel-front/src/main/resources/templates/author/content_add.html index 6f34a71..4d06ddf 100644 --- a/novel-front/src/main/resources/templates/author/content_add.html +++ b/novel-front/src/main/resources/templates/author/content_add.html @@ -29,8 +29,9 @@ @@ -57,9 +58,11 @@
  • 章节名:
  • - 章节内容: + 章节内容:
  • + class="textarea">
  • + +
  • @@ -115,6 +118,13 @@