import { Op } from 'sequelize'; import TrackTask, { TrackTaskCreationAttributes } from '../models/trackTask'; import TrackTeskDetail, { TrackTaskDetailCreationAttributes, } from '../models/trackTaskDetail'; import sequelize from '../sequelizeInstance'; export async function getUnfinishTrackTask() { const task = await TrackTask.findOne({ where: { status: 0 }, }).catch((err) => { console.dir(err); }); return task ? task.dataValues : null; } export async function createTrackTask( data: TrackTaskCreationAttributes, details: TrackTaskDetailCreationAttributes[] ) { const t = await sequelize.transaction(); try { await TrackTask.update( { status: 2, }, { where: { status: { [Op.or]: [0, 1] }, }, transaction: t, } ); // 保存任务 const task = await TrackTask.create(data, { transaction: t }); details.forEach((item) => { item.trackTaskId = task.id; }); await TrackTeskDetail.bulkCreate(details, { transaction: t }); await t.commit(); return task.dataValues; } catch (error) { await t.rollback(); return Promise.reject(error); } }