Version: 0.3.9.dev.260226

fix: 🐛 修复智能排程接口任务块信息缺失与数据插入错误

* 修复智能排程接口返回的任务块信息缺失问题,确保任务数据完整返回
* 修复 `UserInsertTaskItemRequestToModel` DTO 函数未填入起始时间字段的问题,解决多个接口插入数据时出现 500 错误

  * 错误源自上次更新“获取最近完成动态任务接口”时,未同步更改数据库字段对应逻辑
* 将智能排程接口的 `ctx` 超时恢复为 1 秒,优化接口响应性能

feat: 🎯 新增正式应用日程接口

* 新增正式应用日程接口,并完成功能测试,确保业务流程无异常
This commit is contained in:
LoveLosita
2026-02-26 20:07:55 +08:00
parent 1399b38f16
commit fca4004024
12 changed files with 397 additions and 10 deletions

View File

@@ -212,6 +212,21 @@ func (dao *TaskClassDAO) IfTaskClassItemArranged(ctx context.Context, taskID int
return item.EmbeddedTime != nil, nil
}
func (dao *TaskClassDAO) BatchCheckIfTaskClassItemsArranged(ctx context.Context, itemIDs []int) (bool, error) {
if len(itemIDs) == 0 {
return false, nil
}
var count int64
err := dao.db.WithContext(ctx).
Model(&model.TaskClassItem{}).
Where("id IN ? AND embedded_time IS NOT NULL", itemIDs).
Count(&count).Error
if err != nil {
return false, err
}
return count > 0, nil
}
func (dao *TaskClassDAO) DeleteTaskClassItemByID(ctx context.Context, id int) error {
err := dao.db.WithContext(ctx).
Where("id = ?", id).
@@ -231,3 +246,55 @@ func (dao *TaskClassDAO) DeleteTaskClassByID(ctx context.Context, id int) error
}
return nil
}
func (dao *TaskClassDAO) BatchUpdateTaskClassItemEmbeddedTime(ctx context.Context, itemIDs []int, updates []*model.TargetTime) error {
if len(itemIDs) == 0 {
return nil
}
if len(itemIDs) != len(updates) {
return errors.New("itemIDs length mismatch updates length")
}
// 单条 SQL 批量更新UPDATE ... SET embedded_time = CASE id WHEN ? THEN ? ... END WHERE id IN (?)
caseSQL := "CASE id"
args := make([]any, 0, len(itemIDs)*2)
for i, id := range itemIDs {
caseSQL += " WHEN ? THEN ?"
args = append(args, id, updates[i])
}
caseSQL += " END"
res := dao.db.WithContext(ctx).
Model(&model.TaskClassItem{}).
Where("id IN ?", itemIDs).
Update("embedded_time", gorm.Expr(caseSQL, args...))
return res.Error
}
func (dao *TaskClassDAO) ValidateTaskItemIDsBelongToTaskClass(ctx context.Context, taskClassID int, itemIDs []int) (bool, error) {
if len(itemIDs) == 0 {
return true, nil
}
var count int64
err := dao.db.WithContext(ctx).
Model(&model.TaskClassItem{}).
Where("id IN ? AND category_id = ?", itemIDs, taskClassID).
Count(&count).Error
if err != nil {
return false, err
}
return count == int64(len(itemIDs)), nil
}
func (dao *TaskClassDAO) GetTaskClassItemsByIDs(ctx context.Context, itemIDs []int) ([]model.TaskClassItem, error) {
var items []model.TaskClassItem
err := dao.db.WithContext(ctx).
Where("id IN ?", itemIDs).
Find(&items).Error
if err != nil {
return nil, err
}
return items, nil
}