Ohio-HYF 2 anos atrás
pai
commit
8eb59da8ec
57 arquivos alterados com 2852 adições e 93 exclusões
  1. 1 1
      consts/project.go
  2. 135 0
      db/data.go
  3. 4 13
      db/default.go
  4. 163 0
      db/finish.go
  5. 110 0
      db/link.go
  6. 98 0
      db/number_info.go
  7. 25 3
      db/project.go
  8. 111 0
      db/script.go
  9. 112 0
      db/sketch.go
  10. 74 0
      db/task.go
  11. 59 0
      handler/GetSpecialDataNumber.go
  12. 59 0
      handler/GetSpecialFinishData.go
  13. 59 0
      handler/GetSpecialInviteNumber.go
  14. 59 0
      handler/GetSpecialLinkNumber.go
  15. 59 0
      handler/GetSpecialReviewNumber.go
  16. 77 0
      handler/SpecialTaskDataList.go
  17. 76 0
      handler/SpecialTaskFinishData.go
  18. 69 0
      handler/SpecialTaskFinishDataList.go
  19. 73 0
      handler/SpecialTaskInviteList.go
  20. 73 0
      handler/SpecialTaskLinkList.go
  21. 73 0
      handler/SpecialTaskScriptList.go
  22. 73 0
      handler/SpecialTaskSketchList.go
  23. 1 0
      model/common_model/project_condition.go
  24. 1 0
      model/common_model/talent_condition.go
  25. 21 0
      model/http_model/GetSpecialDataNumber.go
  26. 24 0
      model/http_model/GetSpecialFinishData.go
  27. 20 0
      model/http_model/GetSpecialInviteNumber.go
  28. 21 0
      model/http_model/GetSpecialLinkNumber.go
  29. 23 0
      model/http_model/GetSpecialReviewNumber.go
  30. 74 0
      model/http_model/SpecialTaskDataList.go
  31. 64 0
      model/http_model/SpecialTaskFinishDataList.go
  32. 58 0
      model/http_model/SpecialTaskInviteList.go
  33. 61 0
      model/http_model/SpecialTaskLinkList.go
  34. 61 0
      model/http_model/SpecialTaskScriptList.go
  35. 62 0
      model/http_model/SpecialTaskSketchList.go
  36. 9 8
      model/http_model/full_project_list.go
  37. 6 6
      model/http_model/project_draft_list.go
  38. 3 1
      pack/full_project.go
  39. 1 0
      pack/full_project_condition.go
  40. 3 1
      pack/project_draft.go
  41. 70 0
      pack/special_task_data_list.go
  42. 16 0
      pack/special_task_data_list_condition.go
  43. 60 0
      pack/special_task_finishdata_list.go
  44. 15 0
      pack/special_task_finishdata_list_condition.go
  45. 60 0
      pack/special_task_invite_list.go
  46. 18 0
      pack/special_task_invite_list_condition.go
  47. 58 0
      pack/special_task_link_list.go
  48. 16 0
      pack/special_task_link_list_condition.go
  49. 58 0
      pack/special_task_script_list.go
  50. 16 0
      pack/special_task_script_list_condition.go
  51. 58 0
      pack/special_task_sketch_list.go
  52. 16 0
      pack/special_task_sketch_list_condition.go
  53. 0 2
      pack/task_data_list.go
  54. 41 27
      route/init.go
  55. 89 0
      service/SpecialTask.go
  56. 55 0
      service/number_info.go
  57. 51 31
      service/project.go

+ 1 - 1
consts/project.go

@@ -69,7 +69,7 @@ func GetProjectContentType(status int64) string {
 
 var ProjectTypeMap = map[int64]string{
 	1: "全流程项目",
-	2: "专项项目",
+	2: "专项执行项目",
 }
 
 func GetProjectType(projectType int64) string {

+ 135 - 0
db/data.go

@@ -182,3 +182,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)] = 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)] = 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
+}

+ 4 - 13
db/default.go

@@ -37,23 +37,12 @@ func GetTaskDefaultReviewList(ctx context.Context, projectID string, pageSize, p
 				db = db.Where("cur_default_type = 5")
 			}
 			continue
-		}
-		if !util.IsBlank(value) {
-			logrus.Println("tag: ", tag)
+		} else if !util.IsBlank(value) {
 			if tag == "platform_nickname" {
 				platform_nickname = fmt.Sprintf("%v", value.Interface())
 				continue
-			} else if tag == "project_id" {
+			} else if tag == "project_id" || tag == "strategy_id" {
 				db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
-			} else if tag == "strategy_ids" {
-				strategyIds := strings.Split(fmt.Sprintf("%v", value.Interface()), ",")
-				var strategyIdList []int
-				for _, strategyId := range strategyIds {
-					strategyIdList = append(strategyIdList, conv.MustInt(strategyId))
-				}
-				db = db.Where("strategy_id in ?", strategyIdList)
-			} else {
-				db = db.Where(fmt.Sprintf("%s like '%%%v%%'", tag, value.Interface()))
 			}
 		}
 	}
@@ -129,6 +118,8 @@ func GetTaskDefaultReviewList(ctx context.Context, projectID string, pageSize, p
 			newTaskDefaultReviews = append(newTaskDefaultReviews, v)
 		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
 			newTaskDefaultReviews = append(newTaskDefaultReviews, v)
+		} else if strings.Contains(conv.MustString(v.TaskID), platform_nickname) {
+			newTaskDefaultReviews = append(newTaskDefaultReviews, v)
 		} else {
 			totalTask--
 		}

+ 163 - 0
db/finish.go

@@ -13,6 +13,7 @@ import (
 
 	"github.com/issue9/conv"
 	"github.com/sirupsen/logrus"
+	"github.com/tidwall/gjson"
 )
 
 func GetTaskFinishList(ctx context.Context, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskFinishInfo, int64, error) {
@@ -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)] = 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)] = 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)] = 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)
+		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

@@ -167,3 +167,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)] = 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

@@ -216,3 +216,101 @@ func GetFinishNumberInfo(ctx context.Context, projectId int64, strategyIds []int
 	}
 	return &FinishNumberInfoDataList, nil
 }
+
+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 = ?", 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
+}

+ 25 - 3
db/project.go

@@ -253,10 +253,32 @@ func SetProjectFinish(ctx context.Context, projectId int64) error {
 		logrus.WithContext(ctx).Errorf("[Project db] Update ProjectInfo error,err:%+v", err)
 		return err
 	}
-	// 2. 释放企业账户因项目冻结的资金
-	// 	1). 计算剩余资金
+	// // 2. 释放企业账户因项目冻结的资金
+	// // 	1). 计算剩余资金
+	// var allPayment float64
+	// var realPayment float64
+	// err = db9.Model(gorm_model.YoungeeTaskInfo{}).Select("sum(all_payment) as allPayment").Where("project_id = ? and task_status = 2 and task_stage >= 15", projectInfo.ProjectID).Find(&allPayment).Error
+	// if err != nil {
+	// 	log.Println("DB GetAutoCaseCloseTask error in data:", err)
+	// 	return err
+	// }
+	// err = db9.Model(gorm_model.YoungeeTaskInfo{}).Select("sum(real_payment) as realPayment").Where("project_id = ? and task_status = 2 and task_stage >= 15", projectInfo.ProjectID).Find(&realPayment).Error
+	// if err != nil {
+	// 	log.Println("DB GetAutoCaseCloseTask error in data:", err)
+	// 	return err
+	// }
+	// fmt.Println("企业应支付金额总计:", allPayment, "实际支付总计:", realPayment)
 
-	// 	2). 释放剩余资金
+	// // 	2). 释放剩余资金
+	// err = db9.Model(gorm_model.Enterprise{}).Where("enterprise_id = ?", projectInfo.EnterpriseID).Updates(
+	// 	map[string]interface{}{
+	// 		"frozen_balance":    gorm.Expr("frozen_balance - ?", allPayment),
+	// 		"balance":           gorm.Expr("balance - ?", realPayment),
+	// 		"available_balance": gorm.Expr("available_balance + ?", allPayment-realPayment)}).Error
+	// if err != nil {
+	// 	log.Println("DB GetAutoCaseCloseTask error in data:", err)
+	// 	return err
+	// }
 
 	return nil
 }

+ 111 - 0
db/script.go

@@ -168,3 +168,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)] = 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
+}

+ 112 - 0
db/sketch.go

@@ -196,3 +196,115 @@ func FindPhoto(ctx context.Context, SketchID int64) ([]gorm_model.YounggeeSketch
 	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)] = 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
+}

+ 74 - 0
db/task.go

@@ -2,9 +2,16 @@ package db
 
 import (
 	"context"
+	"fmt"
+	"reflect"
 	"strconv"
+	"strings"
 	"time"
+	"youngee_b_api/model/common_model"
 	"youngee_b_api/model/gorm_model"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/pack"
+	"youngee_b_api/util"
 
 	"github.com/issue9/conv"
 	"github.com/sirupsen/logrus"
@@ -167,3 +174,70 @@ func SetTaskFinish(ctx context.Context, TaskIDs []int) error {
 	}
 	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{})
+	// 根据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
+}

+ 59 - 0
handler/GetSpecialDataNumber.go

@@ -0,0 +1,59 @@
+package handler
+
+import (
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+)
+
+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
+}

+ 59 - 0
handler/GetSpecialFinishData.go

@@ -0,0 +1,59 @@
+package handler
+
+import (
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+)
+
+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
+}

+ 59 - 0
handler/GetSpecialInviteNumber.go

@@ -0,0 +1,59 @@
+package handler
+
+import (
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+)
+
+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
+}

+ 59 - 0
handler/GetSpecialLinkNumber.go

@@ -0,0 +1,59 @@
+package handler
+
+import (
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+)
+
+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
+}

+ 59 - 0
handler/GetSpecialReviewNumber.go

@@ -0,0 +1,59 @@
+package handler
+
+import (
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+)
+
+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
+}

+ 77 - 0
handler/SpecialTaskDataList.go

@@ -0,0 +1,77 @@
+package handler
+
+import (
+	"errors"
+	"fmt"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/pack"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/issue9/conv"
+	"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.ProjectId = util.IsNull(h.req.ProjectId)
+	if _, err := conv.Int64(h.req.ProjectId); err != nil {
+		errs = append(errs, err)
+	}
+	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
+}

+ 76 - 0
handler/SpecialTaskFinishData.go

@@ -0,0 +1,76 @@
+package handler
+
+// import (
+// 	"errors"
+// 	"fmt"
+// 	"youngee_b_api/consts"
+// 	"youngee_b_api/model/http_model"
+// 	"youngee_b_api/pack"
+// 	"youngee_b_api/service"
+// 	"youngee_b_api/util"
+
+// 	"github.com/gin-gonic/gin"
+// 	"github.com/issue9/conv"
+// 	"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--
+// 	h.req.ProjectId = util.IsNull(h.req.ProjectId)
+// 	if _, err := conv.Int64(h.req.ProjectId); err != nil {
+// 		errs = append(errs, err)
+// 	}
+// 	h.req.FinishDataStatus = util.IsNull(h.req.FinishDataStatus)
+// 	if _, err := conv.Int64(h.req.FinishDataStatus); err != nil {
+// 		errs = append(errs, err)
+// 	}
+// 	if len(errs) != 0 {
+// 		return fmt.Errorf("check param errs:%+v", errs)
+// 	}
+// 	return nil
+// }

+ 69 - 0
handler/SpecialTaskFinishDataList.go

@@ -0,0 +1,69 @@
+package handler
+
+import (
+	"errors"
+	"fmt"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/pack"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/issue9/conv"
+	"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--
+	h.req.ProjectId = util.IsNull(h.req.ProjectId)
+	if _, err := conv.Int64(h.req.ProjectId); err != nil {
+		errs = append(errs, err)
+	}
+	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"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/pack"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/issue9/conv"
+	"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
+}

+ 73 - 0
handler/SpecialTaskLinkList.go

@@ -0,0 +1,73 @@
+package handler
+
+import (
+	"errors"
+	"fmt"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/pack"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/issue9/conv"
+	"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.ProjectId = util.IsNull(h.req.ProjectId)
+	if _, err := conv.Int64(h.req.ProjectId); err != nil {
+		errs = append(errs, err)
+	}
+	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"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/pack"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/issue9/conv"
+	"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
+}

+ 73 - 0
handler/SpecialTaskSketchList.go

@@ -0,0 +1,73 @@
+package handler
+
+import (
+	"errors"
+	"fmt"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/pack"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/issue9/conv"
+	"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.ProjectId = util.IsNull(h.req.ProjectId)
+	if _, err := conv.Int64(h.req.ProjectId); err != nil {
+		errs = append(errs, err)
+	}
+	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
+}

+ 1 - 0
model/common_model/project_condition.go

@@ -4,6 +4,7 @@ type ProjectCondition struct {
 	ProjectId          string `condition:"project_id"`       // 项目ID
 	ProjectName        string `condition:"project_name"`     // 项目名
 	ProjectStatus      int64  `condition:"project_status"`   // 项目状态
+	ProjectType        int64  `condition:"project_type"`     // 项目状态
 	ProjectPlatform    int64  `condition:"project_platform"` // 项目平台
 	ProjectForm        int64  `condition:"project_form"`     // 项目形式
 	ProjectContentType int64  `condition:"content_type"`     // 内容形式

+ 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"`     // 初稿状态

+ 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_b_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_b_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_b_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_b_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_b_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_b_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
+}

+ 9 - 8
model/http_model/full_project_list.go

@@ -6,20 +6,21 @@ type FullProjectListRequest struct {
 	ProjectId          string `json:"project_id"`           // 项目ID
 	ProjectName        string `json:"project_name"`         // 项目名
 	ProjectStatus      string `json:"project_status"`       // 项目状态
+	ProjectType        string `json:"project_type"`         // 项目类型
 	ProjectPlatform    string `json:"project_platform"`     // 项目平台
 	ProjectForm        string `json:"project_form"`         // 项目形式
 	ProjectContentType string `json:"project_content_type"` // 内容形式
 	ProjectUpdated     string `json:"project_updated"`      // 最后操作时间
 }
 type FullProjectPreview struct {
-	ProjectId          string   `json:"project_id"`           // 项目ID
-	ProjectName        string   `json:"project_name"`         // 项目名
-	ProjectStatus      string   `json:"project_status"`       // 项目状态
-	ProjectPlatform    string   `json:"project_platform"`     // 项目平台
-	ProjectForm        string   `json:"project_form"`         // 项目形式
-	//ProjectFeeForms    []string `json:"project_fee_forms"`    // 稿费形式
-	ProjectContentType string   `json:"project_content_type"` // 内容形式
-	ProjectUpdated     string   `json:"project_updated"`      // 最后操作时间
+	ProjectId          string `json:"project_id"`           // 项目ID
+	ProjectName        string `json:"project_name"`         // 项目名
+	ProjectStatus      string `json:"project_status"`       // 项目状态
+	ProjectPlatform    string `json:"project_platform"`     // 项目平台
+	ProjectForm        string `json:"project_form"`         // 项目形式
+	ProjectType        string `json:"project_type"`         // 项目类型
+	ProjectContentType string `json:"project_content_type"` // 内容形式
+	ProjectUpdated     string `json:"project_updated"`      // 最后操作时间
 }
 type FullProjectListData struct {
 	FullProjectPreview []*FullProjectPreview `json:"full_project_pre_view"`

+ 6 - 6
model/http_model/project_draft_list.go

@@ -12,12 +12,12 @@ type ProjectDraftListRequest struct {
 	ProjectUpdated     string `json:"project_updated"`      // 最后操作时间
 }
 type ProjectDraftPreview struct {
-	ProjectId       string `json:"project_id"`       // 项目ID
-	ProjectName     string `json:"project_name"`     // 项目名
-	ProjectStatus   string `json:"project_status"`   // 项目状态
-	ProjectPlatform string `json:"project_platform"` // 项目平台
-	ProjectForm     string `json:"project_form"`     // 项目形式
-	//ProjectFeeForms    []string `json:"project_fee_forms"`    // 稿费形式
+	ProjectId          string `json:"project_id"`           // 项目ID
+	ProjectName        string `json:"project_name"`         // 项目名
+	ProjectStatus      string `json:"project_status"`       // 项目状态
+	ProjectPlatform    string `json:"project_platform"`     // 项目平台
+	ProjectForm        string `json:"project_form"`         // 项目形式
+	ProjectType        string `json:"project_type"`         // 项目类型
 	ProjectContentType string `json:"project_content_type"` // 内容形式
 	ProjectUpdated     string `json:"project_updated"`      // 最后操作时间
 }

+ 3 - 1
pack/full_project.go

@@ -1,10 +1,11 @@
 package pack
 
 import (
-	"github.com/issue9/conv"
 	"youngee_b_api/consts"
 	"youngee_b_api/model/gorm_model"
 	"youngee_b_api/model/http_model"
+
+	"github.com/issue9/conv"
 )
 
 func MGormFullProjectToHttpFullProjectPreview(gormProjectInfos []*gorm_model.ProjectInfo) []*http_model.FullProjectPreview {
@@ -25,6 +26,7 @@ func GormFullProjectToHttpFullProjectPreview(gormProjectInfo *gorm_model.Project
 		ProjectPlatform:    consts.GetProjectPlatform(gormProjectInfo.ProjectPlatform),
 		ProjectForm:        consts.GetProjectForm(gormProjectInfo.ProjectForm),
 		ProjectContentType: consts.GetProjectContentType(gormProjectInfo.ContentType),
+		ProjectType:        consts.GetProjectType(gormProjectInfo.ProjectType),
 		ProjectUpdated:     updatedTime,
 	}
 }

+ 1 - 0
pack/full_project_condition.go

@@ -13,6 +13,7 @@ func HttpFullProjectRequestToCondition(req *http_model.FullProjectListRequest) *
 		ProjectId:          req.ProjectId,
 		ProjectName:        req.ProjectName,
 		ProjectStatus:      conv.MustInt64(req.ProjectStatus, 0),
+		ProjectType:        conv.MustInt64(req.ProjectType, 0),
 		ProjectPlatform:    conv.MustInt64(req.ProjectPlatform, 0),
 		ProjectForm:        conv.MustInt64(req.ProjectForm, 0),
 		ProjectContentType: conv.MustInt64(req.ProjectContentType, 0),

+ 3 - 1
pack/project_draft.go

@@ -1,10 +1,11 @@
 package pack
 
 import (
-	"github.com/issue9/conv"
 	"youngee_b_api/consts"
 	"youngee_b_api/model/gorm_model"
 	"youngee_b_api/model/http_model"
+
+	"github.com/issue9/conv"
 )
 
 func MGormProjectDraftToHttpProjectDraftPreview(gormProjectInfos []*gorm_model.ProjectInfo) []*http_model.ProjectDraftPreview {
@@ -25,6 +26,7 @@ func GormProjectDraftToHttpProjectDraftPreview(gormProjectInfo *gorm_model.Proje
 		ProjectPlatform:    consts.GetProjectPlatform(gormProjectInfo.ProjectPlatform),
 		ProjectForm:        consts.GetProjectForm(gormProjectInfo.ProjectForm),
 		ProjectContentType: consts.GetProjectContentType(gormProjectInfo.ContentType),
+		ProjectType:        consts.GetProjectType(gormProjectInfo.ProjectType),
 		ProjectUpdated:     updatedTime,
 	}
 }

+ 70 - 0
pack/special_task_data_list.go

@@ -0,0 +1,70 @@
+package pack
+
+import (
+	"youngee_b_api/model/http_model"
+
+	"github.com/tidwall/gjson"
+
+	"github.com/issue9/conv"
+)
+
+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,
+	}
+}

+ 16 - 0
pack/special_task_data_list_condition.go

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

+ 60 - 0
pack/special_task_finishdata_list.go

@@ -0,0 +1,60 @@
+package pack
+
+import (
+	"youngee_b_api/model/http_model"
+
+	"github.com/tidwall/gjson"
+
+	"github.com/issue9/conv"
+)
+
+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,
+	}
+}

+ 15 - 0
pack/special_task_finishdata_list_condition.go

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

+ 60 - 0
pack/special_task_invite_list.go

@@ -0,0 +1,60 @@
+package pack
+
+import (
+	"fmt"
+	"youngee_b_api/model/gorm_model"
+	"youngee_b_api/model/http_model"
+
+	"github.com/issue9/conv"
+	"github.com/tidwall/gjson"
+)
+
+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)),
+	}
+}

+ 18 - 0
pack/special_task_invite_list_condition.go

@@ -0,0 +1,18 @@
+package pack
+
+import (
+	"fmt"
+	"youngee_b_api/model/common_model"
+	"youngee_b_api/model/http_model"
+
+	"github.com/issue9/conv"
+)
+
+func HttpSpecialTaskInviteListRequestToCondition(req *http_model.SpecialTaskInviteListRequest) *common_model.TalentConditions {
+	fmt.Printf("初稿转换 %+v", req)
+	return &common_model.TalentConditions{
+		ProjectId:        conv.MustInt64(req.ProjectId),
+		TaskStatus:       conv.MustInt64(req.TaskStatus),
+		PlatformNickname: conv.MustString(req.PlatformNickname),
+	}
+}

+ 58 - 0
pack/special_task_link_list.go

@@ -0,0 +1,58 @@
+package pack
+
+import (
+	"youngee_b_api/model/http_model"
+
+	"github.com/tidwall/gjson"
+
+	"github.com/issue9/conv"
+)
+
+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,
+	}
+}

+ 16 - 0
pack/special_task_link_list_condition.go

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

+ 58 - 0
pack/special_task_script_list.go

@@ -0,0 +1,58 @@
+package pack
+
+import (
+	"youngee_b_api/model/http_model"
+
+	"github.com/tidwall/gjson"
+
+	"github.com/issue9/conv"
+)
+
+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,
+	}
+}

+ 16 - 0
pack/special_task_script_list_condition.go

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

+ 58 - 0
pack/special_task_sketch_list.go

@@ -0,0 +1,58 @@
+package pack
+
+import (
+	"youngee_b_api/model/http_model"
+
+	"github.com/issue9/conv"
+	"github.com/tidwall/gjson"
+)
+
+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,
+	}
+}

+ 16 - 0
pack/special_task_sketch_list_condition.go

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

+ 0 - 2
pack/task_data_list.go

@@ -18,8 +18,6 @@ func MGormTaskDataInfoListToHttpTaskDataPreviewList(gormTaskDataInfos []*http_mo
 }
 
 func MGormTaskDataInfoToHttpTaskDataPreview(TaskDataInfo *http_model.TaskDataInfo) *http_model.TaskDataPreview {
-	//deliveryTime := conv.MustString(TaskDataInfo.DeliveryTime)
-	//deliveryTime = deliveryTime[0:19]
 	return &http_model.TaskDataPreview{
 		TaskID:            conv.MustString(TaskDataInfo.TaskID),
 		PlatformNickname:  conv.MustString(TaskDataInfo.PlatformNickname),

+ 41 - 27
route/init.go

@@ -62,29 +62,29 @@ func InitRoute(r *gin.Engine) {
 		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("/pay/getCodeUrl", handler.WrapGetCodeUrlHandler)                           // 获取微信支付codeURL
-		m.POST("/pay/queryOrderByTradeId", handler.WrapQueryOrderByTradeIdHandler)         //根据交易id查询微信是否扫码付款
-		m.POST("/pay/rechargeBalance", handler.WrapRechargeBalanceHandler)                 // 支付成功后修改企业余额
-		m.POST("/project/feeDetail", handler.WrapFeeDetailHandler)                         // 查看结项的费用明细
-		m.POST("/pay/rechargeRecord", handler.WrapRechargeRecordHandler)                   // 查看充值记录
-		m.POST("/invoice/addReceiveAddress", handler.WrapAddReceiveAddressHandler)         // 新增收货地址
-		m.POST("/invoice/addReceiveInfo", handler.WrapAddReceiveInfoHandler)               // 新增发票信息
-		m.GET("/invoice/getReceiveAddress", handler.WrapGetReceiveAddressHandler)          // 获取收货地址
-		m.GET("/invoice/getReceiveInfo", handler.WrapGetReceiveInfoHandler)                // 获取发票信息
-		m.POST("/invoice/operateReceiveInfo", handler.WrapOperateReceiveInfoHandler)       // 修改或删除发票信息
+		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("/pay/getCodeUrl", handler.WrapGetCodeUrlHandler)                     // 获取微信支付codeURL
+		m.POST("/pay/queryOrderByTradeId", handler.WrapQueryOrderByTradeIdHandler)   //根据交易id查询微信是否扫码付款
+		m.POST("/pay/rechargeBalance", handler.WrapRechargeBalanceHandler)           // 支付成功后修改企业余额
+		m.POST("/project/feeDetail", handler.WrapFeeDetailHandler)                   // 查看结项的费用明细
+		m.POST("/pay/rechargeRecord", handler.WrapRechargeRecordHandler)             // 查看充值记录
+		m.POST("/invoice/addReceiveAddress", handler.WrapAddReceiveAddressHandler)   // 新增收货地址
+		m.POST("/invoice/addReceiveInfo", handler.WrapAddReceiveInfoHandler)         // 新增发票信息
+		m.GET("/invoice/getReceiveAddress", handler.WrapGetReceiveAddressHandler)    // 获取收货地址
+		m.GET("/invoice/getReceiveInfo", handler.WrapGetReceiveInfoHandler)          // 获取发票信息
+		m.POST("/invoice/operateReceiveInfo", handler.WrapOperateReceiveInfoHandler) // 修改或删除发票信息
 		m.POST("/project/getlogisticsnumberinfo", handler.WrapGetLogisticsNumberInfoHandler)
 		m.POST("/invoice/operateReceiveAddress", handler.WrapOperateReceiveAddressHandler) // 修改或删除发票地址
 		m.POST("/invoice/addInvoiceRecord", handler.WrapAddInvoiceRecordHandler)           // 开票
@@ -101,9 +101,23 @@ func InitRoute(r *gin.Engine) {
 		m.POST("/project/getsketchinfo", handler.WrapGetSketchInfoHandler)                 // 获取初稿
 		m.POST("/project/taskfinishlist", handler.WrapTaskFinishListHandler)               // 查询违约列表-数据违约
 		m.POST("/project/getfinishdata", handler.WrapGetFinishDataHandler)
-		m.GET("/project/finduserinfo", handler.WrapFindUserInfoHandler)      //获取账户信息
-		m.POST("/project/updatauserinfo", handler.WrapUpdateUserInfoHandler) //更新账户信息
-		m.POST("/project/getfinishnumberinfo", handler.WrapGetFinishNumberInfoHandler)     // 获取结案数量
-		m.POST("/project/transferToPublic", handler.WrapTransferToPublicHandler)           // 对公转账
+		m.GET("/project/finduserinfo", handler.WrapFindUserInfoHandler)                //获取账户信息
+		m.POST("/project/updatauserinfo", handler.WrapUpdateUserInfoHandler)           //更新账户信息
+		m.POST("/project/getfinishnumberinfo", handler.WrapGetFinishNumberInfoHandler) // 获取结案数量
+		m.POST("/project/transferToPublic", handler.WrapTransferToPublicHandler)       // 对公转账
+
+		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) // 查询专项任务结案单结案数据
 	}
 }

+ 89 - 0
service/SpecialTask.go

@@ -0,0 +1,89 @@
+package service
+
+import (
+	"youngee_b_api/db"
+	"youngee_b_api/model/common_model"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/pack"
+
+	"github.com/gin-gonic/gin"
+	"github.com/issue9/conv"
+	"github.com/sirupsen/logrus"
+)
+
+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

@@ -105,3 +105,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)
+	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)
+	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)
+	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)
+	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)
+	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
+}

+ 51 - 31
service/project.go

@@ -48,22 +48,40 @@ func (*project) Create(ctx context.Context, newProject http_model.CreateProjectR
 		//feeForm += string(strategy.StrategyID)
 	}
 	feeFroms := strings.Join(feeFrom, ",")
-
-	projectInfo := gorm_model.ProjectInfo{
-		ProjectName:     projectName,
-		ProjectStatus:   1,
-		ProjectType:     newProject.ProjectType,
-		TalentType:      newProject.TalentType,
-		ProjectPlatform: newProject.ProjectPlatform,
-		ProjectForm:     newProject.ProjectForm,
-		RecruitDdl:      &newProject.RecruitDdl,
-		ProjectDetail:   newProject.ProjectDetail,
-		ContentType:     newProject.ContentType,
-		EnterpriseID:    enterpriseID,
-		ProductID:       newProject.ProductID,
-		FeeForm:         feeFroms,
-		AutoTaskID:      conv.MustInt64(AutoTaskID),
-		AutoDefaultID:   conv.MustInt64(AutoDefaultID),
+	projectInfo := gorm_model.ProjectInfo{}
+	if newProject.ProjectType == int64(1) {
+		projectInfo = gorm_model.ProjectInfo{
+			ProjectName:     projectName,
+			ProjectStatus:   1,
+			ProjectType:     newProject.ProjectType,
+			TalentType:      newProject.TalentType,
+			ProjectPlatform: newProject.ProjectPlatform,
+			ProjectForm:     newProject.ProjectForm,
+			RecruitDdl:      &newProject.RecruitDdl,
+			ProjectDetail:   newProject.ProjectDetail,
+			ContentType:     newProject.ContentType,
+			EnterpriseID:    enterpriseID,
+			ProductID:       newProject.ProductID,
+			FeeForm:         feeFroms,
+			AutoTaskID:      conv.MustInt64(AutoTaskID),
+			AutoDefaultID:   conv.MustInt64(AutoDefaultID),
+		}
+	} else {
+		projectInfo = gorm_model.ProjectInfo{
+			ProjectName:     projectName,
+			ProjectStatus:   1,
+			ProjectType:     newProject.ProjectType,
+			TalentType:      "[]",
+			ProjectPlatform: newProject.ProjectPlatform,
+			ProjectForm:     newProject.ProjectForm,
+			ProjectDetail:   newProject.ProjectDetail,
+			ContentType:     newProject.ContentType,
+			EnterpriseID:    enterpriseID,
+			ProductID:       newProject.ProductID,
+			FeeForm:         feeFroms,
+			AutoTaskID:      conv.MustInt64(AutoTaskID),
+			AutoDefaultID:   conv.MustInt64(AutoDefaultID),
+		}
 	}
 	// db create ProjectInfo
 	projectID, err := db.CreateProject(ctx, projectInfo)
@@ -88,22 +106,24 @@ func (*project) Create(ctx context.Context, newProject http_model.CreateProjectR
 		}
 	}
 	// build
-	recruitStrategys := []gorm_model.RecruitStrategy{}
-	for _, strategy := range newProject.RecruitStrategys {
-		recruitStrategy := gorm_model.RecruitStrategy{
-			FeeForm:       strategy.FeeForm,
-			StrategyID:    strategy.StrategyID,
-			FollowersLow:  strategy.FollowersLow,
-			FollowersUp:   strategy.FollowersUp,
-			RecruitNumber: strategy.RecruitNumber,
-			Offer:         strategy.Offer,
-			ProjectID:     *projectID,
+	if newProject.ProjectType == int64(1) {
+		recruitStrategys := []gorm_model.RecruitStrategy{}
+		for _, strategy := range newProject.RecruitStrategys {
+			recruitStrategy := gorm_model.RecruitStrategy{
+				FeeForm:       strategy.FeeForm,
+				StrategyID:    strategy.StrategyID,
+				FollowersLow:  strategy.FollowersLow,
+				FollowersUp:   strategy.FollowersUp,
+				RecruitNumber: strategy.RecruitNumber,
+				Offer:         strategy.Offer,
+				ProjectID:     *projectID,
+			}
+			recruitStrategys = append(recruitStrategys, recruitStrategy)
+		}
+		err = db.CreateRecruitStrategy(ctx, recruitStrategys)
+		if err != nil {
+			return nil, err
 		}
-		recruitStrategys = append(recruitStrategys, recruitStrategy)
-	}
-	err = db.CreateRecruitStrategy(ctx, recruitStrategys)
-	if err != nil {
-		return nil, err
 	}
 	res := &http_model.CreateProjectData{
 		ProjectID: *projectID,