xiaoyong931011
2023-07-19 a1ae9d712f1d18799c3e4e34995fd037f6c5a22a
商城商品修改
16 files modified
4 files added
420 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/configure/CorsConfig.java 27 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/GoodsTypeEnum.java 47 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiApplyController.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsCategoryController.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallNewsController.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java 5 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallRollPerkMapper.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java 279 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/util/WechatMenuUtil.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/configure/CorsConfig.java
New file
@@ -0,0 +1,27 @@
package cc.mrbird.febs.common.configure;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class CorsConfig {
    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.setAllowCredentials(true);
        return corsConfiguration;
    }
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }
}
src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
@@ -5,6 +5,8 @@
@Getter
public enum DataDictionaryEnum {
    // 积分兑换比例  1,则1积分等于一元 2则2积分等于一元
    SCORE_CHANGE("SCORE_CHANGE", "SCORE_CHANGE"),
    //微信订阅模板ID,
    // 微信订单通知
//    WX_TEMPLATE_ID_ONE("WX_TEMPLATE", "WX_TEMPLATE_ID_ONE"),
src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java
@@ -19,7 +19,7 @@
     */
    SCORE(2),
    /**
     * 竞猜积分
     * 兑换卷
     */
    PRIZE_SCORE(3),
    /**
src/main/java/cc/mrbird/febs/common/enumerates/GoodsTypeEnum.java
New file
@@ -0,0 +1,47 @@
package cc.mrbird.febs.common.enumerates;
import lombok.Getter;
/**
 *
 <option value="1">积分兑换商品</option>
 <option value="2">购买积分商品</option>
 <option value="3">普通商品商品</option>
 <option value="4">课程卷商品</option>
 <option value="5">民宿卷商品</option>
 */
@Getter
public enum GoodsTypeEnum {
    /**
     * 积分兑换商品
     *  使用积分去购买商品,不够则使用余额来折扣剩余积分
     */
    SCORE_CHANGE(1),
    /**
     * 购买积分商品
     *  使用余额或者微信支付购买,然后赠送积分
     */
    BUY_SCORE(2),
    /**
     * 普通商品商品
     *  使用余额或者微信支付购买
     */
    NORMAL_GOODS(3),
    /**
     * 课程卷商品
     *  使用余额或者微信支付购买或者使用折扣卷
     */
    CLASS_ROLL(4),
    /**
     * 民宿卷商品
     *  使用余额或者微信支付购买或者使用折扣卷
     */
    HOUSE_ROLL(5);
    private final int value;
    GoodsTypeEnum(int value) {
        this.value = value;
    }
}
src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
@@ -113,7 +113,17 @@
    /**
     * 微信退款
     */
    WECHAT_REFUND(22);
    WECHAT_REFUND(22),
    /**
     * 积分支付
     */
    SCORE_PAY(23),
    /**
     * 兑换券支付
     */
    ROLL_PAY(24);
    private final int value;
src/main/java/cc/mrbird/febs/mall/controller/ApiApplyController.java
@@ -19,6 +19,7 @@
 **/
@Slf4j
@RestController
@CrossOrigin("*")
@RequestMapping(value = "/api/apply")
@RequiredArgsConstructor
@Api(value = "ApiApplyController", tags = "申请通道接口类")
src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java
@@ -16,6 +16,7 @@
@Slf4j
@RestController
@CrossOrigin("*")
@RequestMapping(value = "/api/act")
@RequiredArgsConstructor
@Api(value = "ApiApplyController", tags = "活动接口类")
src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java
@@ -26,6 +26,7 @@
@Slf4j
@Validated
@RestController
@CrossOrigin("*")
@RequiredArgsConstructor
@RequestMapping(value = "/api/address")
@Api(value = "ApiMallAddressInfoController", tags = "用户地址管理接口类")
src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsCategoryController.java
@@ -9,10 +9,7 @@
import io.swagger.annotations.ApiResponses;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -22,6 +19,7 @@
 **/
@Slf4j
@RestController
@CrossOrigin("*")
@RequiredArgsConstructor
@RequestMapping(value = "/api/category")
@Api(value = "ApiMallGoodsCategoryController", tags = "商品分类参数接收类")
src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java
@@ -20,6 +20,7 @@
 **/
@Slf4j
@Validated
@CrossOrigin("*")
@RestController
@RequiredArgsConstructor
@RequestMapping(value = "/api/goods")
src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
@@ -23,6 +23,7 @@
 **/
@Slf4j
@RestController
@CrossOrigin("*")
@RequestMapping(value = "/api/member")
@RequiredArgsConstructor
@Api(value = "ApiMallMemberController", tags = "商城用户接口类")
src/main/java/cc/mrbird/febs/mall/controller/ApiMallNewsController.java
@@ -21,6 +21,7 @@
 **/
@Slf4j
@RestController
@CrossOrigin("*")
@RequestMapping(value = "/api/news")
@RequiredArgsConstructor
@Api(value = "ApiMallNewsController", tags = "新闻接口类")
src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java
@@ -24,6 +24,7 @@
 **/
@Slf4j
@Validated
@CrossOrigin("*")
@RestController
@RequiredArgsConstructor
@RequestMapping(value = "/api/order")
src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java
@@ -25,6 +25,7 @@
 **/
@Slf4j
@Validated
@CrossOrigin("*")
@RestController
@RequiredArgsConstructor
@RequestMapping(value = "/api/cart")
src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java
@@ -19,6 +19,7 @@
@Slf4j
@Validated
@RestController
@CrossOrigin("*")
@RequiredArgsConstructor
@RequestMapping(value = "/api/leader")
@Api(value = "ApiMallTeamLeaderController", tags = "团长接口类")
src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java
@@ -20,7 +20,7 @@
    private Long id;
    @NotBlank(message = "参数不能为空")
    @ApiModelProperty(value = "支付类型", example = "1微信2支付宝3余额4积分")
    @ApiModelProperty(value = "支付类型", example = "1微信2余额3积分4卷")
    private String type;
    @ApiModelProperty(value = "支付密码", example = "如果选择余额支付需要输入")
@@ -31,4 +31,7 @@
    @ApiModelProperty(value = "支付凭证")
    private String payImage;
    @ApiModelProperty(value = "兑换卷ID")
    private Long rollId;
}
src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java
New file
@@ -0,0 +1,20 @@
package cc.mrbird.febs.mall.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("mall_roll_perk")
public class MallRollPerk {
    private static final long serialVersionUID = 1L;
    private Long id;
    private Long memberId;
    private Long rollId;
    private Integer state;
}
src/main/java/cc/mrbird/febs/mall/mapper/MallRollPerkMapper.java
New file
@@ -0,0 +1,7 @@
package cc.mrbird.febs.mall.mapper;
import cc.mrbird.febs.mall.entity.MallRollPerk;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface MallRollPerkMapper extends BaseMapper<MallRollPerk> {
}
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -82,12 +82,15 @@
    private final IApiMallTeamLeaderService iApiMallTeamLeaderService;
    private final IMallElectronicFenceService iMallElectronicFenceService;
    private final MallElectronicFenceMapper mallElectronicFenceMapper;
    private final MallMemberWalletMapper mallMemberWalletMapper;
    private final MallRollPerkMapper mallRollPerkMapper;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Long createOrder(AddOrderDto addOrderDto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        MallMember member = mallMemberMapper.selectById(memberId);
        MallMemberWallet memberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
                //验证用户的等级
//        if(AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())){
@@ -116,120 +119,85 @@
        BigDecimal total = BigDecimal.ZERO;
        for (AddOrderItemDto item : addOrderDto.getItems()) {
                MallOrderItem orderItem = new MallOrderItem();
            MallOrderItem orderItem = new MallOrderItem();
            MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
            if (ObjectUtil.isEmpty(sku)) {
                throw new FebsException("购买商品或sku不存在");
            }
                // 积分商品提交订单
                if (addOrderDto.getOrderType() == 2) {
                    MallGoods mallGoods = mallGoodsMapper.selectById(item.getSkuId());
                    if (mallGoods.getStock() < item.getCnt()) {
                        throw new FebsException(mallGoods.getGoodsName() + "库存不足");
                    }
                    if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
                        throw new FebsException(mallGoods.getGoodsName() + "已下架");
                    }
                    BigDecimal amount = mallGoods.getScore().multiply(BigDecimal.valueOf(item.getCnt()));
                    orderItem.setAmount(amount);
                    orderItem.setCnt(item.getCnt());
                    orderItem.setOrderId(orderInfo.getId());
                    orderItem.setPrice(mallGoods.getScore());
                    orderItem.setGoodsId(mallGoods.getId());
                    orderItem.setGoodsName(mallGoods.getGoodsName());
                    orderItem.setStyleName(mallGoods.getGoodsName());
                    orderItem.setSkuName(mallGoods.getGoodsName());
                    orderItem.setSkuImage(mallGoods.getThumb());
                    orderItem.setState(1);
                    total = total.add(amount);
                } else {
                    MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
                    if (sku == null) {
                        throw new FebsException("购买商品或sku不存在");
                    }
//                    if("样品".equals(sku.getSample())){
//                        List<MallOrderItem> items = mallOrderItemMapper.selectItemBySkuIdUnCancel(sku.getId(), member.getId());
//                        if (CollUtil.isNotEmpty(items)) {
//                            throw new FebsException("样品一个用户只能购买一次");
//                        }
//                        Integer cnt = item.getCnt();
//                        if(1 < cnt){
//                            throw new FebsException("样品只能购买一件");
//                        }
//
//                    }
                    if (sku.getStock() < item.getCnt()) {
                        throw new FebsException(sku.getSkuName() + "库存不足");
                    }
                    MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
                    // 零撸专区购买
                    if (new BigDecimal(mallGoods.getPresentPrice()).compareTo(BigDecimal.ZERO) == 0) {
                        List<MallOrderItem> items = mallOrderItemMapper.selectItemByGoodsIdUnCancel(mallGoods.getId(), member.getId());
                        if (CollUtil.isNotEmpty(items)) {
                            throw new FebsException("无法重复领取同一个商品");
                        }
                    }
                    if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
                        throw new FebsException(mallGoods.getGoodsName() + "已下架");
                    }
                    //商品库存销量计算
                    Integer goodsResult = mallGoodsMapper.upDateStockAndVolumeByGoodsId(mallGoods.getId(), item.getCnt());
                    if(1 != goodsResult){
                        throw new FebsException(mallGoods.getGoodsName() + "库存不足");
                    }
                    BigDecimal amount = BigDecimal.ZERO;
                    BigDecimal itemPrice = BigDecimal.ZERO;
                    if(AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())){
                        //普通用户使用原价购买
                        amount = sku.getOriginalPrice().multiply(BigDecimal.valueOf(item.getCnt()));
                        itemPrice = sku.getOriginalPrice();
                    }else if(AgentLevelEnum.LEVEL_ONE.name().equals(member.getLevel())){
                        //普通用户使用原价购买
                        amount = sku.getLevelOnePrice().multiply(BigDecimal.valueOf(item.getCnt()));
                        itemPrice = sku.getLevelOnePrice();
                    }else if(AgentLevelEnum.LEVEL_TWO.name().equals(member.getLevel())){
                        //普通用户使用原价购买
                        amount = sku.getLevelTwoPrice().multiply(BigDecimal.valueOf(item.getCnt()));
                        itemPrice = sku.getLevelTwoPrice();
                    }else if(AgentLevelEnum.LEVEL_THREE.name().equals(member.getLevel())){
                        //普通用户使用原价购买
                        amount = sku.getLevelThreePrice().multiply(BigDecimal.valueOf(item.getCnt()));
                        itemPrice = sku.getLevelThreePrice();
                    }else{
                        //合伙人使用折扣价
                        amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt()));
                        itemPrice = sku.getPresentPrice();
                    }
//                    BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt()));
                    orderItem.setAmount(amount);
                    orderItem.setCnt(item.getCnt());
                    orderItem.setOrderId(orderInfo.getId());
                    orderItem.setPrice(itemPrice);
                    orderItem.setGoodsId(sku.getGoodsId());
                    orderItem.setGoodsName(sku.getGoodsName());
                    orderItem.setSkuId(sku.getId());
                    orderItem.setState(1);
                    orderItem.setStyleName(sku.getStyleName());
                    orderItem.setSkuName(sku.getSkuName());
                    orderItem.setSkuImage(sku.getSkuImage());
                    orderItem.setIsNormal(mallGoods.getIsNormal());
                    orderItem.setCostPrice(sku.getCostPrice());
                    total = total.add(amount);
                    //规格的库存销量
                    Integer skuResult = mallGoodsSkuMapper.upDateStockAndVolumeBySkuId(sku.getId(),item.getCnt());
                    if(1 != skuResult){
                        throw new FebsException(sku.getSkuName() + "库存不足");
                    }
                    if (addOrderDto.getType() == 1) {
                        mallShoppingCartMapper.delBySkuId(sku.getId(), member.getId());
                    }
            if (sku.getStock() < item.getCnt()) {
                throw new FebsException(sku.getSkuName() + "库存不足");
            }
            MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
            // 零撸专区购买
            if (new BigDecimal(mallGoods.getPresentPrice()).compareTo(BigDecimal.ZERO) == 0) {
                List<MallOrderItem> items = mallOrderItemMapper.selectItemByGoodsIdUnCancel(mallGoods.getId(), member.getId());
                if (CollUtil.isNotEmpty(items)) {
                    throw new FebsException("无法重复领取同一个商品");
                }
                mallOrderItemMapper.insert(orderItem);
            }
            if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
                throw new FebsException(mallGoods.getGoodsName() + "已下架");
            }
            //商品库存销量计算
            Integer goodsResult = mallGoodsMapper.upDateStockAndVolumeByGoodsId(mallGoods.getId(), item.getCnt());
            if(1 != goodsResult){
                throw new FebsException(mallGoods.getGoodsName() + "库存不足");
            }
            BigDecimal amount = BigDecimal.ZERO;
            BigDecimal itemPrice = BigDecimal.ZERO;
            /**
             *
             */
            Integer isNormal = mallGoods.getIsNormal();
            if(GoodsTypeEnum.SCORE_CHANGE.getValue() == isNormal){
                //普通用户使用原价购买
                amount = sku.getOriginalPrice().multiply(BigDecimal.valueOf(item.getCnt()));
                itemPrice = sku.getOriginalPrice();
            }else if(GoodsTypeEnum.BUY_SCORE.getValue() == isNormal){
                //普通用户使用原价购买
                amount = sku.getLevelOnePrice().multiply(BigDecimal.valueOf(item.getCnt()));
                itemPrice = sku.getLevelOnePrice();
            }else if(GoodsTypeEnum.NORMAL_GOODS.getValue() == isNormal){
                //普通用户使用原价购买
                amount = sku.getLevelTwoPrice().multiply(BigDecimal.valueOf(item.getCnt()));
                itemPrice = sku.getLevelTwoPrice();
            }else if(GoodsTypeEnum.CLASS_ROLL.getValue() == isNormal){
                //普通用户使用原价购买
                amount = sku.getLevelThreePrice().multiply(BigDecimal.valueOf(item.getCnt()));
                itemPrice = sku.getLevelThreePrice();
            }else if(GoodsTypeEnum.HOUSE_ROLL.getValue() == isNormal){
                //普通用户使用原价购买
                amount = sku.getLevelThreePrice().multiply(BigDecimal.valueOf(item.getCnt()));
                itemPrice = sku.getLevelThreePrice();
            }else{
                throw new FebsException("当前商品无法购买!");
            }
            orderItem.setAmount(amount);
            orderItem.setCnt(item.getCnt());
            orderItem.setOrderId(orderInfo.getId());
            orderItem.setPrice(itemPrice);
            orderItem.setGoodsId(sku.getGoodsId());
            orderItem.setGoodsName(sku.getGoodsName());
            orderItem.setSkuId(sku.getId());
            orderItem.setState(1);
            orderItem.setStyleName(sku.getStyleName());
            orderItem.setSkuName(sku.getSkuName());
            orderItem.setSkuImage(sku.getSkuImage());
            orderItem.setIsNormal(mallGoods.getIsNormal());
            orderItem.setCostPrice(sku.getCostPrice());
            total = total.add(amount);
            //规格的库存销量
            Integer skuResult = mallGoodsSkuMapper.upDateStockAndVolumeBySkuId(sku.getId(),item.getCnt());
            if(1 != skuResult){
                throw new FebsException(sku.getSkuName() + "库存不足");
            }
            if (addOrderDto.getType() == 1) {
                mallShoppingCartMapper.delBySkuId(sku.getId(), member.getId());
            }
            mallOrderItemMapper.insert(orderItem);
        }
        //运费
        BigDecimal delivaryAmount = addOrderDto.getDeliveryAmount() == null ? BigDecimal.ZERO : addOrderDto.getDeliveryAmount();
@@ -367,17 +335,6 @@
                orderInfo.setPayMethod("微信支付");
                break;
            case "2":
                if (StrUtil.isNotBlank(orderInfo.getPayOrderNo())) {
                    payResultStr = orderInfo.getPayOrderNo();
                } else {
                    payResultStr = payService.aliPay(orderInfo);
                }
                orderInfo.setPayOrderNo(payResultStr);
                orderInfo.setPayMethod("支付宝支付");
                agentProducer.sendOrderReturn(orderInfo.getId());
                break;
            case "3":
                payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance");
                orderInfo.setPayOrderNo(orderInfo.getOrderNo());
@@ -387,29 +344,91 @@
                orderInfo.setPayResult("1");
                orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2);
                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(),
                        orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2);
                break;
            case "3":
                /**
                 * 获取用户的当前积分
                 */
                MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(member.getId());
                BigDecimal score = mallMemberWallet.getScore();
                BigDecimal amount = orderInfo.getAmount();
                //积分兑换比例
                DataDictionaryCustom scoreChangeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                        DataDictionaryEnum.SCORE_CHANGE.getType(),
                        DataDictionaryEnum.SCORE_CHANGE.getCode()
                );
                BigDecimal scoreChange = StrUtil.isEmpty(scoreChangeDic.getValue()) ? new BigDecimal("1") : new BigDecimal(scoreChangeDic.getValue());
                BigDecimal amountToScore = amount.multiply(scoreChange).setScale(0, BigDecimal.ROUND_DOWN);
                //实际支付积分
                BigDecimal scoreActual = BigDecimal.ZERO;
                if(score.compareTo(amountToScore) >= 0){
                    //拥有的积分大于此次订单的金额,则全额订单折扣
                    int reduce = memberWalletService.reduce(amountToScore, member.getId(), "score");
                    if (reduce == 2) {
                        throw new FebsException("积分余额不足");
                    }
                    orderInfo.setPayMethod("积分支付");
                    scoreActual = amountToScore;
                }else{
                    //拥有的积分大于此次订单的金额,则全额订单折扣
                    int reduce = memberWalletService.reduce(score, member.getId(), "score");
                    if (reduce == 2) {
                        throw new FebsException("积分余额不足");
                    }
                    scoreActual = score;
                }
                BigDecimal scoreToAmount = score.divide(scoreChange, 2, BigDecimal.ROUND_DOWN);
                //实际支付余额
                BigDecimal amountActual = amount.subtract(scoreToAmount).setScale(2, BigDecimal.ROUND_DOWN);
                int balance = memberWalletService.reduce(amountActual, member.getId(), "balance");
                if (balance == 2) {
                    throw new FebsException("余额不足");
                }
                orderInfo.setPayOrderNo(orderInfo.getOrderNo());
                orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
                orderInfo.setPayTime(new Date());
                orderInfo.setPayResult("1");
                orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
                if(amountActual.compareTo(BigDecimal.ZERO) > 0){
                    mallMoneyFlowService.addMoneyFlow(member.getId(), amountActual.negate(), MoneyFlowTypeEnum.PAY.getValue(),
                            orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2);
                }
                if(scoreActual.compareTo(BigDecimal.ZERO) > 0){
                    mallMoneyFlowService.addMoneyFlow(member.getId(), scoreActual.negate(),
                            MoneyFlowTypeEnum.SCORE_PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue(),"积分支付",2);
                }
                break;
            case "4":
                if (orderInfo.getOrderType() != 2) {
                    throw new FebsException("非积分订单,无法使用积分支付");
                MallRollPerk mallRollPerk = mallRollPerkMapper.selectById(payOrderDto.getRollId());
                if(ObjectUtil.isEmpty(mallRollPerk)){
                    throw new FebsException("兑换券不存在");
                }
                payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "prizeScore");
                int stateRoll = ObjectUtil.isEmpty(mallRollPerk.getState()) ? 2 : mallRollPerk.getState();
                if(stateRoll == 2){
                    throw new FebsException("兑换券已使用");
                }
                payResultStr = orderInfo.getOrderNo();
                orderInfo.setPayOrderNo(orderInfo.getOrderNo());
                orderInfo.setPayMethod("积分支付");
                orderInfo.setPayMethod("兑换券支付");
                orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
                orderInfo.setPayTime(new Date());
                orderInfo.setPayResult("1");
                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(),  FlowTypeEnum.PRIZE_SCORE.getValue());
                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.ROLL_PAY.getValue(),
                        orderInfo.getOrderNo(),  FlowTypeEnum.PRIZE_SCORE.getValue());
                break;
            default:
        }
        //订单支付成功产生一个提货码
        String takeCode = ShareCodeUtil.toSerialCode(orderInfo.getId());
        orderInfo.setTakeCode(takeCode);
        this.baseMapper.updateById(orderInfo);
src/main/java/cc/mrbird/febs/pay/util/WechatMenuUtil.java
@@ -23,7 +23,7 @@
        String appId = "wx052716b1a388b13c";
        // 第三方用户唯一凭证密钥
        String appSecret = "e7cf355e7234f035d8fea6a3a19513b9";
        String accessToken = "70_VnGMZaIo0pkY7WJOfGVnRlqUGC8UQPu0eN4L8Hc9PearLQgIAtWOC2UCaErhctjI7ORBk_aeBg3QudsLWi5z5_lIPd_zwMCf7E4g8rHkqvArD-N8jyKOKJfzNGsGWJeAFAKAN";
        String accessToken = "70_LkVymFk8YsaB6EfPqJARigNJoM4fL5gqHE90HHG8o9zureJ34jFYOcal97lTpCD1sNhxHRbZzIs6CylMHyMou3GWj51HNg37lKUlTzrCkpeEGERAnT2gQCCjyOgTKAfAIAGXN";
        // 调用接口创建菜单
        String result = createMenu(getMenu(), accessToken);
@@ -82,7 +82,7 @@
        btn11.setName("商城");
        btn11.setType("view");
        btn11.setKey("11");
        btn11.setUrl("https://www.baidu.com/");
        btn11.setUrl("http://ywgouth.meiao.biz/");
        CommonButton btn24 = new CommonButton();
        btn24.setName("公司简介");