订单列表
This commit is contained in:
2025-02-14 17:14:08 +08:00
parent ff35c584db
commit cd9ab53d72
35 changed files with 1665 additions and 46 deletions

View File

@@ -0,0 +1,23 @@
package com.czg.service.order.dto;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
/**
* 支付接收参数 实体类
*
* @author ww
* @description
*/
@Data
public class OrderPayParamDTO {
@NotEmpty(message = "店铺不能为空")
private Long shopId;
@NotEmpty(message = "订单不能为空")
private Long orderId;
private String buyerRemark;
private String returnUrl;
private String payType;
private String openId;
private String authCode;
}

View File

@@ -0,0 +1,14 @@
package com.czg.service.order.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.order.entity.OrderDetail;
/**
* 订单详情 映射层。
*
* @author ww
* @since 2025-02-13
*/
public interface OrderDetailMapper extends BaseMapper<OrderDetail> {
}

View File

@@ -0,0 +1,14 @@
package com.czg.service.order.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.order.entity.OrderInfo;
/**
* 订单表 映射层。
*
* @author ww
* @since 2025-02-13
*/
public interface OrderInfoMapper extends BaseMapper<OrderInfo> {
}

View File

@@ -0,0 +1,79 @@
package com.czg.service.order.service;
import com.czg.entity.notify.CzgPayNotifyDTO;
import com.czg.entity.notify.CzgRefundNotifyDTO;
import com.czg.entity.resp.*;
import com.czg.resp.CzgResult;
import com.czg.service.order.dto.OrderPayParamDTO;
import java.math.BigDecimal;
/**
* 支付
* @author ww
*/
public interface PayService {
/**
* h5支付
*/
CzgResult<CzgH5PayResp> h5PayOrder(String clintIp, OrderPayParamDTO payParam);
/**
* js支付
*/
CzgResult<CzgJsPayResp> jsPayOrder(String clintIp, OrderPayParamDTO payParam);
/**
* 小程序支付
*/
CzgResult<CzgLtPayResp> ltPayOrder(String clintIp, OrderPayParamDTO payParam);
/**
* PC扫码支付
*/
CzgResult<CzgScanPayResp> scanPayOrder(String clintIp, OrderPayParamDTO payParam);
/**
* 聚合反扫
*/
CzgResult<CzgMicroPayResp> microPayOrder(OrderPayParamDTO payParam);
/**
* 订单退款
*/
CzgResult<CzgRefundResp> refundOrder(Long shopId, Long orderId,String refundReason,BigDecimal refundAmount);
/**
* 支付查询
*
* @param payOrderId 平台订单号
* @param mchOrderNo 商户订单号
*/
CzgResult<CzgBaseResp> queryPayOrder(Long shopId, String payOrderId, String mchOrderNo);
/**
* 退款查询
*
* @param mchRefundNo 商户退款订单号 二选一
* @param refundOrderId 平台退款订单号 二选一
*/
CzgResult<CzgRefundResp> queryRefund(Long shopId, String mchRefundNo, String refundOrderId);
/**
* 支付回调数据处理
*
* @param dataJsonStr 带解析数据
*/
CzgPayNotifyDTO getPayNotifyData(String dataJsonStr);
/**
* 退款回调数据处理
*
* @param dataJsonStr 带解析数据
*/
CzgRefundNotifyDTO getRefundNotifyData(String dataJsonStr);
}

View File

@@ -0,0 +1,18 @@
package com.czg.service.order.service.impl;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.order.entity.OrderDetail;
import com.czg.order.service.OrderDetailService;
import com.czg.service.order.mapper.OrderDetailMapper;
import org.springframework.stereotype.Service;
/**
* 订单详情 服务层实现。
*
* @author ww
* @since 2025-02-13
*/
@Service
public class OrderDetailServiceImpl extends ServiceImpl<OrderDetailMapper, OrderDetail> implements OrderDetailService{
}

View File

@@ -0,0 +1,62 @@
package com.czg.service.order.service.impl;
import cn.hutool.core.util.StrUtil;
import com.czg.order.entity.OrderDetail;
import com.czg.order.service.OrderDetailService;
import com.czg.order.dto.OrderInfoQueryDTO;
import com.czg.order.vo.OrderDetailSmallVO;
import com.czg.order.vo.OrderInfoVo;
import com.czg.utils.PageUtil;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.order.entity.OrderInfo;
import com.czg.order.service.OrderInfoService;
import com.czg.service.order.mapper.OrderInfoMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 订单表 服务层实现。
*
* @author ww
* @since 2025-02-13
*/
@Service
public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo> implements OrderInfoService {
@Resource
private OrderDetailService orderDetailService;
@Override
public Page<OrderInfoVo> getOrderByPage(OrderInfoQueryDTO param) {
String productName = param.getProductName();
List<Long> like = null;
if (StrUtil.isNotBlank(productName)) {
like = orderDetailService.queryChain()
.select(OrderDetail::getOrderId)
.eq(OrderDetail::getShopId, param.getShopId())
.like(OrderDetail::getProductName, productName).listAs(Long.class);
}
QueryWrapper queryWrapper = PageUtil.buildSortQueryWrapper();
queryWrapper.eq(OrderInfo::getShopId, param.getShopId())
.eq(OrderInfo::getStatus, param.getStatus())
.eq(OrderInfo::getOrderNo, param.getOrderNo())
.eq(OrderInfo::getPayType, param.getPayType())
.eq(OrderInfo::getTableCode, param.getTableCode())
.eq(OrderInfo::getUserId, param.getUserId())
.in(OrderInfo::getId, like);
Page<OrderInfoVo> orderInfoVoPage = pageAs(PageUtil.buildPage(), queryWrapper, OrderInfoVo.class);
orderInfoVoPage.getRecords().parallelStream().forEach(s -> {
List<OrderDetailSmallVO> orderDetails = orderDetailService.queryChain().select()
.eq(OrderDetail::getShopId, s.getShopId())
.eq(OrderDetail::getOrderId, s.getId()).listAs(OrderDetailSmallVO.class);
s.setGoods(orderDetails);
});
return orderInfoVoPage;
}
}

View File

@@ -0,0 +1,161 @@
package com.czg.service.order.service.impl;
import com.czg.account.entity.ShopMerchant;
import com.czg.account.service.ShopMerchantService;
import com.czg.entity.notify.CzgPayNotifyDTO;
import com.czg.entity.notify.CzgRefundNotifyDTO;
import com.czg.entity.req.*;
import com.czg.entity.resp.*;
import com.czg.order.entity.OrderInfo;
import com.czg.order.service.OrderInfoService;
import com.czg.resp.CzgResult;
import com.czg.service.CzgPayService;
import com.czg.service.order.dto.OrderPayParamDTO;
import com.czg.service.order.service.PayService;
import com.czg.system.enums.SysParamCodeEnum;
import com.czg.system.service.SysParamsService;
import com.czg.utils.AssertUtil;
import jakarta.annotation.Resource;
import lombok.NonNull;
import org.apache.dubbo.config.annotation.DubboReference;
import java.math.BigDecimal;
/**
* @author ww
* @description
*/
public class PayServiceImpl implements PayService {
@DubboReference
private ShopMerchantService shopMerchantService;
@DubboReference
private SysParamsService sysParamsService;
@Resource
private CzgPayService czgPayService;
@Resource
private OrderInfoService orderInfoService;
private final BigDecimal MONEY_RATE = new BigDecimal("100");
private final String payJsonExtParam = "{\"payType\":\"1\"}";
private final String refundJsonExtParam = "{\"payType\":\"1\"}";
@Override
public CzgResult<CzgH5PayResp> h5PayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) {
OrderInfo orderInfo = orderInfoService.getById(payParam.getOrderId());
AssertUtil.isNull(orderInfo, "订单不存在");
return h5Pay(payParam.getShopId(), new CzgH5PayReq(orderInfo.getOrderNo(), orderInfo.getPayAmount().multiply(MONEY_RATE).longValue(),
"点餐支付", clintIp, payParam.getReturnUrl(), payParam.getBuyerRemark(), payJsonExtParam));
}
@Override
public CzgResult<CzgJsPayResp> jsPayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) {
OrderInfo orderInfo = orderInfoService.getById(payParam.getOrderId());
AssertUtil.isNull(orderInfo, "订单不存在");
return jsPay(payParam.getShopId(), payParam.getPayType(), new CzgJsPayReq(orderInfo.getOrderNo(), orderInfo.getPayAmount().multiply(MONEY_RATE).longValue(),
"点餐支付", payParam.getOpenId(), clintIp, payParam.getReturnUrl(), payParam.getBuyerRemark(), payJsonExtParam));
}
@Override
public CzgResult<CzgLtPayResp> ltPayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) {
OrderInfo orderInfo = orderInfoService.getById(payParam.getOrderId());
AssertUtil.isNull(orderInfo, "订单不存在");
return ltPay(payParam.getShopId(), payParam.getPayType(), new CzgLtPayReq(orderInfo.getOrderNo(), orderInfo.getPayAmount().multiply(MONEY_RATE).longValue(),
"点餐支付", payParam.getOpenId(), clintIp, payParam.getReturnUrl(), payParam.getBuyerRemark(), payJsonExtParam));
}
@Override
public CzgResult<CzgScanPayResp> scanPayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) {
OrderInfo orderInfo = orderInfoService.getById(payParam.getOrderId());
AssertUtil.isNull(orderInfo, "订单不存在");
return scanPay(payParam.getShopId(), new CzgScanPayReq(orderInfo.getOrderNo(), orderInfo.getPayAmount().multiply(MONEY_RATE).longValue(),
"点餐支付", clintIp, payParam.getReturnUrl(), payParam.getBuyerRemark(), payJsonExtParam));
}
@Override
public CzgResult<CzgMicroPayResp> microPayOrder(OrderPayParamDTO payParam) {
OrderInfo orderInfo = orderInfoService.getById(payParam.getOrderId());
AssertUtil.isNull(orderInfo, "订单不存在");
return microPay(payParam.getShopId(), new CzgMicroPayReq(orderInfo.getOrderNo(), orderInfo.getPayAmount().multiply(MONEY_RATE).longValue(),
"点餐支付", payParam.getAuthCode(), payParam.getBuyerRemark(), payJsonExtParam));
}
@Override
public CzgResult<CzgRefundResp> refundOrder(@NonNull Long shopId, @NonNull Long orderId,@NonNull String refundReason,@NonNull BigDecimal refundAmount) {
// refund(shopId, new CzgRefundReq("1", refundReason, refundAmount.multiply(MONEY_RATE).longValue(),
// "1", refundJsonExtParam));
return null;
}
@Override
public CzgResult<CzgBaseResp> queryPayOrder(@NonNull Long shopId, String payOrderId, String mchOrderNo) {
ShopMerchant shopMerchant = shopMerchantService.getById(shopId);
return czgPayService.queryPayOrder(shopMerchant.getAppId(), shopMerchant.getAppSecret(), payOrderId, mchOrderNo);
}
@Override
public CzgResult<CzgRefundResp> queryRefund(@NonNull Long shopId, String mchRefundNo, String refundOrderId) {
ShopMerchant shopMerchant = shopMerchantService.getById(shopId);
return czgPayService.queryRefundOrder(shopMerchant.getAppId(), shopMerchant.getAppSecret(), mchRefundNo, refundOrderId);
}
@Override
public CzgPayNotifyDTO getPayNotifyData(String dataJsonStr) {
return czgPayService.getPayNotifyData(dataJsonStr);
}
@Override
public CzgRefundNotifyDTO getRefundNotifyData(String dataJsonStr) {
return czgPayService.getRefundNotifyData(dataJsonStr);
}
private CzgResult<CzgH5PayResp> h5Pay(@NonNull Long shopId, CzgH5PayReq bizData) {
ShopMerchant shopMerchant = shopMerchantService.getById(shopId);
bizData.assignMerchant(shopMerchant.getStoreId(), shopMerchant.getMerchantName(),
sysParamsService.getSysParamValue(SysParamCodeEnum.PAY_CZG_NOTIFY_URL.getCode()));
return czgPayService.h5Pay(shopMerchant.getAppId(), shopMerchant.getAppSecret(), bizData);
}
private CzgResult<CzgJsPayResp> jsPay(@NonNull Long shopId, @NonNull String payType, CzgJsPayReq bizData) {
ShopMerchant shopMerchant = shopMerchantService.getById(shopId);
bizData.setSubAppid("aliPay" .equals(payType) ? shopMerchant.getAlipaySmallAppid() : shopMerchant.getWechatSmallAppid());
AssertUtil.isBlank(bizData.getSubAppid(), "暂不可用,请联系商家配置" + ("aliPay" .equals(payType) ? "支付宝" : "微信") + "小程序");
bizData.assignMerchant(shopMerchant.getStoreId(), shopMerchant.getMerchantName(),
sysParamsService.getSysParamValue(SysParamCodeEnum.PAY_CZG_NOTIFY_URL.getCode()));
return czgPayService.jsPay(shopMerchant.getAppId(), shopMerchant.getAppSecret(), bizData);
}
private CzgResult<CzgLtPayResp> ltPay(@NonNull Long shopId, String payType, CzgLtPayReq bizData) {
ShopMerchant shopMerchant = shopMerchantService.getById(shopId);
bizData.setSubAppid("aliPay" .equals(payType) ? shopMerchant.getAlipaySmallAppid() : shopMerchant.getWechatSmallAppid());
AssertUtil.isBlank(bizData.getSubAppid(), "暂不可用,请联系商家配置" + ("aliPay" .equals(payType) ? "支付宝" : "微信") + "小程序");
bizData.assignMerchant(shopMerchant.getStoreId(), shopMerchant.getMerchantName(),
sysParamsService.getSysParamValue(SysParamCodeEnum.PAY_CZG_NOTIFY_URL.getCode()));
return czgPayService.ltPay(shopMerchant.getAppId(), shopMerchant.getAppSecret(), bizData);
}
private CzgResult<CzgScanPayResp> scanPay(@NonNull Long shopId, CzgScanPayReq bizData) {
ShopMerchant shopMerchant = shopMerchantService.getById(shopId);
bizData.assignMerchant(shopMerchant.getStoreId(), shopMerchant.getMerchantName(),
sysParamsService.getSysParamValue(SysParamCodeEnum.PAY_CZG_NOTIFY_URL.getCode()));
return czgPayService.scanPay(shopMerchant.getAppId(), shopMerchant.getAppSecret(), bizData);
}
private CzgResult<CzgMicroPayResp> microPay(@NonNull Long shopId, CzgMicroPayReq bizData) {
ShopMerchant shopMerchant = shopMerchantService.getById(shopId);
bizData.assignMerchant(shopMerchant.getStoreId(), shopMerchant.getMerchantName(),
sysParamsService.getSysParamValue(SysParamCodeEnum.PAY_CZG_NOTIFY_URL.getCode()));
return czgPayService.microPay(shopMerchant.getAppId(), shopMerchant.getAppSecret(), bizData);
}
private CzgResult<CzgRefundResp> refund(@NonNull Long shopId, CzgRefundReq bizData) {
ShopMerchant shopMerchant = shopMerchantService.getById(shopId);
bizData.setNotifyUrl(sysParamsService.getSysParamValue(SysParamCodeEnum.PAY_CZG_REFUND_NOTIFY_URL.getCode()));
return czgPayService.refundOrder(shopMerchant.getAppId(), shopMerchant.getAppSecret(), bizData);
}
}

View File

@@ -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.OrderDetailMapper">
</mapper>

View File

@@ -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.OrderInfoMapper">
</mapper>