KKSU
2024-01-23 34c755eb76b677201cadb2acb8ed5fff1f96dc27
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -17,9 +17,11 @@
import cc.mrbird.febs.mall.vo.*;
import cc.mrbird.febs.pay.model.AgreementPayDto;
import cc.mrbird.febs.pay.model.AgreementSignDto;
import cc.mrbird.febs.pay.model.LaKaLaCreateOrderReqDate;
import cc.mrbird.febs.pay.model.UnipayDto;
import cc.mrbird.febs.pay.service.IAliPayService;
import cc.mrbird.febs.pay.service.IPayService;
import cc.mrbird.febs.pay.service.LaKaLaService;
import cc.mrbird.febs.pay.service.UnipayService;
import cc.mrbird.febs.rabbit.producter.AgentProducer;
import cn.hutool.core.collection.CollUtil;
@@ -72,6 +74,7 @@
    private final IMallAchieveService mallAchieveService;
    private final UnipayService unipayService;
    private final IPayService wechatPayService;
    private final LaKaLaService laKaLaService;
    private final MallMemberBankSignMapper mallMemberBankSignMapper;
    private final MallMemberBankMapper mallMemberBankMapper;
@@ -80,8 +83,11 @@
    private final MallAchieveRecordMapper mallAchieveRecordMapper;
    private final MallMemberWalletMapper mallMemberWalletMapper;
    private final MallMqRecordMapper mallMqRecordMapper;
    private final MallProductSellMapper mallProductSellMapper;
    private final MallProductSellRecordMapper mallProductSellRecordMapper;
    private final ICommonService commonService;
    private final MallMemberAmountMapper mallMemberAmountMapper;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -293,61 +299,76 @@
                orderInfo.setPayResult("2");
                break;
            case "2":
//                if (StrUtil.isNotBlank(orderInfo.getPayOrderNo())) {
//                    payResultStr = orderInfo.getPayOrderNo();
//                } else {
//                    payResultStr = payService.aliPay(orderInfo);
                LaKaLaCreateOrderReqDate laKaLaCreateOrderReqDate = new LaKaLaCreateOrderReqDate();
                //订单编号
                laKaLaCreateOrderReqDate.setOut_order_no(orderInfo.getOrderNo());
                //订单金额,分计
                laKaLaCreateOrderReqDate.setTotal_amount(orderInfo.getAmount().multiply(new BigDecimal(100)).longValue());
                List<MallOrderItem> itemsLKL = orderInfo.getItems();
                //商品名称
                if(CollUtil.isEmpty(itemsLKL)){
                    laKaLaCreateOrderReqDate.setOrder_info("商品");
                }else{
                    laKaLaCreateOrderReqDate.setOrder_info(itemsLKL.get(0).getGoodsName());
                }
                payResultStr = laKaLaService.verifyCreateOrder(laKaLaCreateOrderReqDate);
                JSONObject parseObj = JSONUtil.parseObj(payResultStr);
                String code = parseObj.get("code").toString();
                if (!"true".equals(code)) {
                    throw new FebsException("跳转收银台失败");
                }
                orderInfo.setPayOrderNo(parseObj.get("payOrderNo").toString());
                orderInfo.setPayMethod("拉卡拉支付");
                orderInfo.setPayResult("2");
//                UnipayDto unipayDto = new UnipayDto();
//                unipayDto.setAmount(orderInfo.getAmount());
//                unipayDto.setFrpCode("ALIPAY_H5");
//                unipayDto.setTradeMerchantNo("777184100385821");
//                unipayDto.setOrderNo(orderInfo.getOrderNo());
//                List<MallOrderItem> items = orderInfo.getItems();
//                if(CollUtil.isEmpty(items)){
//                    unipayDto.setProductName("商品");
//                }else{
//                    unipayDto.setProductName(items.get(0).getGoodsName());
//                }
                UnipayDto unipayDto = new UnipayDto();
//                unipayDto.setAmount(new BigDecimal("0.01"));
                unipayDto.setAmount(orderInfo.getAmount());
                unipayDto.setFrpCode("ALIPAY_H5");
                unipayDto.setTradeMerchantNo("777184100385821");
                unipayDto.setOrderNo(orderInfo.getOrderNo());
                List<MallOrderItem> items = orderInfo.getItems();
                if(CollUtil.isEmpty(items)){
                    unipayDto.setProductName("商品");
                }else{
                    unipayDto.setProductName(items.get(0).getGoodsName());
                }
                String unipayStr = unipayService.unipay(unipayDto);
                if("fail" == unipayStr){
                    throw new FebsException("支付失败");
                }else{
//                    JSONUtil.parseObj(unipayStr);
                    JSONObject jsonObject = JSONUtil.parseObj(unipayStr);
                    payResultStr = (String) jsonObject.get("r7_TrxNo");
                    rcResult = (String) jsonObject.get("rc_Result");
                }
                orderInfo.setPayOrderNo(payResultStr);
                orderInfo.setPayMethod("支付宝支付");
//                agentProducer.sendOrderReturn(orderInfo.getId());
//                String unipayStr = unipayService.unipay(unipayDto);
//                if("fail" == unipayStr){
//                    throw new FebsException("支付失败");
//                }else{
//                    JSONObject jsonObject = JSONUtil.parseObj(unipayStr);
//                    payResultStr = (String) jsonObject.get("r7_TrxNo");
//                    rcResult = (String) jsonObject.get("rc_Result");
//                }
//                orderInfo.setPayOrderNo(payResultStr);
//                orderInfo.setPayMethod("支付宝支付");
                break;
            case "3":
                payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance");
                payResultStr = balancePayNew(orderInfo, payOrderDto.getTradePwd());
                orderInfo.setPayOrderNo(orderInfo.getOrderNo());
                orderInfo.setPayMethod("余额支付");
                orderInfo.setPayMethod("积分支付");
                orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
                orderInfo.setPayTime(new Date());
                orderInfo.setPayResult("1");
                this.baseMapper.updateById(orderInfo);
                commonService.changeWallet(orderInfo.getId(), FlowTypeEnum.BALANCE.getValue());
//                commonService.changeWallet(orderInfo.getId(), FlowTypeEnum.BALANCE.getValue());
                /**
                 * 插入一条待处理记录
                 * mq处理之后,更新状态
                 */
                MallMqRecord mallMqRecord = new MallMqRecord();
                mallMqRecord.setOrderId(orderInfo.getId());
                mallMqRecord.setState(2);
                mallMqRecord.setRetryTimes(2);
                mallMqRecord.setCreateTime(orderInfo.getPayTime());
                mallMqRecordMapper.insert(mallMqRecord);
                //发送补贴消息
                agentProducer.sendPerkMoneyMsg(orderInfo.getId());
                //发送代理自动升级消息
                agentProducer.sendAutoLevelUpMsg(member.getId());
//                MallMqRecord mallMqRecord = new MallMqRecord();
//                mallMqRecord.setOrderId(orderInfo.getId());
//                mallMqRecord.setState(2);
//                mallMqRecord.setRetryTimes(2);
//                mallMqRecord.setCreateTime(orderInfo.getPayTime());
//                mallMqRecordMapper.insert(mallMqRecord);
//                //发送补贴消息
//                agentProducer.sendPerkMoneyMsg(orderInfo.getId());
//                //发送代理自动升级消息
//                agentProducer.sendAutoLevelUpMsg(member.getId());
                break;
            case "4":
                if (orderInfo.getOrderType() != 2) {
@@ -450,6 +471,29 @@
        if (reduce == 2) {
            throw new FebsException("余额不足");
        }
        return orderInfo.getOrderNo();
    }
    private String balancePayNew(MallOrderInfo orderInfo, String tradePwd) {
        if (StrUtil.isBlank(tradePwd)) {
            throw new FebsException("支付密码错误");
        }
        MallMember mallMember = memberMapper.selectById(orderInfo.getMemberId());
        if (StrUtil.isBlank(mallMember.getTradePassword())) {
            throw new FebsException("未设置支付密码");
        }
        if (!SecureUtil.md5(tradePwd).equals(mallMember.getTradePassword())) {
            throw new FebsException("支付密码错误");
        }
        MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(mallMember.getId());
        BigDecimal subtract = mallMemberAmount.getGsd().subtract(orderInfo.getAmount());
        if(BigDecimal.ZERO.compareTo(subtract) > 0){
            throw new FebsException("积分不足");
        }
        mallMemberAmount.setGsd(subtract);
        mallMemberAmountMapper.updateGsdById(mallMemberAmount);
        return orderInfo.getOrderNo();
    }
@@ -732,20 +776,6 @@
        if(prizeScore.compareTo(score) < 0){
            throw new FebsException("积分不足");
        }
        if(hasTc){
            //系统设置的个人贡献点最大值
            DataDictionaryCustom starGetDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                    DataDictionaryEnum.STAR_GET.getType(),
                    DataDictionaryEnum.STAR_GET.getCode());
            if(ObjectUtil.isNotEmpty(starGetDic)){
                String starGetStr = StrUtil.isEmpty(starGetDic.getValue()) ? "0" : starGetDic.getValue();
                BigDecimal starGet = new BigDecimal(starGetStr);
                BigDecimal star = new BigDecimal(mallMemberWallet.getStar());
                if(starGet.compareTo(BigDecimal.ZERO) != 0 && starGet.compareTo(star) <= 0){
                    throw new FebsException("无法购买套餐");
                }
            }
        }
        /**
         * 使用积分折扣现金
         */
@@ -764,6 +794,23 @@
        if(scorePercentMaxAmount.compareTo(score) < 0){
            throw new FebsException("最多可使用"+scorePercentMaxAmount+"积分");
        }
        if(hasTc){
            //系统设置的个人贡献点最大值
            DataDictionaryCustom starGetDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                    DataDictionaryEnum.STAR_GET.getType(),
                    DataDictionaryEnum.STAR_GET.getCode());
            if(ObjectUtil.isNotEmpty(starGetDic)){
                String starGetStr = StrUtil.isEmpty(starGetDic.getValue()) ? "0" : starGetDic.getValue();
                BigDecimal starGet = new BigDecimal(starGetStr);
                BigDecimal star = new BigDecimal(mallMemberWallet.getStar());
                if(starGet.compareTo(BigDecimal.ZERO) != 0 && starGet.compareTo(star) <= 0){
                    return new FebsResponse().success().message("购买套餐不会获得贡献点");
//                    throw new FebsException("无法购买套餐");
                }
            }
        }
        return new FebsResponse().success();
    }
@@ -783,4 +830,29 @@
        return apiScoreSetVo;
    }
    @Override
    public void fcmPayBuyTimeTTLMsg(Long id) {
        /**
         * 卖方
         * 1:冻结账户
         */
        MallProductSellRecord mallProductSellRecord = mallProductSellRecordMapper.selectById(id);
        if(ObjectUtil.isEmpty(mallProductSellRecord)){
            return;
        }
        if(ProductEnum.PRODUCT_MATE_STATE_PAY.getValue() != mallProductSellRecord.getState()){
            return;
        }
        MallProductSell mallProductSell = mallProductSellMapper.selectById(mallProductSellRecord.getSellId());
        if(ObjectUtil.isEmpty(mallProductSell)){
            return;
        }
        MallMember mallMember = memberMapper.selectById(mallProductSell.getMemberId());
        if(ObjectUtil.isEmpty(mallMember)){
            return;
        }
        mallMember.setIsFrozen(ProductEnum.MEMBER_FROZEN.getValue());
        memberMapper.updateById(mallMember);
    }
}