trackTask.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { Op } from 'sequelize';
  2. import TrackTask, { TrackTaskCreationAttributes } from '../models/trackTask';
  3. import TrackTeskDetail, {
  4. TrackTaskDetailCreationAttributes,
  5. } from '../models/trackTaskDetail';
  6. import sequelize from '../sequelizeInstance';
  7. export async function getUnfinishTrackTask() {
  8. const task = await TrackTask.findOne({
  9. where: { status: 0 },
  10. }).catch((err) => {
  11. console.dir(err);
  12. });
  13. return task ? task.dataValues : null;
  14. }
  15. export async function createTrackTask(
  16. data: TrackTaskCreationAttributes,
  17. details: TrackTaskDetailCreationAttributes[]
  18. ) {
  19. const t = await sequelize.transaction();
  20. try {
  21. await TrackTask.update(
  22. {
  23. status: 2,
  24. },
  25. {
  26. where: {
  27. status: { [Op.or]: [0, 1] },
  28. },
  29. transaction: t,
  30. }
  31. );
  32. // 保存任务
  33. const task = await TrackTask.create(data, { transaction: t });
  34. details.forEach((item) => {
  35. item.trackTaskId = task.id;
  36. });
  37. await TrackTeskDetail.bulkCreate(details, { transaction: t });
  38. await t.commit();
  39. return task.dataValues;
  40. } catch (error) {
  41. await t.rollback();
  42. return Promise.reject(error);
  43. }
  44. }