Merge remote-tracking branch 'origin/wzj-main' into wzj-main
This commit is contained in:
commit
f33323af44
@ -24,6 +24,7 @@ import com.wzj.soopin.transaction.convert.ChargeConvert;
|
|||||||
import com.wzj.soopin.transaction.convert.WithdrawConvert;
|
import com.wzj.soopin.transaction.convert.WithdrawConvert;
|
||||||
import com.wzj.soopin.transaction.domain.bo.ChargeBO;
|
import com.wzj.soopin.transaction.domain.bo.ChargeBO;
|
||||||
import com.wzj.soopin.transaction.domain.bo.WithdrawBO;
|
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.enums.WithdrawType;
|
||||||
import com.wzj.soopin.transaction.service.IAccountBillService;
|
import com.wzj.soopin.transaction.service.IAccountBillService;
|
||||||
import com.wzj.soopin.transaction.service.IChargeService;
|
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.dromara.common.social.utils.SocialUtils;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/app/member")
|
@RequestMapping("/app/member")
|
||||||
@Tag(name = "会员管理")
|
@Tag(name = "会员管理")
|
||||||
@ -86,7 +89,7 @@ public class AppMemberController {
|
|||||||
}
|
}
|
||||||
memberId = loginUser.getUserId();
|
memberId = loginUser.getUserId();
|
||||||
}
|
}
|
||||||
return R.ok(service.getMemberInfo(memberId));
|
return R.ok(memberBusiness.info(memberId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "获取会员账户表详细信息")
|
@Operation(summary = "获取会员账户表详细信息")
|
||||||
@ -200,7 +203,15 @@ public class AppMemberController {
|
|||||||
Long memberId = loginUser.getUserId();
|
Long memberId = loginUser.getUserId();
|
||||||
bo.setMemberId(memberId);
|
bo.setMemberId(memberId);
|
||||||
bo.setType(WithdrawType.WALLET.getCode());
|
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();
|
return R.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -64,6 +64,7 @@ public class AppSearchController {
|
|||||||
} else if (Objects.nonNull(searchBO) && Objects.nonNull(searchBO.getType()) && (SearchTypeEnum.MEMBER.type.intValue() == searchBO.getType().intValue())) {
|
} else if (Objects.nonNull(searchBO) && Objects.nonNull(searchBO.getType()) && (SearchTypeEnum.MEMBER.type.intValue() == searchBO.getType().intValue())) {
|
||||||
MemberBO memberBO = new MemberBO();
|
MemberBO memberBO = new MemberBO();
|
||||||
memberBO.setNickname(searchBO.getTitle());
|
memberBO.setNickname(searchBO.getTitle());
|
||||||
|
memberBO.setPhone(searchBO.getTitle());
|
||||||
pages = memberService.getMemberPageList(memberBO, page);
|
pages = memberService.getMemberPageList(memberBO, page);
|
||||||
}
|
}
|
||||||
return R.ok(pages);
|
return R.ok(pages);
|
||||||
|
@ -38,7 +38,7 @@ public class AppTenantController {
|
|||||||
Long memberId = loginUser.getUserId();
|
Long memberId = loginUser.getUserId();
|
||||||
bo.setMemberId(memberId);
|
bo.setMemberId(memberId);
|
||||||
bo.setType(WithdrawType.REVENUE.getCode());
|
bo.setType(WithdrawType.REVENUE.getCode());
|
||||||
return R.ok(withdrawService.withdrawRevenue(withdrawConvert.toPo(bo)));
|
return R.ok(withdrawService.withdraw(withdrawConvert.toPo(bo)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ import com.wzj.soopin.content.utils.RedisOperator;
|
|||||||
import com.wzj.soopin.order.business.IOrderBusiness;
|
import com.wzj.soopin.order.business.IOrderBusiness;
|
||||||
import com.wzj.soopin.order.domain.bo.OrderBo;
|
import com.wzj.soopin.order.domain.bo.OrderBo;
|
||||||
import com.wzj.soopin.order.domain.bo.SaveOrderBO;
|
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.domain.vo.OrderVO;
|
||||||
import com.wzj.soopin.order.service.IMemberOrderService;
|
import com.wzj.soopin.order.service.IMemberOrderService;
|
||||||
import com.wzj.soopin.order.service.OrderService;
|
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.core.domain.model.LoginUser;
|
||||||
import org.dromara.common.log.annotation.Log;
|
import org.dromara.common.log.annotation.Log;
|
||||||
import org.dromara.common.log.enums.BusinessType;
|
import org.dromara.common.log.enums.BusinessType;
|
||||||
|
import org.dromara.common.mq.utils.MqUtil;
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
@ -70,4 +72,13 @@ public class AppOrderController {
|
|||||||
return R.ok();
|
return R.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "发送消息")
|
||||||
|
@Log(title = "发送消息", businessType = BusinessType.UPDATE)
|
||||||
|
@PostMapping("/send/{orderId}")
|
||||||
|
public R<OrderVO> send(@PathVariable("orderId") Long orderId) {
|
||||||
|
orderService.sendMessage(orderId);
|
||||||
|
//发出消息
|
||||||
|
return R.ok();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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 class BaseInfoProperties {
|
||||||
|
|
||||||
public RedisCache redis;
|
|
||||||
|
|
||||||
public static final Integer COMMON_START_PAGE = 1;
|
public static final Integer COMMON_START_PAGE = 1;
|
||||||
public static final Integer COMMON_START_PAGE_ZERO = 0;
|
public static final Integer COMMON_START_PAGE_ZERO = 0;
|
@ -232,6 +232,16 @@ public enum ResultCode {
|
|||||||
CAN_NOT_RECHARGE_WALLET(32012, "不能使用余额进行充值"),
|
CAN_NOT_RECHARGE_WALLET(32012, "不能使用余额进行充值"),
|
||||||
RECHARGE_PRICE_ERROR(32013, "充值金额错误"),
|
RECHARGE_PRICE_ERROR(32013, "充值金额错误"),
|
||||||
|
|
||||||
|
|
||||||
|
WITHDRAW_ERROR(33000, "提现失败"),
|
||||||
|
WITHDRAW_AUDIT_ERROR(33001, "提现审核失败"),
|
||||||
|
WITHDRAW_WALLET_ERROR(33002, "提现到钱包失败"),
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PACKET_SINGLE_COUNT_ERROR(35000, "单聊红包数量只能为1"),
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 售后
|
* 售后
|
||||||
*/
|
*/
|
||||||
|
@ -2,6 +2,7 @@ package org.dromara.common.core.exception;
|
|||||||
|
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import org.dromara.common.core.constant.ResultCode;
|
import org.dromara.common.core.constant.ResultCode;
|
||||||
|
import org.dromara.common.core.exception.base.BaseException;
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
|
|||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.dromara.common.mq.enums.MQMessageType;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@ -28,7 +29,7 @@ public class MQMessage {
|
|||||||
/**
|
/**
|
||||||
* 消息类型
|
* 消息类型
|
||||||
*/
|
*/
|
||||||
private String
|
private MQMessageType
|
||||||
messageType;
|
messageType;
|
||||||
/**
|
/**
|
||||||
* 消息内容
|
* 消息内容
|
||||||
@ -42,4 +43,6 @@ public class MQMessage {
|
|||||||
* 发送时间
|
* 发送时间
|
||||||
*/
|
*/
|
||||||
private LocalDateTime sendTime;
|
private LocalDateTime sendTime;
|
||||||
|
|
||||||
|
private Long toUserId;
|
||||||
}
|
}
|
||||||
|
@ -3,30 +3,36 @@ package org.dromara.common.mq.enums;
|
|||||||
public enum MessageActionEnum {
|
public enum MessageActionEnum {
|
||||||
|
|
||||||
|
|
||||||
SYSTEM_NOTIFY(10, "system"), // 系统->通知
|
SYSTEM_NOTIFY(10, "system","systemNotify"), // 系统->通知
|
||||||
SYSTEM_REPORT(13, "system"), // 系统->举报下架(视频,视频评论) 视频评论
|
SYSTEM_REPORT(13, "system","systemReport"), // 系统->举报下架(视频,视频评论) 视频评论
|
||||||
SYSTEM_CHECK(14, "system"), // 系统->审核结果(复审,驳回 ,通过)
|
SYSTEM_CHECK(14, "system","systemCheck"), // 系统->审核结果(通过)
|
||||||
SYSTEM_PUSH(15, "system"), //系统->推广类的
|
SYSTEM_VLOG_REFUSE(17, "system","systemVlogRefuse"), // 系统->审核结果(驳回)
|
||||||
INTERACTION_COMMENT(21, "interaction"), //互动->评论
|
SYSTEM_VLOG_RECHECK(18, "system","systemVlogRecheck"), // 系统->审核结果(复审)
|
||||||
INTERACTION_AT(27, "interaction"), //互动->视频评论中的@
|
SYSTEM_PUSH(15, "system","systemPush"), //系统->推广类的
|
||||||
INTERACTION_LIKE(28, "interaction"), //互动->点赞
|
INTERACTION_COMMENT(25, "interaction","interactionComment"), //互动->评论
|
||||||
NEW_FOUCS(21,"newFocus"), //新的关注
|
INTERACTION_AT(27, "interaction","interactionAt"), //互动->视频评论中的@
|
||||||
INTERACTION_REPLY(29, "interaction"), //互动->评论回复
|
INTERACTION_LIKE(28, "interaction","interactionLike"), //互动->点赞
|
||||||
ORDER_RECHARGE(30, "order"), //订单->充值 online
|
NEW_FOUCS(21,"newFocus","newFocus"), //新的关注
|
||||||
ORDER_PAY(31, "order"), //订单->订单交易成功通知 online
|
INTERACTION_REPLY(29, "interaction","interactionReply"), //互动->评论回复
|
||||||
ORDER_REFUND(32, "order"), //订单->退款结果通知
|
ORDER_RECHARGE(30, "order","orderRecharge"), //订单->充值 online
|
||||||
GROUP_NOTIFY_CHECK(43, "groupNotify"), //群通知->进群申请 online
|
ORDER_PAY(31, "order","orderPay"), //订单->订单交易成功通知 online
|
||||||
GROUP_NOTIFY_ACCEPT(44, "groupNotify"), // 群通知->进群审核审核通过 online
|
ORDER_REFUND(32, "order","orderRefund"), //订单->退款结果通知
|
||||||
GROUP_NOTIFY_FAIL(45, "groupNotify"), // 群通知->进群审核审核拒绝 online
|
ORDER_WITHDRAW_AUDIT(33, "order","orderWithdrawAudit"), //订单->提现审核结果通知
|
||||||
GROUP_NOTIFY_LEAVE_UP(46, "groupNotify"), // 群通知->群升级为达人群通知
|
ORDER_WITHDRAW_REFUSE(34, "order","orderWithdrawRefuse"), //订单->提现审核结果通知(拒绝)
|
||||||
GROUP_NOTIFY_LEAVE_DOWN(47, "groupNotify"); // 群通知->群降级为普通群通知
|
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 int code;
|
||||||
private String account;
|
private String account;
|
||||||
|
private String key;
|
||||||
|
|
||||||
MessageActionEnum(int code, String account) {
|
MessageActionEnum(int code, String account,String key) {
|
||||||
this.code = code;
|
this.code = code;
|
||||||
this.account = account;
|
this.account = account;
|
||||||
|
this.key = key;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getCode() {
|
public int getCode() {
|
||||||
@ -46,10 +52,14 @@ public enum MessageActionEnum {
|
|||||||
}
|
}
|
||||||
public static MessageActionEnum getByAccount(String account) {
|
public static MessageActionEnum getByAccount(String account) {
|
||||||
for (MessageActionEnum actionEnum : values()) {
|
for (MessageActionEnum actionEnum : values()) {
|
||||||
if (actionEnum.getAccount().equals(account)) {
|
if (actionEnum.name().equals(account)) {
|
||||||
return actionEnum;
|
return actionEnum;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,6 +78,10 @@ public class MqUtil implements ApplicationContextAware {
|
|||||||
log.error("RocketMQTemplate未初始化,无法发送消息");
|
log.error("RocketMQTemplate未初始化,无法发送消息");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (message == null) {
|
||||||
|
log.error("消息为空,无法发送");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String jsonMessage = JsonUtils.toJsonString(message);
|
String jsonMessage = JsonUtils.toJsonString(message);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.wzj.soopin.content.controller;
|
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 com.wzj.soopin.content.domain.mo.MessageMO;
|
||||||
import org.dromara.common.core.domain.R;
|
import org.dromara.common.core.domain.R;
|
||||||
import com.wzj.soopin.content.service.MsgService;
|
import com.wzj.soopin.content.service.MsgService;
|
||||||
|
@ -3,7 +3,7 @@ package com.wzj.soopin.content.controller;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
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.bo.VlogBO;
|
||||||
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
||||||
import com.wzj.soopin.content.enums.YesOrNo;
|
import com.wzj.soopin.content.enums.YesOrNo;
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
package com.wzj.soopin.content.controller.admin;
|
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.VlogService;
|
||||||
import com.wzj.soopin.content.service.VlogUploadService;
|
import com.wzj.soopin.content.service.VlogUploadService;
|
||||||
import com.wzj.soopin.content.utils.RedisOperator;
|
import com.wzj.soopin.content.utils.RedisOperator;
|
||||||
import com.wzj.soopin.content.utils.TencentCloudUtil;
|
import com.wzj.soopin.content.utils.TencentCloudUtil;
|
||||||
import com.wzj.soopin.member.service.IFansService;
|
import com.wzj.soopin.member.service.IFansService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
@ -17,16 +17,16 @@ public class CommentBO extends BaseBO<Comment> {
|
|||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
@NotBlank(message = "留言信息不完整")
|
@NotBlank(message = "留言信息不完整")
|
||||||
private String vlogerId;
|
private Long vlogerId;
|
||||||
|
|
||||||
@NotBlank(message = "留言信息不完整")
|
@NotBlank(message = "留言信息不完整")
|
||||||
private String fatherCommentId;
|
private Long fatherCommentId;
|
||||||
|
|
||||||
@NotBlank(message = "留言信息不完整")
|
@NotBlank(message = "留言信息不完整")
|
||||||
private String vlogId;
|
private String vlogId;
|
||||||
|
|
||||||
@NotBlank(message = "当前用户信息不正确,请尝试重新登录")
|
@NotBlank(message = "当前用户信息不正确,请尝试重新登录")
|
||||||
private String commentUserId;
|
private Long commentUserId;
|
||||||
|
|
||||||
@NotBlank(message = "评论内容不能为空")
|
@NotBlank(message = "评论内容不能为空")
|
||||||
@Length(max = 50, message = "评论内容长度不能超过50")
|
@Length(max = 50, message = "评论内容长度不能超过50")
|
||||||
|
@ -13,18 +13,18 @@ import java.time.LocalDateTime;
|
|||||||
public class Comment {
|
public class Comment {
|
||||||
|
|
||||||
@TableId(type = IdType.ASSIGN_ID)
|
@TableId(type = IdType.ASSIGN_ID)
|
||||||
private String id;
|
private Long id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 评论的视频是哪个作者(member)的关联id
|
* 评论的视频是哪个作者(member)的关联id
|
||||||
*/
|
*/
|
||||||
@TableField("member_id")
|
@TableField("member_id")
|
||||||
private String vlogerId;
|
private Long vlogerId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 如果是回复评论,则本条为子评论,需要关联查询
|
* 如果是回复评论,则本条为子评论,需要关联查询
|
||||||
*/
|
*/
|
||||||
private String fatherCommentId;
|
private Long fatherCommentId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 回复的那个视频id
|
* 回复的那个视频id
|
||||||
@ -34,7 +34,7 @@ public class Comment {
|
|||||||
/**
|
/**
|
||||||
* 发布评论的用户id
|
* 发布评论的用户id
|
||||||
*/
|
*/
|
||||||
private String commentUserId;
|
private Long commentUserId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 评论内容
|
* 评论内容
|
||||||
|
@ -5,16 +5,16 @@ import java.time.LocalDateTime;
|
|||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class ChildCommentVO {
|
public class ChildCommentVO {
|
||||||
private String id;
|
private Long id;
|
||||||
private String commentId;
|
private Long commentId;
|
||||||
private String content;
|
private String content;
|
||||||
private Integer status;
|
private Integer status;
|
||||||
private String replyedUserNickname; // 被回复的昵称(父评论用户昵称)
|
private String replyedUserNickname; // 被回复的昵称(父评论用户昵称)
|
||||||
private String replyUserNickname; // 回复人昵称(当前子评论用户昵称)
|
private String replyUserNickname; // 回复人昵称(当前子评论用户昵称)
|
||||||
private String replyUserFace; // 回复人头像
|
private String replyUserFace; // 回复人头像
|
||||||
private String fatherCommentId;
|
private Long fatherCommentId;
|
||||||
private String likeCounts;
|
private String likeCounts;
|
||||||
private String vlogId;
|
private String vlogId;
|
||||||
private String commentUserId;
|
private Long commentUserId;
|
||||||
private LocalDateTime createTime;
|
private LocalDateTime createTime;
|
||||||
}
|
}
|
||||||
|
@ -14,9 +14,9 @@ import java.util.Date;
|
|||||||
@ToString
|
@ToString
|
||||||
public class CommentVO {
|
public class CommentVO {
|
||||||
private String id;
|
private String id;
|
||||||
private String commentId;
|
private Long commentId;
|
||||||
private String vlogerId;
|
private Long vlogerId;
|
||||||
private String fatherCommentId;
|
private Long fatherCommentId;
|
||||||
private String vlogId;
|
private String vlogId;
|
||||||
private String commentUserId;
|
private String commentUserId;
|
||||||
private String commentUserNickname;
|
private String commentUserNickname;
|
||||||
|
@ -1,32 +1,24 @@
|
|||||||
package com.wzj.soopin.content.service.impl;
|
package com.wzj.soopin.content.service.impl;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
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.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
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.bo.CommentBO;
|
||||||
import com.wzj.soopin.content.domain.po.Comment;
|
import com.wzj.soopin.content.domain.po.Comment;
|
||||||
import com.wzj.soopin.content.domain.po.Vlog;
|
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.member.domain.po.Member;
|
||||||
import com.wzj.soopin.content.domain.vo.ChildCommentVO;
|
import com.wzj.soopin.content.domain.vo.ChildCommentVO;
|
||||||
import com.wzj.soopin.content.domain.vo.CommentVO;
|
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.CommentMapper;
|
||||||
import com.wzj.soopin.content.mapper.CommentMapperCustom;
|
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.member.mapper.MemberMapper;
|
||||||
import com.wzj.soopin.content.mapper.VlogMapper;
|
import com.wzj.soopin.content.mapper.VlogMapper;
|
||||||
import com.wzj.soopin.content.service.CommentService;
|
import com.wzj.soopin.content.service.CommentService;
|
||||||
import com.wzj.soopin.content.service.MsgService;
|
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 com.wzj.soopin.content.utils.Sid;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.common.core.domain.R;
|
|
||||||
import org.dromara.common.core.domain.model.LoginUser;
|
import org.dromara.common.core.domain.model.LoginUser;
|
||||||
import org.dromara.common.mq.domain.MQMessage;
|
import org.dromara.common.mq.domain.MQMessage;
|
||||||
import org.dromara.common.mq.enums.MQMessageType;
|
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.redis.redis.RedisCache;
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
@ -159,9 +150,7 @@ public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> impl
|
|||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void createComment(CommentBO commentBO) {
|
public void createComment(CommentBO commentBO) {
|
||||||
String commentId = sid.nextShort();
|
|
||||||
Comment comment = new Comment();
|
Comment comment = new Comment();
|
||||||
comment.setId(commentId);
|
|
||||||
comment.setVlogId(commentBO.getVlogId());
|
comment.setVlogId(commentBO.getVlogId());
|
||||||
comment.setVlogerId(commentBO.getVlogerId());
|
comment.setVlogerId(commentBO.getVlogerId());
|
||||||
comment.setCommentUserId(commentBO.getCommentUserId());
|
comment.setCommentUserId(commentBO.getCommentUserId());
|
||||||
@ -170,6 +159,7 @@ public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> impl
|
|||||||
comment.setLikeCounts(0);
|
comment.setLikeCounts(0);
|
||||||
comment.setCreateTime(LocalDateTime.now());
|
comment.setCreateTime(LocalDateTime.now());
|
||||||
commentMapper.insert(comment);
|
commentMapper.insert(comment);
|
||||||
|
commentBO.setId(comment.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -184,7 +174,7 @@ public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> impl
|
|||||||
|
|
||||||
LambdaQueryWrapper<Comment> wrapper = bo.toWrapper();
|
LambdaQueryWrapper<Comment> wrapper = bo.toWrapper();
|
||||||
if (bo.getFatherCommentId() == null) {
|
if (bo.getFatherCommentId() == null) {
|
||||||
wrapper.eq(Comment::getFatherCommentId, "0");
|
wrapper.eq(Comment::getFatherCommentId, 0L);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 手机号查视频
|
// 手机号查视频
|
||||||
@ -203,7 +193,7 @@ public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> impl
|
|||||||
}
|
}
|
||||||
List<String> vlogIds = vlogList.stream().map(Vlog::getId).collect(Collectors.toList());
|
List<String> vlogIds = vlogList.stream().map(Vlog::getId).collect(Collectors.toList());
|
||||||
wrapper.in(Comment::getVlogId, vlogIds);
|
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());
|
wrapper.eq(Comment::getVlogId, bo.getVlogId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -349,6 +339,32 @@ public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> impl
|
|||||||
childComment.setUpdateBy(username);
|
childComment.setUpdateBy(username);
|
||||||
commentMapper.updateById(childComment);
|
commentMapper.updateById(childComment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
List<Comment> notifyList = new ArrayList<>();
|
||||||
|
notifyList.add(comment);
|
||||||
|
notifyList.addAll(childComments);
|
||||||
|
notifyList.forEach(c -> {
|
||||||
|
//给评论发送通知
|
||||||
|
MqUtil.sendIMMessage(buildOfflineMessage(c));
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private MQMessage buildOfflineMessage(Comment comment) {
|
||||||
|
Map<String, Object> 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
|
@Override
|
||||||
@ -358,11 +374,11 @@ public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> impl
|
|||||||
if (loginUser == null) {
|
if (loginUser == null) {
|
||||||
throw new RuntimeException("未登录或登录已过期");
|
throw new RuntimeException("未登录或登录已过期");
|
||||||
}
|
}
|
||||||
bo.setCommentUserId(String.valueOf(loginUser.getUserId()));
|
bo.setCommentUserId(loginUser.getUserId());
|
||||||
|
|
||||||
// 父评论为空时,按根评论处理(约定使用"0"作为无父评论标记)
|
// 父评论为空时,按根评论处理(约定使用"0"作为无父评论标记)
|
||||||
if (bo.getFatherCommentId() == null || bo.getFatherCommentId().isEmpty()) {
|
if (bo.getFatherCommentId() == null ) {
|
||||||
bo.setFatherCommentId("0");
|
bo.setFatherCommentId(0L);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1) 创建评论
|
// 1) 创建评论
|
||||||
@ -375,22 +391,34 @@ public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> impl
|
|||||||
// 3) 发送站内消息:根评论 -> 通知视频作者;回复评论 -> 通知被回复用户
|
// 3) 发送站内消息:根评论 -> 通知视频作者;回复评论 -> 通知被回复用户
|
||||||
|
|
||||||
|
|
||||||
// 关注消息
|
Vlog vlog=vlogMapper.selectById(bo.getVlogId());
|
||||||
MqUtil.sendIMMessage(buildMessage(bo));
|
// 给评论或者作者发送通知
|
||||||
|
MqUtil.sendIMMessage(buildCommentMessage(bo,vlog));
|
||||||
|
|
||||||
|
//检查是否有@
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private MQMessage buildMessage(CommentBO bo){
|
private MQMessage buildCommentMessage(CommentBO bo,Vlog vlog) {
|
||||||
Map<String, Object> params = new HashMap<>();
|
Map<String, Object> params = new HashMap<>();
|
||||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||||
if ("0".equals(bo.getFatherCommentId())) {
|
|
||||||
|
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()
|
if ( !String.valueOf(loginUser.getUserId()).equals(bo.getVlogerId())) {
|
||||||
&& !String.valueOf(loginUser.getUserId()).equals(bo.getVlogerId())) {
|
params.put("userID", loginUser.getUserId());
|
||||||
params.put("userId", loginUser.getUserId());
|
|
||||||
params.put("nickName", loginUser.getNickname());
|
params.put("nickName", loginUser.getNickname());
|
||||||
params.put("toUserId", bo.getVlogerId());
|
params.put("commentID", bo.getId());
|
||||||
params.put("vlogId", bo.getVlogId());
|
params.put("faceUrl", loginUser.getAvatar());
|
||||||
params.put("action", MessageActionEnum.INTERACTION_COMMENT.getAccount());
|
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 {
|
} else {
|
||||||
@ -398,19 +426,19 @@ public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> impl
|
|||||||
Comment father = baseMapper.selectById(bo.getFatherCommentId());
|
Comment father = baseMapper.selectById(bo.getFatherCommentId());
|
||||||
if (father != null && father.getCommentUserId() != null
|
if (father != null && father.getCommentUserId() != null
|
||||||
&& !String.valueOf(loginUser.getUserId()).equals(father.getCommentUserId())) {
|
&& !String.valueOf(loginUser.getUserId()).equals(father.getCommentUserId())) {
|
||||||
params.put("userId", loginUser.getUserId());
|
params.put("userID", loginUser.getUserId());
|
||||||
params.put("nickName", loginUser.getNickname());
|
params.put("nickName", loginUser.getNickname());
|
||||||
params.put("toUserId", father.getCommentUserId());
|
params.put("faceUrl", loginUser.getAvatar());
|
||||||
params.put("vlogId", bo.getVlogId());
|
params.put("vlogId", bo.getVlogId());
|
||||||
params.put("commentId",father.getId());
|
params.put("commentID", father.getId());
|
||||||
params.put("commentContent",father.getContent());
|
params.put("comment", father.getContent());
|
||||||
params.put("action", MessageActionEnum.INTERACTION_REPLY.getAccount());
|
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);
|
mqMessage.setData(params);
|
||||||
return mqMessage;
|
return mqMessage;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.wzj.soopin.content.service.impl;
|
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.domain.mo.MessageMO;
|
||||||
import com.wzj.soopin.content.enums.MessageEnum;
|
import com.wzj.soopin.content.enums.MessageEnum;
|
||||||
import com.wzj.soopin.content.mapper.repository.MessageRepository;
|
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 com.wzj.soopin.member.mapper.MemberMapper;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.dromara.common.redis.redis.RedisCache;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.data.domain.PageRequest;
|
import org.springframework.data.domain.PageRequest;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
@ -25,11 +26,12 @@ import java.util.Map;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class MsgServiceImpl extends BaseInfoProperties implements MsgService {
|
public class MsgServiceImpl extends BaseInfoProperties implements MsgService {
|
||||||
|
|
||||||
@Autowired
|
private final MessageRepository messageRepository;
|
||||||
private MessageRepository messageRepository;
|
|
||||||
|
|
||||||
private final MemberMapper memberMapper;
|
private final MemberMapper memberMapper;
|
||||||
|
|
||||||
|
private final RedisCache cache;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createMsg(String fromUserId,
|
public void createMsg(String fromUserId,
|
||||||
String toUserId,
|
String toUserId,
|
||||||
@ -80,7 +82,7 @@ public class MsgServiceImpl extends BaseInfoProperties implements MsgService {
|
|||||||
map = new HashMap<>();
|
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")) {
|
if (StringUtils.isNotBlank(relationship) && relationship.equalsIgnoreCase("1")) {
|
||||||
map.put("isFriend", true);
|
map.put("isFriend", true);
|
||||||
} else {
|
} else {
|
||||||
|
@ -16,7 +16,6 @@ import lombok.AllArgsConstructor;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.rocketmq.common.message.MessageExt;
|
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.core.domain.model.LoginUser;
|
||||||
import org.dromara.common.json.utils.JsonUtils;
|
import org.dromara.common.json.utils.JsonUtils;
|
||||||
import org.dromara.common.mq.domain.MQMessage;
|
import org.dromara.common.mq.domain.MQMessage;
|
||||||
@ -30,8 +29,8 @@ import org.springframework.stereotype.Service;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.wzj.soopin.content.domain.base.BaseInfoProperties.REDIS_USER_LIKE_VLOG;
|
import static org.dromara.common.core.constant.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_VLOG_COMMENT_COUNTS;
|
||||||
import static org.dromara.common.core.constant.GlobalConstants.HOT_VLOG_TAG;
|
import static org.dromara.common.core.constant.GlobalConstants.HOT_VLOG_TAG;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
@ -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.domain.po.Vlog;
|
||||||
import com.wzj.soopin.content.service.IVlogPushService;
|
import com.wzj.soopin.content.service.IVlogPushService;
|
||||||
import com.wzj.soopin.content.service.VlogService;
|
import com.wzj.soopin.content.service.VlogService;
|
||||||
import com.wzj.soopin.member.domain.po.Member;
|
|
||||||
import com.wzj.soopin.member.service.IMemberService;
|
import com.wzj.soopin.member.service.IMemberService;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.common.mq.domain.MQMessage;
|
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.mq.utils.MqUtil;
|
||||||
import org.dromara.common.redis.redis.RedisCache;
|
import org.dromara.common.redis.redis.RedisCache;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -23,7 +23,7 @@ import java.util.List;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
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;
|
import static org.dromara.common.core.constant.GlobalConstants.HOT_VLOG_TAG;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@ -76,7 +76,7 @@ public class VlogPushServiceImpl implements IVlogPushService {
|
|||||||
MQMessage message = MQMessage.builder()
|
MQMessage message = MQMessage.builder()
|
||||||
.topic("MEMBER_VLOG_MSG")
|
.topic("MEMBER_VLOG_MSG")
|
||||||
.tag(HOT_VLOG_TAG)
|
.tag(HOT_VLOG_TAG)
|
||||||
.messageType("json")
|
.messageType(MQMessageType.VLOG)
|
||||||
.data(vlogId)
|
.data(vlogId)
|
||||||
.source("vlog_service")
|
.source("vlog_service")
|
||||||
.sendTime(LocalDateTime.now())
|
.sendTime(LocalDateTime.now())
|
||||||
@ -94,7 +94,7 @@ public class VlogPushServiceImpl implements IVlogPushService {
|
|||||||
MQMessage message = MQMessage.builder()
|
MQMessage message = MQMessage.builder()
|
||||||
.topic("MEMBER_VLOG_MSG")
|
.topic("MEMBER_VLOG_MSG")
|
||||||
.tag(tag)
|
.tag(tag)
|
||||||
.messageType("json")
|
.messageType(MQMessageType.VLOG)
|
||||||
.data(vlogId)
|
.data(vlogId)
|
||||||
.source("vlog_service")
|
.source("vlog_service")
|
||||||
.sendTime(LocalDateTime.now())
|
.sendTime(LocalDateTime.now())
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package com.wzj.soopin.content.service.impl;
|
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.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
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.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
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.bo.*;
|
||||||
import com.wzj.soopin.content.domain.po.MyLikedVlog;
|
import com.wzj.soopin.content.domain.po.MyLikedVlog;
|
||||||
import com.wzj.soopin.content.domain.po.Vlog;
|
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.content.enums.VlogStatusEnum;
|
||||||
import com.wzj.soopin.member.domain.po.Member;
|
import com.wzj.soopin.member.domain.po.Member;
|
||||||
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
||||||
import com.wzj.soopin.content.enums.YesOrNo;
|
import com.wzj.soopin.content.enums.YesOrNo;
|
||||||
import com.wzj.soopin.content.mapper.CommentMapper;
|
import com.wzj.soopin.content.mapper.CommentMapper;
|
||||||
import com.wzj.soopin.content.mapper.MyLikedVlogMapper;
|
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.domain.vo.MemberVO;
|
||||||
import com.wzj.soopin.member.mapper.MemberMapper;
|
import com.wzj.soopin.member.mapper.MemberMapper;
|
||||||
import com.wzj.soopin.content.mapper.VlogMapper;
|
import com.wzj.soopin.content.mapper.VlogMapper;
|
||||||
import com.wzj.soopin.content.mapper.VlogMapperCustom;
|
import com.wzj.soopin.content.mapper.VlogMapperCustom;
|
||||||
import com.wzj.soopin.content.service.MsgService;
|
import com.wzj.soopin.content.service.MsgService;
|
||||||
import com.wzj.soopin.content.service.VlogService;
|
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.RedisOperator;
|
||||||
import com.wzj.soopin.content.utils.Sid;
|
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.member.service.IFansService;
|
||||||
import com.wzj.soopin.content.convert.VlogConvert;
|
import com.wzj.soopin.content.convert.VlogConvert;
|
||||||
import com.wzj.soopin.member.service.IMemberService;
|
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.MQMessageType;
|
||||||
import org.dromara.common.mq.enums.MessageActionEnum;
|
import org.dromara.common.mq.enums.MessageActionEnum;
|
||||||
import org.dromara.common.mq.utils.MqUtil;
|
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.redis.redis.RedisCache;
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.springframework.beans.BeanUtils;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.cache.annotation.CacheEvict;
|
import org.springframework.cache.annotation.CacheEvict;
|
||||||
import org.springframework.cache.annotation.Cacheable;
|
import org.springframework.cache.annotation.Cacheable;
|
||||||
@ -61,14 +51,13 @@ import org.dromara.common.core.utils.MapstructUtils;
|
|||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.ZoneOffset;
|
import java.time.ZoneOffset;
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import static com.wzj.soopin.content.domain.base.BaseInfoProperties.*;
|
import static org.dromara.common.core.constant.BaseInfoProperties.*;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
@ -162,7 +151,7 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
|
|
||||||
//发出mq消息,异步处理上传
|
//发出mq消息,异步处理上传
|
||||||
MQMessage message = MQMessage.builder()
|
MQMessage message = MQMessage.builder()
|
||||||
.messageType("json")
|
.messageType(MQMessageType.VLOG)
|
||||||
.data(vlog.getId())
|
.data(vlog.getId())
|
||||||
.source("app")
|
.source("app")
|
||||||
.topic("VLOG_UPLOAD_TOPIC")
|
.topic("VLOG_UPLOAD_TOPIC")
|
||||||
@ -335,14 +324,15 @@ public class VlogServiceImpl extends ServiceImpl<VlogMapper, Vlog> implements Vl
|
|||||||
|
|
||||||
Map<String,Object> params=new HashMap<>();
|
Map<String,Object> params=new HashMap<>();
|
||||||
LoginUser loginUser=LoginHelper.getLoginUser();
|
LoginUser loginUser=LoginHelper.getLoginUser();
|
||||||
params.put("userId", loginUser.getUserId());
|
params.put("userID", loginUser.getUserId());
|
||||||
params.put("nickname", loginUser.getNickname() == null ? "" : loginUser.getNickname());
|
params.put("nickName", loginUser.getNickname() == null ? "" : loginUser.getNickname());
|
||||||
params.put("faceUrl", loginUser.getAvatar() );
|
params.put("faceUrl", loginUser.getAvatar() );
|
||||||
params.put("action", MessageActionEnum.INTERACTION_LIKE.getAccount());
|
params.put("vlogId",vlog.getId());
|
||||||
params.put("toUserId",vlog.getMemberId());
|
params.put("firstFrameImg",vlog.getFirstFrameImg());
|
||||||
|
|
||||||
MQMessage mqMessage = new MQMessage();
|
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);
|
mqMessage.setData(params);
|
||||||
return mqMessage;
|
return mqMessage;
|
||||||
}
|
}
|
||||||
|
@ -2,16 +2,11 @@ package com.wzj.soopin.content.service.impl;
|
|||||||
|
|
||||||
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
|
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
|
||||||
import com.tencentcloudapi.vod.v20180717.VodClient;
|
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.domain.vo.CommentVO;
|
||||||
import com.wzj.soopin.content.service.VlogUploadService;
|
import com.wzj.soopin.content.service.VlogUploadService;
|
||||||
import com.wzj.soopin.content.utils.TencentCloudUtil;
|
import com.wzj.soopin.content.utils.TencentCloudUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
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.PageQuery;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.common.redis.redis.RedisCache;
|
import org.dromara.common.redis.redis.RedisCache;
|
||||||
@ -20,7 +15,6 @@ import org.springframework.stereotype.Service;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -200,10 +194,10 @@ public class VlogUploadServiceImpl implements VlogUploadService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 2. 点赞数量:优先 Redis,无则 MySQL
|
// 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
|
// 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
|
// 4. 评论内容:只查 MySQL
|
||||||
|
@ -18,7 +18,7 @@ import java.math.BigDecimal;
|
|||||||
@Data
|
@Data
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@TableName(value = "wzj_soopin.pms_product_snapshot")
|
@TableName(value = "pms_product_snapshot")
|
||||||
public class ProductSnapshot {
|
public class ProductSnapshot {
|
||||||
/**
|
/**
|
||||||
* 主键id
|
* 主键id
|
||||||
|
@ -18,7 +18,7 @@ import java.math.BigDecimal;
|
|||||||
@Data
|
@Data
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@TableName(value = "wzj_soopin.pms_sku_snapshot")
|
@TableName(value = "pms_sku_snapshot")
|
||||||
public class SkuSnapshot {
|
public class SkuSnapshot {
|
||||||
|
|
||||||
@TableId(value = "id")
|
@TableId(value = "id")
|
||||||
|
@ -22,7 +22,7 @@ import org.springframework.stereotype.Component;
|
|||||||
@RocketMQMessageListener(
|
@RocketMQMessageListener(
|
||||||
topic = RocketMQConfig.TOPIC_IM_MSG,
|
topic = RocketMQConfig.TOPIC_IM_MSG,
|
||||||
// consumerGroup = RocketMQConfig.CONSUMER_GROUP_SYS_MSG,
|
// consumerGroup = RocketMQConfig.CONSUMER_GROUP_SYS_MSG,
|
||||||
consumerGroup = "cosumer",
|
consumerGroup = "cosumer1",
|
||||||
selectorExpression = "*"
|
selectorExpression = "*"
|
||||||
// ackMode = AckMode.MANUAL
|
// ackMode = AckMode.MANUAL
|
||||||
)
|
)
|
||||||
|
@ -41,18 +41,20 @@ public class MQMessageHandleServiceImpl implements IMQMessageHandleService {
|
|||||||
//创建im消息
|
//创建im消息
|
||||||
//根据消息类型获取消息模板
|
//根据消息类型获取消息模板
|
||||||
Map<String, Object> params = (Map<String, Object>) message.getData();
|
Map<String, Object> params = (Map<String, Object>) message.getData();
|
||||||
String action = (String) params.get("action");
|
|
||||||
//根据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){
|
if(actionEnum == null){
|
||||||
log.error("根据action获取消息模板失败,action:{}", action);
|
log.error("根据action获取消息模板失败,action:{}", message.getTag());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
SysMessageTemplate template = templateService.getTemplateByAction(actionEnum.getCode());
|
SysMessageTemplate template = templateService.getTemplateByAction(actionEnum.getCode());
|
||||||
|
|
||||||
if (template == null) {
|
if (template == null) {
|
||||||
log.error("根据action获取消息模板失败,action:{}", action);
|
log.error("根据action获取消息模板失败,action:{}", message.getTag());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,7 +63,7 @@ public class MQMessageHandleServiceImpl implements IMQMessageHandleService {
|
|||||||
try {
|
try {
|
||||||
// 消息发送者可能是系统或管理员,这里使用action对应的账号发送
|
// 消息发送者可能是系统或管理员,这里使用action对应的账号发送
|
||||||
String fromUserId = actionEnum.getAccount();
|
String fromUserId = actionEnum.getAccount();
|
||||||
String toUserId = ""; // 接收者是事件中的用户ID
|
String toUserId = message.getToUserId()+""; // 接收者是事件中的用户ID
|
||||||
String content = template.getContent(); // 只取content字段
|
String content = template.getContent(); // 只取content字段
|
||||||
|
|
||||||
// 处理消息变量替换(如果有)
|
// 处理消息变量替换(如果有)
|
||||||
@ -76,7 +78,6 @@ public class MQMessageHandleServiceImpl implements IMQMessageHandleService {
|
|||||||
desc = processMessageVariables(desc, params);
|
desc = processMessageVariables(desc, params);
|
||||||
content = processMessageVariables(content, params);
|
content = processMessageVariables(content, params);
|
||||||
ext = processMessageVariables(ext, params);
|
ext = processMessageVariables(ext, params);
|
||||||
toUserId = String.valueOf(params.get("toUserId"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String pushType = null;
|
String pushType = null;
|
||||||
@ -157,8 +158,10 @@ public class MQMessageHandleServiceImpl implements IMQMessageHandleService {
|
|||||||
return content;
|
return content;
|
||||||
}
|
}
|
||||||
for (String key : variables.keySet()) {
|
for (String key : variables.keySet()) {
|
||||||
|
if(variables.get(key)!=null){
|
||||||
content = content.replaceAll("\\$\\{" + key + "\\}", variables.get(key).toString());
|
content = content.replaceAll("\\$\\{" + key + "\\}", variables.get(key).toString());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return content;
|
return content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,13 +12,17 @@ import lombok.AllArgsConstructor;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.common.core.domain.model.LoginUser;
|
import org.dromara.common.core.domain.model.LoginUser;
|
||||||
import org.dromara.common.core.exception.ServiceException;
|
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.satoken.utils.LoginHelper;
|
||||||
import org.dromara.common.web.core.BusinessImpl;
|
import org.dromara.common.web.core.BusinessImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import static org.dromara.common.core.constant.BaseInfoProperties.*;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -26,6 +30,7 @@ public class MemberBusinessImpl extends BusinessImpl<IMemberService, MemberConve
|
|||||||
implements IMemberBusiness {
|
implements IMemberBusiness {
|
||||||
|
|
||||||
private final IFansService fansService;
|
private final IFansService fansService;
|
||||||
|
private final RedisCache cache;
|
||||||
@Override
|
@Override
|
||||||
public void bindSpread(MemberBO memberBO) {
|
public void bindSpread(MemberBO memberBO) {
|
||||||
//获取用户信息
|
//获取用户信息
|
||||||
@ -75,5 +80,15 @@ public class MemberBusinessImpl extends BusinessImpl<IMemberService, MemberConve
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MemberVO info(Serializable id) {
|
||||||
|
MemberVO vo= super.info(id);
|
||||||
|
Double score = cache.zSetScore(REDIS_VLOGER_BE_LIKED_COUNTS, String.valueOf(id));
|
||||||
|
vo.setVlogLikeCount(score != null ? score.intValue() : 0);
|
||||||
|
Double myFansCount= cache.zSetScore(REDIS_MY_FANS_COUNTS, String.valueOf(id));
|
||||||
|
vo.setFansCount(myFansCount != null ? myFansCount.intValue() : 0);
|
||||||
|
Double myFollowCount= cache.zSetScore(REDIS_MY_FOLLOWS_COUNTS, String.valueOf(id));
|
||||||
|
vo.setFollowCount(myFollowCount != null ? myFollowCount.intValue() : 0);
|
||||||
|
return vo;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@ public class ImCallbackController {
|
|||||||
@PostMapping
|
@PostMapping
|
||||||
public R handleCallback(
|
public R handleCallback(
|
||||||
@RequestParam(value = "Sign", required = false) String sign,
|
@RequestParam(value = "Sign", required = false) String sign,
|
||||||
|
|
||||||
@RequestParam(value = "RequestTime", required = false) String requestTime,
|
@RequestParam(value = "RequestTime", required = false) String requestTime,
|
||||||
@RequestParam(value = "CallbackCommand", required = false) String callbackCommand,
|
@RequestParam(value = "CallbackCommand", required = false) String callbackCommand,
|
||||||
@RequestBody Map<String, Object> requestBody) {
|
@RequestBody Map<String, Object> requestBody) {
|
||||||
|
@ -86,6 +86,7 @@ public class MemberBO extends BaseBO {
|
|||||||
QueryWrapper<Member> qw = new QueryWrapper<>();
|
QueryWrapper<Member> qw = new QueryWrapper<>();
|
||||||
qw.lambda()
|
qw.lambda()
|
||||||
.like(StringUtils.isNotEmpty(this.getNickname()), Member::getNickname, this.getNickname())
|
.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(getId() != null, Member::getId, this.getId())
|
||||||
.eq(status != null, Member::getStatus, status)
|
.eq(status != null, Member::getStatus, status)
|
||||||
.eq(spreadUid != null, Member::getSpreadUid, spreadUid)
|
.eq(spreadUid != null, Member::getSpreadUid, spreadUid)
|
||||||
|
@ -20,6 +20,7 @@ import org.dromara.common.core.constant.GlobalConstants;
|
|||||||
import org.dromara.common.core.enums.YesOrNo;
|
import org.dromara.common.core.enums.YesOrNo;
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.mq.domain.MQMessage;
|
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.enums.MessageActionEnum;
|
||||||
import org.dromara.common.mq.utils.MqUtil;
|
import org.dromara.common.mq.utils.MqUtil;
|
||||||
import org.dromara.common.redis.redis.RedisCache;
|
import org.dromara.common.redis.redis.RedisCache;
|
||||||
@ -70,6 +71,7 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
|
|||||||
fans.setFriendFlag(YesOrNo.YES.type);
|
fans.setFriendFlag(YesOrNo.YES.type);
|
||||||
}
|
}
|
||||||
baseMapper.insert(fans);
|
baseMapper.insert(fans);
|
||||||
|
|
||||||
MqUtil.sendIMMessage(buildMessage(fans));
|
MqUtil.sendIMMessage(buildMessage(fans));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -84,11 +86,11 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
|
|||||||
params.put("userId", follower.getId());
|
params.put("userId", follower.getId());
|
||||||
params.put("nickname", follower.getNickname() == null ? "" : follower.getNickname());
|
params.put("nickname", follower.getNickname() == null ? "" : follower.getNickname());
|
||||||
params.put("faceUrl", vlogger.getAvatar() );
|
params.put("faceUrl", vlogger.getAvatar() );
|
||||||
params.put("action", MessageActionEnum.NEW_FOUCS.getAccount());
|
|
||||||
params.put("toUserId", vlogger.getId());
|
|
||||||
MQMessage message = MQMessage.builder()
|
MQMessage message = MQMessage.builder()
|
||||||
.messageType("follow")
|
.messageType(MQMessageType.IM)
|
||||||
.data(params)
|
.data(params)
|
||||||
|
.tag(MessageActionEnum.NEW_FOUCS.name())
|
||||||
|
.toUserId(vlogger.getId())
|
||||||
.source("member")
|
.source("member")
|
||||||
.build();
|
.build();
|
||||||
return message;
|
return message;
|
||||||
@ -133,25 +135,6 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
|
|||||||
// 博主的粉丝-1,我的关注-1
|
// 博主的粉丝-1,我的关注-1
|
||||||
RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FANS + ":" + vloggerId);
|
RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FANS + ":" + vloggerId);
|
||||||
RedisUtils.decrAtomicValue(CacheConstants.MEMBER_FOLLOW + ":" + myId);
|
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<String, Object> 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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.dromara.common.core.domain.model.LoginUser;
|
import org.dromara.common.core.domain.model.LoginUser;
|
||||||
import org.dromara.common.mq.domain.MQMessage;
|
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.enums.MessageActionEnum;
|
||||||
import org.dromara.common.mq.utils.MqUtil;
|
import org.dromara.common.mq.utils.MqUtil;
|
||||||
import org.dromara.common.redis.redis.RedisCache;
|
import org.dromara.common.redis.redis.RedisCache;
|
||||||
@ -112,11 +113,11 @@ public class FeedbackServiceImpl extends ServiceImpl<FeedbackMapper, Feedback> i
|
|||||||
params.put("userId", loginUser.getUserId());
|
params.put("userId", loginUser.getUserId());
|
||||||
params.put("nickname", loginUser.getNickname() == null ? "" : loginUser.getNickname());
|
params.put("nickname", loginUser.getNickname() == null ? "" : loginUser.getNickname());
|
||||||
params.put("faceUrl", loginUser.getAvatar() );
|
params.put("faceUrl", loginUser.getAvatar() );
|
||||||
params.put("action", MessageActionEnum.INTERACTION_LIKE.getAccount());
|
|
||||||
params.put("toUserId",aim.getMemberId());
|
|
||||||
|
|
||||||
MQMessage mqMessage = new MQMessage();
|
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);
|
mqMessage.setData(params);
|
||||||
return mqMessage;
|
return mqMessage;
|
||||||
}
|
}
|
||||||
|
@ -408,4 +408,10 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
|
|||||||
Assert.isTrue(StrUtil.equals(smsCode, code), () -> new ServiceException("短信验证码错误"));
|
Assert.isTrue(StrUtil.equals(smsCode, code), () -> new ServiceException("短信验证码错误"));
|
||||||
memberMapper.updateById(Member.builder().id(loginUser.getUserId()).status(Constants.MEMBER_ACCOUNT_STATUS.FORBIDDEN).build());
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
select * from ums_member
|
select * from ums_member
|
||||||
<where>
|
<where>
|
||||||
<if test="query.nickname != null and query.nickname != ''">
|
<if test="query.nickname != null and query.nickname != ''">
|
||||||
and nickname LIKE CONCAT('%', #{query.nickname}, '%')
|
and (nickname LIKE CONCAT('%', #{query.nickname}, '%') or phone_hidden LIKE CONCAT('%', #{query.nickname}, '%'))
|
||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
package com.wzj.soopin.order.business;
|
||||||
|
|
||||||
|
public interface IAfterSaleBusiness {
|
||||||
|
}
|
@ -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 {
|
||||||
|
}
|
@ -16,6 +16,8 @@ import com.wzj.soopin.order.service.VerificationCodeService;
|
|||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.common.web.core.BusinessImpl;
|
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 org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
@ -30,10 +32,15 @@ public class OrderBusinessImpl extends BusinessImpl<OrderService, OrderConvert,
|
|||||||
private final OrderItemService orderItemService;
|
private final OrderItemService orderItemService;
|
||||||
private final OrderItemConvert orderItemConvert;
|
private final OrderItemConvert orderItemConvert;
|
||||||
private final VerificationCodeService verificationCodeService;
|
private final VerificationCodeService verificationCodeService;
|
||||||
|
private final ISysTenantService tenantService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public OrderVO info(Serializable id) {
|
public OrderVO info(Serializable id) {
|
||||||
OrderVO vo= super.info(id);
|
OrderVO vo= super.info(id);
|
||||||
|
|
||||||
|
//设置租户信息
|
||||||
|
|
||||||
|
|
||||||
Member member = memberService.getById(vo.getMemberId());
|
Member member = memberService.getById(vo.getMemberId());
|
||||||
vo.setMemberNickname(member.getNickname());
|
vo.setMemberNickname(member.getNickname());
|
||||||
vo.setMemberPhoneEncrypted(member.getPhoneHidden());
|
vo.setMemberPhoneEncrypted(member.getPhoneHidden());
|
||||||
@ -42,6 +49,10 @@ public class OrderBusinessImpl extends BusinessImpl<OrderService, OrderConvert,
|
|||||||
List<OrderItem> orderItemList = orderItemService.findByOrderId(vo.getId());
|
List<OrderItem> orderItemList = orderItemService.findByOrderId(vo.getId());
|
||||||
List<OrderItemVO> itemVOList = orderItemList.stream().map(item -> {
|
List<OrderItemVO> itemVOList = orderItemList.stream().map(item -> {
|
||||||
OrderItemVO itemVO=orderItemConvert.toVO(item);
|
OrderItemVO itemVO=orderItemConvert.toVO(item);
|
||||||
|
if (itemVO.getTenantId() != null) {
|
||||||
|
SysTenantVo tenant = tenantService.queryByTenantId(vo.getTenantId());
|
||||||
|
itemVO.setTenantName(tenant.getShopName());
|
||||||
|
}
|
||||||
//赋值
|
//赋值
|
||||||
return itemVO;
|
return itemVO;
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
|
@ -1,17 +1,10 @@
|
|||||||
package com.wzj.soopin.order.convert;
|
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.bo.AftersaleBo;
|
||||||
import com.wzj.soopin.order.domain.entity.Aftersale;
|
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.AftersaleVO;
|
||||||
import com.wzj.soopin.order.domain.vo.ManagerRefundOrderVO;
|
|
||||||
import org.dromara.common.web.core.BaseConverter;
|
import org.dromara.common.web.core.BaseConverter;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
/**
|
/**
|
||||||
* 订单售后 DO <=> DTO <=> VO / BO / Query
|
* 订单售后 DO <=> DTO <=> VO / BO / Query
|
||||||
*
|
*
|
||||||
@ -20,5 +13,4 @@ import java.util.List;
|
|||||||
@Mapper(componentModel = "spring")
|
@Mapper(componentModel = "spring")
|
||||||
public interface AftersaleConvert extends BaseConverter<AftersaleVO, AftersaleBo, Aftersale> {
|
public interface AftersaleConvert extends BaseConverter<AftersaleVO, AftersaleBo, Aftersale> {
|
||||||
|
|
||||||
// List<AftersaleVO> dos2vos(List<Aftersale> list);
|
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package com.wzj.soopin.order.domain.bo;
|
package com.wzj.soopin.order.domain.bo;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import com.wzj.soopin.order.domain.entity.Aftersale;
|
import com.wzj.soopin.order.domain.entity.Aftersale;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import org.dromara.common.core.domain.BaseBO;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
@ -13,7 +13,7 @@ import java.time.LocalDateTime;
|
|||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "订单售后 查询 对象")
|
@Schema(description = "订单售后 查询 对象")
|
||||||
public class AftersaleBo {
|
public class AftersaleBo extends BaseBO<Aftersale> {
|
||||||
|
|
||||||
@Schema(description = "MEMBER_ID 精确匹配")
|
@Schema(description = "MEMBER_ID 精确匹配")
|
||||||
private Long memberId;
|
private Long memberId;
|
||||||
@ -64,7 +64,7 @@ public class AftersaleBo {
|
|||||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
private LocalDateTime endTime;
|
private LocalDateTime endTime;
|
||||||
|
|
||||||
public Wrapper<Aftersale> toWrapper() {
|
public LambdaQueryWrapper<Aftersale> toWrapper() {
|
||||||
return new LambdaQueryWrapper<Aftersale>()
|
return new LambdaQueryWrapper<Aftersale>()
|
||||||
.eq(memberId != null, Aftersale::getMemberId, memberId)
|
.eq(memberId != null, Aftersale::getMemberId, memberId)
|
||||||
.eq(orderId != null, Aftersale::getOrderId, orderId)
|
.eq(orderId != null, Aftersale::getOrderId, orderId)
|
||||||
|
@ -94,4 +94,5 @@ public class OrderItem extends BaseAudit {
|
|||||||
@Schema(description = "租户名称")
|
@Schema(description = "租户名称")
|
||||||
@Excel(name = "租户名称")
|
@Excel(name = "租户名称")
|
||||||
private String tenantName;
|
private String tenantName;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ public class RedPacket extends BaseAudit {
|
|||||||
|
|
||||||
@TableField("group_id")
|
@TableField("group_id")
|
||||||
@Schema(description = "群id")
|
@Schema(description = "群id")
|
||||||
private Long groupId;
|
private String groupId;
|
||||||
|
|
||||||
@TableField("packet_type")
|
@TableField("packet_type")
|
||||||
@Schema(description = "红包类型(1:普通)")
|
@Schema(description = "红包类型(1:普通)")
|
||||||
|
@ -29,7 +29,7 @@ public class SendRedPacketRequest {
|
|||||||
private Long receiverId;
|
private Long receiverId;
|
||||||
|
|
||||||
@Schema(description = "群id(群聊时必填)")
|
@Schema(description = "群id(群聊时必填)")
|
||||||
private Long groupId;
|
private String groupId;
|
||||||
|
|
||||||
@NotNull(message = "红包类型不能为空")
|
@NotNull(message = "红包类型不能为空")
|
||||||
@Range(min = 1, max = 2, message = "红包类型只能是1(普通)或2(拼手气)")
|
@Range(min = 1, max = 2, message = "红包类型只能是1(普通)或2(拼手气)")
|
||||||
|
@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.dromara.common.core.domain.model.BaseAudit;
|
import org.dromara.common.core.domain.model.BaseAudit;
|
||||||
import org.dromara.common.excel.annotation.Excel;
|
import org.dromara.common.excel.annotation.Excel;
|
||||||
|
import org.dromara.system.domain.vo.SysTenantVo;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -36,6 +37,8 @@ public class OrderVO extends BaseAudit {
|
|||||||
@Schema(description ="租户id")
|
@Schema(description ="租户id")
|
||||||
private String tenantId;
|
private String tenantId;
|
||||||
|
|
||||||
|
private SysTenantVo tenant;
|
||||||
|
|
||||||
@Schema(description ="用户帐号")
|
@Schema(description ="用户帐号")
|
||||||
@Excel(name = "用户帐号")
|
@Excel(name = "用户帐号")
|
||||||
private String memberUsername;
|
private String memberUsername;
|
||||||
|
@ -48,5 +48,6 @@ public interface OrderService extends IService<Order> {
|
|||||||
|
|
||||||
void refund(RefundBO refundBO);
|
void refund(RefundBO refundBO);
|
||||||
|
|
||||||
|
void sendMessage(Long orderId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,10 @@ import org.dromara.common.core.domain.R;
|
|||||||
import org.dromara.common.core.domain.event.Constants;
|
import org.dromara.common.core.domain.event.Constants;
|
||||||
import org.dromara.common.core.enums.AftersaleStatus;
|
import org.dromara.common.core.enums.AftersaleStatus;
|
||||||
import org.dromara.common.core.enums.OrderRefundStatus;
|
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.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -232,8 +236,25 @@ public class AftersaleServiceImpl extends ServiceImpl<AftersaleMapper, Aftersale
|
|||||||
if ((request.getOptType() == Constants.OptType.GIVING || (request.getOptType() == Constants.OptType.AGREE && aftersale.getType() == 1))) {
|
if ((request.getOptType() == Constants.OptType.GIVING || (request.getOptType() == Constants.OptType.AGREE && aftersale.getType() == 1))) {
|
||||||
tradeRefund(aftersale, order, optDate, userId);
|
tradeRefund(aftersale, order, optDate, userId);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
//发送成功通知
|
||||||
|
MqUtil.sendIMMessage(buildMessage(aftersale, MessageActionEnum.ORDER_REFUND));
|
||||||
|
}
|
||||||
|
private MQMessage buildMessage(Aftersale o, MessageActionEnum actionEnum) {
|
||||||
|
Map<String, Object> 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) {
|
public void tradeRefund(Aftersale returnApply, Order order, LocalDateTime optDate, Long userId) {
|
||||||
//查一下微信订单
|
//查一下微信订单
|
||||||
QueryWrapper<WechatPaymentHistory> qw = new QueryWrapper<>();
|
QueryWrapper<WechatPaymentHistory> qw = new QueryWrapper<>();
|
||||||
|
@ -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.event.Constants;
|
||||||
import org.dromara.common.core.domain.model.LoginUser;
|
import org.dromara.common.core.domain.model.LoginUser;
|
||||||
import org.dromara.common.core.exception.ServiceException;
|
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.satoken.utils.LoginHelper;
|
||||||
import org.dromara.common.tenant.helper.TenantHelper;
|
import org.dromara.common.tenant.helper.TenantHelper;
|
||||||
import org.dromara.system.domain.SysTenant;
|
import org.dromara.system.domain.SysTenant;
|
||||||
@ -415,6 +419,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 商户所属订单列表
|
* 商户所属订单列表
|
||||||
|
*
|
||||||
* @param query
|
* @param query
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -431,6 +436,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 团长所属订单列表
|
* 团长所属订单列表
|
||||||
|
*
|
||||||
* @param query
|
* @param query
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -493,34 +499,36 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Order getByNo(String orderNo) {
|
public Order getByNo(String orderNo) {
|
||||||
return baseMapper.selectOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, orderNo));
|
return baseMapper.selectOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, orderNo));
|
||||||
}
|
}
|
||||||
|
|
||||||
// public void sendMessage(Order order) {
|
public void sendMessage(Long orderId) {
|
||||||
// Long memberId = order.getMemberId();
|
Order order = this.getById(orderId);
|
||||||
// Long orderId = order.getId();
|
if (order != null) {
|
||||||
// // 订单创建成功模板ID
|
Map<String, Object> params = new HashMap<>();
|
||||||
// Long templateId =1940586928850100226L;
|
params.put("orderID", order.getId());
|
||||||
// // 查询模板信息
|
params.put("amount", order.getPayAmount());
|
||||||
// SysMessageTemplateVo template = templateService.selectTemplateById(templateId);
|
|
||||||
// log.info("模板信息为: {}", template);
|
//取订单的第一个商品
|
||||||
//
|
List<OrderItem> orderItems = orderItemMapper.findByOrderId(order.getId());
|
||||||
// if (template != null) {
|
if (CollectionUtil.isNotEmpty(orderItems)) {
|
||||||
// Map<String, Object> params = new HashMap<>();
|
params.put("name", orderItems.get(0).getProductName());
|
||||||
// params.put("orderSn", order.getOrderSn());
|
params.put("pic", orderItems.get(0).getPic());
|
||||||
// params.put("productName", orderItemMapper.getName(orderId));
|
params.put("price", orderItems.get(0).getSalePrice());
|
||||||
// SysMessageBo messageBo = new SysMessageBo();
|
params.put("amount", orderItems.get(0).getQuantity());
|
||||||
// messageBo.setTemplateType(org.dromara.system.domain.MessageTemplateType.ORDER_NOTICE);
|
// params.put("describe", orderItems.get(0).get());
|
||||||
// messageBo.setTemplateParams(params);
|
}
|
||||||
// messageBo.setSenderId(memberId);
|
params.put("account", MessageActionEnum.ORDER_PAY.getAccount());
|
||||||
// messageBo.setTitle(template.getTitle());
|
MQMessage mqMessage = new MQMessage();
|
||||||
// sysMessageService.sendMessageToUser(messageBo, memberId);
|
mqMessage.setTag(MessageActionEnum.ORDER_PAY.name());
|
||||||
// }
|
mqMessage.setMessageType(MQMessageType.IM);
|
||||||
// }
|
mqMessage.setToUserId(order.getMemberId());
|
||||||
|
mqMessage.setData(params);
|
||||||
|
MqUtil.sendIMMessage(mqMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,5 +100,4 @@ public class PayOrder extends BaseAudit {
|
|||||||
@TableField(value = "del_flag", fill = FieldFill.INSERT, jdbcType = JdbcType.CHAR)
|
@TableField(value = "del_flag", fill = FieldFill.INSERT, jdbcType = JdbcType.CHAR)
|
||||||
private String delFlag;
|
private String delFlag;
|
||||||
|
|
||||||
private String title;
|
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ public class OrderCashier implements CashierExecute {
|
|||||||
Order order = orderService.getByNo(payParam.getSn());
|
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);
|
throw new ServiceException(ResultCode.PAY_DOUBLE_ERROR);
|
||||||
}
|
}
|
||||||
//如果订单状态不是待付款,则抛出异常
|
//如果订单状态不是待付款,则抛出异常
|
||||||
|
@ -266,7 +266,7 @@ public class WechatPlugin implements Payment {
|
|||||||
|
|
||||||
Map<String, String> attachMap = new HashMap<>();
|
Map<String, String> attachMap = new HashMap<>();
|
||||||
attachMap.put("orderType", payParam.getOrderType());
|
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 attach = URLEncoder.createDefault().encode(JSONUtil.toJsonStr(attachMap), StandardCharsets.UTF_8);
|
||||||
|
|
||||||
String appid = setting.getAppId();
|
String appid = setting.getAppId();
|
||||||
@ -513,9 +513,7 @@ public class WechatPlugin implements Payment {
|
|||||||
String payParamStr = jsonObject.getStr("attach");
|
String payParamStr = jsonObject.getStr("attach");
|
||||||
String payParamJson = URLDecoder.decode(payParamStr, StandardCharsets.UTF_8);
|
String payParamJson = URLDecoder.decode(payParamStr, StandardCharsets.UTF_8);
|
||||||
PayParam payParam = JSONUtil.toBean(payParamJson, PayParam.class);
|
PayParam payParam = JSONUtil.toBean(payParamJson, PayParam.class);
|
||||||
|
|
||||||
String tradeNo = jsonObject.getStr("transaction_id");
|
String tradeNo = jsonObject.getStr("transaction_id");
|
||||||
// Double totalAmount = CurrencyUtil.reversalFen(jsonObject.getJSONObject("amount").getDouble("total"));
|
|
||||||
|
|
||||||
PaymentSuccessParams paymentSuccessParams = new PaymentSuccessParams(
|
PaymentSuccessParams paymentSuccessParams = new PaymentSuccessParams(
|
||||||
PaymentMethodEnum.WECHAT.getCode(),
|
PaymentMethodEnum.WECHAT.getCode(),
|
||||||
|
@ -9,7 +9,6 @@ public interface IWithdrawService extends IService<Withdraw> {
|
|||||||
|
|
||||||
boolean withdrawCallback(WithdrawBO withdraw);
|
boolean withdrawCallback(WithdrawBO withdraw);
|
||||||
|
|
||||||
boolean withdrawWallet(Withdraw withdraw);
|
boolean withdraw (Withdraw withdraw);
|
||||||
|
|
||||||
boolean withdrawRevenue (Withdraw withdraw);
|
|
||||||
}
|
}
|
||||||
|
@ -15,10 +15,18 @@ import com.wzj.soopin.transaction.service.IChargeService;
|
|||||||
import com.wzj.soopin.transaction.util.SnowFlake;
|
import com.wzj.soopin.transaction.util.SnowFlake;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.dromara.common.core.domain.model.LoginUser;
|
||||||
import org.dromara.common.core.exception.ServiceException;
|
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 org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员封禁
|
* 会员封禁
|
||||||
@ -41,25 +49,30 @@ public class ChargeServiceImpl extends ServiceImpl<ChargeMapper, Charge> impleme
|
|||||||
boolean chargeSuccess = true;
|
boolean chargeSuccess = true;
|
||||||
//充值成功后更新会员账户余额
|
//充值成功后更新会员账户余额
|
||||||
if (chargeSuccess) {
|
if (chargeSuccess) {
|
||||||
//更新会员账户余额
|
accountBillService.addMoney(charge.getActualMoney(), charge.getMemberId(), AccountBillSourceEnum.RECHARGE, "充值");
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
//生成充值记录
|
//生成充值记录
|
||||||
|
//获取账号金额
|
||||||
|
MemberAccount memberAccount = memberAccountService.getById(charge.getMemberId());
|
||||||
|
MqUtil.sendIMMessage(buildMessage(charge,memberAccount));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private MQMessage buildMessage(Charge charge,MemberAccount memberAccount) {
|
||||||
|
Map<String, Object> 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
|
@Override
|
||||||
public boolean charge(Charge charge) {
|
public boolean charge(Charge charge) {
|
||||||
@ -103,7 +116,12 @@ public class ChargeServiceImpl extends ServiceImpl<ChargeMapper, Charge> impleme
|
|||||||
boolean result = updateById(charge);
|
boolean result = updateById(charge);
|
||||||
if (result) {
|
if (result) {
|
||||||
accountBillService.addMoney(charge.getActualMoney(), charge.getMemberId(), AccountBillSourceEnum.RECHARGE, "充值");
|
accountBillService.addMoney(charge.getActualMoney(), charge.getMemberId(), AccountBillSourceEnum.RECHARGE, "充值");
|
||||||
|
//生成充值记录
|
||||||
|
//获取账号金额
|
||||||
|
MemberAccount memberAccount = memberAccountService.getMemberAccount(charge.getMemberId());
|
||||||
|
MqUtil.sendIMMessage(buildMessage(charge,memberAccount));
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -175,7 +175,7 @@ public class DivideServiceImpl extends ServiceImpl<DivideMapper, Divide> impleme
|
|||||||
//获取订单信息
|
//获取订单信息
|
||||||
Order order = orderService.getById(orderId);
|
Order order = orderService.getById(orderId);
|
||||||
Assert.notNull(order, () -> new ServiceException("订单不存在"));
|
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());
|
PayOrder payOrder = payOrderService.getById(order.getPayId());
|
||||||
Assert.notNull(payOrder, () -> new ServiceException("支付单不存在"));
|
Assert.notNull(payOrder, () -> new ServiceException("支付单不存在"));
|
||||||
Assert.isTrue(payOrder.getTransState() == TransState.PAID.getCode(), () -> new ServiceException("订单未支付"));
|
Assert.isTrue(payOrder.getTransState() == TransState.PAID.getCode(), () -> new ServiceException("订单未支付"));
|
||||||
|
@ -3,6 +3,7 @@ package com.wzj.soopin.transaction.service.impl;
|
|||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.codec.Base64;
|
import cn.hutool.core.codec.Base64;
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
import cn.hutool.core.lang.Assert;
|
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.Aftersale;
|
||||||
import com.wzj.soopin.order.domain.entity.Order;
|
import com.wzj.soopin.order.domain.entity.Order;
|
||||||
import com.wzj.soopin.order.domain.entity.OrderItem;
|
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.emum.OrderStatusEnum;
|
||||||
import com.wzj.soopin.order.service.AftersaleService;
|
import com.wzj.soopin.order.service.AftersaleService;
|
||||||
import com.wzj.soopin.order.service.OrderItemService;
|
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.exception.ServiceException;
|
||||||
import org.dromara.common.core.utils.DateUtils;
|
import org.dromara.common.core.utils.DateUtils;
|
||||||
import org.dromara.common.core.utils.ServletUtils;
|
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.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
@ -90,6 +96,7 @@ import java.util.*;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.wzj.soopin.transaction.constans.EasypayConstants.*;
|
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"))
|
.paymentTime(LocalDateTimeUtil.parse(StrBuilder.create(respOrderInfo.getDateEnd()).append(respOrderInfo.getTimeEnd()).toString(), "yyyyMMddHHmmss"))
|
||||||
.payType(PayType.getByValue(payOrder.getPayType()).getChannel())
|
.payType(PayType.getByValue(payOrder.getPayType()).getChannel())
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
|
//发出消息
|
||||||
|
MqUtil.sendIMMessage(buildMQMessage(order));
|
||||||
|
}
|
||||||
|
private MQMessage buildMQMessage(Order order) {
|
||||||
|
Map<String, Object> params = new HashMap<>();
|
||||||
|
params.put("orderID", order.getId());
|
||||||
|
params.put("amount", order.getPayAmount());
|
||||||
|
|
||||||
|
//取订单的第一个商品
|
||||||
|
List<OrderItem> 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
|
@Override
|
||||||
|
@ -13,6 +13,7 @@ import com.wzj.soopin.order.mapper.RedPacketReceiveMapper;
|
|||||||
import com.wzj.soopin.transaction.service.IAccountBillService;
|
import com.wzj.soopin.transaction.service.IAccountBillService;
|
||||||
import com.wzj.soopin.transaction.service.RedPacketService;
|
import com.wzj.soopin.transaction.service.RedPacketService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.dromara.common.core.constant.ResultCode;
|
||||||
import org.dromara.common.core.exception.ServiceException;
|
import org.dromara.common.core.exception.ServiceException;
|
||||||
import org.dromara.common.core.exception.base.BaseException;
|
import org.dromara.common.core.exception.base.BaseException;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
@ -66,7 +67,16 @@ public class RedPacketServiceImpl extends ServiceImpl<RedPacketMapper, RedPacket
|
|||||||
// 验证发送者余额
|
// 验证发送者余额
|
||||||
BigDecimal balance = umsAccountMapper.getMoneyBalanceByMemberId(memberId);
|
BigDecimal balance = umsAccountMapper.getMoneyBalanceByMemberId(memberId);
|
||||||
if (balance == null || balance.compareTo(request.getTotalAmount()) < 0) {
|
if (balance == null || balance.compareTo(request.getTotalAmount()) < 0) {
|
||||||
throw new RuntimeException("账户余额不足,无法发送红包");
|
throw new BaseException("账户余额不足,无法发送红包");
|
||||||
|
}
|
||||||
|
if(request.getChatType()==CHAT_TYPE_SINGLE){
|
||||||
|
// 单聊校验接收者是否存在
|
||||||
|
if(request.getReceiverId()==null){
|
||||||
|
throw new ServiceException(ResultCode.USER_NOT_EXIST);
|
||||||
|
}
|
||||||
|
if(request.getTotalCount()==null || request.getTotalCount()>1){
|
||||||
|
throw new BaseException(ResultCode.PACKET_SINGLE_COUNT_ERROR.message());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建红包记录
|
// 创建红包记录
|
||||||
@ -74,7 +84,7 @@ public class RedPacketServiceImpl extends ServiceImpl<RedPacketMapper, RedPacket
|
|||||||
redPacketMapper.insert(redPacket);
|
redPacketMapper.insert(redPacket);
|
||||||
Long packetId = redPacket.getId();
|
Long packetId = redPacket.getId();
|
||||||
// 扣减发送者余额并记录变动
|
// 扣减发送者余额并记录变动
|
||||||
accountBillService.reduceMoney(balance, memberId, AccountBillSourceEnum.RED_PACKAGE_SEND, "红包发放");
|
accountBillService.reduceMoney(request.getTotalAmount(), memberId, AccountBillSourceEnum.RED_PACKAGE_SEND, "红包发放");
|
||||||
|
|
||||||
// 返回结果
|
// 返回结果
|
||||||
Map<String, Object> result = new HashMap<>();
|
Map<String, Object> result = new HashMap<>();
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.wzj.soopin.transaction.service.impl;
|
package com.wzj.soopin.transaction.service.impl;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
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.member.domain.po.Member;
|
||||||
import com.wzj.soopin.transaction.domain.bo.WithdrawBO;
|
import com.wzj.soopin.transaction.domain.bo.WithdrawBO;
|
||||||
import com.wzj.soopin.member.domain.po.MemberAccount;
|
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.IAccountBillService;
|
||||||
import com.wzj.soopin.transaction.service.IWithdrawService;
|
import com.wzj.soopin.transaction.service.IWithdrawService;
|
||||||
import com.wzj.soopin.transaction.service.IEasypayService;
|
import com.wzj.soopin.transaction.service.IEasypayService;
|
||||||
|
import com.wzj.soopin.transaction.util.SnowFlake;
|
||||||
import com.wzj.soopin.transaction.wechat.WechatPayConfig;
|
import com.wzj.soopin.transaction.wechat.WechatPayConfig;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.dromara.common.core.constant.ResultCode;
|
||||||
import org.dromara.common.core.exception.ServiceException;
|
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.common.satoken.utils.LoginHelper;
|
||||||
import org.dromara.system.domain.SysTenantAccount;
|
import org.dromara.system.domain.SysTenantAccount;
|
||||||
import org.dromara.system.service.ISysTenantAccountService;
|
import org.dromara.system.service.ISysTenantAccountService;
|
||||||
@ -30,9 +36,7 @@ import org.springframework.stereotype.Service;
|
|||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员封禁
|
* 会员封禁
|
||||||
@ -60,22 +64,25 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> i
|
|||||||
|
|
||||||
private final IMemberService memberService;
|
private final IMemberService memberService;
|
||||||
|
|
||||||
|
private final WechatPayConfig wechatPayConfig;
|
||||||
@Override
|
@Override
|
||||||
public boolean audit(WithdrawBO bo) {
|
public boolean audit(WithdrawBO bo) {
|
||||||
Withdraw withdraw = getById(bo.getId());
|
Withdraw withdraw = getById(bo.getId());
|
||||||
if (withdraw == null) {
|
if (withdraw == null) {
|
||||||
throw new RuntimeException("提现申请不存在");
|
throw new RuntimeException("提现申请不存在");
|
||||||
}
|
}
|
||||||
if (!Objects.equals(WithdrawAuditStatus.PENDING.getCode(), withdraw.getAuditStatus())) {
|
if (!Objects.equals(WithdrawAuditStatus.PENDING.getCode(), withdraw.getStatus())) {
|
||||||
throw new RuntimeException("提现申请已处理");
|
throw new RuntimeException("提现申请已处理");
|
||||||
}
|
}
|
||||||
//发起提现
|
//发起提现
|
||||||
|
|
||||||
try{
|
try{
|
||||||
wxPayService.initiateBatchTransferNew(buildWechatPayParam(bo));
|
wxPayService.initiateBatchTransferNew(buildWechatPayParam(withdraw));
|
||||||
}catch (ServiceException e){
|
}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())
|
withdraw = Withdraw.builder().id(bo.getId())
|
||||||
.auditReason(bo.getAuditReason())
|
.auditReason(bo.getAuditReason())
|
||||||
@ -84,14 +91,36 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> i
|
|||||||
.auditBy(LoginHelper.getUserId())
|
.auditBy(LoginHelper.getUserId())
|
||||||
.build();
|
.build();
|
||||||
this.updateById(withdraw);
|
this.updateById(withdraw);
|
||||||
|
|
||||||
|
//发送成功通知
|
||||||
|
MqUtil.sendIMMessage(buildMessage(withdraw, MessageActionEnum.ORDER_WITHDRAW_AUDIT));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private MQMessage buildMessage(Withdraw o, MessageActionEnum actionEnum) {
|
||||||
|
Map<String, Object> 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();
|
InitiateBatchTransferRequestNew request = new InitiateBatchTransferRequestNew();
|
||||||
WechatPayConfig wechatPayConfig = new WechatPayConfig();
|
|
||||||
//商户AppID
|
//商户AppID
|
||||||
request.setAppid(wechatPayConfig.getAppId());
|
request.setAppid(wechatPayConfig.getAppId());
|
||||||
//商户单号
|
//商户单号
|
||||||
@ -102,9 +131,14 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> i
|
|||||||
request.setTransferSceneId("1005");
|
request.setTransferSceneId("1005");
|
||||||
//用户的openId
|
//用户的openId
|
||||||
Member member=memberService.getById(withdraw.getMemberId());
|
Member member=memberService.getById(withdraw.getMemberId());
|
||||||
|
if(member==null){
|
||||||
|
throw new ServiceException(ResultCode.USER_NOT_EXIST);
|
||||||
|
}
|
||||||
request.setOpenid(member.getOpenId());
|
request.setOpenid(member.getOpenId());
|
||||||
//收款用户姓名
|
//收款用户姓名
|
||||||
|
if (request.getTransferAmount() > 30) {
|
||||||
request.setUserName(member.getNickname());
|
request.setUserName(member.getNickname());
|
||||||
|
}
|
||||||
//转账备注
|
//转账备注
|
||||||
request.setTransferRemark("提现");
|
request.setTransferRemark("提现");
|
||||||
//转账场景报备信息 佣金的固定类型
|
//转账场景报备信息 佣金的固定类型
|
||||||
@ -155,47 +189,8 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> 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) {
|
public boolean withdraw (Withdraw withdraw) {
|
||||||
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) {
|
|
||||||
MemberAccount memberAccount = memberAccountService.getMemberAccount(withdraw.getMemberId());
|
MemberAccount memberAccount = memberAccountService.getMemberAccount(withdraw.getMemberId());
|
||||||
if (memberAccount == null) {
|
if (memberAccount == null) {
|
||||||
throw new RuntimeException("用户不存在");
|
throw new RuntimeException("用户不存在");
|
||||||
@ -206,9 +201,10 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> i
|
|||||||
throw new RuntimeException("用户余额不足");
|
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.setFee(fee);
|
||||||
withdraw.setActualMoney(withdraw.getMoney().subtract(fee));
|
withdraw.setActualMoney(withdraw.getMoney().subtract(fee));
|
||||||
|
withdraw.setCode(SnowFlake.createStr("TX"));
|
||||||
save(withdraw);
|
save(withdraw);
|
||||||
|
|
||||||
BigDecimal newBalance = balance.subtract(withdraw.getMoney());
|
BigDecimal newBalance = balance.subtract(withdraw.getMoney());
|
||||||
|
@ -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.domain.entity.TransferDetailEntityNew;
|
||||||
import com.wzj.soopin.transaction.wechat.WechatPayConfig;
|
import com.wzj.soopin.transaction.wechat.WechatPayConfig;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
import org.dromara.common.core.constant.ResultCode;
|
||||||
import org.dromara.common.core.exception.ServiceException;
|
import org.dromara.common.core.exception.ServiceException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -53,10 +54,11 @@ public class WxPayService {
|
|||||||
*/
|
*/
|
||||||
public InitiateBatchTransferResponseNew initiateBatchTransferNew(InitiateBatchTransferRequestNew request) {
|
public InitiateBatchTransferResponseNew initiateBatchTransferNew(InitiateBatchTransferRequestNew request) {
|
||||||
logger.info("WxPayService.initiateBatchTransferNew request:{}", request.toString());
|
logger.info("WxPayService.initiateBatchTransferNew request:{}", request.toString());
|
||||||
try{
|
if(request.getUserName()!=null){
|
||||||
|
|
||||||
String encryptName = wxPayConfig.createEncryptor().encrypt(request.getUserName());
|
String encryptName = wxPayConfig.createEncryptor().encrypt(request.getUserName());
|
||||||
request.setUserName(encryptName);
|
request.setUserName(encryptName);
|
||||||
|
}
|
||||||
|
|
||||||
String requestPath = "https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/transfer-bills";
|
String requestPath = "https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/transfer-bills";
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
headers.addHeader("Accept", MediaType.APPLICATION_JSON.getValue());
|
headers.addHeader("Accept", MediaType.APPLICATION_JSON.getValue());
|
||||||
@ -73,12 +75,6 @@ public class WxPayService {
|
|||||||
HttpResponse<InitiateBatchTransferResponseNew> httpResponse = httpClient.execute(httpRequest, InitiateBatchTransferResponseNew.class);
|
HttpResponse<InitiateBatchTransferResponseNew> httpResponse = httpClient.execute(httpRequest, InitiateBatchTransferResponseNew.class);
|
||||||
logger.info("WxPayService.initiateBatchTransferNew response:{}", httpResponse.getServiceResponse());
|
logger.info("WxPayService.initiateBatchTransferNew response:{}", httpResponse.getServiceResponse());
|
||||||
return httpResponse.getServiceResponse();
|
return httpResponse.getServiceResponse();
|
||||||
|
|
||||||
}catch (Exception e){
|
|
||||||
logger.error("WxPayService.initiateBatchTransferNew error:{}", e);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -244,6 +240,5 @@ public class WxPayService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
63
script/sql/syncVlog.sql
Normal file
63
script/sql/syncVlog.sql
Normal file
@ -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);
|
Loading…
x
Reference in New Issue
Block a user