This commit is contained in:
张成
2025-11-24 13:23:42 +08:00
commit 5d7444cd65
156 changed files with 50653 additions and 0 deletions

288
api/model/chat_records.js Normal file
View File

@@ -0,0 +1,288 @@
const Sequelize = require('sequelize');
/**
* 聊天记录表模型
* 记录与HR的聊天内容和效果
*/
module.exports = (db) => {
const chat_records = db.define("chat_records", {
// 聊天基本信息
sn_code: {
comment: '设备SN码',
type: Sequelize.STRING(50),
allowNull: false,
defaultValue: ''
},
platform: {
comment: '平台: boss-Boss直聘, liepin-猎聘',
type: Sequelize.STRING(20),
allowNull: false,
defaultValue: 'boss'
},
// 岗位关联
jobId: {
comment: '岗位ID',
type: Sequelize.STRING(100),
allowNull: true,
defaultValue: ''
},
encryptBossId: {
comment: 'Boss加密ID',
type: Sequelize.STRING(100),
allowNull: true,
defaultValue: ''
},
jobTitle: {
comment: '岗位名称',
type: Sequelize.STRING(200),
allowNull: true,
defaultValue: ''
},
companyName: {
comment: '公司名称',
type: Sequelize.STRING(200),
allowNull: true,
defaultValue: ''
},
// HR信息
hrName: {
comment: 'HR姓名',
type: Sequelize.STRING(50),
allowNull: true,
defaultValue: ''
},
hrTitle: {
comment: 'HR职位',
type: Sequelize.STRING(50),
allowNull: true,
defaultValue: ''
},
hrId: {
comment: 'HR ID',
type: Sequelize.STRING(100),
allowNull: true,
defaultValue: ''
},
// 聊天内容
chatType: {
comment: '聊天类型: greeting-打招呼, follow_up-跟进, interview-面试邀约, reply-回复',
type: Sequelize.STRING(20),
allowNull: false,
defaultValue: 'greeting'
},
direction: {
comment: '消息方向: sent-发送, received-接收',
type: Sequelize.STRING(20),
allowNull: false,
defaultValue: 'sent'
},
content: {
comment: '聊天内容',
type: Sequelize.TEXT,
allowNull: false,
defaultValue: ''
},
contentType: {
comment: '内容类型: text-文本, image-图片, file-文件',
type: Sequelize.STRING(20),
allowNull: true,
defaultValue: 'text'
},
// AI生成信息
isAiGenerated: {
comment: '是否AI生成',
type: Sequelize.BOOLEAN,
allowNull: true,
defaultValue: false
},
aiPrompt: {
comment: 'AI生成的提示词',
type: Sequelize.TEXT,
allowNull: true,
defaultValue: ''
},
aiModel: {
comment: 'AI模型名称',
type: Sequelize.STRING(50),
allowNull: true,
defaultValue: ''
},
// 发送状态
sendStatus: {
comment: '发送状态: pending-待发送, sending-发送中, sent-已发送, failed-发送失败',
type: Sequelize.STRING(20),
allowNull: true,
defaultValue: 'pending'
},
sendTime: {
comment: '发送时间',
type: Sequelize.DATE,
allowNull: true
},
receiveTime: {
comment: '接收时间',
type: Sequelize.DATE,
allowNull: true
},
// 回复信息
hasReply: {
comment: '是否有回复',
type: Sequelize.BOOLEAN,
allowNull: true,
defaultValue: false
},
replyTime: {
comment: '回复时间',
type: Sequelize.DATE,
allowNull: true
},
replyContent: {
comment: '回复内容',
type: Sequelize.TEXT,
allowNull: true,
defaultValue: ''
},
replyDuration: {
comment: '回复时长(分钟)',
type: Sequelize.INTEGER,
allowNull: true,
defaultValue: 0
},
// 面试邀约信息
isInterviewInvitation: {
comment: '是否包含面试邀约',
type: Sequelize.BOOLEAN,
allowNull: true,
defaultValue: false
},
interviewTime: {
comment: '面试时间',
type: Sequelize.DATE,
allowNull: true
},
interviewLocation: {
comment: '面试地点',
type: Sequelize.STRING(200),
allowNull: true,
defaultValue: ''
},
interviewType: {
comment: '面试类型: online-线上, offline-线下',
type: Sequelize.STRING(20),
allowNull: true,
defaultValue: ''
},
interviewStatus: {
comment: '面试状态: pending-待确认, confirmed-已确认, completed-已完成, cancelled-已取消',
type: Sequelize.STRING(20),
allowNull: true,
defaultValue: ''
},
// 效果评估
effectScore: {
comment: '效果评分(0-100)',
type: Sequelize.INTEGER,
allowNull: true,
defaultValue: 0
},
sentiment: {
comment: '情感倾向: positive-正面, neutral-中性, negative-负面',
type: Sequelize.STRING(20),
allowNull: true,
defaultValue: 'neutral'
},
// 会话信息
conversationId: {
comment: '会话ID(同一个岗位的聊天属于一个会话)',
type: Sequelize.STRING(50),
allowNull: true,
defaultValue: ''
},
messageIndex: {
comment: '消息序号(会话内的消息顺序)',
type: Sequelize.INTEGER,
allowNull: true,
defaultValue: 0
},
// 关联信息
taskId: {
comment: '关联任务ID',
type: Sequelize.STRING(50),
allowNull: true,
defaultValue: ''
},
// 其他信息
originalData: {
comment: '原始数据(JSON)',
type: Sequelize.TEXT,
allowNull: true,
defaultValue: ''
},
errorMessage: {
comment: '错误信息',
type: Sequelize.TEXT,
allowNull: true,
defaultValue: ''
},
notes: {
comment: '备注',
type: Sequelize.TEXT,
allowNull: true,
defaultValue: ''
},
}, {
timestamps: false,
indexes: [
{
unique: false,
fields: ['sn_code']
},
{
unique: false,
fields: ['jobId']
},
{
unique: false,
fields: ['encryptBossId']
},
{
unique: false,
fields: ['conversationId']
},
{
unique: false,
fields: ['chatType']
},
{
unique: false,
fields: ['sendStatus']
},
{
unique: false,
fields: ['hasReply']
},
]
});
//chat_records.sync({ force: true });
return chat_records
};