Browse Source

选品接口2

Ohio-HYF 1 year ago
parent
commit
9bb21bf3ac
5 changed files with 191 additions and 40 deletions
  1. 13 5
      db/talent_income.go
  2. 52 1
      db/task.go
  3. 0 1
      route/init.go
  4. 67 13
      service/project_pay.go
  5. 59 20
      service/sectask_service/sectask.go

+ 13 - 5
db/talent_income.go

@@ -2,14 +2,22 @@ package db
 
 import (
 	"context"
+	"gorm.io/gorm"
 	"youngee_b_api/model/gorm_model"
 )
 
-func CreateIncome(ctx context.Context, income gorm_model.YounggeeTalentIncome) error {
-	db := GetWriteDB(ctx)
-	err := db.Create(&income).Error
-	if err != nil {
-		return err
+func CreateIncome(ctx context.Context, income gorm_model.YounggeeTalentIncome, tx *gorm.DB) error {
+	if tx != nil {
+		err := tx.Create(&income).Error
+		if err != nil {
+			return err
+		}
+	} else {
+		db := GetWriteDB(ctx)
+		err := db.Create(&income).Error
+		if err != nil {
+			return err
+		}
 	}
 	return nil
 }

+ 52 - 1
db/task.go

@@ -2,6 +2,7 @@ package db
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"reflect"
 	"strconv"
@@ -161,7 +162,6 @@ func SetTaskFinish(ctx context.Context, TaskIDs []string) error {
 		return err
 	}
 
-	// 2. 修改招募策略表,更新粉丝量、播放量、点赞数、收藏数、评论数、总支付、结案数量
 	for _, v := range TaskIDs {
 		// 查询task_info
 		db = GetReadDB(ctx)
@@ -171,6 +171,13 @@ func SetTaskFinish(ctx context.Context, TaskIDs []string) error {
 			logrus.WithContext(ctx).Errorf("[Task db] Find YoungeeTaskInfo error,err:%+v", err)
 			return err1
 		}
+		//查询project_info
+		projectInfo := gorm_model.ProjectInfo{}
+		err1 = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", taskInfo.ProjectID).Scan(&projectInfo).Error
+		if err1 != nil {
+			logrus.WithContext(ctx).Errorf("[Task db] Find ProjectInfo error,err:%+v", err)
+			return err1
+		}
 		// 查询data_info
 		db = GetReadDB(ctx)
 		dataInfo := gorm_model.YounggeeDataInfo{}
@@ -180,6 +187,30 @@ func SetTaskFinish(ctx context.Context, TaskIDs []string) error {
 			return err1
 		}
 
+		// 2. 创建任务收益
+		var productStruct gorm_model.YounggeeProduct
+		if err = json.Unmarshal([]byte(projectInfo.ProductSnap), &productStruct); err != nil {
+			fmt.Println("Error:", err)
+			return err
+		}
+		income := gorm_model.YounggeeTalentIncome{
+			TalentID:       taskInfo.TalentID,
+			ProjectID:      taskInfo.ProjectID,
+			SectaskID:      taskInfo.TaskID,
+			BrandName:      productStruct.BrandName,
+			TaskName:       projectInfo.ProjectName,
+			Income:         strconv.FormatFloat(taskInfo.SettleAmount, 'f', 10, 32),
+			IncomeType:     1,
+			WithdrawStatus: 1,
+			IncomeAt:       time.Now(),
+		}
+		err = CreateIncome(ctx, income, nil)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[projectPay service] call SpecialSettlePay error,err:%+v", err)
+			return err
+		}
+
+		// 3. 修改招募策略表,更新粉丝量、播放量、点赞数、收藏数、评论数、总支付、结案数量
 		// 更新招募策略
 		db = GetReadDB(ctx)
 		db = db.Model(gorm_model.RecruitStrategy{}).Where("project_id = ? and strategy_id = ?", taskInfo.ProjectID, taskInfo.StrategyID)
@@ -327,3 +358,23 @@ func GetTaskIds(ctx context.Context, projectId string) ([]string, error) {
 
 	return taskIds, nil
 }
+
+func UpdateTask(ctx context.Context, updateData gorm_model.YoungeeTaskInfo, tx *gorm.DB) (bool, error) {
+	db := GetWriteDB(ctx)
+	whereCondition := gorm_model.YoungeeTaskInfo{
+		TaskID: updateData.TaskID,
+	}
+	if tx != nil {
+		err := tx.Where(whereCondition).Updates(&updateData).Error
+		if err != nil {
+			return false, err
+		}
+	} else {
+		err := db.Where(whereCondition).Updates(&updateData).Error
+		if err != nil {
+			return false, err
+		}
+	}
+
+	return true, nil
+}

+ 0 - 1
route/init.go

@@ -132,7 +132,6 @@ func InitRoute(r *gin.Engine) {
 		m.POST("/project/recruit/getservicecharge", handler.WrapGetServiceChargeHandler)         // 获取产品置换服务费
 		m.POST("/product/deletePhotoUrl", handler.WrapDeletePhotoUrlHandler)                     // 在数据库中删除图片url
 		m.POST("/qrcode/getwxqrcode", handler.WrapGetWxQRCodeHandler)                            // 获取微信二维码
-
 	}
 
 	// 选品广场相关接口

+ 67 - 13
service/project_pay.go

@@ -2,15 +2,18 @@ package service
 
 import (
 	"context"
+	"encoding/json"
 	"errors"
 	"fmt"
-	"github.com/gin-gonic/gin"
-	"gorm.io/gorm"
+	"strconv"
 	"time"
 	"youngee_b_api/db"
 	"youngee_b_api/model/gorm_model"
 	"youngee_b_api/model/http_model"
 
+	"github.com/gin-gonic/gin"
+	"gorm.io/gorm"
+
 	"github.com/sirupsen/logrus"
 )
 
@@ -101,8 +104,21 @@ func (*projectPay) Pay(ctx context.Context, projectPay http_model.ProjectPayRequ
 func (p *projectPay) SpecialSettlePay(ctx *gin.Context, req *http_model.SpecialSettlePayRequest) error {
 	DB := db.GetReadDB(ctx)
 	err := DB.Transaction(func(tx *gorm.DB) error {
+		projectInfo := gorm_model.ProjectInfo{}
+		err := tx.Model(&gorm_model.ProjectInfo{}).Where("project_id = ?", req.ProjectID).First(&projectInfo).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[projectPay service] call SpecialSettlePay error,err:%+v", err)
+			return err
+		}
+		task := gorm_model.YoungeeTaskInfo{}
+		err = tx.Model(&gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", req.TaskId).First(&task).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[projectPay service] call SpecialSettlePay error,err:%+v", err)
+			return err
+		}
+		// 校验账户余额是否充足
 		var balance float64
-		err := tx.Model(&gorm_model.Enterprise{}).Select("balance").Where("enterprise_id = ?", req.EnterPriseId).Find(&balance).Error
+		err = tx.Model(&gorm_model.Enterprise{}).Select("balance").Where("enterprise_id = ?", req.EnterPriseId).Find(&balance).Error
 		if err != nil {
 			logrus.WithContext(ctx).Errorf("[projectPay service] call SpecialSettlePay error,err:%+v", err)
 			return err
@@ -111,26 +127,63 @@ func (p *projectPay) SpecialSettlePay(ctx *gin.Context, req *http_model.SpecialS
 		if balance < realPay {
 			return errors.New("余额不足")
 		}
-
+		// 增加项目支付金额
 		err = tx.Model(&gorm_model.ProjectInfo{}).Where("project_id = ?", req.ProjectID).
 			Updates(map[string]interface{}{"payment_amount": gorm.Expr("payment_amount + ?", req.Amount)}).Error
 		if err != nil {
 			logrus.WithContext(ctx).Errorf("[projectPay service] call SpecialSettlePay error,err:%+v", err)
 			return err
 		}
-
-		err = tx.Model(&gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", req.TaskId).Updates(gorm_model.YoungeeTaskInfo{
-			TaskReward:     req.Amount,
-			SettleAmount:   req.Amount,
-			AllPayment:     req.Amount,
-			RealPayment:    req.Amount,
-			SettleStatus:   2,
-			WithdrawStatus: 2,
-		}).Error
+		// 旧:更新专项任务收益
+		// err = tx.Model(&gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", req.TaskId).Updates(gorm_model.YoungeeTaskInfo{
+		// 	TaskReward:     req.Amount,
+		// 	SettleAmount:   req.Amount,
+		// 	AllPayment:     req.Amount,
+		// 	RealPayment:    req.Amount,
+		// 	SettleStatus:   2,
+		// 	WithdrawStatus: 2,
+		// }).Error
+		// if err != nil {
+		// 	logrus.WithContext(ctx).Errorf("[projectPay service] call SpecialSettlePay error,err:%+v", err)
+		// 	return err
+		// }
+		// 新:创建专项任务收益,更新任务阶段
+		updateTaskData := gorm_model.YoungeeTaskInfo{
+			TaskReward:   req.Amount,
+			SettleAmount: req.Amount,
+			AllPayment:   req.Amount,
+			RealPayment:  req.Amount,
+			TaskID:       req.TaskId,
+			SettleStatus: 2,
+		}
+		_, err = db.UpdateTask(ctx, updateTaskData, tx)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[projectPay service] call SpecialSettlePay error,err:%+v", err)
+			return err
+		}
+		var productInfo gorm_model.YounggeeProduct
+		if err = json.Unmarshal([]byte(projectInfo.ProductSnap), &productInfo); err != nil {
+			fmt.Println("Error:", err)
+			return err
+		}
+		income := gorm_model.YounggeeTalentIncome{
+			TalentID:       task.TalentID,
+			ProjectID:      task.ProjectID,
+			SectaskID:      task.TaskID,
+			BrandName:      productInfo.BrandName,
+			TaskName:       projectInfo.ProjectName,
+			Income:         strconv.FormatFloat(req.Amount, 'f', 10, 32),
+			IncomeType:     1,
+			WithdrawStatus: 1,
+			IncomeAt:       time.Now(),
+		}
+		err = db.CreateIncome(ctx, income, tx)
 		if err != nil {
 			logrus.WithContext(ctx).Errorf("[projectPay service] call SpecialSettlePay error,err:%+v", err)
 			return err
 		}
+
+		// 扣除企业账户余额
 		err = tx.Model(&gorm_model.Enterprise{}).Where("enterprise_id = ?", req.EnterPriseId).
 			Updates(map[string]interface{}{"balance": gorm.Expr("balance - ?", realPay), "available_balance": gorm.Expr("available_balance - ?", realPay),
 				"updated_at": time.Now()}).Error
@@ -144,6 +197,7 @@ func (p *projectPay) SpecialSettlePay(ctx *gin.Context, req *http_model.SpecialS
 			logrus.WithContext(ctx).Errorf("[projectPay service] call SpecialSettlePay error,err:%+v", err)
 			return err
 		}
+		// 增加达人收益
 		err = tx.Model(&gorm_model.YoungeeTalentInfo{}).Where("id = ?", talentId).
 			Updates(map[string]interface{}{"income": gorm.Expr("income + ?", req.Amount), "canwithdraw": gorm.Expr("canwithdraw + ?", req.Amount)}).Error
 		if err != nil {

+ 59 - 20
service/sectask_service/sectask.go

@@ -62,6 +62,8 @@ func (*selectionTask) RefuseCoop(ctx context.Context, request http_model.RefuseS
 
 func (*selectionTask) Settle(ctx context.Context, entersizeId string, request http_model.SettleSecTaskRequest) (*http_model.SettleSecTaskData, error) {
 	// 1. 解析request data
+	var returnMoney float64 = 0.0
+	var rewardMoney float64 = 0.0
 	payMoney, err := strconv.ParseFloat(request.TotalPayMoney, 64)
 	if err != nil {
 		logrus.WithContext(ctx).Errorf("[sectask_service service] call strconv.ParseFloat() error,err:%+v", err)
@@ -99,6 +101,25 @@ func (*selectionTask) Settle(ctx context.Context, entersizeId string, request ht
 		return nil, errors.New("该任务暂不可结算")
 	}
 
+	var product gorm_model.YounggeeProduct
+	if err = json.Unmarshal([]byte(selection.ProductSnap), &product); err != nil {
+		fmt.Println("Error:", err)
+		return nil, err
+	}
+	// 4) 校验结算金额计算是否正确
+	if request.IsReturnMoney == 1 {
+		returnMoney = product.ProductPrice
+	}
+	if request.IsPayReward == 1 {
+		rewardMoney, err = strconv.ParseFloat(selection.TaskReward, 64)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[sectask_service service] call strconv.ParseFloat() error,err:%+v", err)
+			return nil, err
+		}
+	}
+	if rewardMoney+returnMoney != payMoney {
+		return nil, errors.New("结算金额有误")
+	}
 	// 3. 扣除企业账户余额
 	_, err = db.UpdateEnterpriseBalance(ctx, entersizeId, 0, -payMoney, payMoney)
 	if err != nil {
@@ -120,27 +141,45 @@ func (*selectionTask) Settle(ctx context.Context, entersizeId string, request ht
 	}
 	// 5. 添加任务日志和达人消息
 	// 6. 创建选品收益记录
-	var product gorm_model.YounggeeProduct
-	if err = json.Unmarshal([]byte(selection.ProductSnap), &product); err != nil {
-		fmt.Println("Error:", err)
-		return nil, err
-	}
-	income := gorm_model.YounggeeTalentIncome{
-		TalentID:       secTask.TalentID,
-		SelectionID:    secTask.SelectionID,
-		SectaskID:      secTask.TaskID,
-		BrandName:      product.BrandName,
-		TaskName:       selection.SelectionName,
-		Income:         request.TotalPayMoney,
-		IncomeType:     1,
-		WithdrawStatus: 1,
-		IncomeAt:       time.Now(),
-	}
-	err = db.CreateIncome(ctx, income)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateIncome error,err:%+v", err)
-		return nil, err
+	// 返现收益
+	if request.IsReturnMoney == 1 {
+		income := gorm_model.YounggeeTalentIncome{
+			TalentID:       secTask.TalentID,
+			SelectionID:    secTask.SelectionID,
+			SectaskID:      secTask.TaskID,
+			BrandName:      product.BrandName,
+			TaskName:       selection.SelectionName,
+			Income:         strconv.FormatFloat(returnMoney, 'f', 10, 32),
+			IncomeType:     1,
+			WithdrawStatus: 1,
+			IncomeAt:       time.Now(),
+		}
+		err = db.CreateIncome(ctx, income, nil)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateIncome error,err:%+v", err)
+			return nil, err
+		}
+	}
+	// 悬赏收益
+	if request.IsPayReward == 1 {
+		income := gorm_model.YounggeeTalentIncome{
+			TalentID:       secTask.TalentID,
+			SelectionID:    secTask.SelectionID,
+			SectaskID:      secTask.TaskID,
+			BrandName:      product.BrandName,
+			TaskName:       selection.SelectionName,
+			Income:         strconv.FormatFloat(rewardMoney, 'f', 10, 32),
+			IncomeType:     1,
+			WithdrawStatus: 1,
+			IncomeAt:       time.Now(),
+		}
+		err = db.CreateIncome(ctx, income, nil)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateIncome error,err:%+v", err)
+			return nil, err
+		}
 	}
+
 	// 7. 若有young之团存在,则为young之团创建收益
 
 	settleSecTaskData := http_model.SettleSecTaskData{}