fix
Hentua
2024-01-24 2bcf4cc63c2838213cf580af3b53ca757fe8a374
fix
3 files added
16 files modified
242 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/enumerates/ScoreFlowTypeEnum.java 34 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/MoneyFlowVo.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/controller/XcxPayController.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java 4 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/vip/controller/ApiMallVipConfigController.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefits.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/vip/entity/MallVipBenefitsDetails.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/vip/entity/MallVipConfig.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/vip/mapper/MallVipConfigMapper.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/vip/service/IMallVipConfigService.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/vip/service/IVipCommonService.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java 42 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java 57 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallVipConfigMapper.xml 12 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/ScoreFlowTypeEnum.java
New file
@@ -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 "";
    }
}
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);
    }
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) {
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;
}
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(),
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";
}
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);
        }
    }
}
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;
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);
    }
}
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);
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;
    /**
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;
    /**
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;
    /**
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);
}
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);
}
src/main/java/cc/mrbird/febs/vip/service/IVipCommonService.java
New file
@@ -0,0 +1,6 @@
package cc.mrbird.febs.vip.service;
public interface IVipCommonService {
    void getScore(Long orderId);
}
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);
    }
}
src/main/java/cc/mrbird/febs/vip/service/impl/VipCommonServiceImpl.java
New file
@@ -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");
    }
}
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>