From 2bcf4cc63c2838213cf580af3b53ca757fe8a374 Mon Sep 17 00:00:00 2001
From: Hentua <wangdoubleone@gmail.com>
Date: Wed, 24 Jan 2024 22:49:38 +0800
Subject: [PATCH] fix

---
 src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java             |    4 
 src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java                 |   14 ++
 src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java         |   57 +++++++++++
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |    5 +
 src/main/java/cc/mrbird/febs/common/enumerates/ScoreFlowTypeEnum.java           |   34 ++++++
 src/main/java/cc/mrbird/febs/mall/vo/MoneyFlowVo.java                           |    7 +
 src/main/java/cc/mrbird/febs/vip/service/IVipCommonService.java                 |    6 +
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java    |   11 +
 src/main/java/cc/mrbird/febs/pay/controller/XcxPayController.java               |    1 
 src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefitsDetails.java             |    7 +
 src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java     |   42 ++++++++
 src/main/java/cc/mrbird/febs/vip/controller/ApiMallVipConfigController.java     |    9 +
 src/main/java/cc/mrbird/febs/vip/entity/MallVipConfig.java                      |   12 ++
 src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigService.java             |    4 
 src/main/resources/mapper/modules/MallVipConfigMapper.xml                       |   12 ++
 src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java               |    2 
 src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java                |    7 +
 src/main/java/cc/mrbird/febs/vip/mapper/MallVipConfigMapper.java                |    3 
 src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefits.java                    |    5 +
 19 files changed, 235 insertions(+), 7 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/ScoreFlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/ScoreFlowTypeEnum.java
new file mode 100644
index 0000000..a65ce85
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/ScoreFlowTypeEnum.java
@@ -0,0 +1,34 @@
+package cc.mrbird.febs.common.enumerates;
+
+import lombok.Getter;
+
+@Getter
+public enum ScoreFlowTypeEnum {
+
+    /**
+     *
+     */
+    PAY(1, "积分支付"),
+
+    BUY(2, "购买商品获得积分");
+
+    private final int value;
+
+    private final String desc;
+
+    ScoreFlowTypeEnum(int value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public static String getDescByValue(int value) {
+        for (ScoreFlowTypeEnum scoreFlowTypeEnum : values()) {
+            if (value == scoreFlowTypeEnum.getValue()) {
+                return scoreFlowTypeEnum.getDesc();
+            }
+        }
+
+        return "";
+    }
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
index 0e4af18..0ce1495 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -1,10 +1,7 @@
 package cc.mrbird.febs.mall.service.impl;
 
 import cc.mrbird.febs.common.entity.FebsResponse;
-import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
-import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
-import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
-import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
+import cc.mrbird.febs.common.enumerates.*;
 import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.common.properties.XcxProperties;
 import cc.mrbird.febs.common.utils.*;
@@ -377,6 +374,12 @@
         Long id = LoginUserUtil.getLoginUser().getId();
         moneyFlowDto.setMemberId(id);
         IPage<MoneyFlowVo> pages = mallMoneyFlowMapper.selectApiMoneyFlowInPage(page, moneyFlowDto);
+
+//        if (moneyFlowDto.getFlowType() == 3) {
+//            pages.getRecords().forEach(item -> {
+//                item.setDescription(ScoreFlowTypeEnum.getDescByValue(item.getType()));
+//            });
+//        }
         return new FebsResponse().success().data(pages);
     }
 
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index 7b70a02..923ed98 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -23,6 +23,8 @@
 import cc.mrbird.febs.pay.service.IXcxPayService;
 import cc.mrbird.febs.pay.util.WeixinServiceUtil;
 import cc.mrbird.febs.rabbit.producter.AgentProducer;
+import cc.mrbird.febs.vip.service.IMallVipConfigBenefitsService;
+import cc.mrbird.febs.vip.service.IMallVipConfigService;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
@@ -86,6 +88,8 @@
     private final MallMemberCouponMapper mallMemberCouponMapper;
     private final MallGoodsCouponMapper mallGoodsCouponMapper;
     private final CouponGoodsMapper couponGoodsMapper;
+
+    private final IMallVipConfigService mallVipConfigService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -438,6 +442,7 @@
                 mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2);
 
                 agentProducer.sendOrderCoupon(orderInfo.getId());
+                agentProducer.sendGetScoreMsg(orderInfo.getId());
                 break;
             case "4":
                 if (orderInfo.getOrderType() != 2) {
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/MoneyFlowVo.java b/src/main/java/cc/mrbird/febs/mall/vo/MoneyFlowVo.java
index 178599f..1e8b998 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/MoneyFlowVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/MoneyFlowVo.java
@@ -37,4 +37,11 @@
     @ApiModelProperty(value = "时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createdTime;
+
+
+    @ApiModelProperty(value = "描述")
+    private String description;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
 }
diff --git a/src/main/java/cc/mrbird/febs/pay/controller/XcxPayController.java b/src/main/java/cc/mrbird/febs/pay/controller/XcxPayController.java
index 0d95241..719288a 100644
--- a/src/main/java/cc/mrbird/febs/pay/controller/XcxPayController.java
+++ b/src/main/java/cc/mrbird/febs/pay/controller/XcxPayController.java
@@ -327,6 +327,7 @@
                             mallOrderInfoMapper.updateById(order);
 
                             agentProducer.sendOrderCoupon(order.getId());
+                            agentProducer.sendGetScoreMsg(order.getId());
 
                             mallMoneyFlowService.addMoneyFlow(
                                     order.getMemberId(),
diff --git a/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java b/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java
index a473a08..2470a96 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java
@@ -12,4 +12,6 @@
     public static final String ORDER_RETURN_MONEY = "queue_order_return_money_qay";
 
     public static final String ORDER_COUPON = "queue_order_coupon";
+
+    public static final String GET_SCORE_MSG = "queue_get_score_msg";
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
index 9fe3dea..972bd28 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
@@ -5,6 +5,7 @@
 import cc.mrbird.febs.mall.service.IMemberProfitService;
 import cc.mrbird.febs.rabbit.constants.QueueConstants;
 import cc.mrbird.febs.rabbit.enumerates.RabbitQueueEnum;
+import cc.mrbird.febs.vip.service.IVipCommonService;
 import com.rabbitmq.client.Channel;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.core.Message;
@@ -82,4 +83,17 @@
             log.error("使用优惠卷异常:", e);
         }
     }
+
+    @Autowired
+    private IVipCommonService vipCommonService;
+
+    @RabbitListener(queues = QueueConstants.GET_SCORE_MSG)
+    public void getScoreMsg(Long orderId) {
+        log.info("收到积分消息:{}", orderId);
+        try {
+            vipCommonService.getScore(orderId);
+        } catch (Exception e) {
+            log.error("获取积分消息异常", e);
+        }
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java b/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java
index 87376dd..8d11cf6 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java
@@ -15,7 +15,9 @@
 
     ORDER_RETURN_MONEY("exchange_order_return_money_qay", "route_key_order_return_money_qay", "queue_order_return_money_qay"),
 
-    ORDER_COUPON("exchange_order_coupon", "route_key_order_coupon", QueueConstants.ORDER_COUPON);
+    ORDER_COUPON("exchange_order_coupon", "route_key_order_coupon", QueueConstants.ORDER_COUPON),
+
+    GET_SCORE_MSG("exchange_get_score_msg", "route_key_get_score_msg", QueueConstants.GET_SCORE_MSG);
 
     private String exchange;
 
diff --git a/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java b/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java
index 281c171..d18c404 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java
@@ -83,4 +83,11 @@
         CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
         rabbitTemplate.convertAndSend(RabbitQueueEnum.ORDER_COUPON.getExchange(), RabbitQueueEnum.ORDER_COUPON.getRoute(), id, correlationData);
     }
+
+    public void sendGetScoreMsg(Long orderId) {
+        log.info("发送获得积分消息:{}", orderId);
+
+        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
+        rabbitTemplate.convertAndSend(RabbitQueueEnum.GET_SCORE_MSG.getExchange(), RabbitQueueEnum.GET_SCORE_MSG.getRoute(), orderId, correlationData);
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/vip/controller/ApiMallVipConfigController.java b/src/main/java/cc/mrbird/febs/vip/controller/ApiMallVipConfigController.java
index b2a048d..b8af531 100644
--- a/src/main/java/cc/mrbird/febs/vip/controller/ApiMallVipConfigController.java
+++ b/src/main/java/cc/mrbird/febs/vip/controller/ApiMallVipConfigController.java
@@ -4,10 +4,13 @@
 import cc.mrbird.febs.common.controller.BaseController;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.vip.entity.MallVipBenefits;
+import cc.mrbird.febs.vip.entity.MallVipConfig;
 import cc.mrbird.febs.vip.service.IMallVipBenefitsService;
 import cc.mrbird.febs.vip.service.IMallVipConfigService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
@@ -27,12 +30,18 @@
 
 
     @ApiOperation(value = "获取会员等级列表")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = MallVipConfig.class)
+    })
     @GetMapping(value = "/findVipList")
     public FebsResponse findVipList() {
         return new FebsResponse().success().data(mallVipConfigService.findConfigList());
     }
 
     @ApiOperation(value = "获取权益详情")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = MallVipBenefits.class)
+    })
     @GetMapping(value = "/findBenefitsDetailList/{id}")
     public FebsResponse findVipDetailList(@PathVariable("id") Long id) {
         MallVipBenefits vipBenefits = mallVipBenefitsService.findVipBenefitsById(id);
diff --git a/src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefits.java b/src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefits.java
index b9bc408..885af9f 100644
--- a/src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefits.java
+++ b/src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefits.java
@@ -3,6 +3,8 @@
 import cc.mrbird.febs.common.entity.BaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -10,11 +12,13 @@
 
 @Data
 @TableName("mall_vip_benefits")
+@ApiModel(value = "MallVipBenefits")
 public class MallVipBenefits extends BaseEntity {
 
     /**
      * 权益名称
      */
+    @ApiModelProperty(value = "权益名称")
     private String name;
 
     /**
@@ -25,6 +29,7 @@
     /**
      * 权益图标
      */
+    @ApiModelProperty(value = "权益图标")
     private String icon;
 
     /**
diff --git a/src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefitsDetails.java b/src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefitsDetails.java
index a7832de..9d55849 100644
--- a/src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefitsDetails.java
+++ b/src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefitsDetails.java
@@ -3,30 +3,37 @@
 import cc.mrbird.febs.common.entity.BaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 @Data
 @TableName("mall_vip_benefits_details")
+@ApiModel(value = "MallVipBenefitsDetails")
 public class MallVipBenefitsDetails extends BaseEntity {
 
     /**
      * 图片链接
      */
+    @ApiModelProperty(value = "图片")
     private String image;
 
     /**
      * 是否可点击;1-是 2-否
      */
+    @ApiModelProperty(value = "是否可点击")
     private Integer isClick;
 
     /**
      * 链接类型;1-链接 2-领取商品 3-优惠券
      */
+    @ApiModelProperty(value = "1-链接 2-领取商品 3-优惠券")
     private Integer linkType;
 
     /**
      * 内容;根据linkType来的
      */
+    @ApiModelProperty(value = "跳转的链接或者商品/优惠券的ID")
     private String content;
 
     /**
diff --git a/src/main/java/cc/mrbird/febs/vip/entity/MallVipConfig.java b/src/main/java/cc/mrbird/febs/vip/entity/MallVipConfig.java
index 1413cf6..c2d59b3 100644
--- a/src/main/java/cc/mrbird/febs/vip/entity/MallVipConfig.java
+++ b/src/main/java/cc/mrbird/febs/vip/entity/MallVipConfig.java
@@ -3,27 +3,39 @@
 import cc.mrbird.febs.common.entity.BaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.util.List;
 
 @Data
+@ApiModel(value = "MallVipConfig")
 @TableName("mall_vip_config")
 public class MallVipConfig extends BaseEntity {
+
 
     /**
      * 会员名称
      */
+    @ApiModelProperty(value = "名称")
     private String name;
 
     /**
      * 主图
      */
+    @ApiModelProperty(value = "主图")
     private String thumb;
+
+    /**
+     * 会员编码
+     */
+    private String code;
 
     /**
      * 等级
      */
+    @ApiModelProperty(value = "会员等级")
     private Integer level;
 
     /**
diff --git a/src/main/java/cc/mrbird/febs/vip/mapper/MallVipConfigMapper.java b/src/main/java/cc/mrbird/febs/vip/mapper/MallVipConfigMapper.java
index 31553fb..0a856a4 100644
--- a/src/main/java/cc/mrbird/febs/vip/mapper/MallVipConfigMapper.java
+++ b/src/main/java/cc/mrbird/febs/vip/mapper/MallVipConfigMapper.java
@@ -3,6 +3,7 @@
 import cc.mrbird.febs.vip.entity.MallVipConfig;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -11,4 +12,6 @@
     IPage<MallVipConfig> findVipConfigListInPage(IPage<MallVipConfig> page);
 
     List<MallVipConfig> selectVipConfigList();
+
+    MallVipConfig selectVipConfigByCode(@Param("code") String code);
 }
diff --git a/src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigService.java b/src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigService.java
index 2591223..8137f8b 100644
--- a/src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigService.java
+++ b/src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigService.java
@@ -1,6 +1,8 @@
 package cc.mrbird.febs.vip.service;
 
 import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.vip.entity.MallVipBenefits;
+import cc.mrbird.febs.vip.entity.MallVipBenefitsDetails;
 import cc.mrbird.febs.vip.entity.MallVipConfig;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -18,4 +20,6 @@
     void editVipConfig(MallVipConfig config);
 
     void delVipConfig(Long id);
+
+    MallVipBenefits hasVipBenefits(Long memberId);
 }
diff --git a/src/main/java/cc/mrbird/febs/vip/service/IVipCommonService.java b/src/main/java/cc/mrbird/febs/vip/service/IVipCommonService.java
new file mode 100644
index 0000000..9cf7861
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/service/IVipCommonService.java
@@ -0,0 +1,6 @@
+package cc.mrbird.febs.vip.service;
+
+public interface IVipCommonService {
+
+    void getScore(Long orderId);
+}
diff --git a/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java b/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java
index 42db833..957b247 100644
--- a/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java
@@ -1,6 +1,10 @@
 package cc.mrbird.febs.vip.service.impl;
 
 import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.mall.entity.MallMember;
+import cc.mrbird.febs.mall.mapper.MallMemberMapper;
+import cc.mrbird.febs.vip.entity.MallVipBenefits;
 import cc.mrbird.febs.vip.entity.MallVipConfig;
 import cc.mrbird.febs.vip.entity.MallVipConfigBenefits;
 import cc.mrbird.febs.vip.mapper.MallVipConfigBenefitsMapper;
@@ -8,6 +12,8 @@
 import cc.mrbird.febs.vip.service.IMallVipConfigBenefitsService;
 import cc.mrbird.febs.vip.service.IMallVipConfigService;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -18,8 +24,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 @Slf4j
 @Service
@@ -27,6 +32,7 @@
 public class MallVipConfigServiceImpl extends ServiceImpl<MallVipConfigMapper, MallVipConfig> implements IMallVipConfigService {
 
     private final IMallVipConfigBenefitsService mallVipConfigBenefitsService;
+    private final MallMemberMapper mallMemberMapper;
 
     @Override
     public IPage<MallVipConfig> vipConfigList(QueryRequest request) {
@@ -85,4 +91,36 @@
         delQuery.eq(MallVipConfigBenefits::getConfigId, id);
         this.mallVipConfigBenefitsService.remove(delQuery);
     }
+
+    @Override
+    public MallVipBenefits hasVipBenefits(Long memberId) {
+        MallMember member = mallMemberMapper.selectById(memberId);
+        if (member == null) {
+            throw new FebsException("会员不存在");
+        }
+
+        MallVipConfig vipConfig = this.baseMapper.selectVipConfigByCode(member.getLevel());
+        if (vipConfig == null) {
+            throw new FebsException("会员配置不存在");
+        }
+
+        String today = DateUtil.format(new Date(), DatePattern.NORM_DATE_PATTERN);
+        boolean isBirthday = member.getBirthday().compareTo(DateUtil.parseDate(today)) == 0;
+        List<MallVipBenefits> benefits = vipConfig.getBenefits();
+        Optional<MallVipBenefits> max = benefits.stream().filter(item -> {
+            if (item.getScoreMultiple() == null) {
+                return false;
+            }
+
+            // 生日权益
+            if (item.getGainType() == 2 && isBirthday) {
+                return true;
+            }
+
+            // 会员日
+            return item.getGainType() == 1;
+        }).max(Comparator.comparing(MallVipBenefits::getScoreMultiple));
+
+        return max.orElseGet(max::get);
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java b/src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java
new file mode 100644
index 0000000..2f1d1b1
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java
@@ -0,0 +1,57 @@
+package cc.mrbird.febs.vip.service.impl;
+
+import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
+import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
+import cc.mrbird.febs.common.enumerates.ScoreFlowTypeEnum;
+import cc.mrbird.febs.mall.entity.MallOrderInfo;
+import cc.mrbird.febs.mall.entity.MallOrderItem;
+import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
+import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
+import cc.mrbird.febs.mall.service.IApiMallOrderInfoService;
+import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
+import cc.mrbird.febs.vip.entity.MallVipBenefits;
+import cc.mrbird.febs.vip.service.IMallVipConfigService;
+import cc.mrbird.febs.vip.service.IVipCommonService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class VipCommonServiceImpl implements IVipCommonService {
+
+    private final MallOrderInfoMapper mallOrderInfoMapper;
+    private final IMallVipConfigService mallVipConfigService;
+    private final IMallMoneyFlowService mallMoneyFlowService;
+    private final IApiMallMemberWalletService mallMemberWalletService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void getScore(Long orderId) {
+        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectOrderDetailsById(orderId);
+        if (mallOrderInfo == null) {
+            return;
+        }
+
+        Long memberId = mallOrderInfo.getMemberId();
+        MallVipBenefits mallVipBenefits = mallVipConfigService.hasVipBenefits(memberId);
+
+        BigDecimal multiple = BigDecimal.ONE;
+        String name = "";
+        if (mallVipBenefits != null) {
+            multiple = mallVipBenefits.getScoreMultiple();
+            name = mallVipBenefits.getName();
+        }
+
+        double sum = mallOrderInfo.getItems().stream().map(MallOrderItem::getAmount).mapToDouble(BigDecimal::doubleValue).sum();
+
+        int score = multiple.multiply(BigDecimal.valueOf(sum)).intValue();
+
+        mallMoneyFlowService.addMoneyFlow(memberId, new BigDecimal(score), ScoreFlowTypeEnum.BUY.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue(), name, 2);
+        mallMemberWalletService.add(new BigDecimal(score), memberId, "prize_score");
+    }
+}
diff --git a/src/main/resources/mapper/modules/MallVipConfigMapper.xml b/src/main/resources/mapper/modules/MallVipConfigMapper.xml
index a68988d..d710e4a 100644
--- a/src/main/resources/mapper/modules/MallVipConfigMapper.xml
+++ b/src/main/resources/mapper/modules/MallVipConfigMapper.xml
@@ -35,4 +35,16 @@
             inner join mall_vip_config_benefits configBenefits on config.id=configBenefits.config_id
             inner join mall_vip_benefits benefits on configBenefits.benefits_id=benefits.id
     </select>
+
+    <select id="selectVipConfigByCode" resultMap="vipConfigMap">
+        select
+            config.*
+             ,benefits.id c_id
+             ,benefits.name c_name
+             ,benefits.icon c_icon
+        from mall_vip_config config
+                 inner join mall_vip_config_benefits configBenefits on config.id=configBenefits.config_id
+                 inner join mall_vip_benefits benefits on configBenefits.benefits_id=benefits.id
+        where config.code=#{code}
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.1