Browse Source

bugV4allfixed

XingYuXian 1 year ago
parent
commit
d5a8772936
7 changed files with 1528 additions and 1503 deletions
  1. 297 296
      db/logistics.go
  2. 139 137
      db/product.go
  3. 447 446
      db/project.go
  4. 283 269
      db/sectask.go
  5. 64 61
      handler/PassSecTaskCoop.go
  6. 53 52
      model/http_model/GetSecTaskListRequest.go
  7. 245 242
      service/sec_task.go

+ 297 - 296
db/logistics.go

@@ -1,296 +1,297 @@
-package db
-
-import (
-	"context"
-	"fmt"
-	"reflect"
-	"strconv"
-	"strings"
-	"time"
-	"youngee_m_api/model/common_model"
-	"youngee_m_api/model/gorm_model"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/pack"
-	"youngee_m_api/util"
-
-	"github.com/caixw/lib.go/conv"
-	"github.com/sirupsen/logrus"
-	"github.com/tidwall/gjson"
-)
-
-//新增
-func CreateLogistics(ctx context.Context, logistics gorm_model.YoungeeTaskLogistics, RecruitStrategyID int64) (*int64, error) {
-	db := GetReadDB(ctx)
-	err := db.Create(&logistics).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics db] call CreateLogistics error,err:%+v", err)
-		return nil, err
-	}
-	return &logistics.LogisticsID, nil
-}
-
-//修改接口
-func UpdateLogistics(ctx context.Context, logistics gorm_model.YoungeeTaskLogistics) (*int64, error) {
-	db := GetReadDB(ctx)
-	err := db.Model(&logistics).Where("task_id = ?", logistics.TaskID).Updates(logistics).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics db] call UpdateLogistics error,err:%+v", err)
-		return nil, err
-	}
-	return &logistics.LogisticsID, nil
-}
-
-// 更改签收时间
-func SignForReceipt(ctx context.Context, taskID string) error {
-	db := GetReadDB(ctx)
-	t := time.Now()
-	err := db.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id = ?", taskID).Updates(gorm_model.YoungeeTaskLogistics{
-		Status:     1,
-		SignedTime: &t,
-	}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[logistics db] call UpdateLogistics error,err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-// GetTaskLogisticsList 查询包含物流信息的task list
-func GetTaskLogisticsList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskLogisticsInfo, int64, error) {
-	db := GetReadDB(ctx)
-	// 查询Task表信息
-	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
-	// 根据Project条件过滤
-	conditionType := reflect.TypeOf(conditions).Elem()
-	conditionValue := reflect.ValueOf(conditions).Elem()
-	var platform_nickname string = ""
-	for i := 0; i < conditionType.NumField(); i++ {
-		field := conditionType.Field(i)
-		tag := field.Tag.Get("condition")
-		value := conditionValue.FieldByName(field.Name)
-		if !util.IsBlank(value) {
-			if tag == "platform_nickname" {
-				platform_nickname = fmt.Sprintf("%v", value.Interface())
-				continue
-			} else {
-				db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
-			}
-		}
-	}
-	var taskInfos []gorm_model.YoungeeTaskInfo
-	db = db.Model(gorm_model.YoungeeTaskInfo{})
-	// 查询总数
-	var totalTask int64
-	if err := db.Count(&totalTask).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	db.Order("task_id").Find(&taskInfos)
-
-	// 查询任务id
-	var taskIds []string
-	taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
-	for _, taskInfo := range taskInfos {
-		taskIds = append(taskIds, taskInfo.TaskId)
-		taskMap[taskInfo.TaskId] = taskInfo
-	}
-	db1 := GetReadDB(ctx)
-	db1 = db1.Debug().Model(gorm_model.YoungeeTaskLogistics{})
-
-	var logisticsInfos []gorm_model.YoungeeTaskLogistics
-	db1 = db1.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id IN ?", taskIds).Find(&logisticsInfos)
-	logisticsMap := make(map[string]gorm_model.YoungeeTaskLogistics)
-	for _, logisticsInfo := range logisticsInfos {
-		logisticsMap[logisticsInfo.TaskID] = logisticsInfo
-	}
-	// 查询总数
-	var totalLogistics int64
-	if err := db1.Count(&totalLogistics).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-
-	// 查询该页数据
-	limit := pageSize
-	offset := pageSize * pageNum // assert pageNum start with 0
-	err := db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-
-	var TaskLogisticss []*http_model.TaskLogistics
-	var taskLogisticss []*http_model.TaskLogisticsInfo
-	var newTaskLogisticss []*http_model.TaskLogisticsInfo
-	for _, taskId := range taskIds {
-		TaskLogistics := new(http_model.TaskLogistics)
-		TaskLogistics.Talent = taskMap[taskId]
-		TaskLogistics.Logistics = logisticsMap[taskId]
-		TalentPostAddrSnap := TaskLogistics.Talent.TalentPostAddrSnap
-		regionCode, _ := strconv.Atoi(conv.MustString(gjson.Get(TalentPostAddrSnap, "region_code"), ""))
-		TaskLogistics.Region = GetRegion(ctx, regionCode)
-		TaskLogisticss = append(TaskLogisticss, TaskLogistics)
-	}
-	taskLogisticss = pack.TaskLogisticsToTaskInfo(TaskLogisticss)
-
-	for _, v := range taskLogisticss {
-		if platform_nickname == "" {
-			newTaskLogisticss = append(newTaskLogisticss, v)
-		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
-			newTaskLogisticss = append(newTaskLogisticss, v)
-		} else if strings.Contains(v.TaskID, platform_nickname) {
-			newTaskLogisticss = append(newTaskLogisticss, v)
-		} else {
-			totalTask--
-		}
-	}
-	return newTaskLogisticss, totalTask, nil
-}
-
-// 修改任务表的物流状态
-func ChangeLogisticsStatus(ctx context.Context, taskIds []string) error {
-	db := GetReadDB(ctx)
-	err := db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds).Update("logistics_status", 3).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[ChangeTaskStatus] error query mysql total, err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-// GetSpecialTaskLogisticsList 查询专项包含物流信息的task list
-func GetSpecialTaskLogisticsList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskLogisticsInfo, int64, error) {
-	db := GetReadDB(ctx)
-	// 查询Task表信息
-	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2 and project_id = ?", projectID)
-	// 根据Project条件过滤
-	conditionType := reflect.TypeOf(conditions).Elem()
-	conditionValue := reflect.ValueOf(conditions).Elem()
-	var platformNickname string = ""
-	for i := 0; i < conditionType.NumField(); i++ {
-		field := conditionType.Field(i)
-		tag := field.Tag.Get("condition")
-		value := conditionValue.FieldByName(field.Name)
-		if !util.IsBlank(value) {
-			if tag == "platform_nickname" {
-				platformNickname = fmt.Sprintf("%v", value.Interface())
-				continue
-			} else {
-				db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
-			}
-		}
-	}
-	var taskInfos []gorm_model.YoungeeTaskInfo
-	db = db.Model(gorm_model.YoungeeTaskInfo{})
-	// 查询总数
-	var totalTask int64
-	if err := db.Count(&totalTask).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetSpecialTaskLogisticsList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	db.Order("task_id").Find(&taskInfos)
-
-	// 查询任务id
-	var taskIds []string
-	taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
-	for _, taskInfo := range taskInfos {
-		taskIds = append(taskIds, taskInfo.TaskId)
-		taskMap[taskInfo.TaskId] = taskInfo
-	}
-	db1 := GetReadDB(ctx)
-	db1 = db1.Debug().Model(gorm_model.YoungeeTaskLogistics{})
-
-	var logisticsInfos []gorm_model.YoungeeTaskLogistics
-	db1 = db1.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id IN ?", taskIds).Find(&logisticsInfos)
-	logisticsMap := make(map[string]gorm_model.YoungeeTaskLogistics)
-	for _, logisticsInfo := range logisticsInfos {
-		logisticsMap[logisticsInfo.TaskID] = logisticsInfo
-	}
-	// 查询总数
-	var totalLogistics int64
-	if err := db1.Count(&totalLogistics).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetSpecialTaskLogisticsList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-
-	// 查询该页数据
-	limit := pageSize
-	offset := pageSize * pageNum // assert pageNum start with 0
-	err := db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetSpecialTaskLogisticsList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-
-	var TaskLogisticss []*http_model.SpecialTaskLogistics
-	var taskLogisticss []*http_model.SpecialTaskLogisticsInfo
-	var newTaskLogisticss []*http_model.SpecialTaskLogisticsInfo
-	for _, taskId := range taskIds {
-		TaskLogistics := new(http_model.SpecialTaskLogistics)
-		TaskLogistics.Talent = taskMap[taskId]
-		TaskLogistics.Logistics = logisticsMap[taskId]
-		TalentPostAddrSnap := TaskLogistics.Talent.TalentPostAddrSnap
-		regionCode, _ := strconv.Atoi(conv.MustString(gjson.Get(TalentPostAddrSnap, "region_code"), ""))
-		TaskLogistics.Region = GetRegion(ctx, regionCode)
-		TaskLogisticss = append(TaskLogisticss, TaskLogistics)
-	}
-	taskLogisticss = pack.SpecialTaskLogisticsToTaskInfo(TaskLogisticss)
-
-	for _, v := range taskLogisticss {
-		if platformNickname == "" {
-			newTaskLogisticss = append(newTaskLogisticss, v)
-		} else if strings.Contains(v.PlatformNickname, platformNickname) {
-			newTaskLogisticss = append(newTaskLogisticss, v)
-		} else if strings.Contains(v.TaskID, platformNickname) {
-			newTaskLogisticss = append(newTaskLogisticss, v)
-		} else {
-			totalTask--
-		}
-	}
-	return newTaskLogisticss, totalTask, nil
-}
-
-func GetSecTaskLogisticsList(ctx context.Context, secTaskList []*http_model.SecTaskInfo, taskStage int, productType int) ([]*http_model.SecTaskInfo, error) {
-	db := GetReadDB(ctx)
-	if taskStage != 6 { // 已发货
-		// 查询youngee_task_logistics中物流信息
-		var taskIds []string
-		taskMap := make(map[string]*http_model.SecTaskInfo)
-		for _, secTask := range secTaskList {
-			taskIds = append(taskIds, secTask.SecTaskId)
-			taskMap[secTask.SecTaskId] = secTask
-		}
-
-		var logisticsInfos []gorm_model.YoungeeTaskLogistics
-		err := db.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id IN ?", taskIds).Find(&logisticsInfos).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		logisticsMap := make(map[string]gorm_model.YoungeeTaskLogistics)
-		for _, logisticsInfo := range logisticsInfos {
-			logisticsMap[logisticsInfo.TaskID] = logisticsInfo
-		}
-		// 融合信息
-		for i, secTask := range secTaskList {
-			taskID := secTask.SecTaskId
-			secTaskList[i].CompanyName = logisticsMap[taskID].CompanyName
-			secTaskList[i].LogisticsNumber = logisticsMap[taskID].LogisticsNumber
-			secTaskList[i].ExplorestorePeriod = logisticsMap[taskID].ExplorestorePeriod
-			secTaskList[i].ExplorestoreStarttime = logisticsMap[taskID].ExplorestoreStarttime
-			secTaskList[i].ExplorestoreEndtime = logisticsMap[taskID].ExplorestoreEndtime
-		}
-	}
-
-	return secTaskList, nil
-}
-
-func GetLogistics(ctx context.Context, secTaskId string) (*gorm_model.YoungeeTaskLogistics, error) {
-	db := GetWriteDB(ctx)
-	logistics := gorm_model.YoungeeTaskLogistics{}
-	err := db.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id", secTaskId).First(&logistics).Error
-	if err != nil {
-		return nil, err
-	}
-	return &logistics, nil
-}
+package db
+
+import (
+	"context"
+	"fmt"
+	"reflect"
+	"strconv"
+	"strings"
+	"time"
+	"youngee_m_api/model/common_model"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/pack"
+	"youngee_m_api/util"
+
+	"github.com/caixw/lib.go/conv"
+	"github.com/sirupsen/logrus"
+	"github.com/tidwall/gjson"
+)
+
+// 新增
+func CreateLogistics(ctx context.Context, logistics gorm_model.YoungeeTaskLogistics, RecruitStrategyID int64) (*int64, error) {
+	db := GetReadDB(ctx)
+	err := db.Create(&logistics).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics db] call CreateLogistics error,err:%+v", err)
+		return nil, err
+	}
+	return &logistics.LogisticsID, nil
+}
+
+// 修改接口
+func UpdateLogistics(ctx context.Context, logistics gorm_model.YoungeeTaskLogistics) (*int64, error) {
+	db := GetReadDB(ctx)
+	err := db.Model(&logistics).Where("task_id = ?", logistics.TaskID).Updates(logistics).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics db] call UpdateLogistics error,err:%+v", err)
+		return nil, err
+	}
+	return &logistics.LogisticsID, nil
+}
+
+// 更改签收时间
+func SignForReceipt(ctx context.Context, taskID string) error {
+	db := GetReadDB(ctx)
+	t := time.Now()
+	err := db.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id = ?", taskID).Updates(gorm_model.YoungeeTaskLogistics{
+		Status:     1,
+		SignedTime: &t,
+	}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[logistics db] call UpdateLogistics error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// GetTaskLogisticsList 查询包含物流信息的task list
+func GetTaskLogisticsList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskLogisticsInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询Task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	var platform_nickname string = ""
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if !util.IsBlank(value) {
+			if tag == "platform_nickname" {
+				platform_nickname = fmt.Sprintf("%v", value.Interface())
+				continue
+			} else {
+				db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
+			}
+		}
+	}
+	var taskInfos []gorm_model.YoungeeTaskInfo
+	db = db.Model(gorm_model.YoungeeTaskInfo{})
+	// 查询总数
+	var totalTask int64
+	if err := db.Count(&totalTask).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	db.Order("task_id").Find(&taskInfos)
+
+	// 查询任务id
+	var taskIds []string
+	taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
+	for _, taskInfo := range taskInfos {
+		taskIds = append(taskIds, taskInfo.TaskId)
+		taskMap[taskInfo.TaskId] = taskInfo
+	}
+	db1 := GetReadDB(ctx)
+	db1 = db1.Debug().Model(gorm_model.YoungeeTaskLogistics{})
+
+	var logisticsInfos []gorm_model.YoungeeTaskLogistics
+	db1 = db1.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id IN ?", taskIds).Find(&logisticsInfos)
+	logisticsMap := make(map[string]gorm_model.YoungeeTaskLogistics)
+	for _, logisticsInfo := range logisticsInfos {
+		logisticsMap[logisticsInfo.TaskID] = logisticsInfo
+	}
+	// 查询总数
+	var totalLogistics int64
+	if err := db1.Count(&totalLogistics).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+
+	// 查询该页数据
+	limit := pageSize
+	offset := pageSize * pageNum // assert pageNum start with 0
+	err := db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+
+	var TaskLogisticss []*http_model.TaskLogistics
+	var taskLogisticss []*http_model.TaskLogisticsInfo
+	var newTaskLogisticss []*http_model.TaskLogisticsInfo
+	for _, taskId := range taskIds {
+		TaskLogistics := new(http_model.TaskLogistics)
+		TaskLogistics.Talent = taskMap[taskId]
+		TaskLogistics.Logistics = logisticsMap[taskId]
+		TalentPostAddrSnap := TaskLogistics.Talent.TalentPostAddrSnap
+		regionCode, _ := strconv.Atoi(conv.MustString(gjson.Get(TalentPostAddrSnap, "region_code"), ""))
+		TaskLogistics.Region = GetRegion(ctx, regionCode)
+		TaskLogisticss = append(TaskLogisticss, TaskLogistics)
+	}
+	taskLogisticss = pack.TaskLogisticsToTaskInfo(TaskLogisticss)
+
+	for _, v := range taskLogisticss {
+		if platform_nickname == "" {
+			newTaskLogisticss = append(newTaskLogisticss, v)
+		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
+			newTaskLogisticss = append(newTaskLogisticss, v)
+		} else if strings.Contains(v.TaskID, platform_nickname) {
+			newTaskLogisticss = append(newTaskLogisticss, v)
+		} else {
+			totalTask--
+		}
+	}
+	return newTaskLogisticss, totalTask, nil
+}
+
+// 修改任务表的物流状态
+func ChangeLogisticsStatus(ctx context.Context, taskIds []string) error {
+	db := GetReadDB(ctx)
+	err := db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds).Update("logistics_status", 3).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[ChangeTaskStatus] error query mysql total, err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// GetSpecialTaskLogisticsList 查询专项包含物流信息的task list
+func GetSpecialTaskLogisticsList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskLogisticsInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询Task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2 and project_id = ?", projectID)
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	var platformNickname string = ""
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if !util.IsBlank(value) {
+			if tag == "platform_nickname" {
+				platformNickname = fmt.Sprintf("%v", value.Interface())
+				continue
+			} else {
+				db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
+			}
+		}
+	}
+	var taskInfos []gorm_model.YoungeeTaskInfo
+	db = db.Model(gorm_model.YoungeeTaskInfo{})
+	// 查询总数
+	var totalTask int64
+	if err := db.Count(&totalTask).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetSpecialTaskLogisticsList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	db.Order("task_id").Find(&taskInfos)
+
+	// 查询任务id
+	var taskIds []string
+	taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
+	for _, taskInfo := range taskInfos {
+		taskIds = append(taskIds, taskInfo.TaskId)
+		taskMap[taskInfo.TaskId] = taskInfo
+	}
+	db1 := GetReadDB(ctx)
+	db1 = db1.Debug().Model(gorm_model.YoungeeTaskLogistics{})
+
+	var logisticsInfos []gorm_model.YoungeeTaskLogistics
+	db1 = db1.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id IN ?", taskIds).Find(&logisticsInfos)
+	logisticsMap := make(map[string]gorm_model.YoungeeTaskLogistics)
+	for _, logisticsInfo := range logisticsInfos {
+		logisticsMap[logisticsInfo.TaskID] = logisticsInfo
+	}
+	// 查询总数
+	var totalLogistics int64
+	if err := db1.Count(&totalLogistics).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetSpecialTaskLogisticsList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+
+	// 查询该页数据
+	limit := pageSize
+	offset := pageSize * pageNum // assert pageNum start with 0
+	err := db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetSpecialTaskLogisticsList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+
+	var TaskLogisticss []*http_model.SpecialTaskLogistics
+	var taskLogisticss []*http_model.SpecialTaskLogisticsInfo
+	var newTaskLogisticss []*http_model.SpecialTaskLogisticsInfo
+	for _, taskId := range taskIds {
+		TaskLogistics := new(http_model.SpecialTaskLogistics)
+		TaskLogistics.Talent = taskMap[taskId]
+		TaskLogistics.Logistics = logisticsMap[taskId]
+		TalentPostAddrSnap := TaskLogistics.Talent.TalentPostAddrSnap
+		regionCode, _ := strconv.Atoi(conv.MustString(gjson.Get(TalentPostAddrSnap, "region_code"), ""))
+		TaskLogistics.Region = GetRegion(ctx, regionCode)
+		TaskLogisticss = append(TaskLogisticss, TaskLogistics)
+	}
+	taskLogisticss = pack.SpecialTaskLogisticsToTaskInfo(TaskLogisticss)
+
+	for _, v := range taskLogisticss {
+		if platformNickname == "" {
+			newTaskLogisticss = append(newTaskLogisticss, v)
+		} else if strings.Contains(v.PlatformNickname, platformNickname) {
+			newTaskLogisticss = append(newTaskLogisticss, v)
+		} else if strings.Contains(v.TaskID, platformNickname) {
+			newTaskLogisticss = append(newTaskLogisticss, v)
+		} else {
+			totalTask--
+		}
+	}
+	return newTaskLogisticss, totalTask, nil
+}
+
+func GetSecTaskLogisticsList(ctx context.Context, secTaskList []*http_model.SecTaskInfo, taskStage int, productType int) ([]*http_model.SecTaskInfo, error) {
+	db := GetReadDB(ctx)
+	println("taskstage: ", taskStage)
+	if taskStage != 6 { // 已发货
+		// 查询youngee_task_logistics中物流信息
+		var taskIds []string
+		taskMap := make(map[string]*http_model.SecTaskInfo)
+		for _, secTask := range secTaskList {
+			taskIds = append(taskIds, secTask.SecTaskId)
+			println("taskid: ", secTask.SecTaskId)
+			taskMap[secTask.SecTaskId] = secTask
+		}
+
+		var logisticsInfos []gorm_model.YoungeeTaskLogistics
+		err := db.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id IN ?", taskIds).Find(&logisticsInfos).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		logisticsMap := make(map[string]gorm_model.YoungeeTaskLogistics)
+		for _, logisticsInfo := range logisticsInfos {
+			logisticsMap[logisticsInfo.TaskID] = logisticsInfo
+		}
+		// 融合信息
+		for i, secTask := range secTaskList {
+			taskID := secTask.SecTaskId
+			secTaskList[i].CompanyName = logisticsMap[taskID].CompanyName
+			secTaskList[i].LogisticsNumber = logisticsMap[taskID].LogisticsNumber
+			secTaskList[i].ExplorestorePeriod = logisticsMap[taskID].ExplorestorePeriod
+			secTaskList[i].ExplorestoreStarttime = logisticsMap[taskID].ExplorestoreStarttime
+			secTaskList[i].ExplorestoreEndtime = logisticsMap[taskID].ExplorestoreEndtime
+		}
+	}
+	return secTaskList, nil
+}
+
+func GetLogistics(ctx context.Context, secTaskId string) (*gorm_model.YoungeeTaskLogistics, error) {
+	db := GetWriteDB(ctx)
+	logistics := gorm_model.YoungeeTaskLogistics{}
+	err := db.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id", secTaskId).First(&logistics).Error
+	if err != nil {
+		return nil, err
+	}
+	return &logistics, nil
+}

+ 139 - 137
db/product.go

@@ -1,137 +1,139 @@
-package db
-
-import (
-	"context"
-	"github.com/caixw/lib.go/conv"
-	"github.com/sirupsen/logrus"
-	"gorm.io/gorm"
-	"strconv"
-	"youngee_m_api/model/gorm_model"
-)
-
-func CreateProduct(ctx context.Context, product gorm_model.YounggeeProduct) (*int64, error) {
-	db := GetReadDB(ctx)
-	err := db.Create(&product).Error
-	if err != nil {
-		return nil, err
-	}
-	return &product.ProductID, nil
-}
-
-func GetProductByID(ctx context.Context, productID int64) (*gorm_model.YounggeeProduct, error) {
-	db := GetReadDB(ctx)
-	product := &gorm_model.YounggeeProduct{}
-	err := db.First(&product, productID).Error
-	if err != nil {
-		if err == gorm.ErrRecordNotFound {
-			return nil, nil
-		} else {
-			return nil, err
-		}
-	}
-	return product, nil
-}
-
-func GetEnterpriseIDByUserID(ctx context.Context, UserId string) string {
-	db := GetReadDB(ctx)
-	enterpriseInfo := gorm_model.Enterprise{}
-	userId := conv.MustInt64(UserId, 0)
-	err := db.Where("user_id = ?", userId).Find(&enterpriseInfo).Error
-	if err != nil {
-		return ""
-	}
-	enterpriseID := enterpriseInfo.EnterpriseID
-	return enterpriseID
-}
-
-func GetUserIDByEnterpriseID(ctx context.Context, enterpriseId string) string {
-	db := GetReadDB(ctx)
-	enterpriseInfo := gorm_model.Enterprise{}
-	err := db.Where("enterprise_id = ?", enterpriseId).Find(&enterpriseInfo).Error
-	if err != nil {
-		return ""
-	}
-	enterpriseID := enterpriseInfo.UserID
-	return strconv.FormatInt(enterpriseID, 10)
-}
-
-func GetProductByEnterpriseID(ctx context.Context, enterpriseID string) ([]gorm_model.YounggeeProduct, error) {
-	db := GetReadDB(ctx)
-	var products []gorm_model.YounggeeProduct
-	err := db.Where("enterprise_id = ?", enterpriseID).Find(&products).Error
-	if err != nil {
-		return nil, err
-	}
-	return products, nil
-}
-
-func GetEnterpriseIDByProductID(ctx context.Context, ProductID int64) string {
-	db := GetReadDB(ctx)
-	ProjectInfo := gorm_model.ProjectInfo{}
-	err := db.Where("product_id = ?", ProductID).Find(&ProjectInfo).Error
-	if err != nil {
-		return ""
-	}
-	enterpriseID := ProjectInfo.EnterpriseID
-	return enterpriseID
-}
-
-func UpdateProduct(ctx context.Context, product gorm_model.YounggeeProduct) (*int64, error) {
-	db := GetReadDB(ctx)
-	err := db.Model(&product).Updates(product).Error
-	if err != nil {
-		return nil, err
-	}
-	return &product.ProductID, nil
-}
-
-func GetProductInfoBySelectionId(ctx context.Context, selectionId string) (*gorm_model.YounggeeProduct, error) {
-	db := GetReadDB(ctx)
-	productId := 0
-	err := db.Model(gorm_model.YounggeeSelectionInfo{}).Select("product_id").Where("selection_id = ?", selectionId).Find(&productId).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProductInfo] error query mysql, err:%+v", err)
-		return nil, err
-	}
-	productInfo := gorm_model.YounggeeProduct{}
-	err = db.Model(gorm_model.YounggeeProduct{}).Where("product_id = ?", productId).Find(&productInfo).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProductInfo] error query mysql, err:%+v", err)
-		return nil, err
-	}
-	return &productInfo, nil
-}
-
-func GetProductPhotoInfoBySelectionId(ctx context.Context, selectionId string) ([]*gorm_model.YounggeeProductPhoto, error) {
-	db := GetReadDB(ctx)
-	productId := 0
-	err := db.Model(gorm_model.YounggeeSelectionInfo{}).Select("product_id").Where("selection_id = ?", selectionId).Find(&productId).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProductInfo] error query mysql, err:%+v", err)
-		return nil, err
-	}
-	var productPhotoInfo []*gorm_model.YounggeeProductPhoto
-	err = db.Model(gorm_model.YounggeeProductPhoto{}).Where("product_id = ?", productId).Find(&productPhotoInfo).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProductInfo] error query mysql, err:%+v", err)
-		return nil, err
-	}
-	return productPhotoInfo, nil
-}
-
-func GetProductType(ctx context.Context, selectionId string) (*int, error) {
-	db := GetReadDB(ctx)
-	var productId int
-	err := db.Model(gorm_model.YounggeeSelectionInfo{}).Select("product_id").Where("selection_id = ?", selectionId).Find(&productId).Error
-	if err != nil || productId == 0 {
-		logrus.WithContext(ctx).Errorf("[GetProductType] error query mysql, err:%+v", err)
-		return nil, err
-	}
-	var productType int
-	err = db.Model(gorm_model.YounggeeProduct{}).Select("product_type").Where("product_id = ?", productId).Find(&productType).Error
-	if err != nil || productType == 0 {
-		logrus.WithContext(ctx).Errorf("[GetProductType] error query mysql, err:%+v", err)
-		return nil, err
-	}
-	return &productType, nil
-}
+package db
+
+import (
+	"context"
+	"github.com/caixw/lib.go/conv"
+	"github.com/sirupsen/logrus"
+	"gorm.io/gorm"
+	"strconv"
+	"youngee_m_api/model/gorm_model"
+)
+
+func CreateProduct(ctx context.Context, product gorm_model.YounggeeProduct) (*int64, error) {
+	db := GetReadDB(ctx)
+	err := db.Create(&product).Error
+	if err != nil {
+		return nil, err
+	}
+	return &product.ProductID, nil
+}
+
+func GetProductByID(ctx context.Context, productID int64) (*gorm_model.YounggeeProduct, error) {
+	db := GetReadDB(ctx)
+	product := &gorm_model.YounggeeProduct{}
+	err := db.First(&product, productID).Error
+	if err != nil {
+		if err == gorm.ErrRecordNotFound {
+			return nil, nil
+		} else {
+			return nil, err
+		}
+	}
+	return product, nil
+}
+
+func GetEnterpriseIDByUserID(ctx context.Context, UserId string) string {
+	db := GetReadDB(ctx)
+	enterpriseInfo := gorm_model.Enterprise{}
+	userId := conv.MustInt64(UserId, 0)
+	err := db.Where("user_id = ?", userId).Find(&enterpriseInfo).Error
+	if err != nil {
+		return ""
+	}
+	enterpriseID := enterpriseInfo.EnterpriseID
+	return enterpriseID
+}
+
+func GetUserIDByEnterpriseID(ctx context.Context, enterpriseId string) string {
+	db := GetReadDB(ctx)
+	enterpriseInfo := gorm_model.Enterprise{}
+	err := db.Where("enterprise_id = ?", enterpriseId).Find(&enterpriseInfo).Error
+	if err != nil {
+		return ""
+	}
+	enterpriseID := enterpriseInfo.UserID
+	return strconv.FormatInt(enterpriseID, 10)
+}
+
+func GetProductByEnterpriseID(ctx context.Context, enterpriseID string) ([]gorm_model.YounggeeProduct, error) {
+	db := GetReadDB(ctx)
+	var products []gorm_model.YounggeeProduct
+	err := db.Where("enterprise_id = ?", enterpriseID).Find(&products).Error
+	if err != nil {
+		return nil, err
+	}
+	return products, nil
+}
+
+func GetEnterpriseIDByProductID(ctx context.Context, ProductID int64) string {
+	db := GetReadDB(ctx)
+	ProjectInfo := gorm_model.ProjectInfo{}
+	err := db.Where("product_id = ?", ProductID).Find(&ProjectInfo).Error
+	if err != nil {
+		return ""
+	}
+	enterpriseID := ProjectInfo.EnterpriseID
+	return enterpriseID
+}
+
+func UpdateProduct(ctx context.Context, product gorm_model.YounggeeProduct) (*int64, error) {
+	db := GetReadDB(ctx)
+	err := db.Model(&product).Updates(product).Error
+	if err != nil {
+		return nil, err
+	}
+	return &product.ProductID, nil
+}
+
+func GetProductInfoBySelectionId(ctx context.Context, selectionId string) (*gorm_model.YounggeeProduct, error) {
+	db := GetReadDB(ctx)
+	productId := 0
+	err := db.Model(gorm_model.YounggeeSelectionInfo{}).Select("product_id").Where("selection_id = ?", selectionId).Find(&productId).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProductInfo] error query mysql, err:%+v", err)
+		return nil, err
+	}
+	productInfo := gorm_model.YounggeeProduct{}
+	err = db.Model(gorm_model.YounggeeProduct{}).Where("product_id = ?", productId).Find(&productInfo).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProductInfo] error query mysql, err:%+v", err)
+		return nil, err
+	}
+	return &productInfo, nil
+}
+
+func GetProductPhotoInfoBySelectionId(ctx context.Context, selectionId string) ([]*gorm_model.YounggeeProductPhoto, error) {
+	db := GetReadDB(ctx)
+	productId := 0
+	err := db.Model(gorm_model.YounggeeSelectionInfo{}).Select("product_id").Where("selection_id = ?", selectionId).Find(&productId).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProductInfo] error query mysql, err:%+v", err)
+		return nil, err
+	}
+	var productPhotoInfo []*gorm_model.YounggeeProductPhoto
+	err = db.Model(gorm_model.YounggeeProductPhoto{}).Where("product_id = ?", productId).Find(&productPhotoInfo).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProductInfo] error query mysql, err:%+v", err)
+		return nil, err
+	}
+	return productPhotoInfo, nil
+}
+
+func GetProductType(ctx context.Context, selectionId string) (*int, error) {
+	db := GetReadDB(ctx)
+	var productId int
+	err := db.Model(gorm_model.YounggeeSelectionInfo{}).Select("product_id").Where("selection_id = ?", selectionId).Find(&productId).Error
+	println("product_id: ", productId)
+	if err != nil || productId == 0 {
+		logrus.WithContext(ctx).Errorf("[GetProductType] error query mysql, err:%+v", err)
+		return nil, err
+	}
+	var productType int
+	err = db.Model(gorm_model.YounggeeProduct{}).Select("product_type").Where("product_id = ?", productId).Find(&productType).Error
+	println("product_type: ", productType)
+	if err != nil || productType == 0 {
+		logrus.WithContext(ctx).Errorf("[GetProductType] error query mysql, err:%+v", err)
+		return nil, err
+	}
+	return &productType, nil
+}

+ 447 - 446
db/project.go

@@ -1,446 +1,447 @@
-package db
-
-import (
-	"context"
-	"fmt"
-	"log"
-	"reflect"
-	"strconv"
-	"strings"
-	"time"
-	"youngee_m_api/consts"
-	"youngee_m_api/model/common_model"
-	"youngee_m_api/model/gorm_model"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/pack"
-	"youngee_m_api/util"
-
-	"github.com/caixw/lib.go/conv"
-	"github.com/sirupsen/logrus"
-	"gorm.io/gorm"
-)
-
-func GetFullProjectList(ctx context.Context, pageSize, pageNum int32, condition *common_model.ProjectCondition, projectType string) ([]*gorm_model.ProjectInfo, int64, error) {
-	db := GetReadDB(ctx)
-	if projectType == "2" {
-		db = db.Debug().Model(gorm_model.ProjectInfo{}).Where("project_type = 2")
-	} else {
-		db = db.Debug().Model(gorm_model.ProjectInfo{}).Where("project_type = 1")
-	}
-	// 根据Project条件过滤
-	conditionType := reflect.TypeOf(condition).Elem()
-	conditionValue := reflect.ValueOf(condition).Elem()
-	for i := 0; i < conditionType.NumField(); i++ {
-		field := conditionType.Field(i)
-		tag := field.Tag.Get("condition")
-		value := conditionValue.FieldByName(field.Name)
-		if tag == "project_status" && util.IsBlank(value) {
-			db = db.Where(fmt.Sprintf("project_status != 3"))
-			db = db.Where(fmt.Sprintf("project_status != 5"))
-			db = db.Where(fmt.Sprintf("project_status != 7"))
-		}
-		if !util.IsBlank(value) && tag != "updated_at" && tag != "project_name" && tag != "project_id" {
-			db = db.Debug().Where(fmt.Sprintf("%s = ?", tag), value.Interface())
-		}
-		if tag == "updated_at" && value.Interface() != "0" {
-			db = db.Where(fmt.Sprintf("updated_at like '%s%%'", value.Interface()))
-		}
-		if tag == "project_name" && !util.IsBlank(value) {
-			//db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
-			db = db.Where(fmt.Sprintf("project_name like '%%%s%%'", value.Interface()))
-		}
-		if tag == "project_id" && value.Interface() != "0" {
-			db = db.Debug().Where(fmt.Sprintf("%s = ?", tag), value.Interface())
-		}
-	}
-	// 查询总数
-	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 := pageSize
-	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 find, err:%+v", err)
-		return nil, 0, err
-	}
-	return fullProjects, total, nil
-}
-
-func GetProjectDetail(ctx context.Context, projectID string) (*gorm_model.ProjectInfo, error) {
-	db := GetReadDB(ctx)
-	var ProjectDetail *gorm_model.ProjectInfo
-	err := db.Where("project_id = ?", projectID).First(&ProjectDetail).Error
-	if err != nil {
-		if err == gorm.ErrRecordNotFound {
-			return nil, nil
-		} else {
-			return nil, err
-		}
-	}
-	return ProjectDetail, nil
-}
-
-func UpdateProjectStatus(ctx context.Context, projectId string, status int64) error {
-	db := GetReadDB(ctx)
-	t := time.Now()
-	err := db.Model(gorm_model.ProjectInfo{}).
-		Where("project_id = ?", projectId).Updates(gorm_model.ProjectInfo{
-		ProjectStatus: status,
-		PayAt:         &t,
-	}).Error
-	if err != nil {
-		log.Println("DB UpdateProjectStatus error :", err)
-		return err
-	}
-	return nil
-}
-
-func GetRecruitStrategys(ctx context.Context, ProjectID string) ([]gorm_model.RecruitStrategy, error) {
-	db := GetReadDB(ctx)
-	var RecruitStrategys []gorm_model.RecruitStrategy
-	err := db.Where("project_id=?", ProjectID).Find(&RecruitStrategys).Error
-	if err != nil {
-		return nil, err
-	}
-	return RecruitStrategys, nil
-}
-
-func GetProjectPhoto(ctx context.Context, ProjectID string) ([]gorm_model.ProjectPhoto, error) {
-	db := GetReadDB(ctx)
-	var ProjectPhoto []gorm_model.ProjectPhoto
-	err := db.Where("project_id=?", ProjectID).Find(&ProjectPhoto).Error
-	if err != nil {
-		return nil, err
-	}
-	return ProjectPhoto, nil
-}
-
-func UpdateProject(ctx context.Context, project gorm_model.ProjectInfo) (*string, error) {
-	db := GetReadDB(ctx)
-	err := db.Model(&project).Updates(project).Error
-	if err != nil {
-		return nil, err
-	}
-	return &project.ProjectID, nil
-}
-
-func ApproveProject(ctx context.Context, projectId string, isApprove int64) (error error, message string) {
-	db := GetReadDB(ctx)
-	projectInfo := gorm_model.ProjectInfo{}
-	db = db.Debug().Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).First(&projectInfo)
-	t := time.Now()
-	if isApprove == 1 && projectInfo.ProjectStatus == 2 {
-		err := db.Updates(gorm_model.ProjectInfo{
-			ProjectStatus: 4,
-			PassAt:        &t,
-		}).Error
-		message = "审核通过"
-		if err != nil {
-			logrus.Println("DB AutoUpdateStatus error :", err)
-			return err, ""
-		}
-	} else if isApprove == 2 && projectInfo.ProjectStatus == 2 {
-		err := db.Updates(gorm_model.ProjectInfo{
-			ProjectStatus: 8,
-			FinishAt:      &t,
-			FailReason:    2,
-		}).Error
-		message = "项目存在风险已禁止发布"
-		if err != nil {
-			logrus.Println("DB AutoUpdateStatus error :", err)
-			return err, ""
-		}
-	} else {
-		return nil, "操作失败"
-	}
-	return nil, message
-}
-
-func GetAllProject(ctx context.Context, pageSize, pageNum int32) ([]*http_model.GetAllProjectPreview, int64, error) {
-	db := GetReadDB(ctx)
-	db = db.Debug().Model(gorm_model.ProjectInfo{}).Where("project_status = 1 or project_status = 6")
-	db = db.Where("is_read = 0")
-	var allProjects []*http_model.GetAllProjectPreview
-	// 查询总数
-	var total int64
-	var fullProjects []*gorm_model.ProjectInfo
-	if err := db.Count(&total).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetAllProject] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	// 查询该页数据
-	limit := pageSize
-	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("[GetAllProject] error query mysql find, err:%+v", err)
-		return nil, 0, err
-	}
-	var EnterpriseIDs []string
-	for _, fullProject := range fullProjects {
-		EnterpriseIDs = append(EnterpriseIDs, fullProject.EnterpriseID)
-	}
-	EnterpriseIDs = util.RemoveStrRepByMap(EnterpriseIDs)
-	userMemo := map[string]string{}
-	phoneMemo := map[string]string{}
-	for _, EnterpriseID := range EnterpriseIDs {
-		userMemo[EnterpriseID] = GetUsernameEnterpriseID(ctx, EnterpriseID)
-	}
-	for _, EnterpriseID := range EnterpriseIDs {
-		phoneMemo[EnterpriseID] = GetPhoneByEnterpriseID(ctx, EnterpriseID)
-	}
-	for _, fullProject := range fullProjects {
-		allProject := new(http_model.GetAllProjectPreview)
-		allProject.ProjectUpdated = conv.MustString(fullProject.UpdatedAt, "")
-		allProject.ProjectStatus = conv.MustString(fullProject.ProjectStatus, "")
-		allProject.ProjectId = conv.MustString(fullProject.ProjectID, "")
-		allProject.EnterpriseID = fullProject.EnterpriseID
-		allProject.Username = userMemo[fullProject.EnterpriseID]
-		allProject.Phone = phoneMemo[fullProject.EnterpriseID]
-		allProjects = append(allProjects, allProject)
-	}
-	return allProjects, total, nil
-}
-
-// GetPhoneByEnterpriseID 根据企业ID查找用户联系方式
-func GetPhoneByEnterpriseID(ctx context.Context, enterpriseID string) string {
-	db := GetReadDB(ctx)
-	var Enterprise gorm_model.Enterprise
-	// 通过企业ID获得用户ID
-	db = db.Model([]gorm_model.Enterprise{}).Where("enterprise_id", enterpriseID).First(&Enterprise)
-	userId := Enterprise.UserID
-	db1 := GetReadDB(ctx)
-	var user gorm_model.YounggeeUser
-	db1 = db1.Model([]gorm_model.YounggeeUser{}).Where("id", userId).First(&user)
-	phone := user.Phone
-	return phone
-}
-
-// GetUsernameEnterpriseID 根据企业ID查找用户名称
-func GetUsernameEnterpriseID(ctx context.Context, enterpriseID string) string {
-	db := GetReadDB(ctx)
-	var Enterprise gorm_model.Enterprise
-	// 通过企业ID获得用户ID
-	db = db.Model([]gorm_model.Enterprise{}).Where("enterprise_id", enterpriseID).First(&Enterprise)
-	userId := Enterprise.UserID
-	db1 := GetReadDB(ctx)
-	var user gorm_model.YounggeeUser
-	db1 = db1.Model([]gorm_model.YounggeeUser{}).Where("id", userId).First(&user)
-	username := user.Username
-	return username
-}
-
-func GetProjectTaskList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TaskConditions) ([]*http_model.ProjectTaskInfo, int64, error) {
-	db := GetReadDB(ctx)
-	// 查询task表信息
-	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{})
-	// 根据Project条件过滤
-	conditionType := reflect.TypeOf(conditions).Elem()
-	conditionValue := reflect.ValueOf(conditions).Elem()
-	var platform_nickname string = ""
-	for i := 0; i < conditionType.NumField(); i++ {
-		field := conditionType.Field(i)
-		tag := field.Tag.Get("condition")
-		value := conditionValue.FieldByName(field.Name)
-		if !util.IsBlank(value) && tag != "platform_nickname" {
-			db = db.Debug().Where(fmt.Sprintf("%s = ?", tag), value.Interface())
-		} else if tag == "platform_nickname" {
-			platform_nickname = fmt.Sprintf("%v", value.Interface())
-			continue
-		}
-	}
-	var taskInfos []gorm_model.YoungeeTaskInfo
-	db = db.Model(gorm_model.YoungeeTaskInfo{})
-	// 查询总数
-	var totalTask int64
-	if err := db.Count(&totalTask).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	db.Order("task_id").Find(&taskInfos)
-
-	// 查询该页数据
-	limit := pageSize
-	offset := pageSize * pageNum // assert pageNum start with 0
-	err := db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-
-	var taskDatas []*http_model.ProjectTaskInfo
-	var newTaskDatas []*http_model.ProjectTaskInfo
-
-	taskDatas = pack.TaskAccountToTaskInfo(taskInfos)
-
-	for _, v := range taskDatas {
-		if platform_nickname == "" {
-			newTaskDatas = append(newTaskDatas, v)
-		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
-			newTaskDatas = append(newTaskDatas, v)
-		} else if strings.Contains(v.TaskID, platform_nickname) {
-			newTaskDatas = append(newTaskDatas, v)
-		} else {
-			totalTask--
-		}
-	}
-	return newTaskDatas, totalTask, nil
-}
-
-func CreateProject(ctx context.Context, projectInfo gorm_model.ProjectInfo) (string, error) {
-	db := GetWriteDB(ctx)
-	err := db.Create(&projectInfo).Error
-	if err != nil {
-		return "", err
-	}
-	return projectInfo.ProjectID, nil
-}
-
-func ProjectHandle(ctx context.Context, data http_model.ProjectHandleRequest) error {
-	err := ChangeProjectStatus(ctx, data.ProjectID, data.ProjectStatus)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[project] call ChangeProjectStatus error,err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-func ChangeProjectStatus(ctx context.Context, projectID string, projectStatus string) error {
-	db := GetReadDB(ctx)
-	projectInfo := gorm_model.ProjectInfo{}
-	if err := db.Debug().Model(&projectInfo).
-		Where("project_id = ?", projectID).
-		Updates(gorm_model.ProjectInfo{IsRead: 1}).
-		Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[ChangeProjectStatus] error query mysql total, err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-//// 取消拉黑
-//func unBlack(ctx context.Context, ID string) error {
-//	db := GetReadDB(ctx)
-//	talentInfo := gorm_model.YoungeeTalentInfo{}
-//	if err := db.Debug().Model(&talentInfo).
-//		Where("id = ?", ID).
-//		Updates(gorm_model.YoungeeTalentInfo{InBlacklist: 0}).
-//		Error; err != nil {
-//		logrus.WithContext(ctx).Errorf("[ChangeProjectStatus] error query mysql total, err:%+v", err)
-//		return err
-//	}
-//	return nil
-//}
-
-func GetProjectRecords(ctx context.Context, userId int64, pageSize, pageNum int32) (*http_model.ProjectRecordsData, error) {
-	db := GetReadDB(ctx)
-	enterpriseID := GetEnterpriseIDByUserId(ctx, userId)
-	var projectInfos []*gorm_model.ProjectInfo
-	db = db.Model(&gorm_model.ProjectInfo{}).Where("enterprise_id = ?", enterpriseID)
-	// 查询总数
-	var total int64
-	if err := db.Count(&total).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectRecords] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	// 查询该页数据
-	limit := pageSize
-	offset := pageSize * pageNum // assert pageNum start with 0
-	err := db.Order("updated_at desc").Limit(int(limit)).Offset(int(offset)).Find(&projectInfos).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectRecords] error query mysql limit, err:%+v", err)
-		return nil, err
-	}
-	var projectRecords []*http_model.ProjectRecordsPreview
-	for _, projectInfo := range projectInfos {
-		projectRecordsPreview := new(http_model.ProjectRecordsPreview)
-		projectRecordsPreview.ProjectID = projectInfo.ProjectID
-		projectRecordsPreview.ProjectName = projectInfo.ProjectName
-		projectRecordsPreview.ProjectType = consts.GetProjectType(projectInfo.ProjectType)
-		projectRecordsPreview.UpdatedAt = conv.MustString(projectInfo.UpdatedAt, "")[:19]
-		projectRecordsPreview.ProjectStatus = consts.GetProjectStatus(projectInfo.ProjectStatus)
-		projectRecords = append(projectRecords, projectRecordsPreview)
-	}
-	projectRecordsData := http_model.ProjectRecordsData{}
-	projectRecordsData.ProjectRecordsPreview = projectRecords
-	projectRecordsData.Total = strconv.FormatInt(total, 10)
-	return &projectRecordsData, nil
-}
-
-func SetProjectFinish(ctx context.Context, projectId string) error {
-	db := GetReadDB(ctx)
-	var finishedNum int64
-	var unfinishedNum int64
-	err1 := db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = 2 AND task_stage < 15", projectId).Count(&unfinishedNum).Error
-	if err1 != nil {
-		logrus.WithContext(ctx).Errorf("[Data db] Count YoungeeTaskInfo error,err:%+v", err1)
-		return err1
-	}
-	db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage >= 15", projectId).Count(&finishedNum)
-	if unfinishedNum == 0 && finishedNum != 0 {
-
-		// 2. 释放企业账户因项目冻结的资金
-		// 1) 计算剩余资金
-		db1 := GetReadDB(ctx)
-		var allPayment float64
-		var realPayment float64
-		err := db1.Model(gorm_model.YoungeeTaskInfo{}).
-			Where("project_id = ? and task_status = 2 and task_stage >= 15", projectId).Pluck("COALESCE(SUM(all_payment), 0) as allPayment", &allPayment).Error
-		if err != nil {
-			log.Println("DB GetAutoCaseCloseTask error in data:", err)
-			return err
-		}
-		err = db1.Model(gorm_model.YoungeeTaskInfo{}).Select("sum(real_payment) as realPayment").
-			Where("project_id = ? and task_status = 2 and task_stage >= 15", projectId).Pluck("COALESCE(SUM(real_payment), 0) as realPayment", &realPayment).Error
-		if err != nil {
-			log.Println("DB GetAutoCaseCloseTask error in data:", err)
-			return err
-		}
-		fmt.Println("企业应支付金额总计:", allPayment, "实际支付总计:", realPayment)
-		db2 := GetReadDB(ctx)
-		var enterpriseID int64
-		db2.Model(gorm_model.ProjectInfo{}).Select("enterprise_id").Where("project_id = ?", projectId).Find(&enterpriseID)
-		// 	2). 释放剩余资金
-		err = db1.Model(gorm_model.Enterprise{}).Where("enterprise_id = ?", enterpriseID).Updates(
-			map[string]interface{}{
-				"frozen_balance":    gorm.Expr("frozen_balance - ?", allPayment),
-				"balance":           gorm.Expr("balance - ?", realPayment),
-				"available_balance": gorm.Expr("available_balance + ?", allPayment-realPayment)}).Error
-		if err != nil {
-			log.Println("DB GetAutoCaseCloseTask error in data:", err)
-			return err
-		}
-		// 1. 更新项目状态为已结束
-		t := time.Now()
-		err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).
-			Updates(map[string]interface{}{"project_status": 10, "payment_amount": realPayment, "finish_at": &t}).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[Project db] Update ProjectInfo error,err:%+v", err)
-			return err
-		}
-	}
-	return nil
-}
-
-func SetSpecialProjectFinish(ctx context.Context, projectId string) error {
-	db := GetReadDB(ctx)
-	var finishedNum int64
-	var unfinishedNum int64
-	db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = 2 AND task_stage < 15", projectId).Count(&unfinishedNum)
-	db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage >= 15", projectId).Count(&finishedNum)
-	if unfinishedNum == 0 && finishedNum != 0 {
-		// 1. 更新项目状态为已结束
-		t := time.Now()
-		err := db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Updates(gorm_model.ProjectInfo{ProjectStatus: 10, FinishAt: &t}).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[Project db] Update ProjectInfo error,err:%+v", err)
-			return err
-		}
-	}
-	return nil
-}
+package db
+
+import (
+	"context"
+	"fmt"
+	"log"
+	"reflect"
+	"strconv"
+	"strings"
+	"time"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/common_model"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/pack"
+	"youngee_m_api/util"
+
+	"github.com/caixw/lib.go/conv"
+	"github.com/sirupsen/logrus"
+	"gorm.io/gorm"
+)
+
+func GetFullProjectList(ctx context.Context, pageSize, pageNum int32, condition *common_model.ProjectCondition, projectType string) ([]*gorm_model.ProjectInfo, int64, error) {
+	db := GetReadDB(ctx)
+	if projectType == "2" {
+		db = db.Debug().Model(gorm_model.ProjectInfo{}).Where("project_type = 2")
+	} else {
+		db = db.Debug().Model(gorm_model.ProjectInfo{}).Where("project_type = 1")
+	}
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(condition).Elem()
+	conditionValue := reflect.ValueOf(condition).Elem()
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if tag == "project_status" && util.IsBlank(value) {
+			db = db.Where(fmt.Sprintf("project_status != 3"))
+			db = db.Where(fmt.Sprintf("project_status != 5"))
+			db = db.Where(fmt.Sprintf("project_status != 7"))
+		}
+		if !util.IsBlank(value) && tag != "updated_at" && tag != "project_name" && tag != "project_id" {
+			db = db.Debug().Where(fmt.Sprintf("%s = ?", tag), value.Interface())
+		}
+		if tag == "updated_at" && value.Interface() != "0" {
+			db = db.Where(fmt.Sprintf("updated_at like '%s%%'", value.Interface()))
+		}
+		if tag == "project_name" && !util.IsBlank(value) {
+			//db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
+			db = db.Where(fmt.Sprintf("project_name like '%%%s%%'", value.Interface()))
+		}
+		if tag == "project_id" && value.Interface() != "0" {
+			db = db.Debug().Where(fmt.Sprintf("%s = ?", tag), value.Interface())
+		}
+	}
+	// 查询总数
+	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
+	}
+	println("total: ", total)
+	// 查询该页数据
+	limit := pageSize
+	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 find, err:%+v", err)
+		return nil, 0, err
+	}
+	return fullProjects, total, nil
+}
+
+func GetProjectDetail(ctx context.Context, projectID string) (*gorm_model.ProjectInfo, error) {
+	db := GetReadDB(ctx)
+	var ProjectDetail *gorm_model.ProjectInfo
+	err := db.Where("project_id = ?", projectID).First(&ProjectDetail).Error
+	if err != nil {
+		if err == gorm.ErrRecordNotFound {
+			return nil, nil
+		} else {
+			return nil, err
+		}
+	}
+	return ProjectDetail, nil
+}
+
+func UpdateProjectStatus(ctx context.Context, projectId string, status int64) error {
+	db := GetReadDB(ctx)
+	t := time.Now()
+	err := db.Model(gorm_model.ProjectInfo{}).
+		Where("project_id = ?", projectId).Updates(gorm_model.ProjectInfo{
+		ProjectStatus: status,
+		PayAt:         &t,
+	}).Error
+	if err != nil {
+		log.Println("DB UpdateProjectStatus error :", err)
+		return err
+	}
+	return nil
+}
+
+func GetRecruitStrategys(ctx context.Context, ProjectID string) ([]gorm_model.RecruitStrategy, error) {
+	db := GetReadDB(ctx)
+	var RecruitStrategys []gorm_model.RecruitStrategy
+	err := db.Where("project_id=?", ProjectID).Find(&RecruitStrategys).Error
+	if err != nil {
+		return nil, err
+	}
+	return RecruitStrategys, nil
+}
+
+func GetProjectPhoto(ctx context.Context, ProjectID string) ([]gorm_model.ProjectPhoto, error) {
+	db := GetReadDB(ctx)
+	var ProjectPhoto []gorm_model.ProjectPhoto
+	err := db.Where("project_id=?", ProjectID).Find(&ProjectPhoto).Error
+	if err != nil {
+		return nil, err
+	}
+	return ProjectPhoto, nil
+}
+
+func UpdateProject(ctx context.Context, project gorm_model.ProjectInfo) (*string, error) {
+	db := GetReadDB(ctx)
+	err := db.Model(&project).Updates(project).Error
+	if err != nil {
+		return nil, err
+	}
+	return &project.ProjectID, nil
+}
+
+func ApproveProject(ctx context.Context, projectId string, isApprove int64) (error error, message string) {
+	db := GetReadDB(ctx)
+	projectInfo := gorm_model.ProjectInfo{}
+	db = db.Debug().Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).First(&projectInfo)
+	t := time.Now()
+	if isApprove == 1 && projectInfo.ProjectStatus == 2 {
+		err := db.Updates(gorm_model.ProjectInfo{
+			ProjectStatus: 4,
+			PassAt:        &t,
+		}).Error
+		message = "审核通过"
+		if err != nil {
+			logrus.Println("DB AutoUpdateStatus error :", err)
+			return err, ""
+		}
+	} else if isApprove == 2 && projectInfo.ProjectStatus == 2 {
+		err := db.Updates(gorm_model.ProjectInfo{
+			ProjectStatus: 8,
+			FinishAt:      &t,
+			FailReason:    2,
+		}).Error
+		message = "项目存在风险已禁止发布"
+		if err != nil {
+			logrus.Println("DB AutoUpdateStatus error :", err)
+			return err, ""
+		}
+	} else {
+		return nil, "操作失败"
+	}
+	return nil, message
+}
+
+func GetAllProject(ctx context.Context, pageSize, pageNum int32) ([]*http_model.GetAllProjectPreview, int64, error) {
+	db := GetReadDB(ctx)
+	db = db.Debug().Model(gorm_model.ProjectInfo{}).Where("project_status = 1 or project_status = 6")
+	db = db.Where("is_read = 0")
+	var allProjects []*http_model.GetAllProjectPreview
+	// 查询总数
+	var total int64
+	var fullProjects []*gorm_model.ProjectInfo
+	if err := db.Count(&total).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetAllProject] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	// 查询该页数据
+	limit := pageSize
+	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("[GetAllProject] error query mysql find, err:%+v", err)
+		return nil, 0, err
+	}
+	var EnterpriseIDs []string
+	for _, fullProject := range fullProjects {
+		EnterpriseIDs = append(EnterpriseIDs, fullProject.EnterpriseID)
+	}
+	EnterpriseIDs = util.RemoveStrRepByMap(EnterpriseIDs)
+	userMemo := map[string]string{}
+	phoneMemo := map[string]string{}
+	for _, EnterpriseID := range EnterpriseIDs {
+		userMemo[EnterpriseID] = GetUsernameEnterpriseID(ctx, EnterpriseID)
+	}
+	for _, EnterpriseID := range EnterpriseIDs {
+		phoneMemo[EnterpriseID] = GetPhoneByEnterpriseID(ctx, EnterpriseID)
+	}
+	for _, fullProject := range fullProjects {
+		allProject := new(http_model.GetAllProjectPreview)
+		allProject.ProjectUpdated = conv.MustString(fullProject.UpdatedAt, "")
+		allProject.ProjectStatus = conv.MustString(fullProject.ProjectStatus, "")
+		allProject.ProjectId = conv.MustString(fullProject.ProjectID, "")
+		allProject.EnterpriseID = fullProject.EnterpriseID
+		allProject.Username = userMemo[fullProject.EnterpriseID]
+		allProject.Phone = phoneMemo[fullProject.EnterpriseID]
+		allProjects = append(allProjects, allProject)
+	}
+	return allProjects, total, nil
+}
+
+// GetPhoneByEnterpriseID 根据企业ID查找用户联系方式
+func GetPhoneByEnterpriseID(ctx context.Context, enterpriseID string) string {
+	db := GetReadDB(ctx)
+	var Enterprise gorm_model.Enterprise
+	// 通过企业ID获得用户ID
+	db = db.Model([]gorm_model.Enterprise{}).Where("enterprise_id", enterpriseID).First(&Enterprise)
+	userId := Enterprise.UserID
+	db1 := GetReadDB(ctx)
+	var user gorm_model.YounggeeUser
+	db1 = db1.Model([]gorm_model.YounggeeUser{}).Where("id", userId).First(&user)
+	phone := user.Phone
+	return phone
+}
+
+// GetUsernameEnterpriseID 根据企业ID查找用户名称
+func GetUsernameEnterpriseID(ctx context.Context, enterpriseID string) string {
+	db := GetReadDB(ctx)
+	var Enterprise gorm_model.Enterprise
+	// 通过企业ID获得用户ID
+	db = db.Model([]gorm_model.Enterprise{}).Where("enterprise_id", enterpriseID).First(&Enterprise)
+	userId := Enterprise.UserID
+	db1 := GetReadDB(ctx)
+	var user gorm_model.YounggeeUser
+	db1 = db1.Model([]gorm_model.YounggeeUser{}).Where("id", userId).First(&user)
+	username := user.Username
+	return username
+}
+
+func GetProjectTaskList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TaskConditions) ([]*http_model.ProjectTaskInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{})
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	var platform_nickname string = ""
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if !util.IsBlank(value) && tag != "platform_nickname" {
+			db = db.Debug().Where(fmt.Sprintf("%s = ?", tag), value.Interface())
+		} else if tag == "platform_nickname" {
+			platform_nickname = fmt.Sprintf("%v", value.Interface())
+			continue
+		}
+	}
+	var taskInfos []gorm_model.YoungeeTaskInfo
+	db = db.Model(gorm_model.YoungeeTaskInfo{})
+	// 查询总数
+	var totalTask int64
+	if err := db.Count(&totalTask).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	db.Order("task_id").Find(&taskInfos)
+
+	// 查询该页数据
+	limit := pageSize
+	offset := pageSize * pageNum // assert pageNum start with 0
+	err := db.Order("task_id").Limit(int(limit)).Offset(int(offset)).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+
+	var taskDatas []*http_model.ProjectTaskInfo
+	var newTaskDatas []*http_model.ProjectTaskInfo
+
+	taskDatas = pack.TaskAccountToTaskInfo(taskInfos)
+
+	for _, v := range taskDatas {
+		if platform_nickname == "" {
+			newTaskDatas = append(newTaskDatas, v)
+		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
+			newTaskDatas = append(newTaskDatas, v)
+		} else if strings.Contains(v.TaskID, platform_nickname) {
+			newTaskDatas = append(newTaskDatas, v)
+		} else {
+			totalTask--
+		}
+	}
+	return newTaskDatas, totalTask, nil
+}
+
+func CreateProject(ctx context.Context, projectInfo gorm_model.ProjectInfo) (string, error) {
+	db := GetWriteDB(ctx)
+	err := db.Create(&projectInfo).Error
+	if err != nil {
+		return "", err
+	}
+	return projectInfo.ProjectID, nil
+}
+
+func ProjectHandle(ctx context.Context, data http_model.ProjectHandleRequest) error {
+	err := ChangeProjectStatus(ctx, data.ProjectID, data.ProjectStatus)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[project] call ChangeProjectStatus error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+func ChangeProjectStatus(ctx context.Context, projectID string, projectStatus string) error {
+	db := GetReadDB(ctx)
+	projectInfo := gorm_model.ProjectInfo{}
+	if err := db.Debug().Model(&projectInfo).
+		Where("project_id = ?", projectID).
+		Updates(gorm_model.ProjectInfo{IsRead: 1}).
+		Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[ChangeProjectStatus] error query mysql total, err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+//// 取消拉黑
+//func unBlack(ctx context.Context, ID string) error {
+//	db := GetReadDB(ctx)
+//	talentInfo := gorm_model.YoungeeTalentInfo{}
+//	if err := db.Debug().Model(&talentInfo).
+//		Where("id = ?", ID).
+//		Updates(gorm_model.YoungeeTalentInfo{InBlacklist: 0}).
+//		Error; err != nil {
+//		logrus.WithContext(ctx).Errorf("[ChangeProjectStatus] error query mysql total, err:%+v", err)
+//		return err
+//	}
+//	return nil
+//}
+
+func GetProjectRecords(ctx context.Context, userId int64, pageSize, pageNum int32) (*http_model.ProjectRecordsData, error) {
+	db := GetReadDB(ctx)
+	enterpriseID := GetEnterpriseIDByUserId(ctx, userId)
+	var projectInfos []*gorm_model.ProjectInfo
+	db = db.Model(&gorm_model.ProjectInfo{}).Where("enterprise_id = ?", enterpriseID)
+	// 查询总数
+	var total int64
+	if err := db.Count(&total).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectRecords] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	// 查询该页数据
+	limit := pageSize
+	offset := pageSize * pageNum // assert pageNum start with 0
+	err := db.Order("updated_at desc").Limit(int(limit)).Offset(int(offset)).Find(&projectInfos).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectRecords] error query mysql limit, err:%+v", err)
+		return nil, err
+	}
+	var projectRecords []*http_model.ProjectRecordsPreview
+	for _, projectInfo := range projectInfos {
+		projectRecordsPreview := new(http_model.ProjectRecordsPreview)
+		projectRecordsPreview.ProjectID = projectInfo.ProjectID
+		projectRecordsPreview.ProjectName = projectInfo.ProjectName
+		projectRecordsPreview.ProjectType = consts.GetProjectType(projectInfo.ProjectType)
+		projectRecordsPreview.UpdatedAt = conv.MustString(projectInfo.UpdatedAt, "")[:19]
+		projectRecordsPreview.ProjectStatus = consts.GetProjectStatus(projectInfo.ProjectStatus)
+		projectRecords = append(projectRecords, projectRecordsPreview)
+	}
+	projectRecordsData := http_model.ProjectRecordsData{}
+	projectRecordsData.ProjectRecordsPreview = projectRecords
+	projectRecordsData.Total = strconv.FormatInt(total, 10)
+	return &projectRecordsData, nil
+}
+
+func SetProjectFinish(ctx context.Context, projectId string) error {
+	db := GetReadDB(ctx)
+	var finishedNum int64
+	var unfinishedNum int64
+	err1 := db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = 2 AND task_stage < 15", projectId).Count(&unfinishedNum).Error
+	if err1 != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Count YoungeeTaskInfo error,err:%+v", err1)
+		return err1
+	}
+	db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage >= 15", projectId).Count(&finishedNum)
+	if unfinishedNum == 0 && finishedNum != 0 {
+
+		// 2. 释放企业账户因项目冻结的资金
+		// 1) 计算剩余资金
+		db1 := GetReadDB(ctx)
+		var allPayment float64
+		var realPayment float64
+		err := db1.Model(gorm_model.YoungeeTaskInfo{}).
+			Where("project_id = ? and task_status = 2 and task_stage >= 15", projectId).Pluck("COALESCE(SUM(all_payment), 0) as allPayment", &allPayment).Error
+		if err != nil {
+			log.Println("DB GetAutoCaseCloseTask error in data:", err)
+			return err
+		}
+		err = db1.Model(gorm_model.YoungeeTaskInfo{}).Select("sum(real_payment) as realPayment").
+			Where("project_id = ? and task_status = 2 and task_stage >= 15", projectId).Pluck("COALESCE(SUM(real_payment), 0) as realPayment", &realPayment).Error
+		if err != nil {
+			log.Println("DB GetAutoCaseCloseTask error in data:", err)
+			return err
+		}
+		fmt.Println("企业应支付金额总计:", allPayment, "实际支付总计:", realPayment)
+		db2 := GetReadDB(ctx)
+		var enterpriseID int64
+		db2.Model(gorm_model.ProjectInfo{}).Select("enterprise_id").Where("project_id = ?", projectId).Find(&enterpriseID)
+		// 	2). 释放剩余资金
+		err = db1.Model(gorm_model.Enterprise{}).Where("enterprise_id = ?", enterpriseID).Updates(
+			map[string]interface{}{
+				"frozen_balance":    gorm.Expr("frozen_balance - ?", allPayment),
+				"balance":           gorm.Expr("balance - ?", realPayment),
+				"available_balance": gorm.Expr("available_balance + ?", allPayment-realPayment)}).Error
+		if err != nil {
+			log.Println("DB GetAutoCaseCloseTask error in data:", err)
+			return err
+		}
+		// 1. 更新项目状态为已结束
+		t := time.Now()
+		err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).
+			Updates(map[string]interface{}{"project_status": 10, "payment_amount": realPayment, "finish_at": &t}).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[Project db] Update ProjectInfo error,err:%+v", err)
+			return err
+		}
+	}
+	return nil
+}
+
+func SetSpecialProjectFinish(ctx context.Context, projectId string) error {
+	db := GetReadDB(ctx)
+	var finishedNum int64
+	var unfinishedNum int64
+	db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = 2 AND task_stage < 15", projectId).Count(&unfinishedNum)
+	db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage >= 15", projectId).Count(&finishedNum)
+	if unfinishedNum == 0 && finishedNum != 0 {
+		// 1. 更新项目状态为已结束
+		t := time.Now()
+		err := db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Updates(gorm_model.ProjectInfo{ProjectStatus: 10, FinishAt: &t}).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[Project db] Update ProjectInfo error,err:%+v", err)
+			return err
+		}
+	}
+	return nil
+}

+ 283 - 269
db/sectask.go

@@ -1,269 +1,283 @@
-package db
-
-import (
-	"context"
-	"errors"
-	"fmt"
-	"github.com/issue9/conv"
-	"github.com/sirupsen/logrus"
-	"github.com/tidwall/gjson"
-	"gorm.io/gorm"
-	"strings"
-	"time"
-	"youngee_m_api/model/gorm_model"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/pack"
-)
-
-func GetSecTaskById(ctx context.Context, secTaskId string) (*gorm_model.YounggeeSecTaskInfo, error) {
-	db := GetWriteDB(ctx)
-	secTaskInfo := gorm_model.YounggeeSecTaskInfo{}
-	whereCondition := gorm_model.YounggeeSecTaskInfo{TaskID: secTaskId}
-	result := db.Where(&whereCondition).First(&secTaskInfo)
-	if result.Error != nil {
-		if errors.Is(result.Error, gorm.ErrRecordNotFound) {
-			return nil, nil
-		} else {
-			return nil, result.Error
-		}
-	}
-	return &secTaskInfo, nil
-}
-
-func GetSecTaskList(ctx context.Context, selectionId string, taskStatus int, searchValue string, pageSize, pageNum int64) ([]*http_model.SecTaskInfo, int64, error) {
-	db := GetReadDB(ctx)
-	var taskStages []int
-	switch taskStatus {
-	case 3:
-		taskStages = []int{3}
-		break
-	case 4:
-		taskStages = []int{4, 6, 7, 8, 9, 10}
-		break
-	case 6:
-		taskStages = []int{6}
-		break
-	case 7:
-		taskStages = []int{7, 8, 9, 10}
-		break
-	case 9:
-		taskStages = []int{9}
-		break
-	case 10:
-		taskStages = []int{10}
-		break
-	}
-	db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and task_stage in ?", selectionId, taskStages)
-
-	// 查询总数
-	var total int64
-	var secTaskInfoList []*gorm_model.YounggeeSecTaskInfo
-	if err := db.Count(&total).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetSelectionList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	// 查询该页数据
-	limit := pageSize
-	offset := pageSize * (pageNum - 1) // assert pageNum start with 0
-	err := db.Order("create_date desc").Limit(int(limit)).Offset(int(offset)).Find(&secTaskInfoList).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetSelectionList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-
-	fmt.Println("secTaskInfoList:", secTaskInfoList)
-	newSecTaskInfoList := pack.GormSecTaskListToHttpSecTaskList(secTaskInfoList)
-	fmt.Println("newSecTaskInfoList:", newSecTaskInfoList)
-
-	for i, secTask := range newSecTaskInfoList {
-		newSecTaskInfoList[i].DetailAddr = GetRegion(ctx, secTask.RegionCode) + secTask.DetailAddr
-	}
-	var resSecTaskInfoList []*http_model.SecTaskInfo
-	if searchValue != "" {
-		for _, v := range newSecTaskInfoList {
-			if strings.Contains(v.SecTaskId, searchValue) {
-				resSecTaskInfoList = append(resSecTaskInfoList, v)
-			} else if strings.Contains(v.PlatformNickname, searchValue) {
-				resSecTaskInfoList = append(resSecTaskInfoList, v)
-			} else {
-				total--
-			}
-		}
-	} else {
-		resSecTaskInfoList = newSecTaskInfoList
-	}
-	fmt.Println("resSecTaskInfoList: ", resSecTaskInfoList)
-	return resSecTaskInfoList, total, nil
-}
-
-func PassSecTaskCoop(ctx context.Context, selectionId string, taskIds []string) (bool, error) {
-	db := GetWriteDB(ctx)
-	// 1. 校验
-	var count int64
-	fmt.Println("task_ids: ", taskIds)
-	err := db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Count(&count).Error
-
-	fmt.Println("count: ", count)
-	if err != nil {
-		return false, err
-	}
-	if int64(len(taskIds)) == 0 || count != int64(len(taskIds)) {
-		return false, errors.New("任务id有误")
-	}
-
-	// 2. 查询任务对应达人id(用于生成达人消息)
-	var talentIds []string
-	err = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ?", taskIds).Select("talent_id").Find(&talentIds).Error
-	if err != nil {
-		return false, err
-	}
-	// 3. 查询任务对应选品名称(用于生成达人消息)
-	var selection gorm_model.YounggeeSelectionInfo
-	err = db.Model(gorm_model.YounggeeSelectionInfo{}).Where("selection_id = ?", selectionId).Find(&selection).Error
-	if err != nil {
-		return false, err
-	}
-
-	err = db.Transaction(func(tx *gorm.DB) error {
-		// 2. 修改任务状态和任务阶段
-		// 若选品不提供样品,则直接跳转执行阶段,否则进入发货阶段
-		if selection.SampleMode == 3 {
-			updateData := gorm_model.YounggeeSecTaskInfo{
-				TaskStatus:       2,
-				TaskStage:        8,
-				SelectDate:       time.Now(),
-				LogisticsStatus:  3,
-				AssignmentStatus: 1,
-			}
-			err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Updates(updateData).Error
-			if err != nil {
-				return err
-			}
-		} else {
-			updateData := gorm_model.YounggeeSecTaskInfo{
-				TaskStatus:      2,
-				TaskStage:       6,
-				SelectDate:      time.Now(),
-				LogisticsStatus: 1,
-			}
-			err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Updates(updateData).Error
-			if err != nil {
-				return err
-			}
-		}
-		// 3. 生成达人消息
-		for _, talendId := range talentIds {
-			err = CreateMessage(ctx, 1, 1, talendId, selection.SelectionName)
-			if err != nil {
-				return err
-			}
-		}
-		// 返回 nil 提交事务
-		return nil
-	})
-	if err != nil {
-		return false, err
-	}
-	return true, nil
-}
-
-func RefuseSecTaskCoop(ctx context.Context, taskIds []string) (bool, error) {
-	db := GetWriteDB(ctx)
-	// 1. 校验
-	var count int64
-	err := db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Count(&count).Error
-	if err != nil {
-		return false, err
-	}
-	if count != int64(len(taskIds)) {
-		return false, errors.New("任务id有误")
-	}
-
-	// 查询任务对应达人id
-	var talentIds []string
-	err = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ?", taskIds).Select("talent_id").Find(&talentIds).Error
-	if err != nil {
-		return false, err
-	}
-
-	err = db.Transaction(func(tx *gorm.DB) error {
-		// 2. 修改任务状态和任务阶段
-		updateData := gorm_model.YounggeeSecTaskInfo{
-			TaskStatus:     3,
-			TaskStage:      5,
-			CompleteDate:   time.Now(),
-			CompleteStatus: 3,
-		}
-		err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Updates(updateData).Error
-		if err != nil {
-			return err
-		}
-
-		// 返回 nil 提交事务
-		return nil
-	})
-	if err != nil {
-		return false, err
-	}
-	return true, nil
-}
-
-func UpdateSecTask(ctx context.Context, updateData gorm_model.YounggeeSecTaskInfo) (bool, error) {
-	db := GetWriteDB(ctx)
-	whereCondition := gorm_model.YounggeeSecTaskInfo{
-		TaskID: updateData.TaskID,
-	}
-	err := db.Where(whereCondition).Updates(&updateData).Error
-	if err != nil {
-		return false, err
-	}
-	return true, nil
-}
-
-func GetSecTaskSettleList(ctx context.Context, secTaskList []*http_model.SecTaskInfo, selectionId string, taskStatus int) ([]*http_model.SecTaskInfo, error) {
-	db := GetWriteDB(ctx)
-	whereCondition := gorm_model.YounggeeSelectionInfo{
-		SelectionID: selectionId,
-	}
-	selectionInfo := gorm_model.YounggeeSelectionInfo{}
-	err := db.Model(gorm_model.YounggeeSelectionInfo{}).Where(whereCondition).Scan(&selectionInfo).Error
-	if err != nil {
-		return nil, err
-	}
-
-	// 获取返现金额、悬赏金额
-	fmt.Println("selectionInfo.ProductSnap: ", selectionInfo.ProductSnap)
-	price := conv.MustString(gjson.Get(selectionInfo.ProductSnap, "ProductPrice"), "")
-	for i, _ := range secTaskList {
-		secTaskList[i].TaskReward = selectionInfo.TaskReward
-		secTaskList[i].ReturnMoney = price
-	}
-
-	// 获取作业信息
-	var taskIds []string
-	taskMap := make(map[string]*http_model.SecTaskInfo)
-	for _, secTask := range secTaskList {
-		taskIds = append(taskIds, secTask.SecTaskId)
-		taskMap[secTask.SecTaskId] = secTask
-	}
-
-	var assignmentInfos []gorm_model.YounggeeAssignmentInfo
-	err = db.Model(gorm_model.YounggeeAssignmentInfo{}).Where("task_id IN ?", taskIds).Find(&assignmentInfos).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	assignmentMap := make(map[string]gorm_model.YounggeeAssignmentInfo)
-	for _, assignmentInfo := range assignmentInfos {
-		assignmentMap[assignmentInfo.TaskID] = assignmentInfo
-	}
-	// 融合信息
-	for i, secTask := range secTaskList {
-		taskID := secTask.SecTaskId
-		secTaskList[i].AssignmentLink = assignmentMap[taskID].LinkUrl
-		secTaskList[i].DataScreenshot = assignmentMap[taskID].PhotoUrl
-		secTaskList[i].CreateDate = conv.MustString(assignmentMap[taskID].CreateAt, "")
-	}
-
-	return secTaskList, nil
-}
+package db
+
+import (
+	"context"
+	"errors"
+	"fmt"
+	"github.com/issue9/conv"
+	"github.com/sirupsen/logrus"
+	"github.com/tidwall/gjson"
+	"gorm.io/gorm"
+	"strings"
+	"time"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/pack"
+)
+
+func GetSecTaskById(ctx context.Context, secTaskId string) (*gorm_model.YounggeeSecTaskInfo, error) {
+	db := GetWriteDB(ctx)
+	secTaskInfo := gorm_model.YounggeeSecTaskInfo{}
+	whereCondition := gorm_model.YounggeeSecTaskInfo{TaskID: secTaskId}
+	result := db.Where(&whereCondition).First(&secTaskInfo)
+	if result.Error != nil {
+		if errors.Is(result.Error, gorm.ErrRecordNotFound) {
+			return nil, nil
+		} else {
+			return nil, result.Error
+		}
+	}
+	return &secTaskInfo, nil
+}
+
+func GetSecTaskList(ctx context.Context, selectionId string, taskStatus int, searchValue string, pageSize, pageNum int64, taskStage int) ([]*http_model.SecTaskInfo, int64, error) {
+	db := GetReadDB(ctx)
+	//var taskStages []int
+	/*
+		switch taskStatus {
+		case 1:
+			//hhh = []int{3}
+			println("case 1")
+			break
+					case 4:
+					taskStages = []int{4, 6, 7, 8, 9, 10}
+					break
+				case 6:
+					taskStages = []int{6}
+					break
+				case 7:
+					taskStages = []int{7, 8, 9, 10}
+					break
+				case 9:
+					taskStages = []int{9}
+					break
+				case 10:
+					taskStages = []int{10}
+					break
+
+		}
+	*/
+	//println("taskStage: ", taskStages)
+	if taskStage == 7 || taskStage == 6 {
+		println("if")
+		db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and task_stage = ?", selectionId, taskStage)
+	} else {
+		println("else")
+		db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and task_status = ?", selectionId, taskStatus)
+	}
+
+	// 查询总数
+	var total int64
+	var secTaskInfoList []*gorm_model.YounggeeSecTaskInfo
+	if err := db.Count(&total).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetSelectionList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	println("total ", total)
+	// 查询该页数据
+	limit := pageSize
+	offset := pageSize * (pageNum - 1) // assert pageNum start with 0
+	err := db.Order("create_date desc").Limit(int(limit)).Offset(int(offset)).Find(&secTaskInfoList).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetSelectionList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+
+	fmt.Println("secTaskInfoList:", secTaskInfoList)
+	newSecTaskInfoList := pack.GormSecTaskListToHttpSecTaskList(secTaskInfoList)
+	fmt.Println("newSecTaskInfoList:", newSecTaskInfoList)
+
+	for i, secTask := range newSecTaskInfoList {
+		newSecTaskInfoList[i].DetailAddr = GetRegion(ctx, secTask.RegionCode) + secTask.DetailAddr
+	}
+	var resSecTaskInfoList []*http_model.SecTaskInfo
+	if searchValue != "" {
+		for _, v := range newSecTaskInfoList {
+			if strings.Contains(v.SecTaskId, searchValue) {
+				resSecTaskInfoList = append(resSecTaskInfoList, v)
+			} else if strings.Contains(v.PlatformNickname, searchValue) {
+				resSecTaskInfoList = append(resSecTaskInfoList, v)
+			} else {
+				total--
+			}
+		}
+	} else {
+		resSecTaskInfoList = newSecTaskInfoList
+	}
+	fmt.Println("resSecTaskInfoList: ", resSecTaskInfoList)
+	return resSecTaskInfoList, total, nil
+}
+
+func PassSecTaskCoop(ctx context.Context, selectionId string, taskIds []string) (bool, error) {
+	db := GetWriteDB(ctx)
+	// 1. 校验
+	var count int64
+	//fmt.Println("task_ids: ", taskIds)
+	//println(reflect.TypeOf(taskIds[0]))'
+	//fmt.Printf(taskIds[0])
+	err := db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Count(&count).Error
+
+	fmt.Println("count: ", count)
+	if err != nil {
+		return false, err
+	}
+	if int64(len(taskIds)) == 0 || count != int64(len(taskIds)) {
+		return false, errors.New("任务id有误")
+	}
+
+	// 2. 查询任务对应达人id(用于生成达人消息)
+	var talentIds []string
+	err = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ?", taskIds).Select("talent_id").Find(&talentIds).Error
+	if err != nil {
+		return false, err
+	}
+	// 3. 查询任务对应选品名称(用于生成达人消息)
+	var selection gorm_model.YounggeeSelectionInfo
+	err = db.Model(gorm_model.YounggeeSelectionInfo{}).Where("selection_id = ?", selectionId).Find(&selection).Error
+	if err != nil {
+		return false, err
+	}
+
+	err = db.Transaction(func(tx *gorm.DB) error {
+		// 2. 修改任务状态和任务阶段
+		// 若选品不提供样品,则直接跳转执行阶段,否则进入发货阶段
+		if selection.SampleMode == 3 {
+			updateData := gorm_model.YounggeeSecTaskInfo{
+				TaskStatus:       2,
+				TaskStage:        8,
+				SelectDate:       time.Now(),
+				LogisticsStatus:  3,
+				AssignmentStatus: 1,
+			}
+			err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Updates(updateData).Error
+			if err != nil {
+				return err
+			}
+		} else {
+			updateData := gorm_model.YounggeeSecTaskInfo{
+				TaskStatus:      2,
+				TaskStage:       6,
+				SelectDate:      time.Now(),
+				LogisticsStatus: 1,
+			}
+			err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Updates(updateData).Error
+			if err != nil {
+				return err
+			}
+		}
+		// 3. 生成达人消息
+		for _, talendId := range talentIds {
+			err = CreateMessage(ctx, 1, 1, talendId, selection.SelectionName)
+			if err != nil {
+				return err
+			}
+		}
+		// 返回 nil 提交事务
+		return nil
+	})
+	if err != nil {
+		return false, err
+	}
+	return true, nil
+}
+
+func RefuseSecTaskCoop(ctx context.Context, taskIds []string) (bool, error) {
+	db := GetWriteDB(ctx)
+	// 1. 校验
+	var count int64
+	err := db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Count(&count).Error
+	if err != nil {
+		return false, err
+	}
+	if count != int64(len(taskIds)) {
+		return false, errors.New("任务id有误")
+	}
+
+	// 查询任务对应达人id
+	var talentIds []string
+	err = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ?", taskIds).Select("talent_id").Find(&talentIds).Error
+	if err != nil {
+		return false, err
+	}
+
+	err = db.Transaction(func(tx *gorm.DB) error {
+		// 2. 修改任务状态和任务阶段
+		updateData := gorm_model.YounggeeSecTaskInfo{
+			TaskStatus:     3,
+			TaskStage:      5,
+			CompleteDate:   time.Now(),
+			CompleteStatus: 3,
+		}
+		err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Updates(updateData).Error
+		if err != nil {
+			return err
+		}
+
+		// 返回 nil 提交事务
+		return nil
+	})
+	if err != nil {
+		return false, err
+	}
+	return true, nil
+}
+
+func UpdateSecTask(ctx context.Context, updateData gorm_model.YounggeeSecTaskInfo) (bool, error) {
+	db := GetWriteDB(ctx)
+	whereCondition := gorm_model.YounggeeSecTaskInfo{
+		TaskID: updateData.TaskID,
+	}
+	err := db.Where(whereCondition).Updates(&updateData).Error
+	if err != nil {
+		return false, err
+	}
+	return true, nil
+}
+
+func GetSecTaskSettleList(ctx context.Context, secTaskList []*http_model.SecTaskInfo, selectionId string, taskStatus int) ([]*http_model.SecTaskInfo, error) {
+	db := GetWriteDB(ctx)
+	whereCondition := gorm_model.YounggeeSelectionInfo{
+		SelectionID: selectionId,
+	}
+	selectionInfo := gorm_model.YounggeeSelectionInfo{}
+	err := db.Model(gorm_model.YounggeeSelectionInfo{}).Where(whereCondition).Scan(&selectionInfo).Error
+	if err != nil {
+		return nil, err
+	}
+
+	// 获取返现金额、悬赏金额
+	fmt.Println("selectionInfo.ProductSnap: ", selectionInfo.ProductSnap)
+	price := conv.MustString(gjson.Get(selectionInfo.ProductSnap, "ProductPrice"), "")
+	for i, _ := range secTaskList {
+		secTaskList[i].TaskReward = selectionInfo.TaskReward
+		secTaskList[i].ReturnMoney = price
+	}
+
+	// 获取作业信息
+	var taskIds []string
+	taskMap := make(map[string]*http_model.SecTaskInfo)
+	for _, secTask := range secTaskList {
+		taskIds = append(taskIds, secTask.SecTaskId)
+		taskMap[secTask.SecTaskId] = secTask
+	}
+
+	var assignmentInfos []gorm_model.YounggeeAssignmentInfo
+	err = db.Model(gorm_model.YounggeeAssignmentInfo{}).Where("task_id IN ?", taskIds).Find(&assignmentInfos).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	assignmentMap := make(map[string]gorm_model.YounggeeAssignmentInfo)
+	for _, assignmentInfo := range assignmentInfos {
+		assignmentMap[assignmentInfo.TaskID] = assignmentInfo
+	}
+	// 融合信息
+	for i, secTask := range secTaskList {
+		taskID := secTask.SecTaskId
+		secTaskList[i].AssignmentLink = assignmentMap[taskID].LinkUrl
+		secTaskList[i].DataScreenshot = assignmentMap[taskID].PhotoUrl
+		secTaskList[i].CreateDate = conv.MustString(assignmentMap[taskID].CreateAt, "")
+	}
+
+	return secTaskList, nil
+}

+ 64 - 61
handler/PassSecTaskCoop.go

@@ -1,61 +1,64 @@
-package handler
-
-import (
-	"github.com/gin-gonic/gin"
-	"github.com/sirupsen/logrus"
-	"youngee_m_api/consts"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/service"
-	"youngee_m_api/util"
-)
-
-func WrapPassSecTaskCoopHandler(ctx *gin.Context) {
-	handler := newPassSecTaskCoopHandler(ctx)
-	BaseRun(handler)
-}
-
-type PassSecTaskCoop struct {
-	ctx  *gin.Context
-	req  *http_model.PassSecTaskCoopRequest
-	resp *http_model.CommonResponse
-}
-
-func (c PassSecTaskCoop) getContext() *gin.Context {
-	return c.ctx
-}
-
-func (c PassSecTaskCoop) getResponse() interface{} {
-	return c.resp
-}
-
-func (c PassSecTaskCoop) getRequest() interface{} {
-	return c.req
-}
-
-func (c PassSecTaskCoop) run() {
-	data := http_model.PassSecTaskCoopRequest{}
-	data = *c.req
-	//auth := middleware.GetSessionAuth(c.ctx)
-	//enterpriseID := auth.EnterpriseID
-	res, err := service.SelectionTask.PassCoop(c.ctx, data)
-	if err != nil {
-		logrus.Errorf("[PassSecTaskCoop] call PassSecTaskCoop err:%+v\n", err)
-		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
-		logrus.Info("PassSecTaskCoop fail,req:%+v", c.req)
-		return
-	}
-	c.resp.Message = "成功合作选品任务"
-	c.resp.Data = res
-}
-
-func (c PassSecTaskCoop) checkParam() error {
-	return nil
-}
-
-func newPassSecTaskCoopHandler(ctx *gin.Context) *PassSecTaskCoop {
-	return &PassSecTaskCoop{
-		ctx:  ctx,
-		req:  http_model.NewPassSecTaskCoopRequest(),
-		resp: http_model.NewPassSecTaskCoopResponse(),
-	}
-}
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+)
+
+func WrapPassSecTaskCoopHandler(ctx *gin.Context) {
+	handler := newPassSecTaskCoopHandler(ctx)
+	BaseRun(handler)
+}
+
+type PassSecTaskCoop struct {
+	ctx  *gin.Context
+	req  *http_model.PassSecTaskCoopRequest
+	resp *http_model.CommonResponse
+}
+
+func (c PassSecTaskCoop) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c PassSecTaskCoop) getResponse() interface{} {
+	return c.resp
+}
+
+func (c PassSecTaskCoop) getRequest() interface{} {
+	return c.req
+}
+
+func (c PassSecTaskCoop) run() {
+	data := http_model.PassSecTaskCoopRequest{}
+
+	data = *c.req
+	//println("TaskIds", data.TaskIds)
+	//auth := middleware.GetSessionAuth(c.ctx)
+	//enterpriseID := auth.EnterpriseID
+
+	res, err := service.SelectionTask.PassCoop(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[PassSecTaskCoop] call PassSecTaskCoop err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("PassSecTaskCoop fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功合作选品任务"
+	c.resp.Data = res
+}
+
+func (c PassSecTaskCoop) checkParam() error {
+	return nil
+}
+
+func newPassSecTaskCoopHandler(ctx *gin.Context) *PassSecTaskCoop {
+	return &PassSecTaskCoop{
+		ctx:  ctx,
+		req:  http_model.NewPassSecTaskCoopRequest(),
+		resp: http_model.NewPassSecTaskCoopResponse(),
+	}
+}

+ 53 - 52
model/http_model/GetSecTaskListRequest.go

@@ -1,52 +1,53 @@
-package http_model
-
-import "time"
-
-type GetSecTaskListRequest struct {
-	PageSize      int64  `json:"page_size"`
-	PageNum       int64  `json:"page_num"`
-	SelectionId   string `json:"selection_id"`
-	SecTaskStatus int    `json:"sec_task_status"`
-	SearchValue   string `json:"search_value"`
-	Type          int    `json:"type"` // 查询类型,1、2、3分别表示确定达人查询、发货管理查询、结算管理查询
-}
-
-type GetSecTaskListData struct {
-	SecTaskList []*SecTaskInfo `json:"sec_task_list"`
-	Total       string         `json:"total"`
-}
-
-type SecTaskInfo struct {
-	SecTaskId             string    `json:"sec_task_id"`
-	PlatformNickname      string    `json:"platform_nickname"`     // 帐号昵称
-	FansCount             string    `json:"fans_count"`            // 粉丝数
-	HomePageCaptureUrl    string    `json:"home_page_capture_url"` // 主页截图链接
-	HomePageUrl           string    `json:"home_page_url"`         // 主页链接
-	RegionCode            int       `json:"region_code"`
-	DetailAddr            string    `json:"detail_addr"`            // 物流信息
-	CompanyName           string    `json:"company_name"`           // 物流公司
-	LogisticsNumber       string    `json:"logistics_number"`       // 物流单号
-	ExplorestoreStarttime time.Time `json:"explorestore_starttime"` // 线下探店-探店开始时间
-	ExplorestoreEndtime   time.Time `json:"explorestore_endtime"`   // 线下探店-探店结束时间
-	ExplorestorePeriod    string    `json:"explorestore_period"`    // 线下探店-探店持续时间
-	DataScreenshot        string    `json:"data_screenshot"`        // 数据截图
-	AssignmentLink        string    `json:"assignment_link"`        // 作业链接
-	ReturnMoney           string    `json:"return_money"`           // 返现
-	TaskReward            string    `json:"task_reward"`            // 悬赏金
-	IsPayReward           int       `json:"is_pay_reward"`          // 是否给悬赏金
-	IsPayPayment          int       `json:"is_pay_payment"`         // 是否返现
-	CreateDate            string    `json:"create_date"`            // 创建时间
-	SelectDate            string    `json:"select_date"`            // 反选时间
-	DeliveryDate          string    `json:"delivery_date"`          // 发货时间
-	CompleteDate          string    `json:"complete_date"`          // 结算时间
-}
-
-func NewGetSecTaskListRequest() *GetSecTaskListRequest {
-	return new(GetSecTaskListRequest)
-}
-
-func NewGetSecTaskListResponse() *CommonResponse {
-	resp := new(CommonResponse)
-	resp.Data = new(GetSecTaskListData)
-	return resp
-}
+package http_model
+
+import "time"
+
+type GetSecTaskListRequest struct {
+	PageSize      int64  `json:"page_size"`
+	PageNum       int64  `json:"page_num"`
+	SelectionId   string `json:"selection_id"`
+	SecTaskStatus int    `json:"sec_task_status"`
+	SearchValue   string `json:"search_value"`
+	Type          int    `json:"type"` // 查询类型,1、2、3分别表示确定达人查询、发货管理查询、结算管理查询
+	TaskStage     int    `json:"sec_task_stage"`
+}
+
+type GetSecTaskListData struct {
+	SecTaskList []*SecTaskInfo `json:"sec_task_list"`
+	Total       string         `json:"total"`
+}
+
+type SecTaskInfo struct {
+	SecTaskId             string    `json:"sec_task_id"`
+	PlatformNickname      string    `json:"platform_nickname"`     // 帐号昵称
+	FansCount             string    `json:"fans_count"`            // 粉丝数
+	HomePageCaptureUrl    string    `json:"home_page_capture_url"` // 主页截图链接
+	HomePageUrl           string    `json:"home_page_url"`         // 主页链接
+	RegionCode            int       `json:"region_code"`
+	DetailAddr            string    `json:"detail_addr"`            // 物流信息
+	CompanyName           string    `json:"company_name"`           // 物流公司
+	LogisticsNumber       string    `json:"logistics_number"`       // 物流单号
+	ExplorestoreStarttime time.Time `json:"explorestore_starttime"` // 线下探店-探店开始时间
+	ExplorestoreEndtime   time.Time `json:"explorestore_endtime"`   // 线下探店-探店结束时间
+	ExplorestorePeriod    string    `json:"explorestore_period"`    // 线下探店-探店持续时间
+	DataScreenshot        string    `json:"data_screenshot"`        // 数据截图
+	AssignmentLink        string    `json:"assignment_link"`        // 作业链接
+	ReturnMoney           string    `json:"return_money"`           // 返现
+	TaskReward            string    `json:"task_reward"`            // 悬赏金
+	IsPayReward           int       `json:"is_pay_reward"`          // 是否给悬赏金
+	IsPayPayment          int       `json:"is_pay_payment"`         // 是否返现
+	CreateDate            string    `json:"create_date"`            // 创建时间
+	SelectDate            string    `json:"select_date"`            // 反选时间
+	DeliveryDate          string    `json:"delivery_date"`          // 发货时间
+	CompleteDate          string    `json:"complete_date"`          // 结算时间
+}
+
+func NewGetSecTaskListRequest() *GetSecTaskListRequest {
+	return new(GetSecTaskListRequest)
+}
+
+func NewGetSecTaskListResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetSecTaskListData)
+	return resp
+}

+ 245 - 242
service/sec_task.go

@@ -1,242 +1,245 @@
-package service
-
-import (
-	"context"
-	"encoding/json"
-	"errors"
-	"fmt"
-	"github.com/issue9/conv"
-	"github.com/sirupsen/logrus"
-	"strconv"
-	"time"
-	"youngee_m_api/db"
-	"youngee_m_api/model/gorm_model"
-	"youngee_m_api/model/http_model"
-)
-
-var SelectionTask *selectionTask
-
-type selectionTask struct {
-}
-
-func (*selectionTask) GetList(ctx context.Context, request http_model.GetSecTaskListRequest) (*http_model.GetSecTaskListData, error) {
-	// sec_task:任务id、帐号昵称、粉丝数、收货地址、主页截图、主页链接、确认时间、申请时间、结算时间
-	// youngee_task_logistics: 物流公司、物流单号、发货时间、探店时间
-	// younggee_assignment_info:数据截图、作业链接
-	// selection_info: 返现金额、悬赏金额
-	// 1. 根据选品任务阶段、账号昵称or任务id查询任务基本信息(包括任务id、账号昵称、粉丝数、主页截图、主页链接、申请时间)
-	secTaskList, total, err := db.GetSecTaskList(ctx, request.SelectionId, request.SecTaskStatus, request.SearchValue, request.PageSize, request.PageNum)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskList error,err:%+v", err)
-		return nil, err
-	}
-
-	// 2. 根据不同查询类型查询补充信息
-	switch request.Type {
-	case 1: // 确定达人查询
-		// 确定达人不需要额外信息
-		break
-	case 2: // 发货管理查询 youngee_task_logistics
-		//发货管理根据任务阶段和商品类型查询物流信息
-		// 查询商品类型
-		product, err := db.GetProductType(ctx, request.SelectionId)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[sectask_service service] call GetAllSelection error,err:%+v", err)
-			return nil, err
-		}
-		secTaskList, err = db.GetSecTaskLogisticsList(ctx, secTaskList, request.SecTaskStatus, *product)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskLogisticsList error,err:%+v", err)
-			return nil, err
-		}
-		break
-	case 3: // 结算管理查询 younggee_assignment_info
-		secTaskList, err = db.GetSecTaskSettleList(ctx, secTaskList, request.SelectionId, request.SecTaskStatus)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskSettleList error,err:%+v", err)
-			return nil, err
-		}
-		break
-	default: // 参数有误
-		break
-	}
-
-	selectionListData := http_model.GetSecTaskListData{
-		Total:       conv.MustString(total, ""),
-		SecTaskList: secTaskList,
-	}
-
-	return &selectionListData, nil
-}
-
-func (*selectionTask) PassCoop(ctx context.Context, request http_model.PassSecTaskCoopRequest) (*http_model.PassSecTaskCoopData, error) {
-
-	_, err := db.PassSecTaskCoop(ctx, request.SelectionId, request.TaskIds)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call PassCoop error,err:%+v", err)
-		return nil, err
-	}
-
-	selectionListData := http_model.PassSecTaskCoopData{}
-
-	return &selectionListData, nil
-}
-
-func (*selectionTask) RefuseCoop(ctx context.Context, request http_model.RefuseSecTaskCoopRequest) (*http_model.RefuseSecTaskCoopData, error) {
-
-	_, err := db.RefuseSecTaskCoop(ctx, request.TaskIds)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call RefuseCoop error,err:%+v", err)
-		return nil, err
-	}
-
-	selectionListData := http_model.RefuseSecTaskCoopData{}
-
-	return &selectionListData, nil
-}
-
-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)
-		return nil, err
-	}
-	// 2. 校验:任务是否正常(处于待结算阶段);企业账户可用余额是否充足;若返现则校验达人是否垫付买样;若有悬赏金额则校验是否为悬赏任务
-	// 1) 校验企业账户余额是否充足
-	entersize, err := db.GetEnterpriseByEnterpriseID(ctx, entersizeId)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetEnterpriseByEnterpriseID error,err:%+v", err)
-		return nil, err
-	}
-	if entersize.AvailableBalance < payMoney {
-		return nil, errors.New("账户余额不足")
-	}
-	// 2) 若返现则校验达人是否垫付买样;若有悬赏金额则校验是否为悬赏任务
-	selection, err := db.GetSelectionById(ctx, request.SelectionID)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSelectionById error,err:%+v", err)
-		return nil, err
-	}
-	if selection.SampleMode != 2 && request.IsReturnMoney == 1 {
-		return nil, errors.New("免费领养任务不能返样品钱")
-	}
-	if selection.TaskMode != 1 && request.IsPayReward == 1 {
-		return nil, errors.New("非悬赏任务不能支付悬赏")
-	}
-	// 3) 校验任务是否处于待结算阶段
-	secTask, err := db.GetSecTaskById(ctx, request.TaskID)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskById error,err:%+v", err)
-		return nil, err
-	}
-	if secTask.TaskStage != 9 && secTask.TaskStatus != 2 {
-		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.UpdateSelectionSettleMoney(ctx, selection.SelectionID, payMoney)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call UpdateSelectionSettleMoney error,err:%+v", err)
-		return nil, err
-	}
-
-	// 4. 更新选品任务阶段
-	updateSecTaskData := gorm_model.YounggeeSecTaskInfo{
-		TaskID:           request.TaskID,
-		TaskStage:        10,
-		AssignmentStatus: 5,
-		IsPayReward:      request.IsPayReward,
-		IsPayPayment:     request.IsReturnMoney,
-		CompleteDate:     time.Now(),
-	}
-	_, err = db.UpdateSecTask(ctx, updateSecTaskData)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call UpdateSecTask error,err:%+v", err)
-		return nil, err
-	}
-
-	// 5. 添加任务日志和达人消息
-	err = db.CreateTaskLog(ctx, request.TaskID, "结算时间")
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateTaskLog error,err:%+v", err)
-		return nil, err
-	}
-
-	err = db.CreateMessageBySecTaskId(ctx, 5, 1, request.TaskID)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateMessageBySecTaskId error,err:%+v", err)
-		return nil, err
-	}
-
-	// 6. 创建选品收益记录
-	// 返现收益
-	t := time.Now()
-	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:       &t,
-			WithdrawAt:     nil,
-		}
-		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:       &t,
-			WithdrawAt:     nil,
-		}
-		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{}
-
-	return &settleSecTaskData, nil
-}
+package service
+
+import (
+	"context"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"github.com/issue9/conv"
+	"github.com/sirupsen/logrus"
+	"strconv"
+	"time"
+	"youngee_m_api/db"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+)
+
+var SelectionTask *selectionTask
+
+type selectionTask struct {
+}
+
+func (*selectionTask) GetList(ctx context.Context, request http_model.GetSecTaskListRequest) (*http_model.GetSecTaskListData, error) {
+	// sec_task:任务id、帐号昵称、粉丝数、收货地址、主页截图、主页链接、确认时间、申请时间、结算时间
+	// youngee_task_logistics: 物流公司、物流单号、发货时间、探店时间
+	// younggee_assignment_info:数据截图、作业链接
+	// selection_info: 返现金额、悬赏金额
+	// 1. 根据选品任务阶段、账号昵称or任务id查询任务基本信息(包括任务id、账号昵称、粉丝数、主页截图、主页链接、申请时间)
+	println("查找信息:", request.SelectionId, request.SecTaskStatus)
+	secTaskList, total, err := db.GetSecTaskList(ctx, request.SelectionId, request.SecTaskStatus, request.SearchValue, request.PageSize, request.PageNum, request.TaskStage)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskList error,err:%+v", err)
+		return nil, err
+	}
+
+	// 2. 根据不同查询类型查询补充信息
+	switch request.Type {
+	case 1: // 确定达人查询
+		// 确定达人不需要额外信息
+		break
+	case 2: // 发货管理查询 youngee_task_logistics
+		// 发货管理根据任务阶段和商品类型查询物流信息
+		// 查询商品类型
+		product, err := db.GetProductType(ctx, request.SelectionId)
+		println("product: ", product)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[sectask_service service] call GetAllSelection error,err:%+v", err)
+			return nil, err
+		}
+
+		secTaskList, err = db.GetSecTaskLogisticsList(ctx, secTaskList, request.TaskStage, *product)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskLogisticsList error,err:%+v", err)
+			return nil, err
+		}
+		break
+	case 3: // 结算管理查询 younggee_assignment_info
+		secTaskList, err = db.GetSecTaskSettleList(ctx, secTaskList, request.SelectionId, request.SecTaskStatus)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskSettleList error,err:%+v", err)
+			return nil, err
+		}
+		break
+	default: // 参数有误
+		break
+	}
+
+	selectionListData := http_model.GetSecTaskListData{
+		Total:       conv.MustString(total, ""),
+		SecTaskList: secTaskList,
+	}
+
+	return &selectionListData, nil
+}
+
+func (*selectionTask) PassCoop(ctx context.Context, request http_model.PassSecTaskCoopRequest) (*http_model.PassSecTaskCoopData, error) {
+	println("TaskIDs: ", request.TaskIds)
+	_, err := db.PassSecTaskCoop(ctx, request.SelectionId, request.TaskIds)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call PassCoop error,err:%+v", err)
+		return nil, err
+	}
+
+	selectionListData := http_model.PassSecTaskCoopData{}
+
+	return &selectionListData, nil
+}
+
+func (*selectionTask) RefuseCoop(ctx context.Context, request http_model.RefuseSecTaskCoopRequest) (*http_model.RefuseSecTaskCoopData, error) {
+
+	_, err := db.RefuseSecTaskCoop(ctx, request.TaskIds)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call RefuseCoop error,err:%+v", err)
+		return nil, err
+	}
+
+	selectionListData := http_model.RefuseSecTaskCoopData{}
+
+	return &selectionListData, nil
+}
+
+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)
+		return nil, err
+	}
+	// 2. 校验:任务是否正常(处于待结算阶段);企业账户可用余额是否充足;若返现则校验达人是否垫付买样;若有悬赏金额则校验是否为悬赏任务
+	// 1) 校验企业账户余额是否充足
+	entersize, err := db.GetEnterpriseByEnterpriseID(ctx, entersizeId)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetEnterpriseByEnterpriseID error,err:%+v", err)
+		return nil, err
+	}
+	if entersize.AvailableBalance < payMoney {
+		return nil, errors.New("账户余额不足")
+	}
+	// 2) 若返现则校验达人是否垫付买样;若有悬赏金额则校验是否为悬赏任务
+	selection, err := db.GetSelectionById(ctx, request.SelectionID)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSelectionById error,err:%+v", err)
+		return nil, err
+	}
+	if selection.SampleMode != 2 && request.IsReturnMoney == 1 {
+		return nil, errors.New("免费领养任务不能返样品钱")
+	}
+	if selection.TaskMode != 1 && request.IsPayReward == 1 {
+		return nil, errors.New("非悬赏任务不能支付悬赏")
+	}
+	// 3) 校验任务是否处于待结算阶段
+	secTask, err := db.GetSecTaskById(ctx, request.TaskID)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskById error,err:%+v", err)
+		return nil, err
+	}
+	if secTask.TaskStage != 9 && secTask.TaskStatus != 2 {
+		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.UpdateSelectionSettleMoney(ctx, selection.SelectionID, payMoney)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call UpdateSelectionSettleMoney error,err:%+v", err)
+		return nil, err
+	}
+
+	// 4. 更新选品任务阶段
+	updateSecTaskData := gorm_model.YounggeeSecTaskInfo{
+		TaskID:           request.TaskID,
+		TaskStage:        10,
+		AssignmentStatus: 5,
+		IsPayReward:      request.IsPayReward,
+		IsPayPayment:     request.IsReturnMoney,
+		CompleteDate:     time.Now(),
+	}
+	_, err = db.UpdateSecTask(ctx, updateSecTaskData)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call UpdateSecTask error,err:%+v", err)
+		return nil, err
+	}
+
+	// 5. 添加任务日志和达人消息
+	err = db.CreateTaskLog(ctx, request.TaskID, "结算时间")
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateTaskLog error,err:%+v", err)
+		return nil, err
+	}
+
+	err = db.CreateMessageBySecTaskId(ctx, 5, 1, request.TaskID)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask_service service] call CreateMessageBySecTaskId error,err:%+v", err)
+		return nil, err
+	}
+
+	// 6. 创建选品收益记录
+	// 返现收益
+	t := time.Now()
+	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:       &t,
+			WithdrawAt:     nil,
+		}
+		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:       &t,
+			WithdrawAt:     nil,
+		}
+		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{}
+
+	return &settleSecTaskData, nil
+}