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 3d2ec076a..2c74e3426 100644 --- a/ruoyi-admin/src/main/java/org/dromara/app/AppMemberController.java +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppMemberController.java @@ -24,6 +24,7 @@ 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.domain.po.Withdraw; import com.wzj.soopin.transaction.enums.WithdrawType; import com.wzj.soopin.transaction.service.IAccountBillService; import com.wzj.soopin.transaction.service.IChargeService; @@ -47,6 +48,8 @@ import org.dromara.common.social.config.properties.SocialProperties; import org.dromara.common.social.utils.SocialUtils; import org.springframework.web.bind.annotation.*; +import java.math.BigDecimal; + @RestController @RequestMapping("/app/member") @Tag(name = "会员管理") @@ -86,7 +89,7 @@ public class AppMemberController { } memberId = loginUser.getUserId(); } - return R.ok(service.getMemberInfo(memberId)); + return R.ok(memberBusiness.info(memberId)); } @Operation(summary = "获取会员账户表详细信息") @@ -200,7 +203,15 @@ public class AppMemberController { Long memberId = loginUser.getUserId(); bo.setMemberId(memberId); bo.setType(WithdrawType.WALLET.getCode()); - return R.ok(withdrawService.withdrawWallet(withdrawConvert.toPo(bo))); + Withdraw withdraw=withdrawConvert.toPo(bo); + withdrawService.withdraw(withdraw); + //检查提现金额是否小于1元 一元以下自动审批 + if(withdraw.getMoney().compareTo(BigDecimal.ONE)<0){ + //自动审批 + bo.setId(withdraw.getId()); + withdrawService.audit(bo); + } + return R.ok(); } @@ -223,6 +234,4 @@ public class AppMemberController { return R.ok(); } - - } diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppSearchController.java b/ruoyi-admin/src/main/java/org/dromara/app/AppSearchController.java index 5a73ead20..243361e3c 100644 --- a/ruoyi-admin/src/main/java/org/dromara/app/AppSearchController.java +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppSearchController.java @@ -64,6 +64,7 @@ public class AppSearchController { } else if (Objects.nonNull(searchBO) && Objects.nonNull(searchBO.getType()) && (SearchTypeEnum.MEMBER.type.intValue() == searchBO.getType().intValue())) { MemberBO memberBO = new MemberBO(); memberBO.setNickname(searchBO.getTitle()); + memberBO.setPhone(searchBO.getTitle()); pages = memberService.getMemberPageList(memberBO, page); } return R.ok(pages); diff --git a/ruoyi-admin/src/main/java/org/dromara/app/AppTenantController.java b/ruoyi-admin/src/main/java/org/dromara/app/AppTenantController.java index 646d6cd9f..75073d631 100644 --- a/ruoyi-admin/src/main/java/org/dromara/app/AppTenantController.java +++ b/ruoyi-admin/src/main/java/org/dromara/app/AppTenantController.java @@ -38,7 +38,7 @@ public class AppTenantController { Long memberId = loginUser.getUserId(); bo.setMemberId(memberId); bo.setType(WithdrawType.REVENUE.getCode()); - return R.ok(withdrawService.withdrawRevenue(withdrawConvert.toPo(bo))); + return R.ok(withdrawService.withdraw(withdrawConvert.toPo(bo))); } diff --git a/ruoyi-admin/src/main/java/org/dromara/app/customer/AppOrderController.java b/ruoyi-admin/src/main/java/org/dromara/app/customer/AppOrderController.java index 332268b72..b0e1e8b55 100644 --- a/ruoyi-admin/src/main/java/org/dromara/app/customer/AppOrderController.java +++ b/ruoyi-admin/src/main/java/org/dromara/app/customer/AppOrderController.java @@ -5,6 +5,7 @@ import com.wzj.soopin.content.utils.RedisOperator; import com.wzj.soopin.order.business.IOrderBusiness; import com.wzj.soopin.order.domain.bo.OrderBo; import com.wzj.soopin.order.domain.bo.SaveOrderBO; +import com.wzj.soopin.order.domain.entity.Order; import com.wzj.soopin.order.domain.vo.OrderVO; import com.wzj.soopin.order.service.IMemberOrderService; import com.wzj.soopin.order.service.OrderService; @@ -17,6 +18,7 @@ import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mq.utils.MqUtil; import org.dromara.common.satoken.utils.LoginHelper; import org.springframework.web.bind.annotation.*; @@ -70,4 +72,13 @@ public class AppOrderController { return R.ok(); } + @Operation(summary = "发送消息") + @Log(title = "发送消息", businessType = BusinessType.UPDATE) + @PostMapping("/send/{orderId}") + public R send(@PathVariable("orderId") Long orderId) { + orderService.sendMessage(orderId); + //发出消息 + return R.ok(); + } + } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/base/BaseInfoProperties.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/BaseInfoProperties.java similarity index 86% rename from ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/base/BaseInfoProperties.java rename to ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/BaseInfoProperties.java index 88c4ff49c..b0870040b 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/base/BaseInfoProperties.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/BaseInfoProperties.java @@ -1,17 +1,8 @@ -package com.wzj.soopin.content.domain.base; +package org.dromara.common.core.constant; - -import com.wzj.soopin.content.utils.PagedGridResult; -import com.wzj.soopin.content.utils.RedisOperator; -import org.dromara.common.redis.redis.RedisCache; -import org.springframework.beans.factory.annotation.Autowired; - -import java.util.List; - public class BaseInfoProperties { - public RedisCache redis; public static final Integer COMMON_START_PAGE = 1; public static final Integer COMMON_START_PAGE_ZERO = 0; diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/ResultCode.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/ResultCode.java index eef30e94c..4bf76001c 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/ResultCode.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/ResultCode.java @@ -232,6 +232,16 @@ public enum ResultCode { CAN_NOT_RECHARGE_WALLET(32012, "不能使用余额进行充值"), RECHARGE_PRICE_ERROR(32013, "充值金额错误"), + + WITHDRAW_ERROR(33000, "提现失败"), + WITHDRAW_AUDIT_ERROR(33001, "提现审核失败"), + WITHDRAW_WALLET_ERROR(33002, "提现到钱包失败"), + + + + PACKET_SINGLE_COUNT_ERROR(35000, "单聊红包数量只能为1"), + + /** * 售后 */ diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/exception/ServiceException.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/exception/ServiceException.java index 58083e7a7..f6c922c84 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/exception/ServiceException.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/exception/ServiceException.java @@ -2,6 +2,7 @@ package org.dromara.common.core.exception; import lombok.*; import org.dromara.common.core.constant.ResultCode; +import org.dromara.common.core.exception.base.BaseException; import java.io.Serial; diff --git a/ruoyi-common/ruoyi-common-mq/src/main/java/org/dromara/common/mq/domain/MQMessage.java b/ruoyi-common/ruoyi-common-mq/src/main/java/org/dromara/common/mq/domain/MQMessage.java index 519c1cf9f..b057c77cf 100644 --- a/ruoyi-common/ruoyi-common-mq/src/main/java/org/dromara/common/mq/domain/MQMessage.java +++ b/ruoyi-common/ruoyi-common-mq/src/main/java/org/dromara/common/mq/domain/MQMessage.java @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.dromara.common.mq.enums.MQMessageType; import java.time.LocalDateTime; @@ -28,7 +29,7 @@ public class MQMessage { /** * 消息类型 */ - private String + private MQMessageType messageType; /** * 消息内容 @@ -42,4 +43,6 @@ public class MQMessage { * 发送时间 */ private LocalDateTime sendTime; + + private Long toUserId; } diff --git a/ruoyi-common/ruoyi-common-mq/src/main/java/org/dromara/common/mq/enums/MessageActionEnum.java b/ruoyi-common/ruoyi-common-mq/src/main/java/org/dromara/common/mq/enums/MessageActionEnum.java index 677cf4056..ea1e8bdf7 100644 --- a/ruoyi-common/ruoyi-common-mq/src/main/java/org/dromara/common/mq/enums/MessageActionEnum.java +++ b/ruoyi-common/ruoyi-common-mq/src/main/java/org/dromara/common/mq/enums/MessageActionEnum.java @@ -3,30 +3,36 @@ package org.dromara.common.mq.enums; public enum MessageActionEnum { - SYSTEM_NOTIFY(10, "system"), // 系统->通知 - SYSTEM_REPORT(13, "system"), // 系统->举报下架(视频,视频评论) 视频评论 - SYSTEM_CHECK(14, "system"), // 系统->审核结果(复审,驳回 ,通过) - SYSTEM_PUSH(15, "system"), //系统->推广类的 - INTERACTION_COMMENT(21, "interaction"), //互动->评论 - INTERACTION_AT(27, "interaction"), //互动->视频评论中的@ - INTERACTION_LIKE(28, "interaction"), //互动->点赞 - NEW_FOUCS(21,"newFocus"), //新的关注 - INTERACTION_REPLY(29, "interaction"), //互动->评论回复 - ORDER_RECHARGE(30, "order"), //订单->充值 online - ORDER_PAY(31, "order"), //订单->订单交易成功通知 online - ORDER_REFUND(32, "order"), //订单->退款结果通知 - GROUP_NOTIFY_CHECK(43, "groupNotify"), //群通知->进群申请 online - GROUP_NOTIFY_ACCEPT(44, "groupNotify"), // 群通知->进群审核审核通过 online - GROUP_NOTIFY_FAIL(45, "groupNotify"), // 群通知->进群审核审核拒绝 online - GROUP_NOTIFY_LEAVE_UP(46, "groupNotify"), // 群通知->群升级为达人群通知 - GROUP_NOTIFY_LEAVE_DOWN(47, "groupNotify"); // 群通知->群降级为普通群通知 + SYSTEM_NOTIFY(10, "system","systemNotify"), // 系统->通知 + SYSTEM_REPORT(13, "system","systemReport"), // 系统->举报下架(视频,视频评论) 视频评论 + SYSTEM_CHECK(14, "system","systemCheck"), // 系统->审核结果(通过) + SYSTEM_VLOG_REFUSE(17, "system","systemVlogRefuse"), // 系统->审核结果(驳回) + SYSTEM_VLOG_RECHECK(18, "system","systemVlogRecheck"), // 系统->审核结果(复审) + SYSTEM_PUSH(15, "system","systemPush"), //系统->推广类的 + INTERACTION_COMMENT(25, "interaction","interactionComment"), //互动->评论 + INTERACTION_AT(27, "interaction","interactionAt"), //互动->视频评论中的@ + INTERACTION_LIKE(28, "interaction","interactionLike"), //互动->点赞 + NEW_FOUCS(21,"newFocus","newFocus"), //新的关注 + INTERACTION_REPLY(29, "interaction","interactionReply"), //互动->评论回复 + ORDER_RECHARGE(30, "order","orderRecharge"), //订单->充值 online + ORDER_PAY(31, "order","orderPay"), //订单->订单交易成功通知 online + ORDER_REFUND(32, "order","orderRefund"), //订单->退款结果通知 + ORDER_WITHDRAW_AUDIT(33, "order","orderWithdrawAudit"), //订单->提现审核结果通知 + ORDER_WITHDRAW_REFUSE(34, "order","orderWithdrawRefuse"), //订单->提现审核结果通知(拒绝) + GROUP_NOTIFY_CHECK(43, "groupNotify","groupNotifyCheck"), //群通知->进群申请 online + GROUP_NOTIFY_ACCEPT(44, "groupNotify","groupNotifyAccept"), // 群通知->进群审核审核通过 online + GROUP_NOTIFY_FAIL(45, "groupNotify","groupNotifyFail"), // 群通知->进群审核审核拒绝 online + GROUP_NOTIFY_LEAVE_UP(46, "groupNotify","groupNotifyLeaveUp"), // 群通知->群升级为达人群通知 + GROUP_NOTIFY_LEAVE_DOWN(47, "groupNotify","groupNotifyLeaveDown"); // 群通知->群降级为普通群通知 private int code; private String account; + private String key; - MessageActionEnum(int code, String account) { + MessageActionEnum(int code, String account,String key) { this.code = code; this.account = account; + this.key = key; } public int getCode() { @@ -46,10 +52,14 @@ public enum MessageActionEnum { } public static MessageActionEnum getByAccount(String account) { for (MessageActionEnum actionEnum : values()) { - if (actionEnum.getAccount().equals(account)) { + if (actionEnum.name().equals(account)) { return actionEnum; } } return null; } + + public String getKey() { + return key; + } } diff --git a/ruoyi-common/ruoyi-common-mq/src/main/java/org/dromara/common/mq/utils/MqUtil.java b/ruoyi-common/ruoyi-common-mq/src/main/java/org/dromara/common/mq/utils/MqUtil.java index edc124014..9b5a7ac05 100644 --- a/ruoyi-common/ruoyi-common-mq/src/main/java/org/dromara/common/mq/utils/MqUtil.java +++ b/ruoyi-common/ruoyi-common-mq/src/main/java/org/dromara/common/mq/utils/MqUtil.java @@ -78,6 +78,10 @@ public class MqUtil implements ApplicationContextAware { log.error("RocketMQTemplate未初始化,无法发送消息"); return; } + if (message == null) { + log.error("消息为空,无法发送"); + return; + } try { String jsonMessage = JsonUtils.toJsonString(message); diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/MsgController.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/MsgController.java index 53687246a..4889b328b 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/MsgController.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/MsgController.java @@ -1,6 +1,6 @@ package com.wzj.soopin.content.controller; -import com.wzj.soopin.content.domain.base.BaseInfoProperties; +import org.dromara.common.core.constant.BaseInfoProperties; import com.wzj.soopin.content.domain.mo.MessageMO; import org.dromara.common.core.domain.R; import com.wzj.soopin.content.service.MsgService; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java index 68fae27bd..589e695f6 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/VlogController.java @@ -3,7 +3,7 @@ package com.wzj.soopin.content.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.wzj.soopin.content.domain.base.BaseInfoProperties; +import org.dromara.common.core.constant.BaseInfoProperties; import com.wzj.soopin.content.domain.bo.VlogBO; import com.wzj.soopin.content.domain.vo.IndexVlogVO; import com.wzj.soopin.content.enums.YesOrNo; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/admin/VlogUploadController.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/admin/VlogUploadController.java index 48f5caf1f..de817727e 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/admin/VlogUploadController.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/controller/admin/VlogUploadController.java @@ -1,13 +1,12 @@ package com.wzj.soopin.content.controller.admin; -import com.wzj.soopin.content.domain.base.BaseInfoProperties; +import org.dromara.common.core.constant.BaseInfoProperties; import com.wzj.soopin.content.service.VlogService; import com.wzj.soopin.content.service.VlogUploadService; import com.wzj.soopin.content.utils.RedisOperator; import com.wzj.soopin.content.utils.TencentCloudUtil; import com.wzj.soopin.member.service.IFansService; import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Operation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/CommentBO.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/CommentBO.java index 11887b46b..fc5e1fe98 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/CommentBO.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/bo/CommentBO.java @@ -17,16 +17,16 @@ public class CommentBO extends BaseBO { private Long id; @NotBlank(message = "留言信息不完整") - private String vlogerId; + private Long vlogerId; @NotBlank(message = "留言信息不完整") - private String fatherCommentId; + private Long fatherCommentId; @NotBlank(message = "留言信息不完整") private String vlogId; @NotBlank(message = "当前用户信息不正确,请尝试重新登录") - private String commentUserId; + private Long commentUserId; @NotBlank(message = "评论内容不能为空") @Length(max = 50, message = "评论内容长度不能超过50") diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Comment.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Comment.java index c8581dea5..8ca5f1055 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Comment.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/po/Comment.java @@ -13,18 +13,18 @@ import java.time.LocalDateTime; public class Comment { @TableId(type = IdType.ASSIGN_ID) - private String id; + private Long id; /** * 评论的视频是哪个作者(member)的关联id */ @TableField("member_id") - private String vlogerId; + private Long vlogerId; /** * 如果是回复评论,则本条为子评论,需要关联查询 */ - private String fatherCommentId; + private Long fatherCommentId; /** * 回复的那个视频id @@ -34,7 +34,7 @@ public class Comment { /** * 发布评论的用户id */ - private String commentUserId; + private Long commentUserId; /** * 评论内容 diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/ChildCommentVO.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/ChildCommentVO.java index 3f6fdedbd..74bae412a 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/ChildCommentVO.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/ChildCommentVO.java @@ -5,16 +5,16 @@ import java.time.LocalDateTime; @Data public class ChildCommentVO { - private String id; - private String commentId; + private Long id; + private Long commentId; private String content; private Integer status; private String replyedUserNickname; // 被回复的昵称(父评论用户昵称) private String replyUserNickname; // 回复人昵称(当前子评论用户昵称) private String replyUserFace; // 回复人头像 - private String fatherCommentId; + private Long fatherCommentId; private String likeCounts; private String vlogId; - private String commentUserId; + private Long commentUserId; private LocalDateTime createTime; } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/CommentVO.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/CommentVO.java index fe785018b..4939f878d 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/CommentVO.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/domain/vo/CommentVO.java @@ -14,9 +14,9 @@ import java.util.Date; @ToString public class CommentVO { private String id; - private String commentId; - private String vlogerId; - private String fatherCommentId; + private Long commentId; + private Long vlogerId; + private Long fatherCommentId; private String vlogId; private String commentUserId; private String commentUserNickname; diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/CommentServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/CommentServiceImpl.java index b8b22c3c5..c7beab3ef 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/CommentServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/CommentServiceImpl.java @@ -1,32 +1,24 @@ package com.wzj.soopin.content.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.wzj.soopin.content.domain.base.BaseInfoProperties; +import org.dromara.common.core.constant.BaseInfoProperties; import com.wzj.soopin.content.domain.bo.CommentBO; import com.wzj.soopin.content.domain.po.Comment; import com.wzj.soopin.content.domain.po.Vlog; -import com.wzj.soopin.content.domain.po.Users; import com.wzj.soopin.member.domain.po.Member; import com.wzj.soopin.content.domain.vo.ChildCommentVO; import com.wzj.soopin.content.domain.vo.CommentVO; -import com.wzj.soopin.content.enums.MessageEnum; -import com.wzj.soopin.content.enums.YesOrNo; import com.wzj.soopin.content.mapper.CommentMapper; import com.wzj.soopin.content.mapper.CommentMapperCustom; -import com.wzj.soopin.content.mapper.UsersMapper; import com.wzj.soopin.member.mapper.MemberMapper; import com.wzj.soopin.content.mapper.VlogMapper; import com.wzj.soopin.content.service.CommentService; import com.wzj.soopin.content.service.MsgService; -import com.wzj.soopin.content.service.VlogService; -import com.wzj.soopin.content.utils.PagedGridResult; import com.wzj.soopin.content.utils.Sid; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.mq.domain.MQMessage; import org.dromara.common.mq.enums.MQMessageType; @@ -38,7 +30,6 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.redis.redis.RedisCache; import org.dromara.common.satoken.utils.LoginHelper; import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; @@ -159,9 +150,7 @@ public class CommentServiceImpl extends ServiceImpl impl @Override @Transactional(rollbackFor = Exception.class) public void createComment(CommentBO commentBO) { - String commentId = sid.nextShort(); Comment comment = new Comment(); - comment.setId(commentId); comment.setVlogId(commentBO.getVlogId()); comment.setVlogerId(commentBO.getVlogerId()); comment.setCommentUserId(commentBO.getCommentUserId()); @@ -170,6 +159,7 @@ public class CommentServiceImpl extends ServiceImpl impl comment.setLikeCounts(0); comment.setCreateTime(LocalDateTime.now()); commentMapper.insert(comment); + commentBO.setId(comment.getId()); } @Override @@ -184,7 +174,7 @@ public class CommentServiceImpl extends ServiceImpl impl LambdaQueryWrapper wrapper = bo.toWrapper(); if (bo.getFatherCommentId() == null) { - wrapper.eq(Comment::getFatherCommentId, "0"); + wrapper.eq(Comment::getFatherCommentId, 0L); } // 手机号查视频 @@ -203,7 +193,7 @@ public class CommentServiceImpl extends ServiceImpl impl } List vlogIds = vlogList.stream().map(Vlog::getId).collect(Collectors.toList()); wrapper.in(Comment::getVlogId, vlogIds); - } else if (bo != null && org.springframework.util.StringUtils.hasText(bo.getVlogId())) { + } else if (bo != null && bo.getVlogId() != null) { wrapper.eq(Comment::getVlogId, bo.getVlogId()); } @@ -349,6 +339,32 @@ public class CommentServiceImpl extends ServiceImpl impl childComment.setUpdateBy(username); commentMapper.updateById(childComment); } + + + List notifyList = new ArrayList<>(); + notifyList.add(comment); + notifyList.addAll(childComments); + notifyList.forEach(c -> { + //给评论发送通知 + MqUtil.sendIMMessage(buildOfflineMessage(c)); + + }); + + + } + + private MQMessage buildOfflineMessage(Comment comment) { + Map params = new HashMap<>(); + params.put("userId", MessageActionEnum.SYSTEM_REPORT.getCode()); + params.put("nickName", MessageActionEnum.SYSTEM_REPORT.getAccount()); + params.put("toUserId", comment.getId()); + params.put("commentId", comment.getId()); + params.put("commentContent", comment.getContent()); + params.put("account", MessageActionEnum.SYSTEM_REPORT.getAccount()); + MQMessage mqMessage = new MQMessage(); + mqMessage.setTag(MessageActionEnum.SYSTEM_REPORT.name()); + mqMessage.setData(params); + return mqMessage; } @Override @@ -358,11 +374,11 @@ public class CommentServiceImpl extends ServiceImpl impl if (loginUser == null) { throw new RuntimeException("未登录或登录已过期"); } - bo.setCommentUserId(String.valueOf(loginUser.getUserId())); + bo.setCommentUserId(loginUser.getUserId()); // 父评论为空时,按根评论处理(约定使用"0"作为无父评论标记) - if (bo.getFatherCommentId() == null || bo.getFatherCommentId().isEmpty()) { - bo.setFatherCommentId("0"); + if (bo.getFatherCommentId() == null ) { + bo.setFatherCommentId(0L); } // 1) 创建评论 @@ -375,22 +391,34 @@ public class CommentServiceImpl extends ServiceImpl impl // 3) 发送站内消息:根评论 -> 通知视频作者;回复评论 -> 通知被回复用户 - // 关注消息 - MqUtil.sendIMMessage(buildMessage(bo)); + Vlog vlog=vlogMapper.selectById(bo.getVlogId()); + // 给评论或者作者发送通知 + MqUtil.sendIMMessage(buildCommentMessage(bo,vlog)); + + //检查是否有@ + } - private MQMessage buildMessage(CommentBO bo){ - Map params=new HashMap<>(); - LoginUser loginUser=LoginHelper.getLoginUser(); - if ("0".equals(bo.getFatherCommentId())) { + private MQMessage buildCommentMessage(CommentBO bo,Vlog vlog) { + Map params = new HashMap<>(); + LoginUser loginUser = LoginHelper.getLoginUser(); + + MQMessage mqMessage = new MQMessage(); + mqMessage.setTag(MessageActionEnum.INTERACTION_COMMENT.name()); + mqMessage.setMessageType(MQMessageType.IM); + if (bo.getFatherCommentId() == 0L) { // 评论视频,通知视频作者 - if (bo.getVlogerId() != null && !bo.getVlogerId().isEmpty() - && !String.valueOf(loginUser.getUserId()).equals(bo.getVlogerId())) { - params.put("userId", loginUser.getUserId()); + if ( !String.valueOf(loginUser.getUserId()).equals(bo.getVlogerId())) { + params.put("userID", loginUser.getUserId()); params.put("nickName", loginUser.getNickname()); - params.put("toUserId", bo.getVlogerId()); - params.put("vlogId", bo.getVlogId()); - params.put("action", MessageActionEnum.INTERACTION_COMMENT.getAccount()); + params.put("commentID", bo.getId()); + params.put("faceUrl", loginUser.getAvatar()); + params.put("comment", bo.getContent()); + params.put("vlogID", bo.getVlogId()); + params.put("firstFrameImg", vlog.getFirstFrameImg()); + mqMessage.setToUserId(Long.valueOf(vlog.getMemberId())); + }else{ + return null; } } else { @@ -398,19 +426,19 @@ public class CommentServiceImpl extends ServiceImpl impl Comment father = baseMapper.selectById(bo.getFatherCommentId()); if (father != null && father.getCommentUserId() != null && !String.valueOf(loginUser.getUserId()).equals(father.getCommentUserId())) { - params.put("userId", loginUser.getUserId()); + params.put("userID", loginUser.getUserId()); params.put("nickName", loginUser.getNickname()); - params.put("toUserId", father.getCommentUserId()); + params.put("faceUrl", loginUser.getAvatar()); params.put("vlogId", bo.getVlogId()); - params.put("commentId",father.getId()); - params.put("commentContent",father.getContent()); - params.put("action", MessageActionEnum.INTERACTION_REPLY.getAccount()); - + params.put("commentID", father.getId()); + params.put("comment", father.getContent()); + params.put("vlogID", bo.getVlogId()); + params.put("firstFrameImg", vlog.getFirstFrameImg()); + mqMessage.setToUserId(Long.valueOf(father.getCommentUserId())); + }else{ + return null; } } - - MQMessage mqMessage = new MQMessage(); - mqMessage.setTag(MessageActionEnum.NEW_FOUCS.getAccount()); mqMessage.setData(params); return mqMessage; } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/MsgServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/MsgServiceImpl.java index 7713e20b2..4d4344952 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/MsgServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/MsgServiceImpl.java @@ -1,7 +1,7 @@ package com.wzj.soopin.content.service.impl; -import com.wzj.soopin.content.domain.base.BaseInfoProperties; +import org.dromara.common.core.constant.BaseInfoProperties; import com.wzj.soopin.content.domain.mo.MessageMO; import com.wzj.soopin.content.enums.MessageEnum; import com.wzj.soopin.content.mapper.repository.MessageRepository; @@ -10,6 +10,7 @@ import com.wzj.soopin.member.domain.po.Member; import com.wzj.soopin.member.mapper.MemberMapper; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.dromara.common.redis.redis.RedisCache; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -25,11 +26,12 @@ import java.util.Map; @RequiredArgsConstructor public class MsgServiceImpl extends BaseInfoProperties implements MsgService { - @Autowired - private MessageRepository messageRepository; + private final MessageRepository messageRepository; private final MemberMapper memberMapper; + private final RedisCache cache; + @Override public void createMsg(String fromUserId, String toUserId, @@ -80,7 +82,7 @@ public class MsgServiceImpl extends BaseInfoProperties implements MsgService { map = new HashMap<>(); } - String relationship = redis.getCacheObject(REDIS_FANS_AND_VLOGGER_RELATIONSHIP + ":" + msg.getToUserId() + ":" + msg.getFromUserId()); + String relationship = cache.getCacheObject(REDIS_FANS_AND_VLOGGER_RELATIONSHIP + ":" + msg.getToUserId() + ":" + msg.getFromUserId()); if (StringUtils.isNotBlank(relationship) && relationship.equalsIgnoreCase("1")) { map.put("isFriend", true); } else { diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPullServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPullServiceImpl.java index 867a773c7..a28e1c54a 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPullServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPullServiceImpl.java @@ -16,7 +16,6 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.rocketmq.common.message.MessageExt; -import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.mq.domain.MQMessage; @@ -30,8 +29,8 @@ import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; -import static com.wzj.soopin.content.domain.base.BaseInfoProperties.REDIS_USER_LIKE_VLOG; -import static com.wzj.soopin.content.domain.base.BaseInfoProperties.REDIS_VLOG_COMMENT_COUNTS; +import static org.dromara.common.core.constant.BaseInfoProperties.REDIS_USER_LIKE_VLOG; +import static org.dromara.common.core.constant.BaseInfoProperties.REDIS_VLOG_COMMENT_COUNTS; import static org.dromara.common.core.constant.GlobalConstants.HOT_VLOG_TAG; @Service diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPushServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPushServiceImpl.java index 1de66ed83..2ed862704 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPushServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogPushServiceImpl.java @@ -7,11 +7,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.wzj.soopin.content.domain.po.Vlog; import com.wzj.soopin.content.service.IVlogPushService; import com.wzj.soopin.content.service.VlogService; -import com.wzj.soopin.member.domain.po.Member; import com.wzj.soopin.member.service.IMemberService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.mq.domain.MQMessage; +import org.dromara.common.mq.enums.MQMessageType; import org.dromara.common.mq.utils.MqUtil; import org.dromara.common.redis.redis.RedisCache; import org.springframework.stereotype.Service; @@ -23,7 +23,7 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import static com.wzj.soopin.content.domain.base.BaseInfoProperties.REDIS_VLOG_BE_LIKED_COUNTS; +import static org.dromara.common.core.constant.BaseInfoProperties.REDIS_VLOG_BE_LIKED_COUNTS; import static org.dromara.common.core.constant.GlobalConstants.HOT_VLOG_TAG; @Service @@ -76,7 +76,7 @@ public class VlogPushServiceImpl implements IVlogPushService { MQMessage message = MQMessage.builder() .topic("MEMBER_VLOG_MSG") .tag(HOT_VLOG_TAG) - .messageType("json") + .messageType(MQMessageType.VLOG) .data(vlogId) .source("vlog_service") .sendTime(LocalDateTime.now()) @@ -94,7 +94,7 @@ public class VlogPushServiceImpl implements IVlogPushService { MQMessage message = MQMessage.builder() .topic("MEMBER_VLOG_MSG") .tag(tag) - .messageType("json") + .messageType(MQMessageType.VLOG) .data(vlogId) .source("vlog_service") .sendTime(LocalDateTime.now()) 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 0d23e6d40..6abbdcd77 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 @@ -1,8 +1,6 @@ package com.wzj.soopin.content.service.impl; -import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -10,30 +8,24 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fasterxml.jackson.core.JsonProcessingException; 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.*; import com.wzj.soopin.content.domain.po.MyLikedVlog; import com.wzj.soopin.content.domain.po.Vlog; -import com.wzj.soopin.content.domain.po.Users; -import com.wzj.soopin.content.domain.vo.VlogerVO; import com.wzj.soopin.content.enums.VlogStatusEnum; import com.wzj.soopin.member.domain.po.Member; import com.wzj.soopin.content.domain.vo.IndexVlogVO; import com.wzj.soopin.content.enums.YesOrNo; import com.wzj.soopin.content.mapper.CommentMapper; import com.wzj.soopin.content.mapper.MyLikedVlogMapper; -import com.wzj.soopin.content.mapper.UsersMapper; import com.wzj.soopin.member.domain.vo.MemberVO; import com.wzj.soopin.member.mapper.MemberMapper; import com.wzj.soopin.content.mapper.VlogMapper; import com.wzj.soopin.content.mapper.VlogMapperCustom; import com.wzj.soopin.content.service.MsgService; import com.wzj.soopin.content.service.VlogService; -import com.wzj.soopin.content.utils.PagedGridResult; import com.wzj.soopin.content.utils.RedisOperator; import com.wzj.soopin.content.utils.Sid; -import com.wzj.soopin.content.utils.TencentCloudUtil; import com.wzj.soopin.member.service.IFansService; import com.wzj.soopin.content.convert.VlogConvert; import com.wzj.soopin.member.service.IMemberService; @@ -47,10 +39,8 @@ import org.dromara.common.mq.domain.MQMessage; import org.dromara.common.mq.enums.MQMessageType; import org.dromara.common.mq.enums.MessageActionEnum; import org.dromara.common.mq.utils.MqUtil; -import org.dromara.common.mq.utils.UserRocketMQConsumerManager; import org.dromara.common.redis.redis.RedisCache; import org.dromara.common.satoken.utils.LoginHelper; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -61,14 +51,13 @@ import org.dromara.common.core.utils.MapstructUtils; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneOffset; -import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; import java.util.ArrayList; import lombok.extern.slf4j.Slf4j; -import static com.wzj.soopin.content.domain.base.BaseInfoProperties.*; +import static org.dromara.common.core.constant.BaseInfoProperties.*; @Slf4j @Service @@ -162,7 +151,7 @@ public class VlogServiceImpl extends ServiceImpl implements Vl //发出mq消息,异步处理上传 MQMessage message = MQMessage.builder() - .messageType("json") + .messageType(MQMessageType.VLOG) .data(vlog.getId()) .source("app") .topic("VLOG_UPLOAD_TOPIC") @@ -335,14 +324,15 @@ public class VlogServiceImpl extends ServiceImpl implements Vl Map params=new HashMap<>(); LoginUser loginUser=LoginHelper.getLoginUser(); - params.put("userId", loginUser.getUserId()); - params.put("nickname", loginUser.getNickname() == null ? "" : loginUser.getNickname()); + params.put("userID", loginUser.getUserId()); + params.put("nickName", loginUser.getNickname() == null ? "" : loginUser.getNickname()); params.put("faceUrl", loginUser.getAvatar() ); - params.put("action", MessageActionEnum.INTERACTION_LIKE.getAccount()); - params.put("toUserId",vlog.getMemberId()); - + params.put("vlogId",vlog.getId()); + params.put("firstFrameImg",vlog.getFirstFrameImg()); MQMessage mqMessage = new MQMessage(); - mqMessage.setTag(MessageActionEnum.INTERACTION_LIKE.getAccount()); + mqMessage.setMessageType(MQMessageType.IM); + mqMessage.setTag(MessageActionEnum.INTERACTION_LIKE.name()); + mqMessage.setToUserId(Long.valueOf(vlog.getMemberId())); mqMessage.setData(params); return mqMessage; } diff --git a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogUploadServiceImpl.java b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogUploadServiceImpl.java index 1655b34cb..36173e46d 100644 --- a/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogUploadServiceImpl.java +++ b/ruoyi-modules/ruoyi-content/src/main/java/com/wzj/soopin/content/service/impl/VlogUploadServiceImpl.java @@ -2,16 +2,11 @@ package com.wzj.soopin.content.service.impl; import com.tencentcloudapi.common.exception.TencentCloudSDKException; import com.tencentcloudapi.vod.v20180717.VodClient; -import com.tencentcloudapi.vod.v20180717.models.DescribeTaskDetailRequest; -import com.tencentcloudapi.vod.v20180717.models.DescribeTaskDetailResponse; -import com.tencentcloudapi.vod.v20180717.models.PullUploadRequest; -import com.tencentcloudapi.vod.v20180717.models.PullUploadResponse; -import com.tencentcloudapi.vod.v20180717.models.SearchMediaRequest; -import com.tencentcloudapi.vod.v20180717.models.SearchMediaResponse; import com.wzj.soopin.content.domain.vo.CommentVO; import com.wzj.soopin.content.service.VlogUploadService; import com.wzj.soopin.content.utils.TencentCloudUtil; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.constant.BaseInfoProperties; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.redis.redis.RedisCache; @@ -20,7 +15,6 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Arrays; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -200,10 +194,10 @@ public class VlogUploadServiceImpl implements VlogUploadService { } // 2. 点赞数量:优先 Redis,无则 MySQL - int likeCounts=redisCache.zSetScore(com.wzj.soopin.content.domain.base.BaseInfoProperties.REDIS_VLOG_BE_LIKED_COUNTS , vlogId).intValue(); + int likeCounts=redisCache.zSetScore(BaseInfoProperties.REDIS_VLOG_BE_LIKED_COUNTS , vlogId).intValue(); // 3. 评论数量:优先 Redis,无则 MySQL - int commentCounts=redisCache.zSetScore(com.wzj.soopin.content.domain.base.BaseInfoProperties.REDIS_VLOG_COMMENT_COUNTS , vlogId).intValue(); + int commentCounts=redisCache.zSetScore(BaseInfoProperties.REDIS_VLOG_COMMENT_COUNTS , vlogId).intValue(); // 4. 评论内容:只查 MySQL diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/wzj/soopin/goods/domain/entity/ProductSnapshot.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/wzj/soopin/goods/domain/entity/ProductSnapshot.java index 499033cbe..05b82615a 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/wzj/soopin/goods/domain/entity/ProductSnapshot.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/wzj/soopin/goods/domain/entity/ProductSnapshot.java @@ -18,7 +18,7 @@ import java.math.BigDecimal; @Data @AllArgsConstructor @NoArgsConstructor -@TableName(value = "wzj_soopin.pms_product_snapshot") +@TableName(value = "pms_product_snapshot") public class ProductSnapshot { /** * 主键id diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/wzj/soopin/goods/domain/entity/SkuSnapshot.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/wzj/soopin/goods/domain/entity/SkuSnapshot.java index b2ff316f5..eb7db3fb9 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/wzj/soopin/goods/domain/entity/SkuSnapshot.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/wzj/soopin/goods/domain/entity/SkuSnapshot.java @@ -18,7 +18,7 @@ import java.math.BigDecimal; @Data @AllArgsConstructor @NoArgsConstructor -@TableName(value = "wzj_soopin.pms_sku_snapshot") +@TableName(value = "pms_sku_snapshot") public class SkuSnapshot { @TableId(value = "id") diff --git a/ruoyi-modules/ruoyi-im/src/main/java/com/wzj/soopin/im/consumer/MessageRocketMQConsumer.java b/ruoyi-modules/ruoyi-im/src/main/java/com/wzj/soopin/im/consumer/MessageRocketMQConsumer.java index d0e4644b9..2c628b830 100644 --- a/ruoyi-modules/ruoyi-im/src/main/java/com/wzj/soopin/im/consumer/MessageRocketMQConsumer.java +++ b/ruoyi-modules/ruoyi-im/src/main/java/com/wzj/soopin/im/consumer/MessageRocketMQConsumer.java @@ -22,7 +22,7 @@ import org.springframework.stereotype.Component; @RocketMQMessageListener( topic = RocketMQConfig.TOPIC_IM_MSG, // consumerGroup = RocketMQConfig.CONSUMER_GROUP_SYS_MSG, - consumerGroup = "cosumer", + consumerGroup = "cosumer1", selectorExpression = "*" // ackMode = AckMode.MANUAL ) diff --git a/ruoyi-modules/ruoyi-im/src/main/java/com/wzj/soopin/im/service/impl/MQMessageHandleServiceImpl.java b/ruoyi-modules/ruoyi-im/src/main/java/com/wzj/soopin/im/service/impl/MQMessageHandleServiceImpl.java index 22f765b77..16c888fec 100644 --- a/ruoyi-modules/ruoyi-im/src/main/java/com/wzj/soopin/im/service/impl/MQMessageHandleServiceImpl.java +++ b/ruoyi-modules/ruoyi-im/src/main/java/com/wzj/soopin/im/service/impl/MQMessageHandleServiceImpl.java @@ -41,18 +41,20 @@ public class MQMessageHandleServiceImpl implements IMQMessageHandleService { //创建im消息 //根据消息类型获取消息模板 Map params = (Map) message.getData(); - String action = (String) params.get("action"); + //根据action获取消息模板 - MessageActionEnum actionEnum = MessageActionEnum.getByAccount(action); + MessageActionEnum actionEnum = MessageActionEnum.valueOf(message.getTag()); + params.put("action", actionEnum.getKey()); + params.put("account", actionEnum.getAccount()); if(actionEnum == null){ - log.error("根据action获取消息模板失败,action:{}", action); + log.error("根据action获取消息模板失败,action:{}", message.getTag()); return false; } SysMessageTemplate template = templateService.getTemplateByAction(actionEnum.getCode()); if (template == null) { - log.error("根据action获取消息模板失败,action:{}", action); + log.error("根据action获取消息模板失败,action:{}", message.getTag()); return true; } @@ -61,7 +63,7 @@ public class MQMessageHandleServiceImpl implements IMQMessageHandleService { try { // 消息发送者可能是系统或管理员,这里使用action对应的账号发送 String fromUserId = actionEnum.getAccount(); - String toUserId = ""; // 接收者是事件中的用户ID + String toUserId = message.getToUserId()+""; // 接收者是事件中的用户ID String content = template.getContent(); // 只取content字段 // 处理消息变量替换(如果有) @@ -76,7 +78,6 @@ public class MQMessageHandleServiceImpl implements IMQMessageHandleService { desc = processMessageVariables(desc, params); content = processMessageVariables(content, params); ext = processMessageVariables(ext, params); - toUserId = String.valueOf(params.get("toUserId")); } String pushType = null; @@ -157,7 +158,9 @@ public class MQMessageHandleServiceImpl implements IMQMessageHandleService { return content; } for (String key : variables.keySet()) { - content = content.replaceAll("\\$\\{" + key + "\\}", variables.get(key).toString()); + if(variables.get(key)!=null){ + content = content.replaceAll("\\$\\{" + key + "\\}", variables.get(key).toString()); + } } return content; } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/business/impl/MemberBusinessImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/business/impl/MemberBusinessImpl.java index 619e349a4..5e5c42b07 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/business/impl/MemberBusinessImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/business/impl/MemberBusinessImpl.java @@ -12,13 +12,17 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.redis.redis.RedisCache; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.web.core.BusinessImpl; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.Serializable; import java.time.LocalDateTime; +import static org.dromara.common.core.constant.BaseInfoProperties.*; + @Service @AllArgsConstructor @Slf4j @@ -26,6 +30,7 @@ public class MemberBusinessImpl extends BusinessImpl requestBody) { diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/bo/MemberBO.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/bo/MemberBO.java index 53a3450aa..85b1c4288 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/bo/MemberBO.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/domain/bo/MemberBO.java @@ -86,6 +86,7 @@ public class MemberBO extends BaseBO { QueryWrapper qw = new QueryWrapper<>(); qw.lambda() .like(StringUtils.isNotEmpty(this.getNickname()), Member::getNickname, this.getNickname()) +// .and(wq->wq.like(StringUtils.isNotEmpty(this.getPhone()), Member::getPhoneHidden, this.getPhone()).or()) .eq(getId() != null, Member::getId, this.getId()) .eq(status != null, Member::getStatus, status) .eq(spreadUid != null, Member::getSpreadUid, spreadUid) diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java index 9bdb65c4c..496df2090 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FansServiceImpl.java @@ -20,6 +20,7 @@ import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.enums.YesOrNo; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mq.domain.MQMessage; +import org.dromara.common.mq.enums.MQMessageType; import org.dromara.common.mq.enums.MessageActionEnum; import org.dromara.common.mq.utils.MqUtil; import org.dromara.common.redis.redis.RedisCache; @@ -70,6 +71,7 @@ public class FansServiceImpl extends ServiceImpl implements IF fans.setFriendFlag(YesOrNo.YES.type); } baseMapper.insert(fans); + MqUtil.sendIMMessage(buildMessage(fans)); return true; } @@ -84,11 +86,11 @@ public class FansServiceImpl extends ServiceImpl implements IF params.put("userId", follower.getId()); params.put("nickname", follower.getNickname() == null ? "" : follower.getNickname()); params.put("faceUrl", vlogger.getAvatar() ); - params.put("action", MessageActionEnum.NEW_FOUCS.getAccount()); - params.put("toUserId", vlogger.getId()); MQMessage message = MQMessage.builder() - .messageType("follow") + .messageType(MQMessageType.IM) .data(params) + .tag(MessageActionEnum.NEW_FOUCS.name()) + .toUserId(vlogger.getId()) .source("member") .build(); return message; @@ -133,25 +135,6 @@ public class FansServiceImpl extends ServiceImpl implements IF // 博主的粉丝-1,我的关注-1 RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FANS + ":" + vloggerId); RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FOLLOW + ":" + myId); - // 推送取关消息 - Member follower = memberMapper.selectById(myId); - Member vlogger = memberMapper.selectById(vloggerId); - if (follower != null && vlogger != null && !myId.equals(vloggerId)) { -// 新版:使用模板类型编号和参数 - Map params = new HashMap<>(); - params.put("userId", follower.getUserId()); - params.put("nickname", follower.getNickname() == null ? "" : follower.getNickname()); - params.put("faceUrl", vlogger.getAvatar() ); - params.put("action", MessageActionEnum.NEW_FOUCS.getAccount()); - params.put("toUserId", vloggerId); - MQMessage message = MQMessage.builder() - .messageType("follow") - .data(params) - .source("member") - .build(); - // 关注消息 - MqUtil.sendIMMessage(message); - } return true; } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FeedbackServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FeedbackServiceImpl.java index b976ea359..b804f93a2 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FeedbackServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/FeedbackServiceImpl.java @@ -22,6 +22,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.mq.domain.MQMessage; +import org.dromara.common.mq.enums.MQMessageType; import org.dromara.common.mq.enums.MessageActionEnum; import org.dromara.common.mq.utils.MqUtil; import org.dromara.common.redis.redis.RedisCache; @@ -112,11 +113,11 @@ public class FeedbackServiceImpl extends ServiceImpl i params.put("userId", loginUser.getUserId()); params.put("nickname", loginUser.getNickname() == null ? "" : loginUser.getNickname()); params.put("faceUrl", loginUser.getAvatar() ); - params.put("action", MessageActionEnum.INTERACTION_LIKE.getAccount()); - params.put("toUserId",aim.getMemberId()); MQMessage mqMessage = new MQMessage(); - mqMessage.setTag(MessageActionEnum.INTERACTION_LIKE.getAccount()); + mqMessage.setMessageType(MQMessageType.IM); + mqMessage.setTag(MessageActionEnum.INTERACTION_LIKE.name()); + mqMessage.setToUserId(aim.getMemberId()); mqMessage.setData(params); return mqMessage; } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberServiceImpl.java index e9fc8ef3f..8cde2ef07 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/wzj/soopin/member/service/impl/MemberServiceImpl.java @@ -408,4 +408,10 @@ public class MemberServiceImpl extends ServiceImpl implemen Assert.isTrue(StrUtil.equals(smsCode, code), () -> new ServiceException("短信验证码错误")); memberMapper.updateById(Member.builder().id(loginUser.getUserId()).status(Constants.MEMBER_ACCOUNT_STATUS.FORBIDDEN).build()); } + + @Override + @CacheEvict(value = GlobalConstants.MEMBER_KEY, key = "#entity.id") + public boolean updateById(Member entity) { + return super.updateById(entity); + } } diff --git a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml index f0308865c..37a1c2a2f 100644 --- a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml +++ b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml @@ -61,7 +61,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select * from ums_member - and nickname LIKE CONCAT('%', #{query.nickname}, '%') + and (nickname LIKE CONCAT('%', #{query.nickname}, '%') or phone_hidden LIKE CONCAT('%', #{query.nickname}, '%')) diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/business/IAfterSaleBusiness.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/business/IAfterSaleBusiness.java new file mode 100644 index 000000000..b6b895251 --- /dev/null +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/business/IAfterSaleBusiness.java @@ -0,0 +1,4 @@ +package com.wzj.soopin.order.business; + +public interface IAfterSaleBusiness { +} diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/business/impl/AfterSaleBusiness.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/business/impl/AfterSaleBusiness.java new file mode 100644 index 000000000..b1c8660bd --- /dev/null +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/business/impl/AfterSaleBusiness.java @@ -0,0 +1,10 @@ +package com.wzj.soopin.order.business.impl; + +import com.wzj.soopin.order.convert.AftersaleConvert; +import com.wzj.soopin.order.domain.entity.Aftersale; +import com.wzj.soopin.order.domain.vo.AftersaleVO; +import com.wzj.soopin.order.service.AftersaleService; +import org.dromara.common.web.core.BusinessImpl; + +public class AfterSaleBusiness { +} diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/business/impl/OrderBusinessImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/business/impl/OrderBusinessImpl.java index dac8bd3c1..26a5d9ff7 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/business/impl/OrderBusinessImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/business/impl/OrderBusinessImpl.java @@ -16,6 +16,8 @@ import com.wzj.soopin.order.service.VerificationCodeService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.web.core.BusinessImpl; +import org.dromara.system.domain.vo.SysTenantVo; +import org.dromara.system.service.ISysTenantService; import org.springframework.stereotype.Service; import java.io.Serializable; @@ -30,10 +32,15 @@ public class OrderBusinessImpl extends BusinessImpl orderItemList = orderItemService.findByOrderId(vo.getId()); List itemVOList = orderItemList.stream().map(item -> { OrderItemVO itemVO=orderItemConvert.toVO(item); + if (itemVO.getTenantId() != null) { + SysTenantVo tenant = tenantService.queryByTenantId(vo.getTenantId()); + itemVO.setTenantName(tenant.getShopName()); + } //赋值 return itemVO; }).collect(Collectors.toList()); diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/convert/AftersaleConvert.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/convert/AftersaleConvert.java index 62c4f0fa8..e2c9091e4 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/convert/AftersaleConvert.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/convert/AftersaleConvert.java @@ -1,24 +1,16 @@ package com.wzj.soopin.order.convert; -import com.wzj.soopin.member.domain.bo.MemberAddressBO; -import com.wzj.soopin.member.domain.po.MemberAddress; -import com.wzj.soopin.member.domain.vo.MemberAddressVO; import com.wzj.soopin.order.domain.bo.AftersaleBo; import com.wzj.soopin.order.domain.entity.Aftersale; -import com.wzj.soopin.order.domain.form.ManagerAftersaleOrderForm; import com.wzj.soopin.order.domain.vo.AftersaleVO; -import com.wzj.soopin.order.domain.vo.ManagerRefundOrderVO; import org.dromara.common.web.core.BaseConverter; import org.mapstruct.Mapper; - -import java.util.List; /** * 订单售后 DO <=> DTO <=> VO / BO / Query * * @author zcc */ @Mapper(componentModel = "spring") -public interface AftersaleConvert extends BaseConverter { +public interface AftersaleConvert extends BaseConverter { -// List dos2vos(List list); } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/bo/AftersaleBo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/bo/AftersaleBo.java index 7e3c47ef3..0a4b44c64 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/bo/AftersaleBo.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/bo/AftersaleBo.java @@ -1,11 +1,11 @@ package com.wzj.soopin.order.domain.bo; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fasterxml.jackson.annotation.JsonFormat; import com.wzj.soopin.order.domain.entity.Aftersale; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import org.dromara.common.core.domain.BaseBO; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; @@ -13,7 +13,7 @@ import java.time.LocalDateTime; @Data @Schema(description = "订单售后 查询 对象") -public class AftersaleBo { +public class AftersaleBo extends BaseBO { @Schema(description = "MEMBER_ID 精确匹配") private Long memberId; @@ -64,7 +64,7 @@ public class AftersaleBo { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime endTime; - public Wrapper toWrapper() { + public LambdaQueryWrapper toWrapper() { return new LambdaQueryWrapper() .eq(memberId != null, Aftersale::getMemberId, memberId) .eq(orderId != null, Aftersale::getOrderId, orderId) diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/entity/OrderItem.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/entity/OrderItem.java index 08163514d..69ccb25a0 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/entity/OrderItem.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/entity/OrderItem.java @@ -94,4 +94,5 @@ public class OrderItem extends BaseAudit { @Schema(description = "租户名称") @Excel(name = "租户名称") private String tenantName; + } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/entity/RedPacket.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/entity/RedPacket.java index a30901618..21f8620b8 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/entity/RedPacket.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/entity/RedPacket.java @@ -34,7 +34,7 @@ public class RedPacket extends BaseAudit { @TableField("group_id") @Schema(description = "群id") - private Long groupId; + private String groupId; @TableField("packet_type") @Schema(description = "红包类型(1:普通)") diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/query/SendRedPacketRequest.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/query/SendRedPacketRequest.java index c87989c7f..1c7b7e961 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/query/SendRedPacketRequest.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/query/SendRedPacketRequest.java @@ -29,7 +29,7 @@ public class SendRedPacketRequest { private Long receiverId; @Schema(description = "群id(群聊时必填)") - private Long groupId; + private String groupId; @NotNull(message = "红包类型不能为空") @Range(min = 1, max = 2, message = "红包类型只能是1(普通)或2(拼手气)") diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/vo/OrderVO.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/vo/OrderVO.java index d3ea5ef8a..ad3994979 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/vo/OrderVO.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/domain/vo/OrderVO.java @@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import org.dromara.common.core.domain.model.BaseAudit; import org.dromara.common.excel.annotation.Excel; +import org.dromara.system.domain.vo.SysTenantVo; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -36,6 +37,8 @@ public class OrderVO extends BaseAudit { @Schema(description ="租户id") private String tenantId; + private SysTenantVo tenant; + @Schema(description ="用户帐号") @Excel(name = "用户帐号") private String memberUsername; diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/OrderService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/OrderService.java index 47e5810ff..4a2b958ea 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/OrderService.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/OrderService.java @@ -48,5 +48,6 @@ public interface OrderService extends IService { void refund(RefundBO refundBO); + void sendMessage(Long orderId); } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/AftersaleServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/AftersaleServiceImpl.java index 911978bc5..7a48e4638 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/AftersaleServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/AftersaleServiceImpl.java @@ -31,6 +31,10 @@ import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.event.Constants; import org.dromara.common.core.enums.AftersaleStatus; import org.dromara.common.core.enums.OrderRefundStatus; +import org.dromara.common.mq.domain.MQMessage; +import org.dromara.common.mq.enums.MQMessageType; +import org.dromara.common.mq.enums.MessageActionEnum; +import org.dromara.common.mq.utils.MqUtil; import org.dromara.common.satoken.utils.LoginHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -232,8 +236,25 @@ public class AftersaleServiceImpl extends ServiceImpl params = new HashMap<>(); + Member sender=new Member(); + sender.setUserId(Long.valueOf(actionEnum.getCode())); + params.put("sender", sender); + +// params.put("receiver", memberService.getMemberInfo(o.getMemberId())); + params.put("object", o); + MQMessage mqMessage = new MQMessage(); + mqMessage.setTag(actionEnum.name()); + mqMessage.setMessageType(MQMessageType.IM); + mqMessage.setToUserId(o.getMemberId()); + mqMessage.setData(params); + return mqMessage; + } public void tradeRefund(Aftersale returnApply, Order order, LocalDateTime optDate, Long userId) { //查一下微信订单 QueryWrapper qw = new QueryWrapper<>(); diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java index 2e522199c..02136570d 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/wzj/soopin/order/service/impl/OrderServiceImpl.java @@ -40,6 +40,10 @@ import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.event.Constants; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.mq.domain.MQMessage; +import org.dromara.common.mq.enums.MQMessageType; +import org.dromara.common.mq.enums.MessageActionEnum; +import org.dromara.common.mq.utils.MqUtil; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.system.domain.SysTenant; @@ -288,7 +292,7 @@ public class OrderServiceImpl extends ServiceImpl implements // 更新售后记录 Aftersale aftersale = aftersaleMapper.selectOne(Wrappers.lambdaQuery(Aftersale.class) .eq(Aftersale::getOrderId, orderId).last("limit 1")); - if(aftersale == null){ + if (aftersale == null) { aftersale = new Aftersale(); aftersale.setMemberId(order.getMemberId()); aftersale.setOrderId(orderId); @@ -300,7 +304,7 @@ public class OrderServiceImpl extends ServiceImpl implements aftersale.setReason(refundReason); aftersale.setAuthFlag(2); aftersaleMapper.insert(aftersale); - }else{ + } else { aftersale.setReturnAmount(refundBO.getTotalRefundAmount()); aftersale.setOrgTrace(refundBO.getOrgTrace()); aftersale.setStatus(AftersaleStatus.PAID.getCode()); @@ -415,13 +419,14 @@ public class OrderServiceImpl extends ServiceImpl implements /** * 商户所属订单列表 + * * @param query * @return */ @Override public IPage merchantOrderList(OrderBo query) { - Assert.isTrue(query.getCurrent() != null && query.getSize() != null, "分页参数不能为空"); - if(StrUtil.isBlank(query.getTenantId())){ + Assert.isTrue(query.getCurrent() != null && query.getSize() != null, "分页参数不能为空"); + if (StrUtil.isBlank(query.getTenantId())) { query.setTenantId(TenantHelper.getTenantId()); } IPage resultPage = TenantHelper.ignore(() -> orderMapper.getListByOrderItemTenant(Page.of(query.getCurrent(), query.getSize()), query)); @@ -431,13 +436,14 @@ public class OrderServiceImpl extends ServiceImpl implements /** * 团长所属订单列表 + * * @param query * @return */ @Override public IPage referenceMemberOrderList(OrderBo query) { - Assert.isTrue(query.getCurrent() != null && query.getSize() != null, "分页参数不能为空"); - if(StrUtil.isBlank(query.getTenantId())){ + Assert.isTrue(query.getCurrent() != null && query.getSize() != null, "分页参数不能为空"); + if (StrUtil.isBlank(query.getTenantId())) { query.setTenantId(TenantHelper.getTenantId()); } IPage resultPage = TenantHelper.ignore(() -> orderMapper.getListByOrderTenant(Page.of(query.getCurrent(), query.getSize()), query)); @@ -493,34 +499,36 @@ public class OrderServiceImpl extends ServiceImpl implements } - - @Override public Order getByNo(String orderNo) { return baseMapper.selectOne(new LambdaQueryWrapper().eq(Order::getOrderSn, orderNo)); } -// public void sendMessage(Order order) { -// Long memberId = order.getMemberId(); -// Long orderId = order.getId(); -// // 订单创建成功模板ID -// Long templateId =1940586928850100226L; -// // 查询模板信息 -// SysMessageTemplateVo template = templateService.selectTemplateById(templateId); -// log.info("模板信息为: {}", template); -// -// if (template != null) { -// Map params = new HashMap<>(); -// params.put("orderSn", order.getOrderSn()); -// params.put("productName", orderItemMapper.getName(orderId)); -// SysMessageBo messageBo = new SysMessageBo(); -// messageBo.setTemplateType(org.dromara.system.domain.MessageTemplateType.ORDER_NOTICE); -// messageBo.setTemplateParams(params); -// messageBo.setSenderId(memberId); -// messageBo.setTitle(template.getTitle()); -// sysMessageService.sendMessageToUser(messageBo, memberId); -// } -// } + public void sendMessage(Long orderId) { + Order order = this.getById(orderId); + if (order != null) { + Map params = new HashMap<>(); + params.put("orderID", order.getId()); + params.put("amount", order.getPayAmount()); + + //取订单的第一个商品 + List orderItems = orderItemMapper.findByOrderId(order.getId()); + if (CollectionUtil.isNotEmpty(orderItems)) { + params.put("name", orderItems.get(0).getProductName()); + params.put("pic", orderItems.get(0).getPic()); + params.put("price", orderItems.get(0).getSalePrice()); + params.put("amount", orderItems.get(0).getQuantity()); +// params.put("describe", orderItems.get(0).get()); + } + params.put("account", MessageActionEnum.ORDER_PAY.getAccount()); + MQMessage mqMessage = new MQMessage(); + mqMessage.setTag(MessageActionEnum.ORDER_PAY.name()); + mqMessage.setMessageType(MQMessageType.IM); + mqMessage.setToUserId(order.getMemberId()); + mqMessage.setData(params); + MqUtil.sendIMMessage(mqMessage); + } + } } diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/domain/po/PayOrder.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/domain/po/PayOrder.java index 4799a94ed..a67a2676c 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/domain/po/PayOrder.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/domain/po/PayOrder.java @@ -100,5 +100,4 @@ public class PayOrder extends BaseAudit { @TableField(value = "del_flag", fill = FieldFill.INSERT, jdbcType = JdbcType.CHAR) private String delFlag; - private String title; } diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/kit/params/impl/OrderCashier.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/kit/params/impl/OrderCashier.java index 83cf25f5d..c47fd50e8 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/kit/params/impl/OrderCashier.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/kit/params/impl/OrderCashier.java @@ -56,7 +56,7 @@ public class OrderCashier implements CashierExecute { Order order = orderService.getByNo(payParam.getSn()); // //如果订单已支付,则不能发器支付 - if (order.getStatus().equals(OrderStatusEnum.PAID.name())) { + if (!order.getStatus().equals(OrderStatusEnum.UNPAID.name())) { throw new ServiceException(ResultCode.PAY_DOUBLE_ERROR); } //如果订单状态不是待付款,则抛出异常 diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/kit/plugin/wechat/WechatPlugin.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/kit/plugin/wechat/WechatPlugin.java index 04f840405..94363fbe5 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/kit/plugin/wechat/WechatPlugin.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/kit/plugin/wechat/WechatPlugin.java @@ -266,7 +266,7 @@ public class WechatPlugin implements Payment { Map attachMap = new HashMap<>(); attachMap.put("orderType", payParam.getOrderType()); - attachMap.put("outOrderNo", outOrderNo); + attachMap.put("sn", outOrderNo); String attach = URLEncoder.createDefault().encode(JSONUtil.toJsonStr(attachMap), StandardCharsets.UTF_8); String appid = setting.getAppId(); @@ -513,9 +513,7 @@ public class WechatPlugin implements Payment { String payParamStr = jsonObject.getStr("attach"); String payParamJson = URLDecoder.decode(payParamStr, StandardCharsets.UTF_8); PayParam payParam = JSONUtil.toBean(payParamJson, PayParam.class); - String tradeNo = jsonObject.getStr("transaction_id"); -// Double totalAmount = CurrencyUtil.reversalFen(jsonObject.getJSONObject("amount").getDouble("total")); PaymentSuccessParams paymentSuccessParams = new PaymentSuccessParams( PaymentMethodEnum.WECHAT.getCode(), diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/IWithdrawService.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/IWithdrawService.java index 21620bb4d..d91d6c981 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/IWithdrawService.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/IWithdrawService.java @@ -9,7 +9,6 @@ public interface IWithdrawService extends IService { boolean withdrawCallback(WithdrawBO withdraw); - boolean withdrawWallet(Withdraw withdraw); + boolean withdraw (Withdraw withdraw); - boolean withdrawRevenue (Withdraw withdraw); } diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/ChargeServiceImpl.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/ChargeServiceImpl.java index a9aa3a664..2f4fd8183 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/ChargeServiceImpl.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/ChargeServiceImpl.java @@ -15,10 +15,18 @@ import com.wzj.soopin.transaction.service.IChargeService; import com.wzj.soopin.transaction.util.SnowFlake; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.mq.domain.MQMessage; +import org.dromara.common.mq.enums.MQMessageType; +import org.dromara.common.mq.enums.MessageActionEnum; +import org.dromara.common.mq.utils.MqUtil; +import org.dromara.common.satoken.utils.LoginHelper; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.util.HashMap; +import java.util.Map; /** * 会员封禁 @@ -41,30 +49,35 @@ public class ChargeServiceImpl extends ServiceImpl impleme boolean chargeSuccess = true; //充值成功后更新会员账户余额 if (chargeSuccess) { - //更新会员账户余额 - MemberAccount memberAccount = memberAccountService.getById(charge.getMemberId()); - memberAccount.setWallet(memberAccount.getWallet().add(charge.getMoney())); - memberAccountService.updateById(memberAccount); - //生成充值记录 - AccountBill accountBill = AccountBill.builder() - .accountId(charge.getMemberId()) - .changeAmount(charge.getMoney()) - .changeType(AccountBillChangeTypeEnum.IN.getCode()) - .changeDesc("充值") - .source(AccountBillSourceEnum.RECHARGE.getCode()) - .build(); - accountBillService.save(accountBill); - return true; + accountBillService.addMoney(charge.getActualMoney(), charge.getMemberId(), AccountBillSourceEnum.RECHARGE, "充值"); } //生成充值记录 + //获取账号金额 + MemberAccount memberAccount = memberAccountService.getById(charge.getMemberId()); + MqUtil.sendIMMessage(buildMessage(charge,memberAccount)); return false; } + private MQMessage buildMessage(Charge charge,MemberAccount memberAccount) { + Map params = new HashMap<>(); + MQMessage mqMessage = new MQMessage(); + mqMessage.setTag(MessageActionEnum.ORDER_RECHARGE.name()); + mqMessage.setMessageType(MQMessageType.IM); + // 评论视频,通知视频作者 + params.put("orderID", charge.getId()); + params.put("amount", charge.getMoney()); + params.put("totalAmount", memberAccount.getWallet()); + mqMessage.setToUserId(Long.valueOf(charge.getMemberId())); + mqMessage.setData(params); + return mqMessage; + + } + @Override public boolean charge(Charge charge) { //判断充值金额不能为零 - if (charge.getMoney()==null||charge.getMoney().compareTo(BigDecimal.ZERO) == 0) { + if (charge.getMoney() == null || charge.getMoney().compareTo(BigDecimal.ZERO) == 0) { throw new ServiceException("充值金额不能为零"); } //状态为待充值 @@ -93,17 +106,22 @@ public class ChargeServiceImpl extends ServiceImpl impleme @Override public boolean paySuccess(String code, String payNo, Integer method) { Charge charge = getByCode(code); - if(charge==null){ - log.error("充值记录不存在,code:{}",code); + if (charge == null) { + log.error("充值记录不存在,code:{}", code); return false; } charge.setStatus(ChargeStatus.SUCCESS.getCode()); charge.setPayNo(payNo); charge.setMethod(method); - boolean result= updateById(charge); - if (result){ - accountBillService.addMoney(charge.getActualMoney(),charge.getMemberId(),AccountBillSourceEnum.RECHARGE,"充值"); + boolean result = updateById(charge); + if (result) { + accountBillService.addMoney(charge.getActualMoney(), charge.getMemberId(), AccountBillSourceEnum.RECHARGE, "充值"); + //生成充值记录 + //获取账号金额 + MemberAccount memberAccount = memberAccountService.getMemberAccount(charge.getMemberId()); + MqUtil.sendIMMessage(buildMessage(charge,memberAccount)); } + return result; } } diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/DivideServiceImpl.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/DivideServiceImpl.java index 0fda5420a..6be459dc0 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/DivideServiceImpl.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/DivideServiceImpl.java @@ -175,7 +175,7 @@ public class DivideServiceImpl extends ServiceImpl impleme //获取订单信息 Order order = orderService.getById(orderId); Assert.notNull(order, () -> new ServiceException("订单不存在")); - Assert.isTrue(Objects.equals(order.getStatus(), OrderStatusEnum.PAID.getValue()), () -> new ServiceException("订单未支付")); + Assert.isTrue(Objects.equals(order.getStatus(), OrderStatusEnum.UNPAID.getValue()), () -> new ServiceException("订单未支付")); PayOrder payOrder = payOrderService.getById(order.getPayId()); Assert.notNull(payOrder, () -> new ServiceException("支付单不存在")); Assert.isTrue(payOrder.getTransState() == TransState.PAID.getCode(), () -> new ServiceException("订单未支付")); diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/EasypayServiceImpl.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/EasypayServiceImpl.java index fe9e5e91a..cf45efa3f 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/EasypayServiceImpl.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/EasypayServiceImpl.java @@ -3,6 +3,7 @@ package com.wzj.soopin.transaction.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.codec.Base64; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.lang.Assert; @@ -21,6 +22,7 @@ import com.wzj.soopin.order.domain.bo.RefundBO; import com.wzj.soopin.order.domain.entity.Aftersale; import com.wzj.soopin.order.domain.entity.Order; import com.wzj.soopin.order.domain.entity.OrderItem; +import com.wzj.soopin.order.domain.vo.OrderVO; import com.wzj.soopin.order.emum.OrderStatusEnum; import com.wzj.soopin.order.service.AftersaleService; import com.wzj.soopin.order.service.OrderItemService; @@ -77,6 +79,10 @@ import org.dromara.common.core.enums.TenantType; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.ServletUtils; +import org.dromara.common.mq.domain.MQMessage; +import org.dromara.common.mq.enums.MQMessageType; +import org.dromara.common.mq.enums.MessageActionEnum; +import org.dromara.common.mq.utils.MqUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -90,6 +96,7 @@ import java.util.*; import java.util.stream.Collectors; import static com.wzj.soopin.transaction.constans.EasypayConstants.*; +import static net.sf.jsqlparser.parser.feature.Feature.comment; /** * 会员封禁 @@ -521,6 +528,29 @@ public class EasypayServiceImpl implements IEasypayService { .paymentTime(LocalDateTimeUtil.parse(StrBuilder.create(respOrderInfo.getDateEnd()).append(respOrderInfo.getTimeEnd()).toString(), "yyyyMMddHHmmss")) .payType(PayType.getByValue(payOrder.getPayType()).getChannel()) .build()); + + //发出消息 + MqUtil.sendIMMessage(buildMQMessage(order)); + } + private MQMessage buildMQMessage(Order order) { + Map params = new HashMap<>(); + params.put("orderID", order.getId()); + params.put("amount", order.getPayAmount()); + + //取订单的第一个商品 + List orderItems = orderItemService.findByOrderId(order.getId()); + if (CollectionUtil.isNotEmpty(orderItems)) { + params.put("name", orderItems.get(0).getProductName()); + params.put("pic", orderItems.get(0).getPic()); + params.put("price", orderItems.get(0).getSalePrice()); + params.put("amount", orderItems.get(0).getQuantity()); + } + MQMessage mqMessage = new MQMessage(); + mqMessage.setTag(MessageActionEnum.ORDER_PAY.name()); + mqMessage.setMessageType(MQMessageType.IM); + mqMessage.setToUserId(order.getMemberId()); + mqMessage.setData(params); + return mqMessage; } @Override diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/RedPacketServiceImpl.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/RedPacketServiceImpl.java index f014cca86..524ce08dd 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/RedPacketServiceImpl.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/RedPacketServiceImpl.java @@ -13,6 +13,7 @@ import com.wzj.soopin.order.mapper.RedPacketReceiveMapper; import com.wzj.soopin.transaction.service.IAccountBillService; import com.wzj.soopin.transaction.service.RedPacketService; import lombok.RequiredArgsConstructor; +import org.dromara.common.core.constant.ResultCode; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.base.BaseException; import org.springframework.data.redis.core.RedisTemplate; @@ -66,7 +67,16 @@ public class RedPacketServiceImpl extends ServiceImpl1){ + throw new BaseException(ResultCode.PACKET_SINGLE_COUNT_ERROR.message()); + } } // 创建红包记录 @@ -74,7 +84,7 @@ public class RedPacketServiceImpl extends ServiceImpl result = new HashMap<>(); diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/WithdrawServiceImpl.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/WithdrawServiceImpl.java index a2d95d463..5a80b951e 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/WithdrawServiceImpl.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/WithdrawServiceImpl.java @@ -1,6 +1,7 @@ package com.wzj.soopin.transaction.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wzj.soopin.content.domain.po.Comment; import com.wzj.soopin.member.domain.po.Member; import com.wzj.soopin.transaction.domain.bo.WithdrawBO; import com.wzj.soopin.member.domain.po.MemberAccount; @@ -19,10 +20,15 @@ import com.wzj.soopin.transaction.domain.vo.EasypayAccountVO; import com.wzj.soopin.transaction.service.IAccountBillService; import com.wzj.soopin.transaction.service.IWithdrawService; import com.wzj.soopin.transaction.service.IEasypayService; +import com.wzj.soopin.transaction.util.SnowFlake; import com.wzj.soopin.transaction.wechat.WechatPayConfig; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.constant.ResultCode; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.mq.domain.MQMessage; +import org.dromara.common.mq.enums.MessageActionEnum; +import org.dromara.common.mq.utils.MqUtil; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.system.domain.SysTenantAccount; import org.dromara.system.service.ISysTenantAccountService; @@ -30,9 +36,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * 会员封禁 @@ -60,22 +64,25 @@ public class WithdrawServiceImpl extends ServiceImpl i private final IMemberService memberService; + private final WechatPayConfig wechatPayConfig; @Override public boolean audit(WithdrawBO bo) { Withdraw withdraw = getById(bo.getId()); if (withdraw == null) { throw new RuntimeException("提现申请不存在"); } - if (!Objects.equals(WithdrawAuditStatus.PENDING.getCode(), withdraw.getAuditStatus())) { + if (!Objects.equals(WithdrawAuditStatus.PENDING.getCode(), withdraw.getStatus())) { throw new RuntimeException("提现申请已处理"); } //发起提现 try{ - wxPayService.initiateBatchTransferNew(buildWechatPayParam(bo)); + wxPayService.initiateBatchTransferNew(buildWechatPayParam(withdraw)); }catch (ServiceException e){ - log.error("提现申请失败",e); - throw new RuntimeException("提现申请失败"); + //提现失败 + //发送通知 + MqUtil.sendIMMessage(buildMessage(withdraw,MessageActionEnum.ORDER_WITHDRAW_AUDIT)); + throw new ServiceException(ResultCode.WITHDRAW_AUDIT_ERROR); } withdraw = Withdraw.builder().id(bo.getId()) .auditReason(bo.getAuditReason()) @@ -84,14 +91,36 @@ public class WithdrawServiceImpl extends ServiceImpl i .auditBy(LoginHelper.getUserId()) .build(); this.updateById(withdraw); + + //发送成功通知 + MqUtil.sendIMMessage(buildMessage(withdraw, MessageActionEnum.ORDER_WITHDRAW_AUDIT)); return true; } + private MQMessage buildMessage(Withdraw o, MessageActionEnum actionEnum) { + Map params = new HashMap<>(); + Member sender=new Member(); + sender.setUserId(Long.valueOf(actionEnum.getCode())); + params.put("sender", sender); + params.put("receiver", memberService.getMemberInfo(o.getMemberId())); + params.put("object", o); + params.put("account", actionEnum.getAccount()); + MQMessage mqMessage = new MQMessage(); + mqMessage.setTag(actionEnum.name()); + mqMessage.setData(params); + return mqMessage; + } + - private InitiateBatchTransferRequestNew buildWechatPayParam(WithdrawBO withdraw) { + //sender + //receiver + //object + //action + + + private InitiateBatchTransferRequestNew buildWechatPayParam(Withdraw withdraw) { InitiateBatchTransferRequestNew request = new InitiateBatchTransferRequestNew(); - WechatPayConfig wechatPayConfig = new WechatPayConfig(); //商户AppID request.setAppid(wechatPayConfig.getAppId()); //商户单号 @@ -102,9 +131,14 @@ public class WithdrawServiceImpl extends ServiceImpl i request.setTransferSceneId("1005"); //用户的openId Member member=memberService.getById(withdraw.getMemberId()); + if(member==null){ + throw new ServiceException(ResultCode.USER_NOT_EXIST); + } request.setOpenid(member.getOpenId()); //收款用户姓名 - request.setUserName(member.getNickname()); + if (request.getTransferAmount() > 30) { + request.setUserName(member.getNickname()); + } //转账备注 request.setTransferRemark("提现"); //转账场景报备信息 佣金的固定类型 @@ -155,47 +189,8 @@ public class WithdrawServiceImpl extends ServiceImpl i } - public boolean withdrawRevenue(Withdraw withdraw) { - //调用三方支付平台获取用户余额 - // TODO: 2025/9/10 这个地方不能用null ,但是现在商户提现的业务不对,暂时没有提现业务 - SysTenantAccount tenantAccount = sysTenantAccountService.getByTenantId(null); - if (tenantAccount == null) { - throw new RuntimeException("用户不存在"); - } - BigDecimal balance = tenantAccount.getRevenue(); - EasypayAccountVO easypayAccountVO = easypayService.getEasypayAccount(withdraw.getMemberId()); - if (easypayAccountVO == null) { - throw new RuntimeException("账户余额获取失败"); - } - //生成费用 - BigDecimal fee = withdraw.getMoney().multiply(new BigDecimal("0.01")); - withdraw.setFee(fee); - withdraw.setActualMoney(withdraw.getMoney().subtract(fee)); - - - save(withdraw); - BigDecimal newBalance = balance.subtract(withdraw.getMoney()); - - tenantAccount.setRevenue(newBalance); - //锁定用户余额 - sysTenantAccountService.updateById(tenantAccount); - - //生成账单 - AccountBill memberAccountChangeRecord = AccountBill.builder() - .accountId(withdraw.getMemberId()) - .moneyBalance(balance.subtract(withdraw.getMoney())) - .beforeBalance(balance) - .afterBalance(newBalance) - .changeType(AccountBillChangeTypeEnum.OUT.getCode()) - .changeDesc("提现锁定") - .source(AccountBillSourceEnum.WITHDRAW.getCode()) - .build(); - accountBillService.save(memberAccountChangeRecord); - return true; - } - - public boolean withdrawWallet(Withdraw withdraw) { + public boolean withdraw (Withdraw withdraw) { MemberAccount memberAccount = memberAccountService.getMemberAccount(withdraw.getMemberId()); if (memberAccount == null) { throw new RuntimeException("用户不存在"); @@ -206,9 +201,10 @@ public class WithdrawServiceImpl extends ServiceImpl i throw new RuntimeException("用户余额不足"); } //生成费用 - BigDecimal fee = withdraw.getMoney().multiply(new BigDecimal("0.01")); + BigDecimal fee = withdraw.getMoney().multiply(new BigDecimal("0.00")); withdraw.setFee(fee); withdraw.setActualMoney(withdraw.getMoney().subtract(fee)); + withdraw.setCode(SnowFlake.createStr("TX")); save(withdraw); BigDecimal newBalance = balance.subtract(withdraw.getMoney()); diff --git a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/WxPayService.java b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/WxPayService.java index 694a35603..85ac0dc8b 100644 --- a/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/WxPayService.java +++ b/ruoyi-modules/ruoyi-transaction/src/main/java/com/wzj/soopin/transaction/service/impl/WxPayService.java @@ -17,6 +17,7 @@ import com.wzj.soopin.transaction.domain.entity.TransferBillEntity; import com.wzj.soopin.transaction.domain.entity.TransferDetailEntityNew; import com.wzj.soopin.transaction.wechat.WechatPayConfig; import jakarta.servlet.http.HttpServletRequest; +import org.dromara.common.core.constant.ResultCode; import org.dromara.common.core.exception.ServiceException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,32 +54,27 @@ public class WxPayService { */ public InitiateBatchTransferResponseNew initiateBatchTransferNew(InitiateBatchTransferRequestNew request) { logger.info("WxPayService.initiateBatchTransferNew request:{}", request.toString()); - try{ - + if(request.getUserName()!=null){ String encryptName = wxPayConfig.createEncryptor().encrypt(request.getUserName()); request.setUserName(encryptName); - String requestPath = "https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/transfer-bills"; - HttpHeaders headers = new HttpHeaders(); - headers.addHeader("Accept", MediaType.APPLICATION_JSON.getValue()); - headers.addHeader("Content-Type", MediaType.APPLICATION_JSON.getValue()); - headers.addHeader("Wechatpay-Serial", wxPayConfig.createEncryptor().getWechatpaySerial()); - HttpRequest httpRequest = - new HttpRequest.Builder() - .httpMethod(HttpMethod.POST) - .url(requestPath) - .headers(headers) - .body(createRequestBody(request)) - .build(); - HttpClient httpClient = new DefaultHttpClientBuilder().config(wxPayConfig).build(); - HttpResponse httpResponse = httpClient.execute(httpRequest, InitiateBatchTransferResponseNew.class); - logger.info("WxPayService.initiateBatchTransferNew response:{}", httpResponse.getServiceResponse()); - return httpResponse.getServiceResponse(); - - }catch (Exception e){ - logger.error("WxPayService.initiateBatchTransferNew error:{}", e); } - return null; + String requestPath = "https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/transfer-bills"; + HttpHeaders headers = new HttpHeaders(); + headers.addHeader("Accept", MediaType.APPLICATION_JSON.getValue()); + headers.addHeader("Content-Type", MediaType.APPLICATION_JSON.getValue()); + headers.addHeader("Wechatpay-Serial", wxPayConfig.createEncryptor().getWechatpaySerial()); + HttpRequest httpRequest = + new HttpRequest.Builder() + .httpMethod(HttpMethod.POST) + .url(requestPath) + .headers(headers) + .body(createRequestBody(request)) + .build(); + HttpClient httpClient = new DefaultHttpClientBuilder().config(wxPayConfig).build(); + HttpResponse httpResponse = httpClient.execute(httpRequest, InitiateBatchTransferResponseNew.class); + logger.info("WxPayService.initiateBatchTransferNew response:{}", httpResponse.getServiceResponse()); + return httpResponse.getServiceResponse(); } /** @@ -91,22 +87,22 @@ public class WxPayService { logger.info("WxPayService.getTransferDetailByOutNoNew request:{}", outBillNo); Config config = new RSAAutoCertificateConfig.Builder() - .merchantId(WechatPayConfig.getMchId()) - .privateKeyFromPath(WechatPayConfig.getPrivateKeyPath()) - .merchantSerialNumber(WechatPayConfig.getMchSerialNo()) - .apiV3Key(WechatPayConfig.getApiV3Key()) - .build(); + .merchantId(WechatPayConfig.getMchId()) + .privateKeyFromPath(WechatPayConfig.getPrivateKeyPath()) + .merchantSerialNumber(WechatPayConfig.getMchSerialNo()) + .apiV3Key(WechatPayConfig.getApiV3Key()) + .build(); String requestPath = "https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/transfer-bills/out-bill-no/{out_bill_no}"; requestPath = requestPath.replace("{out_bill_no}", UrlEncoder.urlEncode(outBillNo)); HttpHeaders headers = new HttpHeaders(); headers.addHeader("Accept", MediaType.APPLICATION_JSON.getValue()); headers.addHeader("Content-Type", MediaType.APPLICATION_JSON.getValue()); HttpRequest httpRequest = - new HttpRequest.Builder() - .httpMethod(HttpMethod.GET) - .url(requestPath) - .headers(headers) - .build(); + new HttpRequest.Builder() + .httpMethod(HttpMethod.GET) + .url(requestPath) + .headers(headers) + .build(); PrivacyDecryptor decryptor = config.createDecryptor(); HttpClient httpClient = new DefaultHttpClientBuilder().config(config).build(); HttpResponse httpResponse = httpClient.execute(httpRequest, TransferDetailEntityNew.class); @@ -142,20 +138,20 @@ public class WxPayService { String wechatpayNonce = request.getHeader("Wechatpay-Nonce"); // 1. 构造 RequestParam RequestParam requestParam = new RequestParam.Builder() - .serialNumber(wechatPaySerial) - .nonce(wechatpayNonce) - .signature(wechatSignature) - .timestamp(wechatTimestamp) - .body(requestBody) - .build(); + .serialNumber(wechatPaySerial) + .nonce(wechatpayNonce) + .signature(wechatSignature) + .timestamp(wechatTimestamp) + .body(requestBody) + .build(); // 2. 构建Config RSAAutoCertificateConfig Config config = new RSAAutoCertificateConfig.Builder() - .merchantId(WechatPayConfig.getMchId()) - .privateKeyFromPath(WechatPayConfig.getPrivateKeyPath()) - .merchantSerialNumber(WechatPayConfig.getMchSerialNo()) - .apiV3Key(WechatPayConfig.getApiV3Key()) - .build(); - logger.info("WxPayService.wxPaySuccessCallback request : wechatPaySerial is [{}] , wechatSignature is [{}] , wechatTimestamp is [{}] , wechatpayNonce is [{}] , requestBody is [{}]",wechatPaySerial,wechatSignature,wechatTimestamp,wechatpayNonce,requestBody); + .merchantId(WechatPayConfig.getMchId()) + .privateKeyFromPath(WechatPayConfig.getPrivateKeyPath()) + .merchantSerialNumber(WechatPayConfig.getMchSerialNo()) + .apiV3Key(WechatPayConfig.getApiV3Key()) + .build(); + logger.info("WxPayService.wxPaySuccessCallback request : wechatPaySerial is [{}] , wechatSignature is [{}] , wechatTimestamp is [{}] , wechatpayNonce is [{}] , requestBody is [{}]", wechatPaySerial, wechatSignature, wechatTimestamp, wechatpayNonce, requestBody); // 3. 初始化 NotificationParser NotificationParser parser = new NotificationParser((NotificationConfig) config); try { @@ -244,6 +240,5 @@ public class WxPayService { } - } diff --git a/script/sql/syncVlog.sql b/script/sql/syncVlog.sql new file mode 100644 index 000000000..1a22e2cb4 --- /dev/null +++ b/script/sql/syncVlog.sql @@ -0,0 +1,63 @@ +INSERT INTO cont_vlog ( + id, + member_id, + url, + cover, + title, + width, + height, + like_counts, + comments_counts, + is_private, + create_time, + update_time, + status, + reason, + city_code, + file_id, + first_frame_img, + create_by, + update_by, + del_flag +) +SELECT + -- 核心字段映射(t_vlog -> cont_vlog) + id, + vloger_id, -- 视频发布者ID映射为会员ID + url, + cover, + title, + width, + height, + like_counts, + comments_counts, + is_private, + created_time, -- 创建时间字段名转换 + updated_time, -- 更新时间字段名转换 + status, + reason, + city_code, + file_id, + first_frame_img, + vloger_id, -- 假设创建者为视频发布者 + vloger_id, -- 假设更新者为视频发布者(可根据实际业务调整) + 0 -- 删除标志默认为0(未删除) +FROM t_vlog +-- 处理重复数据:若id已存在则更新指定字段 + ON DUPLICATE KEY UPDATE + member_id = VALUES(member_id), + url = VALUES(url), + cover = VALUES(cover), + title = VALUES(title), + width = VALUES(width), + height = VALUES(height), + like_counts = VALUES(like_counts), + comments_counts = VALUES(comments_counts), + is_private = VALUES(is_private), + update_time = VALUES(update_time), + status = VALUES(status), + reason = VALUES(reason), + city_code = VALUES(city_code), + file_id = VALUES(file_id), + first_frame_img = VALUES(first_frame_img), + update_by = VALUES(update_by);