From 31aa3192fd85c24a054822a344da14c8473dddce Mon Sep 17 00:00:00 2001 From: xiongxiaoyang <773861846@qq.com> Date: Sun, 22 Nov 2020 17:15:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E8=AF=B4=E7=AB=A0=E8=8A=82=E5=AE=9A?= =?UTF-8?q?=E4=BB=B7=E8=A7=84=E5=88=99=E8=87=AA=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/java2nb/novel/entity/BookIndex.java | 13 ++ .../mapper/BookIndexDynamicSqlSupport.java | 5 + .../java2nb/novel/mapper/BookIndexMapper.java | 130 ++++++++++-------- .../novel/controller/UserController.java | 1 + .../novel/core/config/BookPriceConfig.java | 23 ++++ .../novel/service/impl/BookServiceImpl.java | 16 ++- .../novel/service/impl/UserServiceImpl.java | 5 +- .../src/main/resources/application.yml | 8 ++ .../templates/book/book_content.html | 2 +- .../templates/mobile/book/book_content.html | 2 +- sql/20201122.sql | 1 + 11 files changed, 140 insertions(+), 66 deletions(-) create mode 100644 novel-front/src/main/java/com/java2nb/novel/core/config/BookPriceConfig.java create mode 100644 sql/20201122.sql diff --git a/novel-common/src/main/java/com/java2nb/novel/entity/BookIndex.java b/novel-common/src/main/java/com/java2nb/novel/entity/BookIndex.java index 273c998..cbbd033 100644 --- a/novel-common/src/main/java/com/java2nb/novel/entity/BookIndex.java +++ b/novel-common/src/main/java/com/java2nb/novel/entity/BookIndex.java @@ -22,6 +22,9 @@ public class BookIndex { @Generated("org.mybatis.generator.api.MyBatisGenerator") private Byte isVip; + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer bookPrice; + @Generated("org.mybatis.generator.api.MyBatisGenerator") private Date createTime; @@ -88,6 +91,16 @@ public class BookIndex { this.isVip = isVip; } + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getBookPrice() { + return bookPrice; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookPrice(Integer bookPrice) { + this.bookPrice = bookPrice; + } + @Generated("org.mybatis.generator.api.MyBatisGenerator") public Date getCreateTime() { return createTime; diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/BookIndexDynamicSqlSupport.java b/novel-common/src/main/java/com/java2nb/novel/mapper/BookIndexDynamicSqlSupport.java index a6a1155..1c2ac2a 100644 --- a/novel-common/src/main/java/com/java2nb/novel/mapper/BookIndexDynamicSqlSupport.java +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/BookIndexDynamicSqlSupport.java @@ -28,6 +28,9 @@ public final class BookIndexDynamicSqlSupport { @Generated("org.mybatis.generator.api.MyBatisGenerator") public static final SqlColumn isVip = bookIndex.isVip; + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookPrice = bookIndex.bookPrice; + @Generated("org.mybatis.generator.api.MyBatisGenerator") public static final SqlColumn createTime = bookIndex.createTime; @@ -48,6 +51,8 @@ public final class BookIndexDynamicSqlSupport { public final SqlColumn isVip = column("is_vip", JDBCType.TINYINT); + public final SqlColumn bookPrice = column("book_price", JDBCType.INTEGER); + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/BookIndexMapper.java b/novel-common/src/main/java/com/java2nb/novel/mapper/BookIndexMapper.java index 2423a4b..7870bf7 100644 --- a/novel-common/src/main/java/com/java2nb/novel/mapper/BookIndexMapper.java +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/BookIndexMapper.java @@ -4,10 +4,12 @@ import static com.java2nb.novel.mapper.BookIndexDynamicSqlSupport.*; import static org.mybatis.dynamic.sql.SqlBuilder.*; import com.java2nb.novel.entity.BookIndex; + 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; @@ -35,45 +37,46 @@ import org.mybatis.dynamic.sql.util.mybatis3.MyBatis3Utils; @Mapper public interface BookIndexMapper { @Generated("org.mybatis.generator.api.MyBatisGenerator") - BasicColumn[] selectList = BasicColumn.columnList(id, bookId, indexNum, indexName, wordCount, isVip, createTime, updateTime); + BasicColumn[] selectList = BasicColumn.columnList(id, bookId, indexNum, indexName, wordCount, isVip, bookPrice, createTime, updateTime); @Generated("org.mybatis.generator.api.MyBatisGenerator") - @SelectProvider(type=SqlProviderAdapter.class, method="select") + @SelectProvider(type = SqlProviderAdapter.class, method = "select") long count(SelectStatementProvider selectStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") - @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + @DeleteProvider(type = SqlProviderAdapter.class, method = "delete") int delete(DeleteStatementProvider deleteStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") - @InsertProvider(type=SqlProviderAdapter.class, method="insert") + @InsertProvider(type = SqlProviderAdapter.class, method = "insert") int insert(InsertStatementProvider insertStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") - @InsertProvider(type=SqlProviderAdapter.class, method="insertMultiple") + @InsertProvider(type = SqlProviderAdapter.class, method = "insertMultiple") int insertMultiple(MultiRowInsertStatementProvider multipleInsertStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") - @SelectProvider(type=SqlProviderAdapter.class, method="select") + @SelectProvider(type = SqlProviderAdapter.class, method = "select") @ResultMap("BookIndexResult") Optional selectOne(SelectStatementProvider selectStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") - @SelectProvider(type=SqlProviderAdapter.class, method="select") - @Results(id="BookIndexResult", value = { - @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), - @Result(column="book_id", property="bookId", jdbcType=JdbcType.BIGINT), - @Result(column="index_num", property="indexNum", jdbcType=JdbcType.INTEGER), - @Result(column="index_name", property="indexName", jdbcType=JdbcType.VARCHAR), - @Result(column="word_count", property="wordCount", jdbcType=JdbcType.INTEGER), - @Result(column="is_vip", property="isVip", jdbcType=JdbcType.TINYINT), - @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), - @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP) + @SelectProvider(type = SqlProviderAdapter.class, method = "select") + @Results(id = "BookIndexResult", value = { + @Result(column = "id", property = "id", jdbcType = JdbcType.BIGINT, id = true), + @Result(column = "book_id", property = "bookId", jdbcType = JdbcType.BIGINT), + @Result(column = "index_num", property = "indexNum", jdbcType = JdbcType.INTEGER), + @Result(column = "index_name", property = "indexName", jdbcType = JdbcType.VARCHAR), + @Result(column = "word_count", property = "wordCount", jdbcType = JdbcType.INTEGER), + @Result(column = "is_vip", property = "isVip", jdbcType = JdbcType.TINYINT), + @Result(column = "book_price", property = "bookPrice", jdbcType = JdbcType.INTEGER), + @Result(column = "create_time", property = "createTime", jdbcType = JdbcType.TIMESTAMP), + @Result(column = "update_time", property = "updateTime", jdbcType = JdbcType.TIMESTAMP) }) List selectMany(SelectStatementProvider selectStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") - @UpdateProvider(type=SqlProviderAdapter.class, method="update") + @UpdateProvider(type = SqlProviderAdapter.class, method = "update") int update(UpdateStatementProvider updateStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") @@ -88,50 +91,53 @@ public interface BookIndexMapper { @Generated("org.mybatis.generator.api.MyBatisGenerator") default int deleteByPrimaryKey(Long id_) { - return delete(c -> - c.where(id, isEqualTo(id_)) + return delete(c -> + c.where(id, isEqualTo(id_)) ); } @Generated("org.mybatis.generator.api.MyBatisGenerator") default int insert(BookIndex record) { return MyBatis3Utils.insert(this::insert, record, bookIndex, c -> - c.map(id).toProperty("id") - .map(bookId).toProperty("bookId") - .map(indexNum).toProperty("indexNum") - .map(indexName).toProperty("indexName") - .map(wordCount).toProperty("wordCount") - .map(isVip).toProperty("isVip") - .map(createTime).toProperty("createTime") - .map(updateTime).toProperty("updateTime") + c.map(id).toProperty("id") + .map(bookId).toProperty("bookId") + .map(indexNum).toProperty("indexNum") + .map(indexName).toProperty("indexName") + .map(wordCount).toProperty("wordCount") + .map(isVip).toProperty("isVip") + .map(bookPrice).toProperty("bookPrice") + .map(createTime).toProperty("createTime") + .map(updateTime).toProperty("updateTime") ); } @Generated("org.mybatis.generator.api.MyBatisGenerator") default int insertMultiple(Collection records) { return MyBatis3Utils.insertMultiple(this::insertMultiple, records, bookIndex, c -> - c.map(id).toProperty("id") - .map(bookId).toProperty("bookId") - .map(indexNum).toProperty("indexNum") - .map(indexName).toProperty("indexName") - .map(wordCount).toProperty("wordCount") - .map(isVip).toProperty("isVip") - .map(createTime).toProperty("createTime") - .map(updateTime).toProperty("updateTime") + c.map(id).toProperty("id") + .map(bookId).toProperty("bookId") + .map(indexNum).toProperty("indexNum") + .map(indexName).toProperty("indexName") + .map(wordCount).toProperty("wordCount") + .map(isVip).toProperty("isVip") + .map(bookPrice).toProperty("bookPrice") + .map(createTime).toProperty("createTime") + .map(updateTime).toProperty("updateTime") ); } @Generated("org.mybatis.generator.api.MyBatisGenerator") default int insertSelective(BookIndex record) { return MyBatis3Utils.insert(this::insert, record, bookIndex, c -> - c.map(id).toPropertyWhenPresent("id", record::getId) - .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) - .map(indexNum).toPropertyWhenPresent("indexNum", record::getIndexNum) - .map(indexName).toPropertyWhenPresent("indexName", record::getIndexName) - .map(wordCount).toPropertyWhenPresent("wordCount", record::getWordCount) - .map(isVip).toPropertyWhenPresent("isVip", record::getIsVip) - .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) - .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + c.map(id).toPropertyWhenPresent("id", record::getId) + .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) + .map(indexNum).toPropertyWhenPresent("indexNum", record::getIndexNum) + .map(indexName).toPropertyWhenPresent("indexName", record::getIndexName) + .map(wordCount).toPropertyWhenPresent("wordCount", record::getWordCount) + .map(isVip).toPropertyWhenPresent("isVip", record::getIsVip) + .map(bookPrice).toPropertyWhenPresent("bookPrice", record::getBookPrice) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) ); } @@ -153,7 +159,7 @@ public interface BookIndexMapper { @Generated("org.mybatis.generator.api.MyBatisGenerator") default Optional selectByPrimaryKey(Long id_) { return selectOne(c -> - c.where(id, isEqualTo(id_)) + c.where(id, isEqualTo(id_)) ); } @@ -170,6 +176,7 @@ public interface BookIndexMapper { .set(indexName).equalTo(record::getIndexName) .set(wordCount).equalTo(record::getWordCount) .set(isVip).equalTo(record::getIsVip) + .set(bookPrice).equalTo(record::getBookPrice) .set(createTime).equalTo(record::getCreateTime) .set(updateTime).equalTo(record::getUpdateTime); } @@ -182,6 +189,7 @@ public interface BookIndexMapper { .set(indexName).equalToWhenPresent(record::getIndexName) .set(wordCount).equalToWhenPresent(record::getWordCount) .set(isVip).equalToWhenPresent(record::getIsVip) + .set(bookPrice).equalToWhenPresent(record::getBookPrice) .set(createTime).equalToWhenPresent(record::getCreateTime) .set(updateTime).equalToWhenPresent(record::getUpdateTime); } @@ -189,28 +197,30 @@ public interface BookIndexMapper { @Generated("org.mybatis.generator.api.MyBatisGenerator") default int updateByPrimaryKey(BookIndex record) { return update(c -> - c.set(bookId).equalTo(record::getBookId) - .set(indexNum).equalTo(record::getIndexNum) - .set(indexName).equalTo(record::getIndexName) - .set(wordCount).equalTo(record::getWordCount) - .set(isVip).equalTo(record::getIsVip) - .set(createTime).equalTo(record::getCreateTime) - .set(updateTime).equalTo(record::getUpdateTime) - .where(id, isEqualTo(record::getId)) + c.set(bookId).equalTo(record::getBookId) + .set(indexNum).equalTo(record::getIndexNum) + .set(indexName).equalTo(record::getIndexName) + .set(wordCount).equalTo(record::getWordCount) + .set(isVip).equalTo(record::getIsVip) + .set(bookPrice).equalTo(record::getBookPrice) + .set(createTime).equalTo(record::getCreateTime) + .set(updateTime).equalTo(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) ); } @Generated("org.mybatis.generator.api.MyBatisGenerator") default int updateByPrimaryKeySelective(BookIndex record) { return update(c -> - c.set(bookId).equalToWhenPresent(record::getBookId) - .set(indexNum).equalToWhenPresent(record::getIndexNum) - .set(indexName).equalToWhenPresent(record::getIndexName) - .set(wordCount).equalToWhenPresent(record::getWordCount) - .set(isVip).equalToWhenPresent(record::getIsVip) - .set(createTime).equalToWhenPresent(record::getCreateTime) - .set(updateTime).equalToWhenPresent(record::getUpdateTime) - .where(id, isEqualTo(record::getId)) + c.set(bookId).equalToWhenPresent(record::getBookId) + .set(indexNum).equalToWhenPresent(record::getIndexNum) + .set(indexName).equalToWhenPresent(record::getIndexName) + .set(wordCount).equalToWhenPresent(record::getWordCount) + .set(isVip).equalToWhenPresent(record::getIsVip) + .set(bookPrice).equalToWhenPresent(record::getBookPrice) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) ); } } \ No newline at end of file diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/UserController.java b/novel-front/src/main/java/com/java2nb/novel/controller/UserController.java index b37c5ca..1e509e6 100644 --- a/novel-front/src/main/java/com/java2nb/novel/controller/UserController.java +++ b/novel-front/src/main/java/com/java2nb/novel/controller/UserController.java @@ -282,6 +282,7 @@ public class UserController extends BaseController { if (userDetails == null) { return ResultBean.fail(ResponseStatus.NO_LOGIN); } + buyRecord.setBuyAmount(bookService.queryBookIndex(buyRecord.getBookIndexId()).getBookPrice()); userService.buyBookIndex(userDetails.getId(),buyRecord); return ResultBean.ok(); } diff --git a/novel-front/src/main/java/com/java2nb/novel/core/config/BookPriceConfig.java b/novel-front/src/main/java/com/java2nb/novel/core/config/BookPriceConfig.java new file mode 100644 index 0000000..6a2c7fa --- /dev/null +++ b/novel-front/src/main/java/com/java2nb/novel/core/config/BookPriceConfig.java @@ -0,0 +1,23 @@ +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 = "book.price") +public class BookPriceConfig { + + private BigDecimal wordCount; + + private BigDecimal value; + + +} 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 fc6dd08..ac2383a 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 @@ -5,6 +5,7 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.java2nb.novel.core.cache.CacheKey; import com.java2nb.novel.core.cache.CacheService; +import com.java2nb.novel.core.config.BookPriceConfig; import com.java2nb.novel.core.enums.ResponseStatus; import com.java2nb.novel.core.exception.BusinessException; import com.java2nb.novel.core.utils.*; @@ -88,6 +89,8 @@ public class BookServiceImpl implements BookService { private final FileService fileService; + private final BookPriceConfig bookPriceConfig; + @SneakyThrows @Override @@ -256,7 +259,7 @@ public class BookServiceImpl implements BookService { @Override public BookIndex queryBookIndex(Long bookIndexId) { - SelectStatementProvider selectStatement = select(BookIndexDynamicSqlSupport.id, BookIndexDynamicSqlSupport.bookId, BookIndexDynamicSqlSupport.indexNum, BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.wordCount, BookIndexDynamicSqlSupport.updateTime, BookIndexDynamicSqlSupport.isVip) + SelectStatementProvider selectStatement = select(BookIndexDynamicSqlSupport.id, BookIndexDynamicSqlSupport.bookId, BookIndexDynamicSqlSupport.indexNum, BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.wordCount,BookIndexDynamicSqlSupport.bookPrice, BookIndexDynamicSqlSupport.updateTime, BookIndexDynamicSqlSupport.isVip) .from(bookIndex) .where(BookIndexDynamicSqlSupport.id, isEqualTo(bookIndexId)) .build() @@ -560,6 +563,10 @@ public class BookServiceImpl implements BookService { .and(BookDynamicSqlSupport.authorId, isEqualTo(authorId)) .build() .render(RenderingStrategies.MYBATIS3)); + + //计算价格 + int bookPrice = new BigDecimal(wordCount).divide(bookPriceConfig.getWordCount()).multiply(bookPriceConfig.getValue()).intValue(); + //更新小说目录表 int indexNum = 0; if (book.getLastIndexId() != null) { @@ -572,6 +579,7 @@ public class BookServiceImpl implements BookService { lastBookIndex.setIndexNum(indexNum); lastBookIndex.setBookId(bookId); lastBookIndex.setIsVip(isVip); + lastBookIndex.setBookPrice(bookPrice); lastBookIndex.setCreateTime(currentDate); lastBookIndex.setUpdateTime(currentDate); bookIndexMapper.insertSelective(lastBookIndex); @@ -788,6 +796,10 @@ public class BookServiceImpl implements BookService { Date currentDate = new Date(); int wordCount = content.length(); + //计算价格 + int bookPrice = new BigDecimal(wordCount).divide(bookPriceConfig.getWordCount()).multiply(bookPriceConfig.getValue()).intValue(); + + //更新小说目录表 int update = bookIndexMapper.update( update(BookIndexDynamicSqlSupport.bookIndex) @@ -795,6 +807,8 @@ public class BookServiceImpl implements BookService { .equalTo(indexName) .set(BookIndexDynamicSqlSupport.wordCount) .equalTo(wordCount) + .set(BookIndexDynamicSqlSupport.bookPrice) + .equalTo(bookPrice) .set(BookIndexDynamicSqlSupport.updateTime) .equalTo(currentDate) .where(BookIndexDynamicSqlSupport.id, isEqualTo(indexId)) 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 99ae5f7..da8281f 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 @@ -284,20 +284,19 @@ public class UserServiceImpl implements UserService { public void buyBookIndex(Long userId, UserBuyRecord buyRecord) { //查询用户余额 long balance = userInfo(userId).getAccountBalance(); - if(balance<10){ + if(balance
    -
  • 价格:10屋币(1元=100屋币)
  • +
  • 价格:
  • 购买
diff --git a/novel-front/src/main/resources/templates/mobile/book/book_content.html b/novel-front/src/main/resources/templates/mobile/book/book_content.html index abfcbc2..0181b2c 100644 --- a/novel-front/src/main/resources/templates/mobile/book/book_content.html +++ b/novel-front/src/main/resources/templates/mobile/book/book_content.html @@ -238,7 +238,7 @@
此章为VIP章节,需要订阅后才能继续阅读
- 价格:10屋币(1元=100屋币)
+ 价格:
购买
diff --git a/sql/20201122.sql b/sql/20201122.sql new file mode 100644 index 0000000..b723efa --- /dev/null +++ b/sql/20201122.sql @@ -0,0 +1 @@ +alter table book_index add column `book_price` int(3) DEFAULT 0 COMMENT '章节费用(屋币)' after `is_vip`; \ No newline at end of file