You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
4.6 KiB
155 lines
4.6 KiB
package allhelp
|
|
|
|
import (
|
|
"yunyan/comm"
|
|
"yunyan/lego/core"
|
|
"yunyan/lego/core/cbase"
|
|
"yunyan/lego/sys/mysql"
|
|
"yunyan/pb"
|
|
"time"
|
|
)
|
|
|
|
type modelComp struct {
|
|
cbase.ModuleCompBase
|
|
module *Allhelp
|
|
}
|
|
|
|
func (this *modelComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, opt core.IModuleOptions) (err error) {
|
|
this.ModuleCompBase.Init(service, module, comp, opt)
|
|
this.module = module.(*Allhelp)
|
|
if err = mysql.CreateTable(comm.TableAllhelpTask, &pb.DBTask{}); err != nil {
|
|
this.module.Errorln(err)
|
|
}
|
|
if err = mysql.CreateTable(comm.TableChatSummary, &pb.DBChatSummary{}); err != nil {
|
|
this.module.Errorln(err)
|
|
}
|
|
return
|
|
}
|
|
|
|
// ===== 定时提醒任务 =====
|
|
|
|
func (this *modelComp) addTask(task *pb.DBTask) error {
|
|
now := time.Now().Unix()
|
|
task.CreateTime = now
|
|
task.UpdateTime = now
|
|
task.Status = pb.TaskStatus_TaskStatus_Pending
|
|
return mysql.Insert(comm.TableAllhelpTask, task)
|
|
}
|
|
|
|
func (this *modelComp) getTasksByUid(uid string, status int32, page, size int32) ([]*pb.DBTask, int64, error) {
|
|
var tasks []*pb.DBTask
|
|
var total int64
|
|
|
|
tx := mysql.Table(comm.TableAllhelpTask).Where("uid = ?", uid)
|
|
if status >= 0 {
|
|
tx = tx.Where("status = ?", status)
|
|
}
|
|
if err := tx.Count(&total).Error; err != nil {
|
|
return nil, 0, err
|
|
}
|
|
|
|
offset := (page - 1) * size
|
|
if offset < 0 {
|
|
offset = 0
|
|
}
|
|
if err := tx.Order("create_time DESC").Offset(int(offset)).Limit(int(size)).Find(&tasks).Error; err != nil {
|
|
return nil, 0, err
|
|
}
|
|
return tasks, total, nil
|
|
}
|
|
|
|
func (this *modelComp) getTaskById(id uint64) (*pb.DBTask, error) {
|
|
task := &pb.DBTask{}
|
|
err := mysql.FindOne(comm.TableAllhelpTask, task, "id = ?", id)
|
|
return task, err
|
|
}
|
|
|
|
func (this *modelComp) updateTaskStatus(id uint64, status pb.TaskStatus) error {
|
|
now := time.Now().Unix()
|
|
updates := map[string]interface{}{
|
|
"status": int32(status),
|
|
"update_time": now,
|
|
}
|
|
if status == pb.TaskStatus_TaskStatus_Completed || status == pb.TaskStatus_TaskStatus_Cancelled {
|
|
updates["finish_time"] = now
|
|
}
|
|
return mysql.Table(comm.TableAllhelpTask).Where("id = ?", id).Updates(updates).Error
|
|
}
|
|
|
|
// ===== 每日聊天总结 =====
|
|
|
|
// upsertChatSummary 按 (uid, summary_date) 覆盖写入;新记录返回 rec.Id 被赋值
|
|
func (this *modelComp) upsertChatSummary(rec *pb.DBChatSummary) error {
|
|
now := time.Now().Unix()
|
|
rec.UpdateTime = now
|
|
existing := &pb.DBChatSummary{}
|
|
err := mysql.FindOne(comm.TableChatSummary, existing, "uid = ? AND summary_date = ?", rec.Uid, rec.SummaryDate)
|
|
if err == nil && existing.Id > 0 {
|
|
rec.Id = existing.Id
|
|
rec.CreateTime = existing.CreateTime
|
|
return mysql.Table(comm.TableChatSummary).Where("id = ?", existing.Id).Updates(map[string]interface{}{
|
|
"chat_content": rec.ChatContent,
|
|
"chat_msgs": rec.ChatMsgs,
|
|
"summary": rec.Summary,
|
|
"state": int32(rec.State),
|
|
"error_msg": rec.ErrorMsg,
|
|
"update_time": now,
|
|
"finish_time": rec.FinishTime,
|
|
}).Error
|
|
}
|
|
rec.CreateTime = now
|
|
return mysql.Insert(comm.TableChatSummary, rec)
|
|
}
|
|
|
|
func (this *modelComp) saveChatSummary(rec *pb.DBChatSummary) error {
|
|
rec.UpdateTime = time.Now().Unix()
|
|
return mysql.Table(comm.TableChatSummary).Where("id = ?", rec.Id).Updates(map[string]interface{}{
|
|
"chat_content": rec.ChatContent,
|
|
"chat_msgs": rec.ChatMsgs,
|
|
"summary": rec.Summary,
|
|
"state": int32(rec.State),
|
|
"error_msg": rec.ErrorMsg,
|
|
"update_time": rec.UpdateTime,
|
|
"finish_time": rec.FinishTime,
|
|
}).Error
|
|
}
|
|
|
|
func (this *modelComp) getChatSummary(uid, date string) (*pb.DBChatSummary, error) {
|
|
rec := &pb.DBChatSummary{}
|
|
err := mysql.FindOne(comm.TableChatSummary, rec, "uid = ? AND summary_date = ?", uid, date)
|
|
return rec, err
|
|
}
|
|
|
|
func (this *modelComp) getChatSummaryById(id uint64) (*pb.DBChatSummary, error) {
|
|
rec := &pb.DBChatSummary{}
|
|
err := mysql.FindOne(comm.TableChatSummary, rec, "id = ?", id)
|
|
return rec, err
|
|
}
|
|
|
|
func (this *modelComp) listChatSummaries(uid, startDate, endDate string, page, size int32) ([]*pb.DBChatSummary, int64, error) {
|
|
var list []*pb.DBChatSummary
|
|
var total int64
|
|
|
|
tx := mysql.Table(comm.TableChatSummary).Where("uid = ?", uid)
|
|
if startDate != "" {
|
|
tx = tx.Where("summary_date >= ?", startDate)
|
|
}
|
|
if endDate != "" {
|
|
tx = tx.Where("summary_date <= ?", endDate)
|
|
}
|
|
if err := tx.Count(&total).Error; err != nil {
|
|
return nil, 0, err
|
|
}
|
|
offset := (page - 1) * size
|
|
if offset < 0 {
|
|
offset = 0
|
|
}
|
|
if err := tx.Order("summary_date DESC").Offset(int(offset)).Limit(int(size)).Find(&list).Error; err != nil {
|
|
return nil, 0, err
|
|
}
|
|
return list, total, nil
|
|
}
|
|
|
|
func (this *modelComp) delChatSummary(uid string, id uint64) error {
|
|
return mysql.Table(comm.TableChatSummary).Where("id = ? AND uid = ?", id, uid).Delete(&pb.DBChatSummary{}).Error
|
|
}
|
|
|