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="status" property="status"/>
<result column="out_trade_no" property="outTradeNo"/>
<result column="out_trade_time" property="outTradeTime"/>
<result column="biz_id" property="bizId"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
@ -49,7 +50,7 @@
<update id="updateOrderStatus2COMPLETE" parameterType="edu.whut.infrastructure.dao.po.GroupBuyOrderList">
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}
</update>

View File

@ -15,6 +15,8 @@
<result column="complete_count" property="completeCount"/>
<result column="lock_count" property="lockCount"/>
<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="update_time" property="updateTime"/>
</resultMap>
@ -22,10 +24,11 @@
<insert id="insert" parameterType="edu.whut.infrastructure.dao.po.GroupBuyOrder">
insert into group_buy_order(
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(
#{teamId}, #{activityId}, #{source}, #{channel}, #{originalPrice},
#{deductionPrice}, #{payPrice}, #{targetCount}, #{completeCount}, #{lockCount}, 0, now(), now()
#{deductionPrice}, #{payPrice}, #{targetCount}, #{completeCount}, #{lockCount}, 0, #{validStartTime}, #{validEndTime} ,now(), now()
)
</insert>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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