yuliang1112 2 år sedan
förälder
incheckning
0a6da9c96e
48 ändrade filer med 2708 tillägg och 28 borttagningar
  1. 135 0
      db/data.go
  2. 163 0
      db/finish.go
  3. 110 0
      db/link.go
  4. 98 0
      db/number_info.go
  5. 9 0
      db/product_photo.go
  6. 111 0
      db/script.go
  7. 111 0
      db/sketch.go
  8. 75 0
      db/task.go
  9. 58 0
      handler/GetSpecialDataNumber.go
  10. 58 0
      handler/GetSpecialFinishData.go
  11. 58 0
      handler/GetSpecialInviteNumber.go
  12. 58 0
      handler/GetSpecialLinkNumber.go
  13. 58 0
      handler/GetSpecialReviewNumber.go
  14. 73 0
      handler/SpecialTaskDataList.go
  15. 64 0
      handler/SpecialTaskFinishDataList.go
  16. 73 0
      handler/SpecialTaskInviteList.go
  17. 69 0
      handler/SpecialTaskLinkList.go
  18. 73 0
      handler/SpecialTaskScriptList.go
  19. 69 0
      handler/SpecialTaskSketchList.go
  20. 55 0
      handler/deletePhotoUrl.go
  21. 1 0
      model/common_model/talent_condition.go
  22. 14 0
      model/http_model/DeletePhotoUrlRequest.go
  23. 21 0
      model/http_model/GetSpecialDataNumber.go
  24. 24 0
      model/http_model/GetSpecialFinishData.go
  25. 20 0
      model/http_model/GetSpecialInviteNumber.go
  26. 21 0
      model/http_model/GetSpecialLinkNumber.go
  27. 23 0
      model/http_model/GetSpecialReviewNumber.go
  28. 74 0
      model/http_model/SpecialTaskDataList.go
  29. 64 0
      model/http_model/SpecialTaskFinishDataList.go
  30. 58 0
      model/http_model/SpecialTaskInviteList.go
  31. 61 0
      model/http_model/SpecialTaskLinkList.go
  32. 61 0
      model/http_model/SpecialTaskScriptList.go
  33. 62 0
      model/http_model/SpecialTaskSketchList.go
  34. 68 0
      pack/special_task_data_list.go
  35. 15 0
      pack/special_task_data_list_condition.go
  36. 58 0
      pack/special_task_finishdata_list.go
  37. 14 0
      pack/special_task_finishdata_list_condition.go
  38. 59 0
      pack/special_task_invite_list.go
  39. 15 0
      pack/special_task_invite_list_condition.go
  40. 56 0
      pack/special_task_link_list.go
  41. 15 0
      pack/special_task_link_list_condition.go
  42. 56 0
      pack/special_task_script_list.go
  43. 15 0
      pack/special_task_script_list_condition.go
  44. 57 0
      pack/special_task_sketch_list.go
  45. 15 0
      pack/special_task_sketch_list_condition.go
  46. 40 28
      route/init.go
  47. 88 0
      service/SpecialTask.go
  48. 55 0
      service/number_info.go

+ 135 - 0
db/data.go

@@ -171,3 +171,138 @@ func AcceptData(ctx context.Context, TaskIDs []int) error {
 	}
 	return nil
 }
+
+// GetSpecialTaskDataList 专项任务-查询上传链接的task list
+func GetSpecialTaskDataList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskDataInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询Task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	var platform_nickname string = ""
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+
+		if tag == "data_status" {
+			fmt.Printf("Data %+v", value.Interface() == int64(0))
+			if value.Interface() == int64(0) {
+				db = db.Where("task_stage = ?", 14)
+			} else {
+				db = db.Where("task_stage > ?", 14)
+			}
+			continue
+		} else if !util.IsBlank(value) {
+			if tag == "platform_nickname" {
+				platform_nickname = fmt.Sprintf("%v", value.Interface())
+				continue
+			} else if tag == "project_id" {
+				db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
+			}
+		}
+	}
+	var taskInfos []gorm_model.YoungeeTaskInfo
+	db = db.Model(gorm_model.YoungeeTaskInfo{})
+	// 查询总数
+	var totalTask int64
+	if err := db.Count(&totalTask).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetTaskDataList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	db.Order("task_id").Find(&taskInfos)
+
+	// 查询任务id
+	var taskIds []int
+	taskMap := make(map[int]gorm_model.YoungeeTaskInfo)
+	for _, taskInfo := range taskInfos {
+		taskIds = append(taskIds, taskInfo.TaskId)
+		taskMap[taskInfo.TaskId] = taskInfo
+	}
+
+	// 查询链接
+	db1 := GetReadDB(ctx)
+	// db1 = db1.Debug().Model(gorm_model.YounggeeDataInfo{})
+	var LinkInfos []gorm_model.YounggeeLinkInfo
+	db1 = db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_submit= 1 AND is_ok = 1", taskIds)
+	err := db1.Find(&LinkInfos).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	LinkMap := make(map[int]gorm_model.YounggeeLinkInfo)
+	for _, LinkInfo := range LinkInfos {
+		LinkMap[conv.MustInt(LinkInfo.TaskID, 0)] = LinkInfo
+	}
+
+	db2 := GetReadDB(ctx)
+	// db2 = db1.Debug().Model(gorm_model.YounggeeDataInfo{})
+
+	var DataInfos []gorm_model.YounggeeDataInfo
+	db2 = db2.Model(gorm_model.YounggeeDataInfo{}).Where("task_id IN ? AND is_submit = 1", taskIds)
+	fmt.Printf("conditions %+v", conditions)
+	if conditions.DataStatus == int64(0) {
+		db2 = db2.Where("is_review = 0")
+	} else {
+		db2 = db2.Where("is_ok = 1")
+	}
+	err = db2.Find(&DataInfos).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	DataMap := make(map[int]gorm_model.YounggeeDataInfo)
+	for _, DataInfo := range DataInfos {
+		DataMap[conv.MustInt(DataInfo.TaskID, 0)] = DataInfo
+	}
+	// 查询总数
+	var totalData int64
+	if err := db2.Count(&totalData).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	var misNum int64
+	if totalData > totalTask {
+		misNum = totalData - totalTask
+	} else {
+		misNum = totalTask - totalData
+	}
+	logrus.Println("totalData,totalTalent,misNum:", totalData, totalTask, misNum)
+
+	// 查询该页数据
+	limit := pageSize + misNum
+	offset := pageSize * pageNum // assert pageNum start with 0
+	err = db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetTaskDataList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+
+	var TaskDatas []*http_model.SpecialTaskData
+	var taskDatas []*http_model.SpecialTaskDataInfo
+	var newTaskDatas []*http_model.SpecialTaskDataInfo
+	for _, taskId := range taskIds {
+		TaskData := new(http_model.SpecialTaskData)
+		TaskData.Talent = taskMap[taskId]
+		TaskData.Data = DataMap[taskId]
+		TaskData.Link = LinkMap[taskId]
+		TaskDatas = append(TaskDatas, TaskData)
+	}
+
+	taskDatas = pack.SpecialTaskDataToTaskInfo(TaskDatas)
+
+	for _, v := range taskDatas {
+		if platform_nickname == "" {
+			newTaskDatas = append(newTaskDatas, v)
+		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
+			newTaskDatas = append(newTaskDatas, v)
+		} else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
+			newTaskDatas = append(newTaskDatas, v)
+		} else {
+			totalTask--
+		}
+	}
+	// return fulltaskData, total, nil
+	return newTaskDatas, totalTask, nil
+}

+ 163 - 0
db/finish.go

@@ -3,6 +3,7 @@ package db
 import (
 	"context"
 	"fmt"
+	"github.com/tidwall/gjson"
 	"reflect"
 	"strings"
 	"youngee_m_api/model/common_model"
@@ -134,3 +135,165 @@ func GetFinishData(ctx context.Context, projectID int64) ([]*gorm_model.RecruitS
 	}
 	return finishRecruitStrategy, nil
 }
+
+func GetSpecialTaskFinishList(ctx context.Context, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskFinishDataInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询Task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2 and task_stage = 15")
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	var platform_nickname string = ""
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if !util.IsBlank(value) {
+			if tag == "platform_nickname" {
+				platform_nickname = fmt.Sprintf("%v", value.Interface())
+				continue
+			} else if tag == "project_id" || tag == "strategy_id" {
+				db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
+			}
+		}
+	}
+	var taskInfos []gorm_model.YoungeeTaskInfo
+	db = db.Model(gorm_model.YoungeeTaskInfo{})
+	// 查询总数
+	var totalTask int64
+	if err := db.Count(&totalTask).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	db.Order("task_id").Find(&taskInfos)
+
+	// 查询任务id
+	var taskIds []int
+	taskMap := make(map[int]gorm_model.YoungeeTaskInfo)
+	for _, taskInfo := range taskInfos {
+		taskIds = append(taskIds, taskInfo.TaskId)
+		taskMap[taskInfo.TaskId] = taskInfo
+	}
+	db1 := GetReadDB(ctx)
+	db1 = db1.Debug().Model(gorm_model.YounggeeDataInfo{})
+
+	var DataInfos []gorm_model.YounggeeDataInfo
+	db1 = db1.Model(gorm_model.YounggeeDataInfo{}).Where("task_id IN ? AND is_ok = 1", taskIds)
+	err := db1.Find(&DataInfos).Error
+	DataMap := make(map[int]gorm_model.YounggeeDataInfo)
+	for _, DataInfo := range DataInfos {
+		DataMap[conv.MustInt(DataInfo.TaskID, 0)] = DataInfo
+	}
+
+	var LinkInfos []gorm_model.YounggeeLinkInfo
+	db2 := GetReadDB(ctx)
+	db2 = db2.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_ok = 1", taskIds).Find(&LinkInfos)
+	LinkMap := make(map[int]gorm_model.YounggeeLinkInfo)
+	for _, LinkInfo := range LinkInfos {
+		LinkMap[conv.MustInt(LinkInfo.TaskID, 0)] = LinkInfo
+	}
+
+	// 查询总数
+	var totalData int64
+	if err := db2.Count(&totalData).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	var misNum int64
+	if totalData > totalTask {
+		misNum = totalData - totalTask
+	} else {
+		misNum = totalTask - totalData
+	}
+	logrus.Println("totalData,totalTalent,misNum:", totalData, totalTask, misNum)
+
+	// 查询该页数据
+	limit := pageSize + misNum
+	offset := pageSize * pageNum // assert pageNum start with 0
+	err = db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
+
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+
+	var TaskFinishs []*http_model.SpecialTaskFinishData
+	var taskDatas []*http_model.SpecialTaskFinishDataInfo
+	var newTaskFinishs []*http_model.SpecialTaskFinishDataInfo
+	for _, taskId := range taskIds {
+		TaskFinish := new(http_model.SpecialTaskFinishData)
+		TaskFinish.Talent = taskMap[taskId]
+		TaskFinish.Data = DataMap[taskId]
+		TaskFinish.Link = LinkMap[taskId]
+		TaskFinishs = append(TaskFinishs, TaskFinish)
+	}
+
+	taskDatas = pack.SpecialTaskFinishDataToTaskInfo(TaskFinishs)
+
+	for _, v := range taskDatas {
+		if platform_nickname == "" {
+			newTaskFinishs = append(newTaskFinishs, v)
+		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
+			newTaskFinishs = append(newTaskFinishs, v)
+		} else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
+			newTaskFinishs = append(newTaskFinishs, v)
+		} else {
+			totalTask--
+		}
+	}
+	return newTaskFinishs, totalTask, nil
+}
+
+func GetSpecialFinishDataNumber(ctx context.Context, projectId int64) (*http_model.GetSpecialFinishDataData, error) {
+	db := GetReadDB(ctx)
+	// 查询Task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2 and task_stage = 15")
+	var taskInfos []gorm_model.YoungeeTaskInfo
+	// 查询总数
+	var totalTask int64
+	if err := db.Count(&totalTask).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetSpecialFinishDataNumber] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db.Order("task_id").Find(&taskInfos)
+
+	// 查询任务id
+	var taskIds []int
+	taskMap := make(map[int]gorm_model.YoungeeTaskInfo)
+	for _, taskInfo := range taskInfos {
+		taskIds = append(taskIds, taskInfo.TaskId)
+		taskMap[taskInfo.TaskId] = taskInfo
+	}
+	db1 := GetReadDB(ctx)
+	db1 = db1.Debug().Model(gorm_model.YounggeeDataInfo{})
+
+	var DataInfos []gorm_model.YounggeeDataInfo
+	db1 = db1.Model(gorm_model.YounggeeDataInfo{}).Where("task_id IN ? AND is_ok = 1", taskIds)
+	err := db1.Find(&DataInfos).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetSpecialFinishDataNumber] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	DataMap := make(map[int]gorm_model.YounggeeDataInfo)
+	for _, DataInfo := range DataInfos {
+		DataMap[conv.MustInt(DataInfo.TaskID, 0)] = DataInfo
+	}
+
+	taskFinishData := http_model.GetSpecialFinishDataData{
+		FinishNumber:  totalTask,
+		FanNumber:     0,
+		PlayNumber:    0,
+		LikeNumber:    0,
+		CommentNumber: 0,
+		CollectNumber: 0,
+	}
+	for _, taskId := range taskIds {
+		fans := conv.MustString(gjson.Get(taskMap[taskId].TalentPlatformInfoSnap, "fans_count"), "")
+		taskFinishData.FanNumber += conv.MustInt(fans, 0)
+		taskFinishData.PlayNumber += DataMap[taskId].PlayNumber
+		taskFinishData.LikeNumber += DataMap[taskId].LikeNumber
+		taskFinishData.CollectNumber += DataMap[taskId].CollectNumber
+		taskFinishData.CommentNumber += DataMap[taskId].CommentNumber
+	}
+	return &taskFinishData, nil
+}

+ 110 - 0
db/link.go

@@ -160,3 +160,113 @@ func AcceptLink(ctx context.Context, TaskIDs []int) error {
 	}
 	return nil
 }
+
+// GetSpecialTaskLinkList 专项任务-查询上传链接的task list
+func GetSpecialTaskLinkList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskLinkInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询Task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	var platform_nickname string = ""
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if tag == "link_status" {
+			fmt.Printf("link %+v", value.Interface() == int64(0))
+			if value.Interface() == int64(0) {
+				db = db.Where("task_stage = ?", 12)
+			} else {
+				db = db.Where("task_stage > ?", 12)
+			}
+			continue
+		} else if !util.IsBlank(value) {
+			if tag == "platform_nickname" {
+				platform_nickname = fmt.Sprintf("%v", value.Interface())
+				continue
+			} else if tag == "project_id" {
+				db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
+			}
+		}
+	}
+	var taskInfos []gorm_model.YoungeeTaskInfo
+	db = db.Model(gorm_model.YoungeeTaskInfo{})
+	// 查询总数
+	var totalTask int64
+	if err := db.Count(&totalTask).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	db.Order("task_id").Find(&taskInfos)
+
+	// 查询任务id
+	var taskIds []int
+	taskMap := make(map[int]gorm_model.YoungeeTaskInfo)
+	for _, taskInfo := range taskInfos {
+		taskIds = append(taskIds, taskInfo.TaskId)
+		taskMap[taskInfo.TaskId] = taskInfo
+	}
+	db1 := GetReadDB(ctx)
+	db1 = db1.Debug().Model(gorm_model.YounggeeLinkInfo{})
+
+	var LinkInfos []gorm_model.YounggeeLinkInfo
+	db1 = db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_submit=? ", taskIds, 1)
+	if conditions.LinkStatus == int64(0) {
+		db1 = db1.Where("is_review = 0").Find(&LinkInfos)
+	} else {
+		db1 = db1.Where("is_ok = 1").Find(&LinkInfos)
+	}
+	LinkMap := make(map[int]gorm_model.YounggeeLinkInfo)
+	for _, LinkInfo := range LinkInfos {
+		LinkMap[conv.MustInt(LinkInfo.TaskID, 0)] = LinkInfo
+	}
+	// 查询总数
+	var totalLink int64
+	if err := db1.Count(&totalLink).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	var misNum int64
+	if totalLink > totalTask {
+		misNum = totalLink - totalTask
+	} else {
+		misNum = totalTask - totalLink
+	}
+	logrus.Println("totalLink,totalTalent,misNum:", totalLink, totalTask, misNum)
+
+	// 查询该页数据
+	limit := pageSize + misNum
+	offset := pageSize * pageNum // assert pageNum start with 0
+	err := db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+
+	var TaskLinks []*http_model.SpecialTaskLink
+	var taskLinks []*http_model.SpecialTaskLinkInfo
+	var newTaskLinks []*http_model.SpecialTaskLinkInfo
+	for _, taskId := range taskIds {
+		TaskLink := new(http_model.SpecialTaskLink)
+		TaskLink.Talent = taskMap[taskId]
+		TaskLink.Link = LinkMap[taskId]
+		TaskLinks = append(TaskLinks, TaskLink)
+	}
+
+	taskLinks = pack.SpecialTaskLinkToTaskInfo(TaskLinks)
+
+	for _, v := range taskLinks {
+		if platform_nickname == "" {
+			newTaskLinks = append(newTaskLinks, v)
+		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
+			newTaskLinks = append(newTaskLinks, v)
+		} else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
+			newTaskLinks = append(newTaskLinks, v)
+		} else {
+			totalTask--
+		}
+	}
+	return newTaskLinks, totalTask, nil
+}

+ 98 - 0
db/number_info.go

@@ -243,3 +243,101 @@ func SignLogistic(logisticId int64) {
 		fmt.Printf("任务 %v 物流状态为已签收,已更新任务状态为 待传脚本\n", taskId)
 	}
 }
+
+func GetSpecialInviteNumber(ctx context.Context, projectId int64) (*http_model.GetSpecialInviteNumberData, error) {
+	var specialInviteNumberData http_model.GetSpecialInviteNumberData
+	db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage != 3", projectId)
+	err := db.Where("task_status <> 2").Count(&specialInviteNumberData.UnpassNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ?", projectId)
+	err = db.Where("task_status = 2").Count(&specialInviteNumberData.PassNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	return &specialInviteNumberData, nil
+}
+
+func GetSpecialReviewNumber(ctx context.Context, projectId int64) (*http_model.GetSpecialReviewNumberData, error) {
+	var specialReviewNumber http_model.GetSpecialReviewNumberData
+	db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err := db.Where("").Count(&specialReviewNumber.ReviewNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("task_stage = 8").Count(&specialReviewNumber.ScriptUnreviewNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("task_stage > 8").Count(&specialReviewNumber.ScriptPassedNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("task_stage = 10").Count(&specialReviewNumber.SketchUnreviewNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("task_stage > 10").Count(&specialReviewNumber.SketchPassedNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	return &specialReviewNumber, nil
+}
+
+func GetSpecialLinkNumber(ctx context.Context, projectId int64) (*http_model.GetSpecialLinkNumberData, error) {
+	var specialLinkNumber http_model.GetSpecialLinkNumberData
+	db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err := db.Where("").Count(&specialLinkNumber.LinkNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("task_stage = 12").Count(&specialLinkNumber.LinkUnreviewNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("task_stage > 12").Count(&specialLinkNumber.LinkPassedNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	return &specialLinkNumber, nil
+}
+
+func GetSpecialDataNumber(ctx context.Context, projectId int64) (*http_model.GetSpecialDataNumberData, error) {
+	var specialDataNumber http_model.GetSpecialDataNumberData
+	db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err := db.Where("").Count(&specialDataNumber.DataNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("task_stage = 14").Count(&specialDataNumber.DataUnreviewNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("task_stage > 14").Count(&specialDataNumber.DataPassedNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	return &specialDataNumber, nil
+}

+ 9 - 0
db/product_photo.go

@@ -49,3 +49,12 @@ func CreateProductPhoto(ctx context.Context, productPhotos []gorm_model.Younggee
 	}
 	return nil
 }
+
+func DeletePhotoUrl(ctx context.Context, photoUrl string) error {
+	db := GetReadDB(ctx)
+	err := db.Where("photo_url = ?", photoUrl).Delete(&gorm_model.YounggeeProductPhoto{}).Error
+	if err != nil {
+		return err
+	}
+	return nil
+}

+ 111 - 0
db/script.go

@@ -161,3 +161,114 @@ func AcceptScript(ctx context.Context, TaskIDs []int) error {
 	}
 	return nil
 }
+
+// GetSpecialTaskScriptList 专项任务-查询上传脚本的task list
+func GetSpecialTaskScriptList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskScriptInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询Task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	var platform_nickname string = ""
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if tag == "script_status" {
+			fmt.Printf("script %+v", value.Interface() == int64(2))
+			if value.Interface() == int64(2) {
+				db = db.Where("task_stage = ?", 8)
+			} else {
+				db = db.Where("task_stage > ?", 8)
+			}
+			continue
+		} else if !util.IsBlank(value) {
+			if tag == "platform_nickname" {
+				platform_nickname = fmt.Sprintf("%v", value.Interface())
+				continue
+			} else if tag == "project_id" {
+				db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
+			}
+		}
+	}
+	var taskInfos []gorm_model.YoungeeTaskInfo
+	db = db.Model(gorm_model.YoungeeTaskInfo{})
+	// 查询总数
+	var totalTask int64
+	if err := db.Count(&totalTask).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	db.Order("task_id").Find(&taskInfos)
+
+	// 查询任务id
+	var taskIds []int
+	taskMap := make(map[int]gorm_model.YoungeeTaskInfo)
+	for _, taskInfo := range taskInfos {
+		taskIds = append(taskIds, taskInfo.TaskId)
+		taskMap[taskInfo.TaskId] = taskInfo
+	}
+	db1 := GetReadDB(ctx)
+	db1 = db1.Debug().Model(gorm_model.YounggeeScriptInfo{})
+
+	var ScriptInfos []gorm_model.YounggeeScriptInfo
+	db1 = db1.Model(gorm_model.YounggeeScriptInfo{}).Where("task_id IN ? AND is_submit=? ", taskIds, 1)
+	if conditions.ScriptStatus == int64(2) {
+		db1 = db1.Where("is_review = 0").Find(&ScriptInfos)
+	} else {
+		db1 = db1.Where("is_ok = 1").Find(&ScriptInfos)
+	}
+	ScriptMap := make(map[int]gorm_model.YounggeeScriptInfo)
+	for _, ScriptInfo := range ScriptInfos {
+		ScriptMap[conv.MustInt(ScriptInfo.TaskID, 0)] = ScriptInfo
+	}
+	// 查询总数
+	var totalScript int64
+	if err := db1.Count(&totalScript).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	var misNum int64
+	if totalScript > totalTask {
+		misNum = totalScript - totalTask
+	} else {
+		misNum = totalTask - totalScript
+	}
+	logrus.Println("totalScript,totalTalent,misNum:", totalScript, totalTask, misNum)
+
+	// 查询该页数据
+	limit := pageSize + misNum
+	offset := pageSize * pageNum // assert pageNum start with 0
+	err := db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
+
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+
+	var TaskScripts []*http_model.SpecialTaskScript
+	var taskScripts []*http_model.SpecialTaskScriptInfo
+	var newTaskScripts []*http_model.SpecialTaskScriptInfo
+	for _, taskId := range taskIds {
+		TaskScript := new(http_model.SpecialTaskScript)
+		TaskScript.Talent = taskMap[taskId]
+		TaskScript.Script = ScriptMap[taskId]
+		TaskScripts = append(TaskScripts, TaskScript)
+	}
+
+	taskScripts = pack.SpecialTaskScriptToTaskInfo(TaskScripts)
+
+	for _, v := range taskScripts {
+		if platform_nickname == "" {
+			newTaskScripts = append(newTaskScripts, v)
+		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
+			newTaskScripts = append(newTaskScripts, v)
+		} else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
+			newTaskScripts = append(newTaskScripts, v)
+		} else {
+			totalTask--
+		}
+	}
+	return newTaskScripts, totalTask, nil
+}

+ 111 - 0
db/sketch.go

@@ -194,5 +194,116 @@ func FindPhoto(ctx context.Context, SketchID int64) ([]gorm_model.YounggeeSketch
 		return nil, err
 	}
 	return SketchPhotos, nil
+}
+
+// GetSpecialTaskSketchList 专项任务-查询上传初稿的task list
+func GetSpecialTaskSketchList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskSketchInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询Task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	var platform_nickname string = ""
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if tag == "sketch_status" {
+			fmt.Printf("sketch %+v", value.Interface() == int64(0))
+			if value.Interface() == int64(0) {
+				db = db.Where("task_stage = ?", 10)
+			} else {
+				db = db.Where("task_stage > ?", 10)
+			}
+			continue
+		} else if !util.IsBlank(value) {
+			if tag == "platform_nickname" {
+				platform_nickname = fmt.Sprintf("%v", value.Interface())
+				continue
+			} else if tag == "project_id" {
+				db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
+			}
+		}
+	}
+	var taskInfos []gorm_model.YoungeeTaskInfo
+	db = db.Model(gorm_model.YoungeeTaskInfo{})
+	// 查询总数
+	var totalTask int64
+	if err := db.Count(&totalTask).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	db.Order("task_id").Find(&taskInfos)
+
+	// 查询任务id
+	var taskIds []int
+	taskMap := make(map[int]gorm_model.YoungeeTaskInfo)
+	for _, taskInfo := range taskInfos {
+		taskIds = append(taskIds, taskInfo.TaskId)
+		taskMap[taskInfo.TaskId] = taskInfo
+	}
+	db1 := GetReadDB(ctx)
+	db1 = db1.Debug().Model(gorm_model.YounggeeSketchInfo{})
 
+	var SketchInfos []gorm_model.YounggeeSketchInfo
+	db1 = db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id IN ? AND is_submit=? ", taskIds, 1)
+	if conditions.SketchStatus == int64(0) {
+		db1 = db1.Where("is_review = 0").Find(&SketchInfos)
+	} else {
+		db1 = db1.Where("is_ok = 1").Find(&SketchInfos)
+	}
+	fmt.Printf("初稿查询:%+v", SketchInfos)
+	SketchMap := make(map[int]gorm_model.YounggeeSketchInfo)
+	for _, SketchInfo := range SketchInfos {
+		SketchMap[conv.MustInt(SketchInfo.TaskID, 0)] = SketchInfo
+	}
+	// 查询总数
+	var totalSketch int64
+	if err := db1.Count(&totalSketch).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	var misNum int64
+	if totalSketch > totalTask {
+		misNum = totalSketch - totalTask
+	} else {
+		misNum = totalTask - totalSketch
+	}
+	logrus.Println("totalSketch,totalTalent,misNum:", totalSketch, totalTask, misNum)
+
+	// 查询该页数据
+	limit := pageSize + misNum
+	offset := pageSize * pageNum // assert pageNum start with 0
+	err := db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
+
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+
+	var TaskSketches []*http_model.SpecialTaskSketch
+	var taskSketches []*http_model.SpecialTaskSketchInfo
+	var newTaskSketches []*http_model.SpecialTaskSketchInfo
+	for _, taskId := range taskIds {
+		TaskSketch := new(http_model.SpecialTaskSketch)
+		TaskSketch.Talent = taskMap[taskId]
+		TaskSketch.Sketch = SketchMap[taskId]
+		TaskSketches = append(TaskSketches, TaskSketch)
+	}
+
+	taskSketches = pack.SpecialTaskSketchToTaskInfo(TaskSketches)
+
+	for _, v := range taskSketches {
+		if platform_nickname == "" {
+			newTaskSketches = append(newTaskSketches, v)
+		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
+			newTaskSketches = append(newTaskSketches, v)
+		} else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
+			newTaskSketches = append(newTaskSketches, v)
+		} else {
+			totalTask--
+		}
+	}
+	return newTaskSketches, totalTask, nil
 }

+ 75 - 0
db/task.go

@@ -2,9 +2,16 @@ package db
 
 import (
 	"context"
+	"fmt"
 	"github.com/caixw/lib.go/conv"
+	"reflect"
+	"strings"
 	"time"
+	"youngee_m_api/model/common_model"
 	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/pack"
+	"youngee_m_api/util"
 
 	"github.com/sirupsen/logrus"
 )
@@ -101,6 +108,7 @@ func UpdateTaskSelectAtByProjectId(ctx context.Context, projectID int64, taskSta
 	}
 	return 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
@@ -110,3 +118,70 @@ func UpdateTaskStageByProjectId(ctx context.Context, projectID int64, taskStatus
 	}
 	return nil
 }
+
+func GetSpecialTaskInviteList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskInviteInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_stage != 3")
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	var platform_nickname string = ""
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if tag == "task_status" {
+			fmt.Printf("link %+v", value.Interface() == int64(0))
+			if value.Interface() == int64(0) {
+				db = db.Where("task_status <> 2")
+			} else {
+				db = db.Where("task_status = 2")
+			}
+			continue
+		} else if !util.IsBlank(value) {
+			if tag == "platform_nickname" {
+				platform_nickname = fmt.Sprintf("%v", value.Interface())
+				continue
+			} else if tag == "project_id" {
+				db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
+			}
+		}
+	}
+	var taskInfos []gorm_model.YoungeeTaskInfo
+	db = db.Model(gorm_model.YoungeeTaskInfo{})
+	// 查询总数
+	var totalTask int64
+	if err := db.Count(&totalTask).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	db.Order("task_id").Find(&taskInfos)
+
+	// 查询该页数据
+	limit := pageSize
+	offset := pageSize * pageNum // assert pageNum start with 0
+	err := db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+
+	var taskDatas []*http_model.SpecialTaskInviteInfo
+	var newTaskDatas []*http_model.SpecialTaskInviteInfo
+
+	taskDatas = pack.YoungeeTaskInfoToSpecialTaskInviteInfo(taskInfos)
+
+	for _, v := range taskDatas {
+		if platform_nickname == "" {
+			newTaskDatas = append(newTaskDatas, v)
+		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
+			newTaskDatas = append(newTaskDatas, v)
+		} else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
+			newTaskDatas = append(newTaskDatas, v)
+		} else {
+			totalTask--
+		}
+	}
+	return newTaskDatas, totalTask, nil
+}

+ 58 - 0
handler/GetSpecialDataNumber.go

@@ -0,0 +1,58 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+)
+
+func WrapGetSpecialDataNumberHandler(ctx *gin.Context) {
+	handler := newGetSpecialDataNumberHandler(ctx)
+	BaseRun(handler)
+}
+
+func newGetSpecialDataNumberHandler(ctx *gin.Context) *GetSpecialDataNumberHandler {
+	return &GetSpecialDataNumberHandler{
+		req:  http_model.NewGetSpecialDataNumberRequest(),
+		resp: http_model.NewGetSpecialDataNumberResponse(),
+		ctx:  ctx,
+	}
+}
+
+type GetSpecialDataNumberHandler struct {
+	req  *http_model.GetSpecialDataNumberRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *GetSpecialDataNumberHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *GetSpecialDataNumberHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *GetSpecialDataNumberHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *GetSpecialDataNumberHandler) run() {
+	data := http_model.GetSpecialDataNumberRequest{}
+	data = *h.req
+	res, err := service.Number.GetSpecialDataNumber(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetSpecialDataNumberHandler] call GetSpecialDataNumber err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("GetSpecialDataNumber fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = ""
+	h.resp.Data = res
+}
+
+func (h *GetSpecialDataNumberHandler) checkParam() error {
+	return nil
+}

+ 58 - 0
handler/GetSpecialFinishData.go

@@ -0,0 +1,58 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+)
+
+func WrapGetSpecialFinishDataHandler(ctx *gin.Context) {
+	handler := newGetSpecialFinishDataHandler(ctx)
+	BaseRun(handler)
+}
+
+func newGetSpecialFinishDataHandler(ctx *gin.Context) *GetSpecialFinishDataHandler {
+	return &GetSpecialFinishDataHandler{
+		req:  http_model.NewGetSpecialFinishDataRequest(),
+		resp: http_model.NewGetSpecialFinishDataResponse(),
+		ctx:  ctx,
+	}
+}
+
+type GetSpecialFinishDataHandler struct {
+	req  *http_model.GetSpecialFinishDataRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *GetSpecialFinishDataHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *GetSpecialFinishDataHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *GetSpecialFinishDataHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *GetSpecialFinishDataHandler) run() {
+	data := http_model.GetSpecialFinishDataRequest{}
+	data = *h.req
+	res, err := service.Number.GetSpecialFinishData(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetSpecialFinishDataHandler] call GetSpecialFinishData err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("GetSpecialFinishData fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = ""
+	h.resp.Data = res
+}
+
+func (h *GetSpecialFinishDataHandler) checkParam() error {
+	return nil
+}

+ 58 - 0
handler/GetSpecialInviteNumber.go

@@ -0,0 +1,58 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+)
+
+func WrapGetSpecialInviteNumberHandler(ctx *gin.Context) {
+	handler := newGetSpecialInviteNumberHandler(ctx)
+	BaseRun(handler)
+}
+
+func newGetSpecialInviteNumberHandler(ctx *gin.Context) *GetSpecialInviteNumberHandler {
+	return &GetSpecialInviteNumberHandler{
+		req:  http_model.NewGetSpecialInviteNumberRequest(),
+		resp: http_model.NewGetSpecialInviteNumberResponse(),
+		ctx:  ctx,
+	}
+}
+
+type GetSpecialInviteNumberHandler struct {
+	req  *http_model.GetSpecialInviteNumberRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *GetSpecialInviteNumberHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *GetSpecialInviteNumberHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *GetSpecialInviteNumberHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *GetSpecialInviteNumberHandler) run() {
+	data := http_model.GetSpecialInviteNumberRequest{}
+	data = *h.req
+	res, err := service.Number.GetSpecialInviteNumber(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetSpecialInviteNumberHandler] call GetSpecialInviteNumber err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("GetSpecialInviteNumber fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = ""
+	h.resp.Data = res
+}
+
+func (h *GetSpecialInviteNumberHandler) checkParam() error {
+	return nil
+}

+ 58 - 0
handler/GetSpecialLinkNumber.go

@@ -0,0 +1,58 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+)
+
+func WrapGetSpecialLinkNumberHandler(ctx *gin.Context) {
+	handler := newGetSpecialLinkNumberHandler(ctx)
+	BaseRun(handler)
+}
+
+func newGetSpecialLinkNumberHandler(ctx *gin.Context) *GetSpecialLinkNumberHandler {
+	return &GetSpecialLinkNumberHandler{
+		req:  http_model.NewGetSpecialLinkNumberRequest(),
+		resp: http_model.NewGetSpecialLinkNumberResponse(),
+		ctx:  ctx,
+	}
+}
+
+type GetSpecialLinkNumberHandler struct {
+	req  *http_model.GetSpecialLinkNumberRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *GetSpecialLinkNumberHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *GetSpecialLinkNumberHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *GetSpecialLinkNumberHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *GetSpecialLinkNumberHandler) run() {
+	data := http_model.GetSpecialLinkNumberRequest{}
+	data = *h.req
+	res, err := service.Number.GetSpecialLinkNumber(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetSpecialLinkNumberHandler] call GetSpecialLinkNumber err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("GetSpecialLinkNumber fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = ""
+	h.resp.Data = res
+}
+
+func (h *GetSpecialLinkNumberHandler) checkParam() error {
+	return nil
+}

+ 58 - 0
handler/GetSpecialReviewNumber.go

@@ -0,0 +1,58 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+)
+
+func WrapGetSpecialReviewNumberHandler(ctx *gin.Context) {
+	handler := newGetSpecialReviewNumberHandler(ctx)
+	BaseRun(handler)
+}
+
+func newGetSpecialReviewNumberHandler(ctx *gin.Context) *GetSpecialReviewNumberHandler {
+	return &GetSpecialReviewNumberHandler{
+		req:  http_model.NewGetSpecialReviewNumberRequest(),
+		resp: http_model.NewGetSpecialReviewNumberResponse(),
+		ctx:  ctx,
+	}
+}
+
+type GetSpecialReviewNumberHandler struct {
+	req  *http_model.GetSpecialReviewNumberRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *GetSpecialReviewNumberHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *GetSpecialReviewNumberHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *GetSpecialReviewNumberHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *GetSpecialReviewNumberHandler) run() {
+	data := http_model.GetSpecialReviewNumberRequest{}
+	data = *h.req
+	res, err := service.Number.GetSpecialReviewNumber(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetSpecialReviewNumberHandler] call GetSpecialReviewNumber err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("GetSpecialReviewNumber fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = ""
+	h.resp.Data = res
+}
+
+func (h *GetSpecialReviewNumberHandler) checkParam() error {
+	return nil
+}

+ 73 - 0
handler/SpecialTaskDataList.go

@@ -0,0 +1,73 @@
+package handler
+
+import (
+	"errors"
+	"fmt"
+	"github.com/cstockton/go-conv"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/pack"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+)
+
+func WrapSpecialTaskDataListHandler(ctx *gin.Context) {
+	handler := newSpecialTaskDataListHandler(ctx)
+	BaseRun(handler)
+}
+
+func newSpecialTaskDataListHandler(ctx *gin.Context) *SpecialTaskDataListHandler {
+	return &SpecialTaskDataListHandler{
+		req:  http_model.NewSpecialTaskDataListRequest(),
+		resp: http_model.NewSpecialTaskDataListResponse(),
+		ctx:  ctx,
+	}
+}
+
+type SpecialTaskDataListHandler struct {
+	req  *http_model.SpecialTaskDataListRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *SpecialTaskDataListHandler) getRequest() interface{} {
+	return h.req
+}
+
+func (h *SpecialTaskDataListHandler) getContext() *gin.Context {
+	return h.ctx
+}
+
+func (h *SpecialTaskDataListHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *SpecialTaskDataListHandler) run() {
+	conditions := pack.HttpSpecialTaskDataListRequestToCondition(h.req)
+	data, err := service.SpecialTask.GetSpecialTaskDataList(h.ctx, h.req.ProjectId, h.req.PageSize, h.req.PageNum, conditions)
+	if err != nil {
+		logrus.WithContext(h.ctx).Errorf("[TaskLogisticsListHandler] error GetProjectTaskList, err:%+v", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	h.resp.Data = data
+}
+
+func (h *SpecialTaskDataListHandler) checkParam() error {
+	var errs []error
+	if h.req.PageNum < 0 || h.req.PageSize <= 0 {
+		errs = append(errs, errors.New("page param error"))
+	}
+	h.req.PageNum--
+	h.req.DataStatus = util.IsNull(h.req.DataStatus)
+	if _, err := conv.Int64(h.req.DataStatus); err != nil {
+		errs = append(errs, err)
+	}
+	if len(errs) != 0 {
+		return fmt.Errorf("check param errs:%+v", errs)
+	}
+	return nil
+}

+ 64 - 0
handler/SpecialTaskFinishDataList.go

@@ -0,0 +1,64 @@
+package handler
+
+import (
+	"errors"
+	"fmt"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/pack"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+)
+
+func WrapSpecialTaskFinishDataListHandler(ctx *gin.Context) {
+	handler := newSpecialTaskFinishDataListHandler(ctx)
+	BaseRun(handler)
+}
+
+func newSpecialTaskFinishDataListHandler(ctx *gin.Context) *SpecialTaskFinishDataListHandler {
+	return &SpecialTaskFinishDataListHandler{
+		req:  http_model.NewSpecialTaskFinishDataListRequest(),
+		resp: http_model.NewSpecialTaskFinishDataListResponse(),
+		ctx:  ctx,
+	}
+}
+
+type SpecialTaskFinishDataListHandler struct {
+	req  *http_model.SpecialTaskFinishDataListRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *SpecialTaskFinishDataListHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *SpecialTaskFinishDataListHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *SpecialTaskFinishDataListHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h *SpecialTaskFinishDataListHandler) run() {
+	conditions := pack.HttpSpecialTaskFinishDataListRequestToCondition(h.req)
+	data, err := service.SpecialTask.GetSpecialTaskFinishDataList(h.ctx, h.req.ProjectId, h.req.PageSize, h.req.PageNum, conditions)
+	if err != nil {
+		logrus.WithContext(h.ctx).Errorf("[TaskLogisticsListHandler] error GetProjectTaskList, err:%+v", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	h.resp.Data = data
+}
+func (h *SpecialTaskFinishDataListHandler) checkParam() error {
+	var errs []error
+	if h.req.PageNum < 0 || h.req.PageSize <= 0 {
+		errs = append(errs, errors.New("page param error"))
+	}
+	h.req.PageNum--
+	if len(errs) != 0 {
+		return fmt.Errorf("check param errs:%+v", errs)
+	}
+	return nil
+}

+ 73 - 0
handler/SpecialTaskInviteList.go

@@ -0,0 +1,73 @@
+package handler
+
+import (
+	"errors"
+	"fmt"
+	"github.com/cstockton/go-conv"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/pack"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+)
+
+func WrapSpecialTaskInviteListHandler(ctx *gin.Context) {
+	handler := newSpecialTaskInviteListHandler(ctx)
+	BaseRun(handler)
+}
+
+func newSpecialTaskInviteListHandler(ctx *gin.Context) *SpecialTaskInviteListHandler {
+	return &SpecialTaskInviteListHandler{
+		req:  http_model.NewSpecialTaskInviteListRequest(),
+		resp: http_model.NewSpecialTaskInviteListResponse(),
+		ctx:  ctx,
+	}
+}
+
+type SpecialTaskInviteListHandler struct {
+	req  *http_model.SpecialTaskInviteListRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *SpecialTaskInviteListHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *SpecialTaskInviteListHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *SpecialTaskInviteListHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h *SpecialTaskInviteListHandler) run() {
+	conditions := pack.HttpSpecialTaskInviteListRequestToCondition(h.req)
+	data, err := service.SpecialTask.GetSpecialTaskInviteList(h.ctx, h.req.ProjectId, h.req.PageSize, h.req.PageNum, conditions)
+	if err != nil {
+		logrus.WithContext(h.ctx).Errorf("[TaskLogisticsListHandler] error GetProjectTaskList, err:%+v", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	h.resp.Data = data
+}
+func (h *SpecialTaskInviteListHandler) checkParam() error {
+	var errs []error
+	if h.req.PageNum < 0 || h.req.PageSize <= 0 {
+		errs = append(errs, errors.New("page param error"))
+	}
+	h.req.PageNum--
+	h.req.ProjectId = util.IsNull(h.req.ProjectId)
+	if _, err := conv.Int64(h.req.ProjectId); err != nil {
+		errs = append(errs, err)
+	}
+	h.req.TaskStatus = util.IsNull(h.req.TaskStatus)
+	if _, err := conv.Int64(h.req.TaskStatus); err != nil {
+		errs = append(errs, err)
+	}
+	if len(errs) != 0 {
+		return fmt.Errorf("check param errs:%+v", errs)
+	}
+	return nil
+}

+ 69 - 0
handler/SpecialTaskLinkList.go

@@ -0,0 +1,69 @@
+package handler
+
+import (
+	"errors"
+	"fmt"
+	"github.com/cstockton/go-conv"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/pack"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+)
+
+func WrapSpecialTaskLinkListHandler(ctx *gin.Context) {
+	handler := newSpecialTaskLinkListHandler(ctx)
+	BaseRun(handler)
+}
+
+func newSpecialTaskLinkListHandler(ctx *gin.Context) *SpecialTaskLinkListHandler {
+	return &SpecialTaskLinkListHandler{
+		req:  http_model.NewSpecialTaskLinkListRequest(),
+		resp: http_model.NewSpecialTaskLinkListResponse(),
+		ctx:  ctx,
+	}
+}
+
+type SpecialTaskLinkListHandler struct {
+	req  *http_model.SpecialTaskLinkListRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *SpecialTaskLinkListHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *SpecialTaskLinkListHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *SpecialTaskLinkListHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h *SpecialTaskLinkListHandler) run() {
+	conditions := pack.HttpSpecialTaskLinkListRequestToCondition(h.req)
+	data, err := service.SpecialTask.GetSpecialTaskLinkList(h.ctx, h.req.ProjectId, h.req.PageSize, h.req.PageNum, conditions)
+	if err != nil {
+		logrus.WithContext(h.ctx).Errorf("[TaskLogisticsListHandler] error GetProjectTaskList, err:%+v", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	h.resp.Data = data
+}
+func (h *SpecialTaskLinkListHandler) checkParam() error {
+	var errs []error
+	if h.req.PageNum < 0 || h.req.PageSize <= 0 {
+		errs = append(errs, errors.New("page param error"))
+	}
+	h.req.PageNum--
+	h.req.LinkStatus = util.IsNull(h.req.LinkStatus)
+	if _, err := conv.Int64(h.req.LinkStatus); err != nil {
+		errs = append(errs, err)
+	}
+	if len(errs) != 0 {
+		return fmt.Errorf("check param errs:%+v", errs)
+	}
+	return nil
+}

+ 73 - 0
handler/SpecialTaskScriptList.go

@@ -0,0 +1,73 @@
+package handler
+
+import (
+	"errors"
+	"fmt"
+	"github.com/cstockton/go-conv"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/pack"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+)
+
+func WrapSpecialTaskScriptListHandler(ctx *gin.Context) {
+	handler := newSpecialTaskScriptListHandler(ctx)
+	BaseRun(handler)
+}
+
+func newSpecialTaskScriptListHandler(ctx *gin.Context) *SpecialTaskScriptListHandler {
+	return &SpecialTaskScriptListHandler{
+		req:  http_model.NewSpecialTaskScriptListRequest(),
+		resp: http_model.NewSpecialTaskScriptListResponse(),
+		ctx:  ctx,
+	}
+}
+
+type SpecialTaskScriptListHandler struct {
+	req  *http_model.SpecialTaskScriptListRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *SpecialTaskScriptListHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *SpecialTaskScriptListHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *SpecialTaskScriptListHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h *SpecialTaskScriptListHandler) run() {
+	conditions := pack.HttpSpecialTaskScriptListRequestToCondition(h.req)
+	data, err := service.SpecialTask.GetSpecialTaskScriptList(h.ctx, h.req.ProjectId, h.req.PageSize, h.req.PageNum, conditions)
+	if err != nil {
+		logrus.WithContext(h.ctx).Errorf("[TaskLogisticsListHandler] error GetProjectTaskList, err:%+v", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	h.resp.Data = data
+}
+func (h *SpecialTaskScriptListHandler) checkParam() error {
+	var errs []error
+	if h.req.PageNum < 0 || h.req.PageSize <= 0 {
+		errs = append(errs, errors.New("page param error"))
+	}
+	h.req.PageNum--
+	h.req.ProjectId = util.IsNull(h.req.ProjectId)
+	if _, err := conv.Int64(h.req.ProjectId); err != nil {
+		errs = append(errs, err)
+	}
+	h.req.ScriptStatus = util.IsNull(h.req.ScriptStatus)
+	if _, err := conv.Int64(h.req.ScriptStatus); err != nil {
+		errs = append(errs, err)
+	}
+	if len(errs) != 0 {
+		return fmt.Errorf("check param errs:%+v", errs)
+	}
+	return nil
+}

+ 69 - 0
handler/SpecialTaskSketchList.go

@@ -0,0 +1,69 @@
+package handler
+
+import (
+	"errors"
+	"fmt"
+	"github.com/cstockton/go-conv"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/pack"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+)
+
+func WrapSpecialTaskSketchListHandler(ctx *gin.Context) {
+	handler := newSpecialTaskSketchListHandler(ctx)
+	BaseRun(handler)
+}
+
+func newSpecialTaskSketchListHandler(ctx *gin.Context) *SpecialTaskSketchListHandler {
+	return &SpecialTaskSketchListHandler{
+		req:  http_model.NewSpecialTaskSketchListRequest(),
+		resp: http_model.NewSpecialTaskSketchListResponse(),
+		ctx:  ctx,
+	}
+}
+
+type SpecialTaskSketchListHandler struct {
+	req  *http_model.SpecialTaskSketchListRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *SpecialTaskSketchListHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *SpecialTaskSketchListHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *SpecialTaskSketchListHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h *SpecialTaskSketchListHandler) run() {
+	conditions := pack.HttpSpecialTaskSketchListRequestToCondition(h.req)
+	data, err := service.SpecialTask.GetSpecialTaskSketchList(h.ctx, h.req.ProjectId, h.req.PageSize, h.req.PageNum, conditions)
+	if err != nil {
+		logrus.WithContext(h.ctx).Errorf("[TaskLogisticsListHandler] error GetProjectTaskList, err:%+v", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	h.resp.Data = data
+}
+func (h *SpecialTaskSketchListHandler) checkParam() error {
+	var errs []error
+	if h.req.PageNum < 0 || h.req.PageSize <= 0 {
+		errs = append(errs, errors.New("page param error"))
+	}
+	h.req.PageNum--
+	h.req.SketchStatus = util.IsNull(h.req.SketchStatus)
+	if _, err := conv.Int64(h.req.SketchStatus); err != nil {
+		errs = append(errs, err)
+	}
+	if len(errs) != 0 {
+		return fmt.Errorf("check param errs:%+v", errs)
+	}
+	return nil
+}

+ 55 - 0
handler/deletePhotoUrl.go

@@ -0,0 +1,55 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/db"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/util"
+)
+
+func WrapDeletePhotoUrlHandler(ctx *gin.Context) {
+	handler := newDeletePhotoUrl(ctx)
+	BaseRun(handler)
+}
+
+type DeletePhotoUrl struct {
+	req  *http_model.DeletePhotoUrlRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (d DeletePhotoUrl) getContext() *gin.Context {
+	return d.ctx
+}
+
+func (d DeletePhotoUrl) getResponse() interface{} {
+	return d.resp
+}
+
+func (d DeletePhotoUrl) getRequest() interface{} {
+	return d.req
+}
+
+func (d DeletePhotoUrl) run() {
+	err := db.DeletePhotoUrl(d.ctx, d.req.PhotoUrl)
+	if err != nil {
+		logrus.WithContext(d.ctx).Errorf("[DeletePhotoUrl] error DeletePhotoUrl, err:%+v", err)
+		util.HandlerPackErrorResp(d.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	d.resp.Message = "图片删除成功"
+}
+
+func (d DeletePhotoUrl) checkParam() error {
+	return nil
+}
+
+func newDeletePhotoUrl(ctx *gin.Context) *DeletePhotoUrl {
+	return &DeletePhotoUrl{
+		req:  http_model.NewDeletePhotoUrlRequest(),
+		resp: http_model.NewDeletePhotoUrlResponse(),
+		ctx:  ctx,
+	}
+}

+ 1 - 0
model/common_model/talent_condition.go

@@ -2,6 +2,7 @@ package common_model
 
 type TalentConditions struct {
 	ProjectId        int64  `condition:"project_id"`        // 项目ID
+	TaskStatus       int64  `condition:"task_status"`       // 任务状态
 	LogisticsStatus  int64  `condition:"logistics_status"`  // 物流状态
 	ScriptStatus     int64  `condition:"script_status"`     // 脚本状态
 	SketchStatus     int64  `condition:"sketch_status"`     // 初稿状态

+ 14 - 0
model/http_model/DeletePhotoUrlRequest.go

@@ -0,0 +1,14 @@
+package http_model
+
+type DeletePhotoUrlRequest struct {
+	PhotoUrl string `json:"photo_url"`
+}
+
+func NewDeletePhotoUrlRequest() *DeletePhotoUrlRequest {
+	return new(DeletePhotoUrlRequest)
+}
+
+func NewDeletePhotoUrlResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 21 - 0
model/http_model/GetSpecialDataNumber.go

@@ -0,0 +1,21 @@
+package http_model
+
+type GetSpecialDataNumberRequest struct {
+	ProjectId string `json:"project_id"` // 项目id
+}
+
+type GetSpecialDataNumberData struct {
+	DataNumber         int64 `json:"data_number"`          // 应传数据数量
+	DataUnreviewNumber int64 `json:"data_unreview_number"` // 数据待审数量
+	DataPassedNumber   int64 `json:"data_passed_number"`   // 数据已通过数量
+}
+
+func NewGetSpecialDataNumberRequest() *GetSpecialDataNumberRequest {
+	return new(GetSpecialDataNumberRequest)
+}
+
+func NewGetSpecialDataNumberResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetSpecialDataNumberData)
+	return resp
+}

+ 24 - 0
model/http_model/GetSpecialFinishData.go

@@ -0,0 +1,24 @@
+package http_model
+
+type GetSpecialFinishDataRequest struct {
+	ProjectId string `json:"project_id"` // 项目id
+}
+
+type GetSpecialFinishDataData struct {
+	FinishNumber  int64 `json:"finish_number"`  // 结案数量
+	FanNumber     int   `json:"fan_number"`     // 粉丝数
+	PlayNumber    int   `json:"play_number"`    // 播放量/阅读量
+	LikeNumber    int   `json:"like_number"`    // 点赞数
+	CommentNumber int   `json:"comment_number"` // 评论数
+	CollectNumber int   `json:"collect_number"` // 收藏数
+}
+
+func NewGetSpecialFinishDataRequest() *GetSpecialFinishDataRequest {
+	return new(GetSpecialFinishDataRequest)
+}
+
+func NewGetSpecialFinishDataResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetSpecialFinishDataData)
+	return resp
+}

+ 20 - 0
model/http_model/GetSpecialInviteNumber.go

@@ -0,0 +1,20 @@
+package http_model
+
+type GetSpecialInviteNumberRequest struct {
+	ProjectId string `json:"project_id"` // 项目id
+}
+
+type GetSpecialInviteNumberData struct {
+	UnpassNumber int64 `json:"unpass_number"` // 待确认数量
+	PassNumber   int64 `json:"passed_number"` // 已确认数量
+}
+
+func NewGetSpecialInviteNumberRequest() *GetSpecialInviteNumberRequest {
+	return new(GetSpecialInviteNumberRequest)
+}
+
+func NewGetSpecialInviteNumberResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetSpecialInviteNumberData)
+	return resp
+}

+ 21 - 0
model/http_model/GetSpecialLinkNumber.go

@@ -0,0 +1,21 @@
+package http_model
+
+type GetSpecialLinkNumberRequest struct {
+	ProjectId string `json:"project_id"` // 项目id
+}
+
+type GetSpecialLinkNumberData struct {
+	LinkNumber         int64 `json:"link_number"`          // 应传链接数量
+	LinkUnreviewNumber int64 `json:"link_unreview_number"` // 链接待审数量
+	LinkPassedNumber   int64 `json:"link_passed_number"`   // 链接已通过数量
+}
+
+func NewGetSpecialLinkNumberRequest() *GetSpecialLinkNumberRequest {
+	return new(GetSpecialLinkNumberRequest)
+}
+
+func NewGetSpecialLinkNumberResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetSpecialLinkNumberData)
+	return resp
+}

+ 23 - 0
model/http_model/GetSpecialReviewNumber.go

@@ -0,0 +1,23 @@
+package http_model
+
+type GetSpecialReviewNumberRequest struct {
+	ProjectId string `json:"project_id"` // 项目id
+}
+
+type GetSpecialReviewNumberData struct {
+	ReviewNumber         int64 `json:"review_number"`          // 应审稿数量
+	ScriptUnreviewNumber int64 `json:"script_unreview_number"` // 脚本待审数量
+	ScriptPassedNumber   int64 `json:"script_passed_number"`   // 脚本已通过数量
+	SketchUnreviewNumber int64 `json:"sketch_unreview_number"` // 初稿待审数量
+	SketchPassedNumber   int64 `json:"sketch_passed_number"`   // 初稿已通过数量
+}
+
+func NewGetSpecialReviewNumberRequest() *GetSpecialReviewNumberRequest {
+	return new(GetSpecialReviewNumberRequest)
+}
+
+func NewGetSpecialReviewNumberResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetSpecialReviewNumberData)
+	return resp
+}

+ 74 - 0
model/http_model/SpecialTaskDataList.go

@@ -0,0 +1,74 @@
+package http_model
+
+import (
+	"time"
+	"youngee_m_api/model/gorm_model"
+)
+
+type SpecialTaskDataListRequest struct {
+	PageSize         int64  `json:"page_size"`
+	PageNum          int64  `json:"page_num"`
+	ProjectId        string `json:"project_id"`        // 项目ID
+	TaskId           string `json:"task_id"`           // 任务ID
+	DataStatus       string `json:"data_status"`       // 稿件状态
+	PlatformNickname string `json:"platform_nickname"` // 账号昵称
+}
+
+type SpecialTaskDataPreview struct {
+	TaskID           string  `json:"task_id"`           // 任务ID
+	PlatformNickname string  `json:"platform_nickname"` // 账号昵称
+	FansCount        string  `json:"fans_count"`        // 粉丝数
+	PlayNumber       int     `json:"play_number"`       // 播放量/阅读量
+	LikeNumber       int     `json:"like_number"`       // 点赞数
+	CommentNumber    int     `json:"comment_number"`    // 评论数
+	CollectNumber    int     `json:"collect_number"`    // 收藏数
+	LinkUrl          string  `json:"link_url"`          // 上传链接url
+	PhotoUrl         string  `json:"photo_url"`         // 数据截图url
+	AllPayment       float64 `json:"all_payment"`       // 企业支付
+	RealPayment      float64 `json:"real_payment"`      // 企业实际支付(扣除违约扣款)
+	SubmitAt         string  `json:"submit_at"`         // 提交时间
+	AgreeAt          string  `json:"agree_at"`          // 同意时间
+	ReviseOpinion    string  `json:"revise_opinion"`    // 审稿意见
+}
+
+type SpecialTaskDataInfo struct {
+	TaskID           int       `json:"task_id"`           // 任务ID
+	PlatformNickname string    `json:"platform_nickname"` // 账号昵称
+	FansCount        string    `json:"fans_count"`        // 粉丝数
+	DataId           int       `json:"data_id"`           // 数据ID
+	PlayNumber       int       `json:"play_number"`       // 播放量/阅读量
+	LikeNumber       int       `json:"like_number"`       // 点赞数
+	CommentNumber    int       `json:"comment_number"`    // 评论数
+	CollectNumber    int       `json:"collect_number"`    // 收藏数
+	LinkUrl          string    `json:"link_url"`          // 上传链接url
+	PhotoUrl         string    `json:"photo_url"`         // 数据截图url
+	AllPayment       float64   `json:"all_payment"`       // 企业支付
+	RealPayment      float64   `json:"real_payment"`      // 企业实际支付(扣除违约扣款)
+	ReviseOpinion    string    `json:"revise_opinion"`    // 审稿意见
+	CreateAt         time.Time `json:"create_at"`         // 创建时间
+	SubmitAt         time.Time `json:"submit_at"`         // 提交时间
+	AgreeAt          time.Time `json:"agree_at"`          // 同意时间
+	RejectAt         time.Time `json:"reject_at"`         // 拒绝时间
+	IsReview         int       `json:"is_review"`         // 是否审核
+}
+
+type SpecialTaskData struct {
+	Talent gorm_model.YoungeeTaskInfo
+	Data   gorm_model.YounggeeDataInfo
+	Link   gorm_model.YounggeeLinkInfo
+}
+
+type SpecialTaskDataListData struct {
+	SpecialTaskDataPreview []*SpecialTaskDataPreview `json:"project_task_pre_view"`
+	Total                  string                    `json:"total"`
+}
+
+func NewSpecialTaskDataListRequest() *SpecialTaskDataListRequest {
+	return new(SpecialTaskDataListRequest)
+}
+
+func NewSpecialTaskDataListResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(SpecialTaskDataListData)
+	return resp
+}

+ 64 - 0
model/http_model/SpecialTaskFinishDataList.go

@@ -0,0 +1,64 @@
+package http_model
+
+import (
+	"time"
+	"youngee_m_api/model/gorm_model"
+)
+
+type SpecialTaskFinishDataListRequest struct {
+	PageSize         int64  `json:"page_size"`
+	PageNum          int64  `json:"page_num"`
+	ProjectId        string `json:"project_id"`        // 项目ID
+	TaskId           string `json:"task_id"`           // 任务ID
+	PlatformNickname string `json:"platform_nickname"` // 账号昵称
+}
+
+type SpecialTaskFinishDataPreview struct {
+	TaskID           string  `json:"task_id"`           // 任务ID
+	PlatformNickname string  `json:"platform_nickname"` // 账号昵称
+	FansCount        string  `json:"fans_count"`        // 粉丝数
+	PlayNumber       int     `json:"play_number"`       // 播放量/阅读量
+	LikeNumber       int     `json:"like_number"`       // 点赞数
+	CommentNumber    int     `json:"comment_number"`    // 评论数
+	CollectNumber    int     `json:"collect_number"`    // 收藏数
+	PhotoUrl         string  `json:"photo_url"`         // 数据截图url
+	RealPayment      float64 `json:"real_payment"`      // 企业实际支付(扣除违约扣款)
+	SubmitAt         string  `json:"submit_at"`         // 提交时间
+	LinkUrl          string  `json:"link_url"`          // 上传链接url
+}
+
+type SpecialTaskFinishDataInfo struct {
+	TaskID           int       `json:"task_id"`           // 任务ID
+	PlatformNickname string    `json:"platform_nickname"` // 账号昵称
+	FansCount        string    `json:"fans_count"`        // 粉丝数
+	DataId           int       `json:"data_id"`           // 数据ID
+	PlayNumber       int       `json:"play_number"`       // 播放量/阅读量
+	LikeNumber       int       `json:"like_number"`       // 点赞数
+	CommentNumber    int       `json:"comment_number"`    // 评论数
+	CollectNumber    int       `json:"collect_number"`    // 收藏数
+	PhotoUrl         string    `json:"photo_url"`         // 数据截图url
+	RealPayment      float64   `json:"real_payment"`      // 企业实际支付(扣除违约扣款)
+	LinkUrl          string    `json:"link_url"`          // 上传链接url
+	SubmitAt         time.Time `json:"submit_at"`         // 提交时间
+}
+
+type SpecialTaskFinishData struct {
+	Talent gorm_model.YoungeeTaskInfo
+	Data   gorm_model.YounggeeDataInfo
+	Link   gorm_model.YounggeeLinkInfo
+}
+
+type SpecialTaskFinishDataListData struct {
+	SpecialTaskFinishDataPreview []*SpecialTaskFinishDataPreview `json:"project_task_pre_view"`
+	Total                        string                          `json:"total"`
+}
+
+func NewSpecialTaskFinishDataListRequest() *SpecialTaskFinishDataListRequest {
+	return new(SpecialTaskFinishDataListRequest)
+}
+
+func NewSpecialTaskFinishDataListResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(SpecialTaskFinishDataListData)
+	return resp
+}

+ 58 - 0
model/http_model/SpecialTaskInviteList.go

@@ -0,0 +1,58 @@
+package http_model
+
+import (
+	"time"
+	"youngee_m_api/model/gorm_model"
+)
+
+type SpecialTaskInviteListRequest struct {
+	PageSize         int64  `json:"page_size"`
+	PageNum          int64  `json:"page_num"`
+	ProjectId        string `json:"project_id"`        // 项目ID
+	TaskId           string `json:"task_id"`           // 任务ID
+	TaskStatus       string `json:"task_status"`       // 稿件状态
+	PlatformNickname string `json:"platform_nickname"` // 账号昵称
+}
+
+type SpecialTaskInvitePreview struct {
+	TaskId             string `json:"task_id"`               // 任务ID
+	PlatformNickname   string `json:"platform_nickname"`     // 账号昵称
+	FansCount          string `json:"fans_count"`            // 粉丝数
+	HomePageCaptureUrl string `json:"home_page_capture_url"` // 主页截图链接
+	AllPayment         string `json:"all_payment"`           // 企业支付
+	TaskReward         string `json:"task_reward"`           // 任务奖励金额
+	HomePageUrl        string `json:"home_page_url"`         // 主页链接
+	TaskStatus         string `json:"task_status"`           // 任务状态
+	CreateDate         string `json:"create_date"`           // 创建时间
+}
+
+type SpecialTaskInviteInfo struct {
+	TaskID             int       `json:"task_id"`               // 任务id
+	PlatformNickname   string    `json:"platform_nickname"`     // 在平台上的昵称
+	FansCount          string    `json:"fans_count"`            // 粉丝数
+	HomePageCaptureUrl string    `json:"home_page_capture_url"` // 主页截图链接
+	AllPayment         float64   `json:"all_payment"`           // 企业支付
+	TaskReward         float64   `json:"task_reward"`           // 任务奖励金额
+	HomePageUrl        string    `json:"home_page_url"`         // 主页链接
+	TaskStatus         string    `json:"task_status"`           // 任务状态 1待选 2已选 3落选
+	CreateDate         time.Time `json:"create_date"`           // 创建时间
+}
+
+type SpecialTaskInvite struct {
+	Talent gorm_model.YoungeeTaskInfo
+}
+
+type SpecialTaskInviteListData struct {
+	SpecialTaskInvitePreview []*SpecialTaskInvitePreview `json:"project_task_pre_view"`
+	Total                    string                      `json:"total"`
+}
+
+func NewSpecialTaskInviteListRequest() *SpecialTaskInviteListRequest {
+	return new(SpecialTaskInviteListRequest)
+}
+
+func NewSpecialTaskInviteListResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(SpecialTaskInviteListData)
+	return resp
+}

+ 61 - 0
model/http_model/SpecialTaskLinkList.go

@@ -0,0 +1,61 @@
+package http_model
+
+import (
+	"time"
+	"youngee_m_api/model/gorm_model"
+)
+
+type SpecialTaskLinkListRequest struct {
+	PageSize         int64  `json:"page_size"`
+	PageNum          int64  `json:"page_num"`
+	ProjectId        string `json:"project_id"`        // 项目ID
+	TaskId           string `json:"task_id"`           // 任务ID
+	LinkStatus       string `json:"link_status"`       // 稿件状态
+	PlatformNickname string `json:"platform_nickname"` // 账号昵称
+}
+
+type SpecialTaskLinkPreview struct {
+	TaskID           string `json:"task_id"`           // 任务ID
+	PlatformNickname string `json:"platform_nickname"` // 账号昵称
+	FansCount        string `json:"fans_count"`        // 粉丝数
+	LinkUrl          string `json:"link_url"`          // 上传链接url
+	PhotoUrl         string `json:"photo_url"`         // 上传截图url
+	Submit           string `json:"link_upload_time"`  // 创建时间
+	AgreeAt          string `json:"agree_at"`          // 同意时间
+	ReviseOpinion    string `json:"revise_opinion"`    // 审稿意见
+}
+
+type SpecialTaskLinkInfo struct {
+	TaskID           int       `json:"task_id"`           // 任务ID
+	PlatformNickname string    `json:"platform_nickname"` // 账号昵称
+	FansCount        string    `json:"fans_count"`        // 粉丝数
+	LinkId           int       `json:"link_id"`           // 链接ID
+	LinkUrl          string    `json:"link_url"`          // 上传链接url
+	PhotoUrl         string    `json:"photo_url"`         // 上传截图url
+	ReviseOpinion    string    `json:"revise_opinion"`    // 审稿意见
+	CreateAt         time.Time `json:"create_at"`         // 创建时间
+	SubmitAt         time.Time `json:"submit_at"`         // 提交时间
+	AgreeAt          time.Time `json:"agree_at"`          // 同意时间
+	RejectAt         time.Time `json:"reject_at"`         // 拒绝时间
+	IsReview         int       `json:"is_review"`         // 是否审核
+}
+
+type SpecialTaskLink struct {
+	Talent gorm_model.YoungeeTaskInfo
+	Link   gorm_model.YounggeeLinkInfo
+}
+
+type SpecialTaskLinkListData struct {
+	SpecialTaskLinkPreview []*SpecialTaskLinkPreview `json:"project_task_pre_view"`
+	Total                  string                    `json:"total"`
+}
+
+func NewSpecialTaskLinkListRequest() *SpecialTaskLinkListRequest {
+	return new(SpecialTaskLinkListRequest)
+}
+
+func NewSpecialTaskLinkListResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(SpecialTaskLinkListData)
+	return resp
+}

+ 61 - 0
model/http_model/SpecialTaskScriptList.go

@@ -0,0 +1,61 @@
+package http_model
+
+import (
+	"time"
+	"youngee_m_api/model/gorm_model"
+)
+
+type SpecialTaskScriptListRequest struct {
+	PageSize         int64  `json:"page_size"`
+	PageNum          int64  `json:"page_num"`
+	ProjectId        string `json:"project_id"`        // 项目ID
+	TaskId           string `json:"task_id"`           // 任务ID
+	ScriptStatus     string `json:"script_status"`     // 稿件状态
+	PlatformNickname string `json:"platform_nickname"` // 账号昵称
+}
+
+type SpecialTaskScriptPreview struct {
+	TaskID           string `json:"task_id"`            // 任务ID
+	PlatformNickname string `json:"platform_nickname"`  // 账号昵称
+	FansCount        string `json:"fans_count"`         // 粉丝数
+	Submit           string `json:"script_upload_time"` //创建时间
+	Title            string `json:"title"`              //脚本标题
+	AgreeAt          string `json:"agree_at"`           //同意时间
+	Content          string `json:"content"`            //脚本内容
+	ReviseOpinion    string `json:"revise_opinion"`     //审稿意见
+}
+
+type SpecialTaskScriptInfo struct {
+	TaskID           int       `json:"task_id"`           // 任务ID
+	PlatformNickname string    `json:"platform_nickname"` // 账号昵称
+	FansCount        string    `json:"fans_count"`        // 粉丝数
+	ScriptId         int       `json:"script_id"`         //脚本ID
+	Title            string    `json:"title"`             //脚本标题
+	Content          string    `json:"content"`           //脚本内容
+	ReviseOpinion    string    `json:"revise_opinion"`    //审稿意见
+	CreateAt         time.Time `json:"create_at"`         //创建时间
+	SubmitAt         time.Time `json:"submit_at"`         // 提交时间
+	AgreeAt          time.Time `json:"agree_at"`          //同意时间
+	RejectAt         time.Time `json:"reject_at"`         //拒绝时间
+	IsReview         int       `json:"is_review"`         //是否审核
+}
+
+type SpecialTaskScript struct {
+	Talent gorm_model.YoungeeTaskInfo
+	Script gorm_model.YounggeeScriptInfo
+}
+
+type SpecialTaskScriptListData struct {
+	SpecialTaskScriptPreview []*SpecialTaskScriptPreview `json:"project_task_pre_view"`
+	Total                    string                      `json:"total"`
+}
+
+func NewSpecialTaskScriptListRequest() *SpecialTaskScriptListRequest {
+	return new(SpecialTaskScriptListRequest)
+}
+
+func NewSpecialTaskScriptListResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(SpecialTaskScriptListData)
+	return resp
+}

+ 62 - 0
model/http_model/SpecialTaskSketchList.go

@@ -0,0 +1,62 @@
+package http_model
+
+import (
+	"time"
+	"youngee_m_api/model/gorm_model"
+)
+
+type SpecialTaskSketchListRequest struct {
+	PageSize         int64  `json:"page_size"`
+	PageNum          int64  `json:"page_num"`
+	ProjectId        string `json:"project_id"`        // 项目ID
+	TaskId           string `json:"task_id"`           // 任务ID
+	SketchStatus     string `json:"sketch_status"`     // 稿件状态
+	PlatformNickname string `json:"platform_nickname"` // 账号昵称
+}
+
+type SpecialTaskSketchPreview struct {
+	TaskID           string `json:"task_id"`            // 任务ID
+	SketchID         string `json:"sketch_id"`          // 初稿ID
+	PlatformNickname string `json:"platform_nickname"`  // 账号昵称
+	FansCount        string `json:"fans_count"`         // 粉丝数
+	Submit           string `json:"sketch_upload_time"` // 创建时间
+	AgreeAt          string `json:"argee_at"`           // 同意时间
+	Title            string `json:"title"`              // 初稿标题
+	Content          string `json:"content"`            // 初稿内容
+	ReviseOpinion    string `json:"revise_opinion"`     // 审稿意见
+}
+
+type SpecialTaskSketchInfo struct {
+	TaskID           int       `json:"task_id"`           // 任务ID
+	PlatformNickname string    `json:"platform_nickname"` // 账号昵称
+	FansCount        string    `json:"fans_count"`        // 粉丝数
+	SketchId         int       `json:"sketch_id"`         //初稿ID
+	Title            string    `json:"title"`             //初稿标题
+	Content          string    `json:"content"`           //初稿内容
+	ReviseOpinion    string    `json:"revise_opinion"`    //审稿意见
+	CreateAt         time.Time `json:"create_at"`         //创建时间
+	SubmitAt         time.Time `json:"submit_at"`         // 提交时间
+	AgreeAt          time.Time `json:"agree_at"`          //同意时间
+	RejectAt         time.Time `json:"reject_at"`         //拒绝时间
+	IsReview         int       `json:"is_review"`         //是否审核
+}
+
+type SpecialTaskSketch struct {
+	Talent gorm_model.YoungeeTaskInfo
+	Sketch gorm_model.YounggeeSketchInfo
+}
+
+type SpecialTaskSketchListData struct {
+	SpecialTaskSketchPreview []*SpecialTaskSketchPreview `json:"project_task_pre_view"`
+	Total                    string                      `json:"total"`
+}
+
+func NewSpecialTaskSketchListRequest() *SpecialTaskSketchListRequest {
+	return new(SpecialTaskSketchListRequest)
+}
+
+func NewSpecialTaskSketchListResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(SpecialTaskSketchListData)
+	return resp
+}

+ 68 - 0
pack/special_task_data_list.go

@@ -0,0 +1,68 @@
+package pack
+
+import (
+	"github.com/caixw/lib.go/conv"
+	"github.com/tidwall/gjson"
+	"youngee_m_api/model/http_model"
+)
+
+func MGormSpecialTaskDataInfoListToHttpSpecialTaskDataPreviewList(gormSpecialTaskDataInfos []*http_model.SpecialTaskDataInfo) []*http_model.SpecialTaskDataPreview {
+	var httpProjectPreviews []*http_model.SpecialTaskDataPreview
+	for _, gormSpecialTaskDataInfo := range gormSpecialTaskDataInfos {
+		httpSpecialTaskDataPreview := MGormSpecialTaskDataInfoToHttpSpecialTaskDataPreview(gormSpecialTaskDataInfo)
+		httpProjectPreviews = append(httpProjectPreviews, httpSpecialTaskDataPreview)
+	}
+	return httpProjectPreviews
+}
+
+func MGormSpecialTaskDataInfoToHttpSpecialTaskDataPreview(SpecialTaskDataInfo *http_model.SpecialTaskDataInfo) *http_model.SpecialTaskDataPreview {
+	return &http_model.SpecialTaskDataPreview{
+		TaskID:           conv.MustString(SpecialTaskDataInfo.TaskID, ""),
+		PlatformNickname: conv.MustString(SpecialTaskDataInfo.PlatformNickname, ""),
+		FansCount:        conv.MustString(SpecialTaskDataInfo.FansCount, ""),
+		PlayNumber:       SpecialTaskDataInfo.PlayNumber,
+		LikeNumber:       SpecialTaskDataInfo.LikeNumber,
+		CommentNumber:    SpecialTaskDataInfo.CommentNumber,
+		CollectNumber:    SpecialTaskDataInfo.CollectNumber,
+		LinkUrl:          SpecialTaskDataInfo.LinkUrl,
+		PhotoUrl:         SpecialTaskDataInfo.PhotoUrl,
+		AllPayment:       SpecialTaskDataInfo.AllPayment,
+		RealPayment:      SpecialTaskDataInfo.RealPayment,
+		ReviseOpinion:    SpecialTaskDataInfo.ReviseOpinion,
+		SubmitAt:         conv.MustString(SpecialTaskDataInfo.SubmitAt, "")[0:19],
+		AgreeAt:          conv.MustString(SpecialTaskDataInfo.AgreeAt, "")[0:19],
+	}
+}
+
+func SpecialTaskDataToTaskInfo(SpecialTaskDatas []*http_model.SpecialTaskData) []*http_model.SpecialTaskDataInfo {
+	var SpecialTaskDataInfos []*http_model.SpecialTaskDataInfo
+	for _, SpecialTaskData := range SpecialTaskDatas {
+		SpecialTaskData := GetSpecialTaskDataInfoStruct(SpecialTaskData)
+		SpecialTaskDataInfos = append(SpecialTaskDataInfos, SpecialTaskData)
+	}
+	return SpecialTaskDataInfos
+}
+
+func GetSpecialTaskDataInfoStruct(SpecialTaskData *http_model.SpecialTaskData) *http_model.SpecialTaskDataInfo {
+	TalentPlatformInfoSnap := SpecialTaskData.Talent.TalentPlatformInfoSnap
+	return &http_model.SpecialTaskDataInfo{
+		TaskID:           SpecialTaskData.Talent.TaskId,
+		PlatformNickname: conv.MustString(gjson.Get(TalentPlatformInfoSnap, "platform_nickname"), ""),
+		FansCount:        conv.MustString(gjson.Get(TalentPlatformInfoSnap, "fans_count"), ""),
+		DataId:           SpecialTaskData.Data.DataID,
+		PlayNumber:       SpecialTaskData.Data.PlayNumber,
+		LikeNumber:       SpecialTaskData.Data.LikeNumber,
+		CommentNumber:    SpecialTaskData.Data.CommentNumber,
+		CollectNumber:    SpecialTaskData.Data.CollectNumber,
+		LinkUrl:          SpecialTaskData.Link.LinkUrl,
+		PhotoUrl:         SpecialTaskData.Data.PhotoUrl,
+		AllPayment:       SpecialTaskData.Talent.AllPayment,
+		RealPayment:      SpecialTaskData.Talent.RealPayment,
+		ReviseOpinion:    SpecialTaskData.Data.ReviseOpinion,
+		CreateAt:         SpecialTaskData.Data.CreateAt,
+		SubmitAt:         SpecialTaskData.Data.SubmitAt,
+		AgreeAt:          SpecialTaskData.Data.AgreeAt,
+		RejectAt:         SpecialTaskData.Data.RejectAt,
+		IsReview:         SpecialTaskData.Data.IsReview,
+	}
+}

+ 15 - 0
pack/special_task_data_list_condition.go

@@ -0,0 +1,15 @@
+package pack
+
+import (
+	"github.com/caixw/lib.go/conv"
+	"youngee_m_api/model/common_model"
+	"youngee_m_api/model/http_model"
+)
+
+func HttpSpecialTaskDataListRequestToCondition(req *http_model.SpecialTaskDataListRequest) *common_model.TalentConditions {
+	return &common_model.TalentConditions{
+		ProjectId:        conv.MustInt64(req.ProjectId, 0),
+		DataStatus:       conv.MustInt64(req.DataStatus, 0),
+		PlatformNickname: conv.MustString(req.PlatformNickname, ""),
+	}
+}

+ 58 - 0
pack/special_task_finishdata_list.go

@@ -0,0 +1,58 @@
+package pack
+
+import (
+	"github.com/caixw/lib.go/conv"
+	"github.com/tidwall/gjson"
+	"youngee_m_api/model/http_model"
+)
+
+func MGormSpecialTaskFinishDataInfoListToHttpSpecialTaskFinishDataPreviewList(gormSpecialTaskFinishDataInfos []*http_model.SpecialTaskFinishDataInfo) []*http_model.SpecialTaskFinishDataPreview {
+	var httpProjectPreviews []*http_model.SpecialTaskFinishDataPreview
+	for _, gormSpecialTaskFinishDataInfo := range gormSpecialTaskFinishDataInfos {
+		httpSpecialTaskFinishDataPreview := MGormSpecialTaskFinishDataInfoToHttpSpecialTaskFinishDataPreview(gormSpecialTaskFinishDataInfo)
+		httpProjectPreviews = append(httpProjectPreviews, httpSpecialTaskFinishDataPreview)
+	}
+	return httpProjectPreviews
+}
+
+func MGormSpecialTaskFinishDataInfoToHttpSpecialTaskFinishDataPreview(SpecialTaskFinishDataInfo *http_model.SpecialTaskFinishDataInfo) *http_model.SpecialTaskFinishDataPreview {
+	return &http_model.SpecialTaskFinishDataPreview{
+		TaskID:           conv.MustString(SpecialTaskFinishDataInfo.TaskID, ""),
+		PlatformNickname: conv.MustString(SpecialTaskFinishDataInfo.PlatformNickname, ""),
+		FansCount:        conv.MustString(SpecialTaskFinishDataInfo.FansCount, ""),
+		PlayNumber:       SpecialTaskFinishDataInfo.PlayNumber,
+		LikeNumber:       SpecialTaskFinishDataInfo.LikeNumber,
+		CommentNumber:    SpecialTaskFinishDataInfo.CommentNumber,
+		CollectNumber:    SpecialTaskFinishDataInfo.CollectNumber,
+		RealPayment:      SpecialTaskFinishDataInfo.RealPayment,
+		PhotoUrl:         SpecialTaskFinishDataInfo.PhotoUrl,
+		LinkUrl:          SpecialTaskFinishDataInfo.LinkUrl,
+		SubmitAt:         conv.MustString(SpecialTaskFinishDataInfo.SubmitAt, "")[0:19],
+	}
+}
+
+func SpecialTaskFinishDataToTaskInfo(SpecialTaskFinishDatas []*http_model.SpecialTaskFinishData) []*http_model.SpecialTaskFinishDataInfo {
+	var SpecialTaskFinishDataInfos []*http_model.SpecialTaskFinishDataInfo
+	for _, SpecialTaskFinishData := range SpecialTaskFinishDatas {
+		SpecialTaskFinishData := GetSpecialTaskFinishDataInfoStruct(SpecialTaskFinishData)
+		SpecialTaskFinishDataInfos = append(SpecialTaskFinishDataInfos, SpecialTaskFinishData)
+	}
+	return SpecialTaskFinishDataInfos
+}
+
+func GetSpecialTaskFinishDataInfoStruct(SpecialTaskFinishData *http_model.SpecialTaskFinishData) *http_model.SpecialTaskFinishDataInfo {
+	TalentPlatformInfoSnap := SpecialTaskFinishData.Talent.TalentPlatformInfoSnap
+	return &http_model.SpecialTaskFinishDataInfo{
+		TaskID:           SpecialTaskFinishData.Talent.TaskId,
+		PlatformNickname: conv.MustString(gjson.Get(TalentPlatformInfoSnap, "platform_nickname"), ""),
+		FansCount:        conv.MustString(gjson.Get(TalentPlatformInfoSnap, "fans_count"), ""),
+		PlayNumber:       SpecialTaskFinishData.Data.PlayNumber,
+		LikeNumber:       SpecialTaskFinishData.Data.LikeNumber,
+		CommentNumber:    SpecialTaskFinishData.Data.CommentNumber,
+		CollectNumber:    SpecialTaskFinishData.Data.CollectNumber,
+		RealPayment:      SpecialTaskFinishData.Talent.RealPayment,
+		PhotoUrl:         SpecialTaskFinishData.Data.PhotoUrl,
+		LinkUrl:          SpecialTaskFinishData.Link.LinkUrl,
+		SubmitAt:         SpecialTaskFinishData.Data.SubmitAt,
+	}
+}

+ 14 - 0
pack/special_task_finishdata_list_condition.go

@@ -0,0 +1,14 @@
+package pack
+
+import (
+	"github.com/caixw/lib.go/conv"
+	"youngee_m_api/model/common_model"
+	"youngee_m_api/model/http_model"
+)
+
+func HttpSpecialTaskFinishDataListRequestToCondition(req *http_model.SpecialTaskFinishDataListRequest) *common_model.TalentConditions {
+	return &common_model.TalentConditions{
+		ProjectId:        conv.MustInt64(req.ProjectId, 0),
+		PlatformNickname: conv.MustString(req.PlatformNickname, ""),
+	}
+}

+ 59 - 0
pack/special_task_invite_list.go

@@ -0,0 +1,59 @@
+package pack
+
+import (
+	"fmt"
+	"github.com/caixw/lib.go/conv"
+	"github.com/tidwall/gjson"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+)
+
+func MGormSpecialTaskInviteInfoListToHttpSpecialTaskInvitePreviewList(gormSpecialTaskInviteInfos []*http_model.SpecialTaskInviteInfo) []*http_model.SpecialTaskInvitePreview {
+	var httpProjectPreviews []*http_model.SpecialTaskInvitePreview
+	for _, gormSpecialTaskInviteInfo := range gormSpecialTaskInviteInfos {
+		httpSpecialTaskInvitePreview := GormFullProjectToHttpSpecialTaskInvitePreview(gormSpecialTaskInviteInfo)
+		httpProjectPreviews = append(httpProjectPreviews, httpSpecialTaskInvitePreview)
+	}
+	return httpProjectPreviews
+}
+
+func GormFullProjectToHttpSpecialTaskInvitePreview(projectTaskInfo *http_model.SpecialTaskInviteInfo) *http_model.SpecialTaskInvitePreview {
+	createDate := conv.MustString(projectTaskInfo.CreateDate, "")
+	createDate = createDate[0:19]
+	return &http_model.SpecialTaskInvitePreview{
+		TaskId:             conv.MustString(projectTaskInfo.TaskID, ""),
+		PlatformNickname:   conv.MustString(projectTaskInfo.PlatformNickname, ""),
+		FansCount:          conv.MustString(projectTaskInfo.FansCount, ""),
+		HomePageCaptureUrl: conv.MustString(projectTaskInfo.HomePageCaptureUrl, ""),
+		AllPayment:         conv.MustString(projectTaskInfo.AllPayment, ""),
+		TaskReward:         conv.MustString(projectTaskInfo.TaskReward, ""),
+		HomePageUrl:        conv.MustString(projectTaskInfo.HomePageUrl, ""),
+		TaskStatus:         conv.MustString(projectTaskInfo.TaskStatus, ""),
+		CreateDate:         createDate,
+	}
+}
+
+func YoungeeTaskInfoToSpecialTaskInviteInfo(taskAccounts []gorm_model.YoungeeTaskInfo) []*http_model.SpecialTaskInviteInfo {
+	var projectTasks []*http_model.SpecialTaskInviteInfo
+	for _, taskAccount := range taskAccounts {
+		projectTask := GetSpecialTaskInviteInfoStruct(taskAccount)
+		projectTasks = append(projectTasks, projectTask)
+	}
+	return projectTasks
+}
+
+func GetSpecialTaskInviteInfoStruct(taskAccount gorm_model.YoungeeTaskInfo) *http_model.SpecialTaskInviteInfo {
+	TalentPlatformInfoSnap := taskAccount.TalentPlatformInfoSnap
+	fmt.Printf("任务-账户关联 %+v", taskAccount)
+	return &http_model.SpecialTaskInviteInfo{
+		TaskID:             taskAccount.TaskId,
+		TaskReward:         taskAccount.TaskReward,
+		AllPayment:         taskAccount.AllPayment,
+		PlatformNickname:   conv.MustString(gjson.Get(TalentPlatformInfoSnap, "platform_nickname"), ""),
+		CreateDate:         taskAccount.CreateDate,
+		HomePageUrl:        conv.MustString(gjson.Get(TalentPlatformInfoSnap, "home_page_url"), ""),
+		HomePageCaptureUrl: conv.MustString(gjson.Get(TalentPlatformInfoSnap, "home_page_capture_url"), ""),
+		FansCount:          conv.MustString(gjson.Get(TalentPlatformInfoSnap, "fans_count"), ""),
+		TaskStatus:         string(rune(taskAccount.TaskStatus)),
+	}
+}

+ 15 - 0
pack/special_task_invite_list_condition.go

@@ -0,0 +1,15 @@
+package pack
+
+import (
+	"github.com/caixw/lib.go/conv"
+	"youngee_m_api/model/common_model"
+	"youngee_m_api/model/http_model"
+)
+
+func HttpSpecialTaskInviteListRequestToCondition(req *http_model.SpecialTaskInviteListRequest) *common_model.TalentConditions {
+	return &common_model.TalentConditions{
+		ProjectId:        conv.MustInt64(req.ProjectId, 0),
+		TaskStatus:       conv.MustInt64(req.TaskStatus, 0),
+		PlatformNickname: conv.MustString(req.PlatformNickname, ""),
+	}
+}

+ 56 - 0
pack/special_task_link_list.go

@@ -0,0 +1,56 @@
+package pack
+
+import (
+	"github.com/caixw/lib.go/conv"
+	"github.com/tidwall/gjson"
+	"youngee_m_api/model/http_model"
+)
+
+func MGormSpecialTaskLinkInfoListToHttpSpecialTaskLinkPreviewList(gormSpecialTaskLinkInfos []*http_model.SpecialTaskLinkInfo) []*http_model.SpecialTaskLinkPreview {
+	var httpProjectPreviews []*http_model.SpecialTaskLinkPreview
+	for _, gormSpecialTaskLinkInfo := range gormSpecialTaskLinkInfos {
+		httpSpecialTaskLinkPreview := MGormSpecialTaskLinkInfoToHttpSpecialTaskLinkPreview(gormSpecialTaskLinkInfo)
+		httpProjectPreviews = append(httpProjectPreviews, httpSpecialTaskLinkPreview)
+	}
+	return httpProjectPreviews
+}
+
+func MGormSpecialTaskLinkInfoToHttpSpecialTaskLinkPreview(SpecialTaskLinkInfo *http_model.SpecialTaskLinkInfo) *http_model.SpecialTaskLinkPreview {
+	return &http_model.SpecialTaskLinkPreview{
+		TaskID:           conv.MustString(SpecialTaskLinkInfo.TaskID, ""),
+		PlatformNickname: conv.MustString(SpecialTaskLinkInfo.PlatformNickname, ""),
+		FansCount:        conv.MustString(SpecialTaskLinkInfo.FansCount, ""),
+		PhotoUrl:         SpecialTaskLinkInfo.PhotoUrl,
+		LinkUrl:          SpecialTaskLinkInfo.LinkUrl,
+		ReviseOpinion:    SpecialTaskLinkInfo.ReviseOpinion,
+		Submit:           conv.MustString(SpecialTaskLinkInfo.SubmitAt, "")[0:19],
+		AgreeAt:          conv.MustString(SpecialTaskLinkInfo.AgreeAt, "")[0:19],
+	}
+}
+
+func SpecialTaskLinkToTaskInfo(SpecialTaskLinks []*http_model.SpecialTaskLink) []*http_model.SpecialTaskLinkInfo {
+	var SpecialTaskLinkInfos []*http_model.SpecialTaskLinkInfo
+	for _, SpecialTaskLink := range SpecialTaskLinks {
+		SpecialTaskLink := GetSpecialTaskLinkInfoStruct(SpecialTaskLink)
+		SpecialTaskLinkInfos = append(SpecialTaskLinkInfos, SpecialTaskLink)
+	}
+	return SpecialTaskLinkInfos
+}
+
+func GetSpecialTaskLinkInfoStruct(SpecialTaskLink *http_model.SpecialTaskLink) *http_model.SpecialTaskLinkInfo {
+	TalentPlatformInfoSnap := SpecialTaskLink.Talent.TalentPlatformInfoSnap
+	return &http_model.SpecialTaskLinkInfo{
+		TaskID:           SpecialTaskLink.Talent.TaskId,
+		PlatformNickname: conv.MustString(gjson.Get(TalentPlatformInfoSnap, "platform_nickname"), ""),
+		FansCount:        conv.MustString(gjson.Get(TalentPlatformInfoSnap, "fans_count"), ""),
+		LinkId:           SpecialTaskLink.Link.LinkID,
+		PhotoUrl:         SpecialTaskLink.Link.PhotoUrl,
+		LinkUrl:          SpecialTaskLink.Link.LinkUrl,
+		ReviseOpinion:    SpecialTaskLink.Link.ReviseOpinion,
+		CreateAt:         SpecialTaskLink.Link.CreateAt,
+		SubmitAt:         SpecialTaskLink.Link.SubmitAt,
+		AgreeAt:          SpecialTaskLink.Link.AgreeAt,
+		RejectAt:         SpecialTaskLink.Link.RejectAt,
+		IsReview:         SpecialTaskLink.Link.IsReview,
+	}
+}

+ 15 - 0
pack/special_task_link_list_condition.go

@@ -0,0 +1,15 @@
+package pack
+
+import (
+	"github.com/caixw/lib.go/conv"
+	"youngee_m_api/model/common_model"
+	"youngee_m_api/model/http_model"
+)
+
+func HttpSpecialTaskLinkListRequestToCondition(req *http_model.SpecialTaskLinkListRequest) *common_model.TalentConditions {
+	return &common_model.TalentConditions{
+		ProjectId:        conv.MustInt64(req.ProjectId, 0),
+		LinkStatus:       conv.MustInt64(req.LinkStatus, 0),
+		PlatformNickname: conv.MustString(req.PlatformNickname, ""),
+	}
+}

+ 56 - 0
pack/special_task_script_list.go

@@ -0,0 +1,56 @@
+package pack
+
+import (
+	"github.com/caixw/lib.go/conv"
+	"github.com/tidwall/gjson"
+	"youngee_m_api/model/http_model"
+)
+
+func MGormSpecialTaskScriptInfoListToHttpSpecialTaskScriptPreviewList(gormSpecialTaskScriptInfos []*http_model.SpecialTaskScriptInfo) []*http_model.SpecialTaskScriptPreview {
+	var httpProjectPreviews []*http_model.SpecialTaskScriptPreview
+	for _, gormSpecialTaskScriptInfo := range gormSpecialTaskScriptInfos {
+		httpSpecialTaskScriptPreview := MGormSpecialTaskScriptInfoToHttpSpecialTaskScriptPreview(gormSpecialTaskScriptInfo)
+		httpProjectPreviews = append(httpProjectPreviews, httpSpecialTaskScriptPreview)
+	}
+	return httpProjectPreviews
+}
+
+func MGormSpecialTaskScriptInfoToHttpSpecialTaskScriptPreview(SpecialTaskScriptInfo *http_model.SpecialTaskScriptInfo) *http_model.SpecialTaskScriptPreview {
+	return &http_model.SpecialTaskScriptPreview{
+		TaskID:           conv.MustString(SpecialTaskScriptInfo.TaskID, ""),
+		PlatformNickname: conv.MustString(SpecialTaskScriptInfo.PlatformNickname, ""),
+		FansCount:        conv.MustString(SpecialTaskScriptInfo.FansCount, ""),
+		Title:            SpecialTaskScriptInfo.Title,
+		Content:          SpecialTaskScriptInfo.Content,
+		ReviseOpinion:    SpecialTaskScriptInfo.ReviseOpinion,
+		Submit:           conv.MustString(SpecialTaskScriptInfo.SubmitAt, "")[0:19],
+		AgreeAt:          conv.MustString(SpecialTaskScriptInfo.AgreeAt, "")[0:19],
+	}
+}
+
+func SpecialTaskScriptToTaskInfo(SpecialTaskScripts []*http_model.SpecialTaskScript) []*http_model.SpecialTaskScriptInfo {
+	var SpecialTaskScriptInfos []*http_model.SpecialTaskScriptInfo
+	for _, SpecialTaskScript := range SpecialTaskScripts {
+		SpecialTaskScript := GetSpecialTaskScriptInfoStruct(SpecialTaskScript)
+		SpecialTaskScriptInfos = append(SpecialTaskScriptInfos, SpecialTaskScript)
+	}
+	return SpecialTaskScriptInfos
+}
+
+func GetSpecialTaskScriptInfoStruct(SpecialTaskScript *http_model.SpecialTaskScript) *http_model.SpecialTaskScriptInfo {
+	TalentPlatformInfoSnap := SpecialTaskScript.Talent.TalentPlatformInfoSnap
+	return &http_model.SpecialTaskScriptInfo{
+		TaskID:           SpecialTaskScript.Talent.TaskId,
+		PlatformNickname: conv.MustString(gjson.Get(TalentPlatformInfoSnap, "platform_nickname"), ""),
+		FansCount:        conv.MustString(gjson.Get(TalentPlatformInfoSnap, "fans_count"), ""),
+		ScriptId:         SpecialTaskScript.Script.ScriptID,
+		Title:            SpecialTaskScript.Script.Title,
+		Content:          SpecialTaskScript.Script.Content,
+		ReviseOpinion:    SpecialTaskScript.Script.ReviseOpinion,
+		CreateAt:         SpecialTaskScript.Script.CreateAt,
+		SubmitAt:         SpecialTaskScript.Script.SubmitAt,
+		AgreeAt:          SpecialTaskScript.Script.AgreeAt,
+		RejectAt:         SpecialTaskScript.Script.RejectAt,
+		IsReview:         SpecialTaskScript.Script.IsReview,
+	}
+}

+ 15 - 0
pack/special_task_script_list_condition.go

@@ -0,0 +1,15 @@
+package pack
+
+import (
+	"github.com/caixw/lib.go/conv"
+	"youngee_m_api/model/common_model"
+	"youngee_m_api/model/http_model"
+)
+
+func HttpSpecialTaskScriptListRequestToCondition(req *http_model.SpecialTaskScriptListRequest) *common_model.TalentConditions {
+	return &common_model.TalentConditions{
+		ProjectId:        conv.MustInt64(req.ProjectId, 0),
+		ScriptStatus:     conv.MustInt64(req.ScriptStatus, 0),
+		PlatformNickname: conv.MustString(req.PlatformNickname, ""),
+	}
+}

+ 57 - 0
pack/special_task_sketch_list.go

@@ -0,0 +1,57 @@
+package pack
+
+import (
+	"github.com/caixw/lib.go/conv"
+	"github.com/tidwall/gjson"
+	"youngee_m_api/model/http_model"
+)
+
+func MGormSpecialTaskSketchInfoListToHttpSpecialTaskSketchPreviewList(gormSpecialTaskSketchInfos []*http_model.SpecialTaskSketchInfo) []*http_model.SpecialTaskSketchPreview {
+	var httpProjectPreviews []*http_model.SpecialTaskSketchPreview
+	for _, gormSpecialTaskSketchInfo := range gormSpecialTaskSketchInfos {
+		httpSpecialTaskSketchPreview := MGormSpecialTaskSketchInfoToHttpSpecialTaskSketchPreview(gormSpecialTaskSketchInfo)
+		httpProjectPreviews = append(httpProjectPreviews, httpSpecialTaskSketchPreview)
+	}
+	return httpProjectPreviews
+}
+
+func MGormSpecialTaskSketchInfoToHttpSpecialTaskSketchPreview(SpecialTaskSketchInfo *http_model.SpecialTaskSketchInfo) *http_model.SpecialTaskSketchPreview {
+	return &http_model.SpecialTaskSketchPreview{
+		TaskID:           conv.MustString(SpecialTaskSketchInfo.TaskID, ""),
+		SketchID:         conv.MustString(SpecialTaskSketchInfo.SketchId, ""),
+		PlatformNickname: conv.MustString(SpecialTaskSketchInfo.PlatformNickname, ""),
+		FansCount:        conv.MustString(SpecialTaskSketchInfo.FansCount, ""),
+		Title:            SpecialTaskSketchInfo.Title,
+		Content:          SpecialTaskSketchInfo.Content,
+		ReviseOpinion:    SpecialTaskSketchInfo.ReviseOpinion,
+		Submit:           conv.MustString(SpecialTaskSketchInfo.SubmitAt, "")[0:19],
+		AgreeAt:          conv.MustString(SpecialTaskSketchInfo.AgreeAt, "")[0:19],
+	}
+}
+
+func SpecialTaskSketchToTaskInfo(SpecialTaskSketchs []*http_model.SpecialTaskSketch) []*http_model.SpecialTaskSketchInfo {
+	var SpecialTaskSketchInfos []*http_model.SpecialTaskSketchInfo
+	for _, SpecialTaskSketch := range SpecialTaskSketchs {
+		SpecialTaskSketch := GetSpecialTaskSketchInfoStruct(SpecialTaskSketch)
+		SpecialTaskSketchInfos = append(SpecialTaskSketchInfos, SpecialTaskSketch)
+	}
+	return SpecialTaskSketchInfos
+}
+
+func GetSpecialTaskSketchInfoStruct(SpecialTaskSketch *http_model.SpecialTaskSketch) *http_model.SpecialTaskSketchInfo {
+	TalentPlatformInfoSnap := SpecialTaskSketch.Talent.TalentPlatformInfoSnap
+	return &http_model.SpecialTaskSketchInfo{
+		TaskID:           SpecialTaskSketch.Talent.TaskId,
+		PlatformNickname: conv.MustString(gjson.Get(TalentPlatformInfoSnap, "platform_nickname"), ""),
+		FansCount:        conv.MustString(gjson.Get(TalentPlatformInfoSnap, "fans_count"), ""),
+		SketchId:         SpecialTaskSketch.Sketch.SketchID,
+		Title:            SpecialTaskSketch.Sketch.Title,
+		Content:          SpecialTaskSketch.Sketch.Content,
+		ReviseOpinion:    SpecialTaskSketch.Sketch.ReviseOpinion,
+		CreateAt:         SpecialTaskSketch.Sketch.CreateAt,
+		SubmitAt:         SpecialTaskSketch.Sketch.SubmitAt,
+		AgreeAt:          SpecialTaskSketch.Sketch.AgreeAt,
+		RejectAt:         SpecialTaskSketch.Sketch.RejectAt,
+		IsReview:         SpecialTaskSketch.Sketch.IsReview,
+	}
+}

+ 15 - 0
pack/special_task_sketch_list_condition.go

@@ -0,0 +1,15 @@
+package pack
+
+import (
+	"github.com/caixw/lib.go/conv"
+	"youngee_m_api/model/common_model"
+	"youngee_m_api/model/http_model"
+)
+
+func HttpSpecialTaskSketchListRequestToCondition(req *http_model.SpecialTaskSketchListRequest) *common_model.TalentConditions {
+	return &common_model.TalentConditions{
+		ProjectId:        conv.MustInt64(req.ProjectId, 0),
+		SketchStatus:     conv.MustInt64(req.SketchStatus, 0),
+		PlatformNickname: conv.MustString(req.PlatformNickname, ""),
+	}
+}

+ 40 - 28
route/init.go

@@ -41,6 +41,7 @@ func InitRoute(r *gin.Engine) {
 		m.POST("/project/create", handler.WrapCreateProjectHandler)
 		m.POST("/product/create", handler.WrapCreateProductHandler)
 		m.POST("/product/find", handler.WrapFindProductHandler)
+		m.POST("/product/deletePhotoUrl", handler.WrapDeletePhotoUrlHandler) // 在数据库中删除图片url
 		m.POST("/pay/paysum", handler.WrapPaySumHandler)
 		m.POST("/pay/projectpay", handler.WrapProjectPayHandler) // 支付
 		m.POST("/project/update", handler.WrapUpdateProjectHandler)
@@ -52,34 +53,45 @@ func InitRoute(r *gin.Engine) {
 		m.POST("/project/getdatanumberinfo", handler.WrapGetDataNumberInfoHandler)
 		m.POST("/project/getreviewnumberinfo", handler.WrapGetReviewNumberInfoHandler)
 		m.POST("/project/getdefaultnumberinfo", handler.WrapGetDefaultNumberInfoHandler)
-		m.POST("/project/tasklogisticslist", handler.WrapTaskLogisticsListHandler)           // 物流信息查询
-		m.POST("/project/createlogistics", handler.WrapCreateLogisticsHandler)               // 创建物流信息
-		m.POST("/project/signforreceipt", handler.WrapSignForReceiptHandler)                 // 签收订单
-		m.POST("/project/taskscriptlist", handler.WrapTaskScriptListHandler)                 // 查询脚本列表
-		m.POST("/project/scriptopinion", handler.WrapScriptOpinionHandler)                   // 脚本审核意见提交
-		m.POST("/project/acceptscript", handler.WrapAcceptScriptHandler)                     // 同意脚本
-		m.POST("/project/tasksketchlist", handler.WrapTaskSketchListHandler)                 // 查询初稿列表
-		m.POST("/project/findsketchphoto", handler.WrapFindSketchPhotoHandler)               // 查询脚本配图和视频demo
-		m.POST("/project/sketchopinion", handler.WrapSketchOpinionHandler)                   // 脚本审核意见提交
-		m.POST("/project/acceptsketch", handler.WrapAcceptSketchHandler)                     // 同意脚本
-		m.POST("/project/tasklinklist", handler.WrapTaskLinkListHandler)                     // 查询链接列表
-		m.POST("/project/linkopinion", handler.WrapLinkOpinionHandler)                       // 链接审核意见提交
-		m.POST("/project/acceptlink", handler.WrapAcceptLinkHandler)                         // 同意链接
-		m.POST("/project/taskdatalist", handler.WrapTaskDataListHandler)                     // 查询数据列表
-		m.POST("/project/dataopinion", handler.WrapDataOpinionHandler)                       // 数据审核意见提交
-		m.POST("/project/acceptdata", handler.WrapAcceptDataHandler)                         // 同意数据
-		m.POST("/project/taskdefaultreviewlist", handler.WrapTaskDefaultReviewListHandler)   // 查询违约列表-脚本、初稿、链接上传违约
-		m.POST("/project/taskdefaultdatalist", handler.WrapTaskDefaultDataListHandler)       // 查询违约列表-数据违约
-		m.POST("/project/taskteminatinglist", handler.WrapTaskTerminatingListHandler)        // 查询违约列表-解约待处理
-		m.POST("/project/taskteminatedlist", handler.WrapTaskTerminatedListHandler)          // 查询违约列表-解约
-		m.POST("/project/taskteminate", handler.WrapTaskTerminateHandler)                    // 解约
-		m.POST("/project/getsketchinfo", handler.WrapGetSketchInfoHandler)                   // 获取初稿
-		m.POST("/project/taskfinishlist", handler.WrapTaskFinishListHandler)                 // 查询违约列表-数据违约
-		m.POST("/project/getfinishnumberinfo", handler.WrapGetFinishNumberInfoHandler)       // 获取结案数量
-		m.POST("/project/getProduceRecords", handler.WrapGetProjectRecordsHandler)           // 获取项目记录
-		m.POST("/project/recruit/getservicecharge", handler.WrapGetServiceChargeHandler)     // 获取产品置换服务费
-		m.POST("/project/getlogisticsnumberinfo", handler.WrapGetLogisticsNumberInfoHandler) // 获取物流数量
-		m.POST("/project/getfinishdata", handler.WrapGetFinishDataHandler)                   // 获取结案信息
+		m.POST("/project/tasklogisticslist", handler.WrapTaskLogisticsListHandler)                 // 物流信息查询
+		m.POST("/project/createlogistics", handler.WrapCreateLogisticsHandler)                     // 创建物流信息
+		m.POST("/project/signforreceipt", handler.WrapSignForReceiptHandler)                       // 签收订单
+		m.POST("/project/taskscriptlist", handler.WrapTaskScriptListHandler)                       // 查询脚本列表
+		m.POST("/project/scriptopinion", handler.WrapScriptOpinionHandler)                         // 脚本审核意见提交
+		m.POST("/project/acceptscript", handler.WrapAcceptScriptHandler)                           // 同意脚本
+		m.POST("/project/tasksketchlist", handler.WrapTaskSketchListHandler)                       // 查询初稿列表
+		m.POST("/project/findsketchphoto", handler.WrapFindSketchPhotoHandler)                     // 查询脚本配图和视频demo
+		m.POST("/project/sketchopinion", handler.WrapSketchOpinionHandler)                         // 脚本审核意见提交
+		m.POST("/project/acceptsketch", handler.WrapAcceptSketchHandler)                           // 同意脚本
+		m.POST("/project/tasklinklist", handler.WrapTaskLinkListHandler)                           // 查询链接列表
+		m.POST("/project/linkopinion", handler.WrapLinkOpinionHandler)                             // 链接审核意见提交
+		m.POST("/project/acceptlink", handler.WrapAcceptLinkHandler)                               // 同意链接
+		m.POST("/project/taskdatalist", handler.WrapTaskDataListHandler)                           // 查询数据列表
+		m.POST("/project/dataopinion", handler.WrapDataOpinionHandler)                             // 数据审核意见提交
+		m.POST("/project/acceptdata", handler.WrapAcceptDataHandler)                               // 同意数据
+		m.POST("/project/taskdefaultreviewlist", handler.WrapTaskDefaultReviewListHandler)         // 查询违约列表-脚本、初稿、链接上传违约
+		m.POST("/project/taskdefaultdatalist", handler.WrapTaskDefaultDataListHandler)             // 查询违约列表-数据违约
+		m.POST("/project/taskteminatinglist", handler.WrapTaskTerminatingListHandler)              // 查询违约列表-解约待处理
+		m.POST("/project/taskteminatedlist", handler.WrapTaskTerminatedListHandler)                // 查询违约列表-解约
+		m.POST("/project/taskteminate", handler.WrapTaskTerminateHandler)                          // 解约
+		m.POST("/project/getsketchinfo", handler.WrapGetSketchInfoHandler)                         // 获取初稿
+		m.POST("/project/taskfinishlist", handler.WrapTaskFinishListHandler)                       // 查询违约列表-数据违约
+		m.POST("/project/getfinishnumberinfo", handler.WrapGetFinishNumberInfoHandler)             // 获取结案数量
+		m.POST("/project/getProduceRecords", handler.WrapGetProjectRecordsHandler)                 // 获取项目记录
+		m.POST("/project/recruit/getservicecharge", handler.WrapGetServiceChargeHandler)           // 获取产品置换服务费
+		m.POST("/project/getlogisticsnumberinfo", handler.WrapGetLogisticsNumberInfoHandler)       // 获取物流数量
+		m.POST("/project/getfinishdata", handler.WrapGetFinishDataHandler)                         // 获取结案信息
+		m.POST("/project/getSpecialInviteNumber", handler.WrapGetSpecialInviteNumberHandler)       // 查询专项任务邀请管理任务数量
+		m.POST("/project/getSpecialReviewNumber", handler.WrapGetSpecialReviewNumberHandler)       // 查询专项任务审稿管理任务数量
+		m.POST("/project/getSpecialLinkNumber", handler.WrapGetSpecialLinkNumberHandler)           // 查询专项任务发布管理任务数量
+		m.POST("/project/getSpecialDataNumber", handler.WrapGetSpecialDataNumberHandler)           // 查询专项任务数据管理任务数量
+		m.POST("/project/specialTaskInviteList", handler.WrapSpecialTaskInviteListHandler)         // 查询专项任务邀请管理任务列表
+		m.POST("/project/specialTaskSketchList", handler.WrapSpecialTaskSketchListHandler)         // 查询专项任务审稿管理任务列表
+		m.POST("/project/specialTaskScriptList", handler.WrapSpecialTaskScriptListHandler)         // 查询专项任务审稿管理任务列表
+		m.POST("/project/specialTaskLinkList", handler.WrapSpecialTaskLinkListHandler)             // 查询专项任务发布管理任务列表
+		m.POST("/project/specialTaskDataList", handler.WrapSpecialTaskDataListHandler)             // 查询专项任务数据管理任务列表
+		m.POST("/project/specialTaskFinishDataList", handler.WrapSpecialTaskFinishDataListHandler) // 查询专项任务结案数据任务列表
+		m.POST("/project/getspecialfinishdata", handler.WrapGetSpecialFinishDataHandler)           // 查询专项任务结案单结案数据
 	}
 	u := r.Group("/youngee/m/user")
 	{

+ 88 - 0
service/SpecialTask.go

@@ -0,0 +1,88 @@
+package service
+
+import (
+	"github.com/caixw/lib.go/conv"
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_m_api/db"
+	"youngee_m_api/model/common_model"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/pack"
+)
+
+var SpecialTask *specialTask
+
+type specialTask struct {
+}
+
+func (p *specialTask) GetSpecialTaskInviteList(ctx *gin.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) (*http_model.SpecialTaskInviteListData, error) {
+	TaskInvites, total, err := db.GetSpecialTaskInviteList(ctx, projectID, pageSize, pageNum, conditions)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call GetTaskInviteList error,err:%+v", err)
+		return nil, err
+	}
+	TaskInviteListData := new(http_model.SpecialTaskInviteListData)
+	TaskInviteListData.SpecialTaskInvitePreview = pack.MGormSpecialTaskInviteInfoListToHttpSpecialTaskInvitePreviewList(TaskInvites)
+	TaskInviteListData.Total = conv.MustString(total, "")
+	return TaskInviteListData, nil
+}
+
+func (p *specialTask) GetSpecialTaskScriptList(ctx *gin.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) (*http_model.SpecialTaskScriptListData, error) {
+	TaskScripts, total, err := db.GetSpecialTaskScriptList(ctx, projectID, pageSize, pageNum, conditions)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call GetTaskScriptList error,err:%+v", err)
+		return nil, err
+	}
+	TaskScriptListData := new(http_model.SpecialTaskScriptListData)
+	TaskScriptListData.SpecialTaskScriptPreview = pack.MGormSpecialTaskScriptInfoListToHttpSpecialTaskScriptPreviewList(TaskScripts)
+	TaskScriptListData.Total = conv.MustString(total, "")
+	return TaskScriptListData, nil
+}
+
+func (p *specialTask) GetSpecialTaskSketchList(ctx *gin.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) (*http_model.SpecialTaskSketchListData, error) {
+	TaskSketchs, total, err := db.GetSpecialTaskSketchList(ctx, projectID, pageSize, pageNum, conditions)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call GetTaskSketchList error,err:%+v", err)
+		return nil, err
+	}
+	TaskSketchListData := new(http_model.SpecialTaskSketchListData)
+	TaskSketchListData.SpecialTaskSketchPreview = pack.MGormSpecialTaskSketchInfoListToHttpSpecialTaskSketchPreviewList(TaskSketchs)
+	TaskSketchListData.Total = conv.MustString(total, "")
+	return TaskSketchListData, nil
+}
+
+func (p *specialTask) GetSpecialTaskLinkList(ctx *gin.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) (*http_model.SpecialTaskLinkListData, error) {
+	TaskLinks, total, err := db.GetSpecialTaskLinkList(ctx, projectID, pageSize, pageNum, conditions)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call GetTaskLinkList error,err:%+v", err)
+		return nil, err
+	}
+	TaskLinkListData := new(http_model.SpecialTaskLinkListData)
+	TaskLinkListData.SpecialTaskLinkPreview = pack.MGormSpecialTaskLinkInfoListToHttpSpecialTaskLinkPreviewList(TaskLinks)
+	TaskLinkListData.Total = conv.MustString(total, "")
+	return TaskLinkListData, nil
+}
+
+func (p *specialTask) GetSpecialTaskDataList(ctx *gin.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) (*http_model.SpecialTaskDataListData, error) {
+	TaskDatas, total, err := db.GetSpecialTaskDataList(ctx, projectID, pageSize, pageNum, conditions)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call GetTaskDataList error,err:%+v", err)
+		return nil, err
+	}
+	TaskDataListData := new(http_model.SpecialTaskDataListData)
+	TaskDataListData.SpecialTaskDataPreview = pack.MGormSpecialTaskDataInfoListToHttpSpecialTaskDataPreviewList(TaskDatas)
+	TaskDataListData.Total = conv.MustString(total, "")
+	return TaskDataListData, nil
+}
+
+func (p *specialTask) GetSpecialTaskFinishDataList(ctx *gin.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) (*http_model.SpecialTaskFinishDataListData, error) {
+	TaskFinishDatas, total, err := db.GetSpecialTaskFinishList(ctx, pageSize, pageNum, conditions)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call GetTaskFinishList error,err:%+v", err)
+		return nil, err
+	}
+	TaskFinishListData := new(http_model.SpecialTaskFinishDataListData)
+	TaskFinishListData.SpecialTaskFinishDataPreview = pack.MGormSpecialTaskFinishDataInfoListToHttpSpecialTaskFinishDataPreviewList(TaskFinishDatas)
+	TaskFinishListData.Total = conv.MustString(total, "")
+	return TaskFinishListData, nil
+}

+ 55 - 0
service/number_info.go

@@ -104,3 +104,58 @@ func (*number) GetLogisticsNumberInfo(ctx context.Context, request http_model.Ge
 
 	return NumberData, nil
 }
+
+func (*number) GetSpecialInviteNumber(ctx context.Context, request http_model.GetSpecialInviteNumberRequest) (*http_model.GetSpecialInviteNumberData, error) {
+	projectId := conv.MustInt64(request.ProjectId, 0)
+	NumberData, err := db.GetSpecialInviteNumber(ctx, projectId)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data service] call CreateData error,err:%+v", err)
+		return nil, err
+	}
+
+	return NumberData, nil
+}
+
+func (*number) GetSpecialReviewNumber(ctx context.Context, request http_model.GetSpecialReviewNumberRequest) (*http_model.GetSpecialReviewNumberData, error) {
+	projectId := conv.MustInt64(request.ProjectId, 0)
+	NumberData, err := db.GetSpecialReviewNumber(ctx, projectId)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data service] call CreateData error,err:%+v", err)
+		return nil, err
+	}
+
+	return NumberData, nil
+}
+
+func (*number) GetSpecialLinkNumber(ctx context.Context, request http_model.GetSpecialLinkNumberRequest) (*http_model.GetSpecialLinkNumberData, error) {
+	projectId := conv.MustInt64(request.ProjectId, 0)
+	NumberData, err := db.GetSpecialLinkNumber(ctx, projectId)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data service] call CreateData error,err:%+v", err)
+		return nil, err
+	}
+
+	return NumberData, nil
+}
+
+func (*number) GetSpecialDataNumber(ctx context.Context, request http_model.GetSpecialDataNumberRequest) (*http_model.GetSpecialDataNumberData, error) {
+	projectId := conv.MustInt64(request.ProjectId, 0)
+	NumberData, err := db.GetSpecialDataNumber(ctx, projectId)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data service] call CreateData error,err:%+v", err)
+		return nil, err
+	}
+
+	return NumberData, nil
+}
+
+func (*number) GetSpecialFinishData(ctx context.Context, request http_model.GetSpecialFinishDataRequest) (*http_model.GetSpecialFinishDataData, error) {
+	projectId := conv.MustInt64(request.ProjectId, 0)
+	NumberData, err := db.GetSpecialFinishDataNumber(ctx, projectId)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data service] call CreateData error,err:%+v", err)
+		return nil, err
+	}
+
+	return NumberData, nil
+}