yuliang1112 преди 2 години
родител
ревизия
11b5696e4d
променени са 7 файла, в които са добавени 179 реда и са изтрити 88 реда
  1. 21 0
      db/auto_default.go
  2. 22 0
      db/auto_task.go
  3. 0 2
      handler/project_create.go
  4. 4 1
      model/gorm_model/project.go
  5. 1 1
      model/http_model/project_create.go
  6. 26 22
      model/http_model/project_show.go
  7. 105 62
      service/project.go

+ 21 - 0
db/auto_default.go

@@ -0,0 +1,21 @@
+package db
+
+import (
+	"context"
+	log "github.com/sirupsen/logrus"
+	"youngee_m_api/model/gorm_model"
+)
+
+func GetLastAutoDefaultID() (int, error) {
+	db := GetReadDB(context.Background())
+	// 查找最后一个
+	LastDefault := gorm_model.InfoAutoDefaultHandle{}
+	result := db.Last(&LastDefault)
+	err := result.Error
+	if err != nil {
+		log.Println("DB GetLastAutoDefaultID:", err)
+		return 0, err
+	}
+	//fmt.Printf("auto task %+v %+v", result, LastTask)
+	return LastDefault.AutoDefaultID, nil
+}

+ 22 - 0
db/auto_task.go

@@ -0,0 +1,22 @@
+package db
+
+import (
+	"context"
+	"youngee_m_api/model/gorm_model"
+
+	log "github.com/sirupsen/logrus"
+)
+
+func GetLastAutoTaskID() (int32, error) {
+	db := GetReadDB(context.Background())
+	// 查找最后一个
+	LastTask := gorm_model.InfoAutoTask{}
+	result := db.Last(&LastTask)
+	err := result.Error
+	if err != nil {
+		log.Println("DB GetLastAutoTaskID:", err)
+		return 0, err
+	}
+	//fmt.Printf("auto task %+v %+v", result, LastTask)
+	return LastTask.AutoTaskID, nil
+}

+ 0 - 2
handler/project_create.go

@@ -41,8 +41,6 @@ func (h *CreateProjectHandler) getResponse() interface{} {
 func (h *CreateProjectHandler) run() {
 	data := http_model.CreateProjectRequest{}
 	data = *h.req
-	//enterpriseID := db.GetEnterpriseIDByProductID(h.ctx, h.req.ProductID)
-	//fmt.Println("enterpriseID:", enterpriseID)
 	res, err := service.Project.Create(h.ctx, data, h.req.EnterpriseID)
 	if err != nil {
 		logrus.Errorf("[CreateProjectHandler] call Create err:%+v\n", err)

+ 4 - 1
model/gorm_model/project.go

@@ -10,7 +10,7 @@ type ProjectInfo struct {
 	ProjectName       string     `gorm:"column:project_name"`                          // 项目名称
 	ProjectStatus     int64      `gorm:"column:project_status"`                        // 项目状态,1-10分别代表创建中、待审核、审核通过、招募中、招募完毕、待支付、已支付、失效、执行中、已结案
 	ProjectType       int64      `gorm:"column:project_type"`                          // 项目类型,1代表全流程项目,2代表专项项目
-	ProjectPlatform   int64      `gorm:"column:project_platform"`                      // 项目平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎
+	ProjectPlatform   int64      `gorm:"column:project_platform"`                      // 项目平台,1-7分别代表红book、抖音、微博、快手、b站、大众点评、知乎
 	ProjectForm       int64      `gorm:"column:project_form"`                          // 项目形式,1-4分别代表实体商品寄拍、虚拟产品测评、线下探店打卡、素材微原创
 	TalentType        string     `gorm:"column:talent_type"`                           // 达人类型
 	RecruitDdl        *time.Time `gorm:"column:recruit_ddl"`                           // 招募截止时间
@@ -35,6 +35,9 @@ type ProjectInfo struct {
 	FinishAt          *time.Time `gorm:"column:finish_at"`                             // 结案时间
 	EstimatedCost     float64    `gorm:"column:estimated_cost"`                        // 预估成本
 	IsRead            int64      `gorm:"column:is_read"`                               // 是否已读
+	SettlementAmount  float64    `gorm:"column:settlement_amount"`                     // 结算金额
+	ProductSnap       string     `gorm:"column:product_snap"`                          // 商品信息快照
+	ProductPhotoSnap  string     `gorm:"column:product_photo_snap"`                    // 商品图片快照
 }
 
 func (m *ProjectInfo) TableName() string {

+ 1 - 1
model/http_model/project_create.go

@@ -29,7 +29,7 @@ type CreateProjectRequest struct {
 	RecruitStrategys []CreateRecruitStrategy `json:"recruit_strategys"` // 定价策略
 	ProjectPhotos    []CreateProjectPhoto    `json:"project_photos"`    // 项目图片
 	ProductID        int64                   `json:"product_id"`        // 关联商品id
-	EnterpriseID     int64                   `json:"enterprise_id"`     // 关联商品id
+	EnterpriseID     int64                   `json:"enterprise_id"`     // 企业id
 }
 
 type CreateProjectData struct {

+ 26 - 22
model/http_model/project_show.go

@@ -23,28 +23,32 @@ type ShowRecruitStrategy struct {
 }
 
 type ShowProjectData struct {
-	ProjectName      string                `json:"project_name"`      // 项目名称
-	ProjectStatus    string                `json:"project_status"`    // 项目状态,1-7分别代表创建中、待审核、招募中、待支付、失效、执行中、已结案
-	ProjectType      string                `json:"project_type"`      // 项目类型,1代表全流程项目,2代表专项项目
-	ProjectPlatform  string                `json:"project_platform"`  // 项目平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎
-	ProjectForm      string                `json:"project_form"`      // 项目形式,1-4分别代表实体商品寄拍、虚拟产品测评、线下探店打卡、素材微原创
-	TalentType       string                `json:"talent_type"`       // 达人类型
-	RecruitDdl       time.Time             `json:"recruit_ddl"`       // 招募截止时间
-	ContentType      string                `json:"content_type"`      // 内容形式,1代表图文,2代表视频
-	ProjectDetail    string                `json:"project_detail"`    // 项目详情
-	RecruitStrategys []ShowRecruitStrategy `json:"recruit_strategys"` // 定价策略
-	ProjectPhotos    []ShowProjectPhoto    `json:"project_photos"`    // 项目图片
-	ProductID        string                `json:"product_id"`        // 关联商品id
-	EnterpriseID     string                `json:"enterprise_id"`     // 企业id
-	Balance          string                `json:"balance"`           // 企业余额
-	ProjectID        string                `json:"project_id"`        // 项目id
-	FailReason       string                `json:"fail_reason"`       // 失效原因
-	Phone            string                `json:"phone"`             // 联系方式
-	CreateAt         time.Time             `json:"create_at"`         // 创建时间
-	UpdateAt         time.Time             `json:"update_at"`         // 更新时间
-	PassAt           time.Time             `json:"pass_at"`           // 审核通过时间
-	FinishAt         time.Time             `json:"finish_at"`         // 结案时间
-	PayAt            time.Time             `json:"pay_at"`            // 支付时间
+	ProjectName      string                `json:"project_name"`       // 项目名称
+	ProjectStatus    string                `json:"project_status"`     // 项目状态,1-7分别代表创建中、待审核、招募中、待支付、失效、执行中、已结案
+	ProjectType      string                `json:"project_type"`       // 项目类型,1代表全流程项目,2代表专项项目
+	ProjectPlatform  string                `json:"project_platform"`   // 项目平台,1-7分别代表红book、抖音、微博、快手、b站、大众点评、知乎
+	ProjectForm      string                `json:"project_form"`       // 项目形式,1-4分别代表实体商品寄拍、虚拟产品测评、线下探店打卡、素材微原创
+	TalentType       string                `json:"talent_type"`        // 达人类型
+	RecruitDdl       time.Time             `json:"recruit_ddl"`        // 招募截止时间
+	ContentType      string                `json:"content_type"`       // 内容形式,1代表图文,2代表视频
+	ProjectDetail    string                `json:"project_detail"`     // 项目详情
+	RecruitStrategys []ShowRecruitStrategy `json:"recruit_strategys"`  // 定价策略
+	ProjectPhotos    []ShowProjectPhoto    `json:"project_photos"`     // 项目图片
+	ProductID        string                `json:"product_id"`         // 关联商品id
+	ProductInfo      string                `json:"product_info"`       // 商品信息
+	ProductPhotoInfo string                `json:"product_photo_info"` // 商品图片
+	EstimatedCost    string                `json:"estimated_cost"`     // 预估成本
+	EnterpriseID     string                `json:"enterprise_id"`      // 企业id
+	Balance          string                `json:"balance"`            // 企业余额
+	ProjectID        string                `json:"project_id"`         // 项目id
+	FailReason       string                `json:"fail_reason"`        // 失效原因
+	Phone            string                `json:"phone"`              // 联系方式
+	CreateAt         time.Time             `json:"create_at"`          // 创建时间
+	UpdateAt         time.Time             `json:"update_at"`          // 更新时间
+	PassAt           time.Time             `json:"pass_at"`            // 审核通过时间
+	FinishAt         time.Time             `json:"finish_at"`          // 结案时间
+	PayAt            time.Time             `json:"pay_at"`             // 支付时间
+	AutoFailAt       string                `json:"auto_fail_at"`       // 支付截止时间
 }
 
 type ShowProjectRequest struct {

+ 105 - 62
service/project.go

@@ -2,6 +2,7 @@ package service
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"strconv"
 	"strings"
@@ -42,7 +43,6 @@ func (*project) GetProjectDetail(ctx context.Context, projectID int64) (*http_mo
 		return nil, err
 	}
 	enterprise, err := db.GetEnterpriseByEnterpriseID(ctx, project.EnterpriseID)
-	// fmt.Println("%+v", enterprise.UserID)
 	if err != nil {
 		logrus.WithContext(ctx).Errorf("[project service] call GetEnterpriseByEnterpriseID error,err:%+v", err)
 		return nil, err
@@ -52,32 +52,34 @@ func (*project) GetProjectDetail(ctx context.Context, projectID int64) (*http_mo
 		logrus.WithContext(ctx).Errorf("[project service] call GetUserByID error,err:%+v", err)
 		return nil, err
 	}
-	// fmt.Println("%+v", user.Phone)
-	//var RecruitStrategys []http_model.ShowRecruitStrategy
 	ProjectDetail := http_model.ShowProjectData{
-		ProjectID:       conv.MustString(project.ProjectID, ""),
-		ProjectName:     conv.MustString(project.ProjectName, ""),
-		ProjectStatus:   conv.MustString(project.ProjectStatus, ""),
-		ProjectType:     conv.MustString(project.ProjectType, ""),
-		ProjectPlatform: conv.MustString(project.ProjectPlatform, ""),
-		ProjectForm:     conv.MustString(project.ProjectForm, ""),
-		TalentType:      conv.MustString(project.TalentType, ""),
-		RecruitDdl:      util.GetTimePointer(project.RecruitDdl),
-		ContentType:     conv.MustString(project.ContentType, ""),
-		ProjectDetail:   conv.MustString(project.ProjectDetail, ""),
-		ProductID:       conv.MustString(project.ProductID, ""),
-		EnterpriseID:    conv.MustString(project.EnterpriseID, ""),
-		Balance:         conv.MustString(enterprise.Balance, ""),
-		FailReason:      conv.MustString(project.FailReason, ""),
-		CreateAt:        util.GetTimePointer(project.CreatedAt),
-		UpdateAt:        util.GetTimePointer(project.UpdatedAt),
-		Phone:           user.Phone,
-		FinishAt:        util.GetTimePointer(project.FinishAt),
-		PassAt:          util.GetTimePointer(project.PassAt),
-		PayAt:           util.GetTimePointer(project.PayAt),
+		ProjectID:        conv.MustString(project.ProjectID, ""),
+		ProjectName:      conv.MustString(project.ProjectName, ""),
+		ProjectStatus:    conv.MustString(project.ProjectStatus, ""),
+		ProjectType:      conv.MustString(project.ProjectType, ""),
+		ProjectPlatform:  conv.MustString(project.ProjectPlatform, ""),
+		ProjectForm:      conv.MustString(project.ProjectForm, ""),
+		TalentType:       conv.MustString(project.TalentType, ""),
+		RecruitDdl:       util.GetTimePointer(project.RecruitDdl),
+		ContentType:      conv.MustString(project.ContentType, ""),
+		ProjectDetail:    conv.MustString(project.ProjectDetail, ""),
+		ProductID:        conv.MustString(project.ProductID, ""),
+		EnterpriseID:     conv.MustString(project.EnterpriseID, ""),
+		Balance:          conv.MustString(enterprise.Balance, ""),
+		EstimatedCost:    conv.MustString(project.EstimatedCost, ""),
+		FailReason:       conv.MustString(project.FailReason, ""),
+		CreateAt:         util.GetTimePointer(project.CreatedAt),
+		UpdateAt:         util.GetTimePointer(project.UpdatedAt),
+		Phone:            user.Phone,
+		FinishAt:         util.GetTimePointer(project.FinishAt),
+		PassAt:           util.GetTimePointer(project.PassAt),
+		PayAt:            util.GetTimePointer(project.PayAt),
+		ProductInfo:      conv.MustString(project.ProductSnap, ""),
+		ProductPhotoInfo: conv.MustString(project.ProductPhotoSnap, ""),
+		AutoFailAt:       conv.MustString(project.AutoFailAt, ""),
 	}
 	Strategys, err := db.GetRecruitStrategys(ctx, projectID)
-	fmt.Println("招募策略:", Strategys)
+	//fmt.Println("招募策略:", Strategys)
 	if err != nil {
 		logrus.WithContext(ctx).Error()
 		return nil, err
@@ -155,7 +157,18 @@ func (*project) Create(ctx context.Context, newProject http_model.CreateProjectR
 	if err != nil {
 		return nil, err
 	}
+	productPhotos, err := db.GetProductPhotoByProductID(ctx, newProject.ProductID)
+	productInfoToJson, _ := json.Marshal(product)
+	productPhotosToJson, _ := json.Marshal(productPhotos)
 	// 按照品牌名-商品名对项目进行命名
+	AutoTaskID, err := db.GetLastAutoTaskID()
+	if err != nil {
+		return nil, err
+	}
+	AutoDefaultID, err := db.GetLastAutoDefaultID()
+	if err != nil {
+		return nil, err
+	}
 	projectName := product.BrandName + "-" + product.ProductName
 	//feeForm := fmt.Sprintf("[")
 	feeFrom := []string{}
@@ -176,21 +189,47 @@ func (*project) Create(ctx context.Context, newProject http_model.CreateProjectR
 		}
 	}
 	feeFroms := strings.Join(feeFrom, ",")
-	projectInfo := gorm_model.ProjectInfo{
-		ProjectName:     projectName,
-		ProjectStatus:   1,
-		ProjectType:     newProject.ProjectType,
-		TalentType:      newProject.TalentType,
-		ProjectPlatform: newProject.ProjectPlatform,
-		ProjectForm:     newProject.ProjectForm,
-		RecruitDdl:      &RecruitDdl,
-		ProjectDetail:   newProject.ProjectDetail,
-		ContentType:     newProject.ContentType,
-		EnterpriseID:    enterpriseID,
-		ProductID:       newProject.ProductID,
-		FeeForm:         feeFroms,
-		EstimatedCost:   ECost,
-		IsRead:          0,
+	projectInfo := gorm_model.ProjectInfo{}
+	if newProject.ProjectType == int64(1) {
+		projectInfo = gorm_model.ProjectInfo{
+			ProjectName:      projectName,
+			ProjectStatus:    1,
+			ProjectType:      newProject.ProjectType,
+			TalentType:       newProject.TalentType,
+			ProjectPlatform:  newProject.ProjectPlatform,
+			ProjectForm:      newProject.ProjectForm,
+			RecruitDdl:       &RecruitDdl,
+			ProjectDetail:    newProject.ProjectDetail,
+			ContentType:      newProject.ContentType,
+			EnterpriseID:     enterpriseID,
+			ProductID:        newProject.ProductID,
+			FeeForm:          feeFroms,
+			AutoTaskID:       conv.MustInt64(AutoTaskID, 0),
+			AutoDefaultID:    conv.MustInt64(AutoDefaultID, 0),
+			EstimatedCost:    ECost,
+			IsRead:           0,
+			ProductSnap:      string(productInfoToJson),
+			ProductPhotoSnap: string(productPhotosToJson),
+		}
+	} else {
+		projectInfo = gorm_model.ProjectInfo{
+			ProjectName:      projectName,
+			ProjectStatus:    1,
+			ProjectType:      newProject.ProjectType,
+			TalentType:       "[]",
+			ProjectPlatform:  newProject.ProjectPlatform,
+			ProjectForm:      newProject.ProjectForm,
+			ProjectDetail:    newProject.ProjectDetail,
+			ContentType:      newProject.ContentType,
+			EnterpriseID:     enterpriseID,
+			ProductID:        newProject.ProductID,
+			FeeForm:          feeFroms,
+			AutoTaskID:       conv.MustInt64(AutoTaskID, 0),
+			AutoDefaultID:    conv.MustInt64(AutoDefaultID, 0),
+			EstimatedCost:    ECost,
+			ProductSnap:      string(productInfoToJson),
+			ProductPhotoSnap: string(productPhotosToJson),
+		}
 	}
 	// db create ProjectInfo
 	projectID, err := db.CreateProject(ctx, projectInfo)
@@ -215,36 +254,40 @@ func (*project) Create(ctx context.Context, newProject http_model.CreateProjectR
 		}
 	}
 	// build
-	recruitStrategys := []gorm_model.RecruitStrategy{}
-	for _, strategy := range newProject.RecruitStrategys { // 查询对应定价策略
-		pricingStrategy, err := db.GetPricingStrategy(ctx, strategy.FollowersLow, strategy.FollowersUp, strategy.FeeForm, newProject.ProjectPlatform)
+	if newProject.ProjectType == int64(1) {
+		recruitStrategys := []gorm_model.RecruitStrategy{}
+		for _, strategy := range newProject.RecruitStrategys {
+			// 查询对应定价策略
+			pricingStrategy, err := db.GetPricingStrategy(ctx, strategy.FollowersLow, strategy.FollowersUp, strategy.FeeForm, newProject.ProjectPlatform)
+			if err != nil {
+				return nil, err
+			}
+			// 根据定价策略计算达人所见报价
+			if strategy.FeeForm == 2 {
+				strategy.TOffer = strategy.Offer * (1 - conv.MustFloat64(pricingStrategy.ServiceRate, 0)/1000)
+			}
+			recruitStrategy := gorm_model.RecruitStrategy{
+				FeeForm:       strategy.FeeForm,
+				StrategyID:    strategy.StrategyID,
+				FollowersLow:  strategy.FollowersLow,
+				FollowersUp:   strategy.FollowersUp,
+				RecruitNumber: strategy.RecruitNumber,
+				ServiceCharge: strategy.ServiceCharge,
+				Offer:         strategy.Offer,
+				TOffer:        strategy.TOffer,
+				ProjectID:     *projectID,
+			}
+			recruitStrategys = append(recruitStrategys, recruitStrategy)
+		}
+		err = db.CreateRecruitStrategy(ctx, recruitStrategys)
 		if err != nil {
 			return nil, err
 		}
-		// 根据定价策略计算达人所见报价
-		if strategy.FeeForm == 2 {
-			strategy.TOffer = strategy.Offer * (1 - conv.MustFloat64(pricingStrategy.ServiceRate, 0)/1000)
-		}
-		recruitStrategy := gorm_model.RecruitStrategy{
-			FeeForm:       strategy.FeeForm,
-			StrategyID:    strategy.StrategyID,
-			FollowersLow:  strategy.FollowersLow,
-			FollowersUp:   strategy.FollowersUp,
-			RecruitNumber: strategy.RecruitNumber,
-			Offer:         strategy.Offer,
-			TOffer:        strategy.TOffer,
-			ProjectID:     *projectID,
-		}
-		recruitStrategys = append(recruitStrategys, recruitStrategy)
-	}
-	err = db.CreateRecruitStrategy(ctx, recruitStrategys)
-	if err != nil {
-		return nil, err
 	}
 	res := &http_model.CreateProjectData{
 		ProjectID: *projectID,
 	}
-	fmt.Printf("%+v", res)
+	//fmt.Printf("%+v", res)
 	return res, nil
 }