Преглед изворни кода

[20250421]任务同意数据结算

lin-jim-leon пре 16 часа
родитељ
комит
81b5a505ce
4 измењених фајлова са 123 додато и 152 уклоњено
  1. 93 79
      db/task.go
  2. 7 6
      model/http_model/data_accept.go
  3. 7 6
      model/http_model/data_localaccept.go
  4. 16 61
      service/data.go

+ 93 - 79
db/task.go

@@ -186,24 +186,6 @@ 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
-		//}
-		//var productPhotoStruct []gorm_model.YounggeeProductPhoto
-		//if err = json.Unmarshal([]byte(projectInfo.ProductPhotoSnap), &productPhotoStruct); err != nil {
-		//	fmt.Println("Error:", err)
-		//	return err
-		//}
-		//var mainPhoto = ""
-		//for _, w := range productPhotoStruct {
-		//	if w.Symbol == 1 {
-		//		mainPhoto = w.PhotoUrl
-		//	}
-		//}
-
 		t := time.Now()
 		income := gorm_model.YounggeeTalentIncome{
 			TalentID:  taskInfo.TalentID,
@@ -281,24 +263,6 @@ func SetLocalTaskFinish(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
-		//}
-		//var productPhotoStruct []gorm_model.YounggeeProductPhoto
-		//if err = json.Unmarshal([]byte(projectInfo.ProductPhotoSnap), &productPhotoStruct); err != nil {
-		//	fmt.Println("Error:", err)
-		//	return err
-		//}
-		//var mainPhoto = ""
-		//for _, w := range productPhotoStruct {
-		//	if w.Symbol == 1 {
-		//		mainPhoto = w.PhotoUrl
-		//	}
-		//}
-
 		t := time.Now()
 		income := gorm_model.YounggeeTalentIncome{
 			TalentID:  taskInfo.TalentId,
@@ -373,6 +337,59 @@ func SetProjectSettleFlag(ctx context.Context, projectid string) error {
 	return nil
 }
 
+func SetSettleAmount(ctx context.Context, settleamount *string, TaskIDs []string) error {
+	db := GetReadDB(ctx)
+	// 2. 转换 *string → float64
+	amount, err := strconv.ParseFloat(*settleamount, 64)
+	if err != nil {
+		return fmt.Errorf("invalid settleamount: %v", err)
+	}
+
+	// 3. 查询任务列表
+	var tasks []gorm_model.YoungeeTaskInfo
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", TaskIDs).Find(&tasks).Error
+	if err != nil {
+		return err
+	}
+
+	// 4. 更新 SettleAmount
+	for _, taskInfo := range tasks {
+		taskInfo.SettleAmount = amount
+		if err := db.Save(&taskInfo).Error; err != nil {
+			logrus.WithContext(ctx).Errorf("failed to update task SettleAmount")
+			return fmt.Errorf("failed to update task %s: %v", taskInfo.TaskID, err)
+		}
+	}
+
+	return nil
+}
+
+func SetLocalSettleAmount(ctx context.Context, settleamount *string, TaskIDs []string) error {
+	db := GetReadDB(ctx)
+	// 2. 转换 *string → float64
+	amount, err := strconv.ParseFloat(*settleamount, 64)
+	if err != nil {
+		return fmt.Errorf("invalid settleamount: %v", err)
+	}
+
+	// 3. 查询任务列表
+	var tasks []gorm_model.YoungeeLocalTaskInfo
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ?", TaskIDs).Find(&tasks).Error
+	if err != nil {
+		return err
+	}
+
+	// 4. 更新 SettleAmount
+	for _, taskInfo := range tasks {
+		taskInfo.SettleAmount = amount
+		if err := db.Save(&taskInfo).Error; err != nil {
+			logrus.WithContext(ctx).Errorf("failed to update task SettleAmount")
+			return fmt.Errorf("failed to update task %s: %v", taskInfo.TaskId, err)
+		}
+	}
+	return nil
+}
+
 // SetSpecialTaskSettleNum 结案人数+1
 func SetSpecialTaskSettleNum(ctx context.Context, TaskIDs []string) error {
 	db := GetReadDB(ctx)
@@ -384,28 +401,26 @@ func SetSpecialTaskSettleNum(ctx context.Context, TaskIDs []string) error {
 	}
 	for _, taskInfo := range tasks {
 		if taskInfo.SupplierId != 0 && taskInfo.SupplierStatus == 2 {
-			//project招募数+1,预估成本+服务商价格
-			var projectinfo gorm_model.ProjectInfo
-			err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", taskInfo.ProjectID).Find(&projectinfo).Error
-			if err != nil {
-				return err
-			}
-			projectinfo.SettleNum += 1
-			err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ? ", taskInfo.ProjectID).Updates(projectinfo).Error
+			// 在事务中更新
+			err = db.Transaction(func(tx *gorm.DB) error {
+				// 更新 ProjectInfo
+				if err := tx.Model(gorm_model.ProjectInfo{}).
+					Where("project_id = ?", taskInfo.ProjectID).
+					Update("settle_num", gorm.Expr("settle_num + ?", 1)).
+					Error; err != nil {
+					return err
+				}
+				// 更新 YounggeeSProjectInfo
+				if err := tx.Model(gorm_model.YounggeeSProjectInfo{}).
+					Where("project_id = ?", taskInfo.SprojectId).
+					Update("settle_num", gorm.Expr("settle_num + ?", 1)).
+					Error; err != nil {
+					return err
+				}
+				return nil
+			})
 			if err != nil {
-				return err
-			}
-			//服务商s_project已招募人数+1
-			var sprojectinfo gorm_model.YounggeeSProjectInfo
-			err = db.Model(gorm_model.YounggeeSProjectInfo{}).Where(" s_project_id =?", taskInfo.SprojectId).Find(&sprojectinfo).Error
-			if err != nil {
-				return err
-			}
-			sprojectinfo.RecruitNum += 1
-			//fmt.Println("......", projectinfo.RecruitNum)
-			err = db.Model(gorm_model.YounggeeSProjectInfo{}).Where(" s_project_id =?", taskInfo.SprojectId).Updates(sprojectinfo).Error
-			if err != nil {
-				return err
+				return fmt.Errorf("failed to update settle_num: %v", err)
 			}
 		}
 		if taskInfo.SupplierId == 0 && taskInfo.SupplierStatus == 0 {
@@ -455,32 +470,31 @@ func SetSpecialLocalTaskSettleNum(ctx context.Context, TaskIDs []string) error {
 	}
 	for _, taskInfo := range tasks {
 		if taskInfo.SupplierId != 0 && taskInfo.SupplierStatus == 2 {
-			//project招募数+1,预估成本+服务商价格
-			var projectinfo gorm_model.YounggeeLocalLifeInfo
-			err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", taskInfo.LocalId).Find(&projectinfo).Error
-			if err != nil {
-				return err
-			}
-			projectinfo.SettleNum += 1
-			err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ? ", taskInfo.LocalId).Updates(projectinfo).Error
+			// 在事务中更新
+			err = db.Transaction(func(tx *gorm.DB) error {
+				// 更新 YounggeeLocalLifeInfo
+				if err := tx.Model(gorm_model.YounggeeLocalLifeInfo{}).
+					Where("local_id = ?", taskInfo.LocalId).
+					Update("settle_num", gorm.Expr("settle_num + ?", 1)).
+					Error; err != nil {
+					return err
+				}
+				// 更新 YounggeeSLocalLifeInfo
+				if err := tx.Model(gorm_model.YounggeeSLocalLifeInfo{}).
+					Where("s_local_life_id = ?", taskInfo.SLocalLifeId).
+					Update("settle_num", gorm.Expr("settle_num + ?", 1)).
+					Error; err != nil {
+					return err
+				}
+				return nil
+			})
 			if err != nil {
-				return err
-			}
-			//服务商s_project已招募人数+1
-			var sprojectinfo gorm_model.YounggeeSLocalLifeInfo
-			err = db.Model(gorm_model.YounggeeSLocalLifeInfo{}).Where(" s_local_life_id =?", taskInfo.SLocalLifeId).Find(&sprojectinfo).Error
-			if err != nil {
-				return err
-			}
-			sprojectinfo.RecruitNum += 1
-			fmt.Println("......", projectinfo.RecruitNum)
-			err = db.Model(gorm_model.YounggeeSLocalLifeInfo{}).Where(" s_local_life_id =?", taskInfo.SLocalLifeId).Updates(sprojectinfo).Error
-			if err != nil {
-				return err
+				return fmt.Errorf("failed to update settle_num: %v", err)
 			}
+
 		}
 		if taskInfo.SupplierId == 0 && taskInfo.SupplierStatus == 0 {
-			//project招募数+1
+			//project结案人数+1
 			var projectinfo gorm_model.YounggeeLocalLifeInfo
 			err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", taskInfo.LocalId).Find(&projectinfo).Error
 			if err != nil {

+ 7 - 6
model/http_model/data_accept.go

@@ -2,12 +2,13 @@ package http_model
 
 type AcceptDataRequest struct {
 	//Payment   float64 `json:"payment"`      //招募策略id
-	TaskIds      string `json:"task_id_list"` //任务id列表
-	ProjectId    string `json:"project_id"`   //项目id
-	IsSpecial    int    `json:"is_special"`   // 是否为专项项目
-	OperatorId   string `json:"operator_id"`
-	OperateType  int    `json:"operate_type"`
-	EnterpriseId string `json:"enterprise_id"`
+	TaskIds      string  `json:"task_id_list"` //任务id列表
+	ProjectId    string  `json:"project_id"`   //项目id
+	IsSpecial    int     `json:"is_special"`   // 是否为专项项目
+	OperatorId   string  `json:"operator_id"`
+	OperateType  int     `json:"operate_type"`
+	EnterpriseId string  `json:"enterprise_id"`
+	SettleAmount *string `json:"settle_amount"`
 }
 
 type AcceptDataData struct {

+ 7 - 6
model/http_model/data_localaccept.go

@@ -2,12 +2,13 @@ package http_model
 
 type LocalAcceptDataRequest struct {
 	//Payment   float64 `json:"payment"`      //招募策略id
-	TaskIds      string `json:"task_id_list"` //任务id列表
-	ProjectId    string `json:"project_id"`   //项目id
-	IsSpecial    int    `json:"is_special"`   // 是否为专项项目
-	OperatorId   string `json:"operator_id"`
-	OperateType  int    `json:"operate_type"`
-	EnterpriseId string `json:"enterprise_id"`
+	TaskIds      string  `json:"task_id_list"` //任务id列表
+	ProjectId    string  `json:"project_id"`   //项目id
+	IsSpecial    int     `json:"is_special"`   // 是否为专项项目
+	OperatorId   string  `json:"operator_id"`
+	OperateType  int     `json:"operate_type"`
+	EnterpriseId string  `json:"enterprise_id"`
+	SettleAmount *string `json:"settle_amount"`
 }
 
 type LocalAcceptDataData struct {

+ 16 - 61
service/data.go

@@ -2,6 +2,7 @@ package service
 
 import (
 	"context"
+	"errors"
 	"fmt"
 	"strings"
 	"youngee_b_api/db"
@@ -124,27 +125,20 @@ func (*data) AcceptData(ctx context.Context, request http_model.AcceptDataReques
 			logrus.WithContext(ctx).Errorf("[Data service] call SetSpecialTaskSettleNum error,err:%+v", err)
 			return nil, err
 		}
-
+		if request.SettleAmount == nil {
+			return nil, errors.New("SettleAmount is nil")
+		}
+		err = db.SetSettleAmount(ctx, request.SettleAmount, TaskIDList)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[Data service] call SetSettleAmount error,err:%+v", err)
+			return nil, err
+		}
 		err = db.SetProjectSettleFlag(ctx, request.ProjectId)
 		if err != nil {
 			logrus.WithContext(ctx).Errorf("[Data service] call SetProjectSettleFlag error,err:%+v", err)
 			return nil, err
 		}
-		//// 3. 判断是否全部任务已结案,若已全部结案则触发项目结案
-		//// 查询task_stage<15的任务数量
-		//unFinishedTaskNumber, err1 := db.GetUnfinishedTaskNumber(ctx, request.ProjectId)
-		//if err1 != nil {
-		//	logrus.WithContext(ctx).Errorf("[Data service] call GetUnfinishedTaskNumber error,err:%+v", err)
-		//	return nil, err
-		//}
-		//if *unFinishedTaskNumber == 0 { // 若为0则触发项目结案
-		//	err := db.SetSpecialProjectFinish(ctx, request.ProjectId)
-		//	if err1 != nil {
-		//		logrus.WithContext(ctx).Errorf("[Data service] call SetProjectFinish error,err:%+v", err)
-		//		return nil, err
-		//	}
-		//	//res.IsEnd = 1
-		//}
+
 	} else {
 		// 2. 更新YoungeeTaskInfo表,将任务结案
 		//fmt.Printf("acc request %+v", TaskIDList)
@@ -168,21 +162,6 @@ func (*data) AcceptData(ctx context.Context, request http_model.AcceptDataReques
 			logrus.WithContext(ctx).Errorf("[Data service] call SetProjectSettleFlag error,err:%+v", err)
 			return nil, err
 		}
-		// 3. 判断是否全部任务已结案,若已全部结案则触发项目结案
-		// 查询task_stage<15的任务数量
-		//unFinishedTaskNumber, err1 := db.GetUnfinishedTaskNumber(ctx, request.ProjectId)
-		//if err1 != nil {
-		//	logrus.WithContext(ctx).Errorf("[Data service] call GetUnfinishedTaskNumber error,err:%+v", err)
-		//	return nil, err
-		//}
-		//if *unFinishedTaskNumber == 0 { // 若为0则触发项目结案
-		//	err := db.SetProjectFinish(ctx, request.ProjectId)
-		//	if err1 != nil {
-		//		logrus.WithContext(ctx).Errorf("[Data service] call SetProjectFinish error,err:%+v", err)
-		//		return nil, err
-		//	}
-		//	res.IsEnd = 1
-		//}
 	}
 	return res, nil
 }
@@ -234,26 +213,17 @@ func (*data) LocalAcceptData(ctx context.Context, request http_model.LocalAccept
 			logrus.WithContext(ctx).Errorf("[Data service] call SetSpecialTaskSettleNum error,err:%+v", err)
 			return nil, err
 		}
+		err = db.SetLocalSettleAmount(ctx, request.SettleAmount, TaskIDList)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[Data service] call SetSettleAmount error,err:%+v", err)
+			return nil, err
+		}
 		err = db.SetLocalLifeSettleFlag(ctx, request.ProjectId)
 		if err != nil {
 			logrus.WithContext(ctx).Errorf("[Data service] call SetLocalLifeSettleFlag error,err:%+v", err)
 			return nil, err
 		}
-		//// 3. 判断是否全部任务已结案,若已全部结案则触发项目结案
-		//// 查询task_stage<15的任务数量
-		//unFinishedTaskNumber, err1 := db.GetUnfinishedTaskNumber(ctx, request.ProjectId)
-		//if err1 != nil {
-		//	logrus.WithContext(ctx).Errorf("[Data service] call GetUnfinishedTaskNumber error,err:%+v", err)
-		//	return nil, err
-		//}
-		//if *unFinishedTaskNumber == 0 { // 若为0则触发项目结案
-		//	err := db.SetSpecialProjectFinish(ctx, request.ProjectId)
-		//	if err1 != nil {
-		//		logrus.WithContext(ctx).Errorf("[Data service] call SetProjectFinish error,err:%+v", err)
-		//		return nil, err
-		//	}
-		//	res.IsEnd = 1
-		//}
+
 	} else {
 		// 2. 更新YoungeeTaskInfo表,将任务结案
 		fmt.Printf("acc request %+v", TaskIDList)
@@ -277,21 +247,6 @@ func (*data) LocalAcceptData(ctx context.Context, request http_model.LocalAccept
 			logrus.WithContext(ctx).Errorf("[Data service] call SetLocalLifeSettleFlag error,err:%+v", err)
 			return nil, err
 		}
-		//// 3. 判断是否全部任务已结案,若已全部结案则触发项目结案
-		//// 查询task_stage<15的任务数量
-		//unFinishedTaskNumber, err1 := db.GetUnfinishedTaskNumber(ctx, request.ProjectId)
-		//if err1 != nil {
-		//	logrus.WithContext(ctx).Errorf("[Data service] call GetUnfinishedTaskNumber error,err:%+v", err)
-		//	return nil, err
-		//}
-		//if *unFinishedTaskNumber == 0 { // 若为0则触发项目结案
-		//	err := db.SetProjectFinish(ctx, request.ProjectId)
-		//	if err1 != nil {
-		//		logrus.WithContext(ctx).Errorf("[Data service] call SetProjectFinish error,err:%+v", err)
-		//		return nil, err
-		//	}
-		//	res.IsEnd = 1
-		//}
 	}
 	return res, nil
 }