店铺会员相关
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
package com.czg.service.order.dto;
|
||||
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 支付接收参数 实体类
|
||||
*
|
||||
* @author ww
|
||||
* @description
|
||||
*/
|
||||
@Data
|
||||
public class VipMemberPayParamDTO {
|
||||
@NotNull(message = "店铺不能为空")
|
||||
private Long shopId;
|
||||
@NotNull(message = "用户ID不能为空")
|
||||
private Long shopUserId;
|
||||
@NotNull(message = "会员订单id不能为空")
|
||||
private Long memberOrderId;
|
||||
/**
|
||||
* 平台类型 pc 收银机客户端 wechat 微信小程序 alipay 支付宝小程序 admin-pc PC管理端 admin-app APP管理端
|
||||
*/
|
||||
private String platformType;
|
||||
private String payType;
|
||||
private String openId;
|
||||
/**
|
||||
* 扫码支付 扫描码
|
||||
*/
|
||||
private String authCode;
|
||||
private String pwd;
|
||||
private String returnUrl;
|
||||
private String buyerRemark;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.czg.service.order.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import com.czg.order.entity.MemberOrder;
|
||||
|
||||
/**
|
||||
* 会员充值订单 映射层。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-09-11
|
||||
*/
|
||||
public interface MemberOrderMapper extends BaseMapper<MemberOrder> {
|
||||
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import com.czg.entity.resp.CzgRefundResp;
|
||||
import com.czg.order.dto.OrderInfoRefundDTO;
|
||||
import com.czg.resp.CzgResult;
|
||||
import com.czg.service.order.dto.OrderPayParamDTO;
|
||||
import com.czg.service.order.dto.VipMemberPayParamDTO;
|
||||
import com.czg.service.order.dto.VipPayParamDTO;
|
||||
import com.czg.service.order.dto.VipRefundDTO;
|
||||
import lombok.NonNull;
|
||||
@@ -119,4 +120,6 @@ public interface PayService {
|
||||
* @param refundOrderId 平台退款订单号 二选一
|
||||
*/
|
||||
CzgResult<CzgRefundResp> queryRefund(Long shopId, String mchRefundNo, String refundOrderId);
|
||||
|
||||
CzgResult<Map<String, Object>> ltPayMember(String clientIP, VipMemberPayParamDTO payParam);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
package com.czg.service.order.service.impl;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.czg.account.dto.MemberConfigDTO;
|
||||
import com.czg.account.entity.ShopInfo;
|
||||
import com.czg.account.entity.UserInfo;
|
||||
import com.czg.account.service.ShopInfoService;
|
||||
import com.czg.account.service.ShopUserService;
|
||||
import com.czg.account.service.TbMemberConfigService;
|
||||
import com.czg.account.service.UserInfoService;
|
||||
import com.czg.account.vo.MemberConfigVO;
|
||||
import com.czg.exception.CzgException;
|
||||
import com.czg.order.dto.MemberOrderDTO;
|
||||
import com.czg.service.order.enums.OrderStatusEnums;
|
||||
import com.czg.utils.AssertUtil;
|
||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.czg.order.entity.MemberOrder;
|
||||
import com.czg.order.service.MemberOrderService;
|
||||
import com.czg.service.order.mapper.MemberOrderMapper;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 会员充值订单 服务层实现。
|
||||
*
|
||||
* @author zs
|
||||
* @since 2025-09-11
|
||||
*/
|
||||
@Service
|
||||
public class MemberOrderServiceImpl extends ServiceImpl<MemberOrderMapper, MemberOrder> implements MemberOrderService {
|
||||
@DubboReference
|
||||
private ShopInfoService shopInfoService;
|
||||
@DubboReference
|
||||
private UserInfoService userInfoService;
|
||||
@DubboReference
|
||||
private ShopUserService shopUserService;
|
||||
@DubboReference
|
||||
private TbMemberConfigService memberConfigService;
|
||||
|
||||
@Override
|
||||
public MemberOrder createMemberOrder(MemberOrderDTO orderDTO) {
|
||||
ShopInfo shopInfo = shopInfoService.getById(orderDTO.getShopId());
|
||||
AssertUtil.isNull(shopInfo, "生成订单失败,店铺信息不存在");
|
||||
|
||||
if (orderDTO.getUserId() != null) {
|
||||
UserInfo userInfo = userInfoService.getById(orderDTO.getUserId());
|
||||
AssertUtil.isNull(userInfo, "生成订单失败,用户信息不存在");
|
||||
}
|
||||
|
||||
MemberConfigVO memberConfigVO = memberConfigService.detail(shopInfo.getId());
|
||||
if(memberConfigVO.getConfigList() == null || memberConfigVO.getConfigList().isEmpty()) {
|
||||
throw new CzgException("会员开通方案未配置,请联系店铺");
|
||||
}
|
||||
|
||||
MemberConfigDTO.ConfigList configItem = memberConfigVO.getConfigList().stream()
|
||||
.filter(item -> item.getName().equals(orderDTO.getName()))
|
||||
.findFirst()
|
||||
.orElseThrow(() -> new CzgException("会员开通方案未配置,请联系店铺"));
|
||||
|
||||
|
||||
//生成订单
|
||||
MemberOrder orderInfo = new MemberOrder();
|
||||
|
||||
orderInfo.setOrderNo(orderDTO.getPlatformType() + IdUtil.getSnowflakeNextId());
|
||||
orderInfo.setShopId(orderDTO.getShopId());
|
||||
orderInfo.setPayAmount(BigDecimal.ZERO);
|
||||
orderInfo.setStatus(OrderStatusEnums.UNPAID.getCode());
|
||||
orderInfo.setAmount(configItem.getPrice().multiply(BigDecimal.valueOf(orderDTO.getNum())));
|
||||
orderInfo.setPrice(configItem.getPrice());
|
||||
orderInfo.setName(configItem.getName());
|
||||
orderInfo.setUserId(orderDTO.getUserId());
|
||||
orderInfo.setReward(configItem.getReward());
|
||||
orderInfo.setCircleTime(configItem.getCircleTime());
|
||||
if (configItem.getCouponList() != null && !configItem.getCouponList().isEmpty()) {
|
||||
orderInfo.setCouponList(JSONObject.toJSONString(configItem.getCouponList()));
|
||||
}
|
||||
orderInfo.setNum(orderDTO.getNum());
|
||||
save(orderInfo);
|
||||
return orderInfo;
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||
import com.czg.order.entity.OrderPayment;
|
||||
import com.czg.order.service.OrderPaymentService;
|
||||
import com.czg.service.order.mapper.OrderPaymentMapper;
|
||||
import org.apache.dubbo.config.annotation.DubboService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
@@ -12,7 +13,7 @@ import org.springframework.stereotype.Service;
|
||||
* @author ww
|
||||
* @since 2025-02-15
|
||||
*/
|
||||
@Service
|
||||
@DubboService
|
||||
public class OrderPaymentServiceImpl extends ServiceImpl<OrderPaymentMapper, OrderPayment> implements OrderPaymentService{
|
||||
|
||||
}
|
||||
|
||||
@@ -20,19 +20,18 @@ import com.czg.exception.PaySuccessException;
|
||||
import com.czg.order.dto.BigDecimalDTO;
|
||||
import com.czg.order.dto.CheckOrderPay;
|
||||
import com.czg.order.dto.OrderInfoRefundDTO;
|
||||
import com.czg.order.entity.MemberOrder;
|
||||
import com.czg.order.entity.OrderDetail;
|
||||
import com.czg.order.entity.OrderInfo;
|
||||
import com.czg.order.entity.OrderPayment;
|
||||
import com.czg.order.enums.PayEnums;
|
||||
import com.czg.order.service.CreditBuyerOrderService;
|
||||
import com.czg.order.service.OrderDetailService;
|
||||
import com.czg.order.service.OrderInfoService;
|
||||
import com.czg.order.service.OrderPaymentService;
|
||||
import com.czg.order.service.*;
|
||||
import com.czg.resp.CzgRespCode;
|
||||
import com.czg.resp.CzgResult;
|
||||
import com.czg.service.CzgPayService;
|
||||
import com.czg.service.RedisService;
|
||||
import com.czg.service.order.dto.OrderPayParamDTO;
|
||||
import com.czg.service.order.dto.VipMemberPayParamDTO;
|
||||
import com.czg.service.order.dto.VipPayParamDTO;
|
||||
import com.czg.service.order.dto.VipRefundDTO;
|
||||
import com.czg.service.order.enums.OrderStatusEnums;
|
||||
@@ -101,6 +100,8 @@ public class PayServiceImpl implements PayService {
|
||||
private RedisService redisService;
|
||||
@Resource
|
||||
private RabbitPublisher rabbitPublisher;
|
||||
@Resource
|
||||
private MemberOrderService memberOrderService;
|
||||
|
||||
private final BigDecimal MONEY_RATE = new BigDecimal("100");
|
||||
|
||||
@@ -390,6 +391,21 @@ public class PayServiceImpl implements PayService {
|
||||
"会员充值", payParam.getOpenId(), clintIp, payParam.getReturnUrl(), payParam.getBuyerRemark(), ""));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CzgResult<Map<String, Object>> ltPayMember(String clientIP, VipMemberPayParamDTO payParam) {
|
||||
MemberOrder memberOrder = memberOrderService.getOne(new QueryWrapper().eq(MemberOrder::getId, payParam.getMemberOrderId()));
|
||||
AssertUtil.isNull(memberOrder, "充值会员失败 该会员订单不存在");
|
||||
ShopUser shopUser = shopUserService.getById(payParam.getShopUserId());
|
||||
AssertUtil.isNull(shopUser, "充值失败 该店铺用户不存在");
|
||||
AssertUtil.isBlank(payParam.getOpenId(), "用户小程序ID不能为空");
|
||||
AssertUtil.isBlank(payParam.getPayType(), "支付方式不能为空");
|
||||
String payOrderNo = payParam.getPlatformType() + IdUtil.getSnowflakeNextId();
|
||||
initOrderPayment(new OrderPayment(payParam.getShopId(), shopUser.getId(), "memberPay", payOrderNo,
|
||||
"", memberOrder.getAmount(), payParam.getMemberOrderId()));
|
||||
return ltPay(payParam.getShopId(), payParam.getPayType(), new CzgLtPayReq(payOrderNo, memberOrder.getAmount().multiply(MONEY_RATE).longValue(),
|
||||
payParam.getPayType(), "会员充值", payParam.getOpenId(), clientIP, payParam.getReturnUrl(), payParam.getBuyerRemark(), ""));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public CzgResult<Map<String, Object>> ltPayVip(String clintIp, VipPayParamDTO payParam) {
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.czg.service.order.mapper.MemberOrderMapper">
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user