package db import ( "context" "strconv" "time" "youngee_b_api/model/gorm_model" "github.com/issue9/conv" "github.com/sirupsen/logrus" "github.com/tidwall/gjson" "gorm.io/gorm" ) func GetTaskList(ctx context.Context, projectID int64) ([]gorm_model.YoungeeTaskInfo, error) { db := GetReadDB(ctx) tasks := []gorm_model.YoungeeTaskInfo{} err := db.Where("project_id=? and task_status = 2", projectID).Find(&tasks).Error if err != nil { return nil, err } return tasks, nil } func UpdateLogisticsStatus(ctx context.Context, taskID int64, status int64) error { db := GetReadDB(ctx) err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskID).Update("logistics_status", status).Error if err != nil { logrus.WithContext(ctx).Errorf("[task db] call UpdateLogisticsStatus error,err:%+v", err) return err } return nil } func UpdateLogisticsDate(ctx context.Context, taskID int64) error { db := GetReadDB(ctx) err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskID).Update("delivery_date", time.Now()).Error if err != nil { logrus.WithContext(ctx).Errorf("[task db] call UpdateLogisticsDate error,err:%+v", err) return err } return nil } func GetProjectIdByTaskId(ctx context.Context, taskID int64) (*int, error) { db := GetReadDB(ctx) task := &gorm_model.YoungeeTaskInfo{} err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskID).Scan(task).Error if err != nil { logrus.WithContext(ctx).Errorf("[task db] call UpdateLogisticsStatus error,err:%+v", err) return nil, err } return &task.ProjectID, nil } func ChangeTaskStatus(ctx context.Context, taskIds []string, taskStatus string) ([]int64, error) { db := GetReadDB(ctx) taskSta, err := strconv.Atoi(taskStatus) if err != nil { logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]1 error query mysql total, err:%+v", err) return nil, err } if err := db.Debug().Model(&gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds). Updates(gorm_model.YoungeeTaskInfo{TaskStatus: taskSta}).Error; err != nil { logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]2 error query mysql total, err:%+v", err) return nil, err } var taskInfos []gorm_model.YoungeeTaskInfo err = db.Debug().Model(&gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds).Find(&taskInfos).Error if err != nil { logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]3 error query mysql total, err:%+v", err) return nil, err } var recruitStrategysIDs []int64 recruitStrategys := gorm_model.RecruitStrategy{} for _, taskInfo := range taskInfos { err2 := db.Debug().Model(gorm_model.RecruitStrategy{}).Where("project_id=? AND strategy_id=?", taskInfo.ProjectID, taskInfo.StrategyID).Scan(&recruitStrategys).Error if err2 != nil { logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]4 error query mysql total, err:%+v", err2) return nil, err2 } recruitStrategysIDs = append(recruitStrategysIDs, recruitStrategys.RecruitStrategyID) } return recruitStrategysIDs, nil } func UpdateTaskStageByProjectId(ctx context.Context, projectID int64, taskStatus int64, taskStage int64) error { db := GetReadDB(ctx) err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id=? and task_status = ?", projectID, taskStatus).Update("task_stage", taskStage).Error if err != nil { logrus.WithContext(ctx).Errorf("[UpdateTaskStage]2 error query mysql total, err:%+v", err) return err } return nil } func UpdateTaskStageByTaskId(ctx context.Context, taskID int64, taskStatus int64, taskStage int64) error { db := GetReadDB(ctx) err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id=? and task_status = ?", taskID, taskStatus).Update("task_stage", taskStage).Error if err != nil { logrus.WithContext(ctx).Errorf("[UpdateTaskStageByTaskId]2 error query mysql total, err:%+v", err) return err } return nil } func GetUnfinishedTaskNumber(ctx context.Context, projectID int64) (*int64, error) { var unFinishedTaskNumber int64 db := GetReadDB(ctx) err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage < 15", projectID).Count(&unFinishedTaskNumber).Error if err != nil { logrus.WithContext(ctx).Errorf("[Data db] Find YounggeeTaskInfo error,err:%+v", err) return nil, err } return &unFinishedTaskNumber, nil } // 任务结案 func SetTaskFinish(ctx context.Context, TaskIDs []int) error { db := GetReadDB(ctx) // 1. 修改任务表,更新任务阶段为已结案,结案方式为正常结束,数据状态为已通过, err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{DataStatus: 5, TaskStage: 15, CompleteStatus: 2}).Error if err != nil { logrus.WithContext(ctx).Errorf("[Task db] Update YoungeeTaskInfo error,err:%+v", err) return err } // 2. 修改招募策略表,更新粉丝量、播放量、点赞数、收藏数、评论数、总支付、结案数量 for _, v := range TaskIDs { // 查询task_info db = GetReadDB(ctx) taskInfo := gorm_model.YoungeeTaskInfo{} err1 := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", v).Scan(&taskInfo).Error if err1 != nil { logrus.WithContext(ctx).Errorf("[Task db] Find YoungeeTaskInfo error,err:%+v", err) return err1 } // 查询data_info db = GetReadDB(ctx) dataInfo := gorm_model.YounggeeDataInfo{} err1 = db.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_ok = 1", v).Scan(&dataInfo).Error if err1 != nil { logrus.WithContext(ctx).Errorf("[Task db] Find YounggeeDataInfo error,err:%+v", err) return err1 } // 更新招募策略 db = GetReadDB(ctx) db = db.Model(gorm_model.RecruitStrategy{}).Where("project_id = ? and strategy_id = ?", taskInfo.ProjectID, taskInfo.StrategyID) fansCount, _ := strconv.Atoi(conv.MustString(gjson.Get(taskInfo.TalentPlatformInfoSnap, "fans_count"))) err = db.Updates(map[string]interface{}{ "fan_number": gorm.Expr("fan_number + ?", fansCount), "play_number": gorm.Expr("play_number + ?", dataInfo.PlayNumber), "like_number": gorm.Expr("like_number + ?", dataInfo.LikeNumber), "collect_number": gorm.Expr("collect_number + ?", dataInfo.CollectNumber), "comment_number": gorm.Expr("comment_number + ?", dataInfo.CommentNumber), "finish_number": gorm.Expr("finish_number + 1"), "total_offer": gorm.Expr("total_offer + ?", taskInfo.RealPayment)}).Error if err != nil { logrus.WithContext(ctx).Errorf("[Task db] Update YounggeeDataInfo error,err:%+v", err) return err } } return nil }