KKSU
2023-12-27 c19dc78c41273727339aeea025b3c75c09454c5a
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAppServiceImpl.java
@@ -22,6 +22,7 @@
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -82,7 +83,7 @@
    @Override
    public FebsResponse appMemberInfo(ApiMallAppMemberInfoDto apiMallAppMemberInfoDto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
//        Long memberId = LoginUserUtil.getLoginUser().getId();
        List<ApiMallAppMemberInfoVo> mallMembers = this.baseMapper.selectMemberInfoLikePhone(apiMallAppMemberInfoDto.getPhone());
        return new FebsResponse().success().data(mallMembers);
    }
@@ -123,6 +124,7 @@
        orderInfo.setIsApp(AppContants.IS_APP_ORDER);
        orderInfo.setOrderTime(new Date());
        orderInfo.setMemberId(addOrderDto.getMemberId());
        orderInfo.setPayResult(2);
        //会员结算
        orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue());
        mallOrderInfoMapper.insert(orderInfo);
@@ -167,32 +169,31 @@
                    totalCarriage = total;
                }
                //减少用户积分和余额
                BigDecimal avaAmount = totalCarriage;//剩余需要折扣的金额
                if(avaAmount.compareTo(memberAmount) >= 0){
                    //清零用户的积分和余额
                    mallMemberWallet.setBalance(BigDecimal.ZERO);
                    mallMemberWallet.setScore(BigDecimal.ZERO);
                    mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet);
                }else{
                    /**
                     * 先扣积分,再扣余额
                     */
                    if(avaAmount.compareTo(score) >= 0){
                        mallMemberWallet.setScore(BigDecimal.ZERO);
                        avaAmount = avaAmount.subtract(score);
                    }else{
                        mallMemberWallet.setScore(score.subtract(avaAmount));
                        avaAmount = BigDecimal.ZERO;
                    }
                    //积分不够
                    if(avaAmount.compareTo(BigDecimal.ZERO) > 0){
                        mallMemberWallet.setBalance(balance.subtract(avaAmount));
                    }else{
                        mallMemberWallet.setBalance(balance);
                    }
                    mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet);
                }
//                BigDecimal avaAmount = totalCarriage;//剩余需要折扣的金额
//                if(avaAmount.compareTo(memberAmount) >= 0){
//                    //清零用户的积分和余额
//                    mallMemberWallet.setBalance(BigDecimal.ZERO);
//                    mallMemberWallet.setScore(BigDecimal.ZERO);
//                    mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet);
//                }else{
//                    /**
//                     * 先扣积分,再扣余额
//                     */
//                    if(avaAmount.compareTo(score) >= 0){
//                        mallMemberWallet.setScore(BigDecimal.ZERO);
//                        avaAmount = avaAmount.subtract(score);
//                    }else{
//                        mallMemberWallet.setScore(score.subtract(avaAmount));
//                        avaAmount = BigDecimal.ZERO;
//                    }
//                    //积分不够
//                    if(avaAmount.compareTo(BigDecimal.ZERO) > 0){
//                        mallMemberWallet.setBalance(balance.subtract(avaAmount));
//                    }else{
//                        mallMemberWallet.setBalance(balance);
//                    }
//                    mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet);
//                }
            }
            orderInfo.setCarriage(totalCarriage);
        }
@@ -212,6 +213,7 @@
        orderInfo.setIsApp(AppContants.IS_APP_ORDER);
        orderInfo.setOrderTime(new Date());
        orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue());
        orderInfo.setPayResult(2);
        if (CollUtil.isEmpty(addOrderDto.getItems())) {
            throw new FebsException("商品明细不能为空。");
        }
@@ -238,7 +240,13 @@
        }
        orderInfo.setAmount(total);
        mallOrderInfoMapper.updateById(orderInfo);
        return new FebsResponse().success().message("操作成功");
        Integer cnt = 0;
        List<MallOrderInfo> mallOrderInfos = mallOrderInfoMapper.selectOrderInfoByStatusIsApp(OrderStatusEnum.WAIT_PAY.getValue());
        if(ObjectUtil.isNotEmpty(mallOrderInfos)){
            cnt = mallOrderInfos.size();
        }
        return new FebsResponse().success().data(cnt).message("操作成功");
    }
    @Override
@@ -256,6 +264,7 @@
        orderInfo.setIsApp(AppContants.IS_APP_ORDER);
        orderInfo.setOrderTime(new Date());
        orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue());
        orderInfo.setPayResult(2);
        if (CollUtil.isEmpty(addOrderDto.getItems())) {
            throw new FebsException("商品明细不能为空。");
        }
@@ -305,10 +314,15 @@
    @Override
    public FebsResponse getOrder(ApiGetOrderDto apiGetOrderDto) {
        ApiGetOrderListVo apiGetOrderListVo = mallOrderInfoMapper.getAppOrderByOrderId(apiGetOrderDto.getOrderId());
        Long orderId = apiGetOrderDto.getOrderId();
        ApiGetOrderListVo apiGetOrderListVo = mallOrderInfoMapper.getAppOrderByOrderId(orderId);
        if(ObjectUtil.isNotEmpty(apiGetOrderListVo)){
            apiGetOrderListVo.setItems(mallOrderItemMapper.getAppOrderItemByOrderId(apiGetOrderListVo.getId()));
        }
        mallOrderInfoMapper.deleteById(orderId);
        QueryWrapper<MallOrderItem> mallOrderItemQuery = new QueryWrapper<>();
        mallOrderItemQuery.eq("order_id",orderId);
        mallOrderItemMapper.delete(mallOrderItemQuery);
        return new FebsResponse().success().data(apiGetOrderListVo);
    }
@@ -322,9 +336,49 @@
    }
    @Override
    @Transactional
    public FebsResponse wxCodePay(ApiWxCodePayDto wxCodePayDto) {
        Long orderId = wxCodePayDto.getOrderId();
        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId);
        if(OrderStatusEnum.FINISH.getValue() == (mallOrderInfo.getStatus())){
            throw new FebsException("已支付");
        }
        BigDecimal amount = mallOrderInfo.getAmount();
        BigDecimal carriage = mallOrderInfo.getCarriage();
        //减少用户积分和余额
        if(ObjectUtil.isNotEmpty(mallOrderInfo.getMemberId())){
            BigDecimal avaAmount = carriage;//剩余需要折扣的金额
            if(avaAmount.compareTo(BigDecimal.ZERO) > 0){
                MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallOrderInfo.getMemberId());
                BigDecimal score = mallMemberWallet.getScore();
                BigDecimal balance = mallMemberWallet.getBalance();
                BigDecimal memberAmount = score.add(balance);
                if(avaAmount.compareTo(memberAmount) >= 0){
                    //清零用户的积分和余额
                    mallMemberWallet.setBalance(BigDecimal.ZERO);
                    mallMemberWallet.setScore(BigDecimal.ZERO);
                    mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet);
                }else{
                    /**
                     * 先扣积分,再扣余额
                     */
                    if(avaAmount.compareTo(score) >= 0){
                        mallMemberWallet.setScore(BigDecimal.ZERO);
                        avaAmount = avaAmount.subtract(score);
                    }else{
                        mallMemberWallet.setScore(score.subtract(avaAmount));
                        avaAmount = BigDecimal.ZERO;
                    }
                    //积分不够
                    if(avaAmount.compareTo(BigDecimal.ZERO) > 0){
                        mallMemberWallet.setBalance(balance.subtract(avaAmount));
                    }else{
                        mallMemberWallet.setBalance(balance);
                    }
                    mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet);
                }
            }
        }
        String wxPayCode = wxCodePayDto.getWxPayCode();
        mallOrderInfo.setTakeCode(wxPayCode);
        List<ApiGetOrderOrderItemVo> appOrderItemByOrderId = mallOrderItemMapper.getAppOrderItemByOrderId(orderId);
@@ -333,13 +387,40 @@
        }else{
            mallOrderInfo.setName(appOrderItemByOrderId.get(0).getGoodsName());
        }
        mallOrderInfo.setPayResult("2");
        mallOrderInfoMapper.updateById(mallOrderInfo);
        // 发起付款码支付请求
        String payResult = xcxCodePayService.pay(mallOrderInfo);
        String payResult = "支付成功";
        if(amount.subtract(carriage).compareTo(BigDecimal.ZERO) > 0){
            /**
             * auth_code 扫码支付付款码 微信付款码规则:18位纯数字,前缀以10、11、12、13、14、15开头
             */
            String regex = "^(10|11|12|13|14|15)\\d{16}$";
            boolean flag = wxPayCode.matches(regex);
            if(!flag){
                throw new FebsException("请打开微信付款码!");
            }
            payResult = xcxCodePayService.pay(mallOrderInfo);
        }
        return new FebsResponse().success().message(payResult);
    }
    @Override
    public FebsResponse cancelOrder(Long id) {
        MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(id);
        if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) {
            throw new FebsException("订单不存在");
        }
        if (OrderStatusEnum.WAIT_PAY.getValue() != orderInfo.getStatus()) {
            throw new FebsException("订单不是待付款, 无法取消");
        }
        orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue());
        orderInfo.setCancelType(MallOrderInfo.CANCEL_BY_SELF);
        mallOrderInfoMapper.updateById(orderInfo);
        return new FebsResponse().success().message("取消成功");
    }
    public String generateAsaToken(String token) {
        RSA rsa = new RSA(null, AppContants.PUBLIC_KEY);
        return rsa.encryptBase64(token + "_" + System.currentTimeMillis(), KeyType.PublicKey);