From 13ff48c720953bcc903f421b41396da00aa600be Mon Sep 17 00:00:00 2001 From: Penny <2500338766@qq.com> Date: Thu, 18 May 2023 01:03:09 +0800 Subject: [PATCH] =?UTF-8?q?feature:=E6=B7=BB=E5=8A=A0=E7=94=BB=E6=84=8F?= =?UTF-8?q?=E5=80=BC=E5=A5=96=E5=8A=B1mq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bnyer/common/core/domain/VipOrder.java | 9 +- .../bnyer/common/core}/enums/GoldEnum.java | 12 +- .../rocketmq/constant/RocketMqTopic.java | 5 + .../domain/img/GoldRewardMessage.java | 36 +++++ .../img/listener/GoldRewardConsumer.java | 152 ++++++++++++++++++ .../impl/CreatorProfitServiceImpl.java | 67 ++++---- .../impl/StableDiffusionServiceImpl.java | 2 +- .../vip/VipOrderPayNotifyConsumer.java | 31 +++- 8 files changed, 272 insertions(+), 42 deletions(-) rename {bnyer-services/bnyer-img/src/main/java/com/bnyer/img => bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core}/enums/GoldEnum.java (62%) create mode 100644 bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/domain/img/GoldRewardMessage.java create mode 100644 bnyer-services/bnyer-img/src/main/java/com/bnyer/img/listener/GoldRewardConsumer.java diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/VipOrder.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/VipOrder.java index 17baabb..03eb818 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/VipOrder.java +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/VipOrder.java @@ -1,19 +1,14 @@ package com.bnyer.common.core.domain; -import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.*; + import java.math.BigDecimal; import java.util.Date; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; /** * @author :WXC diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/enums/GoldEnum.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/GoldEnum.java similarity index 62% rename from bnyer-services/bnyer-img/src/main/java/com/bnyer/img/enums/GoldEnum.java rename to bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/GoldEnum.java index d1595c1..623959f 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/enums/GoldEnum.java +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/GoldEnum.java @@ -1,9 +1,10 @@ -package com.bnyer.img.enums; +package com.bnyer.common.core.enums; import lombok.AllArgsConstructor; import lombok.Getter; /** + * 画意值枚举类 * @author chengkun * @date 2023/05/16 17:46 */ @@ -21,4 +22,13 @@ public enum GoldEnum { private String code; private String value; + + public static String getValueByCode(String code) { + for (GoldEnum s : GoldEnum.values()) { + if (code.equals(s.code)) { + return s.getValue(); + } + } + return null; + } } diff --git a/bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/constant/RocketMqTopic.java b/bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/constant/RocketMqTopic.java index 6370849..6910bf5 100644 --- a/bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/constant/RocketMqTopic.java +++ b/bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/constant/RocketMqTopic.java @@ -22,4 +22,9 @@ public class RocketMqTopic { */ public static final String VIP_RECORD_CREATE_TOPIC = "vip-record-create-topic"; + /** + * 画意值奖励 + */ + public static final String GOLD_REWARD_TOPIC = "gold-reward-topic"; + } diff --git a/bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/domain/img/GoldRewardMessage.java b/bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/domain/img/GoldRewardMessage.java new file mode 100644 index 0000000..9661579 --- /dev/null +++ b/bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/domain/img/GoldRewardMessage.java @@ -0,0 +1,36 @@ +package com.bnyer.common.rocketmq.domain.img; + +import com.bnyer.common.rocketmq.domain.BaseMessage; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.Date; + +/** + * @author :WXC + * @Date :2023/05/17 + * @description : 添加用户会员记录 + */ +@Getter +@Setter +@NoArgsConstructor +public class GoldRewardMessage extends BaseMessage { + + @ApiModelProperty(value="用户id") + private Long userId; + + @ApiModelProperty(value="画意值数量") + private int goldNum; + + @ApiModelProperty(value = "结算平台(0->抖音;1->快手;2->微信;3->uniapp)") + private String platform; + + @ApiModelProperty(value = "用户客户端类型(10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信)") + private Integer userClientType; + + @ApiModelProperty(value="画意值枚举编码") + private String GoldCode; +} diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/listener/GoldRewardConsumer.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/listener/GoldRewardConsumer.java new file mode 100644 index 0000000..4d96f1c --- /dev/null +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/listener/GoldRewardConsumer.java @@ -0,0 +1,152 @@ +package com.bnyer.img.listener; + +import com.bnyer.common.core.domain.FhUser; +import com.bnyer.common.core.domain.GoldLog; +import com.bnyer.common.core.domain.TiktokUser; +import com.bnyer.common.core.domain.WxUser; +import com.bnyer.common.core.enums.GoldEnum; +import com.bnyer.common.core.utils.StringUtils; +import com.bnyer.common.rocketmq.constant.RocketMqTopic; +import com.bnyer.common.rocketmq.domain.img.GoldRewardMessage; +import com.bnyer.common.rocketmq.handle.EnhanceMessageHandler; +import com.bnyer.img.service.FhUserService; +import com.bnyer.img.service.GoldLogService; +import com.bnyer.img.service.TiktokUserService; +import com.bnyer.img.service.WxUserService; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @author :penny + * @Date :2023/05/17 + * @description :给予画意值奖励并写入记录mq消费监听 + */ +@Slf4j +@Component +@RocketMQMessageListener(topic = RocketMqTopic.GOLD_REWARD_TOPIC,consumerGroup = RocketMqTopic.GOLD_REWARD_TOPIC) +public class GoldRewardConsumer extends EnhanceMessageHandler implements RocketMQListener { + + @Autowired + private TiktokUserService tiktokUserService; + + @Autowired + private FhUserService fhUserService; + + @Autowired + private WxUserService wxUserService; + + @Autowired + private GoldLogService goldLogService; + + @Override + public void onMessage(GoldRewardMessage goldReward) { + super.dispatchMessage(goldReward); + if(StringUtils.isNotNull(goldReward.getPlatform())){ + switch (goldReward.getPlatform()){ + case "0": + TiktokUser tiktokUser = tiktokUserService.getUserById(goldReward.getUserId()); + tiktokUser.setGoldNum(tiktokUser.getGoldNum() + goldReward.getGoldNum()); + tiktokUserService.updateTiktokUser(tiktokUser); + //更新用户画意值奖励并写入记录 + GoldLog tiktokGoldLog = new GoldLog(); + tiktokGoldLog.setGoldNum(goldReward.getGoldNum()); + tiktokGoldLog.setUserId(goldReward.getUserId()); + tiktokGoldLog.setSource("1"); + tiktokGoldLog.setReason(GoldEnum.getValueByCode(goldReward.getGoldCode())); + goldLogService.insert(tiktokGoldLog); + break; + case "1": + FhUser fhUser = fhUserService.getUserById(goldReward.getUserId()); + fhUser.setGoldNum(fhUser.getGoldNum() + goldReward.getGoldNum()); + fhUserService.updateFhUser(fhUser); + //更新用户画意值奖励并写入记录 + GoldLog fhGoldLog = new GoldLog(); + fhGoldLog.setGoldNum(goldReward.getGoldNum()); + fhGoldLog.setUserId(goldReward.getUserId()); + fhGoldLog.setSource("2"); + fhGoldLog.setReason(GoldEnum.getValueByCode(goldReward.getGoldCode())); + goldLogService.insert(fhGoldLog); + break; + case "2": + WxUser wxUser = wxUserService.getUserById(goldReward.getUserId()); + wxUser.setGoldNum(wxUser.getGoldNum() + goldReward.getGoldNum()); + wxUserService.updateWxUser(wxUser); + //更新用户画意值奖励并写入记录 + GoldLog wxGoldLog = new GoldLog(); + wxGoldLog.setGoldNum(goldReward.getGoldNum()); + wxGoldLog.setUserId(goldReward.getUserId()); + wxGoldLog.setSource("3"); + wxGoldLog.setReason(GoldEnum.getValueByCode(goldReward.getGoldCode())); + goldLogService.insert(wxGoldLog); + break; + } + }else{ + switch (goldReward.getUserClientType()){ + case 10: + TiktokUser tiktokUser = tiktokUserService.getUserById(goldReward.getUserId()); + tiktokUser.setGoldNum(tiktokUser.getGoldNum() + goldReward.getGoldNum()); + tiktokUserService.updateTiktokUser(tiktokUser); + //更新用户画意值奖励并写入记录 + GoldLog tiktokGoldLog = new GoldLog(); + tiktokGoldLog.setGoldNum(goldReward.getGoldNum()); + tiktokGoldLog.setUserId(goldReward.getUserId()); + tiktokGoldLog.setSource("1"); + tiktokGoldLog.setReason(GoldEnum.getValueByCode(goldReward.getGoldCode())); + goldLogService.insert(tiktokGoldLog); + break; + case 20: + FhUser fhUser = fhUserService.getUserById(goldReward.getUserId()); + fhUser.setGoldNum(fhUser.getGoldNum() + goldReward.getGoldNum()); + fhUserService.updateFhUser(fhUser); + //更新用户画意值奖励并写入记录 + GoldLog fhGoldLog = new GoldLog(); + fhGoldLog.setGoldNum(goldReward.getGoldNum()); + fhGoldLog.setUserId(goldReward.getUserId()); + fhGoldLog.setSource("2"); + fhGoldLog.setReason(GoldEnum.getValueByCode(goldReward.getGoldCode())); + goldLogService.insert(fhGoldLog); + break; + case 30: + WxUser wxUser = wxUserService.getUserById(goldReward.getUserId()); + wxUser.setGoldNum(wxUser.getGoldNum() + goldReward.getGoldNum()); + wxUserService.updateWxUser(wxUser); + //更新用户画意值奖励并写入记录 + GoldLog wxGoldLog = new GoldLog(); + wxGoldLog.setGoldNum(goldReward.getGoldNum()); + wxGoldLog.setUserId(goldReward.getUserId()); + wxGoldLog.setSource("3"); + wxGoldLog.setReason(GoldEnum.getValueByCode(goldReward.getGoldCode())); + goldLogService.insert(wxGoldLog); + break; + } + } + } + + @Override + protected void handleMessage(GoldRewardMessage message) throws Exception { + + } + + @Override + protected void handleMaxRetriesExceeded(GoldRewardMessage message) { + log.error("消息消费失败,可扩展执行后续处理"); + } + + @Override + protected boolean filter(GoldRewardMessage message) { + return false; + } + + @Override + protected boolean isRetry() { + return false; + } + + @Override + protected boolean throwException() { + return false; + } +} diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java index 58c7dc8..df674da 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java @@ -5,26 +5,27 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.bnyer.common.core.constant.RedisKeyConstant; import com.bnyer.common.core.domain.CreatorProfit; -import com.bnyer.common.core.domain.GoldLog; import com.bnyer.common.core.domain.InviteLog; -import com.bnyer.common.core.domain.TiktokUser; import com.bnyer.common.core.dto.CreatorProfitAdInsertDto; import com.bnyer.common.core.dto.ProfitInOrEndDto; +import com.bnyer.common.core.enums.GoldEnum; +import com.bnyer.common.core.utils.StringUtils; import com.bnyer.common.redis.service.RedisService; import com.bnyer.common.redis.service.RedissonService; -import com.bnyer.img.enums.GoldEnum; +import com.bnyer.common.rocketmq.constant.RocketMqTopic; +import com.bnyer.common.rocketmq.domain.img.GoldRewardMessage; +import com.bnyer.common.rocketmq.template.RocketMQEnhanceTemplate; import com.bnyer.img.mapper.CreatorProfitMapper; import com.bnyer.img.mapper.InviteLogMapper; import com.bnyer.img.service.CreatorProfitService; -import com.bnyer.img.service.GoldLogService; import com.bnyer.img.service.TiktokImgService; -import com.bnyer.img.service.TiktokUserService; import com.bnyer.img.vo.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -50,11 +51,8 @@ public class CreatorProfitServiceImpl implements CreatorProfitService { @Autowired private RedissonService redissonService; - @Autowired - private TiktokUserService tiktokUserService; - - @Autowired - private GoldLogService goldLogService; + @Resource + private RocketMQEnhanceTemplate rocketMQEnhanceTemplate; @Override public boolean checkCreatorProfitExist(String mark) { @@ -132,30 +130,37 @@ public class CreatorProfitServiceImpl implements CreatorProfitService { } int insert = creatorProfitMapper.insert(creatorProfit); log.info("新增艺术家【{}】图片【{}】应用【{}】平台【{}】收益记录", creatorProfit.getCreatorId(), creatorProfit.getImgId(), creatorProfit.getAppType(), creatorProfit.getPlatform()); - //更新用户画意值数量 - TiktokUser tiktokUser = tiktokUserService.getUserById(params.getUserId()); - tiktokUser.setGoldNum(tiktokUser.getGoldNum() + 2); - tiktokUserService.updateTiktokUser(tiktokUser); - //新增用户画意值记录 - GoldLog goldLog = new GoldLog(); - goldLog.setGoldNum(2); - goldLog.setUserId(params.getUserId()); - goldLog.setReason(GoldEnum.DOWNLOAD_IMG.getValue()); - switch (params.getPlatform()){ - case "0": - goldLog.setSource("1"); - break; - case "1": - goldLog.setSource("2"); - break; - case "2": - goldLog.setSource("3"); - break; - } - goldLogService.insert(goldLog); + + //发送下图画意值奖励并写入记录消息 + GoldRewardMessage msg = buildGoldRewardMsg(params.getUserId(), 2, GoldEnum.DOWNLOAD_IMG.getCode(), params.getPlatform(), null); + rocketMQEnhanceTemplate.sendAsyncRetryMsg(RocketMqTopic.GOLD_REWARD_TOPIC,null,msg); return insert; } + /** + * 构建画意值奖励消息体 + * @param userId 用户id + * @param goldNum 奖励/消耗画意值 + * @param platform 平台 + * @param userClientType 用户客户端类型 + * @param goldCode 画意值枚举类编码 + * @return - + */ + private GoldRewardMessage buildGoldRewardMsg(Long userId, int goldNum, String goldCode, String platform, Integer userClientType) { + GoldRewardMessage message = new GoldRewardMessage(); + message.setUserId(userId); + message.setGoldNum(goldNum); + message.setGoldCode(goldCode); + if(StringUtils.isNotNull(platform)){ + message.setPlatform(platform); + } + if(StringUtils.isNotNull(userClientType)){ + message.setUserClientType(userClientType); + } + return message; + } + + @Override @Transactional(rollbackFor = Exception.class) public void insertInvitedProfit(CreatorProfit creatorProfit) { diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/StableDiffusionServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/StableDiffusionServiceImpl.java index 8e57802..7c8745a 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/StableDiffusionServiceImpl.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/StableDiffusionServiceImpl.java @@ -8,6 +8,7 @@ import com.bnyer.common.core.constant.TiktokConstant; import com.bnyer.common.core.domain.*; import com.bnyer.common.core.dto.TextToImgDto; import com.bnyer.common.core.dto.TextToImgLoveDto; +import com.bnyer.common.core.enums.GoldEnum; import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.utils.StringUtils; import com.bnyer.common.core.utils.TranslateUtils; @@ -18,7 +19,6 @@ import com.bnyer.file.api.RemoteFileService; import com.bnyer.img.config.StableDiffusionConfig; import com.bnyer.img.config.TencentTranslateConfig; import com.bnyer.img.enums.AiPaintButtonEnum; -import com.bnyer.img.enums.GoldEnum; import com.bnyer.img.service.*; import com.tencentcloudapi.aiart.v20221229.AiartClient; import com.tencentcloudapi.aiart.v20221229.models.ResultConfig; diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java index 32cde75..756d7d1 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java @@ -3,9 +3,12 @@ package com.bnyer.order.listener.vip; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.bnyer.common.core.constant.ServiceNameConstants; import com.bnyer.common.core.domain.VipOrder; +import com.bnyer.common.core.enums.GoldEnum; +import com.bnyer.common.core.utils.StringUtils; import com.bnyer.common.core.utils.uuid.IdUtils; import com.bnyer.common.rocketmq.constant.RocketMqTopic; import com.bnyer.common.rocketmq.domain.img.AddUserVipRecordMessage; +import com.bnyer.common.rocketmq.domain.img.GoldRewardMessage; import com.bnyer.common.rocketmq.domain.order.VipOrderPayNotifyMessage; import com.bnyer.common.rocketmq.handle.EnhanceMessageHandler; import com.bnyer.common.rocketmq.template.RocketMQEnhanceTemplate; @@ -54,8 +57,9 @@ public class VipOrderPayNotifyConsumer extends EnhanceMessageHandler