diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppMemberController.java b/ruoyi-admin/src/main/java/org/dromara/app/AppMemberController.java index e6ec00b42..9bbd8e6ae 100644 --- a/ruoyi-admin/src/main/java/org/dromara/app/AppMemberController.java +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppMemberController.java @@ -19,6 +19,13 @@ import com.wzj.soopin.member.service.IAccountBillService; import com.wzj.soopin.member.service.IMemberAccountService; import com.wzj.soopin.member.service.IMemberBankService; import com.wzj.soopin.member.service.IMemberService; +import com.wzj.soopin.transaction.convert.ChargeConvert; +import com.wzj.soopin.transaction.convert.WithdrawConvert; +import com.wzj.soopin.transaction.domain.bo.ChargeBO; +import com.wzj.soopin.transaction.domain.bo.WithdrawBO; +import com.wzj.soopin.transaction.enums.WithdrawType; +import com.wzj.soopin.transaction.service.IChargeService; +import com.wzj.soopin.transaction.service.IWithdrawService; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import me.zhyd.oauth.model.AuthResponse; @@ -30,6 +37,8 @@ import org.dromara.common.core.domain.model.SocialLoginBody; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.ValidatorUtils; import org.dromara.common.json.utils.JsonUtils; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.social.config.properties.SocialProperties; import org.dromara.common.social.utils.SocialUtils; @@ -56,7 +65,11 @@ public class AppMemberController { private final IMemberBankService memberBankService; private final MemberBankConvert memberBankConvert; + private final IChargeService chargeService; + private final ChargeConvert chargeConvert; + private final IWithdrawService withdrawService; + private final WithdrawConvert withdrawConvert; @Tag(name = "获取会员账户信息详细信息") @GetMapping(value = "/info") @@ -145,4 +158,35 @@ public class AppMemberController { return R.ok(authUserData.getToken()); } + @Tag(name = "充值") + @Log(title = "新增 ", businessType = BusinessType.INSERT) + @PostMapping("/charge") + public R charge(@RequestBody ChargeBO bo) { + + //获取用户信息 + LoginUser loginUser = LoginHelper.getLoginUser(); + if (loginUser == null) { + throw new ServiceException("用户未登录"); + } + Long memberId = loginUser.getUserId(); + bo.setMemberId(memberId); + + return R.ok(chargeService.charge(chargeConvert.toPo(bo))); + } + @Tag(name = "提现") + @Log(title = "提现 ", businessType = BusinessType.INSERT) + @PostMapping("/withdraw") + public R withdraw(@RequestBody WithdrawBO bo) { + //获取用户信息 + LoginUser loginUser = LoginHelper.getLoginUser(); + if (loginUser == null) { + throw new ServiceException("用户未登录"); + } + Long memberId = loginUser.getUserId(); + bo.setMemberId(memberId); + bo.setType(WithdrawType.WALLET.getCode()); + return R.ok(withdrawService.withdrawWallet(withdrawConvert.toPo(bo))); + } + + } diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppOrderController.java b/ruoyi-admin/src/main/java/org/dromara/app/AppOrderController.java new file mode 100644 index 000000000..41c07c2a8 --- /dev/null +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppOrderController.java @@ -0,0 +1,76 @@ +package org.dromara.app; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.wzj.soopin.content.domain.bo.IndexListBO; +import com.wzj.soopin.content.domain.bo.MyListBO; +import com.wzj.soopin.content.domain.bo.SimpleListBO; +import com.wzj.soopin.content.domain.bo.VlogBO; +import com.wzj.soopin.content.service.VlogService; +import com.wzj.soopin.content.service.VlogUploadService; +import com.wzj.soopin.content.utils.PagedGridResult; +import com.wzj.soopin.content.utils.QcCloud; +import com.wzj.soopin.content.utils.RedisOperator; +import com.wzj.soopin.order.domain.bo.OrderBo; +import com.wzj.soopin.order.domain.entity.Order; +import com.wzj.soopin.order.domain.vo.OrderVO; +import com.wzj.soopin.order.service.OrderItemService; +import com.wzj.soopin.order.service.impl.OrderServiceImpl; +import io.swagger.annotations.Api; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.domain.model.LoginUser; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.satoken.utils.LoginHelper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static com.wzj.soopin.content.domain.base.BaseInfoProperties.*; + + +@Slf4j +@Api(tags = "订单相关接口") +@RequestMapping("/app/order") +@RestController +@RequiredArgsConstructor +public class AppOrderController { + + private final OrderServiceImpl orderService; + + private final OrderItemService orderItemService; + + + public RedisOperator redis; + @Tag(name ="查询订单列表") + @PostMapping("/page") + public R> list(@RequestBody OrderBo query, Page page){ + return R.ok(orderService.getlist(page,query)); + } + + @Tag(name ="新增订单表") + @Log(title = "订单表", businessType = BusinessType.INSERT) + @PostMapping("/add") + public R add(@RequestBody Order order) { + R result = orderService.insert(order); + + if (result != null) { + // 订单创建成功,发送消息 + orderService.sendMessage(order); + log.info("订单创建成功,消息已发送,订单ID: {}", order.getId()); + } else { + log.warn("订单创建失败: {}", "返回结果为null"); + } + return result; + } + +} diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppPayController.java b/ruoyi-admin/src/main/java/org/dromara/app/AppPayController.java new file mode 100644 index 000000000..f0fec3a6d --- /dev/null +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppPayController.java @@ -0,0 +1,105 @@ +package org.dromara.app; + +import com.wzj.soopin.transaction.enums.PaymentClientEnum; +import com.wzj.soopin.transaction.enums.PaymentMethodEnum; +import com.wzj.soopin.transaction.kit.CashierSupport; +import com.wzj.soopin.transaction.kit.dto.PayParam; +import com.wzj.soopin.transaction.kit.params.dto.CashierParam; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.constant.ResultCode; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.exception.ServiceException; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + + +/** + * 买家端,收银台接口 + * + * @author Chopper + * @since 2020-12-18 16:59 + */ +@Slf4j +@RestController +@Api(tags = "买家端,收银台接口") +@RequestMapping("/app/payment") +@RequiredArgsConstructor +public class AppPayController { + + + private final CashierSupport cashierSupport; + + +// @ApiImplicitParams({ +// @ApiImplicitParam(name = "client", value = "客户端类型", paramType = "path", allowableValues = "PC,H5,WECHAT_MP,APP") +// }) + @PostMapping(value = "/tradeDetail") + @ApiOperation(value = "获取支付详情") + public R paymentParams(@RequestBody @Validated PayParam payParam) { + + CashierParam cashierParam = cashierSupport.cashierParam(payParam); + return R.ok( cashierParam); + } + + + @ApiImplicitParams({ + @ApiImplicitParam(name = "paymentMethod", value = "支付方式", paramType = "path", allowableValues = "WECHAT,ALIPAY"), + @ApiImplicitParam(name = "paymentClient", value = "调起方式", paramType = "path", allowableValues = "APP,NATIVE,JSAPI,H5,MP") + }) + + @PostMapping(value = "/pay") + @ApiOperation(value = "支付") + public R payment( + HttpServletRequest request, + HttpServletResponse response, + @RequestBody @Validated PayParam payParam) { + PaymentMethodEnum paymentMethodEnum = PaymentMethodEnum.valueOf(payParam.getPaymentMethod()); + PaymentClientEnum paymentClientEnum = PaymentClientEnum.valueOf(payParam.getPaymentClient()); + + try { + return cashierSupport.payment(paymentMethodEnum, paymentClientEnum, request, response, payParam); + } catch (ServiceException se) { + log.info("支付异常", se); + throw se; + } catch (Exception e) { + log.error("收银台支付错误", e); + } + return null; + + + } + + @ApiOperation(value = "支付回调") + @RequestMapping(value = "/callback/{paymentMethod}", method = {RequestMethod.GET, RequestMethod.POST}) + public R callback(HttpServletRequest request, @PathVariable String paymentMethod) { + + PaymentMethodEnum paymentMethodEnum = PaymentMethodEnum.valueOf(paymentMethod); + + cashierSupport.callback(paymentMethodEnum, request); + + return R.ok(ResultCode.PAY_SUCCESS); + } + + @ApiOperation(value = "支付异步通知") + @RequestMapping(value = "/notify/{paymentMethod}", method = {RequestMethod.GET, RequestMethod.POST}) + public void notify(HttpServletRequest request, @PathVariable String paymentMethod) { + + PaymentMethodEnum paymentMethodEnum = PaymentMethodEnum.valueOf(paymentMethod); + + cashierSupport.notify(paymentMethodEnum, request); + + } + + @ApiOperation(value = "查询支付结果") + @GetMapping(value = "/result") + public R paymentResult(PayParam payParam) { + return R.ok(cashierSupport.paymentResult(payParam)); + } +} diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppProductCategoryController.java b/ruoyi-admin/src/main/java/org/dromara/app/AppProductCategoryController.java index 58aebf51b..c5b2f0701 100644 --- a/ruoyi-admin/src/main/java/org/dromara/app/AppProductCategoryController.java +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppProductCategoryController.java @@ -14,9 +14,11 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @Tag(name ="商品分类接口列表") @RestController -@RequestMapping("/app/productCategory") +@RequestMapping("/app/product/category") @RequiredArgsConstructor public class AppProductCategoryController { @@ -30,5 +32,11 @@ public class AppProductCategoryController { Page productCategoryPage = service.page(page,query.toWrapper()); return R.ok(convert.toVO(productCategoryPage)); } + @Tag(name = "查询列表") + @PostMapping("/tree") + public R> tree(@RequestBody ProductCategoryBo bo ) { + List articleList = service.tree( bo.toWrapper()); + return R.ok( articleList); + } } diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppTenantController.java b/ruoyi-admin/src/main/java/org/dromara/app/AppTenantController.java new file mode 100644 index 000000000..4c2b40941 --- /dev/null +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppTenantController.java @@ -0,0 +1,44 @@ +package org.dromara.app; + +import com.wzj.soopin.transaction.convert.WithdrawConvert; +import com.wzj.soopin.transaction.domain.bo.WithdrawBO; +import com.wzj.soopin.transaction.enums.WithdrawType; +import com.wzj.soopin.transaction.service.IWithdrawService; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.domain.model.LoginUser; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.satoken.utils.LoginHelper; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Tag(name = "租户") +@RestController +@RequestMapping("/app/tenant") +@RequiredArgsConstructor +public class AppTenantController { + + private final IWithdrawService withdrawService; + private final WithdrawConvert withdrawConvert; + @Tag(name = "提现") + @Log(title = "提现 ", businessType = BusinessType.INSERT) + @PostMapping("/withdraw") + public R withdraw(@RequestBody WithdrawBO bo) { + //获取用户信息 + LoginUser loginUser = LoginHelper.getLoginUser(); + if (loginUser == null) { + throw new ServiceException("用户未登录"); + } + Long memberId = loginUser.getUserId(); + bo.setMemberId(memberId); + bo.setType(WithdrawType.REVENUE.getCode()); + return R.ok(withdrawService.withdrawRevenue(withdrawConvert.toPo(bo))); + } + + +} diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java b/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java index e7f4d48d0..142e09dbc 100644 --- a/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java @@ -2,10 +2,9 @@ package org.dromara.app; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.databind.ObjectMapper; -import com.wzj.soopin.content.domain.bo.IndexListBO; -import com.wzj.soopin.content.domain.bo.MyListBO; -import com.wzj.soopin.content.domain.bo.SimpleListBO; -import com.wzj.soopin.content.domain.bo.VlogBO; +import com.wzj.soopin.content.domain.bo.*; +import com.wzj.soopin.content.domain.po.MyLikedVlog; +import com.wzj.soopin.content.domain.vo.IndexVlogVO; import com.wzj.soopin.content.service.VlogService; import com.wzj.soopin.content.service.VlogUploadService; import com.wzj.soopin.content.utils.PagedGridResult; @@ -45,60 +44,58 @@ public class AppVlogController { public RedisOperator redis; @Tag(name = "首页视频列表") @PostMapping("/indexList") - public R indexList(@RequestBody IndexListBO bo, @RequestBody Page page) { - PagedGridResult pages = vlogService.getIndexVlogList(bo, page); + public R> indexList(@RequestBody IndexListBO bo, @RequestBody Page page) { + Page pages = vlogService.getIndexVlogList(bo, page); return R.ok(pages); } - @GetMapping("/detail") - public R detail(@RequestParam(defaultValue = "") String userId, - @RequestParam String vlogId) { - return R.ok(vlogService.getVlogDetailById(userId, vlogId)); + @GetMapping("/detail/{vlogId}") + public R detail( @PathVariable String vlogId) { + + return R.ok(vlogService.getVlogDetailById(vlogId)); } + + @Tag(name = "我的私密视频列表") @PostMapping("/myPrivateList") - public R myPrivateList(@RequestBody MyListBO bo, @RequestBody Page page) { + public R> myPrivateList(@RequestBody MyListBO bo, @RequestBody Page page) { LoginUser loginUser = LoginHelper.getLoginUser(); if (loginUser == null) { throw new ServiceException("用户未登录"); } bo.setUserId(String.valueOf(loginUser.getUserId())); - PagedGridResult pages = vlogService.queryMyVlogList(bo, page); + Page pages = vlogService.queryMyVlogList(bo, page); return R.ok(pages); } @Tag(name = "我点赞的视频列表") @PostMapping("/myLikedList") - public R myLikedList(@RequestBody MyListBO bo, @RequestBody Page page) { - LoginUser loginUser = LoginHelper.getLoginUser(); - if (loginUser == null) { - throw new ServiceException("用户未登录"); - } - bo.setUserId(String.valueOf(loginUser.getUserId())); - PagedGridResult pages = vlogService.getMyLikedVlogList(bo, page); + public R> myLikedList(@RequestBody MyLikedVlogBO bo, @RequestBody Page page) { + + Page pages = vlogService.getMyLikedVlogList(page); return R.ok(pages); } - @Tag(name = "我关注的视频列表") + @Tag(name = "我关注的人的视频列表") @PostMapping("/followList") - public R followList(@RequestBody SimpleListBO bo, @RequestBody Page page) { + public R> followList(@RequestBody SimpleListBO bo, @RequestBody Page page) { LoginUser loginUser = LoginHelper.getLoginUser(); if (loginUser == null) { throw new ServiceException("用户未登录"); } bo.setMyId(String.valueOf(loginUser.getUserId())); - PagedGridResult pages = vlogService.getMyFollowVlogList(bo, page); + Page pages = vlogService.getMyFollowVlogList( page); return R.ok(pages); } @Tag(name = "好友视频列表") @PostMapping("/friendList") - public R friendList(@RequestBody SimpleListBO bo, @RequestBody Page page) { + public R> friendList(@RequestBody SimpleListBO bo, @RequestBody Page page) { LoginUser loginUser = LoginHelper.getLoginUser(); if (loginUser == null) { throw new ServiceException("用户未登录"); } bo.setMyId(String.valueOf(loginUser.getUserId())); - PagedGridResult pages = vlogService.getMyFriendVlogList(bo, page); + Page pages = vlogService.getMyFriendVlogList( page); return R.ok(pages); } @PostMapping("publish") @@ -122,8 +119,8 @@ public class AppVlogController { } @Tag(name = "我的公开视频列表") @PostMapping("/myPublicList") - public R myPublicList(@RequestBody MyListBO bo, @RequestBody Page page) { - PagedGridResult pages = vlogService.queryMyVlogList(bo, page); + public R> myPublicList(@RequestBody MyListBO bo, @RequestBody Page page) { + Page pages = vlogService.queryMyVlogList(bo, page); return R.ok(pages); } @@ -138,11 +135,11 @@ public class AppVlogController { if (loginUser == null) { throw new ServiceException("用户未登录"); } - + String userId = String.valueOf(loginUser.getUserId()); String vlogerId = params.get("vlogerId"); String vlogId = params.get("vlogId"); - + if (StringUtils.isBlank(vlogerId) || StringUtils.isBlank(vlogId)) { throw new ServiceException("参数不完整"); } @@ -180,11 +177,11 @@ public class AppVlogController { if (loginUser == null) { throw new ServiceException("用户未登录"); } - + String userId = String.valueOf(loginUser.getUserId()); String vlogerId = params.get("vlogerId"); String vlogId = params.get("vlogId"); - + if (StringUtils.isBlank(vlogerId) || StringUtils.isBlank(vlogId)) { throw new ServiceException("参数不完整"); } diff --git a/ruoyi-admin/src/main/java/org/dromara/app/CashierRefundController.java b/ruoyi-admin/src/main/java/org/dromara/app/CashierRefundController.java new file mode 100644 index 000000000..bbe4bf070 --- /dev/null +++ b/ruoyi-admin/src/main/java/org/dromara/app/CashierRefundController.java @@ -0,0 +1,30 @@ +package org.dromara.app; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 买家端,退款回调 + * + * @author Chopper + * @since 2020-12-18 16:59 + */ +@Api(tags = "买家端,退款回调") +@RestController +@RequestMapping("/buyer/payment/cashierRefund") +@RequiredArgsConstructor +public class CashierRefundController { + + +// private final RefundSupport refundSupport; +// +// +// @ApiOperation(value = "退款通知") +// @RequestMapping(value = "/notify/{paymentMethod}", method = {RequestMethod.GET, RequestMethod.POST}) +// public void notify(HttpServletRequest request, @PathVariable String paymentMethod) { +// PaymentMethodEnum paymentMethodEnum = PaymentMethodEnum.valueOf(paymentMethod); +// refundSupport.notify(paymentMethodEnum, request); +// } +} diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 14c9ec0e4..bec720e59 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -99,7 +99,7 @@ sa-token: # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) is-concurrent: true # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) - is-share: false + is-share: true # jwt秘钥 jwt-secret-key: abcdefghijklmnopqrstuvwxyz @@ -293,6 +293,8 @@ xss: # 排除链接(多个用逗号分隔) excludeUrls: - /system/notice + - /pms/product/add + - /pms/product/update # 全局线程池相关配置 # 如使用JDK21请直接使用虚拟线程 不要开启此配置 diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/handler/SaTokenExceptionHandler.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/handler/SaTokenExceptionHandler.java index 17b08ba16..76c926bf6 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/handler/SaTokenExceptionHandler.java +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/handler/SaTokenExceptionHandler.java @@ -46,7 +46,7 @@ public class SaTokenExceptionHandler { public R handleNotLoginException(NotLoginException e, HttpServletRequest request) { String requestURI = request.getRequestURI(); log.error("请求地址'{}',认证失败'{}',无法访问系统资源", requestURI, e.getMessage()); - return R.fail(HttpStatus.HTTP_UNAUTHORIZED, "认证失败,无法访问系统资源"); + return R.fail(HttpStatus.HTTP_UNAUTHORIZED, "认证失败,无法访问系统资源:" + e.getMessage()); } } diff --git a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/core/TenantSaTokenDao.java b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/core/TenantSaTokenDao.java index b8da28ef1..8188d1c67 100644 --- a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/core/TenantSaTokenDao.java +++ b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/core/TenantSaTokenDao.java @@ -115,6 +115,7 @@ public class TenantSaTokenDao extends PlusSaTokenDao { */ @Override public long getObjectTimeout(String key) { + return super.getObjectTimeout(GlobalConstants.GLOBAL_REDIS_KEY + key); } diff --git a/ruoyi-extend/ruoyi-snailjob-server/src/main/java/org/dromara/snailjob/SnailJobServerApplication.java b/ruoyi-extend/ruoyi-snailjob-server/src/main/java/org/dromara/snailjob/SnailJobServerApplication.java index dfab0684f..f7dddad35 100644 --- a/ruoyi-extend/ruoyi-snailjob-server/src/main/java/org/dromara/snailjob/SnailJobServerApplication.java +++ b/ruoyi-extend/ruoyi-snailjob-server/src/main/java/org/dromara/snailjob/SnailJobServerApplication.java @@ -12,6 +12,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SnailJobServerApplication { + + public static void main(String[] args) { SpringApplication.run(com.aizuda.snailjob.server.SnailJobServerApplication.class, args); } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/MyLikedVlogBO.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/MyLikedVlogBO.java new file mode 100644 index 000000000..60ac6fbed --- /dev/null +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/MyLikedVlogBO.java @@ -0,0 +1,37 @@ +package com.wzj.soopin.content.domain.bo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.wzj.soopin.content.domain.po.MyLikedVlog; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.domain.BaseBO; +import org.dromara.common.core.domain.model.BaseAudit; + +@TableName("cont_my_liked_vlog") +@Data +@EqualsAndHashCode(callSuper = true) +public class MyLikedVlogBO extends BaseBO { + @TableId + private String id; + + /** + * 用户id + */ + private String userId; + + /** + * 喜欢的短视频id + */ + @TableField("vlog_id") + private String vlogId; + + + @Override + public LambdaQueryWrapper toWrapper() { + return super.toWrapper().eq(userId!=null,MyLikedVlog::getUserId,userId) + .eq(vlogId!=null,MyLikedVlog::getVlogId,vlogId); + } +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/MyListBO.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/MyListBO.java index 0240641c7..d6f99ab04 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/MyListBO.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/MyListBO.java @@ -1,34 +1,26 @@ package com.wzj.soopin.content.domain.bo; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.wzj.soopin.content.domain.po.Vlog; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.dromara.common.core.domain.BaseBO; -public class MyListBO { +@Data +public class MyListBO extends BaseBO { @Schema(description = "用户ID") private String userId; @Schema(description = "我的ID") private String myId; @Schema(description = "是否公开(1公开,0私密)") - private Integer yesOrNo; - + private Integer privateFlag; + @Schema(description = "页码", defaultValue = "1") private Long pageNum = 1L; - + @Schema(description = "每页大小", defaultValue = "10") private Long pageSize = 10L; - - // getter/setter - public String getUserId() { return userId; } - public void setUserId(String userId) { this.userId = userId; } - public String getMyId() { return myId; } - public void setMyId(String myId) { this.myId = myId; } - public Integer getYesOrNo() { return yesOrNo; } - public void setYesOrNo(Integer yesOrNo) { this.yesOrNo = yesOrNo; } - - public Long getPageNum() { return pageNum; } - public void setPageNum(Long pageNum) { this.pageNum = pageNum; } - - public Long getPageSize() { return pageSize; } - public void setPageSize(Long pageSize) { this.pageSize = pageSize; } + } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/SimpleListBO.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/SimpleListBO.java index 771035a42..43bd50ea4 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/SimpleListBO.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/SimpleListBO.java @@ -1,11 +1,11 @@ package com.wzj.soopin.content.domain.bo; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; -public class SimpleListBO { +@Data +public class SimpleListBO { @Schema(description = "我的ID") private String myId; - // getter/setter - public String getMyId() { return myId; } - public void setMyId(String myId) { this.myId = myId; } -} \ No newline at end of file + +} diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/VlogMapperCustom.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/VlogMapperCustom.java index 74aeb59ff..9674ae69b 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/VlogMapperCustom.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/mapper/VlogMapperCustom.java @@ -1,6 +1,7 @@ package com.wzj.soopin.content.mapper; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.wzj.soopin.content.domain.po.Vlog; import com.wzj.soopin.content.domain.vo.IndexVlogVO; import com.wzj.soopin.content.domain.vo.VlogerVO; @@ -13,16 +14,25 @@ import java.util.Map; @Repository @InterceptorIgnore(tenantLine = "true") -public interface VlogMapperCustom extends BaseMapperPlus { +public interface VlogMapperCustom extends BaseMapperPlus { - public List getIndexVlogList(@Param("paramMap")Map map); + List getIndexVlogList(@Param("paramMap") Map map); - public List getVlogDetailById(@Param("paramMap")Map map); + Page getIndexVlogList(@Param("paramMap") Map map, Page page); - public List getMyLikedVlogList(@Param("paramMap")Map map); + List getVlogDetailById(@Param("paramMap") Map map); - public List getMyFollowVlogList(@Param("paramMap")Map map); + List getMyLikedVlogList(@Param("paramMap") Map map); - public List getMyFriendVlogList(@Param("paramMap")Map map); + Page getMyLikedVlogList(@Param("paramMap") Map map, Page page); + + List getMyFollowVlogList(@Param("paramMap") Map map); + + + Page getMyFollowVlogList(@Param("paramMap") Map map, Page page); + + List getMyFriendVlogList(@Param("paramMap") Map map); + + Page getMyFriendVlogList(@Param("paramMap") Map map, Page page); } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/VlogService.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/VlogService.java index 48f0a19ab..4aa521de5 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/VlogService.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/VlogService.java @@ -2,13 +2,10 @@ package com.wzj.soopin.content.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.wzj.soopin.content.domain.bo.VlogBO; +import com.wzj.soopin.content.domain.bo.*; import com.wzj.soopin.content.domain.po.Vlog; import com.wzj.soopin.content.domain.vo.IndexVlogVO; import com.wzj.soopin.content.utils.PagedGridResult; -import com.wzj.soopin.content.domain.bo.SimpleListBO; -import com.wzj.soopin.content.domain.bo.MyListBO; -import com.wzj.soopin.content.domain.bo.IndexListBO; import java.util.List; import java.util.Map; @@ -31,12 +28,12 @@ public interface VlogService { /** * 查询首页/搜索的vlog列表 */ - public PagedGridResult getIndexVlogList(IndexListBO bo, Page page); + public Page getIndexVlogList(IndexListBO bo, Page page); /** * 根据视频主键查询vlog */ - public IndexVlogVO getVlogDetailById(String userId, String vlogId); + public IndexVlogVO getVlogDetailById( String vlogId); /** * 用户把视频改为公开/私密的视频 @@ -51,7 +48,7 @@ public interface VlogService { /** * 查询用的公开/私密的视频列表 */ - public PagedGridResult queryMyVlogList(MyListBO bo, Page page); + public Page queryMyVlogList(MyListBO bo, Page page); /** * 用户点赞/喜欢视频 @@ -71,17 +68,17 @@ public interface VlogService { /** * 查询用户点赞过的短视频 */ - public PagedGridResult getMyLikedVlogList(MyListBO bo, Page page); + public Page getMyLikedVlogList( Page page); /** * 查询用户关注的博主发布的短视频列表 */ - public PagedGridResult getMyFollowVlogList(SimpleListBO bo, Page page); + public Page getMyFollowVlogList( Page page); /** * 查询朋友发布的短视频列表 */ - public PagedGridResult getMyFriendVlogList(SimpleListBO bo, Page page); + public Page getMyFriendVlogList( Page page); /** * 根据主键查询vlog diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java index a5d5c2f26..b8504da91 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogServiceImpl.java @@ -9,10 +9,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.wzj.soopin.content.domain.base.BaseInfoProperties; -import com.wzj.soopin.content.domain.bo.VlogBO; -import com.wzj.soopin.content.domain.bo.SimpleListBO; -import com.wzj.soopin.content.domain.bo.MyListBO; -import com.wzj.soopin.content.domain.bo.IndexListBO; +import com.wzj.soopin.content.domain.bo.*; import com.wzj.soopin.content.domain.po.MyLikedVlog; import com.wzj.soopin.content.domain.po.Vlog; import com.wzj.soopin.content.domain.po.Users; @@ -35,6 +32,7 @@ import com.wzj.soopin.member.service.IFansService; import com.wzj.soopin.content.convert.VlogConvert; import org.apache.commons.lang3.StringUtils; import org.dromara.common.core.domain.model.LoginUser; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.satoken.utils.LoginHelper; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -146,7 +144,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { } @Override - public PagedGridResult getIndexVlogList(IndexListBO bo, Page page) { + public Page getIndexVlogList(IndexListBO bo, Page page) { String userId = bo.getMemberId(); String search = bo.getSearch(); String cityCode = bo.getCityCode(); @@ -240,11 +238,11 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { } // 封装分页结果 - PagedGridResult gridResult = new PagedGridResult(); - gridResult.setRows(voList); // 当前页数据列表 - gridResult.setPage(current); // 当前页码 - gridResult.setRecords(vlogPage.getTotal()); // 总记录数 - gridResult.setTotal(vlogPage.getPages()); // 总页数 + Page gridResult = new Page(); + gridResult.setRecords(voList); // 当前页数据列表 + gridResult.setCurrent(current); // 当前页码 + gridResult.setTotal(vlogPage.getTotal()); // 总记录数 + gridResult.setSize(vlogPage.getPages()); // 总页数 return gridResult; @@ -268,23 +266,27 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { return Integer.valueOf(countsStr); } - private boolean doILikeVlog(String myId, String vlogId) { + private boolean doILikeVlog(String myId, String vlogId) { String doILike = redis.get(REDIS_USER_LIKE_VLOG + ":" + myId + ":" + vlogId); return StringUtils.isNotBlank(doILike) && doILike.equalsIgnoreCase("1"); } @Override - public IndexVlogVO getVlogDetailById(String userId, String vlogId) { + public IndexVlogVO getVlogDetailById( String vlogId) { Vlog vlog = vlogMapper.selectById(vlogId); if (vlog == null) { return null; } - IndexVlogVO vo = MapstructUtils.convert(vlog, IndexVlogVO.class); - - if (StringUtils.isNotBlank(userId)) { - vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(userId, vlog.getMemberId())); - vo.setDoILikeThisVlog(doILikeVlog(userId, vlogId)); + //获取用户信息 + try{ + LoginUser loginUser = LoginHelper.getLoginUser(); + if (loginUser != null) { + vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(loginUser.getUserId()+"", vlog.getMemberId())); + vo.setDoILikeThisVlog(doILikeVlog(loginUser.getUserId()+"", vlogId)); + } + }catch (Exception e){ + log.error(e.getMessage()); } vo.setLikeCounts(getVlogBeLikedCounts(vlogId)); @@ -321,7 +323,7 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { } @Override - public PagedGridResult queryMyVlogList(MyListBO bo, Page page) { + public Page queryMyVlogList(MyListBO bo, Page page) { int current = (int) page.getCurrent(); int size = (int) page.getSize(); Page pageParam = new Page<>(current, size); @@ -329,12 +331,15 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { if(bo.getUserId()==null){ LoginUser user= LoginHelper.getLoginUser(); + if(user==null){ + throw new ServiceException("用户未登录"); + } queryWrapper.eq(Vlog::getMemberId, user.getUserId()); }else{ queryWrapper.eq(Vlog::getMemberId, bo.getUserId()); } - queryWrapper.eq(Vlog::getIsPrivate, bo.getYesOrNo()); + queryWrapper.eq(bo.getPrivateFlag()!=null,Vlog::getIsPrivate, bo.getPrivateFlag()); Page vlogPage = vlogMapper.selectPage(pageParam, queryWrapper); List vlogList = vlogPage.getRecords(); @@ -351,22 +356,22 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { } vo.setLikeCounts(getVlogBeLikedCounts(vlog.getId())); vo.setCommentsCounts(getVlogComment(vlog.getId())); - + // 补充用户信息(头像/昵称) Member author = memberMapper.selectById(vlog.getMemberId()); if (author != null) { vo.setAvatar(author.getAvatar()); vo.setNickname(author.getNickname()); } - + return vo; }).collect(Collectors.toList()); - PagedGridResult gridResult = new PagedGridResult(); - gridResult.setRows(voList); - gridResult.setPage(current); - gridResult.setRecords(vlogPage.getTotal()); - gridResult.setTotal(vlogPage.getPages()); + Page gridResult = new Page(); + gridResult.setRecords(voList); + gridResult.setSize(vlogPage.getSize()); + gridResult.setCurrent(current); + gridResult.setTotal(vlogPage.getTotal()); return gridResult; } @@ -444,118 +449,48 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService { } @Override - public PagedGridResult getMyLikedVlogList(MyListBO bo, Page page) { - int current = (int) page.getCurrent(); - int size = (int) page.getSize(); - Page pageParam = new Page<>(current, size); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(MyLikedVlog::getUserId, bo.getUserId()); - Page likedPage = myLikedVlogMapper.selectPage(pageParam, queryWrapper); - List likedList = likedPage.getRecords(); - // 组装返回的 VO 列表 - String uid = bo.getUserId(); - if (StringUtils.isBlank(uid)) { - LoginUser user = LoginHelper.getLoginUser(); - uid = user != null ? String.valueOf(user.getUserId()) : null; + public Page getMyLikedVlogList( Page page) { + + LoginUser user= LoginHelper.getLoginUser(); + if(user==null){ + throw new ServiceException("用户未登录"); } - final String finalUid = uid; + Map map = new HashMap<>(); + map.put("myId", user.getUserId()); + Page likedPage = vlogMapperCustom.getMyLikedVlogList(map,page); - List voList = likedList.stream() - .map(liked -> { - Vlog vlog = vlogMapper.selectById(liked.getVlogId()); - if (vlog == null) { - return null; - } - IndexVlogVO vo = MapstructUtils.convert(vlog, IndexVlogVO.class); - if (StringUtils.isNotBlank(finalUid)) { - vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(finalUid, vlog.getMemberId())); - vo.setDoILikeThisVlog(true); - } - vo.setLikeCounts(getVlogBeLikedCounts(vlog.getId())); - vo.setCommentsCounts(getVlogComment(vlog.getId())); - - // 补充用户信息(头像/昵称) - Member author = memberMapper.selectById(vlog.getMemberId()); - if (author != null) { - vo.setAvatar(author.getAvatar()); - vo.setNickname(author.getNickname()); - } - - return vo; - }) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - - PagedGridResult gridResult = new PagedGridResult(); - gridResult.setRows(voList); - gridResult.setPage(current); - gridResult.setRecords(likedPage.getTotal()); - gridResult.setTotal(likedPage.getPages()); - return gridResult; + likedPage.getRecords().stream().forEach( + liked -> { + liked.setDoIFollowVloger(true); + liked.setDoILikeThisVlog(true); + }); + return likedPage; } @Override - public PagedGridResult getMyFollowVlogList(SimpleListBO bo, Page page) { - int current = (int) page.getCurrent(); - int size = (int) page.getSize(); + public Page getMyFollowVlogList(Page page) { + LoginUser user= LoginHelper.getLoginUser(); + if(user==null){ + throw new ServiceException("用户未登录"); + } Map map = new HashMap<>(); - map.put("myId", bo.getMyId()); - List voList = vlogMapperCustom.getMyFollowVlogList(map); - - // 补充用户信息(头像/昵称) - voList.forEach(vo -> { - if (StringUtils.isNotBlank(vo.getMemberId())) { - Member author = memberMapper.selectById(vo.getMemberId()); - if (author != null) { - vo.setAvatar(author.getAvatar()); - vo.setNickname(author.getNickname()); - } - } - }); - - // 手动分页 - int startIndex = (current - 1) * size; - int endIndex = Math.min(startIndex + size, voList.size()); - List pagedList = voList.subList(startIndex, endIndex); - - PagedGridResult gridResult = new PagedGridResult(); - gridResult.setRows(pagedList); - gridResult.setPage(current); - gridResult.setRecords(voList.size()); - gridResult.setTotal((int) Math.ceil((double) voList.size() / size)); - return gridResult; + map.put("myId", user.getUserId()); + Page voPage = vlogMapperCustom.getMyFollowVlogList(map,page); + + return voPage; } @Override - public PagedGridResult getMyFriendVlogList(SimpleListBO bo, Page page) { - int current = (int) page.getCurrent(); - int size = (int) page.getSize(); + public Page getMyFriendVlogList( Page page) { + LoginUser user= LoginHelper.getLoginUser(); + if(user==null){ + throw new ServiceException("用户未登录"); + } Map map = new HashMap<>(); - map.put("myId", bo.getMyId()); - List voList = vlogMapperCustom.getMyFriendVlogList(map); - - // 补充用户信息(头像/昵称) - voList.forEach(vo -> { - if (StringUtils.isNotBlank(vo.getMemberId())) { - Member author = memberMapper.selectById(vo.getMemberId()); - if (author != null) { - vo.setAvatar(author.getAvatar()); - vo.setNickname(author.getNickname()); - } - } - }); - - // 手动分页 - int startIndex = (current - 1) * size; - int endIndex = Math.min(startIndex + size, voList.size()); - List pagedList = voList.subList(startIndex, endIndex); - - PagedGridResult gridResult = new PagedGridResult(); - gridResult.setRows(pagedList); - gridResult.setPage(current); - gridResult.setRecords(voList.size()); - gridResult.setTotal((int) Math.ceil((double) voList.size() / size)); - return gridResult; + map.put("myId", user.getUserId()); + Page voPage = vlogMapperCustom.getMyFriendVlogList(map,page); + + return voPage; } @Override diff --git a/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/VlogMapperCustom.xml b/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/VlogMapperCustom.xml index c0eb383b8..d7b50fd50 100644 --- a/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/VlogMapperCustom.xml +++ b/ruoyi-modules/ruoyi-content/src/main/resources/mapper/content/VlogMapperCustom.xml @@ -117,6 +117,7 @@ v.id as Id, m.avatar as avatar, m.nickname as nickname + FROM cont_vlog v LEFT JOIN @@ -128,7 +129,7 @@ ON v.member_id = m.id WHERE - mlv.user_id = #{paramMap.userId} + mlv.user_id = #{paramMap.myId} AND v.status = 1 AND v.first_frame_img IS NOT NULL AND v.is_private = 0 @@ -151,35 +152,29 @@