191 lines
4.4 KiB
JavaScript
191 lines
4.4 KiB
JavaScript
const Sequelize = require('sequelize');
|
||
|
||
/**
|
||
* 任务状态表模型
|
||
* 记录每个设备的任务执行状态和历史
|
||
*/
|
||
module.exports = (db) => {
|
||
const task_status= db.define("task_status", {
|
||
// 框架自动创建自增id字段作为主键
|
||
// 任务基本信息
|
||
sn_code: {
|
||
comment: '设备SN码',
|
||
type: Sequelize.STRING(50),
|
||
allowNull: false,
|
||
defaultValue: ''
|
||
},
|
||
taskType: {
|
||
comment: '任务类型: get_login_qr_code-登录检查, get_resume-获取简历, search_jobs-搜索岗位, get_job_list-获取岗位列表, auto_deliver-自动投递, chat-聊天, apply-投递',
|
||
type: Sequelize.STRING(50),
|
||
allowNull: false,
|
||
defaultValue: ''
|
||
},
|
||
taskName: {
|
||
comment: '任务名称',
|
||
type: Sequelize.STRING(200),
|
||
allowNull: true,
|
||
defaultValue: ''
|
||
},
|
||
// 任务状态
|
||
status: {
|
||
comment: '任务状态: pending-待执行, running-执行中, completed-已完成, failed-失败, timeout-超时, cancelled-已取消',
|
||
type: Sequelize.STRING(20),
|
||
allowNull: false,
|
||
defaultValue: 'pending'
|
||
},
|
||
progress: {
|
||
comment: '任务进度(0-100)',
|
||
type: Sequelize.INTEGER,
|
||
allowNull: true,
|
||
defaultValue: 0
|
||
},
|
||
currentStep: {
|
||
comment: '当前执行步骤',
|
||
type: Sequelize.STRING(100),
|
||
allowNull: true,
|
||
defaultValue: ''
|
||
},
|
||
totalSteps: {
|
||
comment: '总步骤数',
|
||
type: Sequelize.INTEGER,
|
||
allowNull: true,
|
||
defaultValue: 0
|
||
},
|
||
// 任务参数
|
||
taskParams: {
|
||
comment: '任务参数(JSON)',
|
||
type: Sequelize.TEXT,
|
||
allowNull: true,
|
||
defaultValue: ''
|
||
},
|
||
// 执行结果
|
||
result: {
|
||
comment: '执行结果(JSON)',
|
||
type: Sequelize.TEXT,
|
||
allowNull: true,
|
||
defaultValue: ''
|
||
},
|
||
errorMessage: {
|
||
comment: '错误信息',
|
||
type: Sequelize.TEXT,
|
||
allowNull: true,
|
||
defaultValue: ''
|
||
},
|
||
errorStack: {
|
||
comment: '错误堆栈',
|
||
type: Sequelize.TEXT,
|
||
allowNull: true,
|
||
defaultValue: ''
|
||
},
|
||
// 重试信息
|
||
retryCount: {
|
||
comment: '重试次数',
|
||
type: Sequelize.INTEGER,
|
||
allowNull: true,
|
||
defaultValue: 0
|
||
},
|
||
maxRetries: {
|
||
comment: '最大重试次数',
|
||
type: Sequelize.INTEGER,
|
||
allowNull: true,
|
||
defaultValue: 3
|
||
},
|
||
startTime: {
|
||
comment: '开始执行时间',
|
||
type: Sequelize.DATE,
|
||
allowNull: true
|
||
},
|
||
endTime: {
|
||
comment: '结束时间',
|
||
type: Sequelize.DATE,
|
||
allowNull: true
|
||
},
|
||
duration: {
|
||
comment: '执行时长(毫秒)',
|
||
type: Sequelize.INTEGER,
|
||
allowNull: true,
|
||
defaultValue: 0
|
||
},
|
||
// 统计信息
|
||
jobsSearched: {
|
||
comment: '搜索的岗位数',
|
||
type: Sequelize.INTEGER,
|
||
allowNull: true,
|
||
defaultValue: 0
|
||
},
|
||
jobsFiltered: {
|
||
comment: '筛选后的岗位数',
|
||
type: Sequelize.INTEGER,
|
||
allowNull: true,
|
||
defaultValue: 0
|
||
},
|
||
chatsProcessed: {
|
||
comment: '处理的聊天数',
|
||
type: Sequelize.INTEGER,
|
||
allowNull: true,
|
||
defaultValue: 0
|
||
},
|
||
appliesSubmitted: {
|
||
comment: '投递的简历数',
|
||
type: Sequelize.INTEGER,
|
||
allowNull: true,
|
||
defaultValue: 0
|
||
},
|
||
// 其他信息
|
||
platform: {
|
||
comment: '平台: boss-Boss直聘, liepin-猎聘',
|
||
type: Sequelize.STRING(20),
|
||
allowNull: true,
|
||
defaultValue: 'boss'
|
||
},
|
||
keyword: {
|
||
comment: '搜索关键词',
|
||
type: Sequelize.STRING(50),
|
||
allowNull: true,
|
||
defaultValue: ''
|
||
},
|
||
priority: {
|
||
comment: '任务优先级(1-10,数字越大优先级越高)',
|
||
type: Sequelize.INTEGER,
|
||
allowNull: true,
|
||
defaultValue: 5
|
||
},
|
||
scheduledTime: {
|
||
comment: '计划执行时间',
|
||
type: Sequelize.DATE,
|
||
allowNull: true
|
||
},
|
||
notes: {
|
||
comment: '备注',
|
||
type: Sequelize.TEXT,
|
||
allowNull: true,
|
||
defaultValue: ''
|
||
}
|
||
}, {
|
||
timestamps: false,
|
||
indexes: [
|
||
{
|
||
unique: false,
|
||
fields: ['sn_code']
|
||
},
|
||
{
|
||
unique: false,
|
||
fields: ['status']
|
||
},
|
||
{
|
||
unique: false,
|
||
fields: ['taskType']
|
||
},
|
||
{
|
||
unique: false,
|
||
fields: ['priority']
|
||
}
|
||
]
|
||
});
|
||
|
||
// task_status.sync({ force: true });
|
||
|
||
return task_status
|
||
|
||
};
|