7.3 添加拼团有效时间:倒计时

This commit is contained in:
zhangsan 2025-07-03 18:48:44 +08:00
parent ca9faa403b
commit 90345c7171
9 changed files with 42 additions and 4 deletions

View File

@ -17,6 +17,7 @@
<result column="deduction_price" property="deductionPrice"/> <result column="deduction_price" property="deductionPrice"/>
<result column="status" property="status"/> <result column="status" property="status"/>
<result column="out_trade_no" property="outTradeNo"/> <result column="out_trade_no" property="outTradeNo"/>
<result column="out_trade_time" property="outTradeTime"/>
<result column="biz_id" property="bizId"/> <result column="biz_id" property="bizId"/>
<result column="create_time" property="createTime"/> <result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/> <result column="update_time" property="updateTime"/>
@ -49,7 +50,7 @@
<update id="updateOrderStatus2COMPLETE" parameterType="edu.whut.infrastructure.dao.po.GroupBuyOrderList"> <update id="updateOrderStatus2COMPLETE" parameterType="edu.whut.infrastructure.dao.po.GroupBuyOrderList">
update group_buy_order_list update group_buy_order_list
set status = 1, update_time = now() set status = 1, out_trade_time = #{outTradeTime}, update_time = now()
where out_trade_no = #{outTradeNo} and user_id = #{userId} where out_trade_no = #{outTradeNo} and user_id = #{userId}
</update> </update>

View File

@ -15,6 +15,8 @@
<result column="complete_count" property="completeCount"/> <result column="complete_count" property="completeCount"/>
<result column="lock_count" property="lockCount"/> <result column="lock_count" property="lockCount"/>
<result column="status" property="status"/> <result column="status" property="status"/>
<result column="valid_start_time" property="validStartTime"/>
<result column="valid_end_time" property="validEndTime"/>
<result column="create_time" property="createTime"/> <result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/> <result column="update_time" property="updateTime"/>
</resultMap> </resultMap>
@ -22,10 +24,11 @@
<insert id="insert" parameterType="edu.whut.infrastructure.dao.po.GroupBuyOrder"> <insert id="insert" parameterType="edu.whut.infrastructure.dao.po.GroupBuyOrder">
insert into group_buy_order( insert into group_buy_order(
team_id, activity_id, source, channel, original_price, team_id, activity_id, source, channel, original_price,
deduction_price, pay_price, target_count, complete_count, lock_count, status, create_time, update_time deduction_price, pay_price, target_count, complete_count,
lock_count, status, valid_start_time, valid_end_time, create_time, update_time
) values( ) values(
#{teamId}, #{activityId}, #{source}, #{channel}, #{originalPrice}, #{teamId}, #{activityId}, #{source}, #{channel}, #{originalPrice},
#{deductionPrice}, #{payPrice}, #{targetCount}, #{completeCount}, #{lockCount}, 0, now(), now() #{deductionPrice}, #{payPrice}, #{targetCount}, #{completeCount}, #{lockCount}, 0, #{validStartTime}, #{validEndTime} ,now(), now()
) )
</insert> </insert>

View File

@ -5,6 +5,8 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.Date;
/** /**
* 拼团组队实体对象 * 拼团组队实体对象
*/ */
@ -26,5 +28,9 @@ public class GroupBuyTeamEntity {
private Integer lockCount; private Integer lockCount;
/** 状态0-拼单中、1-完成、2-失败) */ /** 状态0-拼单中、1-完成、2-失败) */
private GroupBuyOrderStatusEnumVO status; private GroupBuyOrderStatusEnumVO status;
/** 拼团开始时间 - 参与拼团时间 */
private Date validStartTime;
/** 拼团结束时间 - 拼团有效时长 */
private Date validEndTime;
} }

View File

@ -26,6 +26,8 @@ public class PayActivityEntity {
private Date startTime; private Date startTime;
/** 拼团结束时间 */ /** 拼团结束时间 */
private Date endTime; private Date endTime;
/** 拼团时长(分钟)*/
private Integer validTime;
/** 目标数量 */ /** 目标数量 */
private Integer targetCount; private Integer targetCount;

View File

@ -5,6 +5,8 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.Date;
/** /**
* 交易支付订单实体对象 * 交易支付订单实体对象
*/ */
@ -22,5 +24,6 @@ public class TradePaySuccessEntity {
private String userId; private String userId;
/** 外部交易单号 */ /** 外部交易单号 */
private String outTradeNo; private String outTradeNo;
/** 外部交易时间 */
private Date outTradeTime;
} }

View File

@ -15,6 +15,7 @@ import edu.whut.infrastructure.dao.po.GroupBuyActivity;
import edu.whut.infrastructure.dao.po.GroupBuyOrder; import edu.whut.infrastructure.dao.po.GroupBuyOrder;
import edu.whut.infrastructure.dao.po.GroupBuyOrderList; import edu.whut.infrastructure.dao.po.GroupBuyOrderList;
import edu.whut.infrastructure.dao.po.NotifyTask; import edu.whut.infrastructure.dao.po.NotifyTask;
import edu.whut.infrastructure.dcc.DCCService;
import edu.whut.types.common.Constants; import edu.whut.types.common.Constants;
import edu.whut.types.enums.ActivityStatusEnumVO; import edu.whut.types.enums.ActivityStatusEnumVO;
import edu.whut.types.enums.GroupBuyOrderStatusEnumVO; import edu.whut.types.enums.GroupBuyOrderStatusEnumVO;
@ -28,6 +29,8 @@ import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -49,6 +52,8 @@ public class TradeRepository implements ITradeRepository {
private final INotifyTaskDao notifyTaskDao; private final INotifyTaskDao notifyTaskDao;
private final DCCService dccService;
/** /**
* 根据外部交易号 & 用户id 查询未支付的锁单记录用于幂等 * 根据外部交易号 & 用户id 查询未支付的锁单记录用于幂等
*/ */
@ -96,6 +101,11 @@ public class TradeRepository implements ITradeRepository {
if (StringUtils.isBlank(teamId)) { if (StringUtils.isBlank(teamId)) {
// 新建团队随机 8 位数字作 teamId示例中用 RandomStringUtils线上可换雪花算法等 // 新建团队随机 8 位数字作 teamId示例中用 RandomStringUtils线上可换雪花算法等
teamId = RandomStringUtils.randomNumeric(8); teamId = RandomStringUtils.randomNumeric(8);
// 日期处理
Date currentDate = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(currentDate);
calendar.add(Calendar.MINUTE, activity.getValidTime());
// 构建拼团订单 // 构建拼团订单
GroupBuyOrder orderPo = GroupBuyOrder.builder() GroupBuyOrder orderPo = GroupBuyOrder.builder()
@ -109,6 +119,8 @@ public class TradeRepository implements ITradeRepository {
.targetCount(activity.getTargetCount()) .targetCount(activity.getTargetCount())
.completeCount(0) .completeCount(0)
.lockCount(1) // 首单已锁定 .lockCount(1) // 首单已锁定
.validStartTime(currentDate)
.validEndTime(calendar.getTime())
.build(); .build();
groupBuyOrderDao.insert(orderPo); groupBuyOrderDao.insert(orderPo);
@ -220,6 +232,8 @@ public class TradeRepository implements ITradeRepository {
.completeCount(groupBuyOrder.getCompleteCount()) .completeCount(groupBuyOrder.getCompleteCount())
.lockCount(groupBuyOrder.getLockCount()) .lockCount(groupBuyOrder.getLockCount())
.status(GroupBuyOrderStatusEnumVO.valueOf(groupBuyOrder.getStatus())) .status(GroupBuyOrderStatusEnumVO.valueOf(groupBuyOrder.getStatus()))
.validStartTime(groupBuyOrder.getValidStartTime())
.validEndTime(groupBuyOrder.getValidEndTime())
.build(); .build();
} }
@ -245,6 +259,8 @@ public class TradeRepository implements ITradeRepository {
GroupBuyOrderList req = new GroupBuyOrderList(); GroupBuyOrderList req = new GroupBuyOrderList();
req.setUserId(user.getUserId()); req.setUserId(user.getUserId());
req.setOutTradeNo(payOK.getOutTradeNo()); req.setOutTradeNo(payOK.getOutTradeNo());
req.setOutTradeTime(payOK.getOutTradeTime());
//更新订单状态到已完成 //更新订单状态到已完成
int rows = groupBuyOrderListDao.updateOrderStatus2COMPLETE(req); int rows = groupBuyOrderListDao.updateOrderStatus2COMPLETE(req);
if (rows != 1) { if (rows != 1) {

View File

@ -41,6 +41,10 @@ public class GroupBuyOrder {
private Integer lockCount; private Integer lockCount;
/** 状态0-拼单中、1-完成、2-失败) */ /** 状态0-拼单中、1-完成、2-失败) */
private Integer status; private Integer status;
/** 拼团开始时间 - 参与拼团时间 */
private Date validStartTime;
/** 拼团结束时间 - 拼团有效时长 */
private Date validEndTime;
/** 创建时间 */ /** 创建时间 */
private Date createTime; private Date createTime;
/** 更新时间 */ /** 更新时间 */

View File

@ -45,6 +45,8 @@ public class GroupBuyOrderList {
private Integer status; private Integer status;
/** 外部交易单号-确保外部调用唯一幂等 */ /** 外部交易单号-确保外部调用唯一幂等 */
private String outTradeNo; private String outTradeNo;
/** 外部交易时间 */
private Date outTradeTime;
/** 唯一业务ID */ /** 唯一业务ID */
private String bizId; private String bizId;
/** 创建时间 */ /** 创建时间 */

View File

@ -131,6 +131,7 @@ public class MarketTradeController implements IMarketTradeService {
.activityName(discountVO.getActivityName()) .activityName(discountVO.getActivityName())
.startTime(discountVO.getStartTime()) .startTime(discountVO.getStartTime())
.endTime(discountVO.getEndTime()) .endTime(discountVO.getEndTime())
.validTime(discountVO.getValidTime())
.targetCount(discountVO.getTarget()) .targetCount(discountVO.getTarget())
.build(), .build(),
PayDiscountEntity.builder() PayDiscountEntity.builder()