Commit ae45b327 authored by tangtuo's avatar tangtuo

新增删除超时草稿的定时任务

parent d1881a4b
......@@ -35,4 +35,12 @@ public interface DraftService extends IService<Draft> {
* @return
*/
Integer saveDraft(DraftDTO draft);
/**
* 查询超时的草稿
*
* @param minutes
* @return
*/
List<Draft> getTimeoutDrafts(int minutes);
}
......@@ -19,6 +19,8 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.Duration;
import java.time.Instant;
import java.util.List;
/**
......@@ -108,4 +110,12 @@ public class DraftServiceImpl extends ServiceImpl<DraftMapper, Draft> implements
this.saveOrUpdate(d);
return d.getId();
}
@Override
public List<Draft> getTimeoutDrafts(int minutes) {
Instant instant = Instant.now().minus(Duration.ofMinutes(minutes));
QueryWrapper<Draft> queryWrapper = new QueryWrapper<>();
queryWrapper.le("create_date", instant);
return this.list();
}
}
......@@ -145,6 +145,7 @@ public class NftServiceImpl extends ServiceImpl<NftMapper, Nft> implements NftSe
}
// 修改nft的发行状态为发行中
nft.setPublishStatus(PublishStatus.PUBLISHING.getCode());
nft.setPublishTime(new Date());
this.updateById(nft);
// 给mq发送一条消息,异步确认发行结果
NftPublishMsg nftPublishMsg = new NftPublishMsg(hash, id, tokenId);
......
......@@ -73,7 +73,6 @@ public class NftListener {
}
nft.setNftHash(realHash);
nft.setTokenId(msg.getTokenId());
nft.setPublishTime(new Date());
nft.setPublishStatus(PublishStatus.SUSSED.getCode());
nftService.updateById(nft);
// 如果用户是第一次发行作品,把用户的isPublish修改成1,并清空用户统计的缓存信息
......
package com.fzm.portal.schedule;
import com.fzm.common.entity.Draft;
import com.fzm.common.service.DraftService;
import lombok.extern.slf4j.Slf4j;
import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* @author tangtuo
* @date 2022/2/10 19:39
*/
@Slf4j
@Component
public class DraftTask {
@Resource
private DraftService draftService;
@Resource
private Redisson redisson;
/**
* 删除创建时间大于7天的草稿
*/
@Scheduled(cron = "0 */15 * * * ?")
public void deleteTimeoutDraft() throws InterruptedException {
RLock lock = redisson.getLock("delete-draft");
// 加锁,避免集群环境下多个节点同事运行此定时任务
if (!lock.tryLock(30, TimeUnit.SECONDS)) {
log.warn("删除超时草稿的任务正在运行中");
return;
}
try {
// 查询创建时间大于一周的草稿
List<Draft> list = draftService.getTimeoutDrafts(60 * 24 * 7);
for (Draft draft : list) {
Integer id = draft.getId();
log.info("即将删掉草稿,草稿id为 : {}", id);
draftService.delete(id);
}
} finally {
lock.unlock();
}
}
}
......@@ -41,12 +41,12 @@ public class PayTask {
/**
* 定时关单的任务
*/
@Scheduled(cron = "0 */1 * * * ?")
@Scheduled(cron = "0 */5 * * * ?")
public void closeOrder() throws InterruptedException {
RLock lock = redisson.getLock("close-order");
// 加锁,避免集群环境下多个节点同事运行此定时任务
if (!lock.tryLock(30, TimeUnit.SECONDS)) {
log.warn("任务正在运行中");
log.warn("关单任务正在运行中");
return;
}
try {
......
This diff is collapsed.
This diff is collapsed.
......@@ -599,20 +599,54 @@ CREATE TABLE `tb_banner` (
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
-- v2.3.0
alter table tb_nft add column publish_status TINYINT(1) not null default 0 comment '发行状态 0-待支付 1-发行中 2-发行成功 3-发行失败' after publish_time;
update tb_nft set publish_status =2 where nft_hash !='';
DROP TABLE IF EXISTS `tb_order`;
CREATE TABLE `tb_order` (
`id` bigint(20) NOT NULL,
`order_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '订单名称',
`pay_scene` tinyint(1) NOT NULL COMMENT '支付场景 1-nft发行 2-版权申请',
`product_id` int(11) NOT NULL COMMENT '产品id nft主键或者版权主键',
`user_id` int(11) NOT NULL COMMENT '用户id',
`fee` bigint(20) NOT NULL COMMENT '订单价格-单位(分)',
`order_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0-支付中 1-支付成功 2-订单已关闭 3-已退款',
`prepay_id` varchar(128) NOT NULL COMMENT '微信预支付交易会话标识',
`order_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0-支付中 1-支付成功 2-订单已关闭 3-已退款',
`pay_type` tinyint(1) NULL DEFAULT NULL COMMENT '支付方式 1-微信支付 2-支付宝支付',
`create_date` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_date` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0),
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
CREATE TABLE `tb_payment` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`order_id` bigint(20) NOT NULL COMMENT '订单id',
`transaction_id` varchar(64) NOT NULL COMMENT '微信支付订单号',
`trade_type` varchar(16) NOT NULL COMMENT 'JSAPI: 公众号支付; NATIVE:扫码支付 ; APP:APP支付 ; MICROPAY:付款码支付 ; MWEB:H5支付 ; FACEPAY:刷脸支付',
`total_fee` int(11) NOT NULL COMMENT '金额',
`is_refund` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否有退款,0-否 1-是',
`success_time` varchar(32) NOT NULL DEFAULT '' COMMENT '支付成功时间',
`content` text COMMENT '支付通知数据',
`create_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- v2.3.0
alter table tb_nft add column publish_status TINYINT(1) not null default 1 comment '发行状态 0-待支付 1-发行中 2-发行成功 3-发行失败' after publish_time;
update tb_nft set publish_status =2 where nft_hash !='';
\ No newline at end of file
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
CREATE TABLE `tb_refund` (
`id` bigint(20) NOT NULL COMMENT '商户退款单号',
`order_id` bigint(20) NOT NULL COMMENT '订单id',
`transaction_id` varchar(32) NOT NULL DEFAULT '' COMMENT '微信支付订单号',
`fee` int(11) NOT NULL COMMENT '退款金额',
`refund_id` varchar(32) NOT NULL DEFAULT '' COMMENT '微信支付退款单号',
`refund_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1- 退款中 2-退款成功 3-退款失败',
`user_received_account` varchar(64) NOT NULL DEFAULT '' COMMENT '取当前退款单的退款入账方',
`success_time` varchar(32) NOT NULL DEFAULT '' COMMENT '支付成功时间',
`content` text COMMENT '支付通知数据',
`channel` tinyint(1) NOT NULL DEFAULT '1' COMMENT '退款发起渠道 1-用户发起 2-后台运营发起',
`create_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment