spring пре 3 година
родитељ
комит
4bf5b1ff62

+ 2 - 0
consts/error_code.go

@@ -5,6 +5,8 @@ import "github.com/go-redis/redis/v8"
 var RedisNil = redis.Nil
 var errorCodeToastMap = map[int32]string{}
 
+const DefaultToast = ""
+
 const ErrorSuccess int32 = 0
 const ErrorNotLogin int32 = 4001
 const ErrorParamCheck int32 = 5001

+ 65 - 0
consts/project.go

@@ -0,0 +1,65 @@
+package consts
+
+var projectStatusMap = map[int64]string{
+	1: "",
+}
+
+func GetProjectStatus(status int64) string {
+	toast, contain := projectStatusMap[status]
+	if contain {
+		return toast
+	}
+	return "未知"
+}
+
+var ProjectPlatformMap = map[int64]string{
+	1: "",
+}
+
+func GetProjectPlatform(status int64) string {
+	toast, contain := ProjectPlatformMap[status]
+	if contain {
+		return toast
+	}
+	return "未知"
+}
+
+var ProjectFormMap = map[int64]string{
+	1: "",
+}
+
+func GetProjectForm(status int64) string {
+	toast, contain := ProjectFormMap[status]
+	if contain {
+		return toast
+	}
+	return "未知"
+}
+
+var ProjectFeeFormMap = map[int64]string{
+	1: "",
+}
+
+func GetProjectFeeForms(statuses ...int64) []string {
+	var toasts []string
+	for _, status := range statuses {
+		toast, contain := ProjectFeeFormMap[status]
+		if !contain {
+			toast = "未知"
+		}
+		toasts = append(toasts, toast)
+	}
+	return toasts
+}
+
+var ProjectContentTypeMap = map[int64]string{
+	1: "",
+}
+
+func GetProjectContentType(status int64) string {
+	toast, contain := ProjectContentTypeMap[status]
+	if contain {
+		return toast
+	}
+	return "未知"
+}

+ 3 - 0
db/init.go

@@ -24,3 +24,6 @@ func Init(config *system_model.Mysql) {
 func GetReadDB(ctx context.Context) *gorm.DB {
 	return client.WithContext(ctx)
 }
+func GetWriteDB(ctx context.Context) *gorm.DB {
+	return client.WithContext(ctx)
+}

+ 36 - 1
db/project.go

@@ -2,14 +2,49 @@ package db
 
 import (
 	"context"
+	"fmt"
+	"github.com/sirupsen/logrus"
+	"reflect"
+	"youngee_b_api/model/common_model"
 	"youngee_b_api/model/gorm_model"
 )
 
 func CreateProject(ctx context.Context, projectInfo gorm_model.ProjectInfo) (*int64, error) {
-	db := GetReadDB(ctx)
+	db := GetWriteDB(ctx)
 	err := db.Create(&projectInfo).Error
 	if err != nil {
 		return nil, err
 	}
 	return &projectInfo.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)
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(condition)
+	conditionValue := reflect.ValueOf(condition)
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		db = db.Where(fmt.Sprintf("%s = ?", tag), value)
+	}
+	// 查询总数
+	var total int64
+	var fullProjects []*gorm_model.ProjectInfo
+	if err := db.Count(&total).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetFullProjectList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	// 查询该页数据
+	limit := pageNum
+	offset := pageSize * pageNum // assert pageNum start with 0
+	err := db.Order("updated_at desc").Limit(int(limit)).Offset(int(offset)).Find(&fullProjects).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetFullProjectList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	return fullProjects, total, nil
+}

+ 2 - 0
go.mod

@@ -12,6 +12,8 @@ require (
 	github.com/go-openapi/swag v0.21.1 // indirect
 	github.com/go-playground/validator/v10 v10.10.1 // indirect
 	github.com/go-redis/redis/v8 v8.11.5
+	github.com/golang-collections/lib.go v0.0.0-20141117141324-c7bc093f17da // indirect
+	github.com/issue9/conv v1.2.2 // indirect
 	github.com/jinzhu/now v1.1.5 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect

+ 5 - 0
go.sum

@@ -59,6 +59,8 @@ github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq
 github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
 github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
+github.com/golang-collections/lib.go v0.0.0-20141117141324-c7bc093f17da h1:gxDUcLQNN/n69fLYkOnYqW6rsFV8y9gIPfW3YczN47k=
+github.com/golang-collections/lib.go v0.0.0-20141117141324-c7bc093f17da/go.mod h1:lhns5PAQCMYxDxsmukk33l29WZ33ILfd8v0I0yaqRK8=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -84,6 +86,9 @@ github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/issue9/assert/v2 v2.0.0/go.mod h1:rKr1eVGzXUhAo2af1thiKAhIA8uiSK9Wyn7mcZ4BzAg=
+github.com/issue9/conv v1.2.2 h1:DlvooVwcCgHxGxgVNSt4LFGxIVzWbMV8E2dmQlrGHNA=
+github.com/issue9/conv v1.2.2/go.mod h1:uDqE/xgXbZ5UjC2J5+HLIoguE0qOKGzv7EzLzkvoRPE=
 github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
 github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
 github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=

+ 82 - 0
handler/project_list.go

@@ -0,0 +1,82 @@
+package handler
+
+import (
+	"errors"
+	"fmt"
+	"github.com/issue9/conv"
+	"youngee_b_api/consts"
+	"youngee_b_api/middleware"
+	"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/sirupsen/logrus"
+)
+
+func WrapFullProjectListHandler(ctx *gin.Context) {
+	handler := newFullProjectListHandler(ctx)
+	baseRun(handler)
+}
+
+func newFullProjectListHandler(ctx *gin.Context) *FullProjectListHandler {
+	return &FullProjectListHandler{
+		req:  http_model.NewFullProjectListRequest(),
+		resp: http_model.NewFullProjectListResponse(),
+		ctx:  ctx,
+	}
+}
+
+type FullProjectListHandler struct {
+	req  *http_model.FullProjectListRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *FullProjectListHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *FullProjectListHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *FullProjectListHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h *FullProjectListHandler) run() {
+	enterpriseID := middleware.GetSessionAuth(h.ctx).EnterpriseID
+	condition := pack.HttpFullProjectRequestToCondition(h.req)
+	data, err := service.Project.GetFullProjectList(h.ctx, enterpriseID, h.req.PageSize, h.req.PageNum, condition)
+	if err != nil {
+		logrus.WithContext(h.ctx).Errorf("[FullProjectListHandler] error GetFullProjectList, err:%+v", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	h.resp.Data = data
+}
+func (h *FullProjectListHandler) checkParam() error {
+	var errs []error
+	if h.req.PageNum <= 0 || h.req.PageSize <= 0 {
+		errs = append(errs, errors.New("page param error"))
+	}
+	h.req.PageNum++
+	if _, err := conv.Int64(h.req.ProjectForm); err != nil {
+		errs = append(errs, err)
+	}
+	if _, err := conv.Int64(h.req.ProjectStatus); err != nil {
+		errs = append(errs, err)
+	}
+	if _, err := conv.Int64(h.req.ProjectUpdated); err != nil {
+		errs = append(errs, err)
+	}
+	if _, err := conv.Int64(h.req.ProjectContentType); err != nil {
+		errs = append(errs, err)
+	}
+	if _, err := conv.Int64(h.req.ProjectPlatform); 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/project_condition.go

@@ -0,0 +1,9 @@
+package common_model
+
+type ProjectCondition struct {
+	ProjectStatus      int64  `condition:"project_status"`   // 项目状态
+	ProjectPlatform    int64  `condition:"project_platform"` // 项目平台
+	ProjectForm        int64  `condition:"project_form"`     // 项目形式
+	ProjectContentType int64  `condition:"content_type"`     // 内容形式
+	ProjectUpdated     string `condition:"updated_at"`       // 最后操作时间
+}

+ 35 - 0
model/http_model/full_project_list.go

@@ -0,0 +1,35 @@
+package http_model
+
+type FullProjectListRequest struct {
+	PageSize           int32  `json:"page_size"`
+	PageNum            int32  `json:"page_num"`
+	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"`      // 最后操作时间
+}
+type FullProjectPreview struct {
+	ProjectId          string   `json:"project_id"`           // 项目ID
+	ProjectName        string   `json:"project_name"`         // 项目名
+	ProjectStatus      string   `json:"project_status"`       // 项目状态
+	ProjectPlatform    string   `json:"project_platform"`     // 项目平台
+	ProjectForm        string   `json:"project_form"`         // 项目形式
+	ProjectFeeForms    []string `json:"project_fee_forms"`    // 稿费形式
+	ProjectContentType string   `json:"project_content_type"` // 内容形式
+	ProjectUpdated     string   `json:"project_updated"`      // 最后操作时间
+}
+type FullProjectListData struct {
+	FullProjectPreview []*FullProjectPreview `json:"full_project_pre_view"`
+	Total              string                `json:"total"`
+}
+
+func NewFullProjectListRequest() *FullProjectListRequest {
+	return new(FullProjectListRequest)
+}
+func NewFullProjectListResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(FullProjectListData)
+	return resp
+}

+ 31 - 0
pack/full_project.go

@@ -0,0 +1,31 @@
+package pack
+
+import (
+	"github.com/issue9/conv"
+	"youngee_b_api/consts"
+	"youngee_b_api/model/gorm_model"
+	"youngee_b_api/model/http_model"
+)
+
+func MGormFullProjectToHttpFullProjectPreview(gormProjectInfos []*gorm_model.ProjectInfo) []*http_model.FullProjectPreview {
+	var httpProjectPreviews []*http_model.FullProjectPreview
+	for _, gormProjectInfo := range gormProjectInfos {
+		httpProjectPreview := GormFullProjectToHttpFullProjectPreview(gormProjectInfo)
+		httpProjectPreviews = append(httpProjectPreviews, httpProjectPreview)
+	}
+	return httpProjectPreviews
+}
+func GormFullProjectToHttpFullProjectPreview(gormProjectInfo *gorm_model.ProjectInfo) *http_model.FullProjectPreview {
+	var feeForms []int64
+
+	return &http_model.FullProjectPreview{
+		ProjectId:          conv.MustString(gormProjectInfo.ProjectID),
+		ProjectName:        gormProjectInfo.ProjectName,
+		ProjectStatus:      consts.GetProjectStatus(gormProjectInfo.ProjectStatus),
+		ProjectPlatform:    consts.GetProjectPlatform(gormProjectInfo.ProjectPlatform),
+		ProjectForm:        consts.GetProjectForm(gormProjectInfo.ProjectForm),
+		ProjectFeeForms:    consts.GetProjectFeeForms(feeForms...),
+		ProjectContentType: consts.GetProjectContentType(gormProjectInfo.ProjectType),
+		ProjectUpdated:     conv.MustString(gormProjectInfo.UpdatedAt.Unix()),
+	}
+}

+ 19 - 0
pack/full_project_condition.go

@@ -0,0 +1,19 @@
+package pack
+
+import (
+	"github.com/issue9/conv"
+	"time"
+	"youngee_b_api/model/common_model"
+	"youngee_b_api/model/http_model"
+)
+
+func HttpFullProjectRequestToCondition(req *http_model.FullProjectListRequest) *common_model.ProjectCondition {
+	projectUpdated := time.UnixMilli(conv.MustInt64(req.ProjectUpdated))
+	return &common_model.ProjectCondition{
+		ProjectStatus:      conv.MustInt64(req.ProjectStatus),
+		ProjectPlatform:    conv.MustInt64(req.ProjectPlatform),
+		ProjectForm:        conv.MustInt64(req.ProjectForm),
+		ProjectContentType: conv.MustInt64(req.ProjectContentType),
+		ProjectUpdated:     projectUpdated.String(),
+	}
+}

+ 17 - 0
service/project.go

@@ -2,10 +2,14 @@ package service
 
 import (
 	"context"
+	"github.com/issue9/conv"
+	"github.com/sirupsen/logrus"
 	"time"
 	"youngee_b_api/db"
+	"youngee_b_api/model/common_model"
 	"youngee_b_api/model/gorm_model"
 	"youngee_b_api/model/http_model"
+	"youngee_b_api/pack"
 )
 
 var Project *project
@@ -80,3 +84,16 @@ func (*project) Create(ctx context.Context, newProject http_model.CreateProjectR
 	}
 	return res, nil
 }
+
+func (*project) GetFullProjectList(ctx context.Context, enterpriseID int64, pageSize, pageNum int32, condition *common_model.ProjectCondition) (*http_model.FullProjectListData, error) {
+
+	fullProjects, total, err := db.GetFullProjectList(ctx, enterpriseID, pageSize, pageNum, condition)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[project service] call GetFullProjectList error,err:%+v", err)
+		return nil, err
+	}
+	fullProjectListData := new(http_model.FullProjectListData)
+	fullProjectListData.FullProjectPreview = pack.MGormFullProjectToHttpFullProjectPreview(fullProjects)
+	fullProjectListData.Total = conv.MustString(total)
+	return fullProjectListData, nil
+}

+ 1 - 1
util/resp.go

@@ -18,7 +18,7 @@ func PackErrorResp(c *gin.Context, status int32) {
 }
 func HandlerPackErrorResp(resp *http_model.CommonResponse, status int32, message string) {
 	resp.Status = status
-	if message != "" {
+	if message != consts.DefaultToast {
 		resp.Message = message
 	} else {
 		resp.Message = consts.GetErrorToast(status)