|
|
|
@ -0,0 +1,113 @@
|
|
|
|
|
//package com.ibeetl.jlw.service.questionSettingQueue;
|
|
|
|
|
//
|
|
|
|
|
//import com.alibaba.fastjson.JSON;
|
|
|
|
|
//import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
//import com.alibaba.fastjson.TypeReference;
|
|
|
|
|
//import com.ibeetl.jlw.service.TeacherOpenCourseQuestionLogService;
|
|
|
|
|
//import lombok.RequiredArgsConstructor;
|
|
|
|
|
//import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
//import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
//import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
|
|
|
|
|
//import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
|
|
//import org.springframework.scheduling.annotation.Async;
|
|
|
|
|
//import org.springframework.scheduling.annotation.EnableAsync;
|
|
|
|
|
//import org.springframework.stereotype.Service;
|
|
|
|
|
//import redis.clients.jedis.Jedis;
|
|
|
|
|
//
|
|
|
|
|
//import java.lang.reflect.Type;
|
|
|
|
|
//import java.util.Set;
|
|
|
|
|
//import java.util.UUID;
|
|
|
|
|
//
|
|
|
|
|
///**
|
|
|
|
|
// * 功能描述: <br>
|
|
|
|
|
// * 作业、考试、章节练习自动延时交卷
|
|
|
|
|
// *
|
|
|
|
|
// * @Author: 87966
|
|
|
|
|
// * @Date: 2022/12/8 10:55
|
|
|
|
|
// */
|
|
|
|
|
//@Service
|
|
|
|
|
//@Slf4j
|
|
|
|
|
//@EnableAsync
|
|
|
|
|
//@RequiredArgsConstructor
|
|
|
|
|
//public class AutoSubmitQuestionSetting<T> {
|
|
|
|
|
//
|
|
|
|
|
// final private TeacherOpenCourseQuestionLogService teacherOpenCourseQuestionLogService;
|
|
|
|
|
//
|
|
|
|
|
// static class TaskItem<T> {
|
|
|
|
|
// public String id;
|
|
|
|
|
// public T msg;
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// // fastjson序列化对象中存在generic类型时,需要使用TypeReference
|
|
|
|
|
// private Type TaskType = new TypeReference<TaskItem<T>>() {
|
|
|
|
|
// }.getType();
|
|
|
|
|
//
|
|
|
|
|
// /**
|
|
|
|
|
// * 将指定延迟消费的消息放入延时队列
|
|
|
|
|
// *
|
|
|
|
|
// * @param msg
|
|
|
|
|
// */
|
|
|
|
|
// public void delay(StringRedisTemplate jedis, String queueKey, T msg, long outTime) {
|
|
|
|
|
// TaskItem<T> task = new TaskItem<T>();
|
|
|
|
|
// // 分配唯一的uuid
|
|
|
|
|
// task.id = UUID.randomUUID().toString();
|
|
|
|
|
// task.msg = msg;
|
|
|
|
|
// // fastjson 序列化
|
|
|
|
|
// String s = JSON.toJSONString(task);
|
|
|
|
|
// // 塞入延时队列, outTime 后再试
|
|
|
|
|
// jedis.opsForZSet().add(queueKey, System.currentTimeMillis() + outTime, s);
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// /**
|
|
|
|
|
// * 轮训zset获取到期的任务进行处理
|
|
|
|
|
// */
|
|
|
|
|
// @Async("taskExecutor")
|
|
|
|
|
// public void loop(RedisProperties.Jedis jedis, String queueKey) {
|
|
|
|
|
// while (!Thread.interrupted()) {
|
|
|
|
|
// // 只取一条
|
|
|
|
|
// Set<String> values = jedis.zrangeByScore(queueKey, 0, System.currentTimeMillis(), 0, 1);
|
|
|
|
|
// if (values.isEmpty()) {
|
|
|
|
|
// try {
|
|
|
|
|
// // 歇会继续
|
|
|
|
|
// Thread.sleep(500);
|
|
|
|
|
// } catch (InterruptedException e) {
|
|
|
|
|
// break;
|
|
|
|
|
// }
|
|
|
|
|
// continue;
|
|
|
|
|
// }
|
|
|
|
|
// String s = values.iterator().next();
|
|
|
|
|
// // 抢到了并移除该元素
|
|
|
|
|
// if (jedis.zrem(queueKey, s) > 0) {
|
|
|
|
|
// // fastjson反序列化
|
|
|
|
|
// TaskItem<T> task = JSON.parseObject(s, TaskType);
|
|
|
|
|
// this.handleMsg(task.msg);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// /**
|
|
|
|
|
// * 消费消息
|
|
|
|
|
// *
|
|
|
|
|
// * @param msg
|
|
|
|
|
// */
|
|
|
|
|
// private void handleMsg(T msg) {
|
|
|
|
|
// // 将订单信息的json字符串转成json对象
|
|
|
|
|
// JSONObject orderInfo = JSONObject.parseObject((String) msg);
|
|
|
|
|
// String tenant = orderInfo.getString("tenant");
|
|
|
|
|
// String flowNo = orderInfo.getString("flowNo");
|
|
|
|
|
// // 根据 tenant+flowNo 得到该订单
|
|
|
|
|
// Order order = orderDao.getByTenantAndFlowNo(tenant, flowNo);
|
|
|
|
|
// // 判断该订单的状态
|
|
|
|
|
// // 如果仍然为已提交(OrderStatusEnum.SUBMITTED),则将该订单状态自动修改为已取消(OrderStatusEnum.PAID)
|
|
|
|
|
// OrderState dbOrderState = orderStateDao.findByTenantAndOwner(tenant, order.getUuid());
|
|
|
|
|
// OrderStatusEnum dbState = dbOrderState.getState();
|
|
|
|
|
// if (OrderStatusEnum.SUBMITTED == dbState) {
|
|
|
|
|
// try {
|
|
|
|
|
// orderService.cancel(tenant, flowNo, "订单超时未支付自动取消订单");
|
|
|
|
|
// } catch (Exception e) {
|
|
|
|
|
// log.error("订单自动取消失败,flowNo={}", flowNo);
|
|
|
|
|
// e.printStackTrace();
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//}
|