拼团 订单
This commit is contained in:
@@ -22,7 +22,12 @@ public class GbWareQueryParamDTO extends TimeQueryParam {
|
||||
/**
|
||||
* 上架状态(0下架 1上架)
|
||||
*/
|
||||
private Boolean onlineStatus;
|
||||
private Integer onlineStatus;
|
||||
|
||||
/**
|
||||
* 成团人数 最小为1
|
||||
*/
|
||||
private Integer groupPeopleNum;
|
||||
|
||||
public String getWareName() {
|
||||
return CzgStrUtils.getStrOrNull(wareName);
|
||||
|
||||
@@ -3,18 +3,16 @@ package com.czg.order.dto;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 积分商品退款
|
||||
*
|
||||
* @author ww
|
||||
*/
|
||||
@Data
|
||||
public class PointGoodsRefundDTO {
|
||||
public class CommonRefundDTO {
|
||||
|
||||
/**
|
||||
* 积分商品id
|
||||
* 记录 id
|
||||
*/
|
||||
@NotNull(message = "记录不能为空")
|
||||
private Long recordId;
|
||||
@@ -0,0 +1,79 @@
|
||||
package com.czg.order.dto;
|
||||
|
||||
import com.czg.BaseQueryParam;
|
||||
import com.czg.utils.CzgStrUtils;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 拼团订单查询参数
|
||||
*
|
||||
* @author ww
|
||||
*/
|
||||
@Data
|
||||
public class GbOrderQueryParam extends BaseQueryParam {
|
||||
|
||||
private Long shopId;
|
||||
/**
|
||||
* 订单状态:待支付/待核销/待成团/已核销/退款中/已退款
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 下单 开始时间 yyyy-MM-dd HH:mm:ss
|
||||
*/
|
||||
private String orderStartTime;
|
||||
/**
|
||||
* 下单 结束时间 yyyy-MM-dd HH:mm:ss
|
||||
*/
|
||||
private String orderEndTime;
|
||||
|
||||
/**
|
||||
* 核销 开始时间 yyyy-MM-dd HH:mm:ss
|
||||
*/
|
||||
private String verifyStartTime;
|
||||
|
||||
/**
|
||||
* 核销 开始时间 yyyy-MM-dd HH:mm:ss
|
||||
*/
|
||||
private String verifyEndTime;
|
||||
|
||||
private String phone;
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 订单号(唯一)
|
||||
*/
|
||||
private String orderNo;
|
||||
|
||||
/**
|
||||
* 团单号(关联拼团订单表)
|
||||
*/
|
||||
private String groupOrderNo;
|
||||
|
||||
|
||||
|
||||
public String getOrderStartTime() {
|
||||
return CzgStrUtils.getStrOrNull(orderStartTime);
|
||||
}
|
||||
|
||||
public String getOrderEndTime() {
|
||||
return CzgStrUtils.getStrOrNull(orderEndTime);
|
||||
}
|
||||
|
||||
public String getVerifyStartTime() {
|
||||
return CzgStrUtils.getStrOrNull(verifyStartTime);
|
||||
}
|
||||
public String getVerifyEndTime() {
|
||||
return CzgStrUtils.getStrOrNull(verifyEndTime);
|
||||
}
|
||||
|
||||
public String getOrderNo() {
|
||||
return CzgStrUtils.getStrOrNull(orderNo);
|
||||
}
|
||||
|
||||
public String getGroupOrderNo() {
|
||||
return CzgStrUtils.getStrOrNull(groupOrderNo);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.czg.order.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 拼团参与 DTO
|
||||
*
|
||||
* @author ww
|
||||
*/
|
||||
@Data
|
||||
public class GroupJoinDTO extends LtPayOtherDTO{
|
||||
/**
|
||||
* 团单号 为空时 开新团
|
||||
*/
|
||||
private String groupOrderNo;
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package com.czg.order.dto;
|
||||
|
||||
import com.czg.utils.AssertUtil;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 小程序支付 其它类型
|
||||
* payType 必填 支付方式,aliPay 支付宝,wechatPay 微信
|
||||
* openId 必填
|
||||
* @author ww
|
||||
*/
|
||||
@Data
|
||||
public class LtPayOtherDTO {
|
||||
/**
|
||||
* 积分商品id/团购商品id
|
||||
*/
|
||||
@NotNull(message = "需要购买的商品不能为空")
|
||||
private Long paramId;
|
||||
/**
|
||||
* 店铺Id
|
||||
*/
|
||||
@NotNull(message = "未指定店铺")
|
||||
private Long shopId;
|
||||
/**
|
||||
* 兑换数量
|
||||
*/
|
||||
@NotNull(message = "兑换数量不能为空")
|
||||
private int number;
|
||||
/**
|
||||
* 支付方式 支付方式,aliPay 支付宝,wechatPay 微信
|
||||
*/
|
||||
private String payType;
|
||||
/**
|
||||
* 用户openId
|
||||
*/
|
||||
private String openId;
|
||||
|
||||
/**
|
||||
* 用户Id 对应 用户表 userID
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 用户IP 后端填充
|
||||
*/
|
||||
private String ip;
|
||||
/**
|
||||
* 兑换价格 后端自己计算填充
|
||||
*/
|
||||
private BigDecimal price;
|
||||
|
||||
/**
|
||||
* 对应的记录Id 支付回调向该内容进行回填
|
||||
* 积分商品为 mk_points_goods_record 主键id
|
||||
* 团购商品为 gb_order_detail 主键id
|
||||
*/
|
||||
private Long recordId;
|
||||
|
||||
public void checkPayInfo(){
|
||||
AssertUtil.isBlank(payType, "支付方式不能为空");
|
||||
AssertUtil.isBlank(openId, "openId 不能为空");
|
||||
AssertUtil.isNull(userId, "用户Id 不能为空");
|
||||
}
|
||||
}
|
||||
@@ -11,34 +11,10 @@ import java.math.BigDecimal;
|
||||
* @author ww
|
||||
*/
|
||||
@Data
|
||||
public class PointGoodsExchangeDTO {
|
||||
public class PointGoodsExchangeDTO extends LtPayOtherDTO{
|
||||
/**
|
||||
* 积分商品id
|
||||
*/
|
||||
@NotNull(message = "积分商品不能为空")
|
||||
private Long pointsGoodsId;
|
||||
/**
|
||||
* 店铺Id
|
||||
*/
|
||||
@NotNull(message = "未指定店铺")
|
||||
private Long shopId;
|
||||
/**
|
||||
* 兑换数量
|
||||
*/
|
||||
@NotNull(message = "兑换数量不能为空")
|
||||
private int number;
|
||||
/**
|
||||
* 兑换价格
|
||||
*/
|
||||
private BigDecimal price;
|
||||
|
||||
/**
|
||||
* 支付方式 支付方式,aliPay 支付宝,wechatPay 微信
|
||||
*/
|
||||
private String payType;
|
||||
/**
|
||||
* 用户openId
|
||||
*/
|
||||
private String openId;
|
||||
private Long userId;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
package com.czg.order.entity;
|
||||
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 拼团订单表 实体类。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-16
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table("gb_order")
|
||||
public class GbOrder implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@Id(keyType = KeyType.Auto)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 店铺ID
|
||||
*/
|
||||
private Long shopId;
|
||||
|
||||
/**
|
||||
* 团单号(唯一)
|
||||
*/
|
||||
private String groupOrderNo;
|
||||
|
||||
/**
|
||||
* 商品ID(关联gb_ware表)
|
||||
*/
|
||||
private Long wareId;
|
||||
|
||||
/**
|
||||
* 商品信息
|
||||
(商品名称,商品描述,商品图片,商品详情图片)
|
||||
*/
|
||||
private String wareJson;
|
||||
|
||||
/**
|
||||
* 商品原价
|
||||
*/
|
||||
private BigDecimal wareOriginalPrice;
|
||||
|
||||
/**
|
||||
* 商品拼团价
|
||||
*/
|
||||
private BigDecimal wareGroupPrice;
|
||||
|
||||
/**
|
||||
* 要求成团人数
|
||||
*/
|
||||
private Integer groupPeopleNum;
|
||||
|
||||
/**
|
||||
* 现有人数(初始为1,即开团人)
|
||||
*/
|
||||
private Integer currentPeopleNum;
|
||||
|
||||
/**
|
||||
* 拼团结束时间(超时未成团则失败)
|
||||
*/
|
||||
private LocalDateTime groupEndTime;
|
||||
|
||||
/**
|
||||
* 创建时间/成团时间
|
||||
*/
|
||||
@Column(onInsertValue = "now()")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* ing 进行中 success 成功 fail 失败
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@Column(onInsertValue = "now()", onUpdateValue = "now()")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
/**
|
||||
* 取消原因(默认空,取消拼团时填充)如:商家下架
|
||||
*/
|
||||
private String cancelReason;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
package com.czg.order.entity;
|
||||
|
||||
import com.mybatisflex.annotation.Column;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 拼团订单详情表 实体类。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-16
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table("gb_order_detail")
|
||||
public class GbOrderDetail implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@Id(keyType = KeyType.Auto)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 店铺ID
|
||||
*/
|
||||
private Long shopId;
|
||||
/**
|
||||
* 商品ID
|
||||
*/
|
||||
private Long wareId;
|
||||
|
||||
/**
|
||||
* 团单号(关联拼团订单表)
|
||||
*/
|
||||
private String groupOrderNo;
|
||||
|
||||
/**
|
||||
* 用户ID(下单用户)
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 订单号(唯一)
|
||||
*/
|
||||
private String orderNo;
|
||||
|
||||
/**
|
||||
* 支付单号
|
||||
*/
|
||||
private Long payOrderId;
|
||||
|
||||
/**
|
||||
* 支付金额(单位:元)
|
||||
*/
|
||||
private BigDecimal payAmount;
|
||||
|
||||
/**
|
||||
* 支付时间(未支付则为NULL)
|
||||
*/
|
||||
private LocalDateTime payTime;
|
||||
|
||||
/**
|
||||
* 订单状态:待支付/待核销/待成团/已核销/退款中/已退款
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 核销码(唯一,核销时使用)
|
||||
*/
|
||||
private String verifyCode;
|
||||
|
||||
/**
|
||||
* 核销时间(未核销则为NULL)
|
||||
*/
|
||||
private LocalDateTime verifyTime;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@Column(onInsertValue = "now()")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@Column(onInsertValue = "now()", onUpdateValue = "now()")
|
||||
private LocalDateTime updateTime;
|
||||
/**
|
||||
* 退款时间/取消时间
|
||||
*/
|
||||
private LocalDateTime cancelTime;
|
||||
|
||||
/**
|
||||
* 取消原因(默认空,取消/退款时填充)
|
||||
*/
|
||||
private String cancelReason;
|
||||
|
||||
/**
|
||||
* 删除标记 0-未删 1-已删
|
||||
*/
|
||||
private Integer isDel;
|
||||
|
||||
}
|
||||
@@ -59,6 +59,7 @@ public class OrderPayment implements Serializable {
|
||||
|
||||
/**
|
||||
* 支付方式:order,refund, memberIn,memberRefund, free
|
||||
* {@link com.czg.order.enums.PaymentPayTypeEnum}
|
||||
*/
|
||||
private String payType;
|
||||
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.czg.order.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 支付类型枚举
|
||||
* tb_order_payment
|
||||
*
|
||||
* @author ww
|
||||
*/
|
||||
@Getter
|
||||
public enum PaymentPayTypeEnum {
|
||||
ORDER("order", "订单支付"),
|
||||
FREE("free", "霸王餐"),
|
||||
MEMBER_IN("memberIn", "会员充值"),
|
||||
MEMBER_PAY("memberPay", "会员购买开通"),
|
||||
DISTRIBUTION("distribution", "分销员购买开通"),
|
||||
DISTRIBUTION_RECHARGE("distributionRecharge", "商家运营余额充值"),
|
||||
POINT("point", "积分商品购买"),
|
||||
WARE("ware", "拼团商品"),
|
||||
|
||||
|
||||
|
||||
REFUND("refund", "订单退款"),
|
||||
MEMBER_REFUND("memberRefund", "会员充值的退款"),
|
||||
;
|
||||
|
||||
private final String value;
|
||||
private final String msg;
|
||||
|
||||
PaymentPayTypeEnum(String value, String msg) {
|
||||
this.value = value;
|
||||
this.msg = msg;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.czg.order.service;
|
||||
|
||||
import com.mybatisflex.core.service.IService;
|
||||
import com.czg.order.entity.GbOrderDetail;
|
||||
|
||||
/**
|
||||
* 拼团订单详情表 服务层。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-16
|
||||
*/
|
||||
public interface GbOrderDetailService extends IService<GbOrderDetail> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.czg.order.service;
|
||||
|
||||
import com.czg.order.dto.CommonRefundDTO;
|
||||
import com.czg.order.dto.GbOrderQueryParam;
|
||||
import com.czg.order.dto.GroupJoinDTO;
|
||||
import com.czg.order.entity.GbOrder;
|
||||
import com.czg.order.vo.GbOrderDetailVO;
|
||||
import com.czg.order.vo.GbWareVO;
|
||||
import com.czg.resp.CzgResult;
|
||||
import com.mybatisflex.core.paginate.Page;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 拼团订单表 服务层。
|
||||
*
|
||||
* @author ww
|
||||
* @since 2025-12-16
|
||||
*/
|
||||
public interface GbOrderService extends IService<GbOrder> {
|
||||
|
||||
//列表 详细列表 detail的
|
||||
Page<GbOrderDetailVO> getGbOrderPage(GbOrderQueryParam param);
|
||||
|
||||
//拼团订单详情
|
||||
GbOrderDetailVO getGoodsRecordDetail(Long shopId, Long detailId);
|
||||
|
||||
//商品详情
|
||||
GbWareVO getWareDetail(Long shopId, Long wareId);
|
||||
|
||||
//成团/参团 支付
|
||||
CzgResult<Map<String, Object>> groupJoin(GroupJoinDTO param);
|
||||
|
||||
//核销
|
||||
boolean checkout(String verifyCode, Long shopId);
|
||||
|
||||
//支付回调 处理成团人数, 如果没团则创团
|
||||
void payCallBack(Long recordId, Long payOrderId);
|
||||
|
||||
|
||||
//用户申请退款
|
||||
boolean applyRefund(CommonRefundDTO param, Long userId);
|
||||
|
||||
//取消退款
|
||||
boolean cancelRefund(CommonRefundDTO param, Long userId, Long shopId);
|
||||
|
||||
//退款 同意退款/任务过期 自动退款
|
||||
boolean agreeRefund(CommonRefundDTO param, Long shopId);
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.czg.order.service;
|
||||
|
||||
import com.czg.order.dto.PointGoodsExchangeDTO;
|
||||
import com.czg.order.dto.PointGoodsRefundDTO;
|
||||
import com.czg.order.dto.CommonRefundDTO;
|
||||
import com.czg.order.dto.LtPayOtherDTO;
|
||||
import com.czg.resp.CzgResult;
|
||||
|
||||
import java.util.Map;
|
||||
@@ -14,16 +14,16 @@ import java.util.Map;
|
||||
public interface PointsGoodPayService {
|
||||
|
||||
//积分商品兑换
|
||||
CzgResult<Map<String, Object>> exchange(String ip, PointGoodsExchangeDTO param);
|
||||
CzgResult<Map<String, Object>> exchange(LtPayOtherDTO param);
|
||||
|
||||
//用户申请退款
|
||||
boolean applyRefund(PointGoodsRefundDTO param, Long userId);
|
||||
boolean applyRefund(CommonRefundDTO param, Long userId);
|
||||
|
||||
//取消退款
|
||||
boolean cancelRefund(PointGoodsRefundDTO param, Long userId, Long shopId);
|
||||
boolean cancelRefund(CommonRefundDTO param, Long userId, Long shopId);
|
||||
|
||||
//同意退款
|
||||
boolean agreeRefund(PointGoodsRefundDTO param, Long shopId);
|
||||
boolean agreeRefund(CommonRefundDTO param, Long shopId);
|
||||
|
||||
//支付回调 进行兑换内容发放
|
||||
void payCallBack(Long recordId, Long payOrderId);
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.czg.order.vo;
|
||||
|
||||
import com.czg.order.entity.GbOrderDetail;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 拼团订单详情VO
|
||||
*
|
||||
* @author ww
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class GbOrderDetailVO extends GbOrderDetail {
|
||||
/**
|
||||
* 商品信息
|
||||
*/
|
||||
private String wareJson;
|
||||
/**
|
||||
* 店铺名称
|
||||
*/
|
||||
private String shopName;
|
||||
/**
|
||||
* 店铺地址
|
||||
*/
|
||||
private String shopAddress;
|
||||
/**
|
||||
* 用户名称
|
||||
*/
|
||||
private String userName;
|
||||
/**
|
||||
* 用户手机号
|
||||
*/
|
||||
private String userPhone;
|
||||
|
||||
private List<GbOrderUserVO> users;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.czg.order.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class GbOrderUserVO {
|
||||
/**
|
||||
* 用户头像
|
||||
*/
|
||||
private String userAvatar;
|
||||
/**
|
||||
* 用户手机号
|
||||
*/
|
||||
private String userPhone;
|
||||
/**
|
||||
* 用户名称
|
||||
*/
|
||||
private String userName;
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.czg.order.vo;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* @author ww
|
||||
*/
|
||||
@Data
|
||||
public class GbWareOrderVO {
|
||||
/**
|
||||
* 用户头像
|
||||
*/
|
||||
private String avatar;
|
||||
/**
|
||||
* 用户昵称
|
||||
*/
|
||||
private String nickName;
|
||||
/**
|
||||
* 团单id
|
||||
*/
|
||||
private Long groupOrderId;
|
||||
/**
|
||||
* 团单编号
|
||||
*/
|
||||
private String groupOrderNo;
|
||||
/**
|
||||
* 现有人数(初始为1,即开团人)
|
||||
*/
|
||||
private Integer currentPeopleNum;
|
||||
|
||||
/**
|
||||
* 拼团结束时间(超时未成团则失败)
|
||||
*/
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime groupEndTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.czg.order.vo;
|
||||
|
||||
import com.czg.market.entity.GbWare;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author ww
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class GbWareVO extends GbWare {
|
||||
/**
|
||||
* 可核销门店 店铺名称
|
||||
*/
|
||||
private String shopName;
|
||||
/**
|
||||
* 可核销门店 店铺地址
|
||||
*/
|
||||
private String shopAddress;
|
||||
/**
|
||||
* 正在进行的 拼团单
|
||||
*/
|
||||
private List<GbWareOrderVO> gbOrderList;
|
||||
}
|
||||
Reference in New Issue
Block a user