yuliang1112 2 роки тому
батько
коміт
8f4314efde

+ 114 - 8
db/project.go

@@ -3,12 +3,14 @@ package db
 import (
 	"context"
 	"fmt"
-	"github.com/sirupsen/logrus"
-	"gorm.io/gorm"
 	"reflect"
 	"youngee_b_api/model/common_model"
 	"youngee_b_api/model/gorm_model"
+	"youngee_b_api/pack"
 	"youngee_b_api/util"
+
+	"github.com/sirupsen/logrus"
+	"gorm.io/gorm"
 )
 
 func CreateProject(ctx context.Context, projectInfo gorm_model.ProjectInfo) (*int64, error) {
@@ -27,11 +29,11 @@ func UpdateProject(ctx context.Context, project gorm_model.ProjectInfo) (*int64,
 	}
 	return &project.ProjectID, nil
 }
+
 func GetFullProjectList(ctx context.Context, enterpriseID int64, pageSize, pageNum int32, condition *common_model.ProjectCondition) ([]*gorm_model.ProjectInfo, int64, error) {
 	db := GetReadDB(ctx)
 	// 根据企业id过滤
 	db = db.Debug().Model(gorm_model.ProjectInfo{}).Where("enterprise_id = ?", enterpriseID)
-	logrus.Printf("db:%V", db)
 	// 根据Project条件过滤
 	conditionType := reflect.TypeOf(condition).Elem()
 	conditionValue := reflect.ValueOf(condition).Elem()
@@ -39,21 +41,19 @@ func GetFullProjectList(ctx context.Context, enterpriseID int64, pageSize, pageN
 		field := conditionType.Field(i)
 		tag := field.Tag.Get("condition")
 		value := conditionValue.FieldByName(field.Name)
-		//if ! isBlank(value) {
-		//	db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
-		//}
+		if tag == "project_status" && util.IsBlank(value) {
+			db = db.Where(fmt.Sprintf("project_status != 1"))
+		}
 		if !util.IsBlank(value) && tag != "updated_at" && tag != "project_name" {
 			db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
 		}
 		if tag == "updated_at" {
-			fmt.Println(value.Interface())
 			db = db.Where(fmt.Sprintf("%s > ?", tag), value.Interface())
 		}
 		if tag == "project_name" && !util.IsBlank(value) {
 			db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
 		}
 	}
-	logrus.Printf("db:%V", db)
 	// 查询总数
 	var total int64
 	var fullProjects []*gorm_model.ProjectInfo
@@ -72,6 +72,100 @@ func GetFullProjectList(ctx context.Context, enterpriseID int64, pageSize, pageN
 	return fullProjects, total, nil
 }
 
+func GetProjectTaskList(ctx context.Context, projectID string, pageSize, pageNum int32, conditions *common_model.TaskConditions) ([]*gorm_model.ProjectTaskInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{})
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if !util.IsBlank(value) && tag != "platform_nickname" {
+			db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
+		} else if tag == "platform_nickname" {
+			continue
+		}
+	}
+	var taskInfos []gorm_model.YoungeeTaskInfo
+	db = db.Model(gorm_model.YoungeeTaskInfo{})
+	// 查询总数
+	var totalTask int64
+	if err := db.Count(&totalTask).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	// 查询该页数据
+	limit := pageSize
+	offset := pageSize * pageNum // assert pageNum start with 0
+	err := db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Find(&taskInfos).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	// 查询账号id
+
+	var accountIds []int
+	taskMap := make(map[int]gorm_model.YoungeeTaskInfo)
+	for _, taskInfo := range taskInfos {
+		accountIds = append(accountIds, taskInfo.AccountID)
+		taskMap[taskInfo.AccountID] = taskInfo
+	}
+	db1 := GetReadDB(ctx)
+	db1 = db1.Debug().Model(gorm_model.YoungeePlatformAccountInfo{})
+	// 根据Project条件过滤
+	conditionType2 := reflect.TypeOf(conditions).Elem()
+	conditionValue2 := reflect.ValueOf(conditions).Elem()
+	for i := 0; i < conditionType2.NumField(); i++ {
+		field := conditionType2.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue2.FieldByName(field.Name)
+		if !util.IsBlank(value) && tag == "platform_nickname" {
+			db1 = db1.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
+		}
+	}
+	var accountInfos []gorm_model.YoungeePlatformAccountInfo
+	db1 = db1.Model(gorm_model.YoungeePlatformAccountInfo{}).Where("account_id IN ?", accountIds).Find(&accountInfos)
+	// 查询总数
+	var totalAccount int64
+	if err := db1.Count(&totalAccount).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	accountMap := make(map[int]gorm_model.YoungeePlatformAccountInfo)
+	for _, accountInfo := range accountInfos {
+		accountMap[accountInfo.AccountID] = accountInfo
+	}
+	var taskAccounts []*gorm_model.TaskAccount
+	var projectTasks []*gorm_model.ProjectTaskInfo
+	for _, accountId := range accountIds {
+		taskAccount := new(gorm_model.TaskAccount)
+		_, ok := taskMap[accountId]
+		_, ok2 := accountMap[accountId]
+		if ok && ok2 {
+			taskAccount.Task = taskMap[accountId]
+			taskAccount.Account = accountMap[accountId]
+		}
+		taskAccounts = append(taskAccounts, taskAccount)
+	}
+	projectTasks = pack.TaskAccountToTaskInfo(taskAccounts)
+	// 删除只存在于一个表中的元素
+	for i := 0; i < len(projectTasks); i++ {
+		if projectTasks[i].TaskID == "" || projectTasks[i].PlatformNickname == "" {
+			projectTasks = append(projectTasks[:i], projectTasks[i+1:]...)
+		}
+	}
+	var total int64
+	if totalTask > totalAccount {
+		total = totalAccount
+	} else {
+		total = totalTask
+	}
+	return projectTasks, total, nil
+}
+
 func GetProjectDetail(ctx context.Context, projectID int64) (*gorm_model.ProjectInfo, error) {
 	db := GetReadDB(ctx)
 	var ProjectDetail *gorm_model.ProjectInfo
@@ -105,3 +199,15 @@ func GetRecruitStrategys(ctx context.Context, ProjectID int64) ([]gorm_model.Rec
 	}
 	return RecruitStrategys, nil
 }
+
+func ChangeTaskStatus(ctx context.Context, data []string, taskStatus string) error {
+	db := GetReadDB(ctx)
+	taskInfo := gorm_model.YoungeeTaskInfo{}
+	if err := db.Debug().Model(&taskInfo).Where("task_id IN ?", data).
+		Updates(gorm_model.YoungeeTaskInfo{TaskStatus: taskStatus}).Error; err != nil {
+
+		logrus.WithContext(ctx).Errorf("[ChangeTaskStatus] error query mysql total, err:%+v", err)
+		return err
+	}
+	return nil
+}

+ 1 - 2
go.mod

@@ -23,14 +23,13 @@ require (
 	github.com/swaggo/gin-swagger v1.4.1
 	github.com/swaggo/swag v1.8.1
 	github.com/ugorji/go v1.2.7 // indirect
-	github.com/urfave/cli/v2 v2.4.0 // indirect
 	golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 // indirect
 	golang.org/x/net v0.0.0-20220407224826-aac1ed45d8e3 // indirect
 	golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12 // indirect
 	golang.org/x/tools v0.1.10 // indirect
 	google.golang.org/protobuf v1.28.0 // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
-	gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df // indirect
+	gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
 	gopkg.in/yaml.v2 v2.4.0
 	gorm.io/driver/mysql v1.3.2
 	gorm.io/gorm v1.23.3

+ 0 - 12
go.sum

@@ -15,8 +15,6 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR
 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
 github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
-github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU=
-github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -26,7 +24,6 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cu
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
-github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/gin-contrib/gzip v0.0.3 h1:etUaeesHhEORpZMp18zoOhepboiWnFtXrBZxszWUn4k=
 github.com/gin-contrib/gzip v0.0.3/go.mod h1:YxxswVZIqOvcHEQpsSn+QF5guQtO1dCfy0shBPy4jFc=
@@ -156,9 +153,6 @@ github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE
 github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
 github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
-github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
 github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
 github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
@@ -186,8 +180,6 @@ github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLY
 github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
 github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
 github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
-github.com/urfave/cli/v2 v2.4.0 h1:m2pxjjDFgDxSPtO8WSdbndj17Wu2y8vOT86wE/tjr+I=
-github.com/urfave/cli/v2 v2.4.0/go.mod h1:NX9W0zmTvedE5oDoOMs2RTC8RvdK98NTYZE5LbaEYPg=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
 github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
@@ -215,8 +207,6 @@ golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qx
 golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20220401154927-543a649e0bdd h1:zYlwaUHTmxuf6H7hwO2dgwqozQmH7zf4x+/qql4oVWc=
-golang.org/x/net v0.0.0-20220401154927-543a649e0bdd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 golang.org/x/net v0.0.0-20220407224826-aac1ed45d8e3 h1:EN5+DfgmRMvRUrMGERW2gQl3Vc+Z7ZMnI/xdEpPSf0c=
 golang.org/x/net v0.0.0-20220407224826-aac1ed45d8e3/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -244,8 +234,6 @@ golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220330033206-e17cdc41300f h1:rlezHXNlxYWvBCzNses9Dlc7nGFaNMJeqLolcmQSSZY=
-golang.org/x/sys v0.0.0-20220330033206-e17cdc41300f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12 h1:QyVthZKMsyaQwBTJE04jdNN0Pp5Fn9Qga0mrgxyERQM=
 golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=

+ 60 - 0
handler/project_change_taskStatus.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/sirupsen/logrus"
+
+	"github.com/gin-gonic/gin"
+)
+
+func WrapProjectChangeTaskStatusHandler(ctx *gin.Context) {
+	handler := newProjectChangeTaskStatusHandler(ctx)
+	baseRun(handler)
+}
+
+func newProjectChangeTaskStatusHandler(ctx *gin.Context) *ProjectChangeTaskStatusHandler {
+	return &ProjectChangeTaskStatusHandler{
+		req:  http_model.NewProjectChangeTaskStatusRequst(),
+		resp: http_model.NewProjectChangeTaskStatusResponse(),
+		ctx:  ctx,
+	}
+}
+
+type ProjectChangeTaskStatusHandler struct {
+	req  *http_model.ProjectChangeTaskStatusRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (p *ProjectChangeTaskStatusHandler) getContext() *gin.Context {
+	return p.ctx
+}
+
+func (p *ProjectChangeTaskStatusHandler) getResponse() interface{} {
+	return p.resp
+}
+
+func (p *ProjectChangeTaskStatusHandler) getRequest() interface{} {
+	return p.req
+}
+
+func (p *ProjectChangeTaskStatusHandler) run() {
+	data := http_model.ProjectChangeTaskStatusRequest{}
+	data = *p.req
+	err := service.Project.ChangeTaskStatus(p.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ChangeTaskStatusHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(p.resp, consts.ErrorInternal, "")
+		logrus.Info("ChangeTaskStatus fail,req:%+v", p.req)
+		return
+	}
+	p.resp.Message = "任务状态更换成功"
+}
+
+func (p *ProjectChangeTaskStatusHandler) checkParam() error {
+	return nil
+}

+ 77 - 0
handler/project_taskList.go

@@ -0,0 +1,77 @@
+package handler
+
+import (
+	"errors"
+	"fmt"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/pack"
+	"youngee_b_api/service"
+	"youngee_b_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/issue9/conv"
+	"github.com/sirupsen/logrus"
+)
+
+func WrapProjectTaskListHandler(ctx *gin.Context) {
+	handler := newProjectTaskListHandler(ctx)
+	baseRun(handler)
+}
+
+func newProjectTaskListHandler(ctx *gin.Context) *ProjectTaskListHandler {
+	return &ProjectTaskListHandler{
+		req:  http_model.NewProjectTaskListRequest(),
+		resp: http_model.NewProjectTaskListResponse(),
+		ctx:  ctx,
+	}
+}
+
+type ProjectTaskListHandler struct {
+	req  *http_model.ProjectTaskListRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *ProjectTaskListHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *ProjectTaskListHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *ProjectTaskListHandler) getResponse() interface{} {
+	return h.resp
+}
+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)
+	if err != nil {
+		logrus.WithContext(h.ctx).Errorf("[ProjectTaskListHandler] error GetProjectTaskList, err:%+v", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	h.resp.Data = data
+}
+func (h *ProjectTaskListHandler) checkParam() error {
+	var errs []error
+	if h.req.PageNum < 0 || h.req.PageSize <= 0 {
+		errs = append(errs, errors.New("page param error"))
+	}
+	h.req.PageNum--
+	h.req.ProjectId = util.IsNull(h.req.ProjectId)
+	if _, err := conv.Int64(h.req.ProjectId); err != nil {
+		errs = append(errs, err)
+	}
+	h.req.StrategyId = util.IsNull(h.req.StrategyId)
+	if _, err := conv.Int64(h.req.StrategyId); err != nil {
+		errs = append(errs, err)
+	}
+	h.req.TaskStatus = util.IsNull(h.req.TaskStatus)
+	if _, err := conv.Int64(h.req.TaskStatus); err != nil {
+		errs = append(errs, err)
+	}
+	if len(errs) != 0 {
+		return fmt.Errorf("check param errs:%+v", errs)
+	}
+	return nil
+}

+ 9 - 0
model/common_model/task_conditions.go

@@ -0,0 +1,9 @@
+package common_model
+
+type TaskConditions struct {
+	ProjectId        int64  `condition:"project_id"`        // 项目ID
+	TaskStatus       int64  `condition:"task_status"`       // 任务状态
+	StrategyId       int64  `condition:"strategy_id"`       // 策略ID
+	TaskId           string `condition:"task_id"`           // 任务ID
+	PlatformNickname string `condition:"platform_nickname"` // 账号昵称
+}

+ 61 - 0
model/gorm_model/project_task_list.go

@@ -0,0 +1,61 @@
+package gorm_model
+
+import (
+	"time"
+)
+
+type YoungeePlatformAccountInfo struct {
+	AccountID          int       `gorm:"column:account_id;primary_key;AUTO_INCREMENT"`
+	TalentID           string    `gorm:"column:talent_id;NOT NULL"`             // 达人账号id(youngee_talent_info表id值)
+	PlatformID         int       `gorm:"column:platform_id;NOT NULL"`           // 平台id,与third_platform_info中的id相同
+	PlatformNickname   string    `gorm:"column:platform_nickname;NOT NULL"`     // 在平台上的昵称
+	HomePageUrl        string    `gorm:"column:home_page_url;NOT NULL"`         // 主页链接
+	FansCount          int64     `gorm:"column:fans_count;NOT NULL"`            // 粉丝数
+	HomePageCaptureUrl string    `gorm:"column:home_page_capture_url;NOT NULL"` // 主页截图链接
+	BindDate           time.Time `gorm:"column:bind_date;NOT NULL"`             // 绑定时间
+	Deleted            int       `gorm:"column:deleted;default:0"`              // 是否被解绑
+	UpdatedAt          time.Time `gorm:"column:updated_at"`                     // 更新时间
+	UpdatedPerson      int       `gorm:"column:updated_person"`                 // 更新人,0代表本人,1代表管理员
+	UpdatedAdminID     int       `gorm:"column:updated_admin_id"`               // 上一次更新的管理员id
+}
+type YoungeeTaskInfo struct {
+	TaskID                 string    `gorm:"column:task_id;primary_key;AUTO_INCREMENT"` // 任务id
+	ProjectID              int       `gorm:"column:project_id;NOT NULL"`                // 项目id
+	AccountID              int       `gorm:"column:account_id;NOT NULL"`                // 账号id
+	TalentPlatformInfoSnap string    `gorm:"column:talent_platform_info_snap;NOT NULL"` // 达人平台信息快照
+	TalentPersonalInfoSnap string    `gorm:"column:talent_personal_info_snap;NOT NULL"` // 达人个人信息快照
+	TalentPostAddrSnap     string    `gorm:"column:talent_post_addr_snap;NOT NULL"`     // 收货地址快照
+	StrategyID             int       `gorm:"column:strategy_id"`                        // 报名选择的招募策略id
+	TaskReward             int64     `gorm:"column:task_reward"`                        // 任务奖励金额
+	SettleAmount           int64     `gorm:"column:settle_amount;NOT NULL"`             // 待结算金额(任务奖励扣除违规扣款)
+	TaskStatus             string    `gorm:"column:task_status;default:1;NOT NULL"`     // 任务状态 1待选 2已选 3落选
+	CreateDate             time.Time `gorm:"column:create_date;NOT NULL"`               // 创建时间
+	SelectDate             time.Time `gorm:"column:select_date"`                        // 反选时间
+	CompleteStatus         int       `gorm:"column:complete_status;default:1;NOT NULL"` // 结束方式 1未结束 2正常结束 3反选失败 4被解约
+	CompleteDate           time.Time `gorm:"column:complete_date"`                      // 结束时间
+	TaskStage              int       `gorm:"column:task_stage;NOT NULL"`                // 任务阶段
+}
+
+type ProjectTaskInfo struct {
+	TaskID                 string    `json:"task_id"`                   // 任务id
+	PlatformNickname       string    `json:"platform_nickname"`         // 在平台上的昵称
+	FansCount              int64     `json:"fans_count"`                // 粉丝数
+	TalentPersonalInfoSnap string    `json:"talent_personal_info_snap"` // 达人个人信息快照
+	StrategyID             int       `json:"strategy_id"`               // 报名选择的招募策略id
+	TaskReward             int64     `json:"task_reward"`               // 任务奖励金额
+	HomePageUrl            string    `json:"home_page_url"`             // 主页链接
+	CreateDate             time.Time `json:"create_date"`               // 创建时间
+}
+
+type TaskAccount struct {
+	Task    YoungeeTaskInfo
+	Account YoungeePlatformAccountInfo
+}
+
+func (m *YoungeeTaskInfo) TableName() string {
+	return "youngee_task_info"
+}
+
+func (m *YoungeePlatformAccountInfo) TableName() string {
+	return "youngee_platform_account_info"
+}

+ 0 - 1
model/http_model/full_project_list.go

@@ -8,7 +8,6 @@ type FullProjectListRequest struct {
 	ProjectStatus      string `json:"project_status"`       // 项目状态
 	ProjectPlatform    string `json:"project_platform"`     // 项目平台
 	ProjectForm        string `json:"project_form"`         // 项目形式
-	//ProjectFeeForms    string `json:"project_fee_forms"`    // 稿费形式
 	ProjectContentType string `json:"project_content_type"` // 内容形式
 	ProjectUpdated     string `json:"project_updated"`      // 最后操作时间
 }

+ 20 - 0
model/http_model/project_change_taskStatus.go

@@ -0,0 +1,20 @@
+package http_model
+
+type ProjectChangeTaskStatusRequest struct {
+	TaskIds    []string `json:"taskIds"`
+	TaskStatus string   `json:"task_status"`
+}
+
+//
+//type TaskIds struct {
+//	TaskId string `json:"taskId"`
+//}
+
+func NewProjectChangeTaskStatusRequst() *ProjectChangeTaskStatusRequest {
+	return new(ProjectChangeTaskStatusRequest)
+}
+
+func NewProjectChangeTaskStatusResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 37 - 0
model/http_model/project_taskList.go

@@ -0,0 +1,37 @@
+package http_model
+
+type ProjectTaskListRequest struct {
+	PageSize         int32  `json:"page_size"`
+	PageNum          int32  `json:"page_num"`
+	ProjectId        string `json:"project_id"`        // 项目ID
+	TaskId           string `json:"task_id"`           // 任务ID
+	StrategyId       string `json:"strategy_id"`       // 策略ID
+	TaskStatus       string `json:"task_status"`       // 任务状态
+	PlatformNickname string `json:"platform_nickname"` // 账号昵称
+}
+
+type ProjectTaskPreview struct {
+	TaskId                 string `json:"task_id"`                   // 任务ID
+	PlatformNickname       string `json:"platform_nickname"`         // 账号昵称
+	FansCount              string `json:"fans_count"`                // 粉丝数
+	TalentPersonalInfoSnap string `json:"talent_personal_info_snap"` // 达人个人信息快照
+	StrategyId             string `json:"strategy_id"`               // 报名选择的招募策略id
+	TaskReward             string `json:"task_reward"`               // 任务奖励金额
+	HomePageCaptureUrl     string `json:"home_page_capture_url"`     // 主页链接
+	CreateDate             string `json:"create_date"`               // 创建时间
+}
+
+type ProjectTaskListData struct {
+	ProjectTaskPreview []*ProjectTaskPreview `json:"project_task_pre_view"`
+	Total              string                `json:"total"`
+}
+
+func NewProjectTaskListRequest() *ProjectTaskListRequest {
+	return new(ProjectTaskListRequest)
+}
+
+func NewProjectTaskListResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(ProjectTaskListData)
+	return resp
+}

+ 18 - 0
pack/project_taskList_conditions.go

@@ -0,0 +1,18 @@
+package pack
+
+import (
+	"youngee_b_api/model/common_model"
+	"youngee_b_api/model/http_model"
+
+	"github.com/issue9/conv"
+)
+
+func HttpProjectTaskRequestToCondition(req *http_model.ProjectTaskListRequest) *common_model.TaskConditions {
+	return &common_model.TaskConditions{
+		ProjectId:        conv.MustInt64(req.ProjectId),
+		TaskStatus:       conv.MustInt64(req.TaskStatus),
+		StrategyId:       conv.MustInt64(req.StrategyId),
+		TaskId:           conv.MustString(req.TaskId),
+		PlatformNickname: conv.MustString(req.PlatformNickname),
+	}
+}

+ 54 - 0
pack/project_task_list.go

@@ -0,0 +1,54 @@
+package pack
+
+import (
+	"youngee_b_api/model/gorm_model"
+	"youngee_b_api/model/http_model"
+
+	"github.com/issue9/conv"
+)
+
+func MGormProjectTaskToHttpProjectTaskPreview(gormProjectTaskInfos []*gorm_model.ProjectTaskInfo) []*http_model.ProjectTaskPreview {
+	var httpProjectPreviews []*http_model.ProjectTaskPreview
+	for _, gormProjectTaskInfo := range gormProjectTaskInfos {
+		httpProjectTaskPreview := GormFullProjectToHttpProjectTaskPreview(gormProjectTaskInfo)
+		httpProjectPreviews = append(httpProjectPreviews, httpProjectTaskPreview)
+	}
+	return httpProjectPreviews
+}
+
+func GormFullProjectToHttpProjectTaskPreview(projectTaskInfo *gorm_model.ProjectTaskInfo) *http_model.ProjectTaskPreview {
+	createDate := conv.MustString(projectTaskInfo.CreateDate)
+	createDate = createDate[0:19]
+	return &http_model.ProjectTaskPreview{
+		TaskId:                 conv.MustString(projectTaskInfo.TaskID),
+		PlatformNickname:       conv.MustString(projectTaskInfo.PlatformNickname),
+		FansCount:              conv.MustString(projectTaskInfo.FansCount),
+		TalentPersonalInfoSnap: conv.MustString(projectTaskInfo.TalentPersonalInfoSnap),
+		StrategyId:             conv.MustString(projectTaskInfo.StrategyID),
+		TaskReward:             conv.MustString(projectTaskInfo.TaskReward),
+		HomePageCaptureUrl:     conv.MustString(projectTaskInfo.HomePageUrl),
+		CreateDate:             createDate,
+	}
+}
+
+func TaskAccountToTaskInfo(taskAccounts []*gorm_model.TaskAccount) []*gorm_model.ProjectTaskInfo {
+	var projectTasks []*gorm_model.ProjectTaskInfo
+	for _, taskAccount := range taskAccounts {
+		projectTask := GetTaskInfoStruct(taskAccount)
+		projectTasks = append(projectTasks, projectTask)
+	}
+	return projectTasks
+}
+
+func GetTaskInfoStruct(taskAccount *gorm_model.TaskAccount) *gorm_model.ProjectTaskInfo {
+	return &gorm_model.ProjectTaskInfo{
+		TaskID:                 taskAccount.Task.TaskID,
+		TaskReward:             taskAccount.Task.TaskReward,
+		PlatformNickname:       taskAccount.Account.PlatformNickname,
+		CreateDate:             taskAccount.Task.CreateDate,
+		HomePageUrl:            taskAccount.Account.HomePageCaptureUrl,
+		TalentPersonalInfoSnap: taskAccount.Task.TalentPersonalInfoSnap,
+		FansCount:              taskAccount.Account.FansCount,
+		StrategyID:             taskAccount.Task.StrategyID,
+	}
+}

+ 6 - 3
route/init.go

@@ -1,13 +1,14 @@
 package route
 
 import (
+	"youngee_b_api/handler"
+	"youngee_b_api/middleware"
+	"youngee_b_api/model/http_model"
+
 	"github.com/gin-gonic/gin"
 	"github.com/sirupsen/logrus"
 	swaggerFiles "github.com/swaggo/files"
 	ginSwagger "github.com/swaggo/gin-swagger"
-	"youngee_b_api/handler"
-	"youngee_b_api/middleware"
-	"youngee_b_api/model/http_model"
 )
 
 func InitRoute(r *gin.Engine) {
@@ -49,6 +50,8 @@ func InitRoute(r *gin.Engine) {
 		m.POST("/project/update", handler.WrapUpdateProjectHandler)
 		m.POST("/product/create", handler.WrapCreateProductHandler)
 		m.POST("/product/list", handler.WrapFullProjectListHandler)
+		m.POST("/project/taskList", handler.WrapProjectTaskListHandler)
+		m.POST("/project/changeTaskStatus", handler.WrapProjectChangeTaskStatusHandler)
 	}
 
 }

+ 30 - 0
service/project.go

@@ -9,6 +9,8 @@ import (
 	"youngee_b_api/model/http_model"
 	"youngee_b_api/pack"
 
+	"github.com/gin-gonic/gin"
+
 	"github.com/issue9/conv"
 	"github.com/sirupsen/logrus"
 )
@@ -165,6 +167,18 @@ func (*project) GetFullProjectList(ctx context.Context, enterpriseID int64, page
 	return fullProjectListData, nil
 }
 
+func (*project) GetProjectTaskList(ctx context.Context, projectID string, pageSize, pageNum int32, conditions *common_model.TaskConditions) (*http_model.ProjectTaskListData, error) {
+	projectTasks, total, err := db.GetProjectTaskList(ctx, projectID, pageSize, pageNum, conditions)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call GetProjectTaskList error,err:%+v", err)
+		return nil, err
+	}
+	projectTaskListData := new(http_model.ProjectTaskListData)
+	projectTaskListData.ProjectTaskPreview = pack.MGormProjectTaskToHttpProjectTaskPreview(projectTasks)
+	projectTaskListData.Total = conv.MustString(total)
+	return projectTaskListData, nil
+}
+
 func (*project) GetPorjectDetail(ctx context.Context, projectID int64) (*http_model.ShowProjectData, error) {
 	project, err := db.GetProjectDetail(ctx, projectID)
 	if err != nil {
@@ -230,3 +244,19 @@ func (*project) GetPorjectDetail(ctx context.Context, projectID int64) (*http_mo
 	}
 	return &ProjectDetail, nil
 }
+
+func (*project) ChangeTaskStatus(ctx *gin.Context, data http_model.ProjectChangeTaskStatusRequest) interface{} {
+	//var taskIds []string
+	//for _, taskId := range data.TaskIds {
+	//	TaskIds := http_model.TaskIds{
+	//		TaskId: taskId.TaskId,
+	//	}
+	//	taskIds = append(taskIds, TaskIds.TaskId)
+	//}
+	err := db.ChangeTaskStatus(ctx, data.TaskIds, data.TaskStatus)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call ChangeTaskStatus error,err:%+v", err)
+		return err
+	}
+	return nil
+}