lin-jim-leon il y a 6 mois
Parent
commit
92a8df2b16
53 fichiers modifiés avec 2701 ajouts et 84 suppressions
  1. 19 0
      app/controller/workspace_controller.go
  2. 14 0
      app/dao/enterprise_dao.go
  3. 21 0
      db/data.go
  4. 21 0
      db/link.go
  5. 296 1
      db/project.go
  6. 605 0
      db/project_task.go
  7. 22 0
      db/sketch.go
  8. 15 1
      db/task.go
  9. 61 0
      handler/PassproTaskCoop.go
  10. 56 0
      handler/Prelinklist.go
  11. 61 0
      handler/RefuseproTaskCoop.go
  12. 58 0
      handler/endtask.go
  13. 61 0
      handler/executedata.go
  14. 59 0
      handler/gettasklist.go
  15. 56 0
      handler/predatalist.go
  16. 59 0
      handler/presketchlist.go
  17. 1 1
      handler/project_taskList.go
  18. 61 0
      handler/projectdata.go
  19. 60 0
      handler/reject_data.go
  20. 60 0
      handler/reject_link.go
  21. 58 0
      handler/reject_sketch.go
  22. 59 0
      handler/taskdatalist.go
  23. 59 0
      handler/tasklinklist.go
  24. 59 0
      handler/tasksketchlist.go
  25. 4 5
      main.go
  26. 12 0
      model/gorm_model/project_task.go
  27. 27 0
      model/gorm_model/s_project.go
  28. 20 0
      model/gorm_model/supplier.go
  29. 27 24
      model/gorm_model/talent.go
  30. 14 0
      model/http_model/EndTaskRequest.go
  31. 21 0
      model/http_model/PassproTaskCoopRequest.go
  32. 30 0
      model/http_model/PreLinkList.go
  33. 20 0
      model/http_model/RefuseproTaskCoopRequest.go
  34. 37 0
      model/http_model/executedata.go
  35. 42 0
      model/http_model/gettasklist.go
  36. 0 1
      model/http_model/link_opinion.go
  37. 30 0
      model/http_model/predatalist.go
  38. 30 0
      model/http_model/presketchlist.go
  39. 31 0
      model/http_model/projectdatarequest.go
  40. 18 0
      model/http_model/reject_data.go
  41. 18 0
      model/http_model/reject_link.go
  42. 0 1
      model/http_model/sketch_opinion.go
  43. 18 0
      model/http_model/sketch_reject.go
  44. 8 3
      model/http_model/sktech_info.go
  45. 37 0
      model/http_model/taskdatalist.go
  46. 34 0
      model/http_model/tasklinklist.go
  47. 32 0
      model/http_model/tasksketchlist.go
  48. 64 42
      route/init.go
  49. 101 0
      service/Task.go
  50. 33 0
      service/data.go
  51. 33 0
      service/link.go
  52. 20 2
      service/project.go
  53. 39 3
      service/sketch.go

+ 19 - 0
app/controller/workspace_controller.go

@@ -2,6 +2,7 @@ package controller
 
 import (
 	"github.com/gin-gonic/gin"
+	"youngee_b_api/app/dao"
 	"youngee_b_api/app/service"
 )
 
@@ -23,3 +24,21 @@ func (w WorkspaceController) GetTakegoodsInfo(c *gin.Context) {
 
 	returnSuccess(c, 20000, result)
 }
+
+type Search_name struct {
+	BusinessName string `json:"business_name"`
+	DateRange    string `json:"days"`
+}
+
+func (w WorkspaceController) GetSearchInfobybusinessname(c *gin.Context) {
+	search_ID := &Search_name{}
+	err := c.BindJSON(&search_ID)
+	if err != nil {
+		returnError(c, 40000)
+		return
+	}
+	enterpriseId, _ := (&dao.EnterpriseDao{}).GetenterpriseIdbynickname(search_ID.BusinessName)
+	search := Search{EnterpriseId: enterpriseId, DateRange: search_ID.DateRange}
+	result := service.EnterpriseService{}.GetEnterpriseTakegoodsInfo(search.EnterpriseId, search.DateRange)
+	returnSuccess(c, 20000, result)
+}

+ 14 - 0
app/dao/enterprise_dao.go

@@ -1,3 +1,17 @@
 package dao
 
+import "youngee_b_api/app/entity"
+
 type EnterpriseDao struct{}
+
+func (EnterpriseDao) GetenterpriseIdbyuserid(userid string) (string, error) {
+	var enterprise entity.Enterprise
+	err := Db.Model(&entity.Enterprise{}).Select("enterprise_id").Where("user_id = ?", userid).First(&enterprise).Error
+	return enterprise.EnterpriseID, err
+}
+
+func (EnterpriseDao) GetenterpriseIdbynickname(business_name string) (string, error) {
+	var enterprise entity.Enterprise
+	err := Db.Model(&entity.Enterprise{}).Select("enterprise_id").Where("business_name= ?", business_name).First(&enterprise).Error
+	return enterprise.EnterpriseID, err
+}

+ 21 - 0
db/data.go

@@ -183,6 +183,27 @@ func AcceptData(ctx context.Context, TaskIDs []string) error {
 	return nil
 }
 
+// RejectData 拒绝数据-结案
+func RejectData(ctx context.Context, TaskIDs []string) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeDataInfo{}).Where("task_id in ?  and is_review = 0", TaskIDs).Updates(map[string]interface{}{"reject_at": time.Now(), "is_review": 1}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Update YounggeeDataInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{DataStatus: 3}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 13}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	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)

+ 21 - 0
db/link.go

@@ -168,6 +168,27 @@ func AcceptLink(ctx context.Context, TaskIDs []string) error {
 	return nil
 }
 
+// RejectLink 同意链接
+func RejectLink(ctx context.Context, TaskIDs []string) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id in ?  and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 0, "is_review": 1, "reject_at": time.Now()}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{LinkStatus: 3}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 11}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	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)

+ 296 - 1
db/project.go

@@ -122,7 +122,7 @@ func GetProjectDraftList(ctx context.Context, enterpriseID string, pageSize, pag
 	return projectDrafts, total, nil
 }
 
-func GetProjectTaskList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TaskConditions) ([]*http_model.ProjectTaskInfo, int64, error) {
+func GetProjectTaskList(ctx context.Context, pageSize, pageNum int64, conditions *common_model.TaskConditions) ([]*http_model.ProjectTaskInfo, int64, error) {
 	db := GetReadDB(ctx)
 	// 查询task表信息
 	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{})
@@ -327,3 +327,298 @@ func GetCreatingNumber(ctx context.Context, enterpriseID string) (*int64, error)
 	}
 	return &creatingNumber, nil
 }
+
+func GetProjectData(ctx context.Context, projectid string) (http_model.ProjectDataResponse, error) {
+	db := GetReadDB(ctx)
+	var projectInfo gorm_model.ProjectInfo
+
+	// 查询项目基本信息
+	if err := db.Where("project_id = ?", projectid).First(&projectInfo).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[Project db] GetProjectData error, err: %+v", err)
+		return http_model.ProjectDataResponse{}, err
+	}
+
+	var projectTasks []gorm_model.YoungeeTaskInfo
+	if err := db.Where("project_id = ? AND task_status = ?", projectid, 2).Find(&projectTasks).Error; err != nil {
+		return http_model.ProjectDataResponse{}, err
+	}
+
+	var totalTasks int64
+	if err := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = ?", projectid, 2).Count(&totalTasks).Error; err != nil {
+		return http_model.ProjectDataResponse{}, err
+	}
+
+	// 初始化统计数据
+	dateStats := make(map[string]int)
+	fansCounts := map[int64]int{0: 0, 1: 0, 2: 0, 3: 0}
+	feeCounts := map[int]int{1: 0, 2: 0, 3: 0}
+	startDate := *projectInfo.CreatedAt
+	endDate := time.Now()
+
+	// 填充日期统计
+	for d := startDate; d.Before(endDate) || d.Equal(endDate); d = d.Add(24 * time.Hour) {
+		dateStats[d.Format("2006-01-02")] = 0
+	}
+
+	var totalCost float64
+	var totalFans int
+	var serverTaskCount float64
+	var maleCount int64
+
+	// 处理每个任务
+	for _, task := range projectTasks {
+		totalCost += task.DraftFee
+		var talentInfo gorm_model.YoungeeTalentInfo
+
+		// 查询达人信息
+		if err := db.Where("id = ?", task.TalentID).First(&talentInfo).Error; err != nil {
+			logrus.WithContext(ctx).Errorf("[Project db] GetProjectData error, err: %+v", err)
+			return http_model.ProjectDataResponse{}, err
+		}
+
+		// 统计性别
+		if talentInfo.Sex == 1 {
+			maleCount++
+		}
+		totalFans += task.FansNum
+
+		// 统计来自服务商的任务
+		if task.SupplierId != 0 && task.SupplierStatus == 2 {
+			serverTaskCount++
+		}
+
+		// 稿费形式统计
+		feeCounts[task.FeeForm]++
+
+		// 统计粉丝数
+		switch {
+		case task.FansNum < 10000:
+			fansCounts[0]++
+		case task.FansNum < 100000:
+			fansCounts[1]++
+		case task.FansNum < 1000000:
+			fansCounts[2]++
+		default:
+			fansCounts[3]++
+		}
+
+		SelectDate := task.SelectDate.Format("2006-01-02")
+		if _, exists := dateStats[SelectDate]; exists {
+			dateStats[SelectDate]++
+		}
+	}
+
+	// 计算平均值
+	var avgFansNum int
+	if totalTasks > 0 {
+		avgFansNum = totalFans / int(totalTasks)
+	} else {
+		avgFansNum = 0
+	}
+
+	var fromType float64
+	if totalTasks > 0 {
+		fromType = serverTaskCount / float64(totalTasks)
+	} else {
+		fromType = 0
+	}
+
+	var manRatio float64
+	if totalTasks > 0 {
+		manRatio = float64(maleCount) / float64(totalTasks)
+	} else {
+		manRatio = 0
+	}
+
+	// 构建响应
+	res := http_model.ProjectDataResponse{
+		Recruittime: *projectInfo.PassAt,
+		RecruitDDl:  *projectInfo.RecruitDdl,
+		AgreeNum:    projectInfo.RecruitNum,
+		ApplyNum:    projectInfo.ApplyNum,
+		DraftFee:    totalCost,
+		AvgFansNum:  avgFansNum,
+		FromType:    fromType,
+		ManRatio:    manRatio,
+		DateStats:   dateStats,
+		FeeMap:      feeCounts,
+		FansMap:     fansCounts,
+	}
+	return res, nil
+}
+
+func GetProjectExecuteData(ctx context.Context, projectid string) (http_model.ExecuteDataResponse, error) {
+	db := GetReadDB(ctx)
+	var projectData gorm_model.ProjectInfo
+
+	// 查询项目基本信息
+	err := db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectid).First(&projectData).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Project db] GetProjectData error, err: %+v", err)
+		return http_model.ExecuteDataResponse{}, err
+	}
+	// 查询项目任务信息
+	var projectTaskInfo []gorm_model.YoungeeTaskInfo
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = ?", projectid, 2).Find(&projectTaskInfo)
+	var total int64
+	if err = query.Count(&total).Error; err != nil {
+		return http_model.ExecuteDataResponse{}, err
+	}
+	var presketchnum int64                                         //代传初稿数
+	var sketchnum int64                                            //待审
+	var sketchaccnum int64                                         //通过
+	var prelinknum, linknum, linkaccnum, predatanum, datanum int64 //待传连接数,待审,通过
+	var duration time.Duration
+	var accskecnt int
+	var avgduration time.Duration
+	var avgccreateduraion time.Duration
+	var createduraion time.Duration
+	var crecnt, submint, firacccnt int
+	var firaccratio, firacclinkratio float64
+	var linkaccduartion, avglinkduration, backduration, avgbackdurtion time.Duration
+	var acclinkcnt, backcnt, submintcnt, firlinkacccnt int
+	var defaultnum int64
+	var defaultratio float64
+	for _, task := range projectTaskInfo {
+		switch task.TaskStage {
+		case 9:
+			presketchnum += 1
+		case 10:
+			sketchnum += 1
+		case 11:
+			prelinknum += 1
+		case 12:
+			linknum += 1
+		case 13:
+			predatanum += 1
+		}
+		if task.SketchStatus == 5 {
+			sketchaccnum += 1
+		}
+		if task.LinkStatus == 5 {
+			linkaccnum += 1
+		}
+		if task.CurDefaultType != 0 {
+			defaultnum += 1
+		}
+		var sktchinfo gorm_model.YounggeeSketchInfo
+		err = db.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? ", task.TaskID).First(&sktchinfo).Error
+		if err != nil {
+			return http_model.ExecuteDataResponse{}, err
+		} else {
+
+			if projectData.ProjectForm == 1 {
+				if task.SignedTime.IsZero() {
+					createduraion += sktchinfo.CreateAt.Sub(task.SignedTime)
+					crecnt += 1
+
+				}
+			} else {
+				if sktchinfo.IsSubmit == 1 {
+					createduraion += sktchinfo.CreateAt.Sub(task.SelectDate)
+					crecnt += 1
+				}
+			}
+
+			if sktchinfo.IsOk == 1 {
+				duration += sktchinfo.AgreeAt.Sub(sktchinfo.CreateAt)
+				accskecnt += 1
+			}
+
+			if sktchinfo.IsSubmit == 1 {
+				submint += 1
+				if sktchinfo.RejectAt.IsZero() && sktchinfo.IsOk == 1 {
+					firacccnt += 1
+				}
+			}
+		}
+
+		var linkinfo gorm_model.YounggeeLinkInfo
+		err = db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ? ", task.TaskID).First(&linkinfo).Error
+		if err != nil {
+			return http_model.ExecuteDataResponse{}, err
+		} else {
+
+			if linkinfo.IsOk == 1 {
+				linkaccduartion += linkinfo.AgreeAt.Sub(linkinfo.CreateAt)
+				acclinkcnt += 1
+			}
+
+			if linkinfo.IsSubmit == 1 {
+				backduration += linkinfo.SubmitAt.Sub(sktchinfo.AgreeAt)
+				backcnt += 1
+			}
+
+			if linkinfo.IsSubmit == 1 {
+				submintcnt += 1
+				if linkinfo.RejectAt.IsZero() && linkinfo.IsOk == 1 {
+					firlinkacccnt += 1
+				}
+			}
+		}
+
+		//var datainfo gorm_model.YounggeeDataInfo
+		//err = db.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ? ", task.TaskID).First(&datainfo).Error
+		//if err != nil {
+		//	return http_model.ExecuteDataResponse{}, err
+		//} else {
+		//	if datainfo
+		//
+		//}
+	}
+	if submint > 0 && firacccnt > 0 {
+		firaccratio = float64(firacccnt) / float64(submint)
+	} else {
+		firaccratio = 0
+	}
+	if submintcnt > 0 && firlinkacccnt > 0 {
+		firacclinkratio = float64(firlinkacccnt) / float64(submintcnt)
+	} else {
+		firacclinkratio = 0
+	}
+	if accskecnt > 0 {
+		avgduration = duration / time.Duration(accskecnt)
+	} else {
+		avgduration = 0
+	}
+	if crecnt > 0 {
+		avgccreateduraion = createduraion / time.Duration(crecnt)
+	} else {
+		avgccreateduraion = 0
+	}
+	if acclinkcnt > 0 {
+		avglinkduration = linkaccduartion / time.Duration(acclinkcnt)
+	} else {
+		avglinkduration = 0
+	}
+	if backcnt > 0 {
+		avgbackdurtion = backduration / time.Duration(backcnt)
+	} else {
+		avgbackdurtion = 0
+	}
+	if defaultnum > 0 {
+		defaultratio = float64(defaultnum) / float64(total)
+	} else {
+		defaultratio = 0
+	}
+	res := http_model.ExecuteDataResponse{
+		Excutetime:      *projectData.PayAt,
+		PreSketchNum:    presketchnum,
+		SketchNum:       sketchnum,
+		SketchAccNum:    sketchaccnum,
+		AvgAccTime:      avgduration,
+		AvgCreTime:      avgccreateduraion,
+		FirAccRatio:     firaccratio,
+		PreLinkNum:      prelinknum,
+		LinkNum:         linknum,
+		LinkAccNum:      linkaccnum,
+		AvgLinkAccTime:  avglinkduration,
+		AvgBackTime:     avgbackdurtion,
+		FirAccLinkRatio: firacclinkratio,
+		PreDataNum:      predatanum,
+		DataNum:         datanum,
+		DefaultNum:      defaultnum,
+		DefaultRatio:    defaultratio,
+	}
+	return res, nil
+}

+ 605 - 0
db/project_task.go

@@ -0,0 +1,605 @@
+package db
+
+import (
+	"context"
+	"errors"
+	"fmt"
+	"github.com/issue9/conv"
+	"gorm.io/gorm"
+	"time"
+	"youngee_b_api/model/gorm_model"
+	"youngee_b_api/model/http_model"
+)
+
+func GetProjecttaskList(ctx context.Context, request http_model.GetTaskListRequest) (*http_model.GetTaskListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = ?", request.ProjectId, request.CoopType)
+
+	// 构建查询条件
+	if request.FeeFrom != nil {
+		query = query.Where("feed_from = ?", request.FeeFrom)
+	}
+	if request.Type != nil {
+		switch *request.Type {
+		case 1:
+			query = query.Where("supplier_id = 0 AND supplier_status = 0")
+		case 2:
+			query = query.Where("supplier_id != 0 AND supplier_status = 2")
+		}
+	}
+
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+
+	taskInfoPointers := make([]*http_model.TaskInfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		boperator := getBOperator(db, task.BOperator)
+		response := &http_model.TaskInfo{
+			TaskId:             task.TaskID,
+			ProjectId:          task.ProjectID,
+			TalentId:           task.TalentID,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			Boperator:          boperator,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+	}
+
+	return &http_model.GetTaskListData{
+		TaskList: taskInfoPointers,
+		Total:    conv.MustString(total, ""),
+	}, nil
+}
+
+func getBOperator(db *gorm.DB, bOperatorID string) string {
+	if bOperatorID == "" {
+		return ""
+	}
+	var boperatorinfo gorm_model.Enterprise
+	if err := db.Where(gorm_model.Enterprise{EnterpriseID: bOperatorID}).First(&boperatorinfo).Error; err != nil {
+		return ""
+	}
+	return boperatorinfo.BusinessName
+}
+
+func determineFrom(supplierID, supplierStatus int) int {
+	if supplierID != 0 && supplierStatus == 2 {
+		return 2
+	}
+	return 1
+}
+
+func PassProTaskCoop(ctx context.Context, projectId string, taskIds []string, operatorid string, operatetype int) (bool, error) {
+	db := GetReadDB(ctx)
+	var count int64
+	fmt.Println("task_ids: ", taskIds)
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ? AND task_stage = 1", taskIds).Count(&count).Error
+
+	fmt.Println("count: ", count)
+	if err != nil {
+		return false, err
+	}
+	if int64(len(taskIds)) == 0 || count != int64(len(taskIds)) {
+		return false, errors.New("任务id有误")
+	}
+
+	// 2. 查询任务对应达人id(用于生成达人消息)
+	var talentIds []string
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds).Select("talent_id").Find(&talentIds).Error
+	if err != nil {
+		return false, err
+	}
+
+	// 3. 查询任务对应project名称(用于生成达人消息)
+	var project gorm_model.ProjectInfo
+	err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Find(&project).Error
+	if err != nil {
+		return false, err
+	}
+	var taskstages int
+	if project.ProjectForm == 1 {
+		taskstages = 5
+	} else {
+		taskstages = 7
+	}
+
+	//4.根据达人来源改变状态、阶段、数目
+	var tasks []gorm_model.YoungeeTaskInfo
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ? AND task_stage = 1", taskIds).Find(&tasks).Error
+	if err != nil {
+		return false, err
+	}
+	err = db.Transaction(func(tx *gorm.DB) error {
+		// 2. 修改任务状态和任务阶段
+		for _, taskInfo := range tasks {
+			if taskInfo.SupplierId != 0 && taskInfo.SupplierStatus == 2 { //服务商招募数量+1
+				updateData := gorm_model.YoungeeTaskInfo{
+					TaskStage:     taskstages,
+					TaskStatus:    2,
+					UpdateAt:      time.Now(),
+					BOperator:     operatorid,
+					BOperatorType: operatetype,
+				}
+				err = tx.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ? AND task_stage = 1", taskInfo.TaskID).Updates(updateData).Error
+				if err != nil {
+					return err
+				}
+
+				//project招募数+1
+				var projectinfo gorm_model.ProjectInfo
+				err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Find(&projectinfo).Error
+				if err != nil {
+					return err
+				}
+				projectinfo.RecruitNum += 1
+				err = tx.Model(gorm_model.ProjectInfo{}).Where("project_id = ? ", projectId).Updates(projectinfo).Error
+				if err != nil {
+					return err
+				}
+
+				var sprojectinfo gorm_model.YounggeeSProjectInfo
+				err = db.Model(gorm_model.YounggeeSProjectInfo{}).Where("project_id = ?", projectId).Find(&sprojectinfo).Error
+				if err != nil {
+					return err
+				}
+				sprojectinfo.RecruitNum += 1
+				err = tx.Model(gorm_model.YounggeeSProjectInfo{}).Where("project_id = ? ", projectId).Updates(projectinfo).Error
+				if err != nil {
+					return err
+				}
+
+			}
+
+			if taskInfo.SupplierId == 0 && taskInfo.SupplierStatus == 0 { //来源于公海
+				updateData := gorm_model.YoungeeTaskInfo{
+					TaskStage:     taskstages,
+					TaskStatus:    2,
+					UpdateAt:      time.Now(),
+					BOperator:     operatorid,
+					BOperatorType: operatetype,
+				}
+				err = tx.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ? AND task_stage = 1", taskInfo.TaskID).Updates(updateData).Error
+				if err != nil {
+					return err
+				}
+
+				//project招募数+1
+				var projectinfo gorm_model.ProjectInfo
+				err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Find(&projectinfo).Error
+				if err != nil {
+					return err
+				}
+				projectinfo.RecruitNum += 1
+				err = tx.Model(gorm_model.ProjectInfo{}).Where("project_id = ? ", projectId).Updates(projectinfo).Error
+				if err != nil {
+					return err
+				}
+			}
+
+		}
+		// 4. 生成达人消息
+		for _, talendId := range talentIds {
+			err = CreateMessage(ctx, 1, 1, talendId, project.ProjectName)
+			if err != nil {
+				return err
+			}
+		}
+		// 返回 nil 提交事务
+		return nil
+	})
+	if err != nil {
+		return false, err
+	}
+	return true, nil
+}
+
+func RefuseproTaskCoop(ctx context.Context, taskIds []string, operatorid string, operatetype int) (bool, error) {
+	db := GetWriteDB(ctx)
+	// 1. 校验
+	var count int64
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Count(&count).Error
+	if err != nil {
+		return false, err
+	}
+	if count != int64(len(taskIds)) {
+		return false, errors.New("任务id有误")
+	}
+
+	// 2. 查询任务对应达人id(用于生成达人消息)
+	var talentIds []string
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds).Select("talent_id").Find(&talentIds).Error
+	if err != nil {
+		return false, err
+	}
+
+	var tasks []gorm_model.YoungeeTaskInfo
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ? AND task_stage = 1", taskIds).Find(&tasks).Error
+
+	err = db.Transaction(func(tx *gorm.DB) error {
+		// 2. 修改任务状态和任务阶段
+		for _, taskInfo := range tasks {
+			updateData := gorm_model.YoungeeTaskInfo{
+				TaskStage:     3,
+				TaskStatus:    3,
+				UpdateAt:      time.Now(),
+				BOperator:     operatorid,
+				BOperatorType: operatetype,
+			}
+			err = tx.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ? AND task_stage = 1", taskInfo.TaskID).Updates(updateData).Error
+		}
+		if err != nil {
+			return err
+		}
+
+		// 返回 nil 提交事务
+		return nil
+	})
+	if err != nil {
+		return false, err
+	}
+	return true, nil
+}
+
+func GetPreSketchList(ctx context.Context, request http_model.PreSketchListRequest) (*http_model.GetSketchTaskListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.ScriptStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.TasksketchInfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		taskinfo := &http_model.TaskInfo{
+			TaskId:             task.TaskID,
+			ProjectId:          task.ProjectID,
+			TalentId:           task.TalentID,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+		}
+		response := &http_model.TasksketchInfo{
+			Task: taskinfo,
+			DDl:  time.Now(), //截止时间再改
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GetSketchTaskListData{
+		TasksketchList: taskInfoPointers,
+		Total:          conv.MustString(total, ""),
+	}, nil
+}
+
+func GetSketchList(ctx context.Context, request http_model.TasksketchlistRequest) (*http_model.GetsketchtaskListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.ScriptStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.Tasksketchinfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		taskinfo := &http_model.TaskInfo{
+			TaskId:             task.TaskID,
+			ProjectId:          task.ProjectID,
+			TalentId:           task.TalentID,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+		}
+		var sketchinfo gorm_model.YounggeeSketchInfo
+		err := db.Model(&gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_review = 0", task.TaskID).First(&sketchinfo).Error
+		if err != nil {
+			return nil, err
+		}
+		response := &http_model.Tasksketchinfo{
+			Task:     taskinfo,
+			SketchId: sketchinfo.SketchID,
+			SubmitAt: sketchinfo.SubmitAt,
+			AgreeAt:  sketchinfo.AgreeAt,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GetsketchtaskListData{
+		TasksketchList: taskInfoPointers,
+		Total:          conv.MustString(total, ""),
+	}, nil
+}
+
+func GetPreLinkList(ctx context.Context, request http_model.PreLinkListRequest) (*http_model.GetprelinkListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.LinkStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.Tasklinkinfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		taskinfo := &http_model.TaskInfo{
+			TaskId:             task.TaskID,
+			ProjectId:          task.ProjectID,
+			TalentId:           task.TalentID,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+		}
+		response := &http_model.Tasklinkinfo{
+			Task: taskinfo,
+			DDl:  time.Now(), //截止时间再改
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GetprelinkListData{
+		TasklinkList: taskInfoPointers,
+		Total:        conv.MustString(total, ""),
+	}, nil
+}
+
+func GetLinkList(ctx context.Context, request http_model.TaskLinklistRequest) (*http_model.GettasklinkListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.LinkStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.TaskLinkinfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		taskinfo := &http_model.TaskInfo{
+			TaskId:             task.TaskID,
+			ProjectId:          task.ProjectID,
+			TalentId:           task.TalentID,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+		}
+		var linkinfo gorm_model.YounggeeLinkInfo
+		err := db.Model(&gorm_model.YounggeeLinkInfo{}).Where("task_id = ? and is_review = 0", task.TaskID).First(&linkinfo).Error
+		if err != nil {
+			return nil, err
+		}
+		response := &http_model.TaskLinkinfo{
+			Task:     taskinfo,
+			LinkId:   linkinfo.LinkID,
+			SubmitAt: linkinfo.SubmitAt,
+			AgreeAt:  linkinfo.AgreeAt,
+			LinkUrl:  linkinfo.LinkUrl,
+			PhotoUrl: linkinfo.PhotoUrl,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GettasklinkListData{
+		TaskLinklist: taskInfoPointers,
+		Total:        conv.MustString(total, ""),
+	}, nil
+}
+
+func GetPreDataList(ctx context.Context, request http_model.PreDataListRequest) (*http_model.GetPreDataListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.DataStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.Taskdatainfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		taskinfo := &http_model.TaskInfo{
+			TaskId:             task.TaskID,
+			ProjectId:          task.ProjectID,
+			TalentId:           task.TalentID,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+		}
+		response := &http_model.Taskdatainfo{
+			Task: taskinfo,
+			DDl:  time.Now(), //截止时间再改
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GetPreDataListData{
+		TaskdataList: taskInfoPointers,
+		Total:        conv.MustString(total, ""),
+	}, nil
+}
+
+func GetDataList(ctx context.Context, request http_model.TaskDatalistRequest) (*http_model.GetTaskDatalistData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.DataStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.TaskDatainfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		taskinfo := &http_model.TaskInfo{
+			TaskId:       task.TaskID,
+			ProjectId:    task.ProjectID,
+			TalentId:     task.TalentID,
+			FansNum:      task.FansNum,
+			DraftFee:     task.DraftFee,
+			FeeFrom:      task.FeeForm,
+			TaskStage:    task.TaskStage,
+			SettleAmount: task.SettleAmount,
+			From:         determineFrom(task.SupplierId, task.SupplierStatus),
+		}
+		var datainfo gorm_model.YounggeeDataInfo
+		err := db.Model(&gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_review = 0", task.TaskID).First(&datainfo).Error
+		if err != nil {
+			return nil, err
+		}
+		response := &http_model.TaskDatainfo{
+			Task:          taskinfo,
+			DataId:        datainfo.DataID,
+			SubmitAt:      datainfo.SubmitAt,
+			AgreeAt:       datainfo.AgreeAt,
+			PhotoUrl:      datainfo.PhotoUrl,
+			PlayNumber:    datainfo.PlayNumber,
+			LikeNumber:    datainfo.LikeNumber,
+			CollectNumber: datainfo.CollectNumber,
+			CommentNumber: datainfo.CommentNumber,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GetTaskDatalistData{
+		TaskDatalist: taskInfoPointers,
+		Total:        conv.MustString(total, ""),
+	}, nil
+}

+ 22 - 0
db/sketch.go

@@ -173,6 +173,28 @@ func AcceptSketch(ctx context.Context, TaskIDs []string) error {
 	return nil
 }
 
+// RejectSketch 不同意初稿
+func RejectSketch(ctx context.Context, TaskIDs []string) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id in ? and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 0, "is_review": 1, "reject_at": time.Now()}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YounggeeSketchInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{SketchStatus: 3}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 9}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
 // FindPhoto
 func FindSketchInfo(ctx context.Context, TaskID string) (*gorm_model.YounggeeSketchInfo, error) {
 	db := GetReadDB(ctx)

+ 15 - 1
db/task.go

@@ -156,7 +156,7 @@ func GetUnfinishedTaskNumber(ctx context.Context, projectID string) (*int64, err
 func SetTaskFinish(ctx context.Context, TaskIDs []string) error {
 	db := GetReadDB(ctx)
 	// 1. 修改任务表,更新任务阶段为已结案,结案方式为正常结束,数据状态为已通过,
-	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{DataStatus: 5, TaskStage: 15, CompleteStatus: 2, WithdrawStatus: 2, CompleteDate: time.Now()}).Error
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{DataStatus: 5, TaskStage: 15, CompleteStatus: 2, WithdrawStatus: 2, CompleteDate: time.Now(), SettleStatus: 2}).Error
 	if err != nil {
 		logrus.WithContext(ctx).Errorf("[Task db] Update YoungeeTaskInfo error,err:%+v", err)
 		return err
@@ -394,3 +394,17 @@ func UpdateTask(ctx context.Context, updateData gorm_model.YoungeeTaskInfo, tx *
 
 	return true, nil
 }
+
+func EndTask(ctx context.Context, req http_model.EndTaskRequest) error {
+	db := GetWriteDB(ctx)
+	updates := gorm_model.YoungeeTaskInfo{TaskStage: 17}
+
+	// 更新指定任务的 Stage
+	err := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", req.TaskId).Updates(updates).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[EndTask] error updating task stage, task_id: %s, err: %+v", req.TaskId, err)
+		return err
+	}
+
+	return nil
+}

+ 61 - 0
handler/PassproTaskCoop.go

@@ -0,0 +1,61 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapPassproTaskCoopHandler(ctx *gin.Context) {
+	handler := newPassproTaskCoopHandler(ctx)
+	baseRun(handler)
+}
+
+type PassproTaskCoop struct {
+	ctx  *gin.Context
+	req  *http_model.PassproTaskCoopRequest
+	resp *http_model.CommonResponse
+}
+
+func (c PassproTaskCoop) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c PassproTaskCoop) getResponse() interface{} {
+	return c.resp
+}
+
+func (c PassproTaskCoop) getRequest() interface{} {
+	return c.req
+}
+
+func (c PassproTaskCoop) run() {
+	data := http_model.PassproTaskCoopRequest{}
+	data = *c.req
+	//auth := middleware.GetSessionAuth(c.ctx)
+	//enterpriseID := auth.EnterpriseID
+	res, err := service.Task.PassCoop(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[PassproTaskCoop] call PassproTaskCoop err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("PassproTaskCoop fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功合作公开种草任务"
+	c.resp.Data = res
+}
+
+func (c PassproTaskCoop) checkParam() error {
+	return nil
+}
+
+func newPassproTaskCoopHandler(ctx *gin.Context) *PassproTaskCoop {
+	return &PassproTaskCoop{
+		ctx:  ctx,
+		req:  http_model.NewPassproTaskCoopRequest(),
+		resp: http_model.NewPassproTaskCoopResponse(),
+	}
+}

+ 56 - 0
handler/Prelinklist.go

@@ -0,0 +1,56 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapPreLinkListHandler(ctx *gin.Context) {
+	handler := newPreLinkListHandler(ctx)
+	baseRun(handler)
+}
+
+func newPreLinkListHandler(ctx *gin.Context) *PreLinkListHandler {
+	return &PreLinkListHandler{
+		req:  http_model.NewPreLinkListRequest(),
+		resp: http_model.NewPreLinkListResponse(),
+		ctx:  ctx,
+	}
+}
+
+type PreLinkListHandler struct {
+	req  *http_model.PreLinkListRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h PreLinkListHandler) getRequest() interface{} {
+	return h.req
+}
+func (h PreLinkListHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h PreLinkListHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h PreLinkListHandler) run() {
+	data := http_model.PreLinkListRequest{}
+	data = *h.req
+	res, err := service.Task.GetPreLinkList(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetPreLinkList] call GetPreLinkList err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		logrus.Info("GetPreLinkList fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功查询链接待传列表"
+	h.resp.Data = res
+}
+
+func (h PreLinkListHandler) checkParam() error {
+	return nil
+}

+ 61 - 0
handler/RefuseproTaskCoop.go

@@ -0,0 +1,61 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapRefuseproTaskCoopHandler(ctx *gin.Context) {
+	handler := newRefuseproTaskCoopHandler(ctx)
+	baseRun(handler)
+}
+
+type RefuseproTaskCoop struct {
+	ctx  *gin.Context
+	req  *http_model.RefuseproTaskCoopRequest
+	resp *http_model.CommonResponse
+}
+
+func (c RefuseproTaskCoop) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c RefuseproTaskCoop) getResponse() interface{} {
+	return c.resp
+}
+
+func (c RefuseproTaskCoop) getRequest() interface{} {
+	return c.req
+}
+
+func (c RefuseproTaskCoop) run() {
+	data := http_model.RefuseproTaskCoopRequest{}
+	data = *c.req
+	//auth := middleware.GetSessionAuth(c.ctx)
+	//enterpriseID := auth.EnterpriseID
+	res, err := service.Task.RefuseCoop(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[RefuseproTaskCoop] call RefuseproTaskCoop err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("RefuseproTaskCoop fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功拒绝种草任务"
+	c.resp.Data = res
+}
+
+func (c RefuseproTaskCoop) checkParam() error {
+	return nil
+}
+
+func newRefuseproTaskCoopHandler(ctx *gin.Context) *RefuseproTaskCoop {
+	return &RefuseproTaskCoop{
+		ctx:  ctx,
+		req:  http_model.NewRefuseproTaskCoopRequest(),
+		resp: http_model.NewRefuseproTaskCoopResponse(),
+	}
+}

+ 58 - 0
handler/endtask.go

@@ -0,0 +1,58 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/db"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/util"
+)
+
+func WrapEndTaskHandler(ctx *gin.Context) {
+	handler := newEndTaskHandler(ctx)
+	baseRun(handler)
+}
+
+type EndTask struct {
+	ctx  *gin.Context
+	req  *http_model.EndTaskRequest
+	resp *http_model.CommonResponse
+}
+
+func (c EndTask) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c EndTask) getResponse() interface{} {
+	return c.resp
+}
+
+func (c EndTask) getRequest() interface{} {
+	return c.req
+}
+
+func (c EndTask) run() {
+	data := http_model.EndTaskRequest{}
+	data = *c.req
+	err := db.EndTask(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetSecTaskList] call EndTask err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetSecTaskList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功终止任务状态"
+}
+
+func (c EndTask) checkParam() error {
+	return nil
+}
+
+func newEndTaskHandler(ctx *gin.Context) *EndTask {
+	return &EndTask{
+		ctx:  ctx,
+		req:  http_model.NewEndTaskRequest(),
+		resp: http_model.NewEndTaskResponse(),
+	}
+}

+ 61 - 0
handler/executedata.go

@@ -0,0 +1,61 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapExecuteDataHandler(ctx *gin.Context) {
+	handler := newExecuteDataHandler(ctx)
+	baseRun(handler)
+}
+
+type ExecuteData struct {
+	ctx  *gin.Context
+	req  *http_model.ExecuteDataRequest
+	resp *http_model.CommonResponse
+}
+
+func (c ExecuteData) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c ExecuteData) getResponse() interface{} {
+	return c.resp
+}
+
+func (c ExecuteData) getRequest() interface{} {
+	return c.req
+}
+
+func (c ExecuteData) run() {
+	data := http_model.ExecuteDataRequest{}
+	data = *c.req
+	//auth := middleware.GetSessionAuth(c.ctx)
+	//enterpriseID := auth.EnterpriseID
+	res, err := service.Project.ExecuteData(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ExecuteData] call ExecuteData err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("ExecuteData fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功看数据"
+	c.resp.Data = res
+}
+
+func (c ExecuteData) checkParam() error {
+	return nil
+}
+
+func newExecuteDataHandler(ctx *gin.Context) *ExecuteData {
+	return &ExecuteData{
+		ctx:  ctx,
+		req:  http_model.NewExecuteDataRequest(),
+		resp: http_model.NewExecuteDataResponse(),
+	}
+}

+ 59 - 0
handler/gettasklist.go

@@ -0,0 +1,59 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapGetTaskListHandler(ctx *gin.Context) {
+	handler := newGetTaskListHandler(ctx)
+	baseRun(handler)
+}
+
+type GetTaskList struct {
+	ctx  *gin.Context
+	req  *http_model.GetTaskListRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetTaskList) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetTaskList) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetTaskList) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetTaskList) run() {
+	data := http_model.GetTaskListRequest{}
+	data = *c.req
+	res, err := service.Task.GetList(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetSecTaskList] call GetSecTaskList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetSecTaskList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询种草达人"
+	c.resp.Data = res
+}
+
+func (c GetTaskList) checkParam() error {
+	return nil
+}
+
+func newGetTaskListHandler(ctx *gin.Context) *GetTaskList {
+	return &GetTaskList{
+		ctx:  ctx,
+		req:  http_model.NewGetTaskListRequest(),
+		resp: http_model.NewGetTaskListResponse(),
+	}
+}

+ 56 - 0
handler/predatalist.go

@@ -0,0 +1,56 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapPreDataListHandler(ctx *gin.Context) {
+	handler := newPreDataListHandler(ctx)
+	baseRun(handler)
+}
+
+func newPreDataListHandler(ctx *gin.Context) *PreDataListHandler {
+	return &PreDataListHandler{
+		req:  http_model.NewPreDataListRequest(),
+		resp: http_model.NewPreDataListResponse(),
+		ctx:  ctx,
+	}
+}
+
+type PreDataListHandler struct {
+	req  *http_model.PreDataListRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h PreDataListHandler) getRequest() interface{} {
+	return h.req
+}
+func (h PreDataListHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h PreDataListHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h PreDataListHandler) run() {
+	data := http_model.PreDataListRequest{}
+	data = *h.req
+	res, err := service.Task.GetPreDataList(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetPreDataList] call GetPreDataList err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		logrus.Info("GetPreDataList fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功查询数据待传列表"
+	h.resp.Data = res
+}
+
+func (h PreDataListHandler) checkParam() error {
+	return nil
+}

+ 59 - 0
handler/presketchlist.go

@@ -0,0 +1,59 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapPreSketchListHandler(ctx *gin.Context) {
+	handler := newPreSketchListHandler(ctx)
+	baseRun(handler)
+}
+
+type PreSketchList struct {
+	ctx  *gin.Context
+	req  *http_model.PreSketchListRequest
+	resp *http_model.CommonResponse
+}
+
+func (c PreSketchList) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c PreSketchList) getResponse() interface{} {
+	return c.resp
+}
+
+func (c PreSketchList) getRequest() interface{} {
+	return c.req
+}
+
+func (c PreSketchList) run() {
+	data := http_model.PreSketchListRequest{}
+	data = *c.req
+	res, err := service.Task.GetPreSketchList(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetPreSketchList] call GetPreSketchList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetPreSketchList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询待传初稿"
+	c.resp.Data = res
+}
+
+func (c PreSketchList) checkParam() error {
+	return nil
+}
+
+func newPreSketchListHandler(ctx *gin.Context) *PreSketchList {
+	return &PreSketchList{
+		ctx:  ctx,
+		req:  http_model.NewPreSketchListRequest(),
+		resp: http_model.NewPreSketchListResponse(),
+	}
+}

+ 1 - 1
handler/project_taskList.go

@@ -55,7 +55,7 @@ func (h *ProjectTaskListHandler) getResponse() interface{} {
 }
 func (h *ProjectTaskListHandler) run() {
 	conditions := pack.HttpProjectTaskRequestToCondition(h.req)
-	data, err := service.Project.GetProjectTaskList(h.ctx, h.req.ProjectId, h.req.PageSize, h.req.PageNum, conditions)
+	data, err := service.Project.GetProjectTaskList(h.ctx, h.req.PageSize, h.req.PageNum, conditions)
 	if err != nil {
 		logrus.WithContext(h.ctx).Errorf("[ProjectTaskListHandler] error GetProjectTaskList, err:%+v", err)
 		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, consts.DefaultToast)

+ 61 - 0
handler/projectdata.go

@@ -0,0 +1,61 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapProjectDataHandler(ctx *gin.Context) {
+	handler := newProjectDataHandler(ctx)
+	baseRun(handler)
+}
+
+type ProjectData struct {
+	ctx  *gin.Context
+	req  *http_model.ProjectDataRequest
+	resp *http_model.CommonResponse
+}
+
+func (c ProjectData) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c ProjectData) getResponse() interface{} {
+	return c.resp
+}
+
+func (c ProjectData) getRequest() interface{} {
+	return c.req
+}
+
+func (c ProjectData) run() {
+	data := http_model.ProjectDataRequest{}
+	data = *c.req
+	//auth := middleware.GetSessionAuth(c.ctx)
+	//enterpriseID := auth.EnterpriseID
+	res, err := service.Project.Data(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ProjectData] call ProjectData err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("ProjectData fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功看数据"
+	c.resp.Data = res
+}
+
+func (c ProjectData) checkParam() error {
+	return nil
+}
+
+func newProjectDataHandler(ctx *gin.Context) *ProjectData {
+	return &ProjectData{
+		ctx:  ctx,
+		req:  http_model.NewProjectDataRequest(),
+		resp: http_model.NewProjectDataResponse(),
+	}
+}

+ 60 - 0
handler/reject_data.go

@@ -0,0 +1,60 @@
+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 WrapRejectDataHandler(ctx *gin.Context) {
+	handler := newRejectDataHandler(ctx)
+	baseRun(handler)
+}
+
+func newRejectDataHandler(ctx *gin.Context) *RejectDataHandler {
+	return &RejectDataHandler{
+		req:  http_model.NewRejectDataRequest(),
+		resp: http_model.NewRejectDataResponse(),
+		ctx:  ctx,
+	}
+}
+
+type RejectDataHandler struct {
+	req  *http_model.RejectDataRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *RejectDataHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *RejectDataHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *RejectDataHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *RejectDataHandler) run() {
+	data := http_model.RejectDataRequest{}
+	data = *h.req
+	res, err := service.Data.RejectData(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ReviseOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功拒绝数据"
+	h.resp.Data = res
+	h.resp.Data = data
+}
+
+func (h *RejectDataHandler) checkParam() error {
+	return nil
+}

+ 60 - 0
handler/reject_link.go

@@ -0,0 +1,60 @@
+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 WrapRejectLinkHandler(ctx *gin.Context) {
+	handler := newRejectLinkHandler(ctx)
+	baseRun(handler)
+}
+
+func newRejectLinkHandler(ctx *gin.Context) *RejectLinkHandler {
+	return &RejectLinkHandler{
+		req:  http_model.NewRejectLinkRequest(),
+		resp: http_model.NewRejectLinkResponse(),
+		ctx:  ctx,
+	}
+}
+
+type RejectLinkHandler struct {
+	req  *http_model.RejectLinkRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *RejectLinkHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *RejectLinkHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *RejectLinkHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *RejectLinkHandler) run() {
+	data := http_model.RejectLinkRequest{}
+	data = *h.req
+	res, err := service.Link.RejectLink(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ReviseOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功拒绝链接"
+	h.resp.Data = res
+	h.resp.Data = data
+}
+
+func (h *RejectLinkHandler) checkParam() error {
+	return nil
+}

+ 58 - 0
handler/reject_sketch.go

@@ -0,0 +1,58 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapRejectSketchHandler(ctx *gin.Context) {
+	handler := newRejectSketchHandler(ctx)
+	baseRun(handler)
+}
+
+func newRejectSketchHandler(ctx *gin.Context) *RejectSketchHandler {
+	return &RejectSketchHandler{
+		req:  http_model.NewRejectSketchRequest(),
+		resp: http_model.NewRejectSketchResponse(),
+		ctx:  ctx,
+	}
+}
+
+type RejectSketchHandler struct {
+	req  *http_model.RejectSketchRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *RejectSketchHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *RejectSketchHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *RejectSketchHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *RejectSketchHandler) run() {
+	data := http_model.RejectSketchRequest{}
+	data = *h.req
+	res, err := service.Sketch.RejectSketch(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ReviseOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功拒绝初稿"
+	h.resp.Data = res
+	h.resp.Data = data
+}
+func (h *RejectSketchHandler) checkParam() error {
+	return nil
+}

+ 59 - 0
handler/taskdatalist.go

@@ -0,0 +1,59 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapTaskDatalistHandler(ctx *gin.Context) {
+	handler := newTaskDatalistHandler(ctx)
+	baseRun(handler)
+}
+
+type TaskDatalist struct {
+	ctx  *gin.Context
+	req  *http_model.TaskDatalistRequest
+	resp *http_model.CommonResponse
+}
+
+func (c TaskDatalist) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c TaskDatalist) getResponse() interface{} {
+	return c.resp
+}
+
+func (c TaskDatalist) getRequest() interface{} {
+	return c.req
+}
+
+func (c TaskDatalist) run() {
+	data := http_model.TaskDatalistRequest{}
+	data = *c.req
+	res, err := service.Task.GetTaskDatalist(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetTaskDatalist] call GetTaskDatalist err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetTaskDatalist fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询数据待审列表"
+	c.resp.Data = res
+}
+
+func (c TaskDatalist) checkParam() error {
+	return nil
+}
+
+func newTaskDatalistHandler(ctx *gin.Context) *TaskDatalist {
+	return &TaskDatalist{
+		ctx:  ctx,
+		req:  http_model.NewTaskDatalistRequest(),
+		resp: http_model.NewTaskDatalistResponse(),
+	}
+}

+ 59 - 0
handler/tasklinklist.go

@@ -0,0 +1,59 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapTaskLinklistHandler(ctx *gin.Context) {
+	handler := newTaskLinklistHandler(ctx)
+	baseRun(handler)
+}
+
+type TaskLinklist struct {
+	ctx  *gin.Context
+	req  *http_model.TaskLinklistRequest
+	resp *http_model.CommonResponse
+}
+
+func (c TaskLinklist) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c TaskLinklist) getResponse() interface{} {
+	return c.resp
+}
+
+func (c TaskLinklist) getRequest() interface{} {
+	return c.req
+}
+
+func (c TaskLinklist) run() {
+	data := http_model.TaskLinklistRequest{}
+	data = *c.req
+	res, err := service.Task.GetTaskLinklist(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetTaskLinklist] call GetTaskLinklist err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetTaskLinklist fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询链接待审列表"
+	c.resp.Data = res
+}
+
+func (c TaskLinklist) checkParam() error {
+	return nil
+}
+
+func newTaskLinklistHandler(ctx *gin.Context) *TaskLinklist {
+	return &TaskLinklist{
+		ctx:  ctx,
+		req:  http_model.NewTaskLinklistRequest(),
+		resp: http_model.NewTaskLinklistResponse(),
+	}
+}

+ 59 - 0
handler/tasksketchlist.go

@@ -0,0 +1,59 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+)
+
+func WrapTasksketchlistHandler(ctx *gin.Context) {
+	handler := newTasksketchlistHandler(ctx)
+	baseRun(handler)
+}
+
+type Tasksketchlist struct {
+	ctx  *gin.Context
+	req  *http_model.TasksketchlistRequest
+	resp *http_model.CommonResponse
+}
+
+func (c Tasksketchlist) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c Tasksketchlist) getResponse() interface{} {
+	return c.resp
+}
+
+func (c Tasksketchlist) getRequest() interface{} {
+	return c.req
+}
+
+func (c Tasksketchlist) run() {
+	data := http_model.TasksketchlistRequest{}
+	data = *c.req
+	res, err := service.Task.GetTasksketchlist(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetTasksketchList] call GetTasksketchList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetTasksketchList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询初稿待审列表"
+	c.resp.Data = res
+}
+
+func (c Tasksketchlist) checkParam() error {
+	return nil
+}
+
+func newTasksketchlistHandler(ctx *gin.Context) *Tasksketchlist {
+	return &Tasksketchlist{
+		ctx:  ctx,
+		req:  http_model.NewTasksketchlistRequest(),
+		resp: http_model.NewTasksketchlistResponse(),
+	}
+}

+ 4 - 5
main.go

@@ -2,7 +2,6 @@ package main
 
 import (
 	"fmt"
-	"log"
 	"youngee_b_api/config"
 	_ "youngee_b_api/docs"
 	"youngee_b_api/route"
@@ -18,9 +17,9 @@ func main() {
 	mailConfig := "./config/mail.json"
 	service.SMTPMailServiceIstance.Init(mailConfig)
 	addr := fmt.Sprintf("%v:%v", config.Host, config.Port)
-	err := service.AutoTask()
-	if err != nil {
-		log.Println("service AutoTask error:", err)
-	}
+	//err := service.AutoTask()
+	//if err != nil {
+	//	log.Println("service AutoTask error:", err)
+	//}
 	r.Run(addr) // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
 }

+ 12 - 0
model/gorm_model/project_task.go

@@ -41,6 +41,18 @@ type YoungeeTaskInfo struct {
 	CurDefaultType         int       `gorm:"column:cur_default_type"`                     // 任务当前处于的违约类型 0-8分别表示未违约、脚本超时违约、脚本未上传违约、初稿超时违约、初稿未上传违约、链接超时违约、链接未上传违约、数据超时违约、数据未上传违约
 	WithdrawStatus         int       `gorm:"column:withdraw_status;default:1"`            // 提现状态,1-4分别代表不可提现、可提现、提现中、已提现
 	SettleStatus           int       `gorm:"column:settle_status;default:1"`              // 结算状态,1、2分别表示待结算、已结算
+	SupplierId             int       `gorm:"column:supplier_id;default:0"`                // 服务商ID
+	SupplierStatus         int       `gorm:"column:supplier_status;default:0"`            // 服务商任务状态 0表示达人来源非服务商 1待选 2已选 3落选
+	DraftFee               float64   `gorm:"column:draft_fee"`                            // 达人稿费
+	SignedTime             time.Time `gorm:"column:signed_time"`                          // 签收时间
+	FansNum                int       `gorm:"column:fans_num"`                             // 粉丝数
+	VoteAvg                int       `gorm:"column:vote_avg"`                             // 平均点赞数
+	CommitAvg              int       `gorm:"column:commit_avg"`                           // 平均评论数
+	BOperator              string    `gorm:"column:b_operator"`                           // 商家确定达人操作人ID
+	BOperatorType          int       `gorm:"column:b_operator_type"`                      // 商家操作人类型,1商家用户,2商家子账号,3管理后台
+	SOperator              int       `gorm:"column:s_operator"`                           // 服务商提报达人操作人ID
+	SOperatorType          int       `gorm:"column:s_operator_type"`                      // 服务商操作人类型,1服务商主账号,2服务商子账号,3管理后台
+	OpenId                 string    `gorm:"column:open_id"`                              // 达人报名的快手唯一标识
 }
 
 func (m *YoungeeTaskInfo) TableName() string {

+ 27 - 0
model/gorm_model/s_project.go

@@ -0,0 +1,27 @@
+package gorm_model
+
+// 服务商加入商单的种草任务
+type YounggeeSProjectInfo struct {
+	SProjectId          int     `gorm:"column:s_project_id;type:int(11);primary_key;AUTO_INCREMENT;comment:服务商种草任务ID" json:"s_project_id"`
+	ProjectId           string  `gorm:"column:project_id;type:varchar(255);comment:被服务商加入商单的原种草任务ID" json:"project_id"`
+	ProjectStatus       int     `gorm:"column:project_status;type:tinyint(4);comment:项目状态,1-10分别代表创建中、待审核、审核通过、招募中、招募完毕、待支付、已支付、失效、执行中、已结案" json:"project_status"`
+	ProjectType         int     `gorm:"column:project_type;type:tinyint(4);comment:种草任务类型,1为公开,2为定向" json:"project_type"`
+	ProjectName         string  `gorm:"column:project_name;type:varchar(50);comment:种草任务名称" json:"project_name"`
+	ProjectPlatform     int     `gorm:"column:project_platform;type:tinyint(4);comment:种草任务平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎" json:"project_platform"`
+	ProjectForm         int     `gorm:"column:project_form;type:tinyint(4);comment:任务形式,1-3分别代表商品寄拍、素材分发、虚拟产品测评" json:"project_form"`
+	ContentType         int     `gorm:"column:content_type;type:tinyint(4);comment:内容形式,1代表图文,2代表视频" json:"content_type"`
+	ShareCode           string  `gorm:"column:share_code;type:varchar(255);comment:分享码URL" json:"share_code"`
+	SupplierId          int     `gorm:"column:supplier_id;type:int(11);comment:服务商ID" json:"supplier_id"`
+	EnterpriseId        string  `gorm:"column:enterprise_id;type:varchar(255);comment:所属企业id" json:"enterprise_id"`
+	ApplyNum            int     `gorm:"column:apply_num;type:int(11);default:0;comment:报名人数;NOT NULL" json:"apply_num"`
+	RecruitNum          int     `gorm:"column:recruit_num;type:int(11);default:0;comment:已招募人数;NOT NULL" json:"recruit_num"`
+	SettleNum           int     `gorm:"column:settle_num;type:int(11);default:0;comment:已结算人数" json:"settle_num"`
+	SubAccountId        int     `gorm:"column:sub_account_id;type:int(11);default:0;comment:服务商子账号ID" json:"sub_account_id"`
+	ServiceCharge       float64 `gorm:"column:service_charge;type:decimal(10,2);default:0.00;comment:服务商预估可赚服务费" json:"service_charge"`
+	ServiceChargeActual float64 `gorm:"column:service_charge_actual;type:decimal(10,2);default:0.00;comment:服务商实际可赚服务费" json:"service_charge_actual"`
+	OperatorType        int     `gorm:"column:operator_type;type:int(11);default:0;comment:添加商单操作人类型,1为服务商主账号,2为服务商子账号" json:"operator_type"`
+}
+
+func (m *YounggeeSProjectInfo) TableName() string {
+	return "younggee_s_project_info"
+}

+ 20 - 0
model/gorm_model/supplier.go

@@ -0,0 +1,20 @@
+package gorm_model
+
+type Supplier struct {
+	SupplierID      int    `gorm:"column:supplier_id"`      // 服务商ID
+	SupplierName    string `gorm:"column:supplier_name"`    // 服务商名称
+	PhoneNumber     string `gorm:"column:phone_number"`     // 手机号
+	BusinessLicense string `gorm:"column:business_license"` // 营业执照url
+	USCI            string `gorm:"column:usci"`             // 统一社会信用代码
+	CompanyName     string `gorm:"column:company_name"`     // 公司名称
+	IDFront         string `gorm:"column:id_front"`         // 身份证人像面url
+	IDBack          string `gorm:"column:id_back"`          // 身份证国徽面url
+	IDNumber        string `gorm:"column:id_number"`        // 身份证号
+	Name            string `gorm:"column:name"`             // 姓名
+	UserID          int    `gorm:"column:user_id"`          // 用户表中的用户ID
+	SupplierType    int    `gorm:"column:supplier_type"`    // 服务商用户类型,1为个人PR,2为机构
+}
+
+func (Supplier) TableName() string {
+	return "younggee_supplier"
+}

+ 27 - 24
model/gorm_model/talent.go

@@ -6,30 +6,33 @@ import (
 )
 
 type YoungeeTalentInfo struct {
-	ID                string    `gorm:"column:id;primary_key"`               // 达人id
-	TalentWxOpenid    string    `gorm:"column:talent_wx_openid;NOT NULL"`    // 达人的微信openid
-	TalentWxNickname  string    `gorm:"column:talent_wx_nickname"`           // 达人的微信昵称
-	TalentWxNumber    string    `gorm:"column:talent_wx_number"`             // 达人微信号
-	Income            int64     `gorm:"column:income;default:0"`             // 收益总数
-	Withdrawing       int64     `gorm:"column:withdrawing;default:0"`        // 提现中金额
-	Canwithdraw       int64     `gorm:"column:canwithdraw;default:0"`        // 可提现金额
-	Withdrawed        int64     `gorm:"column:withdrawed;default:0"`         // 已提现金额
-	TalentGender      int       `gorm:"column:talent_gender"`                // 性别,0未知 1男 2女
-	TalentPhoneNumber string    `gorm:"column:talent_phone_number"`          // 电话号码
-	TalentAgeBracket  int       `gorm:"column:talent_age_bracket"`           // 年龄段,取tallent_age_bracket表id
-	TalentNationality int       `gorm:"column:talent_nationality"`           // 国籍,取tallent_nationality表id
-	VisitStoreRegion  int       `gorm:"column:visit_store_region"`           // 探店区域,取region_info表中的self_code
-	IsBindInfo        uint      `gorm:"column:is_bind_info;default:0"`       // 是否填写个人资料
-	IsBindLocation    uint      `gorm:"column:is_bind_location;default:0"`   // 是否绑定收货地址
-	IsBindBank        uint      `gorm:"column:is_bind_bank;default:0"`       // 是否绑定银行账户信息
-	InBlacklist       uint      `gorm:"column:in_blacklist;default:0"`       // 是否加入黑名单 0否 1是
-	TaskAll           int       `gorm:"column:task_all;default:0"`           // 任务总数
-	TaskApply         int       `gorm:"column:task_apply;default:0"`         // 报名任务数量
-	TaskExecute       int       `gorm:"column:task_execute;default:0"`       // 执行中任务数量
-	TaskEnd           int       `gorm:"column:task_end;default:0"`           // 结束任务数量
-	CreateDate        time.Time `gorm:"column:create_date;NOT NULL"`         // 创建时间
-	LastLoginDate     time.Time `gorm:"column:last_login_date;NOT NULL"`     // 最后登录时间
-	ApplyNum          int       `gorm:"column:apply_num;default:5;NOT NULL"` // 剩余申请次数(每天更新)
+	ID                string    `gorm:"column:id;primary_key;type:char(25)"`                                 // 达人id
+	TalentWxOpenid    string    `gorm:"column:talent_wx_openid;NOT NULL;type:char(128)"`                     // 达人的微信openid
+	Avatar            string    `gorm:"column:avatar;type:varchar(1000);NOT NULL"`                           // 头像
+	TalentWxNickname  string    `gorm:"column:talent_wx_nickname;type:varchar(30);DEFAULT NULL"`             // 达人的微信昵称
+	Income            float64   `gorm:"column:income;type:decimal(10,2);DEFAULT NULL"`                       // 收益总数
+	Withdrawing       float64   `gorm:"column:withdrawing;type:decimal(10,2);DEFAULT NULL"`                  // 提现中金额
+	Canwithdraw       float64   `gorm:"column:canwithdraw;type:decimal(10,2);DEFAULT NULL"`                  // 可提现金额
+	Withdrawed        float64   `gorm:"column:withdrawed;type:decimal(10,2);DEFAULT NULL"`                   // 已提现金额
+	Point             int       `gorm:"column:point;type:int;DEFAULT NULL"`                                  // 可用积分
+	TalentPhoneNumber string    `gorm:"column:talent_phone_number;type:char(20);DEFAULT NULL"`               // 电话号码
+	TalentAgeBracket  int8      `gorm:"column:talent_age_bracket;type:tinyint(1);DEFAULT NULL"`              // 年龄段
+	TalentNationality int8      `gorm:"column:talent_nationality;type:tinyint(1);DEFAULT NULL"`              // 国籍
+	VisitStoreRegion  int       `gorm:"column:visit_store_region;type:int;DEFAULT NULL"`                     // 探店区域
+	IsBindInfo        uint8     `gorm:"column:is_bind_info;type:tinyint(1);DEFAULT 0"`                       // 是否填写个人资料
+	IsBindAccount     uint8     `gorm:"column:is_bind_account;type:tinyint(1);DEFAULT 0"`                    // 是否绑定账号
+	IsBindLocation    uint8     `gorm:"column:is_bind_location;type:tinyint(1);DEFAULT 0"`                   // 是否绑定收货地址
+	IsBindBank        uint8     `gorm:"column:is_bind_bank;type:tinyint(1);DEFAULT 0"`                       // 是否绑定银行账户信息
+	InBlacklist       uint8     `gorm:"column:in_blacklist;type:tinyint(1);DEFAULT 0"`                       // 是否加入黑名单
+	TaskAll           int       `gorm:"column:task_all;type:int;DEFAULT 0"`                                  // 任务总数
+	TaskApply         int       `gorm:"column:task_apply;type:int;DEFAULT 0"`                                // 报名任务数量
+	TaskExecute       int       `gorm:"column:task_execute;type:int;DEFAULT 0"`                              // 执行中任务数量
+	TaskEnd           int       `gorm:"column:task_end;type:int;DEFAULT 0"`                                  // 结束任务数量
+	CreateDate        time.Time `gorm:"column:create_date;type:datetime;NOT NULL;DEFAULT CURRENT_TIMESTAMP"` // 创建时间
+	LastLoginDate     time.Time `gorm:"column:last_login_date;type:datetime;NOT NULL"`                       // 最后登录时间
+	ApplyNum          int       `gorm:"column:apply_num;type:int;NOT NULL;DEFAULT 5"`                        // 剩余申请次数
+	UserType          uint8     `gorm:"column:user_type;type:tinyint;DEFAULT 1"`                             // 用户类型
+	Sex               int8      `gorm:"column:sex;type:tinyint(1);DEFAULT NULL"`                             // 性别
 }
 
 func (m *YoungeeTalentInfo) TableName() string {

+ 14 - 0
model/http_model/EndTaskRequest.go

@@ -0,0 +1,14 @@
+package http_model
+
+type EndTaskRequest struct {
+	TaskId int `json:"task_id"`
+}
+
+func NewEndTaskRequest() *EndTaskRequest {
+	return new(EndTaskRequest)
+}
+
+func NewEndTaskResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 21 - 0
model/http_model/PassproTaskCoopRequest.go

@@ -0,0 +1,21 @@
+package http_model
+
+type PassproTaskCoopRequest struct {
+	ProjectId   string   `json:"project_id"`
+	TaskIds     []string `json:"task_ids"`
+	OperatorId  string   `json:"operator_id"`
+	OperateType int      `json:"operate_type"`
+}
+
+type PassproTaskCoopData struct {
+}
+
+func NewPassproTaskCoopRequest() *PassproTaskCoopRequest {
+	return new(PassproTaskCoopRequest)
+}
+
+func NewPassproTaskCoopResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(PassproTaskCoopData)
+	return resp
+}

+ 30 - 0
model/http_model/PreLinkList.go

@@ -0,0 +1,30 @@
+package http_model
+
+import "time"
+
+type PreLinkListRequest struct {
+	PageSize   int    `json:"page_size"`
+	PageNum    int    `json:"page_num"`
+	ProjectId  string `json:"project_id"`  // 项目ID
+	LinkStatus string `json:"link_status"` // 链接状态,11待传链接
+}
+
+type GetprelinkListData struct {
+	TasklinkList []*Tasklinkinfo `json:"task_list"`
+	Total        string          `json:"total"`
+}
+
+type Tasklinkinfo struct {
+	Task *TaskInfo `json:"task_info"`
+	DDl  time.Time `json:"ddl"` // 提交时间
+}
+
+func NewPreLinkListRequest() *PreLinkListRequest {
+	return new(PreLinkListRequest)
+}
+
+func NewPreLinkListResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetSketchTaskListData)
+	return resp
+}

+ 20 - 0
model/http_model/RefuseproTaskCoopRequest.go

@@ -0,0 +1,20 @@
+package http_model
+
+type RefuseproTaskCoopRequest struct {
+	TaskIds     []string `json:"task_ids"`
+	OperatorId  string   `json:"operator_id"`
+	OperateType int      `json:"operate_type"`
+}
+
+type RefuseproTaskCoopData struct {
+}
+
+func NewRefuseproTaskCoopRequest() *RefuseproTaskCoopRequest {
+	return new(RefuseproTaskCoopRequest)
+}
+
+func NewRefuseproTaskCoopResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(RefuseproTaskCoopData)
+	return resp
+}

+ 37 - 0
model/http_model/executedata.go

@@ -0,0 +1,37 @@
+package http_model
+
+import "time"
+
+type ExecuteDataRequest struct {
+	ProjectId string `json:"project_id"`
+}
+
+type ExecuteDataResponse struct {
+	Excutetime      time.Time     `json:"recruit_time"`
+	PreSketchNum    int64         `json:"presketch_num"`
+	SketchNum       int64         `json:"sketch_num"`
+	SketchAccNum    int64         `json:"sketch_accept_num"`
+	AvgAccTime      time.Duration `json:"avg_acc_time"`
+	AvgCreTime      time.Duration `json:"avg_cre_time"`
+	FirAccRatio     float64       `json:"fir_acc_ratio"`
+	PreLinkNum      int64         `json:"pre_link_num"`
+	LinkNum         int64         `json:"link_num"`
+	LinkAccNum      int64         `json:"link_accept_num"`
+	AvgLinkAccTime  time.Duration `json:"avg_link_acc_time"`
+	AvgBackTime     time.Duration `json:"avg_back_time"`
+	FirAccLinkRatio float64       `json:"fir_acc_link_ratio"`
+	PreDataNum      int64         `json:"pre_data_num"`
+	DataNum         int64         `json:"data_num"`
+	DefaultNum      int64         `json:"default_num"`
+	DefaultRatio    float64       `json:"default_ratio"`
+}
+
+func NewExecuteDataRequest() *ExecuteDataRequest {
+	return new(ExecuteDataRequest)
+}
+
+func NewExecuteDataResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(ExecuteDataResponse)
+	return resp
+}

+ 42 - 0
model/http_model/gettasklist.go

@@ -0,0 +1,42 @@
+package http_model
+
+type GetTaskListRequest struct {
+	PageSize  int    `json:"page_size"`
+	PageNum   int    `json:"page_num"`
+	FeeFrom   *int   `json:"fee_from,omitempty"`
+	Type      *int   `json:"type,omitempty"` // 查询类型,1、2分别表示达人来源于公海(商家端),服务商
+	ProjectId string `json:"project_id"`
+	CoopType  int    `json:"coop_type"` //1未处理,2同意,3拒绝
+}
+
+type GetTaskListData struct {
+	TaskList []*TaskInfo `json:"task_list"`
+	Total    string      `json:"total"`
+}
+
+type TaskInfo struct {
+	TaskId             string  `json:"task_id"`
+	ProjectId          string  `json:"project_id"`
+	TalentId           string  `json:"talent_id"`
+	FansNum            int     `json:"fans_num"`
+	DraftFee           float64 `json:"draft_fee"`
+	FeeFrom            int     `json:"fee_from"`
+	TaskStage          int     `json:"task_stage"`
+	Voteavg            int     `json:"vote_avg"`
+	Commentavg         int     `json:"commit_avg"`
+	CurrentDefaultType int     `json:"current_default_type"`
+	From               int     `json:"from"`   //1公海,2服务商
+	SType              int     `json:"s_type"` //1个人,2机构
+	Boperator          string  `json:"b_operator"`
+	SettleAmount       float64 `json:"settle_amount"`
+}
+
+func NewGetTaskListRequest() *GetTaskListRequest {
+	return new(GetTaskListRequest)
+}
+
+func NewGetTaskListResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetTaskListData)
+	return resp
+}

+ 0 - 1
model/http_model/link_opinion.go

@@ -1,7 +1,6 @@
 package http_model
 
 type LinkOpinionRequest struct {
-	StrategyID  int64  `json:"strategy_id"`  //招募策略id
 	TaskID      string `json:"task_id"`      //任务-id
 	LinkOpinion string `json:"Link_opinion"` //链接审核意见
 }

+ 30 - 0
model/http_model/predatalist.go

@@ -0,0 +1,30 @@
+package http_model
+
+import "time"
+
+type PreDataListRequest struct {
+	PageSize   int    `json:"page_size"`
+	PageNum    int    `json:"page_num"`
+	ProjectId  string `json:"project_id"`  // 项目ID
+	DataStatus string `json:"data_status"` // 数据状态,13待传数据
+}
+
+type GetPreDataListData struct {
+	TaskdataList []*Taskdatainfo `json:"task_list"`
+	Total        string          `json:"total"`
+}
+
+type Taskdatainfo struct {
+	Task *TaskInfo `json:"task_info"`
+	DDl  time.Time `json:"ddl"` // 截止时间
+}
+
+func NewPreDataListRequest() *PreDataListRequest {
+	return new(PreDataListRequest)
+}
+
+func NewPreDataListResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetSketchTaskListData)
+	return resp
+}

+ 30 - 0
model/http_model/presketchlist.go

@@ -0,0 +1,30 @@
+package http_model
+
+import "time"
+
+type PreSketchListRequest struct {
+	PageSize     int    `json:"page_size"`
+	PageNum      int    `json:"page_num"`
+	ProjectId    string `json:"project_id"`    // 项目ID
+	ScriptStatus int    `json:"script_status"` // 稿件状态,10初稿待审
+}
+
+type GetSketchTaskListData struct {
+	TasksketchList []*TasksketchInfo `json:"task_list"`
+	Total          string            `json:"total"`
+}
+
+type TasksketchInfo struct {
+	Task *TaskInfo `json:"task_info"`
+	DDl  time.Time `json:"ddl"`
+}
+
+func NewPreSketchListRequest() *PreSketchListRequest {
+	return new(PreSketchListRequest)
+}
+
+func NewPreSketchListResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetSketchTaskListData)
+	return resp
+}

+ 31 - 0
model/http_model/projectdatarequest.go

@@ -0,0 +1,31 @@
+package http_model
+
+import "time"
+
+type ProjectDataRequest struct {
+	ProjectId string `json:"project_id"`
+}
+
+type ProjectDataResponse struct {
+	RecruitDDl  time.Time      `json:"recruit_ddl"`
+	Recruittime time.Time      `json:"recruit_time"`
+	ApplyNum    int64          `json:"apply_num"`
+	AgreeNum    int64          `json:"agree_num"`
+	DraftFee    float64        `json:"draft_fee"`
+	AvgFansNum  int            `json:"avg_fans_num"`
+	FromType    float64        `json:"from_type"`
+	ManRatio    float64        `json:"man_ratio"`
+	FeeMap      map[int]int    `json:"fee_map"`
+	FansMap     map[int64]int  `json:"fans_map"`
+	DateStats   map[string]int `json:"date_stats"`
+}
+
+func NewProjectDataRequest() *ProjectDataRequest {
+	return new(ProjectDataRequest)
+}
+
+func NewProjectDataResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(ProjectDataResponse)
+	return resp
+}

+ 18 - 0
model/http_model/reject_data.go

@@ -0,0 +1,18 @@
+package http_model
+
+type RejectDataRequest struct {
+	TaskIds string `json:"task_id_list"` //任务id列表
+}
+
+type RejectDataData struct {
+	TaskIds []string `json:"task_id_list"` //任务id列表
+}
+
+func NewRejectDataRequest() *RejectDataRequest {
+	return new(RejectDataRequest)
+}
+func NewRejectDataResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(RejectDataData)
+	return resp
+}

+ 18 - 0
model/http_model/reject_link.go

@@ -0,0 +1,18 @@
+package http_model
+
+type RejectLinkRequest struct {
+	TaskIds string `json:"task_id_list"` //任务id列表
+}
+
+type RejectLinkData struct {
+	TaskIds []string `json:"task_id_list"` //任务id列表
+}
+
+func NewRejectLinkRequest() *RejectLinkRequest {
+	return new(RejectLinkRequest)
+}
+func NewRejectLinkResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(RejectLinkData)
+	return resp
+}

+ 0 - 1
model/http_model/sketch_opinion.go

@@ -1,7 +1,6 @@
 package http_model
 
 type SketchOpinionRequest struct {
-	StrategyID    int64  `json:"strategy_id"`    //招募策略id
 	TaskID        string `json:"task_id"`        //任务-id
 	SketchOpinion string `json:"sketch_opinion"` //初稿意见
 }

+ 18 - 0
model/http_model/sketch_reject.go

@@ -0,0 +1,18 @@
+package http_model
+
+type RejectSketchRequest struct {
+	TaskIds string `json:"task_id_list"` //任务id列表
+}
+
+type RejectSketchData struct {
+	TaskIds []string `json:"task_id_list"` //任务id列表
+}
+
+func NewRejectSketchRequest() *RejectSketchRequest {
+	return new(RejectSketchRequest)
+}
+func NewRejectSketchResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(RejectSketchData)
+	return resp
+}

+ 8 - 3
model/http_model/sktech_info.go

@@ -1,5 +1,7 @@
 package http_model
 
+import "time"
+
 type GetSketchInfoRequest struct {
 	TaskID string `json:"task_id"`
 }
@@ -11,9 +13,12 @@ type SketchPhotoInfo struct {
 }
 
 type GetSketchInfoData struct {
-	SketchPhotos []SketchPhotoInfo `json:"sketch_photos"` //初稿图片以及视频
-	Title        string            `json:"title"`
-	Content      string            `json:"content"`
+	SketchPhotos   []SketchPhotoInfo `json:"sketch_photos"` //初稿图片以及视频
+	Title          string            `json:"title"`
+	Content        string            `json:"content"`
+	Agreeat        time.Time         `json:"agree_at"`
+	Submitat       time.Time         `json:"submit_at"`
+	ReverseOpinion string            `json:"reverse_opinion"`
 }
 
 func NewGetSketchInfoRequest() *GetSketchInfoRequest {

+ 37 - 0
model/http_model/taskdatalist.go

@@ -0,0 +1,37 @@
+package http_model
+
+import "time"
+
+type TaskDatalistRequest struct {
+	PageSize   int    `json:"page_size"`
+	PageNum    int    `json:"page_num"`
+	ProjectId  string `json:"project_id"`  // 项目ID
+	DataStatus string `json:"data_status"` // 链接状态,14
+}
+
+type GetTaskDatalistData struct {
+	TaskDatalist []*TaskDatainfo `json:"task_list"`
+	Total        string          `json:"total"`
+}
+
+type TaskDatainfo struct {
+	Task          *TaskInfo `json:"task_info"`
+	SubmitAt      time.Time `json:"submit_at"` // 提交时间
+	AgreeAt       time.Time `json:"agree_at"`
+	DataId        int       `json:"data_id"` //初稿ID
+	PhotoUrl      string    `json:"photo_url"`
+	PlayNumber    int       `json:"play_number"`
+	LikeNumber    int       `json:"like_number"`
+	CommentNumber int       `json:"comment_number"`
+	CollectNumber int       `json:"collect_number"`
+}
+
+func NewTaskDatalistRequest() *TaskDatalistRequest {
+	return new(TaskDatalistRequest)
+}
+
+func NewTaskDatalistResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetSketchTaskListData)
+	return resp
+}

+ 34 - 0
model/http_model/tasklinklist.go

@@ -0,0 +1,34 @@
+package http_model
+
+import "time"
+
+type TaskLinklistRequest struct {
+	PageSize   int    `json:"page_size"`
+	PageNum    int    `json:"page_num"`
+	ProjectId  string `json:"project_id"`  // 项目ID
+	LinkStatus string `json:"link_status"` // 链接状态,12待审
+}
+
+type GettasklinkListData struct {
+	TaskLinklist []*TaskLinkinfo `json:"task_list"`
+	Total        string          `json:"total"`
+}
+
+type TaskLinkinfo struct {
+	Task     *TaskInfo `json:"task_info"`
+	SubmitAt time.Time `json:"submit_at"` // 提交时间
+	AgreeAt  time.Time `json:"agree_at"`
+	LinkId   int       `json:"link_id"` //初稿ID
+	LinkUrl  string    `json:"link_url"`
+	PhotoUrl string    `json:"photo_url"`
+}
+
+func NewTaskLinklistRequest() *TaskLinklistRequest {
+	return new(TaskLinklistRequest)
+}
+
+func NewTaskLinklistResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetSketchTaskListData)
+	return resp
+}

+ 32 - 0
model/http_model/tasksketchlist.go

@@ -0,0 +1,32 @@
+package http_model
+
+import "time"
+
+type TasksketchlistRequest struct {
+	PageSize     int    `json:"page_size"`
+	PageNum      int    `json:"page_num"`
+	ProjectId    string `json:"project_id"`    // 项目ID
+	ScriptStatus string `json:"script_status"` // 稿件状态
+}
+
+type GetsketchtaskListData struct {
+	TasksketchList []*Tasksketchinfo `json:"task_list"`
+	Total          string            `json:"total"`
+}
+
+type Tasksketchinfo struct {
+	Task     *TaskInfo `json:"task_info"`
+	SubmitAt time.Time `json:"submit_at"` // 提交时间
+	AgreeAt  time.Time `json:"agree_at"`
+	SketchId int       `json:"sketch_id"` //初稿ID
+}
+
+func NewTasksketchlistRequest() *TasksketchlistRequest {
+	return new(TasksketchlistRequest)
+}
+
+func NewTasksketchlistResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetSketchTaskListData)
+	return resp
+}

+ 64 - 42
route/init.go

@@ -41,44 +41,38 @@ func InitRoute(r *gin.Engine) {
 	//})
 	m := r.Group("/youngee/m")
 	{
-		m.Use(middleware.LoginAuthMiddleware)
+		//m.Use(middleware.LoginAuthMiddleware)
 		m.POST("/test", func(c *gin.Context) {
 			c.JSON(200, "ok")
 			// 注意这里只是debug用的 接口要写成handler形式
 			auth := middleware.GetSessionAuth(c)
 			logrus.Infof("auth:%+v", auth)
 		})
-		m.POST("/product/findall", handler.WrapFindAllProductHandler)                        //查询全部产品
-		m.POST("/product/find", handler.WrapFindProductHandler)                              // 查找单个产品
-		m.POST("/project/create", handler.WrapCreateProjectHandler)                          // 创建项目
-		m.POST("/project/show", handler.WrapShowProjectHandler)                              // 展示项目内容
-		m.POST("/project/update", handler.WrapUpdateProjectHandler)                          // 更新项目
-		m.POST("/project/delete", handler.WrapDeleteProjectHandler)                          // 删除项目
-		m.POST("/product/create", handler.WrapCreateProductHandler)                          // 创建项目
-		m.POST("/project/list", handler.WrapFullProjectListHandler)                          // 项目列表
-		m.POST("/project/taskList", handler.WrapProjectTaskListHandler)                      // 任务列表
-		m.POST("/project/draftlist", handler.WrapProjectDraftBoxListHandler)                 // 草稿箱查询
-		m.GET("/project/getCreatingNumber", handler.WrapGetCreatingNumberHandler)            // 查询创建中项目数量
-		m.POST("/project/changeTaskStatus", handler.WrapProjectChangeTaskStatusHandler)      // 改变任务的状态
-		m.POST("/pay/paysum", handler.WrapPaySumHandler)                                     // 支付总额
-		m.POST("/pay/projectpay", handler.WrapProjectPayHandler)                             // 支付
-		m.POST("/enterprise/balance", handler.WrapEnterpriseBalanceHandler)                  // 样叽页面各种余额
-		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("/product/findall", handler.WrapFindAllProductHandler)                   //查询全部产品
+		m.POST("/product/find", handler.WrapFindProductHandler)                         // 查找单个产品
+		m.POST("/project/create", handler.WrapCreateProjectHandler)                     // 创建项目
+		m.POST("/project/show", handler.WrapShowProjectHandler)                         // 展示项目内容
+		m.POST("/project/update", handler.WrapUpdateProjectHandler)                     // 更新项目
+		m.POST("/project/delete", handler.WrapDeleteProjectHandler)                     // 删除项目
+		m.POST("/product/create", handler.WrapCreateProductHandler)                     // 创建项目
+		m.POST("/project/list", handler.WrapFullProjectListHandler)                     // 项目列表
+		m.POST("/project/taskList", handler.WrapProjectTaskListHandler)                 // 任务列表
+		m.POST("/project/draftlist", handler.WrapProjectDraftBoxListHandler)            // 草稿箱查询
+		m.GET("/project/getCreatingNumber", handler.WrapGetCreatingNumberHandler)       // 查询创建中项目数量
+		m.POST("/project/changeTaskStatus", handler.WrapProjectChangeTaskStatusHandler) // 改变任务的状态
+		m.POST("/pay/paysum", handler.WrapPaySumHandler)                                // 支付总额
+		m.POST("/pay/projectpay", handler.WrapProjectPayHandler)                        // 支付
+		m.POST("/enterprise/balance", handler.WrapEnterpriseBalanceHandler)             // 样叽页面各种余额
+		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/tasklinklist", handler.WrapTaskLinkListHandler)                     // 查询链接列表
+		//m.POST("/project/taskdatalist", handler.WrapTaskDataListHandler)                     // 查询数据列表
 		m.POST("/pay/getCodeUrl", handler.WrapGetCodeUrlHandler)                             // 获取微信支付codeURL
 		m.POST("/pay/queryOrderByTradeId", handler.WrapQueryOrderByTradeIdHandler)           // 根据交易id查询微信是否扫码付款
 		m.POST("/pay/rechargeBalance", handler.WrapRechargeBalanceHandler)                   // 支付成功后修改企业余额
@@ -102,15 +96,15 @@ func InitRoute(r *gin.Engine) {
 		m.POST("/project/taskteminatinglist", handler.WrapTaskTerminatingListHandler)        // 查询违约列表-解约待处理
 		m.POST("/project/taskteminatedlist", handler.WrapTaskTerminatedListHandler)          // 查询违约列表-解约
 		m.POST("/project/taskteminate", handler.WrapTaskTerminateHandler)                    // 解约
-		m.POST("/project/getsketchinfo", handler.WrapGetSketchInfoHandler)                   // 获取初稿
-		m.POST("/project/taskfinishlist", handler.WrapTaskFinishListHandler)                 // 查询违约列表-数据违约
-		m.POST("/project/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("/workspace/headNums", handler.WrapWorkspaceHeadNumsHandler)                   // 工作台上面数字显示
-		m.POST("/workspace/BarNums", handler.WrapWorkspaceBarNumsHandler)                    // 工作台柱状图数字显示
+
+		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("/workspace/headNums", handler.WrapWorkspaceHeadNumsHandler)             // 工作台上面数字显示
+		m.POST("/workspace/BarNums", handler.WrapWorkspaceBarNumsHandler)              // 工作台柱状图数字显示
 
 		m.POST("/project/getSpecialInviteNumber", handler.WrapGetSpecialInviteNumberHandler) // 查询专项任务邀请管理任务数量
 		m.POST("/project/getSpecialReviewNumber", handler.WrapGetSpecialReviewNumberHandler) // 查询专项任务审稿管理任务数量
@@ -138,7 +132,35 @@ func InitRoute(r *gin.Engine) {
 		m.POST("/product/deletePhotoUrl", handler.WrapDeletePhotoUrlHandler)                     // 在数据库中删除图片url
 		m.POST("/qrcode/getwxqrcode", handler.WrapGetWxQRCodeHandler)                            // 获取微信二维码
 
-		m.POST("/project/getAllProduct", handler.WrapGetAllProjectHandler) // 查询项目广场项目列表
+		m.POST("/project/getAllProduct", handler.WrapGetAllProjectHandler)        // 查询项目广场项目列表
+		m.POST("/project/getTasklist", handler.WrapGetTaskListHandler)            //招募中选达人列表/查名单
+		m.POST("/project/task/coop/pass", handler.WrapPassproTaskCoopHandler)     // 同意任务合作
+		m.POST("/project/task/coop/refuse", handler.WrapRefuseproTaskCoopHandler) // 拒绝任务合作
+
+		m.POST("/project/projectdata", handler.WrapProjectDataHandler) //看数据
+		m.POST("/project/endtask", handler.WrapEndTaskHandler)         //暂时终止
+
+		m.POST("/project/presketchlist", handler.WrapPreSketchListHandler)     //初稿待传列表?
+		m.POST("/project/tasksketchlist", handler.WrapTasksketchlistHandler)   //初稿待审列表.审核通过
+		m.POST("/project/sketchopinion", handler.WrapSketchOpinionHandler)     // 初稿审核意见提交
+		m.POST("/project/acceptsketch", handler.WrapAcceptSketchHandler)       // 同意初稿
+		m.POST("/project/rejectsketch", handler.WrapRejectSketchHandler)       // 拒绝初稿
+		m.POST("/project/findsketchphoto", handler.WrapFindSketchPhotoHandler) // 查询脚本配图和视频demo
+		m.POST("/project/getsketchinfo", handler.WrapGetSketchInfoHandler)     // 获取初稿
+
+		m.POST("/project/prelinklist", handler.WrapPreLinkListHandler)   //待传链接列表
+		m.POST("/project/tasklinklist", handler.WrapTaskLinklistHandler) //链接待审列表,通过
+		m.POST("/project/linkopinion", handler.WrapLinkOpinionHandler)   // 链接审核意见提交
+		m.POST("/project/acceptlink", handler.WrapAcceptLinkHandler)     // 同意链接
+		m.POST("/project/rejectlink", handler.WrapRejectLinkHandler)     // 拒绝链接
+
+		m.POST("/project/predatalist", handler.WrapPreDataListHandler)   //待传数据列表
+		m.POST("/project/taskdatalist", handler.WrapTaskDatalistHandler) //数据待审列表?结算金额
+		m.POST("/project/dataopinion", handler.WrapDataOpinionHandler)   // 数据审核意见提交
+		m.POST("/project/acceptdata", handler.WrapAcceptDataHandler)     // 同意数据
+		m.POST("/project/rejectdata", handler.WrapRejectDataHandler)     // 拒绝数据
+
+		m.POST("/project/executedata", handler.WrapExecuteDataHandler) //看数据
 	}
 
 	// 选品广场相关接口

+ 101 - 0
service/Task.go

@@ -0,0 +1,101 @@
+package service
+
+import (
+	"context"
+	"github.com/sirupsen/logrus"
+	"youngee_b_api/db"
+	"youngee_b_api/model/http_model"
+)
+
+var Task *task
+
+type task struct {
+}
+
+func (*task) GetList(ctx context.Context, request http_model.GetTaskListRequest) (*http_model.GetTaskListData, error) {
+	secTaskList, err := db.GetProjecttaskList(ctx, request)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetTaskList error,err:%+v", err)
+		return nil, err
+	}
+	return secTaskList, nil
+}
+
+func (*task) PassCoop(ctx context.Context, request http_model.PassproTaskCoopRequest) (*http_model.PassSecTaskCoopData, error) {
+	_, err := db.PassProTaskCoop(ctx, request.ProjectId, request.TaskIds, request.OperatorId, request.OperateType)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call PassCoop error,err:%+v", err)
+		return nil, err
+	}
+
+	selectionListData := http_model.PassSecTaskCoopData{}
+
+	return &selectionListData, nil
+}
+
+func (*task) RefuseCoop(ctx context.Context, request http_model.RefuseproTaskCoopRequest) (*http_model.RefuseproTaskCoopData, error) {
+
+	_, err := db.RefuseproTaskCoop(ctx, request.TaskIds, request.OperatorId, request.OperateType)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call RefuseCoop error,err:%+v", err)
+		return nil, err
+	}
+
+	projectListData := http_model.RefuseproTaskCoopData{}
+
+	return &projectListData, nil
+}
+
+func (*task) GetPreSketchList(ctx context.Context, request http_model.PreSketchListRequest) (*http_model.GetSketchTaskListData, error) {
+	secTaskList, err := db.GetPreSketchList(ctx, request)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetPreSketchList error,err:%+v", err)
+		return nil, err
+	}
+	return secTaskList, nil
+}
+
+func (*task) GetTasksketchlist(ctx context.Context, request http_model.TasksketchlistRequest) (*http_model.GetsketchtaskListData, error) {
+	secTaskList, err := db.GetSketchList(ctx, request)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetTasksketchlist error,err:%+v", err)
+		return nil, err
+	}
+	return secTaskList, nil
+}
+
+func (*task) GetPreLinkList(ctx context.Context, request http_model.PreLinkListRequest) (*http_model.GetprelinkListData, error) {
+	secTaskList, err := db.GetPreLinkList(ctx, request)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call PreLinkListRequest error,err:%+v", err)
+		return nil, err
+	}
+	return secTaskList, nil
+}
+
+func (*task) GetTaskLinklist(ctx context.Context, request http_model.TaskLinklistRequest) (*http_model.GettasklinkListData, error) {
+	secTaskList, err := db.GetLinkList(ctx, request)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetTasksketchlist error,err:%+v", err)
+		return nil, err
+	}
+	return secTaskList, nil
+}
+
+func (*task) GetPreDataList(ctx context.Context, request http_model.PreDataListRequest) (*http_model.GetPreDataListData, error) {
+	secTaskList, err := db.GetPreDataList(ctx, request)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call PreLinkListRequest error,err:%+v", err)
+		return nil, err
+	}
+	return secTaskList, nil
+}
+
+func (*task) GetTaskDatalist(ctx context.Context, request http_model.TaskDatalistRequest) (*http_model.GetTaskDatalistData, error) {
+	secTaskList, err := db.GetDataList(ctx, request)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetTasksketchlist error,err:%+v", err)
+		return nil, err
+	}
+	return secTaskList, nil
+}

+ 33 - 0
service/data.go

@@ -134,3 +134,36 @@ func (*data) AcceptData(ctx context.Context, request http_model.AcceptDataReques
 	}
 	return res, nil
 }
+
+// RejectData
+func (*data) RejectData(ctx context.Context, request http_model.RejectDataRequest) (*http_model.RejectDataData, error) {
+	var TaskIDList []string
+	TaskIDs := strings.Split(request.TaskIds, ",")
+	for _, taskId := range TaskIDs {
+		TaskIDList = append(TaskIDList, taskId)
+	}
+	fmt.Printf("acc request %+v", TaskIDList)
+	err := db.RejectData(ctx, TaskIDList)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link service] call CreateLink error,err:%+v", err)
+		return nil, err
+	}
+	// 记录任务日志
+	for _, taskId := range TaskIDList {
+		err = db.CreateTaskLog(ctx, taskId, "数据驳回")
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[Link service] call CreateTaskLog error,err:%+v", err)
+			return nil, err
+		}
+		err = db.CreateMessageByTaskId(ctx, 19, 3, taskId)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[Script service] call CreateTaskLog error,err:%+v", err)
+			return nil, err
+		}
+	}
+
+	res := &http_model.RejectDataData{
+		TaskIds: TaskIDList,
+	}
+	return res, nil
+}

+ 33 - 0
service/link.go

@@ -78,3 +78,36 @@ func (*link) AcceptLink(ctx context.Context, request http_model.AcceptLinkReques
 	}
 	return res, nil
 }
+
+// RejectLink
+func (*link) RejectLink(ctx context.Context, request http_model.RejectLinkRequest) (*http_model.RejectLinkData, error) {
+	var TaskIDList []string
+	TaskIDs := strings.Split(request.TaskIds, ",")
+	for _, taskId := range TaskIDs {
+		TaskIDList = append(TaskIDList, taskId)
+	}
+	fmt.Printf("acc request %+v", TaskIDList)
+	err := db.RejectLink(ctx, TaskIDList)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link service] call CreateLink error,err:%+v", err)
+		return nil, err
+	}
+	// 记录任务日志
+	for _, taskId := range TaskIDList {
+		err = db.CreateTaskLog(ctx, taskId, "链接不通过")
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[Link service] call CreateTaskLog error,err:%+v", err)
+			return nil, err
+		}
+		err = db.CreateMessageByTaskId(ctx, 18, 3, taskId)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[Script service] call CreateTaskLog error,err:%+v", err)
+			return nil, err
+		}
+	}
+
+	res := &http_model.RejectLinkData{
+		TaskIds: TaskIDList,
+	}
+	return res, nil
+}

+ 20 - 2
service/project.go

@@ -389,8 +389,8 @@ func (*project) GetProjectDraftList(ctx context.Context, enterpriseID string, pa
 	return ProjectDraftListData, nil
 }
 
-func (*project) GetProjectTaskList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TaskConditions) (*http_model.ProjectTaskListData, error) {
-	projectTasks, total, err := db.GetProjectTaskList(ctx, projectID, pageSize, pageNum, conditions)
+func (*project) GetProjectTaskList(ctx context.Context, pageSize int64, pageNum int64, conditions *common_model.TaskConditions) (*http_model.ProjectTaskListData, error) {
+	projectTasks, total, err := db.GetProjectTaskList(ctx, pageSize, pageNum, conditions)
 	if err != nil {
 		logrus.WithContext(ctx).Errorf("[project service] call GetProjectTaskList error,err:%+v", err)
 		return nil, err
@@ -624,3 +624,21 @@ func (*project) GetSpecialProjectTaskList(ctx context.Context, projectID string,
 	TaskLogisticsListData.Total = conv.MustString(total, "")
 	return TaskLogisticsListData, nil
 }
+
+func (*project) Data(ctx context.Context, Project http_model.ProjectDataRequest) (*http_model.ProjectDataResponse, error) {
+	projectdata, err := db.GetProjectData(ctx, Project.ProjectId)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call Data error,err:%+v", err)
+		return nil, err
+	}
+	return &projectdata, nil
+}
+
+func (*project) ExecuteData(ctx context.Context, Project http_model.ExecuteDataRequest) (*http_model.ExecuteDataResponse, error) {
+	projectdata, err := db.GetProjectExecuteData(ctx, Project.ProjectId)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call Data error,err:%+v", err)
+		return nil, err
+	}
+	return &projectdata, nil
+}

+ 39 - 3
service/sketch.go

@@ -123,9 +123,45 @@ func (*sketch) GetSketchInfo(ctx context.Context, request http_model.GetSketchIn
 		SketchPhotos = append(SketchPhotos, sketchPhoto)
 	}
 	SketchInfoData := http_model.GetSketchInfoData{
-		Title:        SketchInfo.Title,
-		Content:      SketchInfo.Content,
-		SketchPhotos: SketchPhotos,
+		Title:          SketchInfo.Title,
+		Content:        SketchInfo.Content,
+		SketchPhotos:   SketchPhotos,
+		Agreeat:        SketchInfo.AgreeAt,
+		Submitat:       SketchInfo.SubmitAt,
+		ReverseOpinion: SketchInfo.ReviseOpinion,
 	}
 	return &SketchInfoData, nil
 }
+
+// AcceptSketch 不同意初稿
+func (*sketch) RejectSketch(ctx context.Context, request http_model.RejectSketchRequest) (*http_model.RejectSketchData, error) {
+	var TaskIDList []string
+	TaskIDs := strings.Split(request.TaskIds, ",")
+	for _, taskId := range TaskIDs {
+		TaskIDList = append(TaskIDList, taskId)
+	}
+	fmt.Printf("acc request %+v", TaskIDList)
+	err := db.RejectSketch(ctx, TaskIDList)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch service] call CreateSketch error,err:%+v", err)
+		return nil, err
+	}
+	// 记录任务日志
+	for _, taskId := range TaskIDList {
+		err = db.CreateTaskLog(ctx, taskId, "初稿未通过")
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[Sketch service] call CreateTaskLog error,err:%+v", err)
+			return nil, err
+		}
+		err = db.CreateMessageByTaskId(ctx, 17, 3, taskId)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[Script service] call CreateTaskLog error,err:%+v", err)
+			return nil, err
+		}
+	}
+
+	res := &http_model.RejectSketchData{
+		TaskIds: TaskIDList,
+	}
+	return res, nil
+}