Ohio-HYF пре 2 година
родитељ
комит
9530d524f5
4 измењених фајлова са 45 додато и 15 уклоњено
  1. 1 0
      model/gorm_model/project.go
  2. 11 10
      model/http_model/project_show.go
  3. 1 0
      model/http_model/project_update.go
  4. 32 5
      service/project.go

+ 1 - 0
model/gorm_model/project.go

@@ -33,6 +33,7 @@ type ProjectInfo struct {
 	FailReason        int64       `gorm:"column:fail_reason"`                           // 失效原因,1、2分别表示逾期未支付、项目存在风险
 	PassAt            *time.Time `gorm:"column:pass_at"`                               // 审核通过时间
 	FinishAt          *time.Time `gorm:"column:finish_at"`                             // 结案时间
+	EstimatedCost     float64    `gorm:"column:estimated_cost"`
 }
 
 func (m *ProjectInfo) TableName() string {

+ 11 - 10
model/http_model/project_show.go

@@ -35,16 +35,17 @@ type ShowProjectData struct {
 	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"`            // 支付时间
+	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"`        // 支付时间
 }
 
 type ShowProjectRequest struct {

+ 1 - 0
model/http_model/project_update.go

@@ -20,6 +20,7 @@ type UpdateRecruitStrategy struct {
 
 type UpdateProjectRequest struct {
 	ProjectForm      string                  `json:"project_form"`      // 项目形式,1-4分别代表实体商品寄拍、虚拟产品测评、线下探店打卡、素材微原创
+	ProjectType      int64                   `json:"project_type"`      // 项目类型,1代表全流程项目,2代表专项项目
 	TalentType       string                  `json:"talent_type"`       // 达人类型
 	RecruitDdl       time.Time               `json:"recruit_ddl"`       // 招募截止时间
 	ContentType      string                  `json:"content_type"`      // 内容形式,1代表图文,2代表视频

+ 32 - 5
service/project.go

@@ -43,9 +43,20 @@ func (*project) Create(ctx context.Context, newProject http_model.CreateProjectR
 	//feeForm := fmt.Sprintf("[")
 	feeFrom := []string{}
 	for _, strategy := range newProject.RecruitStrategys {
-		//if strategy.StrategyID
 		feeFrom = append(feeFrom, strconv.FormatInt(strategy.FeeForm, 10))
-		//feeForm += string(strategy.StrategyID)
+	}
+	var ECost float64 = 0
+	if newProject.ProjectType == int64(1) {
+		for _, strategy := range newProject.RecruitStrategys {
+			// 计算预估成本
+			var tmpCost float64 = 0
+			if strategy.FeeForm == 1 {
+				tmpCost = strategy.ServiceCharge * float64(strategy.RecruitNumber)
+			} else if strategy.FeeForm == 2 {
+				tmpCost = strategy.Offer * float64(strategy.RecruitNumber)
+			}
+			ECost += tmpCost
+		}
 	}
 	feeFroms := strings.Join(feeFrom, ",")
 	fmt.Printf("创建项目new %+v", newProject)
@@ -66,6 +77,7 @@ func (*project) Create(ctx context.Context, newProject http_model.CreateProjectR
 			FeeForm:         feeFroms,
 			AutoTaskID:      conv.MustInt64(AutoTaskID),
 			AutoDefaultID:   conv.MustInt64(AutoDefaultID),
+			EstimatedCost:   ECost,
 		}
 	} else {
 		projectInfo = gorm_model.ProjectInfo{
@@ -82,6 +94,7 @@ func (*project) Create(ctx context.Context, newProject http_model.CreateProjectR
 			FeeForm:         feeFroms,
 			AutoTaskID:      conv.MustInt64(AutoTaskID),
 			AutoDefaultID:   conv.MustInt64(AutoDefaultID),
+			EstimatedCost:   ECost,
 		}
 	}
 	// db create ProjectInfo
@@ -109,12 +122,12 @@ func (*project) Create(ctx context.Context, newProject http_model.CreateProjectR
 	// build
 	if newProject.ProjectType == int64(1) {
 		recruitStrategys := []gorm_model.RecruitStrategy{}
-		for _, strategy := range newProject.RecruitStrategys { // 查询对应定价策略
+		for _, strategy := range newProject.RecruitStrategys {
+			// 查询对应定价策略
 			pricingStrategy, err := db.GetPricingStrategy(ctx, strategy.FollowersLow, strategy.FollowersUp, strategy.FeeForm, newProject.ProjectPlatform)
 			if err != nil {
 				return nil, err
 			}
-			// fmt.Printf(" %+v 对应定价策略 %+v", strategy, pricingStrategy)
 			// 根据定价策略计算达人所见报价
 			if strategy.FeeForm == 2 {
 				strategy.TOffer = strategy.Offer * (1 - conv.MustFloat64(pricingStrategy.ServiceRate)/1000)
@@ -155,6 +168,19 @@ func (*project) Update(ctx context.Context, newProject http_model.UpdateProjectR
 		feeFrom = append(feeFrom, strconv.FormatInt(strategy.FeeForm, 10))
 		//feeForm += string(strategy.StrategyID)
 	}
+	var ECost float64 = 0
+	if newProject.ProjectType == int64(1) {
+		for _, strategy := range newProject.RecruitStrategys {
+			// 计算预估成本
+			var tmpCost float64 = 0
+			if strategy.FeeForm == 1 {
+				tmpCost = strategy.ServiceCharge * float64(strategy.RecruitNumber)
+			} else if strategy.FeeForm == 2 {
+				tmpCost = strategy.Offer * float64(strategy.RecruitNumber)
+			}
+			ECost += tmpCost
+		}
+	}
 	feeFroms := strings.Join(feeFrom, ",")
 	project := gorm_model.ProjectInfo{
 		ProjectID:     conv.MustInt64(newProject.ProjectID),
@@ -166,6 +192,7 @@ func (*project) Update(ctx context.Context, newProject http_model.UpdateProjectR
 		EnterpriseID:  enterpriseID,
 		ProjectStatus: conv.MustInt64(newProject.ProjectStatus),
 		FeeForm:       feeFroms,
+		EstimatedCost: ECost,
 	}
 	projectID, err := db.UpdateProject(ctx, project)
 	if err != nil {
@@ -299,7 +326,6 @@ func (*project) GetProjectTaskList(ctx context.Context, projectID string, pageSi
 }
 
 func (*project) GetPorjectDetail(ctx context.Context, projectID int64) (*http_model.ShowProjectData, error) {
-
 	project, err := db.GetProjectDetail(ctx, projectID)
 	if err != nil {
 		logrus.WithContext(ctx).Errorf("[project service] call GetPorjectDetail error,err:%+v", err)
@@ -332,6 +358,7 @@ func (*project) GetPorjectDetail(ctx context.Context, projectID int64) (*http_mo
 		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.GetTimePoionter(project.CreatedAt),
 		UpdateAt:        util.GetTimePoionter(project.UpdatedAt),