diff --git a/module-common/src/main/java/org/jeecg/api/controller/AppletBookController.java b/module-common/src/main/java/org/jeecg/api/controller/AppletBookController.java index 06318d8..9639ffd 100644 --- a/module-common/src/main/java/org/jeecg/api/controller/AppletBookController.java +++ b/module-common/src/main/java/org/jeecg/api/controller/AppletBookController.java @@ -33,8 +33,8 @@ public class AppletBookController { } - //修改我的书籍信息 - @ApiOperation(value="修改我的书籍信息", notes="修改我的书籍信息") + //修改我的书架信息 + @ApiOperation(value="修改我的书架信息", notes="修改我的书架信息") @PostMapping(value = "/saveOrUpdateReadBook") public Result saveOrUpdateReadBook(@RequestHeader("X-Access-Token") String token, CommonBook commonBook){ return appletBookService.saveOrUpdateReadBook(token, commonBook); diff --git a/module-common/src/main/java/org/jeecg/api/controller/AppletCommentController.java b/module-common/src/main/java/org/jeecg/api/controller/AppletCommentController.java index 08ceb7c..7b45667 100644 --- a/module-common/src/main/java/org/jeecg/api/controller/AppletCommentController.java +++ b/module-common/src/main/java/org/jeecg/api/controller/AppletCommentController.java @@ -72,8 +72,8 @@ public class AppletCommentController { @ApiOperation(value="更新评论已读状态", notes="更新评论已读状态") @PostMapping(value = "/updateCommentRead") - public Result updateCommentRead(@RequestHeader("X-Access-Token")String token, String commentId) { - return appletCommentService.updateCommentRead(token, commentId); + public Result updateCommentRead(@RequestHeader("X-Access-Token")String token) { + return appletCommentService.updateCommentRead(token); } diff --git a/module-common/src/main/java/org/jeecg/api/controller/AppletOrderController.java b/module-common/src/main/java/org/jeecg/api/controller/AppletOrderController.java index 5f342bf..b1e57ef 100644 --- a/module-common/src/main/java/org/jeecg/api/controller/AppletOrderController.java +++ b/module-common/src/main/java/org/jeecg/api/controller/AppletOrderController.java @@ -42,29 +42,14 @@ public class AppletOrderController { return appletOrderService.getGiftDetail(giftId); } - //创建订单 - @ApiOperation( value="创建订单", notes="创建订单") - @PostMapping("/createOrder") - public Result createOrder(String token, String giftId, Integer num) { - return appletOrderService.createOrder(token, giftId, num); - } - - //支付订单 - @ApiOperation( value="支付订单", notes="支付订单") - @PostMapping("/payOrder") - public Result payOrder(String token, String orderId) { - return appletOrderService.payOrder(token, orderId); - } - //支付成功 - @ApiOperation( value="支付成功", notes="支付成功") - @PostMapping("/paySuccess") - public Result paySuccess(String orderId) { - return appletOrderService.paySuccess(orderId); + //支付成功回调 + @PostMapping("/payNotify") + public Object payNotify(@RequestBody String requestBody){ + return appletOrderService.payNotify(requestBody); } - //创建支付套餐订单 @ApiOperation( value="创建支付套餐订单", notes="创建支付套餐订单") @PostMapping("/createPayPackageOrder") diff --git a/module-common/src/main/java/org/jeecg/api/service/AppletBookService.java b/module-common/src/main/java/org/jeecg/api/service/AppletBookService.java index 2e7d598..03a9aa6 100644 --- a/module-common/src/main/java/org/jeecg/api/service/AppletBookService.java +++ b/module-common/src/main/java/org/jeecg/api/service/AppletBookService.java @@ -11,7 +11,7 @@ public interface AppletBookService { //获取我阅读过的书籍列表带分页 Result getReadBookPage(String token,PageBean pageBean); - //修改我的书籍信息 + //修改我的书架信息 Result saveOrUpdateReadBook(String token, CommonBook commonBook); diff --git a/module-common/src/main/java/org/jeecg/api/service/AppletCommentService.java b/module-common/src/main/java/org/jeecg/api/service/AppletCommentService.java index b785377..7bdb5cd 100644 --- a/module-common/src/main/java/org/jeecg/api/service/AppletCommentService.java +++ b/module-common/src/main/java/org/jeecg/api/service/AppletCommentService.java @@ -25,7 +25,7 @@ public interface AppletCommentService { Result replyComment(String token, String commentId, String content); //修改评论为已读 - Result updateCommentRead(String token, String commentId); + Result updateCommentRead(String token); //查看评论详情 Result getCommentDetail(String token, String commentId); diff --git a/module-common/src/main/java/org/jeecg/api/service/AppletOrderService.java b/module-common/src/main/java/org/jeecg/api/service/AppletOrderService.java index 31004d6..1f0b7f9 100644 --- a/module-common/src/main/java/org/jeecg/api/service/AppletOrderService.java +++ b/module-common/src/main/java/org/jeecg/api/service/AppletOrderService.java @@ -19,16 +19,8 @@ public interface AppletOrderService { Result getGiftDetail(String giftId); - //传入礼物标识,数量创建打赏订单 - Result createOrder(String token, String giftId, Integer num); - - - //根据礼物订单进行打赏 - Result payOrder(String token, String orderId); - - //支付成功支付回调 - Result paySuccess(String orderId); + Object payNotify(String requestBody); diff --git a/module-common/src/main/java/org/jeecg/api/service/impl/AppletBookServiceImpl.java b/module-common/src/main/java/org/jeecg/api/service/impl/AppletBookServiceImpl.java index 3cc7ab5..8838a5d 100644 --- a/module-common/src/main/java/org/jeecg/api/service/impl/AppletBookServiceImpl.java +++ b/module-common/src/main/java/org/jeecg/api/service/impl/AppletBookServiceImpl.java @@ -14,6 +14,7 @@ import org.jeecg.modules.commonBook.entity.CommonBook; import org.jeecg.modules.commonBook.service.ICommonBookService; import org.jeecg.modules.commonBookNovel.entity.CommonBookNovel; import org.jeecg.modules.commonBookNovel.service.ICommonBookNovelService; +import org.jeecg.modules.commonChapterReadRecord.service.ICommonChapterReadRecordService; import org.jeecg.modules.commonGiftBack.service.ICommonGiftBackService; import org.jeecg.modules.commonIconImage.service.ICommonIconImageService; import org.jeecg.modules.commonMoneyLog.service.ICommonMoneyLogService; @@ -78,6 +79,9 @@ public class AppletBookServiceImpl implements AppletBookService { @Resource private IHanHaiMemberService hanHaiMemberService; + @Resource + private ICommonChapterReadRecordService chapterReadRecordService; + //获取我阅读过的书籍列表带分页 @Override public Result getReadBookPage(String token, PageBean pageBean){ @@ -93,15 +97,21 @@ public class AppletBookServiceImpl implements AppletBookService { - //修改我的书籍信息 + //修改我的书架信息 @Override public Result saveOrUpdateReadBook(String token, CommonBook commonBook){ HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); + CommonBook one = commonBookService.lambdaQuery() .eq(CommonBook::getShopId, commonBook.getShopId()) .eq(CommonBook::getUserId, hanHaiMember.getId()) .one(); + if(one!=null){ + + // 添加章节阅读记录 - 使用传入参数中的章节ID + chapterReadRecordService.addChapterReadRecord(hanHaiMember.getId(), one.getShopId(), commonBook.getNovelId()); + commonBook.setId(one.getId()); commonBookService.updateById(commonBook); } diff --git a/module-common/src/main/java/org/jeecg/api/service/impl/AppletCommentServiceImpl.java b/module-common/src/main/java/org/jeecg/api/service/impl/AppletCommentServiceImpl.java index 86c81e2..a2089c2 100644 --- a/module-common/src/main/java/org/jeecg/api/service/impl/AppletCommentServiceImpl.java +++ b/module-common/src/main/java/org/jeecg/api/service/impl/AppletCommentServiceImpl.java @@ -36,11 +36,11 @@ public class AppletCommentServiceImpl implements AppletCommentService { @Override public Result getMyCommentNum(String token){ HanHaiMember member = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); - List n = commonBookCommentService.lambdaQuery() + long count = commonBookCommentService.lambdaQuery() .eq(CommonBookComment::getToUserId, member.getId()) .eq(CommonBookComment::getIsLook, "N") - .list(); - return Result.OK("未读评论数",n.size()); + .count(); + return Result.OK("未读评论数", count); } //查询我发布的评论列表 @@ -83,25 +83,9 @@ public class AppletCommentServiceImpl implements AppletCommentService { .eq(CommonBookComment::getToUserId, member.getId()) .eq(StringUtils.isNotBlank(type),CommonBookComment::getIsLook, type) .page(page); - //创建一个新的集合 - List commonBookComments = new ArrayList<>(); - //循环写入数据 - for (CommonBookComment commonBookComment : pageList.getRecords()) { - commonBookComment.setChildren( - commonBookCommentService.lambdaQuery() - .eq(CommonBookComment::getPid, commonBookComment.getId()) - .orderByDesc(CommonBookComment::getCreateTime) - .list() - ); - commonBookComment.setCommonShop( - commonShopService.getById(commonBookComment.getBookId()) - ); - commonBookComment.setHanHaiMember( - hanHaiMemberService.getById(commonBookComment.getUserId()) - ); - commonBookComments.add(commonBookComment); - } - pageList.setRecords(commonBookComments); + + setCommentChildren(pageList.getRecords(), member.getId()); + return Result.OK("查询成功",pageList); } @@ -115,49 +99,78 @@ public class AppletCommentServiceImpl implements AppletCommentService { .eq(CommonBookComment::getPid, "0") .orderByDesc(CommonBookComment::getCreateTime) .page(page); - //创建一个新的集合 - List commonBookComments = new ArrayList<>(); + + setCommentChildren(pageList.getRecords(), null); + + return Result.OK("查询成功",pageList); + } + + public void setCommentChildren(List children, String toUserId){ //循环写入数据 - for (CommonBookComment commonBookComment : pageList.getRecords()) { + for (CommonBookComment commonBookComment : children) { List list = commonBookCommentService.lambdaQuery() .eq(CommonBookComment::getPid, commonBookComment.getId()) + .and(StringUtils.isNotBlank(toUserId), n -> { + n.eq(CommonBookComment::getUserId, toUserId) + .or() + .eq(CommonBookComment::getToUserId, toUserId); + }) .orderByDesc(CommonBookComment::getCreateTime) .list(); + //循环写入用户信息 for (CommonBookComment bookComment : list) { - bookComment.setHanHaiMember(hanHaiMemberService.getById(bookComment.getUserId())); + setCommentInfo(bookComment); } - commonBookComment.setChildren( - list - ); - commonBookComment.setCommonShop( - commonShopService.getById(commonBookComment.getBookId()) - ); - commonBookComment.setHanHaiMember( - hanHaiMemberService.getById(commonBookComment.getUserId()) - ); - commonBookComments.add(commonBookComment); - } - pageList.setRecords(commonBookComments); - return Result.OK("查询成功",pageList); + commonBookComment.setChildren(list); + + setCommentInfo(commonBookComment); + } + } + + public void setCommentInfo(CommonBookComment comment){ + comment.setCommonShop(commonShopService.getById(comment.getBookId())); + comment.setHanHaiMember(hanHaiMemberService.getById(comment.getUserId())); } //保存评论信息 @Override public Result saveComment(String token, String bookId, String content){ HanHaiMember member = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); + + if(StringUtils.isBlank(bookId)){ + return Result.error("书籍ID不能为空"); + } + + if(StringUtils.isBlank(content)){ + return Result.error("评论内容不能为空"); + } + + if(content.trim().length() > 500){ // 假设最大长度为500字符 + return Result.error("评论内容不能超过500字符"); + } + //根据书籍标识查询书籍是否存在 CommonShop commonShop = commonShopService.getById(bookId); - if(commonShop==null){ + if(commonShop == null){ return Result.error("书籍不存在"); } + //增加评论信息 CommonBookComment commonBookComment = new CommonBookComment(); commonBookComment.setBookId(bookId); commonBookComment.setUserId(member.getId()); - commonBookComment.setComment(content); + commonBookComment.setComment(content.trim()); commonBookComment.setToUserId(commonShop.getUserId()); commonBookComment.setPid(ICommonBookCommentService.ROOT_PID_VALUE); + + // 如果是自己回复自己的书籍,直接设置为已读 + if(member.getId().equals(commonShop.getUserId())){ + commonBookComment.setIsLook("Y"); + } else { + commonBookComment.setIsLook("N"); + } + commonBookCommentService.save(commonBookComment); return Result.OK("评论成功"); } @@ -165,47 +178,85 @@ public class AppletCommentServiceImpl implements AppletCommentService { //删除评论信息 @Override public Result deleteComment(String token, String commentId){ - //查询该评论是否是你的评论 + HanHaiMember member = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); + + if(StringUtils.isBlank(commentId)){ + return Result.error("评论ID不能为空"); + } + + //查询该评论是否存在且是你的评论 CommonBookComment commonBookComment = commonBookCommentService.getById(commentId); - if(commonBookComment.getUserId().equals(shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token).getId())){ - commonBookCommentService.deleteCommonBookComment(commentId); - return Result.OK("删除成功"); + if(commonBookComment == null){ + return Result.error("评论不存在"); + } + + if(!commonBookComment.getUserId().equals(member.getId())){ + return Result.error("只能删除自己的评论"); } - return Result.error("删除失败"); + + commonBookCommentService.deleteCommonBookComment(commentId); + return Result.OK("删除成功"); } //回复评论信息 @Override public Result replyComment(String token, String commentId, String content){ HanHaiMember member = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); - CommonBookComment commonBookComment = commonBookCommentService.getById(commentId); - if (commonBookComment == null){ - //评论不存在 - return Result.error("评论不存在"); + + if(StringUtils.isBlank(commentId)){ + return Result.error("评论ID不能为空"); } - //增加评论信息 - CommonBookComment comment = new CommonBookComment(); - comment.setBookId(commonBookComment.getBookId()); - comment.setUserId(member.getId()); - comment.setComment(content); - comment.setToUserId(commonBookComment.getUserId()); - comment.setPid(commentId); - commonBookCommentService.save(comment); - return Result.ok("评论成功"); + + if(StringUtils.isBlank(content)){ + return Result.error("回复内容不能为空"); + } + + if(content.trim().length() > 500){ // 假设最大长度为500字符 + return Result.error("回复内容不能超过500字符"); + } + + CommonBookComment parentComment = commonBookCommentService.getById(commentId); + if (parentComment == null){ + return Result.error("要回复的评论不存在"); + } + + //增加回复评论信息 + CommonBookComment reply = new CommonBookComment(); + reply.setBookId(parentComment.getBookId()); + reply.setUserId(member.getId()); + reply.setComment(content.trim()); + reply.setToUserId(parentComment.getUserId()); + reply.setPid(commentId); + + // 如果是回复自己的评论,直接设置为已读 + if(member.getId().equals(parentComment.getUserId())){ + reply.setIsLook("Y"); + } else { + reply.setIsLook("N"); + } + + commonBookCommentService.save(reply); + return Result.OK("回复成功"); } - //修改评论为已读 + //修改评论为已读 - 更新自己所有未读评论变成已读 @Override - public Result updateCommentRead(String token, String commentId) { + public Result updateCommentRead(String token) { HanHaiMember member = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); - CommonBookComment commonBookComment = commonBookCommentService.getById(commentId); - if (commonBookComment == null) { - return Result.error("评论不存在"); + + // 批量更新当前用户的所有未读评论为已读 + boolean updated = commonBookCommentService.lambdaUpdate() + .eq(CommonBookComment::getToUserId, member.getId()) + .eq(CommonBookComment::getIsLook, "N") + .set(CommonBookComment::getIsLook, "Y") + .update(); + + if (updated) { + return Result.OK("所有评论已标记为已读"); + } else { + return Result.OK("没有未读评论需要更新"); } - commonBookComment.setIsLook("Y"); - commonBookCommentService.updateById(commonBookComment); - return Result.OK("更新成功"); } @@ -213,21 +264,33 @@ public class AppletCommentServiceImpl implements AppletCommentService { @Override public Result getCommentDetail(String token, String commentId) { HanHaiMember member = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); + + if(StringUtils.isBlank(commentId)){ + return Result.error("评论ID不能为空"); + } + CommonBookComment commonBookComment = commonBookCommentService.getById(commentId); if (commonBookComment == null) { return Result.error("评论不存在"); } + //设置用户信息 HanHaiMember hanHaiMember = hanHaiMemberService.getById(commonBookComment.getUserId()); commonBookComment.setHanHaiMember(hanHaiMember); commonBookComment.setCommonShop(commonShopService.getById(commonBookComment.getBookId())); - List list = commonBookCommentService.lambdaQuery().eq(CommonBookComment::getPid, commentId).list(); + + // 查询回复列表并设置用户信息 + List replyList = commonBookCommentService.lambdaQuery() + .eq(CommonBookComment::getPid, commentId) + .orderByAsc(CommonBookComment::getCreateTime) // 按时间升序排列回复 + .list(); + //循环写入用户信息 - for (CommonBookComment bookComment : list) { - bookComment.setHanHaiMember(hanHaiMemberService.getById(bookComment.getUserId())); + for (CommonBookComment reply : replyList) { + reply.setHanHaiMember(hanHaiMemberService.getById(reply.getUserId())); } - commonBookComment.setChildren(list); - return Result.OK(commonBookComment); + commonBookComment.setChildren(replyList); + return Result.OK("查询成功", commonBookComment); } } diff --git a/module-common/src/main/java/org/jeecg/api/service/impl/AppletMyBookServiceImpl.java b/module-common/src/main/java/org/jeecg/api/service/impl/AppletMyBookServiceImpl.java index 25eab6f..5550bd8 100644 --- a/module-common/src/main/java/org/jeecg/api/service/impl/AppletMyBookServiceImpl.java +++ b/module-common/src/main/java/org/jeecg/api/service/impl/AppletMyBookServiceImpl.java @@ -23,6 +23,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; +import java.util.List; @Service public class AppletMyBookServiceImpl implements AppletMyBookService { @@ -147,11 +148,40 @@ public class AppletMyBookServiceImpl implements AppletMyBookService { } commonBookNovel.setBookId(commonShop.getId()); commonBookNovel.setUserId(hanHaiMember.getId()); + + // 自动计算章节字数 + if (StringUtils.isNotBlank(commonBookNovel.getDetails())) { + // 去除HTML标签和空白字符后计算字数 + String content = commonBookNovel.getDetails() + .replaceAll("<[^>]*>", "") // 去除HTML标签 + .replaceAll("\\s+", ""); // 去除空白字符 + commonBookNovel.setNum(content.length()); + } else { + commonBookNovel.setNum(0); + } + if(StringUtils.isEmpty(commonBookNovel.getId())){ + + if (null == commonBookNovel.getSort()){ + List list = commonBookNovelService.lambdaQuery() + .orderByDesc(CommonBookNovel::getSort) + .select(CommonBookNovel::getSort) + .last("limit 1") + .list(); + + if (list.size() > 0 && list.get(0).getSort() != null){ + commonBookNovel.setSort(list.get(0).getSort() + 1); + } + } + commonBookNovelService.save(commonBookNovel); }else{ commonBookNovelService.updateById(commonBookNovel); } + + // 更新书籍总字数统计 + updateBookTotalWords(commonShop.getId()); + return Result.OK("编辑成功!"); } @@ -181,9 +211,44 @@ public class AppletMyBookServiceImpl implements AppletMyBookService { public Result deleteMyShopNovel(String token, String bookId, String novelId) { HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); commonBookNovelService.removeById(novelId); + + // 删除章节后也需要更新书籍总字数 + updateBookTotalWords(bookId); + return Result.OK("删除成功!"); } - + /** + * 更新书籍总字数统计 + * @param bookId 书籍ID + */ + private void updateBookTotalWords(String bookId) { + try { + // 查询该书籍的所有已发布章节,只查询字数字段 + List chapterList = commonBookNovelService.lambdaQuery() + .eq(CommonBookNovel::getBookId, bookId) + .eq(CommonBookNovel::getStatus, 1) // 假设1表示已发布状态 + .select(CommonBookNovel::getNum) // 只查询字数字段 + .list(); + + // 统计总字数 - 直接累加数据库中保存的章节字数 + int totalWords = 0; + for (CommonBookNovel chapter : chapterList) { + if (chapter.getNum() != null && chapter.getNum() > 0) { + totalWords += chapter.getNum(); + } + } + + // 更新书籍总字数 + CommonShop book = new CommonShop(); + book.setId(bookId); + book.setBookSum(totalWords); // 假设CommonShop有totalWords字段 + commonShopService.updateById(book); + + } catch (Exception e) { + // 字数统计失败不影响主要功能,只记录日志 + System.err.println("更新书籍字数统计失败: " + e.getMessage()); + } + } } diff --git a/module-common/src/main/java/org/jeecg/api/service/impl/AppletOrderServiceImpl.java b/module-common/src/main/java/org/jeecg/api/service/impl/AppletOrderServiceImpl.java index 346a57b..08876ae 100644 --- a/module-common/src/main/java/org/jeecg/api/service/impl/AppletOrderServiceImpl.java +++ b/module-common/src/main/java/org/jeecg/api/service/impl/AppletOrderServiceImpl.java @@ -2,6 +2,7 @@ package org.jeecg.api.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.jeecg.api.bean.PageBean; @@ -43,8 +44,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.util.List; -import static org.jeecg.modules.online.auth.b.a.c; -import static org.jeecg.modules.online.auth.b.a.i; +import static org.jeecg.modules.online.auth.b.a.*; @Service public class AppletOrderServiceImpl implements AppletOrderService { @@ -122,25 +122,46 @@ public class AppletOrderServiceImpl implements AppletOrderService { } - //传入礼物标识,数量创建打赏订单 - @Override - public Result createOrder(String token, String giftId, Integer num) { - HanHaiMember member = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); - return Result.OK("打赏订单创建成功"); - } - - //根据礼物订单进行打赏 - @Override - public Result payOrder(String token, String orderId) { - HanHaiMember member = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); - return Result.OK("打赏成功"); - } //支付成功支付回调 @Override - public Result paySuccess(String orderId) { - return Result.OK("支付成功"); + public Object payNotify(String requestBody) { + WxPayOrderNotifyResult notify = mpWxPayService.notify(requestBody); + String outTradeNo = notify.getOutTradeNo(); + //查询订单信息 + CommonOrder order = commonOrderService.lambdaQuery() + .eq(CommonOrder::getId, outTradeNo) + .one(); + + if (order == null){ + return Result.OK("支付成功"); + } + + //更新订单状态 + order.setStatus("1");//已付款 + commonOrderService.updateById(order); + + //更新豆豆 + HanHaiMember member = hanHaiMemberService.getById(order.getUserId()); + BigDecimal old = member.getIntegerPrice() == null ? BigDecimal.ZERO : member.getIntegerPrice(); + member.setIntegerPrice(old.add(new BigDecimal(order.getNum()).add(new BigDecimal(order.getGiveNum())))); + hanHaiMemberService.updateById(member); + + //添加流水记录 + commonMoneyLogService.save(CommonMoneyLog.builder() + .title(order.getTitle()) + .oldMoney(old) + .money(new BigDecimal(order.getNum()).add(new BigDecimal(order.getGiveNum()))) + .type(0)//收入豆豆 + .state(1)//已到账 + .userId(member.getId()) + .build()); + + return "" + + " " + + " " + + " "; } @@ -159,25 +180,28 @@ public class AppletOrderServiceImpl implements AppletOrderService { return Result.error("套餐不存在"); } + int num = commonPackage.getNum() == null ? 0 : commonPackage.getNum().intValue(); + int give = commonPackage.getGiveNum() == null ? 0 : commonPackage.getGiveNum().intValue(); CommonOrder order = CommonOrder.builder() - .num(commonPackage.getNum().intValue()) - .giveNum(commonPackage.getGiveNum().intValue()) + .num(num) + .giveNum(give) .packageId(commonPackage.getId()) .price(commonPackage.getMoney()) .userId(member.getId()) - .title(commonPackage.getTitle()) + .title("充值豆豆") .status("0") .build(); commonOrderService.save(order); + //吊起微信支付 int i = order.getPrice().multiply(new BigDecimal(100)).intValue(); Object appOrder = mpWxPayService.createOrder( - commonPackage.getTitle(), + "充值豆豆", "127.0.0.1", - commonPackage.getId(), + order.getId(), i, order.getId(), member.getAppletOpenid(), diff --git a/module-common/src/main/java/org/jeecg/api/service/impl/AppletTaskServiceImpl.java b/module-common/src/main/java/org/jeecg/api/service/impl/AppletTaskServiceImpl.java index cc9aa3c..a705a4e 100644 --- a/module-common/src/main/java/org/jeecg/api/service/impl/AppletTaskServiceImpl.java +++ b/module-common/src/main/java/org/jeecg/api/service/impl/AppletTaskServiceImpl.java @@ -8,6 +8,10 @@ import org.jeecg.api.service.AppletTaskService; import org.jeecg.common.api.vo.Result; import org.jeecg.common.util.DateUtils; import org.jeecg.config.shiro.ShiroRealm; +import org.jeecg.modules.commonBookComment.entity.CommonBookComment; +import org.jeecg.modules.commonBookComment.service.ICommonBookCommentService; +import org.jeecg.modules.commonChapterReadRecord.entity.CommonChapterReadRecord; +import org.jeecg.modules.commonChapterReadRecord.service.ICommonChapterReadRecordService; import org.jeecg.modules.commonSign.entity.CommonSign; import org.jeecg.modules.commonSign.service.ICommonSignService; import org.jeecg.modules.commonSignLog.entity.CommonSignLog; @@ -22,6 +26,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; +import java.util.Calendar; import java.util.Date; import java.util.List; @@ -40,6 +45,10 @@ public class AppletTaskServiceImpl implements AppletTaskService { private ICommonSignService commonSignService; @Resource private ICommonSignLogService commonSignLogService; + @Resource + private ICommonBookCommentService commentService; + @Resource + private ICommonChapterReadRecordService chapterReadRecordService; //获取我的推荐票数量 @@ -52,6 +61,7 @@ public class AppletTaskServiceImpl implements AppletTaskService { // 获取打卡任务列表 @Override public Result getSignTaskList(String token){ + List list = commonSignService .lambdaQuery() .orderByAsc(CommonSign::getSort) @@ -59,19 +69,15 @@ public class AppletTaskServiceImpl implements AppletTaskService { if(StringUtils.isNotBlank(token)){ HanHaiMember member = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); - //循环增加打卡记录 + //循环增加本周打卡记录 for (CommonSign sign : list) { sign.setCommonSignLog( - commonSignLogService - .lambdaQuery() - .eq(CommonSignLog::getUserId, member.getId()) - .eq(CommonSignLog::getSignId, sign.getId()) - .one() + signGetLog(sign, member) ); } } - return Result.OK("打卡任务列表",list); + return Result.OK("本周打卡任务列表",list); } @@ -87,6 +93,38 @@ public class AppletTaskServiceImpl implements AppletTaskService { return Result.OK("签到记录",commonSignLogs); } + /** + * 判断当天是否已经打卡 + * @param sign 打卡信息 + * @param member 会员信息 + * @return 打卡记录 + */ + public CommonSignLog signGetLog(CommonSign sign, HanHaiMember member){ + // 获取本周开始和结束时间 + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + Date weekStart = calendar.getTime(); + + calendar.add(Calendar.DAY_OF_MONTH, 7); // 修复:使用正确的常量添加7天 + Date weekEnd = calendar.getTime(); + + // 使用 list().stream().findFirst().orElse(null) 替代 one() 避免多条记录异常 + List signLogs = commonSignLogService + .lambdaQuery() + .eq(CommonSignLog::getUserId, member.getId()) + .eq(CommonSignLog::getSignId, sign.getId()) + .ge(CommonSignLog::getCreateTime, weekStart) + .lt(CommonSignLog::getCreateTime, weekEnd) + .orderByDesc(CommonSignLog::getCreateTime) // 按创建时间降序排列,取最新的一条 + .list(); + + return signLogs.isEmpty() ? null : signLogs.get(0); + } + //点击打卡签到 @Override @@ -96,25 +134,23 @@ public class AppletTaskServiceImpl implements AppletTaskService { return Result.error("签到任务ID不能为空"); } //查询该签到任务是否存在 - CommonSign sign = commonSignService.lambdaQuery() - .eq(CommonSign::getId,signId) - .one(); + CommonSign sign = commonSignService.getById(signId); + if(null==sign){ return Result.error("签到任务不存在"); } + //查询该任务是否已签到 - CommonSignLog commonSignLog = commonSignLogService.lambdaQuery() - .eq(CommonSignLog::getSignId,signId) - .eq(CommonSignLog::getUserId,hanHaiMember.getId()) - .one(); - if(null!=commonSignLog){ + if(null != signGetLog(sign, hanHaiMember)){ return Result.error("该任务已签到"); } + CommonSignLog signLog = new CommonSignLog(); signLog.setCreateTime(new Date()); signLog.setSignId(signId); signLog.setUserId(hanHaiMember.getId()); commonSignLogService.save(signLog); + //获得任务推荐票 if(null!=sign.getNum()){ hanHaiMember.setMoney(hanHaiMember.getMoney().add(new BigDecimal(sign.getNum()))); @@ -134,19 +170,96 @@ public class AppletTaskServiceImpl implements AppletTaskService { if(StringUtils.isNotBlank(token)){ HanHaiMember member = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); //循环增加打卡记录 - for (CommonTask sign : list) { - sign.setCommonTaskLog( - commonTaskLogService - .lambdaQuery() - .eq(CommonTaskLog::getUserId, member.getId()) - .eq(CommonTaskLog::getTaskId, sign.getId()) - .one() - ); + for (CommonTask task : list) { + + // 是否已经领取任务 + task.setCommonTaskLog(taskGetLog(task, member)); + + // 判断是否可以领取任务 + task.setIsTask(canClaimedTask(task, member)); } } return Result.OK("更多任务",list); } + // 判断是否可以领取任务 + public boolean canClaimedTask(CommonTask task, HanHaiMember member){ + // 获取当前时间 + Calendar calendar = Calendar.getInstance(); + // 设置为今天凌晨0点 + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + Date todayStart = calendar.getTime(); + + // 设置为明天凌晨0点 + calendar.add(Calendar.DAY_OF_MONTH, 1); + Date tomorrowStart = calendar.getTime(); + + if ("key_comment".equals(task.getKeyName())){ + //每日首条评论 + + // 查询今日是否已有评论 + long commentCount = commentService.lambdaQuery() + .eq(CommonBookComment::getUserId, member.getId()) + .ge(CommonBookComment::getCreateTime, todayStart) + .lt(CommonBookComment::getCreateTime, tomorrowStart) + .count(); + + return commentCount > 0; + + }else if ("key_chapter".equals(task.getKeyName())){ + //每日首阅三个章节 + + // 查询今日阅读章节数 + long chapterCount = chapterReadRecordService.lambdaQuery() + .eq(CommonChapterReadRecord::getUserId, member.getId()) + .ge(CommonChapterReadRecord::getCreateTime, todayStart) + .lt(CommonChapterReadRecord::getCreateTime, tomorrowStart) + .count(); + + return chapterCount >= 3; + }else if ("key_advertisement".equals(task.getKeyName())){ + // TODO 观看视频广告 + } + + return false; + } + + + /** + * 判断当天是否已经领取任务 + * @param task 任务信息 + * @param member 会员信息 + * @return 任务领取记录 + */ + public CommonTaskLog taskGetLog(CommonTask task, HanHaiMember member){ + // 获取当前时间 + Calendar calendar = Calendar.getInstance(); + // 设置为今天凌晨0点 + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + Date todayStart = calendar.getTime(); + + // 设置为明天凌晨0点 + calendar.add(Calendar.DAY_OF_MONTH, 1); + Date tomorrowStart = calendar.getTime(); + + // 使用 list() 替代 one() 避免多条记录异常 + List taskLogs = commonTaskLogService + .lambdaQuery() + .eq(CommonTaskLog::getUserId, member.getId()) + .eq(CommonTaskLog::getTaskId, task.getId()) + .ge(CommonTaskLog::getCreateTime, todayStart) // 大于等于今天凌晨 + .lt(CommonTaskLog::getCreateTime, tomorrowStart) // 小于明天凌晨 + .orderByDesc(CommonTaskLog::getCreateTime) // 按创建时间降序排列,取最新的一条 + .list(); + + return taskLogs.isEmpty() ? null : taskLogs.get(0); + } //获取更多任务记录列表带分页 @Override @@ -169,29 +282,27 @@ public class AppletTaskServiceImpl implements AppletTaskService { if(StringUtils.isBlank(taskId)){ return Result.error("领取任务ID不能为空"); } - //查询该签到任务是否存在 - CommonTask task = commonTaskService.lambdaQuery() - .eq(CommonTask::getId,taskId) - .one(); + + //查询该任务是否存在 + CommonTask task = commonTaskService.getById(taskId); + if(null==task){ return Result.error("领取任务不存在"); } + //查询该任务是否已签到 - CommonTaskLog commonTaskLog = commonTaskLogService.lambdaQuery() - .eq(CommonTaskLog::getTaskId,taskId) - .eq(CommonTaskLog::getUserId,hanHaiMember.getId()) - .one(); - if(null!=commonTaskLog){ + if(null != taskGetLog(task, hanHaiMember)){ return Result.error("该任务已领取"); } + CommonTaskLog taskLog = new CommonTaskLog(); taskLog.setCreateTime(new Date()); taskLog.setTaskId(taskId); taskLog.setUserId(hanHaiMember.getId()); commonTaskLogService.save(taskLog); //获得任务推荐票 - if(null!=taskLog.getNum()){ - hanHaiMember.setMoney(hanHaiMember.getMoney().add(new BigDecimal(taskLog.getNum()))); + if(null!=task.getNum()){ + hanHaiMember.setMoney(hanHaiMember.getMoney().add(new BigDecimal(task.getNum()))); hanHaiMemberService.updateById(hanHaiMember); } return Result.OK("领取成功"); @@ -203,15 +314,30 @@ public class AppletTaskServiceImpl implements AppletTaskService { @Override public Result getSignTaskToday(String token){ HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); + + // 获取当前时间 + Calendar calendar = Calendar.getInstance(); + // 设置为今天凌晨0点 + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + Date todayStart = calendar.getTime(); + + // 设置为明天凌晨0点 + calendar.add(Calendar.DAY_OF_MONTH, 1); + Date tomorrowStart = calendar.getTime(); + //查询当天我是否有签到记录 CommonSignLog c = commonSignLogService.lambdaQuery() .eq(CommonSignLog::getUserId,hanHaiMember.getId()) - .eq(CommonSignLog::getCreateTime, DateUtils.getDate()) + .ge(CommonSignLog::getCreateTime, todayStart) // 大于等于今天凌晨 + .lt(CommonSignLog::getCreateTime, tomorrowStart) // 小于明天凌晨 .one(); if(c!=null){ - return Result.OK("今天已签到",true); + return Result.OK("今天已签到",false); }else{ - return Result.OK("今天未签到",false); + return Result.OK("今天未签到",true); } } } diff --git a/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/controller/CommonChapterReadRecordController.java b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/controller/CommonChapterReadRecordController.java new file mode 100644 index 0000000..16a0b67 --- /dev/null +++ b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/controller/CommonChapterReadRecordController.java @@ -0,0 +1,171 @@ +package org.jeecg.modules.commonChapterReadRecord.controller; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.commonChapterReadRecord.entity.CommonChapterReadRecord; +import org.jeecg.modules.commonChapterReadRecord.service.ICommonChapterReadRecordService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.jeecg.common.aspect.annotation.AutoLog; + + /** + * @Description: 章节阅读记录 + * @Author: jeecg-boot + * @Date: 2025-06-30 + * @Version: V1.0 + */ +@Api(tags="章节阅读记录") +@RestController +@RequestMapping("/commonChapterReadRecord/commonChapterReadRecord") +@Slf4j +public class CommonChapterReadRecordController extends JeecgController { + @Autowired + private ICommonChapterReadRecordService commonChapterReadRecordService; + + /** + * 分页列表查询 + * + * @param commonChapterReadRecord + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "章节阅读记录-分页列表查询") + @ApiOperation(value="章节阅读记录-分页列表查询", notes="章节阅读记录-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(CommonChapterReadRecord commonChapterReadRecord, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(commonChapterReadRecord, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = commonChapterReadRecordService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param commonChapterReadRecord + * @return + */ + @AutoLog(value = "章节阅读记录-添加") + @ApiOperation(value="章节阅读记录-添加", notes="章节阅读记录-添加") + @PostMapping(value = "/add") + public Result add(@RequestBody CommonChapterReadRecord commonChapterReadRecord) { + commonChapterReadRecordService.save(commonChapterReadRecord); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param commonChapterReadRecord + * @return + */ + @AutoLog(value = "章节阅读记录-编辑") + @ApiOperation(value="章节阅读记录-编辑", notes="章节阅读记录-编辑") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody CommonChapterReadRecord commonChapterReadRecord) { + commonChapterReadRecordService.updateById(commonChapterReadRecord); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "章节阅读记录-通过id删除") + @ApiOperation(value="章节阅读记录-通过id删除", notes="章节阅读记录-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + commonChapterReadRecordService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "章节阅读记录-批量删除") + @ApiOperation(value="章节阅读记录-批量删除", notes="章节阅读记录-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.commonChapterReadRecordService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "章节阅读记录-通过id查询") + @ApiOperation(value="章节阅读记录-通过id查询", notes="章节阅读记录-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + CommonChapterReadRecord commonChapterReadRecord = commonChapterReadRecordService.getById(id); + if(commonChapterReadRecord==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(commonChapterReadRecord); + } + + /** + * 导出excel + * + * @param request + * @param commonChapterReadRecord + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, CommonChapterReadRecord commonChapterReadRecord) { + return super.exportXls(request, commonChapterReadRecord, CommonChapterReadRecord.class, "章节阅读记录"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, CommonChapterReadRecord.class); + } + +} diff --git a/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/entity/CommonChapterReadRecord.java b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/entity/CommonChapterReadRecord.java new file mode 100644 index 0000000..9c0df60 --- /dev/null +++ b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/entity/CommonChapterReadRecord.java @@ -0,0 +1,65 @@ +package org.jeecg.modules.commonChapterReadRecord.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 章节阅读记录 + * @Author: jeecg-boot + * @Date: 2025-06-30 + * @Version: V1.0 + */ +@Data +@TableName("common_chapter_read_record") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="common_chapter_read_record对象", description="章节阅读记录") +public class CommonChapterReadRecord implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private java.lang.String id; + /**创建人*/ + @ApiModelProperty(value = "创建人") + private java.lang.String createBy; + /**创建日期*/ + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + /**更新人*/ + @ApiModelProperty(value = "更新人") + private java.lang.String updateBy; + /**更新日期*/ + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + /**所属部门*/ + @ApiModelProperty(value = "所属部门") + private java.lang.String sysOrgCode; + /**书籍*/ + @Excel(name = "书籍", width = 15) + @ApiModelProperty(value = "书籍") + private java.lang.String bookId; + /**用户*/ + @Excel(name = "用户", width = 15) + @ApiModelProperty(value = "用户") + private java.lang.String userId; + /**章节*/ + @Excel(name = "章节", width = 15) + @ApiModelProperty(value = "章节") + private java.lang.String chapterId; +} diff --git a/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/mapper/CommonChapterReadRecordMapper.java b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/mapper/CommonChapterReadRecordMapper.java new file mode 100644 index 0000000..9e5a171 --- /dev/null +++ b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/mapper/CommonChapterReadRecordMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.commonChapterReadRecord.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.commonChapterReadRecord.entity.CommonChapterReadRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 章节阅读记录 + * @Author: jeecg-boot + * @Date: 2025-06-30 + * @Version: V1.0 + */ +public interface CommonChapterReadRecordMapper extends BaseMapper { + +} diff --git a/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/mapper/xml/CommonChapterReadRecordMapper.xml b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/mapper/xml/CommonChapterReadRecordMapper.xml new file mode 100644 index 0000000..2462bc3 --- /dev/null +++ b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/mapper/xml/CommonChapterReadRecordMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/service/ICommonChapterReadRecordService.java b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/service/ICommonChapterReadRecordService.java new file mode 100644 index 0000000..ccea524 --- /dev/null +++ b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/service/ICommonChapterReadRecordService.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.commonChapterReadRecord.service; + +import org.jeecg.modules.commonChapterReadRecord.entity.CommonChapterReadRecord; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 章节阅读记录 + * @Author: jeecg-boot + * @Date: 2025-06-30 + * @Version: V1.0 + */ +public interface ICommonChapterReadRecordService extends IService { + + // 添加章节阅读记录 + void addChapterReadRecord(String id, String bookId, String chapterId); + +} diff --git a/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/service/impl/CommonChapterReadRecordServiceImpl.java b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/service/impl/CommonChapterReadRecordServiceImpl.java new file mode 100644 index 0000000..a828745 --- /dev/null +++ b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/service/impl/CommonChapterReadRecordServiceImpl.java @@ -0,0 +1,48 @@ +package org.jeecg.modules.commonChapterReadRecord.service.impl; + +import org.jeecg.modules.commonChapterReadRecord.entity.CommonChapterReadRecord; +import org.jeecg.modules.commonChapterReadRecord.mapper.CommonChapterReadRecordMapper; +import org.jeecg.modules.commonChapterReadRecord.service.ICommonChapterReadRecordService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import java.util.Date; + +/** + * @Description: 章节阅读记录 + * @Author: jeecg-boot + * @Date: 2025-06-30 + * @Version: V1.0 + */ +@Service +public class CommonChapterReadRecordServiceImpl extends ServiceImpl implements ICommonChapterReadRecordService { + + // 添加章节阅读记录 + @Override + public void addChapterReadRecord(String userId, String bookId, String chapterId) { + // 查询是否已存在相同用户、书籍、章节的阅读记录 + CommonChapterReadRecord existingRecord = this.lambdaQuery() + .eq(CommonChapterReadRecord::getUserId, userId) + .eq(CommonChapterReadRecord::getBookId, bookId) + .eq(CommonChapterReadRecord::getChapterId, chapterId) + .one(); + + if (existingRecord != null) { + // 如果完全相同的记录已存在,只更新时间 + existingRecord.setUpdateTime(new Date()); + this.updateById(existingRecord); + } else { + // 如果记录不存在,创建新记录(每个章节都会创建独立记录) + CommonChapterReadRecord newRecord = new CommonChapterReadRecord(); + newRecord.setUserId(userId); + newRecord.setBookId(bookId); + newRecord.setChapterId(chapterId); + newRecord.setCreateTime(new Date()); + newRecord.setUpdateTime(new Date()); + this.save(newRecord); + } + } + + +} diff --git a/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue/CommonChapterReadRecordList.vue b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue/CommonChapterReadRecordList.vue new file mode 100644 index 0000000..91f3d7a --- /dev/null +++ b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue/CommonChapterReadRecordList.vue @@ -0,0 +1,189 @@ + + + + \ No newline at end of file diff --git a/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue/modules/CommonChapterReadRecordForm.vue b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue/modules/CommonChapterReadRecordForm.vue new file mode 100644 index 0000000..cd73385 --- /dev/null +++ b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue/modules/CommonChapterReadRecordForm.vue @@ -0,0 +1,114 @@ + + + \ No newline at end of file diff --git a/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue/modules/CommonChapterReadRecordModal.Style#Drawer.vue b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue/modules/CommonChapterReadRecordModal.Style#Drawer.vue new file mode 100644 index 0000000..37a2308 --- /dev/null +++ b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue/modules/CommonChapterReadRecordModal.Style#Drawer.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue/modules/CommonChapterReadRecordModal.vue b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue/modules/CommonChapterReadRecordModal.vue new file mode 100644 index 0000000..ef4a011 --- /dev/null +++ b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue/modules/CommonChapterReadRecordModal.vue @@ -0,0 +1,60 @@ + + + \ No newline at end of file diff --git a/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue3/CommonChapterReadRecord.api.ts b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue3/CommonChapterReadRecord.api.ts new file mode 100644 index 0000000..aeecf70 --- /dev/null +++ b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue3/CommonChapterReadRecord.api.ts @@ -0,0 +1,61 @@ +import {defHttp} from '/@/utils/http/axios'; +import {Modal} from 'ant-design-vue'; + +enum Api { + list = '/commonChapterReadRecord/commonChapterReadRecord/list', + save='/commonChapterReadRecord/commonChapterReadRecord/add', + edit='/commonChapterReadRecord/commonChapterReadRecord/edit', + deleteOne = '/commonChapterReadRecord/commonChapterReadRecord/delete', + deleteBatch = '/commonChapterReadRecord/commonChapterReadRecord/deleteBatch', + importExcel = '/commonChapterReadRecord/commonChapterReadRecord/importExcel', + exportXls = '/commonChapterReadRecord/commonChapterReadRecord/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + Modal.confirm({ + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue3/CommonChapterReadRecord.data.ts b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue3/CommonChapterReadRecord.data.ts new file mode 100644 index 0000000..4d1e300 --- /dev/null +++ b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue3/CommonChapterReadRecord.data.ts @@ -0,0 +1,48 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '创建日期', + align:"center", + dataIndex: 'createTime' + }, + { + title: '书籍', + align:"center", + dataIndex: 'bookId' + }, + { + title: '用户', + align:"center", + dataIndex: 'userId' + }, + { + title: '章节', + align:"center", + dataIndex: 'chapterId' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '书籍', + field: 'bookId', + component: 'Input', + }, + { + label: '用户', + field: 'userId', + component: 'Input', + }, + { + label: '章节', + field: 'chapterId', + component: 'Input', + }, +]; diff --git a/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue3/CommonChapterReadRecordList.vue b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue3/CommonChapterReadRecordList.vue new file mode 100644 index 0000000..6969528 --- /dev/null +++ b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue3/CommonChapterReadRecordList.vue @@ -0,0 +1,162 @@ + + + + + \ No newline at end of file diff --git a/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue3/components/CommonChapterReadRecordModal.vue b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue3/components/CommonChapterReadRecordModal.vue new file mode 100644 index 0000000..0e04318 --- /dev/null +++ b/module-common/src/main/java/org/jeecg/modules/commonChapterReadRecord/vue3/components/CommonChapterReadRecordModal.vue @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file diff --git a/module-common/src/main/java/org/jeecg/modules/commonShop/entity/CommonShop.java b/module-common/src/main/java/org/jeecg/modules/commonShop/entity/CommonShop.java index b08762e..daa62a1 100644 --- a/module-common/src/main/java/org/jeecg/modules/commonShop/entity/CommonShop.java +++ b/module-common/src/main/java/org/jeecg/modules/commonShop/entity/CommonShop.java @@ -106,5 +106,6 @@ public class CommonShop implements Serializable { @ApiModelProperty(value = "作品状态") private java.lang.Integer bookStatus; + //字数 private java.lang.Integer bookSum; } diff --git a/module-common/src/main/java/org/jeecg/modules/commonTask/entity/CommonTask.java b/module-common/src/main/java/org/jeecg/modules/commonTask/entity/CommonTask.java index 56c1440..053690c 100644 --- a/module-common/src/main/java/org/jeecg/modules/commonTask/entity/CommonTask.java +++ b/module-common/src/main/java/org/jeecg/modules/commonTask/entity/CommonTask.java @@ -69,5 +69,8 @@ public class CommonTask implements Serializable { @TableField(exist = false) - private CommonTaskLog commonTaskLog; + private CommonTaskLog commonTaskLog;//是否已经领取 + + @TableField(exist = false) + private Boolean isTask;//是否可以领取 } diff --git a/module-system/src/main/resources/pay_weixin.properties b/module-system/src/main/resources/pay_weixin.properties index e7eee2d..2f3f3d7 100644 --- a/module-system/src/main/resources/pay_weixin.properties +++ b/module-system/src/main/resources/pay_weixin.properties @@ -2,9 +2,7 @@ pay.mchId=1711831449 pay.appId=wxd21ddb1fbf3f5150 pay.mchKey=0fdb77429ffdf206c151af76a663041c pay.keyPath=classpath:apiclient_cert.pem -pay.notifyUrl=https://prod-api.budingxiaoshuo.com/novel-admin/order/payNotify -pay.notifyUrlDev=https://prod-api.budingxiaoshuo.com/novel-admin/order/payNotify -pay.notifyOneUrl=https://prod-api.budingxiaoshuo.com/novel-admin/order/payNotify -pay.notifyUrlOneDev=https://prod-api.budingxiaoshuo.com/novel-admin/order/payNotify - - +pay.notifyUrl=https://prod-api.budingxiaoshuo.com/novel-admin/my_order/payNotify +pay.notifyUrlDev=https://prod-api.budingxiaoshuo.com/novel-admin/my_order/payNotify +pay.notifyOneUrl=https://prod-api.budingxiaoshuo.com/novel-admin/my_order/payNotify +pay.notifyUrlOneDev= http://h5.xzaiyp.top/novel-admin/my_order/payNotify