霸王餐 充值

This commit is contained in:
wangw 2025-03-03 18:00:50 +08:00
parent b9cd922bbb
commit 575bd686e2
8 changed files with 122 additions and 25 deletions

View File

@ -1,4 +1,4 @@
package com.czg.service.order.dto; package com.czg.order.dto;
import lombok.Data; import lombok.Data;

View File

@ -30,6 +30,10 @@ public class CheckOrderPay implements Serializable {
private Long userId; private Long userId;
private Integer vipPrice; private Integer vipPrice;
/**
* 是否整单打包
*/
private Integer allPack;
/** /**
* 用餐人数 * 用餐人数
@ -124,4 +128,8 @@ public class CheckOrderPay implements Serializable {
public boolean isVipPrice() { public boolean isVipPrice() {
return vipPrice != null && vipPrice == 1; return vipPrice != null && vipPrice == 1;
} }
public boolean isAllPack() {
return allPack != null && allPack == 1;
}
} }

View File

@ -43,7 +43,7 @@ public class OrderPayment implements Serializable {
private Long sourceId; private Long sourceId;
/** /**
* 支付方式order,refund, memberIn,memberRefund * 支付方式order,refund, memberIn,memberRefund, free
*/ */
private String payType; private String payType;

View File

@ -1,9 +1,11 @@
package com.czg.order.service; package com.czg.order.service;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.czg.order.dto.BigDecimalDTO;
import com.czg.order.dto.CheckOrderPay; import com.czg.order.dto.CheckOrderPay;
import com.czg.order.dto.OrderInfoAddDTO; import com.czg.order.dto.OrderInfoAddDTO;
import com.czg.order.dto.OrderInfoQueryDTO; import com.czg.order.dto.OrderInfoQueryDTO;
import com.czg.order.entity.OrderDetail;
import com.czg.order.entity.OrderInfo; import com.czg.order.entity.OrderInfo;
import com.czg.order.enums.PayEnums; import com.czg.order.enums.PayEnums;
import com.czg.order.vo.HistoryOrderVo; import com.czg.order.vo.HistoryOrderVo;
@ -15,6 +17,8 @@ import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/** /**
* 订单表 服务层 * 订单表 服务层
@ -42,6 +46,8 @@ public interface OrderInfoService extends IService<OrderInfo> {
OrderInfo createPayOrder(Long shopId, BigDecimal amount, String remark); OrderInfo createPayOrder(Long shopId, BigDecimal amount, String remark);
void processOrderDetails2(List<OrderDetail> orderDetails, Map<Long, Integer> prodCouponMap,
BigDecimalDTO prodCouponAmount, BigDecimalDTO totalAmount, BigDecimalDTO packAmount,
boolean isAllPack, boolean isVipPrice);
} }

View File

@ -10,6 +10,7 @@ import lombok.Getter;
public enum ShopUserFlowBizEnum { public enum ShopUserFlowBizEnum {
// 会员充值 // 会员充值
CASH_IN("cashIn", "会员充值"), CASH_IN("cashIn", "会员充值"),
FREE_IN("freeIn", "霸王餐充值"),
// 重置奖励 // 重置奖励
AWARD_IN("awardIn", "充值奖励"), AWARD_IN("awardIn", "充值奖励"),
// 微信小程序充值 // 微信小程序充值

View File

@ -16,6 +16,14 @@ public class VipPayParamDTO {
@NotNull(message = "店铺不能为空") @NotNull(message = "店铺不能为空")
private Long shopId; private Long shopId;
private Long shopUserId; private Long shopUserId;
/**
* 霸王餐使用
*/
private Long orderId;
/**
* 霸王餐使用 是否整单打包
*/
private Integer allPack;
@NotNull(message = "充值金额不为空") @NotNull(message = "充值金额不为空")
private BigDecimal amount; private BigDecimal amount;
@ -35,4 +43,9 @@ public class VipPayParamDTO {
*/ */
private String authCode; private String authCode;
private String pwd; private String pwd;
public boolean isAllPack() {
return allPack != null && allPack == 1;
}
} }

View File

@ -32,7 +32,7 @@ import com.czg.order.vo.OrderDetailSmallVO;
import com.czg.order.vo.OrderInfoVo; import com.czg.order.vo.OrderInfoVo;
import com.czg.sa.StpKit; import com.czg.sa.StpKit;
import com.czg.service.RedisService; import com.czg.service.RedisService;
import com.czg.service.order.dto.BigDecimalDTO; import com.czg.order.dto.BigDecimalDTO;
import com.czg.service.order.enums.OrderStatusEnums; import com.czg.service.order.enums.OrderStatusEnums;
import com.czg.service.order.mapper.OrderInfoMapper; import com.czg.service.order.mapper.OrderInfoMapper;
import com.czg.utils.AssertUtil; import com.czg.utils.AssertUtil;
@ -259,7 +259,9 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
BigDecimalDTO prodCouponAmount = new BigDecimalDTO(BigDecimal.ZERO); BigDecimalDTO prodCouponAmount = new BigDecimalDTO(BigDecimal.ZERO);
//总商品支付金额 不包含打包费 用来计算后续 //总商品支付金额 不包含打包费 用来计算后续
BigDecimalDTO totalAmount = new BigDecimalDTO(BigDecimal.ZERO); BigDecimalDTO totalAmount = new BigDecimalDTO(BigDecimal.ZERO);
processOrderDetails2(orderDetails, prodCouponMap, prodCouponAmount, totalAmount, param.isVipPrice()); //最终打包费
BigDecimalDTO packAmount = new BigDecimalDTO(BigDecimal.ZERO);
processOrderDetails2(orderDetails, prodCouponMap, prodCouponAmount, totalAmount, packAmount, param.isAllPack(), param.isVipPrice());
//总商品支付金额 不包含打包费 用来计算后续 //总商品支付金额 不包含打包费 用来计算后续
log.info("支付前置,商品金额{} 商品优惠券金额{} 总金额{}", totalAmount, prodCouponAmount, totalAmount.getPrice().add(orderInfo.getPackFee())); log.info("支付前置,商品金额{} 商品优惠券金额{} 总金额{}", totalAmount, prodCouponAmount, totalAmount.getPrice().add(orderInfo.getPackFee()));
if (prodCouponAmount.getPrice().compareTo(param.getProductCouponDiscountAmount()) != 0) { if (prodCouponAmount.getPrice().compareTo(param.getProductCouponDiscountAmount()) != 0) {
@ -268,10 +270,10 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
orderInfo.setOriginAmount(totalAmount.getPrice()); orderInfo.setOriginAmount(totalAmount.getPrice());
BigDecimal newTotalAmount = totalAmount.getPrice(); BigDecimal newTotalAmount = totalAmount.getPrice();
//折扣金额 9折 计算 订单金额*0.9 向上取整 //折扣金额 9折 计算 订单金额*0.9 向上取整
if(param.getDiscountRatio().compareTo(BigDecimal.ZERO) > 0) { if (param.getDiscountRatio().compareTo(BigDecimal.ZERO) > 0) {
newTotalAmount = totalAmount.getPrice().multiply(param.getDiscountRatio()).setScale(2, RoundingMode.UP); newTotalAmount = totalAmount.getPrice().multiply(param.getDiscountRatio()).setScale(2, RoundingMode.UP);
}else if(param.getDiscountAmount().compareTo(BigDecimal.ZERO) > 0) { } else if (param.getDiscountAmount().compareTo(BigDecimal.ZERO) > 0) {
newTotalAmount = totalAmount.getPrice().subtract(param.getDiscountAmount()); newTotalAmount = totalAmount.getPrice().subtract(param.getDiscountAmount());
} }
@ -301,11 +303,12 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
newTotalAmount = newTotalAmount.subtract(param.getRoundAmount()); newTotalAmount = newTotalAmount.subtract(param.getRoundAmount());
log.info("支付前置4订单金额{} ", newTotalAmount); log.info("支付前置4订单金额{} ", newTotalAmount);
//校验最终金额订单金额 (扣除各类折扣)+打包费 餐位费 //校验最终金额订单金额 (扣除各类折扣)+打包费 餐位费
newTotalAmount = newTotalAmount.add(orderInfo.getPackFee()).add(orderInfo.getSeatAmount()); newTotalAmount = newTotalAmount.add(packAmount.getPrice()).add(orderInfo.getSeatAmount());
log.info("支付前置5订单金额{} ", newTotalAmount); log.info("支付前置5订单金额{} ", newTotalAmount);
if (newTotalAmount.compareTo(param.getOrderAmount()) != 0) { if (newTotalAmount.compareTo(param.getOrderAmount()) != 0) {
throw new ValidateException("生成支付订单失败,订单金额不正确"); throw new ValidateException("生成支付订单失败,订单金额不正确");
} }
orderInfo.setPackFee(packAmount.getPrice());
//生成订单 //discount_info 所有折扣 几折 折扣金额 满减金额 优惠券金额 积分抵扣金额 抹零 //生成订单 //discount_info 所有折扣 几折 折扣金额 满减金额 优惠券金额 积分抵扣金额 抹零
upOrderPayInfo(orderInfo, param); upOrderPayInfo(orderInfo, param);
orderDetailService.updateBatch(orderDetails); orderDetailService.updateBatch(orderDetails);
@ -318,7 +321,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
} }
/** /**
* 填充 优惠券使用数量 以及 付款金额 * 填充 单价/付款金额
* *
* @param orderDetails 订单详情 需要回填 * @param orderDetails 订单详情 需要回填
*/ */
@ -346,8 +349,10 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
* @param prodCouponAmount 商品券优惠金额 商品单价*优惠数量 的总和 * @param prodCouponAmount 商品券优惠金额 商品单价*优惠数量 的总和
* @param totalAmount 最终总金额没加打包费 餐位费 去除优惠券金额后的 * @param totalAmount 最终总金额没加打包费 餐位费 去除优惠券金额后的
*/ */
private void processOrderDetails2(List<OrderDetail> orderDetails, Map<Long, Integer> prodCouponMap, @Override
BigDecimalDTO prodCouponAmount, BigDecimalDTO totalAmount, boolean isVipPrice) { public void processOrderDetails2(List<OrderDetail> orderDetails, Map<Long, Integer> prodCouponMap,
BigDecimalDTO prodCouponAmount, BigDecimalDTO totalAmount, BigDecimalDTO packAmount,
boolean isAllPack, boolean isVipPrice) {
Map<Long, List<OrderDetail>> detailMap = new HashMap<>(); Map<Long, List<OrderDetail>> detailMap = new HashMap<>();
for (OrderDetail detail : orderDetails) { for (OrderDetail detail : orderDetails) {
detailMap.computeIfAbsent(detail.getProductId(), k -> new ArrayList<>()).add(detail); detailMap.computeIfAbsent(detail.getProductId(), k -> new ArrayList<>()).add(detail);
@ -373,6 +378,10 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
orderDetail.setUnitPrice(orderDetail.getPrice()); orderDetail.setUnitPrice(orderDetail.getPrice());
} }
} }
if (isAllPack) {
orderDetail.setPackNumber(orderDetail.getNum());
}
packAmount.setPrice(packAmount.getPrice().add(orderDetail.getPackAmount().multiply(orderDetail.getPackNumber())));
if (couponNum.compareTo(BigDecimal.ZERO) > 0) { if (couponNum.compareTo(BigDecimal.ZERO) > 0) {
if (couponNum.compareTo(orderDetail.getNum()) >= 0) { if (couponNum.compareTo(orderDetail.getNum()) >= 0) {
orderDetail.setCouponNum(orderDetail.getNum()); orderDetail.setCouponNum(orderDetail.getNum());
@ -457,7 +466,8 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
upOrderInfo(orderInfo, new BigDecimal(czgCallBackDto.getAmount() / 100L), upOrderInfo(orderInfo, new BigDecimal(czgCallBackDto.getAmount() / 100L),
DateUtil.parseLocalDateTime(czgCallBackDto.getPayTime()), payment.getId(), null); DateUtil.parseLocalDateTime(czgCallBackDto.getPayTime()), payment.getId(), null);
redisService.del(RedisCst.classKeyExpired.EXPIRED_ORDER + orderInfo.getId()); redisService.del(RedisCst.classKeyExpired.EXPIRED_ORDER + orderInfo.getId());
} else if ("memberIn".equals(payment.getPayType())) { } else if ("memberIn".equals(payment.getPayType()) || "free".equals(payment.getPayType())) {
boolean isFree = "free".equals(payment.getPayType());
ShopUser shopUser = shopUserService.getById(payment.getSourceId()); ShopUser shopUser = shopUserService.getById(payment.getSourceId());
if (shopUser == null) { if (shopUser == null) {
log.error("会员充值失败会员不存在会员id{}", payment.getSourceId()); log.error("会员充值失败会员不存在会员id{}", payment.getSourceId());
@ -481,11 +491,24 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
} else { } else {
shopUserMoneyEditDTO.setBizEnum(ShopUserFlowBizEnum.CASH_IN); shopUserMoneyEditDTO.setBizEnum(ShopUserFlowBizEnum.CASH_IN);
} }
if (isFree) {
if (StrUtil.isBlank(czgCallBackDto.getExtParam())) {
throw new ValidateException("霸王餐支付,订单号处理失败");
}
shopUserMoneyEditDTO.setBizEnum(ShopUserFlowBizEnum.FREE_IN);
updateChain().eq(OrderInfo::getId, czgCallBackDto.getExtParam())
.set(OrderInfo::getStatus, OrderStatusEnums.DONE.getCode())
.set(OrderInfo::getIsFreeDine, 1)
.set(OrderInfo::getPayAmount, 0)
.update();
}
//更新会员余额 并生成流水 //更新会员余额 并生成流水
Long flowId = shopUserService.updateMoney(shopUser.getShopId(), shopUserMoneyEditDTO); Long flowId = shopUserService.updateMoney(shopUser.getShopId(), shopUserMoneyEditDTO);
//会员活动 if (!isFree) {
activateService.giveActivate(shopUser, //会员活动
new BigDecimal(czgCallBackDto.getAmount() / 100L), flowId); activateService.giveActivate(shopUser,
new BigDecimal(czgCallBackDto.getAmount() / 100L), flowId);
}
} }
} }

View File

@ -13,6 +13,7 @@ import com.czg.entity.req.*;
import com.czg.entity.resp.*; import com.czg.entity.resp.*;
import com.czg.enums.ShopUserFlowBizEnum; import com.czg.enums.ShopUserFlowBizEnum;
import com.czg.exception.PaySuccessException; import com.czg.exception.PaySuccessException;
import com.czg.order.dto.BigDecimalDTO;
import com.czg.order.dto.CheckOrderPay; import com.czg.order.dto.CheckOrderPay;
import com.czg.order.dto.OrderInfoRefundDTO; import com.czg.order.dto.OrderInfoRefundDTO;
import com.czg.order.entity.OrderDetail; import com.czg.order.entity.OrderDetail;
@ -100,6 +101,32 @@ public class PayServiceImpl implements PayService {
return orderInfo; return orderInfo;
} }
/**
* 会员充值 校验
*
* @return 是否是霸王餐充值
*/
private boolean checkPayVip(VipPayParamDTO payParam) {
if (payParam.getOrderId() != null) {
OrderInfo orderInfo = orderInfoService.getById(payParam.getOrderId());
AssertUtil.isNull(orderInfo, "订单不存在");
//获取商品信息 计算金额 需要传入优惠券 减去优惠券
List<OrderDetail> orderDetails = orderDetailService.queryChain().eq(OrderDetail::getOrderId, orderInfo.getId()).select().list();
//总商品支付金额 不包含打包费 用来计算后续
BigDecimalDTO totalAmount = new BigDecimalDTO(BigDecimal.ZERO);
//最终打包费
BigDecimalDTO packAmount = new BigDecimalDTO(BigDecimal.ZERO);
orderInfoService.processOrderDetails2(orderDetails, null, null, totalAmount, packAmount, payParam.isAllPack(), true);
BigDecimal payAmount = (totalAmount.getPrice().add(packAmount.getPrice())).multiply(BigDecimal.TWO);
if (payAmount.compareTo(payParam.getAmount()) != 0) {
throw new ValidateException("霸王餐支付金额不正确");
}
orderDetailService.updateBatch(orderDetails);
return true;
}
return false;
}
@Override @Override
@Transactional @Transactional
@ -263,6 +290,7 @@ public class PayServiceImpl implements PayService {
@Override @Override
@Transactional @Transactional
public CzgResult<Object> cashPayVip(VipPayParamDTO payParam) { public CzgResult<Object> cashPayVip(VipPayParamDTO payParam) {
boolean isFree = checkPayVip(payParam);
ShopUser shopUser = shopUserService.getById(payParam.getShopUserId()); ShopUser shopUser = shopUserService.getById(payParam.getShopUserId());
AssertUtil.isNull(shopUser, "充值失败 该店铺用户不存在"); AssertUtil.isNull(shopUser, "充值失败 该店铺用户不存在");
ShopInfo shopInfo = shopInfoService.getById(payParam.getShopId()); ShopInfo shopInfo = shopInfoService.getById(payParam.getShopId());
@ -286,60 +314,78 @@ public class PayServiceImpl implements PayService {
.remark("现金充值") .remark("现金充值")
.bizEnum(ShopUserFlowBizEnum.CASH_IN) .bizEnum(ShopUserFlowBizEnum.CASH_IN)
.build(); .build();
if (isFree) {
shopUserMoneyEditDTO.setBizEnum(ShopUserFlowBizEnum.FREE_IN);
orderInfoService.updateChain().eq(OrderInfo::getId, payParam.getOrderId())
.set(OrderInfo::getStatus, OrderStatusEnums.DONE.getCode())
.set(OrderInfo::getIsFreeDine, 1)
.set(OrderInfo::getPayAmount, 0)
.update();
}
//更新会员余额 并生成流水 //更新会员余额 并生成流水
Long flowId = shopUserService.updateMoney(shopUser.getShopId(), shopUserMoneyEditDTO); Long flowId = shopUserService.updateMoney(shopUser.getShopId(), shopUserMoneyEditDTO);
//会员活动 if (!isFree) {
shopActivateService.giveActivate(shopUser, payParam.getAmount(), flowId); //会员活动
shopActivateService.giveActivate(shopUser, payParam.getAmount(), flowId);
}
return CzgResult.success(); return CzgResult.success();
} }
@Override @Override
@Transactional @Transactional
public CzgResult<Map<String, Object>> jsPayVip(String clintIp, VipPayParamDTO payParam) { public CzgResult<Map<String, Object>> jsPayVip(String clintIp, VipPayParamDTO payParam) {
boolean isFree = checkPayVip(payParam);
ShopUser shopUser = shopUserService.getById(payParam.getShopUserId()); ShopUser shopUser = shopUserService.getById(payParam.getShopUserId());
AssertUtil.isNull(shopUser, "充值失败 该店铺用户不存在"); AssertUtil.isNull(shopUser, "充值失败 该店铺用户不存在");
AssertUtil.isBlank(payParam.getOpenId(), "用户小程序ID不能为空"); AssertUtil.isBlank(payParam.getOpenId(), "用户小程序ID不能为空");
AssertUtil.isBlank(payParam.getPayType(), "支付方式不能为空"); AssertUtil.isBlank(payParam.getPayType(), "支付方式不能为空");
String payOrderNo = payParam.getPlatformType() + IdUtil.getSnowflakeNextId(); String payOrderNo = payParam.getPlatformType() + IdUtil.getSnowflakeNextId();
initOrderPayment(new OrderPayment(payParam.getShopId(), shopUser.getId(), "memberIn", payOrderNo, "", payParam.getAmount())); initOrderPayment(new OrderPayment(payParam.getShopId(), shopUser.getId(), isFree ? "free" : "memberIn", payOrderNo, "", payParam.getAmount()));
String extParam = payParam.getOrderId() == null ? "" : payParam.getOrderId().toString();
return jsPay(payParam.getShopId(), payParam.getPayType(), new CzgJsPayReq(payOrderNo, payParam.getAmount().multiply(MONEY_RATE).longValue(), return jsPay(payParam.getShopId(), payParam.getPayType(), new CzgJsPayReq(payOrderNo, payParam.getAmount().multiply(MONEY_RATE).longValue(),
"会员充值", payParam.getOpenId(), clintIp, payParam.getReturnUrl(), payParam.getBuyerRemark(), "")); "会员充值", payParam.getOpenId(), clintIp, payParam.getReturnUrl(), payParam.getBuyerRemark(), extParam));
} }
@Override @Override
@Transactional @Transactional
public CzgResult<Map<String, Object>> ltPayVip(String clintIp, VipPayParamDTO payParam) { public CzgResult<Map<String, Object>> ltPayVip(String clintIp, VipPayParamDTO payParam) {
boolean isFree = checkPayVip(payParam);
ShopUser shopUser = shopUserService.getById(payParam.getShopUserId()); ShopUser shopUser = shopUserService.getById(payParam.getShopUserId());
AssertUtil.isNull(shopUser, "充值失败 该店铺用户不存在"); AssertUtil.isNull(shopUser, "充值失败 该店铺用户不存在");
AssertUtil.isBlank(payParam.getOpenId(), "用户小程序ID不能为空"); AssertUtil.isBlank(payParam.getOpenId(), "用户小程序ID不能为空");
AssertUtil.isBlank(payParam.getPayType(), "支付方式不能为空"); AssertUtil.isBlank(payParam.getPayType(), "支付方式不能为空");
String payOrderNo = payParam.getPlatformType() + IdUtil.getSnowflakeNextId(); String payOrderNo = payParam.getPlatformType() + IdUtil.getSnowflakeNextId();
initOrderPayment(new OrderPayment(payParam.getShopId(), shopUser.getId(), "memberIn", payOrderNo, "", payParam.getAmount())); initOrderPayment(new OrderPayment(payParam.getShopId(), shopUser.getId(), isFree ? "free" : "memberIn", payOrderNo, "", payParam.getAmount()));
String extParam = payParam.getOrderId() == null ? "" : payParam.getOrderId().toString();
return ltPay(payParam.getShopId(), payParam.getPayType(), new CzgLtPayReq(payOrderNo, payParam.getAmount().multiply(MONEY_RATE).longValue(), return ltPay(payParam.getShopId(), payParam.getPayType(), new CzgLtPayReq(payOrderNo, payParam.getAmount().multiply(MONEY_RATE).longValue(),
payParam.getPayType(), "会员充值", payParam.getOpenId(), clintIp, payParam.getReturnUrl(), payParam.getBuyerRemark(), "")); payParam.getPayType(), "会员充值", payParam.getOpenId(), clintIp, payParam.getReturnUrl(), payParam.getBuyerRemark(), extParam));
} }
@Override @Override
@Transactional @Transactional
public CzgResult<Map<String, Object>> scanPayVip(String clintIp, VipPayParamDTO payParam) { public CzgResult<Map<String, Object>> scanPayVip(String clintIp, VipPayParamDTO payParam) {
boolean isFree = checkPayVip(payParam);
ShopUser shopUser = shopUserService.getById(payParam.getShopUserId()); ShopUser shopUser = shopUserService.getById(payParam.getShopUserId());
AssertUtil.isNull(shopUser, "充值失败 该店铺用户不存在"); AssertUtil.isNull(shopUser, "充值失败 该店铺用户不存在");
String payOrderNo = payParam.getPlatformType() + IdUtil.getSnowflakeNextId(); String payOrderNo = payParam.getPlatformType() + IdUtil.getSnowflakeNextId();
initOrderPayment(new OrderPayment(payParam.getShopId(), shopUser.getId(), "memberIn", payOrderNo, "", payParam.getAmount())); initOrderPayment(new OrderPayment(payParam.getShopId(), shopUser.getId(), isFree ? "free" : "memberIn", payOrderNo, "", payParam.getAmount()));
String extParam = payParam.getOrderId() == null ? "" : payParam.getOrderId().toString();
return scanPay(payParam.getShopId(), new CzgScanPayReq(payOrderNo, payParam.getAmount().multiply(MONEY_RATE).longValue(), return scanPay(payParam.getShopId(), new CzgScanPayReq(payOrderNo, payParam.getAmount().multiply(MONEY_RATE).longValue(),
"会员充值", clintIp, payParam.getReturnUrl(), payParam.getBuyerRemark(), "")); "会员充值", clintIp, payParam.getReturnUrl(), payParam.getBuyerRemark(), extParam));
} }
@Override @Override
@Transactional @Transactional
public CzgResult<Map<String, Object>> microPayVip(VipPayParamDTO payParam) { public CzgResult<Map<String, Object>> microPayVip(VipPayParamDTO payParam) {
boolean isFree = checkPayVip(payParam);
AssertUtil.isBlank(payParam.getAuthCode(), "扫描码不能为空"); AssertUtil.isBlank(payParam.getAuthCode(), "扫描码不能为空");
ShopUser shopUser = shopUserService.getById(payParam.getShopUserId()); ShopUser shopUser = shopUserService.getById(payParam.getShopUserId());
AssertUtil.isNull(shopUser, "充值失败 该店铺用户不存在"); AssertUtil.isNull(shopUser, "充值失败 该店铺用户不存在");
String payOrderNo = payParam.getPlatformType() + IdUtil.getSnowflakeNextId(); String payOrderNo = payParam.getPlatformType() + IdUtil.getSnowflakeNextId();
initOrderPayment(new OrderPayment(payParam.getShopId(), shopUser.getId(), "memberIn", payOrderNo, payParam.getAuthCode(), payParam.getAmount())); initOrderPayment(new OrderPayment(payParam.getShopId(), shopUser.getId(), isFree ? "free" : "memberIn", payOrderNo, payParam.getAuthCode(), payParam.getAmount()));
String extParam = payParam.getOrderId() == null ? "" : payParam.getOrderId().toString();
return microPay(payParam.getShopId(), new CzgMicroPayReq(payOrderNo, payParam.getAmount().multiply(MONEY_RATE).longValue(), return microPay(payParam.getShopId(), new CzgMicroPayReq(payOrderNo, payParam.getAmount().multiply(MONEY_RATE).longValue(),
"会员充值", payParam.getAuthCode(), payParam.getBuyerRemark(), "")); "会员充值", payParam.getAuthCode(), payParam.getBuyerRemark(), extParam));
} }
@Override @Override