Xingyu Xian 9 月之前
父节点
当前提交
935e252daa
共有 42 个文件被更改,包括 3436 次插入2240 次删除
  1. 63 0
      db/free_strategy.go
  2. 111 111
      db/message.go
  3. 416 401
      db/number_info.go
  4. 1 1
      db/operate.go
  5. 38 0
      db/reward_strategy.go
  6. 152 44
      db/sectask.go
  7. 19 2
      db/selection.go
  8. 28 0
      db/talent.go
  9. 384 384
      db/task.go
  10. 94 23
      go.mod
  11. 220 218
      go.sum
  12. 66 60
      handler/CreateSecTaskLogistics.go
  13. 6 0
      handler/PassSecTaskCoop.go
  14. 61 61
      handler/SettleSecTask.go
  15. 55 55
      handler/getEnterpriseIds.go
  16. 52 0
      handler/productKuaishouFind.go
  17. 90 89
      handler/product_create.go
  18. 55 55
      handler/product_find.go
  19. 59 58
      handler/selection_detail.go
  20. 62 60
      handler/selection_update.go
  21. 19 0
      model/gorm_model/free_strategy.go
  22. 15 0
      model/gorm_model/platform_kuaishou_user_info.go
  23. 28 24
      model/gorm_model/product.go
  24. 14 0
      model/gorm_model/reward_strategy.go
  25. 1 0
      model/gorm_model/selection_info.go
  26. 51 44
      model/gorm_model/selection_task_info.go
  27. 25 24
      model/http_model/CreateSecTaskLogisticsRequest.go
  28. 9 0
      model/http_model/GetSecTaskListRequest.go
  29. 28 26
      model/http_model/SelectionDetailRequest.go
  30. 23 23
      model/http_model/SettleSecTaskRequest.go
  31. 37 20
      model/http_model/UpdateSelectionRequest.go
  32. 38 33
      model/http_model/product_create.go
  33. 38 33
      model/http_model/product_find.go
  34. 42 0
      model/http_model/product_kuaishou_query.go
  35. 46 39
      pack/sec_task_list.go
  36. 62 61
      pack/selection.go
  37. 8 4
      route/init.go
  38. 123 8
      service/auto_task.go
  39. 189 152
      service/product.go
  40. 386 7
      service/sec_task.go
  41. 126 112
      service/sec_task_logistics.go
  42. 96 8
      service/selection.go

+ 63 - 0
db/free_strategy.go

@@ -0,0 +1,63 @@
+package db
+
+import (
+	"context"
+	"fmt"
+	"github.com/sirupsen/logrus"
+	"youngee_m_api/model/gorm_model"
+)
+
+func CreateFreeStrategy(ctx context.Context, FreeStrategys []gorm_model.FreeStrategy) error {
+	db := GetReadDB(ctx)
+	fmt.Println("FreeStrategys: ", FreeStrategys)
+	err := db.Create(&FreeStrategys).Error
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
+func DeleteFreeStrategyBySelectionId(ctx context.Context, SelectionId string) error {
+	db := GetReadDB(ctx)
+	err := db.Where("selection_id = ?", SelectionId).Delete(&gorm_model.FreeStrategy{}).Error
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
+func GetFreeStrategyBySelectionId(ctx context.Context, SelectionId string) ([]*gorm_model.FreeStrategy, error) {
+	db := GetReadDB(ctx)
+	var FreeStrategys []*gorm_model.FreeStrategy
+	err := db.Model(gorm_model.FreeStrategy{}).Where("selection_id = ?", SelectionId).Find(&FreeStrategys).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetFreeStrategyBySelectionId] error query, err:%+v", err)
+		return nil, err
+	}
+	return FreeStrategys, nil
+}
+
+func UpdateFreeStrategyNum(ctx context.Context, StrategyInfo gorm_model.FreeStrategy) error {
+	db := GetReadDB(ctx)
+	fmt.Println("将要更新的免费领样策略: ", StrategyInfo.SelectionId)
+	whereCondition := gorm_model.FreeStrategy{SelectionId: StrategyInfo.SelectionId, StrategyId: StrategyInfo.StrategyId}
+	newStrategyInfo := make(map[string]interface{})
+	// newStrategyInfo["FreeStrategyId"] = StrategyInfo.FreeStrategyId
+	// newStrategyInfo["StrategyId"] = StrategyInfo.StrategyId
+	// newStrategyInfo["SelectionId"] = StrategyInfo.SelectionId
+	//newStrategyInfo["FansNum"] = StrategyInfo.FansNum
+	//newStrategyInfo["SaleNum"] = StrategyInfo.SaleNum
+	// newStrategyInfo["StrategyStatus"] = StrategyInfo.StrategyStatus
+	newStrategyInfo["EnrollNum"] = StrategyInfo.EnrollNum
+	newStrategyInfo["ChooseNum"] = StrategyInfo.ChooseNum
+	newStrategyInfo["BeforeDeliveryNum"] = StrategyInfo.BeforeDeliveryNum
+	newStrategyInfo["DeliveryNum"] = StrategyInfo.DeliveryNum
+	newStrategyInfo["AfterDeliveryNum"] = StrategyInfo.AfterDeliveryNum
+	fmt.Println("Map后的Strategy: ", newStrategyInfo)
+	err := db.Model(gorm_model.FreeStrategy{}).Where(whereCondition).Updates(newStrategyInfo).Error
+	fmt.Println(err)
+	if err != nil {
+		return err
+	}
+	return nil
+}

+ 111 - 111
db/message.go

@@ -1,111 +1,111 @@
-package db
-
-import (
-	"context"
-	"fmt"
-	"time"
-	"youngee_m_api/model/gorm_model"
-
-	"github.com/sirupsen/logrus"
-)
-
-// 通过secTaskId查询talentId,插入新消息
-func CreateMessageBySecTaskId(ctx context.Context, messageId int, messageType int, taskId string) error {
-	db := GetReadDB(ctx)
-	taskInfo := gorm_model.YounggeeSecTaskInfo{}
-	err := db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id = ?", taskId).Find(&taskInfo).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error read mysql, err:%+v", err)
-		return err
-	}
-
-	db1 := GetReadDB(ctx)
-	var projectName string
-	err = db1.Model(gorm_model.YounggeeSelectionInfo{}).Select("selection_name").Where("selection_id = ?", taskInfo.SelectionID).Find(&projectName).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error read mysql, err:%+v", err)
-		return err
-	}
-	messageInfo := gorm_model.YounggeeMessageInfo{
-		MessageID:   messageId,
-		MessageType: messageType,
-		CreatedAt:   time.Now(),
-		TalentID:    taskInfo.TalentID,
-		ProjectName: projectName,
-		IsReaded:    0,
-		IsDeleted:   0,
-	}
-	db2 := GetReadDB(ctx)
-	err = db2.Model(gorm_model.YounggeeMessageInfo{}).Create(&messageInfo).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error create mysql, err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-// 通过taskId查询talentId,插入新消息
-func CreateMessageByTaskId(ctx context.Context, messageId int, messageType int, taskId string) error {
-	db := GetReadDB(ctx)
-	taskInfo := gorm_model.YoungeeTaskInfo{}
-	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Find(&taskInfo).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error read mysql, err:%+v", err)
-		return err
-	}
-
-	db1 := GetReadDB(ctx)
-	var projectName string
-	err = db1.Model(gorm_model.ProjectInfo{}).Select("project_name").Where("project_id = ?", taskInfo.ProjectId).Find(&projectName).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error read mysql, err:%+v", err)
-		return err
-	}
-	fmt.Printf("project_name: %+v, project_id: %+v\n", projectName, taskInfo.ProjectId)
-	messageInfo := gorm_model.YounggeeMessageInfo{
-		MessageID:   messageId,
-		MessageType: messageType,
-		CreatedAt:   time.Now(),
-		TalentID:    taskInfo.TalentId,
-		ProjectName: projectName,
-		IsReaded:    0,
-		IsDeleted:   0,
-	}
-	db2 := GetReadDB(ctx)
-	err = db2.Model(gorm_model.YounggeeMessageInfo{}).Create(&messageInfo).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error create mysql, err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-// 插入新消息
-func CreateMessage(ctx context.Context, messageId int, messageType int, talentId string, projectId string) error {
-	db := GetReadDB(ctx)
-	var projectName string
-	if projectId != "" {
-		err := db.Model(gorm_model.ProjectInfo{}).Select("project_name").Where("project_id = ?", projectId).Find(&projectName).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error read mysql, err:%+v", err)
-			return err
-		}
-	}
-
-	messageInfo := gorm_model.YounggeeMessageInfo{
-		MessageID:   messageId,
-		MessageType: messageType,
-		CreatedAt:   time.Now(),
-		TalentID:    talentId,
-		ProjectName: projectName,
-		IsReaded:    0,
-		IsDeleted:   0,
-	}
-	db1 := GetReadDB(ctx)
-	err := db1.Model(gorm_model.YounggeeMessageInfo{}).Create(&messageInfo).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error create mysql, err:%+v", err)
-		return err
-	}
-	return nil
-}
+package db
+
+import (
+	"context"
+	"fmt"
+	"time"
+	"youngee_m_api/model/gorm_model"
+
+	"github.com/sirupsen/logrus"
+)
+
+// CreateMessageBySecTaskId 通过secTaskId查询talentId,插入新消息
+func CreateMessageBySecTaskId(ctx context.Context, messageId int, messageType int, taskId string) error {
+	db := GetReadDB(ctx)
+	taskInfo := gorm_model.YounggeeSecTaskInfo{}
+	err := db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id = ?", taskId).Find(&taskInfo).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error read mysql, err:%+v", err)
+		return err
+	}
+
+	db1 := GetReadDB(ctx)
+	var projectName string
+	err = db1.Model(gorm_model.YounggeeSelectionInfo{}).Select("selection_name").Where("selection_id = ?", taskInfo.SelectionID).Find(&projectName).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error read mysql, err:%+v", err)
+		return err
+	}
+	messageInfo := gorm_model.YounggeeMessageInfo{
+		MessageID:   messageId,
+		MessageType: messageType,
+		CreatedAt:   time.Now(),
+		TalentID:    taskInfo.TalentID,
+		ProjectName: projectName,
+		IsReaded:    0,
+		IsDeleted:   0,
+	}
+	db2 := GetReadDB(ctx)
+	err = db2.Model(gorm_model.YounggeeMessageInfo{}).Create(&messageInfo).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error create mysql, err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// 通过taskId查询talentId,插入新消息
+func CreateMessageByTaskId(ctx context.Context, messageId int, messageType int, taskId string) error {
+	db := GetReadDB(ctx)
+	taskInfo := gorm_model.YoungeeTaskInfo{}
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Find(&taskInfo).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error read mysql, err:%+v", err)
+		return err
+	}
+
+	db1 := GetReadDB(ctx)
+	var projectName string
+	err = db1.Model(gorm_model.ProjectInfo{}).Select("project_name").Where("project_id = ?", taskInfo.ProjectId).Find(&projectName).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error read mysql, err:%+v", err)
+		return err
+	}
+	fmt.Printf("project_name: %+v, project_id: %+v\n", projectName, taskInfo.ProjectId)
+	messageInfo := gorm_model.YounggeeMessageInfo{
+		MessageID:   messageId,
+		MessageType: messageType,
+		CreatedAt:   time.Now(),
+		TalentID:    taskInfo.TalentId,
+		ProjectName: projectName,
+		IsReaded:    0,
+		IsDeleted:   0,
+	}
+	db2 := GetReadDB(ctx)
+	err = db2.Model(gorm_model.YounggeeMessageInfo{}).Create(&messageInfo).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error create mysql, err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// 插入新消息
+func CreateMessage(ctx context.Context, messageId int, messageType int, talentId string, projectId string) error {
+	db := GetReadDB(ctx)
+	var projectName string
+	if projectId != "" {
+		err := db.Model(gorm_model.ProjectInfo{}).Select("project_name").Where("project_id = ?", projectId).Find(&projectName).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error read mysql, err:%+v", err)
+			return err
+		}
+	}
+
+	messageInfo := gorm_model.YounggeeMessageInfo{
+		MessageID:   messageId,
+		MessageType: messageType,
+		CreatedAt:   time.Now(),
+		TalentID:    talentId,
+		ProjectName: projectName,
+		IsReaded:    0,
+		IsDeleted:   0,
+	}
+	db1 := GetReadDB(ctx)
+	err := db1.Model(gorm_model.YounggeeMessageInfo{}).Create(&messageInfo).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error create mysql, err:%+v", err)
+		return err
+	}
+	return nil
+}

+ 416 - 401
db/number_info.go

@@ -1,401 +1,416 @@
-package db
-
-import (
-	"context"
-	"fmt"
-	"strconv"
-	"time"
-	"youngee_m_api/model/gorm_model"
-	"youngee_m_api/model/http_model"
-
-	"github.com/sirupsen/logrus"
-)
-
-func GetLogisticsNumberInfo(ctx context.Context, projectId string, strategyIds []int64) (*http_model.GetLogisticsNumberInfoData, error) {
-	var LogisticsNumberInfoDataList http_model.GetLogisticsNumberInfoData
-	for _, strategyId := range strategyIds {
-		var LogisticsNumberInfoData http_model.LogisticsNumberInfo
-		LogisticsNumberInfoData.StrategyId = strategyId
-		db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err := db.Where("logistics_status = 1").Count(&LogisticsNumberInfoData.UndeliveredNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err = db.Where("logistics_status = 2").Count(&LogisticsNumberInfoData.DeliveredNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err = db.Where("logistics_status = 3").Count(&LogisticsNumberInfoData.SignedNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err = db.Count(&LogisticsNumberInfoData.DeliverNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		LogisticsNumberInfoDataList.LogisticsNumberInfoList = append(LogisticsNumberInfoDataList.LogisticsNumberInfoList, &LogisticsNumberInfoData)
-	}
-	return &LogisticsNumberInfoDataList, nil
-}
-
-func GetReviewNumberInfo(ctx context.Context, projectId string, strategyIds []int64) (*http_model.GetReviewNumberInfoData, error) {
-	var ReviewNumberInfoDataList http_model.GetReviewNumberInfoData
-
-	for _, strategyId := range strategyIds {
-		var ReviewNumberInfoData http_model.ReviewNumberInfo
-		ReviewNumberInfoData.StrategyId = strategyId
-		db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err := db.Where("task_stage = 8").Count(&ReviewNumberInfoData.ScriptUnreviewNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err = db.Where("task_stage > 8").Count(&ReviewNumberInfoData.ScriptPassedNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err = db.Where("task_stage = 10").Count(&ReviewNumberInfoData.SketchUnreviewNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err = db.Where("task_stage > 10").Count(&ReviewNumberInfoData.SketchPassedNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err = db.Count(&ReviewNumberInfoData.ReviewNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-
-		ReviewNumberInfoDataList.ReviewNumberInfoList = append(ReviewNumberInfoDataList.ReviewNumberInfoList, &ReviewNumberInfoData)
-	}
-	return &ReviewNumberInfoDataList, nil
-}
-
-func GetLinkNumberInfo(ctx context.Context, projectId string, strategyIds []int64) (*http_model.GetLinkNumberInfoData, error) {
-	var LinkNumberInfoDataList http_model.GetLinkNumberInfoData
-
-	for _, strategyId := range strategyIds {
-		var LinkNumberInfoData http_model.LinkNumberInfo
-		LinkNumberInfoData.StrategyId = strategyId
-		db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err := db.Where("task_stage = 12").Count(&LinkNumberInfoData.LinkUnreviewNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err = db.Where("task_stage > 12").Count(&LinkNumberInfoData.LinkPassedNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err = db.Count(&LinkNumberInfoData.LinkNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-
-		LinkNumberInfoDataList.LinkNumberInfoList = append(LinkNumberInfoDataList.LinkNumberInfoList, &LinkNumberInfoData)
-	}
-	return &LinkNumberInfoDataList, nil
-}
-
-func GetDataNumberInfo(ctx context.Context, projectId string, strategyIds []int64) (*http_model.GetDataNumberInfoData, error) {
-	var DataNumberInfoDataList http_model.GetDataNumberInfoData
-
-	for _, strategyId := range strategyIds {
-		var DataNumberInfoData http_model.DataNumberInfo
-		DataNumberInfoData.StrategyId = strategyId
-		db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err := db.Where("task_stage = 14").Count(&DataNumberInfoData.DataUnreviewNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err = db.Where("task_stage = 15").Count(&DataNumberInfoData.DataPassedNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2 and task_stage < 16", projectId, strategyId)
-		err = db.Count(&DataNumberInfoData.DataNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-
-		DataNumberInfoDataList.DataNumberInfoList = append(DataNumberInfoDataList.DataNumberInfoList, &DataNumberInfoData)
-	}
-	return &DataNumberInfoDataList, nil
-}
-
-func GetDefaultNumberInfo(ctx context.Context, projectId string, strategyIds []int64) (*http_model.GetDefaultNumberInfoData, error) {
-	var DefaultNumberInfoDataList http_model.GetDefaultNumberInfoData
-	for _, strategyId := range strategyIds {
-		var DefaultNumberInfoData http_model.DefaultNumberInfo
-		DefaultNumberInfoData.StrategyId = strategyId
-		db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err := db.Where("complete_status <> 4").Count(&DefaultNumberInfoData.ShouldFinishNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err = db.Where("cur_default_type = 1").Count(&DefaultNumberInfoData.UnuploadScriptNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err = db.Where("cur_default_type = 3").Count(&DefaultNumberInfoData.UnuploadSketchNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err = db.Where("cur_default_type = 5").Count(&DefaultNumberInfoData.UnuploadLinkNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err = db.Where("cur_default_type = 7").Count(&DefaultNumberInfoData.UnuploadDataNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err = db.Where("complete_status = 4").Count(&DefaultNumberInfoData.TerminateNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-
-		DefaultNumberInfoDataList.DefaultNumberInfoList = append(DefaultNumberInfoDataList.DefaultNumberInfoList, &DefaultNumberInfoData)
-	}
-	return &DefaultNumberInfoDataList, nil
-}
-
-func GetFinishNumberInfo(ctx context.Context, projectId string, strategyIds []int64) (*http_model.GetFinishNumberInfoData, error) {
-	var FinishNumberInfoDataList http_model.GetFinishNumberInfoData
-
-	for _, strategyId := range strategyIds {
-		var FinishNumberInfoData http_model.FinishNumberInfo
-		FinishNumberInfoData.StrategyId = strategyId
-		db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err := db.Count(&FinishNumberInfoData.ShouldFinishNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
-		err = db.Where("task_stage = 15").Count(&FinishNumberInfoData.FinishedNumber).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-			return nil, err
-		}
-		FinishNumberInfoDataList.FinishNumberInfoList = append(FinishNumberInfoDataList.FinishNumberInfoList, &FinishNumberInfoData)
-	}
-	return &FinishNumberInfoDataList, nil
-}
-
-func GetLogisticsNum() [][]string {
-	var logisticNumsInfos [][]string
-	db := GetReadDB(context.Background())
-	var logisticInfos []*gorm_model.YoungeeTaskLogistics
-	db.Model(gorm_model.YoungeeTaskLogistics{}).Where("things_type = 1 AND status = 0").Find(&logisticInfos)
-	for _, logisticInfo := range logisticInfos {
-		var logisticNumsInfo []string
-		logisticNumsInfo = append(logisticNumsInfo, logisticInfo.CompanyName, logisticInfo.LogisticsNumber, strconv.FormatInt(logisticInfo.LogisticsID, 10))
-		logisticNumsInfos = append(logisticNumsInfos, logisticNumsInfo)
-	}
-	fmt.Println("logisticNumsInfos:", logisticNumsInfos)
-	return logisticNumsInfos
-}
-
-func SignLogistic(logisticId int64) string {
-	db := GetReadDB(context.Background())
-	var taskId, projectId string
-	var contentType int64
-	db.Model(gorm_model.YoungeeTaskLogistics{}).Select("task_id").Where("logistics_id = ?", logisticId).Find(&taskId)
-	db.Model(gorm_model.YoungeeTaskInfo{}).Select("project_id").Where("task_id = ?", taskId).Find(&projectId)
-	db.Model(gorm_model.ProjectInfo{}).Select("content_type").Where("project_id = ?", projectId).Find(&contentType)
-	t := time.Now()
-	db.Model(gorm_model.YoungeeTaskLogistics{}).Where("logistics_id = ?", logisticId).Updates(&gorm_model.YoungeeTaskLogistics{SignedTime: &t, Status: 1})
-	if contentType == 1 {
-		db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(&gorm_model.YoungeeTaskInfo{LogisticsStatus: 3, TaskStage: 9})
-		fmt.Printf("任务 %v 物流状态为已签收,已更新任务状态为 待传初稿\n", taskId)
-	} else {
-		db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(&gorm_model.YoungeeTaskInfo{LogisticsStatus: 3, TaskStage: 7})
-		fmt.Printf("任务 %v 物流状态为已签收,已更新任务状态为 待传脚本\n", taskId)
-	}
-	return taskId
-}
-
-func GetSpecialInviteNumber(ctx context.Context, projectId string) (*http_model.GetSpecialInviteNumberData, error) {
-	var specialInviteNumberData http_model.GetSpecialInviteNumberData
-	db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage != 3", projectId)
-	err := db.Where("task_status <> 2").Count(&specialInviteNumberData.UnpassNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ?", projectId)
-	err = db.Where("task_status = 2").Count(&specialInviteNumberData.PassNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	return &specialInviteNumberData, nil
-}
-
-func GetSpecialLogisticNumber(ctx context.Context, projectId string) (*http_model.GetSpecialLogisticNumberData, error) {
-	var specialLogisticNumberData http_model.GetSpecialLogisticNumberData
-	db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage != 3", projectId)
-	err := db.Where("task_status = 2").Count(&specialLogisticNumberData.DeliverNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetSpecialLogisticNumber] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
-	err = db.Where("logistics_status = 3").Count(&specialLogisticNumberData.SignedNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetSpecialLogisticNumber] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
-	err = db.Where("logistics_status = 1").Count(&specialLogisticNumberData.UndeliveredNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetSpecialLogisticNumber] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
-	err = db.Where("logistics_status = 2").Count(&specialLogisticNumberData.DeliveredNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetSpecialLogisticNumber] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	return &specialLogisticNumberData, nil
-}
-
-func GetSpecialReviewNumber(ctx context.Context, projectId string) (*http_model.GetSpecialReviewNumberData, error) {
-	var specialReviewNumber http_model.GetSpecialReviewNumberData
-	db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
-	err := db.Where("").Count(&specialReviewNumber.ReviewNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
-	err = db.Where("task_stage = 8").Count(&specialReviewNumber.ScriptUnreviewNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
-	err = db.Where("task_stage > 8").Count(&specialReviewNumber.ScriptPassedNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
-	err = db.Where("task_stage = 10").Count(&specialReviewNumber.SketchUnreviewNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
-	err = db.Where("task_stage > 10").Count(&specialReviewNumber.SketchPassedNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	return &specialReviewNumber, nil
-}
-
-func GetSpecialLinkNumber(ctx context.Context, projectId string) (*http_model.GetSpecialLinkNumberData, error) {
-	var specialLinkNumber http_model.GetSpecialLinkNumberData
-	db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
-	err := db.Where("").Count(&specialLinkNumber.LinkNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
-	err = db.Where("task_stage = 12").Count(&specialLinkNumber.LinkUnreviewNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
-	err = db.Where("task_stage > 12").Count(&specialLinkNumber.LinkPassedNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	return &specialLinkNumber, nil
-}
-
-func GetSpecialDataNumber(ctx context.Context, projectId string) (*http_model.GetSpecialDataNumberData, error) {
-	var specialDataNumber http_model.GetSpecialDataNumberData
-	db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
-	err := db.Where("").Count(&specialDataNumber.DataNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
-	err = db.Where("task_stage = 14").Count(&specialDataNumber.DataUnreviewNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
-	err = db.Where("task_stage > 14").Count(&specialDataNumber.DataPassedNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	return &specialDataNumber, nil
-}
-
-func GetSpecialSettleNumber(ctx context.Context, projectId string) (*http_model.GetSpecialSettleNumberData, error) {
-	var specialSettleNumber http_model.GetSpecialSettleNumberData
-	db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage = 15", projectId)
-	err := db.Where("").Count(&specialSettleNumber.SettleNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetSpecialSettleNumber] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage = 15 and settle_status = 1", projectId)
-	err = db.Where("task_stage = 14").Count(&specialSettleNumber.UnsettleNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetSpecialSettleNumber] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage = 15 and settle_status = 2", projectId)
-	err = db.Where("task_stage > 14").Count(&specialSettleNumber.SettledNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetSpecialSettleNumber] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	return &specialSettleNumber, nil
-}
+package db
+
+import (
+	"context"
+	"fmt"
+	"strconv"
+	"time"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+
+	"github.com/sirupsen/logrus"
+)
+
+func GetLogisticsNumberInfo(ctx context.Context, projectId string, strategyIds []int64) (*http_model.GetLogisticsNumberInfoData, error) {
+	var LogisticsNumberInfoDataList http_model.GetLogisticsNumberInfoData
+	for _, strategyId := range strategyIds {
+		var LogisticsNumberInfoData http_model.LogisticsNumberInfo
+		LogisticsNumberInfoData.StrategyId = strategyId
+		db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err := db.Where("logistics_status = 1").Count(&LogisticsNumberInfoData.UndeliveredNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err = db.Where("logistics_status = 2").Count(&LogisticsNumberInfoData.DeliveredNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err = db.Where("logistics_status = 3").Count(&LogisticsNumberInfoData.SignedNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err = db.Count(&LogisticsNumberInfoData.DeliverNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		LogisticsNumberInfoDataList.LogisticsNumberInfoList = append(LogisticsNumberInfoDataList.LogisticsNumberInfoList, &LogisticsNumberInfoData)
+	}
+	return &LogisticsNumberInfoDataList, nil
+}
+
+func GetReviewNumberInfo(ctx context.Context, projectId string, strategyIds []int64) (*http_model.GetReviewNumberInfoData, error) {
+	var ReviewNumberInfoDataList http_model.GetReviewNumberInfoData
+
+	for _, strategyId := range strategyIds {
+		var ReviewNumberInfoData http_model.ReviewNumberInfo
+		ReviewNumberInfoData.StrategyId = strategyId
+		db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err := db.Where("task_stage = 8").Count(&ReviewNumberInfoData.ScriptUnreviewNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err = db.Where("task_stage > 8").Count(&ReviewNumberInfoData.ScriptPassedNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err = db.Where("task_stage = 10").Count(&ReviewNumberInfoData.SketchUnreviewNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err = db.Where("task_stage > 10").Count(&ReviewNumberInfoData.SketchPassedNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err = db.Count(&ReviewNumberInfoData.ReviewNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+
+		ReviewNumberInfoDataList.ReviewNumberInfoList = append(ReviewNumberInfoDataList.ReviewNumberInfoList, &ReviewNumberInfoData)
+	}
+	return &ReviewNumberInfoDataList, nil
+}
+
+func GetLinkNumberInfo(ctx context.Context, projectId string, strategyIds []int64) (*http_model.GetLinkNumberInfoData, error) {
+	var LinkNumberInfoDataList http_model.GetLinkNumberInfoData
+
+	for _, strategyId := range strategyIds {
+		var LinkNumberInfoData http_model.LinkNumberInfo
+		LinkNumberInfoData.StrategyId = strategyId
+		db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err := db.Where("task_stage = 12").Count(&LinkNumberInfoData.LinkUnreviewNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err = db.Where("task_stage > 12").Count(&LinkNumberInfoData.LinkPassedNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err = db.Count(&LinkNumberInfoData.LinkNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+
+		LinkNumberInfoDataList.LinkNumberInfoList = append(LinkNumberInfoDataList.LinkNumberInfoList, &LinkNumberInfoData)
+	}
+	return &LinkNumberInfoDataList, nil
+}
+
+func GetDataNumberInfo(ctx context.Context, projectId string, strategyIds []int64) (*http_model.GetDataNumberInfoData, error) {
+	var DataNumberInfoDataList http_model.GetDataNumberInfoData
+
+	for _, strategyId := range strategyIds {
+		var DataNumberInfoData http_model.DataNumberInfo
+		DataNumberInfoData.StrategyId = strategyId
+		db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err := db.Where("task_stage = 14").Count(&DataNumberInfoData.DataUnreviewNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err = db.Where("task_stage = 15").Count(&DataNumberInfoData.DataPassedNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2 and task_stage < 16", projectId, strategyId)
+		err = db.Count(&DataNumberInfoData.DataNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+
+		DataNumberInfoDataList.DataNumberInfoList = append(DataNumberInfoDataList.DataNumberInfoList, &DataNumberInfoData)
+	}
+	return &DataNumberInfoDataList, nil
+}
+
+func GetDefaultNumberInfo(ctx context.Context, projectId string, strategyIds []int64) (*http_model.GetDefaultNumberInfoData, error) {
+	var DefaultNumberInfoDataList http_model.GetDefaultNumberInfoData
+	for _, strategyId := range strategyIds {
+		var DefaultNumberInfoData http_model.DefaultNumberInfo
+		DefaultNumberInfoData.StrategyId = strategyId
+		db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err := db.Where("complete_status <> 4").Count(&DefaultNumberInfoData.ShouldFinishNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err = db.Where("cur_default_type = 1").Count(&DefaultNumberInfoData.UnuploadScriptNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err = db.Where("cur_default_type = 3").Count(&DefaultNumberInfoData.UnuploadSketchNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err = db.Where("cur_default_type = 5").Count(&DefaultNumberInfoData.UnuploadLinkNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err = db.Where("cur_default_type = 7").Count(&DefaultNumberInfoData.UnuploadDataNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err = db.Where("complete_status = 4").Count(&DefaultNumberInfoData.TerminateNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+
+		DefaultNumberInfoDataList.DefaultNumberInfoList = append(DefaultNumberInfoDataList.DefaultNumberInfoList, &DefaultNumberInfoData)
+	}
+	return &DefaultNumberInfoDataList, nil
+}
+
+func GetFinishNumberInfo(ctx context.Context, projectId string, strategyIds []int64) (*http_model.GetFinishNumberInfoData, error) {
+	var FinishNumberInfoDataList http_model.GetFinishNumberInfoData
+
+	for _, strategyId := range strategyIds {
+		var FinishNumberInfoData http_model.FinishNumberInfo
+		FinishNumberInfoData.StrategyId = strategyId
+		db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err := db.Count(&FinishNumberInfoData.ShouldFinishNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and strategy_id = ? and task_status = 2", projectId, strategyId)
+		err = db.Where("task_stage = 15").Count(&FinishNumberInfoData.FinishedNumber).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+			return nil, err
+		}
+		FinishNumberInfoDataList.FinishNumberInfoList = append(FinishNumberInfoDataList.FinishNumberInfoList, &FinishNumberInfoData)
+	}
+	return &FinishNumberInfoDataList, nil
+}
+
+func GetLogisticsNum() [][]string {
+	var logisticNumsInfos [][]string
+	db := GetReadDB(context.Background())
+	var logisticInfos []*gorm_model.YoungeeTaskLogistics
+	db.Model(gorm_model.YoungeeTaskLogistics{}).Where("things_type = 1 AND status != 1").Find(&logisticInfos)
+	for _, logisticInfo := range logisticInfos {
+		var logisticNumsInfo []string
+		logisticNumsInfo = append(logisticNumsInfo, logisticInfo.CompanyName, logisticInfo.LogisticsNumber, strconv.FormatInt(logisticInfo.LogisticsID, 10))
+		logisticNumsInfos = append(logisticNumsInfos, logisticNumsInfo)
+	}
+	fmt.Println("logisticNumsInfos:", logisticNumsInfos)
+	return logisticNumsInfos
+}
+
+func SignLogistic(logisticId int64) string {
+	db := GetReadDB(context.Background())
+	var taskId, projectId string
+	// var selectionId string
+	var contentType int64
+	db.Model(gorm_model.YoungeeTaskLogistics{}).Select("task_id").Where("logistics_id = ?", logisticId).Find(&taskId)
+	// db.Model(gorm_model.YounggeeSecTaskInfo{}).Select("selection_id").Where("task_id = ?", taskId).Find(&selectionId)
+	db.Model(gorm_model.YoungeeTaskInfo{}).Select("project_id").Where("task_id = ?", taskId).Find(&projectId)
+	db.Model(gorm_model.ProjectInfo{}).Select("content_type").Where("project_id = ?", projectId).Find(&contentType)
+	// contentType为内容形式
+	t := time.Now()
+	db.Model(gorm_model.YoungeeTaskLogistics{}).Where("logistics_id = ?", logisticId).Updates(&gorm_model.YoungeeTaskLogistics{SignedTime: &t, Status: 1})
+	db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id = ?", taskId).Updates(&gorm_model.YounggeeSecTaskInfo{SignedTime: t, FreeStage: 5})
+	if contentType == 1 {
+		db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(&gorm_model.YoungeeTaskInfo{LogisticsStatus: 3, TaskStage: 9})
+		fmt.Printf("任务 %v 物流状态为已签收,已更新任务状态为 待传初稿\n", taskId)
+	} else {
+		db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(&gorm_model.YoungeeTaskInfo{LogisticsStatus: 3, TaskStage: 7})
+		fmt.Printf("任务 %v 物流状态为已签收,已更新任务状态为 待传脚本\n", taskId)
+	}
+	return taskId
+}
+
+func SignLogistic_sec(logisticId int64) string {
+	db := GetReadDB(context.Background())
+	var taskId, selectionId string
+	// var contentType int64
+	db.Model(gorm_model.YoungeeTaskLogistics{}).Select("task_id").Where("logistics_id = ?", logisticId).Find(&taskId)
+	db.Model(gorm_model.YoungeeTaskInfo{}).Select("selection_id").Where("task_id = ?", taskId).Find(&selectionId)
+	t := time.Now()
+	db.Model(gorm_model.YoungeeTaskLogistics{}).Where("logistics_id = ?", logisticId).Updates(&gorm_model.YoungeeTaskLogistics{SignedTime: &t, Status: 1})
+	return taskId
+}
+
+func GetSpecialInviteNumber(ctx context.Context, projectId string) (*http_model.GetSpecialInviteNumberData, error) {
+	var specialInviteNumberData http_model.GetSpecialInviteNumberData
+	db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage != 3", projectId)
+	err := db.Where("task_status <> 2").Count(&specialInviteNumberData.UnpassNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ?", projectId)
+	err = db.Where("task_status = 2").Count(&specialInviteNumberData.PassNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	return &specialInviteNumberData, nil
+}
+
+func GetSpecialLogisticNumber(ctx context.Context, projectId string) (*http_model.GetSpecialLogisticNumberData, error) {
+	var specialLogisticNumberData http_model.GetSpecialLogisticNumberData
+	db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage != 3", projectId)
+	err := db.Where("task_status = 2").Count(&specialLogisticNumberData.DeliverNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetSpecialLogisticNumber] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("logistics_status = 3").Count(&specialLogisticNumberData.SignedNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetSpecialLogisticNumber] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("logistics_status = 1").Count(&specialLogisticNumberData.UndeliveredNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetSpecialLogisticNumber] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("logistics_status = 2").Count(&specialLogisticNumberData.DeliveredNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetSpecialLogisticNumber] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	return &specialLogisticNumberData, nil
+}
+
+func GetSpecialReviewNumber(ctx context.Context, projectId string) (*http_model.GetSpecialReviewNumberData, error) {
+	var specialReviewNumber http_model.GetSpecialReviewNumberData
+	db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err := db.Where("").Count(&specialReviewNumber.ReviewNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("task_stage = 8").Count(&specialReviewNumber.ScriptUnreviewNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("task_stage > 8").Count(&specialReviewNumber.ScriptPassedNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("task_stage = 10").Count(&specialReviewNumber.SketchUnreviewNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("task_stage > 10").Count(&specialReviewNumber.SketchPassedNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	return &specialReviewNumber, nil
+}
+
+func GetSpecialLinkNumber(ctx context.Context, projectId string) (*http_model.GetSpecialLinkNumberData, error) {
+	var specialLinkNumber http_model.GetSpecialLinkNumberData
+	db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err := db.Where("").Count(&specialLinkNumber.LinkNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("task_stage = 12").Count(&specialLinkNumber.LinkUnreviewNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("task_stage > 12").Count(&specialLinkNumber.LinkPassedNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	return &specialLinkNumber, nil
+}
+
+func GetSpecialDataNumber(ctx context.Context, projectId string) (*http_model.GetSpecialDataNumberData, error) {
+	var specialDataNumber http_model.GetSpecialDataNumberData
+	db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err := db.Where("").Count(&specialDataNumber.DataNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("task_stage = 14").Count(&specialDataNumber.DataUnreviewNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2", projectId)
+	err = db.Where("task_stage > 14").Count(&specialDataNumber.DataPassedNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTaskList] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	return &specialDataNumber, nil
+}
+
+func GetSpecialSettleNumber(ctx context.Context, projectId string) (*http_model.GetSpecialSettleNumberData, error) {
+	var specialSettleNumber http_model.GetSpecialSettleNumberData
+	db := GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage = 15", projectId)
+	err := db.Where("").Count(&specialSettleNumber.SettleNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetSpecialSettleNumber] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage = 15 and settle_status = 1", projectId)
+	err = db.Where("task_stage = 14").Count(&specialSettleNumber.UnsettleNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetSpecialSettleNumber] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	db = GetReadDB(ctx).Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage = 15 and settle_status = 2", projectId)
+	err = db.Where("task_stage > 14").Count(&specialSettleNumber.SettledNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetSpecialSettleNumber] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	return &specialSettleNumber, nil
+}

+ 1 - 1
db/operate.go

@@ -1020,7 +1020,7 @@ func GetAutoInvalidTask() error {
 
 // GetAutoSelectionInvalidTask 选品项目的失效自动处理
 func GetAutoSelectionInvalidTask() error {
-	println("GetAutoSelectionInvalidTask is running ====-=-0=-0=-0=-0=--------=")
+	// println("GetAutoSelectionInvalidTask is running ====-=-0=-0=-0=-0=--------=")
 	db := GetReadDB(context.Background())
 	var selectioninfos []*gorm_model.YounggeeSelectionInfo
 	err := db.Model(gorm_model.YounggeeSelectionInfo{}).Where("selection_status= ? AND task_mode = ? ", 4, 1).Find(&selectioninfos).Error

+ 38 - 0
db/reward_strategy.go

@@ -0,0 +1,38 @@
+package db
+
+import (
+	"context"
+	"fmt"
+	"github.com/sirupsen/logrus"
+	"youngee_m_api/model/gorm_model"
+)
+
+func CreateRewardStrategy(ctx context.Context, RewardStrategys []gorm_model.RewardStrategy) error {
+	db := GetReadDB(ctx)
+	fmt.Println("RewardStrategys: ", RewardStrategys)
+	err := db.Create(&RewardStrategys).Error
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
+func DeleteRewardStrategyBySelectionId(ctx context.Context, SelectionId string) error {
+	db := GetReadDB(ctx)
+	err := db.Where("selection_id = ?", SelectionId).Delete(&gorm_model.RewardStrategy{}).Error
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
+func GetRewardStrategyBySelectionId(ctx context.Context, SelectionId string) ([]*gorm_model.RewardStrategy, error) {
+	db := GetReadDB(ctx)
+	var RewardStrategys []*gorm_model.RewardStrategy
+	err := db.Model(gorm_model.RewardStrategy{}).Where("selection_id = ?", SelectionId).Find(&RewardStrategys).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetRewardStrategyBySelectionId] error query, err:%+v", err)
+		return nil, err
+	}
+	return RewardStrategys, nil
+}

+ 152 - 44
db/sectask.go

@@ -32,31 +32,58 @@ func GetSecTaskById(ctx context.Context, secTaskId string) (*gorm_model.Younggee
 
 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
+	// var taskStages []int
+	var freeStages []int
+	var rewardStages []int
 	switch taskStatus {
 	case 3:
-		taskStages = []int{3}
+		// 待选
+		freeStages = []int{1}
 		break
 	case 4:
-		taskStages = []int{4, 6, 7, 8, 9, 10}
+		// 申请成功
+		freeStages = []int{3, 4, 5}
 		break
 	case 6:
-		taskStages = []int{6}
+		// 待发货
+		freeStages = []int{3}
 		break
 	case 7:
-		taskStages = []int{7, 8, 9, 10}
+		// 已发货
+		freeStages = []int{4}
 		break
 	case 8:
-		taskStages = []int{8, 9, 10}
+		// 已收货
+		freeStages = []int{5}
 	case 9:
-		taskStages = []int{9}
+		// 待领悬赏
+		rewardStages = []int{1}
 		break
 	case 10:
-		taskStages = []int{10}
+		// 已领悬赏
+		rewardStages = []int{2}
 		break
+	case 11:
+		// 返回全部 使用场景-绑定免费领样策略
+		freeStages = []int{0, 1, 2, 3, 4, 5}
+		rewardStages = []int{0, 1}
 	}
-	println("task_stages: ", taskStages)
-	db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and task_stage in ?", selectionId, taskStages)
+	fmt.Println("task_stages: ", freeStages, rewardStages)
+	if len(freeStages) == 0 {
+		db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and reward_stage in ?", selectionId, rewardStages)
+	} else {
+		db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and free_stage in ?", selectionId, freeStages)
+	}
+
+	/*
+		if rewardStage == -1 && freeStage == -1 {
+			db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ?", selectionId)
+		} else if rewardStage == -1 {
+			db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and free_stage = ?", selectionId, freeStage)
+		} else {
+			db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and reward_stage = ?", selectionId, rewardStage)
+		}*/
+
 	//var taskStages []int
 	/*
 			switch taskStatus {
@@ -99,17 +126,32 @@ func GetSecTaskList(ctx context.Context, selectionId string, taskStatus int, sea
 		logrus.WithContext(ctx).Errorf("[GetSelectionList] error query mysql total, err:%+v", err)
 		return nil, 0, err
 	}
-	println("total ", total)
+	fmt.Println("total ", total)
+	// println("db: ", db)
 	// 查询该页数据
-	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
+	// 分页
+	if pageSize != 0 {
+		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
+		fmt.Println("分页-本页数据:", len(secTaskInfoList))
+		fmt.Println("err ", err)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetSelectionList] error query mysql total, err:%+v", err)
+			return nil, 0, err
+		}
+	} else {
+		// 不分页
+		err := db.Order("create_date desc").Find(&secTaskInfoList).Error
+		fmt.Println("不分页-本页数据:", len(secTaskInfoList))
+		fmt.Println("err ", err)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[GetSelectionList] error query mysql total, err:%+v", err)
+			return nil, 0, err
+		}
 	}
 
-	fmt.Println("secTaskInfoList:", secTaskInfoList)
+	//fmt.Println("secTaskInfoList:", secTaskInfoList)
 	newSecTaskInfoList := pack.GormSecTaskListToHttpSecTaskList(secTaskInfoList)
 	fmt.Println("newSecTaskInfoList:", newSecTaskInfoList)
 
@@ -132,7 +174,7 @@ func GetSecTaskList(ctx context.Context, selectionId string, taskStatus int, sea
 	} else {
 		resSecTaskInfoList = newSecTaskInfoList
 	}
-	fmt.Println("resSecTaskInfoList: ", resSecTaskInfoList)
+	//fmt.Println("resSecTaskInfoList: ", resSecTaskInfoList[0])
 	return resSecTaskInfoList, total, nil
 }
 
@@ -143,7 +185,9 @@ func PassSecTaskCoop(ctx context.Context, selectionId string, taskIds []string)
 	//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("TaskIDs: ", taskIds)
+	fmt.Println("SelectionID: ", selectionId)
+	err := db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND free_stage = 1", taskIds).Count(&count).Error
 
 	fmt.Println("count: ", count)
 	if err != nil {
@@ -169,29 +213,32 @@ func PassSecTaskCoop(ctx context.Context, selectionId string, taskIds []string)
 	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
+		/*
+			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 free_stage = 1", taskIds).Updates(updateData).Error
+				if err != nil {
+					return err
+				}
 			}
+		*/
+		// 2.3 之后同意代表同意免费领样,并不是合作
+		updateData := gorm_model.YounggeeSecTaskInfo{
+			TaskStatus:      2,
+			TaskStage:       6,
+			SelectDate:      time.Now(),
+			LogisticsStatus: 1,
+			FreeStage:       3,
+		}
+		err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND free_stage = 1", taskIds).Updates(updateData).Error
+		if err != nil {
+			return err
 		}
 		// 3. 生成达人消息
 		for _, talendId := range talentIds {
@@ -213,7 +260,7 @@ 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
+	err := db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND free_stage = 1", taskIds).Count(&count).Error
 	if err != nil {
 		return false, err
 	}
@@ -235,8 +282,9 @@ func RefuseSecTaskCoop(ctx context.Context, taskIds []string) (bool, error) {
 			TaskStage:      5,
 			CompleteDate:   time.Now(),
 			CompleteStatus: 3,
+			FreeStage:      2,
 		}
-		err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND task_stage = 3", taskIds).Updates(updateData).Error
+		err = tx.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id IN ? AND free_stage = 1", taskIds).Updates(updateData).Error
 		if err != nil {
 			return err
 		}
@@ -309,3 +357,63 @@ func GetSecTaskSettleList(ctx context.Context, secTaskList []*http_model.SecTask
 
 	return secTaskList, nil
 }
+
+func UpdataFreeStratrgyId(ctx context.Context, taskId string, strategyId int) error {
+	db := GetWriteDB(ctx)
+	err := db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id", taskId).Update("free_strategy_id", strategyId)
+	println(err)
+	return nil
+}
+
+// GetSecTaskCountByStrategyId 根据带货任务id、策略id以及子任务阶段统计满足策略的数量
+func GetSecTaskCountByStrategyId(ctx context.Context, selectionId string, strategyId int, taskStage int) (int, error) {
+	db := GetWriteDB(ctx)
+	var freeStages []int
+	var rewardStages []int
+	switch taskStage {
+	case 3:
+		// 待选
+		freeStages = []int{1}
+		break
+	case 4:
+		// 申请成功
+		freeStages = []int{3, 4, 5}
+		break
+	case 6:
+		// 待发货
+		freeStages = []int{3}
+		break
+	case 7:
+		// 已发货
+		freeStages = []int{4}
+		break
+	case 8:
+		// 已收货
+		freeStages = []int{5}
+	case 9:
+		// 待领悬赏
+		rewardStages = []int{1}
+		break
+	case 10:
+		// 已领悬赏
+		rewardStages = []int{2}
+		break
+	case 11:
+		// 返回全部 使用场景-绑定免费领样策略
+		freeStages = []int{0, 1, 2, 3, 4, 5}
+		rewardStages = []int{0, 1}
+	}
+	// db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and free_strategy_id = ? and task_stage = ?", selectionId, strategyId, taskStage)
+	if len(freeStages) == 0 {
+		db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and free_strategy_id = ? and reward_stage in ?", selectionId, strategyId, rewardStages)
+	} else {
+		db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and free_strategy_id = ? and free_stage in ?", selectionId, strategyId, freeStages)
+	}
+
+	var total int64
+	if err := db.Count(&total).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetSelectionList] error query mysql total, err:%+v", err)
+		return 0, err
+	}
+	return int(total), nil
+}

+ 19 - 2
db/selection.go

@@ -29,6 +29,7 @@ func SelectionReviewNumber(ctx context.Context) (*http_model.ReviewNums, error)
 	return ReviewNums, err
 }
 
+// GetSelectionInfo 按照EnterpriseId查询带货任务-商家用户管理
 func GetSelectionInfo(ctx context.Context, req *http_model.GetSelectionInfoRequest) (selectionInfoData http_model.SelectionInfoData, err error) {
 	db := GetReadDB(ctx)
 	db = db.Debug().Model(gorm_model.YounggeeSelectionInfo{}).Where("enterprise_id = ?", req.EnterpriseId)
@@ -123,10 +124,12 @@ func GetSelectionByEnterpiseIdAndProductId(ctx context.Context, enterpriseId str
 	return &selectionInfo, nil
 }
 
+// GetSelectionList 查询所有带货任务
 func GetSelectionList(ctx context.Context, enterpriseID string, pageSize, pageNum int64, conditions *common_model.SelectionConditions) ([]*gorm_model.YounggeeSelectionInfo, int64, error) {
 	db := GetReadDB(ctx)
 	//db = db.Debug().Model(gorm_model.YounggeeSelectionInfo{}).Where("enterprise_id = ?", enterpriseID)
 	db = db.Debug().Model(gorm_model.YounggeeSelectionInfo{})
+	db = db.Where("status = ?", 0)
 	conditionType := reflect.TypeOf(conditions).Elem()
 	conditionValue := reflect.ValueOf(conditions).Elem()
 	selectionStatus := ""
@@ -282,7 +285,7 @@ func DeleteSecExampleBySelectionId(ctx context.Context, selectionId string) erro
 	return nil
 }
 
-// 更新选品结算金额
+// UpdateSelectionSettleMoney 更新选品结算金额
 func UpdateSelectionSettleMoney(ctx context.Context, selectionID string, payMoney float64) (bool, error) {
 	db := GetReadDB(ctx)
 	err := db.Model(gorm_model.YounggeeSelectionInfo{}).Where("selection_id", selectionID).
@@ -290,6 +293,20 @@ func UpdateSelectionSettleMoney(ctx context.Context, selectionID string, payMone
 	if err != nil {
 		return false, err
 	}
-
 	return true, nil
 }
+
+// FindSelectionIdBySelectionStatus 按照selection_status查询带货任务ID
+func FindSelectionIdBySelectionStatus(ctx context.Context, selectionStatus int) ([]string, error) {
+	db := GetReadDB(ctx)
+	var selections []gorm_model.YounggeeSelectionInfo
+	var selectionIds []string
+	err := db.Model(gorm_model.YounggeeSelectionInfo{}).Where("selection_status = ?", selectionStatus).Find(&selections).Error
+	if err != nil {
+		return nil, err
+	}
+	for _, i := range selections {
+		selectionIds = append(selectionIds, i.SelectionID)
+	}
+	return selectionIds, nil
+}

+ 28 - 0
db/talent.go

@@ -180,3 +180,31 @@ func GetTaskRecord(ctx context.Context, talentId string) (*http_model.GetTaskRec
 	taskRecordResponse.Total = conv.MustString(total, "")
 	return taskRecordResponse, nil
 }
+
+// GetKuaishouUserInfoByTalentId 根据达人ID去查找快手平台授权信息
+func GetKuaishouUserInfoByTalentId(ctx context.Context, talentId string) gorm_model.PlatformKuaishouUserInfo {
+	db4 := GetReadDB(ctx)
+	// db = db.Model(gorm_model.YounggeeSecTaskInfo{}).Where("selection_id = ? and free_strategy_id = ? and task_stage = ?", selectionId, strategyId, taskStage)
+	kuaishouUser := gorm_model.PlatformKuaishouUserInfo{}
+	db4 = db4.Model(gorm_model.PlatformKuaishouUserInfo{}).Where("talent_id = ?", talentId).Scan(&kuaishouUser)
+	return kuaishouUser
+}
+
+// GetAllKuaishouUser 返回所有快手用户信息
+func GetAllKuaishouUser(ctx context.Context) []gorm_model.PlatformKuaishouUserInfo {
+	db5 := GetReadDB(ctx)
+	var talentList []gorm_model.PlatformKuaishouUserInfo
+	err := db5.Model(gorm_model.PlatformKuaishouUserInfo{}).Find(&talentList)
+	fmt.Println(err)
+	return talentList
+}
+
+func UpdateKuaishouUserInfoByTalentID(ctx context.Context, talentInfo gorm_model.PlatformKuaishouUserInfo) error {
+	db6 := GetReadDB(ctx)
+	whereCondition := gorm_model.PlatformKuaishouUserInfo{TalentId: talentInfo.TalentId}
+	err := db6.Model(gorm_model.PlatformKuaishouUserInfo{}).Where(whereCondition).Updates(talentInfo).Error
+	if err != nil {
+		return err
+	}
+	return err
+}

+ 384 - 384
db/task.go

@@ -1,384 +1,384 @@
-package db
-
-import (
-	"context"
-	"encoding/json"
-	"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/tidwall/gjson"
-	"gorm.io/gorm"
-
-	"github.com/sirupsen/logrus"
-)
-
-func GetTaskList(ctx context.Context, projectID string) ([]gorm_model.YoungeeTaskInfo, error) {
-	db := GetReadDB(ctx)
-	var tasks []gorm_model.YoungeeTaskInfo
-	err := db.Where("project_id = ? AND task_status = 2", projectID).Find(&tasks).Error
-	if err != nil {
-		return nil, err
-	}
-	return tasks, nil
-}
-
-func UpdateLogisticsStatus(ctx context.Context, taskID string, status int64) error {
-	db := GetReadDB(ctx)
-	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskID).Update("logistics_status", status).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[task db] call UpdateLogisticsStatus error,err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-func UpdateLogisticsDate(ctx context.Context, taskID string) error {
-	db := GetReadDB(ctx)
-	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskID).Update("delivery_date", time.Now()).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[task db] call UpdateLogisticsDate error,err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-func GetProjectIdByTaskId(ctx context.Context, taskID string) (*string, error) {
-	db := GetReadDB(ctx)
-	task := &gorm_model.YoungeeTaskInfo{}
-	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskID).Scan(task).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[task db] call UpdateLogisticsStatus error,err:%+v", err)
-		return nil, err
-	}
-	return &task.ProjectId, nil
-}
-
-func ChangeTaskStatus(ctx context.Context, taskIds []string, taskStatus string) ([]int64, error) {
-	db := GetReadDB(ctx)
-
-	taskSta := conv.MustInt(taskStatus, 0)
-	if err := db.Debug().Model(&gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds).
-		Updates(gorm_model.YoungeeTaskInfo{TaskStatus: taskSta}).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]2 error query mysql total, err:%+v", err)
-		return nil, err
-	}
-
-	var taskInfos []gorm_model.YoungeeTaskInfo
-	err := db.Debug().Model(&gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds).Find(&taskInfos).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]3 error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	var recruitStrategysIDs []int64
-	recruitStrategys := gorm_model.RecruitStrategy{}
-	for _, taskInfo := range taskInfos {
-		err2 := db.Debug().Model(gorm_model.RecruitStrategy{}).Where("project_id=? AND strategy_id=?", taskInfo.ProjectId, taskInfo.StrategyId).Scan(&recruitStrategys).Error
-		if err2 != nil {
-			logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]4 error query mysql total, err:%+v", err2)
-			return nil, err2
-		}
-		recruitStrategysIDs = append(recruitStrategysIDs, recruitStrategys.RecruitStrategyID)
-	}
-	return recruitStrategysIDs, nil
-}
-
-func ChangeSpecialTaskStatus(ctx context.Context, taskIds []string, taskStatus string, taskStage string) error {
-	db := GetReadDB(ctx)
-	status, err := strconv.Atoi(taskStatus)
-	stage, err := strconv.Atoi(taskStage)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]1 error query mysql total, err:%+v", err)
-		return err
-	}
-	err = db.Transaction(func(tx *gorm.DB) error {
-		if err := tx.Debug().Model(&gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds).
-			Updates(gorm_model.YoungeeTaskInfo{TaskStatus: status, TaskStage: stage, SelectDate: time.Now()}).Error; err != nil {
-			logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]2 error query mysql total, err:%+v", err)
-			return err
-		}
-		return nil
-	})
-	if err != nil {
-		return err
-	}
-	//if err := db.Debug().Model(&gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds).
-	//	Updates(gorm_model.YoungeeTaskInfo{TaskStatus: status, TaskStage: stage, SelectDate: time.Now()}).Error; err != nil {
-	//	logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]2 error query mysql total, err:%+v", err)
-	//	return err
-	//}
-	return nil
-}
-
-func UpdateTaskStage(ctx context.Context, projectID string, taskStatus int64, taskStage int64) error {
-	db := GetReadDB(ctx)
-	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id=? and task_status = ?", projectID, taskStatus).Update("task_stage", taskStage).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[UpdateTaskStatusPaying]2 error query mysql total, err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-func UpdateTaskSelectAtByProjectId(ctx context.Context, projectID string, taskStatus int64) error {
-	db := GetReadDB(ctx)
-	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id=? and task_status = ?", projectID, taskStatus).Update("select_date", time.Now()).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[UpdateTaskStage]2 error query mysql total, err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-func UpdateTaskStageByProjectId(ctx context.Context, projectID string, taskStatus int64, taskStage int64) error {
-	db := GetReadDB(ctx)
-	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id=? and task_status = ?", projectID, taskStatus).Update("task_stage", taskStage).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[UpdateTaskStage]2 error query mysql total, err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-func GetSpecialTaskInviteList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskInviteInfo, int64, error) {
-	db := GetReadDB(ctx)
-	// 查询task表信息
-	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_stage != 3")
-	// 根据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 tag == "task_status" {
-			fmt.Printf("link %+v", value.Interface() == int64(0))
-			if value.Interface() == int64(0) {
-				db = db.Where("task_status <> 2")
-			} else {
-				db = db.Where("task_status = 2")
-			}
-			continue
-		} else if !util.IsBlank(value) {
-			if tag == "platform_nickname" {
-				platform_nickname = fmt.Sprintf("%v", value.Interface())
-				continue
-			} else if tag == "project_id" {
-				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)
-
-	// 查询该页数据
-	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.SpecialTaskInviteInfo
-	var newTaskDatas []*http_model.SpecialTaskInviteInfo
-
-	taskDatas = pack.YoungeeTaskInfoToSpecialTaskInviteInfo(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(conv.MustString(v.TaskID, ""), platform_nickname) {
-			newTaskDatas = append(newTaskDatas, v)
-		} else {
-			totalTask--
-		}
-	}
-	return newTaskDatas, totalTask, nil
-}
-
-// 任务结案
-func SetTaskFinish(ctx context.Context, TaskIDs []string) error {
-	db := GetReadDB(ctx)
-	// 1. 修改任务表,更新任务阶段为已结案,结案方式为正常结束,数据状态为已通过,
-	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).
-		Updates(gorm_model.YoungeeTaskInfo{DataStatus: 5, TaskStage: 15, CompleteStatus: 2, WithdrawStatus: 2, CompleteDate: time.Now()}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Task db] Update YoungeeTaskInfo error,err:%+v", err)
-		return err
-	}
-
-	// 2. 修改招募策略表,更新粉丝量、播放量、点赞数、收藏数、评论数、总支付、结案数量
-	for _, v := range TaskIDs {
-		// 查询task_info
-		db = GetReadDB(ctx)
-		taskInfo := gorm_model.YoungeeTaskInfo{}
-		err1 := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", v).Scan(&taskInfo).Error
-		if err1 != nil {
-			logrus.WithContext(ctx).Errorf("[Task db] Find YoungeeTaskInfo error,err:%+v", err)
-			return err1
-		}
-		//查询project_info
-		projectInfo := gorm_model.ProjectInfo{}
-		err1 = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", taskInfo.ProjectId).Scan(&projectInfo).Error
-		if err1 != nil {
-			logrus.WithContext(ctx).Errorf("[Task db] Find ProjectInfo error,err:%+v", err)
-			return err1
-		}
-		// 查询data_info
-		db = GetReadDB(ctx)
-		dataInfo := gorm_model.YounggeeDataInfo{}
-		err1 = db.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_ok = 1", v).Scan(&dataInfo).Error
-		if err1 != nil {
-			logrus.WithContext(ctx).Errorf("[Task db] Find YounggeeDataInfo error,err:%+v", err)
-			return err1
-		}
-
-		// 2. 创建任务收益
-		var productStruct gorm_model.YounggeeProduct
-		if err = json.Unmarshal([]byte(projectInfo.ProductSnap), &productStruct); err != nil {
-			fmt.Println("Error:", err)
-			return err
-		}
-		t := time.Now()
-		income := gorm_model.YounggeeTalentIncome{
-			TalentID:       taskInfo.TalentId,
-			ProjectID:      taskInfo.ProjectId,
-			SectaskID:      taskInfo.TaskId,
-			BrandName:      productStruct.BrandName,
-			TaskName:       projectInfo.ProjectName,
-			Income:         strconv.FormatFloat(taskInfo.SettleAmount, 'f', 10, 32),
-			IncomeType:     1,
-			WithdrawStatus: 1,
-			IncomeAt:       &t,
-			WithdrawAt:     nil,
-		}
-		err = CreateIncome(ctx, income, nil)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[projectPay service] call SpecialSettlePay error,err:%+v", err)
-			return err
-		}
-
-		// 更新招募策略
-		db = GetReadDB(ctx)
-		db = db.Model(gorm_model.RecruitStrategy{}).Where("project_id = ? and strategy_id = ?", taskInfo.ProjectId, taskInfo.StrategyId)
-		fansCount, _ := strconv.Atoi(conv.MustString(gjson.Get(taskInfo.TalentPlatformInfoSnap, "fans_count"), ""))
-		err = db.Updates(map[string]interface{}{
-			"fan_number":     gorm.Expr("fan_number + ?", fansCount),
-			"play_number":    gorm.Expr("play_number + ?", dataInfo.PlayNumber),
-			"like_number":    gorm.Expr("like_number + ?", dataInfo.LikeNumber),
-			"collect_number": gorm.Expr("collect_number + ?", dataInfo.CollectNumber),
-			"comment_number": gorm.Expr("comment_number + ?", dataInfo.CommentNumber),
-			"finish_number":  gorm.Expr("finish_number + 1"),
-			"total_offer":    gorm.Expr("total_offer + ?", taskInfo.RealPayment)}).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[Task db] Update YounggeeDataInfo error,err:%+v", err)
-			return err
-		}
-	}
-	return nil
-}
-
-// SetTaskFinish 专项任务结案
-func SetSpecialTaskFinish(ctx context.Context, TaskIDs []string) error {
-	db := GetReadDB(ctx)
-	// 1. 修改任务表,更新任务阶段为已结案,结案方式为正常结束,数据状态为已通过,
-	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{DataStatus: 5, TaskStage: 15, CompleteStatus: 2, WithdrawStatus: 2, CompleteDate: time.Now()}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Task db] Update YoungeeTaskInfo error,err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-func SetTalentIncome(ctx context.Context, TaskIDs []string) error {
-	db := GetReadDB(ctx)
-	var TaskInfoList []gorm_model.YoungeeTaskInfo
-	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Scan(&TaskInfoList).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Task db] Update SetTalentIncome error,err:%+v", err)
-		return err
-	}
-	for _, taskInfo := range TaskInfoList {
-		err := db.Model(gorm_model.YoungeeTalentInfo{}).Where("id = ?", taskInfo.TalentId).Updates(map[string]interface{}{
-			"income":      gorm.Expr("income + ?", taskInfo.SettleAmount),
-			"canwithdraw": gorm.Expr("canwithdraw + ?", taskInfo.SettleAmount)}).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[Task db] Update SetTalentIncome error,err:%+v", err)
-			return err
-		}
-	}
-	return nil
-}
-
-func GetUnfinishedTaskNumber(ctx context.Context, projectID string) (*int64, error) {
-	var unFinishedTaskNumber int64
-	db := GetReadDB(ctx)
-	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage < 15", projectID).Count(&unFinishedTaskNumber).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Data db] Find YounggeeTaskInfo error,err:%+v", err)
-		return nil, err
-	}
-	return &unFinishedTaskNumber, nil
-}
-
-func UpdateTaskStageByTaskId(ctx context.Context, taskID string, taskStatus int64, taskStage int64) error {
-	db := GetReadDB(ctx)
-	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id=? and task_status = ?", taskID, taskStatus).Update("task_stage", taskStage).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[UpdateTaskStageByTaskId]2 error query mysql total, err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-// 获取任务ids
-func GetTaskIds(ctx context.Context, projectId string) ([]string, error) {
-	db := GetReadDB(ctx)
-	var taskIds []string
-	err := db.Model(gorm_model.YoungeeTaskInfo{}).Select("task_id").Where("project_id = ? and task_status = 2", projectId).Find(&taskIds).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error read mysql, err:%+v", err)
-		return nil, err
-	}
-
-	return taskIds, nil
-}
-
-func UpdateTask(ctx context.Context, updateData gorm_model.YoungeeTaskInfo, tx *gorm.DB) (bool, error) {
-	db := GetWriteDB(ctx)
-	whereCondition := gorm_model.YoungeeTaskInfo{
-		TaskId: updateData.TaskId,
-	}
-	if tx != nil {
-		err := tx.Where(whereCondition).Updates(&updateData).Error
-		if err != nil {
-			return false, err
-		}
-	} else {
-		err := db.Where(whereCondition).Updates(&updateData).Error
-		if err != nil {
-			return false, err
-		}
-	}
-
-	return true, nil
-}
+package db
+
+import (
+	"context"
+	"encoding/json"
+	"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/tidwall/gjson"
+	"gorm.io/gorm"
+
+	"github.com/sirupsen/logrus"
+)
+
+func GetTaskList(ctx context.Context, projectID string) ([]gorm_model.YoungeeTaskInfo, error) {
+	db := GetReadDB(ctx)
+	var tasks []gorm_model.YoungeeTaskInfo
+	err := db.Where("project_id = ? AND task_status = 2", projectID).Find(&tasks).Error
+	if err != nil {
+		return nil, err
+	}
+	return tasks, nil
+}
+
+func UpdateLogisticsStatus(ctx context.Context, taskID string, status int64) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskID).Update("logistics_status", status).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[task db] call UpdateLogisticsStatus error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+func UpdateLogisticsDate(ctx context.Context, taskID string) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskID).Update("delivery_date", time.Now()).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[task db] call UpdateLogisticsDate error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+func GetProjectIdByTaskId(ctx context.Context, taskID string) (*string, error) {
+	db := GetReadDB(ctx)
+	task := &gorm_model.YoungeeTaskInfo{}
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskID).Scan(task).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[task db] call UpdateLogisticsStatus error,err:%+v", err)
+		return nil, err
+	}
+	return &task.ProjectId, nil
+}
+
+func ChangeTaskStatus(ctx context.Context, taskIds []string, taskStatus string) ([]int64, error) {
+	db := GetReadDB(ctx)
+
+	taskSta := conv.MustInt(taskStatus, 0)
+	if err := db.Debug().Model(&gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds).
+		Updates(gorm_model.YoungeeTaskInfo{TaskStatus: taskSta}).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]2 error query mysql total, err:%+v", err)
+		return nil, err
+	}
+
+	var taskInfos []gorm_model.YoungeeTaskInfo
+	err := db.Debug().Model(&gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds).Find(&taskInfos).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]3 error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	var recruitStrategysIDs []int64
+	recruitStrategys := gorm_model.RecruitStrategy{}
+	for _, taskInfo := range taskInfos {
+		err2 := db.Debug().Model(gorm_model.RecruitStrategy{}).Where("project_id=? AND strategy_id=?", taskInfo.ProjectId, taskInfo.StrategyId).Scan(&recruitStrategys).Error
+		if err2 != nil {
+			logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]4 error query mysql total, err:%+v", err2)
+			return nil, err2
+		}
+		recruitStrategysIDs = append(recruitStrategysIDs, recruitStrategys.RecruitStrategyID)
+	}
+	return recruitStrategysIDs, nil
+}
+
+func ChangeSpecialTaskStatus(ctx context.Context, taskIds []string, taskStatus string, taskStage string) error {
+	db := GetReadDB(ctx)
+	status, err := strconv.Atoi(taskStatus)
+	stage, err := strconv.Atoi(taskStage)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]1 error query mysql total, err:%+v", err)
+		return err
+	}
+	err = db.Transaction(func(tx *gorm.DB) error {
+		if err := tx.Debug().Model(&gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds).
+			Updates(gorm_model.YoungeeTaskInfo{TaskStatus: status, TaskStage: stage, SelectDate: time.Now()}).Error; err != nil {
+			logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]2 error query mysql total, err:%+v", err)
+			return err
+		}
+		return nil
+	})
+	if err != nil {
+		return err
+	}
+	//if err := db.Debug().Model(&gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds).
+	//	Updates(gorm_model.YoungeeTaskInfo{TaskStatus: status, TaskStage: stage, SelectDate: time.Now()}).Error; err != nil {
+	//	logrus.WithContext(ctx).Errorf("[ChangeTaskStatus]2 error query mysql total, err:%+v", err)
+	//	return err
+	//}
+	return nil
+}
+
+func UpdateTaskStage(ctx context.Context, projectID string, taskStatus int64, taskStage int64) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id=? and task_status = ?", projectID, taskStatus).Update("task_stage", taskStage).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[UpdateTaskStatusPaying]2 error query mysql total, err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+func UpdateTaskSelectAtByProjectId(ctx context.Context, projectID string, taskStatus int64) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id=? and task_status = ?", projectID, taskStatus).Update("select_date", time.Now()).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[UpdateTaskStage]2 error query mysql total, err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+func UpdateTaskStageByProjectId(ctx context.Context, projectID string, taskStatus int64, taskStage int64) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id=? and task_status = ?", projectID, taskStatus).Update("task_stage", taskStage).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[UpdateTaskStage]2 error query mysql total, err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+func GetSpecialTaskInviteList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskInviteInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_stage != 3")
+	// 根据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 tag == "task_status" {
+			fmt.Printf("link %+v", value.Interface() == int64(0))
+			if value.Interface() == int64(0) {
+				db = db.Where("task_status <> 2")
+			} else {
+				db = db.Where("task_status = 2")
+			}
+			continue
+		} else if !util.IsBlank(value) {
+			if tag == "platform_nickname" {
+				platform_nickname = fmt.Sprintf("%v", value.Interface())
+				continue
+			} else if tag == "project_id" {
+				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)
+
+	// 查询该页数据
+	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.SpecialTaskInviteInfo
+	var newTaskDatas []*http_model.SpecialTaskInviteInfo
+
+	taskDatas = pack.YoungeeTaskInfoToSpecialTaskInviteInfo(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(conv.MustString(v.TaskID, ""), platform_nickname) {
+			newTaskDatas = append(newTaskDatas, v)
+		} else {
+			totalTask--
+		}
+	}
+	return newTaskDatas, totalTask, nil
+}
+
+// SetTaskFinish 任务结案
+func SetTaskFinish(ctx context.Context, TaskIDs []string) error {
+	db := GetReadDB(ctx)
+	// 1. 修改任务表,更新任务阶段为已结案,结案方式为正常结束,数据状态为已通过,
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).
+		Updates(gorm_model.YoungeeTaskInfo{DataStatus: 5, TaskStage: 15, CompleteStatus: 2, WithdrawStatus: 2, CompleteDate: time.Now()}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Task db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+
+	// 2. 修改招募策略表,更新粉丝量、播放量、点赞数、收藏数、评论数、总支付、结案数量
+	for _, v := range TaskIDs {
+		// 查询task_info
+		db = GetReadDB(ctx)
+		taskInfo := gorm_model.YoungeeTaskInfo{}
+		err1 := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", v).Scan(&taskInfo).Error
+		if err1 != nil {
+			logrus.WithContext(ctx).Errorf("[Task db] Find YoungeeTaskInfo error,err:%+v", err)
+			return err1
+		}
+		//查询project_info
+		projectInfo := gorm_model.ProjectInfo{}
+		err1 = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", taskInfo.ProjectId).Scan(&projectInfo).Error
+		if err1 != nil {
+			logrus.WithContext(ctx).Errorf("[Task db] Find ProjectInfo error,err:%+v", err)
+			return err1
+		}
+		// 查询data_info
+		db = GetReadDB(ctx)
+		dataInfo := gorm_model.YounggeeDataInfo{}
+		err1 = db.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_ok = 1", v).Scan(&dataInfo).Error
+		if err1 != nil {
+			logrus.WithContext(ctx).Errorf("[Task db] Find YounggeeDataInfo error,err:%+v", err)
+			return err1
+		}
+
+		// 2. 创建任务收益
+		var productStruct gorm_model.YounggeeProduct
+		if err = json.Unmarshal([]byte(projectInfo.ProductSnap), &productStruct); err != nil {
+			fmt.Println("Error:", err)
+			return err
+		}
+		t := time.Now()
+		income := gorm_model.YounggeeTalentIncome{
+			TalentID:       taskInfo.TalentId,
+			ProjectID:      taskInfo.ProjectId,
+			SectaskID:      taskInfo.TaskId,
+			BrandName:      productStruct.BrandName,
+			TaskName:       projectInfo.ProjectName,
+			Income:         strconv.FormatFloat(taskInfo.SettleAmount, 'f', 10, 32),
+			IncomeType:     1,
+			WithdrawStatus: 1,
+			IncomeAt:       &t,
+			WithdrawAt:     nil,
+		}
+		err = CreateIncome(ctx, income, nil)
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[projectPay service] call SpecialSettlePay error,err:%+v", err)
+			return err
+		}
+
+		// 更新招募策略
+		db = GetReadDB(ctx)
+		db = db.Model(gorm_model.RecruitStrategy{}).Where("project_id = ? and strategy_id = ?", taskInfo.ProjectId, taskInfo.StrategyId)
+		fansCount, _ := strconv.Atoi(conv.MustString(gjson.Get(taskInfo.TalentPlatformInfoSnap, "fans_count"), ""))
+		err = db.Updates(map[string]interface{}{
+			"fan_number":     gorm.Expr("fan_number + ?", fansCount),
+			"play_number":    gorm.Expr("play_number + ?", dataInfo.PlayNumber),
+			"like_number":    gorm.Expr("like_number + ?", dataInfo.LikeNumber),
+			"collect_number": gorm.Expr("collect_number + ?", dataInfo.CollectNumber),
+			"comment_number": gorm.Expr("comment_number + ?", dataInfo.CommentNumber),
+			"finish_number":  gorm.Expr("finish_number + 1"),
+			"total_offer":    gorm.Expr("total_offer + ?", taskInfo.RealPayment)}).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[Task db] Update YounggeeDataInfo error,err:%+v", err)
+			return err
+		}
+	}
+	return nil
+}
+
+// SetTaskFinish 专项任务结案
+func SetSpecialTaskFinish(ctx context.Context, TaskIDs []string) error {
+	db := GetReadDB(ctx)
+	// 1. 修改任务表,更新任务阶段为已结案,结案方式为正常结束,数据状态为已通过,
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{DataStatus: 5, TaskStage: 15, CompleteStatus: 2, WithdrawStatus: 2, CompleteDate: time.Now()}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Task db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+func SetTalentIncome(ctx context.Context, TaskIDs []string) error {
+	db := GetReadDB(ctx)
+	var TaskInfoList []gorm_model.YoungeeTaskInfo
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Scan(&TaskInfoList).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Task db] Update SetTalentIncome error,err:%+v", err)
+		return err
+	}
+	for _, taskInfo := range TaskInfoList {
+		err := db.Model(gorm_model.YoungeeTalentInfo{}).Where("id = ?", taskInfo.TalentId).Updates(map[string]interface{}{
+			"income":      gorm.Expr("income + ?", taskInfo.SettleAmount),
+			"canwithdraw": gorm.Expr("canwithdraw + ?", taskInfo.SettleAmount)}).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[Task db] Update SetTalentIncome error,err:%+v", err)
+			return err
+		}
+	}
+	return nil
+}
+
+func GetUnfinishedTaskNumber(ctx context.Context, projectID string) (*int64, error) {
+	var unFinishedTaskNumber int64
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? and task_status = 2 and task_stage < 15", projectID).Count(&unFinishedTaskNumber).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Find YounggeeTaskInfo error,err:%+v", err)
+		return nil, err
+	}
+	return &unFinishedTaskNumber, nil
+}
+
+func UpdateTaskStageByTaskId(ctx context.Context, taskID string, taskStatus int64, taskStage int64) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id=? and task_status = ?", taskID, taskStatus).Update("task_stage", taskStage).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[UpdateTaskStageByTaskId]2 error query mysql total, err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// 获取任务ids
+func GetTaskIds(ctx context.Context, projectId string) ([]string, error) {
+	db := GetReadDB(ctx)
+	var taskIds []string
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Select("task_id").Where("project_id = ? and task_status = 2", projectId).Find(&taskIds).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[CreateMessageByTask] error read mysql, err:%+v", err)
+		return nil, err
+	}
+
+	return taskIds, nil
+}
+
+func UpdateTask(ctx context.Context, updateData gorm_model.YoungeeTaskInfo, tx *gorm.DB) (bool, error) {
+	db := GetWriteDB(ctx)
+	whereCondition := gorm_model.YoungeeTaskInfo{
+		TaskId: updateData.TaskId,
+	}
+	if tx != nil {
+		err := tx.Where(whereCondition).Updates(&updateData).Error
+		if err != nil {
+			return false, err
+		}
+	} else {
+		err := db.Where(whereCondition).Updates(&updateData).Error
+		if err != nil {
+			return false, err
+		}
+	}
+
+	return true, nil
+}

+ 94 - 23
go.mod

@@ -1,23 +1,94 @@
-module youngee_m_api
-
-go 1.16
-
-require (
-	github.com/caixw/lib.go v0.0.0-20141220110639-1781da9139e0
-	github.com/cstockton/go-conv v1.0.0
-	github.com/gin-gonic/gin v1.8.1
-	github.com/sirupsen/logrus v1.8.1
-	gopkg.in/yaml.v2 v2.4.0
-	gorm.io/driver/mysql v1.3.4
-	gorm.io/gorm v1.23.6
-)
-
-require (
-	github.com/GUAIK-ORG/go-snowflake v0.0.0-20200116064823-220c4260e85f
-	github.com/go-redis/redis/v8 v8.11.5
-	github.com/google/uuid v1.3.0
-	github.com/issue9/conv v1.2.1
-	github.com/robfig/cron/v3 v3.0.0
-	github.com/tidwall/gjson v1.14.3
-	github.com/wechatpay-apiv3/wechatpay-go v0.2.15
-)
+module youngee_m_api
+
+go 1.22.1
+
+toolchain go1.22.3
+
+require (
+	github.com/caixw/lib.go v0.0.0-20141220110639-1781da9139e0
+	github.com/cstockton/go-conv v1.0.0
+	github.com/gin-gonic/gin v1.8.1
+	github.com/sirupsen/logrus v1.8.1
+	gopkg.in/yaml.v2 v2.4.0
+	gorm.io/driver/mysql v1.3.4
+	gorm.io/gorm v1.23.6
+)
+
+require (
+	github.com/GUAIK-ORG/go-snowflake v0.0.0-20200116064823-220c4260e85f
+	github.com/go-redis/redis/v8 v8.11.5
+	github.com/google/uuid v1.3.0
+	github.com/issue9/conv v1.2.1
+	github.com/robfig/cron/v3 v3.0.0
+	github.com/tidwall/gjson v1.14.3
+	github.com/wechatpay-apiv3/wechatpay-go v0.2.15
+)
+
+require (
+	github.com/agiledragon/gomonkey v2.0.2+incompatible // indirect
+	github.com/cespare/xxhash/v2 v2.1.2 // indirect
+	github.com/chzyer/logex v1.1.10 // indirect
+	github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect
+	github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 // indirect
+	github.com/creack/pty v1.1.9 // indirect
+	github.com/davecgh/go-spew v1.1.1 // indirect
+	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
+	github.com/fsnotify/fsnotify v1.4.9 // indirect
+	github.com/gin-contrib/sse v0.1.0 // indirect
+	github.com/go-playground/assert/v2 v2.0.1 // indirect
+	github.com/go-playground/locales v0.14.0 // indirect
+	github.com/go-playground/universal-translator v0.18.0 // indirect
+	github.com/go-playground/validator/v10 v10.10.0 // indirect
+	github.com/go-sql-driver/mysql v1.6.0 // indirect
+	github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect
+	github.com/goccy/go-json v0.9.7 // indirect
+	github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect
+	github.com/golang/protobuf v1.5.2 // indirect
+	github.com/google/go-cmp v0.5.5 // indirect
+	github.com/google/gofuzz v1.0.0 // indirect
+	github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect
+	github.com/hpcloud/tail v1.0.0 // indirect
+	github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639 // indirect
+	github.com/issue9/assert v1.4.1 // indirect
+	github.com/jinzhu/inflection v1.0.0 // indirect
+	github.com/jinzhu/now v1.1.4 // indirect
+	github.com/json-iterator/go v1.1.12 // indirect
+	github.com/kr/pretty v0.3.0 // indirect
+	github.com/kr/pty v1.1.1 // indirect
+	github.com/kr/text v0.2.0 // indirect
+	github.com/leodido/go-urn v1.2.1 // indirect
+	github.com/lin-jim-leon/kuaishou v0.3.0 // indirect
+	github.com/mattn/go-isatty v0.0.14 // indirect
+	github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
+	github.com/modern-go/reflect2 v1.0.2 // indirect
+	github.com/nxadm/tail v1.4.8 // indirect
+	github.com/onsi/ginkgo v1.16.5 // indirect
+	github.com/onsi/ginkgo/v2 v2.0.0 // indirect
+	github.com/onsi/gomega v1.18.1 // indirect
+	github.com/pelletier/go-toml/v2 v2.0.1 // indirect
+	github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e // indirect
+	github.com/pmezard/go-difflib v1.0.0 // indirect
+	github.com/rogpeppe/go-internal v1.8.0 // indirect
+	github.com/stretchr/objx v0.4.0 // indirect
+	github.com/stretchr/testify v1.8.0 // indirect
+	github.com/tidwall/match v1.1.1 // indirect
+	github.com/tidwall/pretty v1.2.0 // indirect
+	github.com/ugorji/go v1.2.7 // indirect
+	github.com/ugorji/go/codec v1.2.7 // indirect
+	github.com/yuin/goldmark v1.2.1 // indirect
+	golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect
+	golang.org/x/mod v0.3.0 // indirect
+	golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 // indirect
+	golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 // indirect
+	golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect
+	golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 // indirect
+	golang.org/x/text v0.3.6 // indirect
+	golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e // indirect
+	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
+	google.golang.org/protobuf v1.28.0 // indirect
+	gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
+	gopkg.in/errgo.v2 v2.1.0 // indirect
+	gopkg.in/fsnotify.v1 v1.4.7 // indirect
+	gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
+	gopkg.in/yaml.v3 v3.0.1 // indirect
+)

+ 220 - 218
go.sum

@@ -1,218 +1,220 @@
-github.com/GUAIK-ORG/go-snowflake v0.0.0-20200116064823-220c4260e85f h1:RDkg3pyE1qGbBpRWmvSN9RNZC5nUrOaEPiEpEb8y2f0=
-github.com/GUAIK-ORG/go-snowflake v0.0.0-20200116064823-220c4260e85f/go.mod h1:zA7AF9RTfpluCfz0omI4t5KCMaWHUMicsZoMccnaT44=
-github.com/agiledragon/gomonkey v2.0.2+incompatible h1:eXKi9/piiC3cjJD1658mEE2o3NjkJ5vDLgYjCQu0Xlw=
-github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw=
-github.com/caixw/lib.go v0.0.0-20141220110639-1781da9139e0 h1:MnIURgMAFAMyxAHu8h2TbnjxMMd7SKVCPyTZz5EfwNA=
-github.com/caixw/lib.go v0.0.0-20141220110639-1781da9139e0/go.mod h1:hQL8hyiiVE/BSo7gh13njx+DpvoPh/yE8/BkKKc62RA=
-github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
-github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
-github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
-github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/cstockton/go-conv v1.0.0 h1:zj/q/0MpQ/97XfiC9glWiohO8lhgR4TTnHYZifLTv6I=
-github.com/cstockton/go-conv v1.0.0/go.mod h1:HuiHkkRgOA0IoBNPC7ysG7kNpjDYlgM7Kj62yQPxjy4=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
-github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
-github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
-github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
-github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
-github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
-github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8=
-github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk=
-github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
-github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
-github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
-github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
-github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
-github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
-github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0=
-github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=
-github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
-github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
-github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
-github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
-github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
-github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM=
-github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
-github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
-github.com/issue9/assert v1.4.1 h1:gUtOpMTeaE4JTe9kACma5foOHBvVt1p5XTFrULDwdXI=
-github.com/issue9/assert v1.4.1/go.mod h1:Yktk83hAVl1SPSYtd9kjhBizuiBIqUQyj+D5SE2yjVY=
-github.com/issue9/conv v1.2.1 h1:bSRC6p0eSJqwtnN2yk04ct4F556y8i+TdiUiBvN+KdA=
-github.com/issue9/conv v1.2.1/go.mod h1:rxUsUvpb1/3rZt0Uf/UtEC6BogEO2BV3bCWbh2DORp8=
-github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
-github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
-github.com/jinzhu/now v1.1.4 h1:tHnRBy1i5F2Dh8BAFxqFzxKqqvezXrL2OW1TnX+Mlas=
-github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
-github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
-github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
-github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
-github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
-github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
-github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
-github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
-github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
-github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
-github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
-github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
-github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
-github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
-github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
-github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
-github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
-github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
-github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU=
-github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
-github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/robfig/cron/v3 v3.0.0 h1:kQ6Cb7aHOHTSzNVNEhmp8EcWKLb4CbiMW9h9VyIhO4E=
-github.com/robfig/cron/v3 v3.0.0/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
-github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
-github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
-github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
-github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
-github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/tidwall/gjson v1.14.3 h1:9jvXn7olKEHU1S9vwoMGliaT8jq1vJ7IH/n9zD9Dnlw=
-github.com/tidwall/gjson v1.14.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
-github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
-github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
-github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
-github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
-github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo=
-github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M=
-github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
-github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
-github.com/wechatpay-apiv3/wechatpay-go v0.2.15 h1:WtlAK8GsLwTveS7c5W8Vd1m4rU1cJ0YW6tqBW2BlKH8=
-github.com/wechatpay-apiv3/wechatpay-go v0.2.15/go.mod h1:Ca9wvI7xFoIWiY163q1jzddarQBS+1NE17OM1ZV24nw=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI=
-golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0=
-golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM=
-golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
-golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
-google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gorm.io/driver/mysql v1.3.4 h1:/KoBMgsUHC3bExsekDcmNYaBnfH2WNeFuXqqrqMc98Q=
-gorm.io/driver/mysql v1.3.4/go.mod h1:s4Tq0KmD0yhPGHbZEwg1VPlH0vT/GBHJZorPzhcxBUE=
-gorm.io/gorm v1.23.4/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk=
-gorm.io/gorm v1.23.6 h1:KFLdNgri4ExFFGTRGGFWON2P1ZN28+9SJRN8voOoYe0=
-gorm.io/gorm v1.23.6/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk=
+github.com/GUAIK-ORG/go-snowflake v0.0.0-20200116064823-220c4260e85f h1:RDkg3pyE1qGbBpRWmvSN9RNZC5nUrOaEPiEpEb8y2f0=
+github.com/GUAIK-ORG/go-snowflake v0.0.0-20200116064823-220c4260e85f/go.mod h1:zA7AF9RTfpluCfz0omI4t5KCMaWHUMicsZoMccnaT44=
+github.com/agiledragon/gomonkey v2.0.2+incompatible h1:eXKi9/piiC3cjJD1658mEE2o3NjkJ5vDLgYjCQu0Xlw=
+github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw=
+github.com/caixw/lib.go v0.0.0-20141220110639-1781da9139e0 h1:MnIURgMAFAMyxAHu8h2TbnjxMMd7SKVCPyTZz5EfwNA=
+github.com/caixw/lib.go v0.0.0-20141220110639-1781da9139e0/go.mod h1:hQL8hyiiVE/BSo7gh13njx+DpvoPh/yE8/BkKKc62RA=
+github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
+github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
+github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
+github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/cstockton/go-conv v1.0.0 h1:zj/q/0MpQ/97XfiC9glWiohO8lhgR4TTnHYZifLTv6I=
+github.com/cstockton/go-conv v1.0.0/go.mod h1:HuiHkkRgOA0IoBNPC7ysG7kNpjDYlgM7Kj62yQPxjy4=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
+github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
+github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
+github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
+github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8=
+github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk=
+github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
+github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
+github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
+github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
+github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
+github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
+github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0=
+github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=
+github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
+github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
+github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
+github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
+github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
+github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM=
+github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
+github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/issue9/assert v1.4.1 h1:gUtOpMTeaE4JTe9kACma5foOHBvVt1p5XTFrULDwdXI=
+github.com/issue9/assert v1.4.1/go.mod h1:Yktk83hAVl1SPSYtd9kjhBizuiBIqUQyj+D5SE2yjVY=
+github.com/issue9/conv v1.2.1 h1:bSRC6p0eSJqwtnN2yk04ct4F556y8i+TdiUiBvN+KdA=
+github.com/issue9/conv v1.2.1/go.mod h1:rxUsUvpb1/3rZt0Uf/UtEC6BogEO2BV3bCWbh2DORp8=
+github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
+github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
+github.com/jinzhu/now v1.1.4 h1:tHnRBy1i5F2Dh8BAFxqFzxKqqvezXrL2OW1TnX+Mlas=
+github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
+github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
+github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
+github.com/lin-jim-leon/kuaishou v0.3.0 h1:Gb0DRc62K51/78680Pq+zupOXTnd1CN1Lfv5NrqRIHo=
+github.com/lin-jim-leon/kuaishou v0.3.0/go.mod h1:BFbAhNC3PUIhAaA9YDSi6WDB0UcRMPS9C7dpFAtENaY=
+github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
+github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
+github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
+github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
+github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
+github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
+github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
+github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
+github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
+github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
+github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
+github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
+github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
+github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU=
+github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
+github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/robfig/cron/v3 v3.0.0 h1:kQ6Cb7aHOHTSzNVNEhmp8EcWKLb4CbiMW9h9VyIhO4E=
+github.com/robfig/cron/v3 v3.0.0/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
+github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
+github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
+github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
+github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
+github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/tidwall/gjson v1.14.3 h1:9jvXn7olKEHU1S9vwoMGliaT8jq1vJ7IH/n9zD9Dnlw=
+github.com/tidwall/gjson v1.14.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
+github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
+github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
+github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
+github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
+github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo=
+github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M=
+github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
+github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
+github.com/wechatpay-apiv3/wechatpay-go v0.2.15 h1:WtlAK8GsLwTveS7c5W8Vd1m4rU1cJ0YW6tqBW2BlKH8=
+github.com/wechatpay-apiv3/wechatpay-go v0.2.15/go.mod h1:Ca9wvI7xFoIWiY163q1jzddarQBS+1NE17OM1ZV24nw=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI=
+golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0=
+golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM=
+golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
+google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gorm.io/driver/mysql v1.3.4 h1:/KoBMgsUHC3bExsekDcmNYaBnfH2WNeFuXqqrqMc98Q=
+gorm.io/driver/mysql v1.3.4/go.mod h1:s4Tq0KmD0yhPGHbZEwg1VPlH0vT/GBHJZorPzhcxBUE=
+gorm.io/gorm v1.23.4/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk=
+gorm.io/gorm v1.23.6 h1:KFLdNgri4ExFFGTRGGFWON2P1ZN28+9SJRN8voOoYe0=
+gorm.io/gorm v1.23.6/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk=

+ 66 - 60
handler/CreateSecTaskLogistics.go

@@ -1,60 +1,66 @@
-package handler
-
-import (
-	"youngee_m_api/consts"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/service"
-	"youngee_m_api/util"
-
-	"github.com/gin-gonic/gin"
-	"github.com/sirupsen/logrus"
-)
-
-func WrapCreateSecTaskLogisticsHandler(ctx *gin.Context) {
-	handler := newCreateSecTaskLogisticsHandler(ctx)
-	BaseRun(handler)
-}
-
-type CreateSecTaskLogistics struct {
-	ctx  *gin.Context
-	req  *http_model.CreateSecTaskLogisticsRequest
-	resp *http_model.CommonResponse
-}
-
-func (c CreateSecTaskLogistics) getContext() *gin.Context {
-	return c.ctx
-}
-
-func (c CreateSecTaskLogistics) getResponse() interface{} {
-	return c.resp
-}
-
-func (c CreateSecTaskLogistics) getRequest() interface{} {
-	return c.req
-}
-
-func (c CreateSecTaskLogistics) run() {
-	data := http_model.CreateSecTaskLogisticsRequest{}
-	data = *c.req
-	res, err := service.SecLogistics.Create(c.ctx, data)
-	if err != nil {
-		logrus.Errorf("[CreateSecTaskLogistics] call CreateSecTaskLogistics err:%+v\n", err)
-		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
-		logrus.Info("CreateSecTaskLogistics fail,req:%+v", c.req)
-		return
-	}
-	c.resp.Message = "成功添加发货信息"
-	c.resp.Data = res
-}
-
-func (c CreateSecTaskLogistics) checkParam() error {
-	return nil
-}
-
-func newCreateSecTaskLogisticsHandler(ctx *gin.Context) *CreateSecTaskLogistics {
-	return &CreateSecTaskLogistics{
-		ctx:  ctx,
-		req:  http_model.NewCreateSecTaskLogisticsRequest(),
-		resp: http_model.NewCreateSecTaskLogisticsResponse(),
-	}
-}
+package handler
+
+import (
+	"fmt"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+)
+
+func WrapCreateSecTaskLogisticsHandler(ctx *gin.Context) {
+	handler := newCreateSecTaskLogisticsHandler(ctx)
+	BaseRun(handler)
+}
+
+type CreateSecTaskLogistics struct {
+	ctx  *gin.Context
+	req  *http_model.CreateSecTaskLogisticsRequest
+	resp *http_model.CommonResponse
+}
+
+func (c CreateSecTaskLogistics) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c CreateSecTaskLogistics) getResponse() interface{} {
+	return c.resp
+}
+
+func (c CreateSecTaskLogistics) getRequest() interface{} {
+	return c.req
+}
+
+func (c CreateSecTaskLogistics) run() {
+	data := http_model.CreateSecTaskLogisticsRequest{}
+	data = *c.req
+	res, err := service.SecLogistics.Create(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[CreateSecTaskLogistics] call CreateSecTaskLogistics err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("CreateSecTaskLogistics fail,req:%+v", c.req)
+		return
+	}
+	println("开始为每个带货子任务绑定免费领样策略")
+	err1 := service.SelectionTask.UpdateStrategyId(c.ctx, data.SelectionId)
+	nerr := service.SelectionTask.UpdateStrategyNumBySelectionId(c.ctx, data.SelectionId)
+	fmt.Println(nerr, err1)
+	println("完成为每个带货子任务绑定免费领样策略")
+	c.resp.Message = "成功添加发货信息"
+	c.resp.Data = res
+}
+
+func (c CreateSecTaskLogistics) checkParam() error {
+	return nil
+}
+
+func newCreateSecTaskLogisticsHandler(ctx *gin.Context) *CreateSecTaskLogistics {
+	return &CreateSecTaskLogistics{
+		ctx:  ctx,
+		req:  http_model.NewCreateSecTaskLogisticsRequest(),
+		resp: http_model.NewCreateSecTaskLogisticsResponse(),
+	}
+}

+ 6 - 0
handler/PassSecTaskCoop.go

@@ -1,6 +1,7 @@
 package handler
 
 import (
+	"fmt"
 	"github.com/gin-gonic/gin"
 	"github.com/sirupsen/logrus"
 	"youngee_m_api/consts"
@@ -47,6 +48,11 @@ func (c PassSecTaskCoop) run() {
 		logrus.Info("PassSecTaskCoop fail,req:%+v", c.req)
 		return
 	}
+	println("开始为每个带货子任务绑定免费领样策略")
+	err1 := service.SelectionTask.UpdateStrategyId(c.ctx, data.SelectionId)
+	nerr := service.SelectionTask.UpdateStrategyNumBySelectionId(c.ctx, data.SelectionId)
+	fmt.Println(nerr, err1)
+	println("完成为每个带货子任务绑定免费领样策略")
 	c.resp.Message = "成功合作选品任务"
 	c.resp.Data = res
 }

+ 61 - 61
handler/SettleSecTask.go

@@ -1,61 +1,61 @@
-package handler
-
-import (
-	"youngee_m_api/consts"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/service"
-	"youngee_m_api/util"
-
-	"github.com/gin-gonic/gin"
-	"github.com/sirupsen/logrus"
-)
-
-func WrapSettleSecTaskHandler(ctx *gin.Context) {
-	handler := newSettleSecTaskHandler(ctx)
-	BaseRun(handler)
-}
-
-type SettleSecTask struct {
-	ctx  *gin.Context
-	req  *http_model.SettleSecTaskRequest
-	resp *http_model.CommonResponse
-}
-
-func (c SettleSecTask) getContext() *gin.Context {
-	return c.ctx
-}
-
-func (c SettleSecTask) getResponse() interface{} {
-	return c.resp
-}
-
-func (c SettleSecTask) getRequest() interface{} {
-	return c.req
-}
-
-func (c SettleSecTask) run() {
-	//enterpriseID := middleware.GetSessionAuth(c.ctx).EnterpriseID
-	data := http_model.SettleSecTaskRequest{}
-	data = *c.req
-	res, err := service.SelectionTask.Settle(c.ctx, data.EnterpriseId, data)
-	if err != nil {
-		logrus.Errorf("[SettleSecTask] call SettleSecTask err:%+v\n", err)
-		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
-		logrus.Info("SettleSecTask fail,req:%+v", c.req)
-		return
-	}
-	c.resp.Message = "成功添加发货信息"
-	c.resp.Data = res
-}
-
-func (c SettleSecTask) checkParam() error {
-	return nil
-}
-
-func newSettleSecTaskHandler(ctx *gin.Context) *SettleSecTask {
-	return &SettleSecTask{
-		ctx:  ctx,
-		req:  http_model.NewSettleSecTaskRequest(),
-		resp: http_model.NewSettleSecTaskResponse(),
-	}
-}
+package handler
+
+import (
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+)
+
+func WrapSettleSecTaskHandler(ctx *gin.Context) {
+	handler := newSettleSecTaskHandler(ctx)
+	BaseRun(handler)
+}
+
+type SettleSecTask struct {
+	ctx  *gin.Context
+	req  *http_model.SettleSecTaskRequest
+	resp *http_model.CommonResponse
+}
+
+func (c SettleSecTask) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c SettleSecTask) getResponse() interface{} {
+	return c.resp
+}
+
+func (c SettleSecTask) getRequest() interface{} {
+	return c.req
+}
+
+func (c SettleSecTask) run() {
+	//enterpriseID := middleware.GetSessionAuth(c.ctx).EnterpriseID
+	data := http_model.SettleSecTaskRequest{}
+	data = *c.req
+	res, err := service.SelectionTask.Settle(c.ctx, data.EnterpriseId, data)
+	if err != nil {
+		logrus.Errorf("[SettleSecTask] call SettleSecTask err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("SettleSecTask fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功结算"
+	c.resp.Data = res
+}
+
+func (c SettleSecTask) checkParam() error {
+	return nil
+}
+
+func newSettleSecTaskHandler(ctx *gin.Context) *SettleSecTask {
+	return &SettleSecTask{
+		ctx:  ctx,
+		req:  http_model.NewSettleSecTaskRequest(),
+		resp: http_model.NewSettleSecTaskResponse(),
+	}
+}

+ 55 - 55
handler/getEnterpriseIds.go

@@ -1,55 +1,55 @@
-package handler
-
-import (
-	"github.com/gin-gonic/gin"
-	"github.com/sirupsen/logrus"
-	"youngee_m_api/consts"
-	"youngee_m_api/db"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/util"
-)
-
-func WrapGetEnterpriseIdsHandler(ctx *gin.Context) {
-	handler := newGetEnterpriseIdsHandler(ctx)
-	BaseRun(handler)
-}
-
-type GetEnterpriseIdsHandler struct {
-	ctx  *gin.Context
-	req  *http_model.GetEnterPriseIdsRequest
-	resp *http_model.CommonResponse
-}
-
-func (g GetEnterpriseIdsHandler) getContext() *gin.Context {
-	return g.ctx
-}
-
-func (g GetEnterpriseIdsHandler) getResponse() interface{} {
-	return g.resp
-}
-
-func (g GetEnterpriseIdsHandler) getRequest() interface{} {
-	return g.req
-}
-
-func (g GetEnterpriseIdsHandler) run() {
-	data, err := db.GetEnterpriseIds(g.ctx)
-	if err != nil {
-		logrus.WithContext(g.ctx).Errorf("[GetEnterpriseIdsHandler] error GetEnterpriseIds, err:%+v", err)
-		util.HandlerPackErrorResp(g.resp, consts.ErrorInternal, consts.DefaultToast)
-		return
-	}
-	g.resp.Data = data
-}
-
-func (g GetEnterpriseIdsHandler) checkParam() error {
-	return nil
-}
-
-func newGetEnterpriseIdsHandler(ctx *gin.Context) *GetEnterpriseIdsHandler {
-	return &GetEnterpriseIdsHandler{
-		ctx:  ctx,
-		req:  http_model.NewGetEnterpriseIdsRequest(),
-		resp: http_model.NewGetEnterpriseIdsResponse(),
-	}
-}
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/db"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/util"
+)
+
+func WrapGetEnterpriseIdsHandler(ctx *gin.Context) {
+	handler := newGetEnterpriseIdsHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetEnterpriseIdsHandler struct {
+	ctx  *gin.Context
+	req  *http_model.GetEnterPriseIdsRequest
+	resp *http_model.CommonResponse
+}
+
+func (g GetEnterpriseIdsHandler) getContext() *gin.Context {
+	return g.ctx
+}
+
+func (g GetEnterpriseIdsHandler) getResponse() interface{} {
+	return g.resp
+}
+
+func (g GetEnterpriseIdsHandler) getRequest() interface{} {
+	return g.req
+}
+
+func (g GetEnterpriseIdsHandler) run() {
+	data, err := db.GetEnterpriseIds(g.ctx)
+	if err != nil {
+		logrus.WithContext(g.ctx).Errorf("[GetEnterpriseIdsHandler] error GetEnterpriseIds, err:%+v", err)
+		util.HandlerPackErrorResp(g.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	g.resp.Data = data
+}
+
+func (g GetEnterpriseIdsHandler) checkParam() error {
+	return nil
+}
+
+func newGetEnterpriseIdsHandler(ctx *gin.Context) *GetEnterpriseIdsHandler {
+	return &GetEnterpriseIdsHandler{
+		ctx:  ctx,
+		req:  http_model.NewGetEnterpriseIdsRequest(),
+		resp: http_model.NewGetEnterpriseIdsResponse(),
+	}
+}

+ 52 - 0
handler/productKuaishouFind.go

@@ -0,0 +1,52 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+)
+
+func WrapFindKuaishouProductHandler(ctx *gin.Context) {
+	handler := newFindKuaishouProductHandler(ctx)
+	BaseRun(handler)
+}
+
+func newFindKuaishouProductHandler(ctx *gin.Context) *FindKuaishouProductHandler {
+	return &FindKuaishouProductHandler{
+		req:  http_model.NewFindKuaishouProductRequest(),
+		resp: http_model.NewFindKuaishouProductResponse(),
+		ctx:  ctx,
+	}
+}
+
+type FindKuaishouProductHandler struct {
+	req  *http_model.FindKuaishouProductRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *FindKuaishouProductHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *FindKuaishouProductHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *FindKuaishouProductHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h *FindKuaishouProductHandler) run() {
+	data := *&http_model.FindKuaishouProductRequest{}
+	data = *h.req
+	// print("data: ", data.ItemList)
+
+	res, err := service.Product.QueryKuaishouProduct(h.ctx, data)
+	if err != nil {
+		logrus.Info("FindKuaishouProduct fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Data = res
+}
+func (h *FindKuaishouProductHandler) checkParam() error {
+	return nil
+}

+ 90 - 89
handler/product_create.go

@@ -1,89 +1,90 @@
-package handler
-
-import (
-	"fmt"
-	"github.com/gin-gonic/gin"
-	"github.com/sirupsen/logrus"
-	log "github.com/sirupsen/logrus"
-	"youngee_m_api/consts"
-	"youngee_m_api/db"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/service"
-	"youngee_m_api/util"
-)
-
-func WrapCreateProductHandler(ctx *gin.Context) {
-	handler := newCreateProductHandler(ctx)
-	BaseRun(handler)
-}
-
-func newCreateProductHandler(ctx *gin.Context) *CreateProductHandler {
-	return &CreateProductHandler{
-		req:  http_model.NewCreateProductRequest(),
-		resp: http_model.NewCreateProductResponse(),
-		ctx:  ctx,
-	}
-}
-
-type CreateProductHandler struct {
-	req  *http_model.CreateProductRequest
-	resp *http_model.CommonResponse
-	ctx  *gin.Context
-}
-
-func (h *CreateProductHandler) getRequest() interface{} {
-	return h.req
-}
-func (h *CreateProductHandler) getContext() *gin.Context {
-	return h.ctx
-}
-func (h *CreateProductHandler) getResponse() interface{} {
-	return h.resp
-}
-func (h *CreateProductHandler) run() {
-	data := http_model.CreateProductRequest{}
-	data = *h.req
-	fmt.Println("ProductId:", h.req.ProductId)
-	enterpriseID := db.GetEnterpriseIDByProductID(h.ctx, h.req.ProductId)
-	fmt.Println("enterpriseID:", enterpriseID)
-	// 根据品牌名和商品名查询商品是否存在,若存在则更新,否则新增
-	product, err := service.Product.FindByID(h.ctx, data.ProductId)
-	if err != nil {
-		logrus.Errorf("[CreateProductHandler] call FindByID err:%+v\n", err)
-		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
-		log.Info("CreateProduct fail,req:%+v", h.req)
-		return
-	} else {
-		if product != nil {
-			// 该商品存在,更新
-			fmt.Println("该商品存在,更新")
-			fmt.Println("商品价格:", data.ProductPrice)
-			data.ProductId = product.ProductID
-			res, err := service.Product.Update(h.ctx, data, enterpriseID)
-			if err != nil {
-				logrus.Errorf("[CreateProductHandler] call Update err:%+v\n", err)
-				util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
-				log.Info("CreateProduct fail,req:%+v", h.req)
-				return
-			}
-			h.resp.Message = "成功更新商品信息"
-			h.resp.Data = res
-		} else {
-			// 商品不存在,新增
-			fmt.Println("商品不存在,新增")
-			fmt.Println("data.EnterpriseId:", data.EnterpriseId)
-			res, err := service.Product.Create(h.ctx, data, data.EnterpriseId)
-			if err != nil {
-				logrus.Errorf("[CreateProductHandler] call Create err:%+v\n", err)
-				util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
-				log.Info("CreateProduct fail,req:%+v", h.req)
-				return
-			}
-			h.resp.Message = "成功新增商品信息"
-			h.resp.Data = res
-		}
-	}
-}
-func (h *CreateProductHandler) checkParam() error {
-	return nil
-}
+package handler
+
+import (
+	"fmt"
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/db"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+)
+
+func WrapCreateProductHandler(ctx *gin.Context) {
+	handler := newCreateProductHandler(ctx)
+	BaseRun(handler)
+}
+
+func newCreateProductHandler(ctx *gin.Context) *CreateProductHandler {
+	return &CreateProductHandler{
+		req:  http_model.NewCreateProductRequest(),
+		resp: http_model.NewCreateProductResponse(),
+		ctx:  ctx,
+	}
+}
+
+type CreateProductHandler struct {
+	req  *http_model.CreateProductRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *CreateProductHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *CreateProductHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *CreateProductHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h *CreateProductHandler) run() {
+	data := http_model.CreateProductRequest{}
+	data = *h.req
+	fmt.Println("ProductId:", h.req.ProductId)
+	enterpriseID := db.GetEnterpriseIDByProductID(h.ctx, h.req.ProductId)
+	fmt.Println("enterpriseID:", enterpriseID)
+	// 根据品牌名和商品名查询商品是否存在,若存在则更新,否则新增
+	product, err := service.Product.FindByID(h.ctx, data.ProductId)
+	if err != nil {
+		logrus.Errorf("[CreateProductHandler] call FindByID err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProduct fail,req:%+v", h.req)
+		return
+	} else {
+		if product != nil {
+			// 该商品存在,更新
+			fmt.Println("该商品存在,更新")
+			fmt.Println("商品价格:", data.ProductPrice)
+			fmt.Println("商品公开佣金:", data.PublicCommission)
+			data.ProductId = product.ProductID
+			res, err := service.Product.Update(h.ctx, data, enterpriseID)
+			if err != nil {
+				logrus.Errorf("[CreateProductHandler] call Update err:%+v\n", err)
+				util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+				log.Info("CreateProduct fail,req:%+v", h.req)
+				return
+			}
+			h.resp.Message = "成功更新商品信息"
+			h.resp.Data = res
+		} else {
+			// 商品不存在,新增
+			fmt.Println("商品不存在,新增")
+			fmt.Println("data.EnterpriseId:", data.EnterpriseId)
+			res, err := service.Product.Create(h.ctx, data, data.EnterpriseId)
+			if err != nil {
+				logrus.Errorf("[CreateProductHandler] call Create err:%+v\n", err)
+				util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+				log.Info("CreateProduct fail,req:%+v", h.req)
+				return
+			}
+			h.resp.Message = "成功新增商品信息"
+			h.resp.Data = res
+		}
+	}
+}
+func (h *CreateProductHandler) checkParam() error {
+	return nil
+}

+ 55 - 55
handler/product_find.go

@@ -1,55 +1,55 @@
-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 WrapFindProductHandler(ctx *gin.Context) {
-	handler := newFindProductHandler(ctx)
-	BaseRun(handler)
-}
-
-func newFindProductHandler(ctx *gin.Context) *FindProductHandler {
-	return &FindProductHandler{
-		req:  http_model.NewFindProductRequest(),
-		resp: http_model.NewFindProductResponse(),
-		ctx:  ctx,
-	}
-}
-
-type FindProductHandler struct {
-	req  *http_model.FindProductRequest
-	resp *http_model.CommonResponse
-	ctx  *gin.Context
-}
-
-func (h *FindProductHandler) getRequest() interface{} {
-	return h.req
-}
-func (h *FindProductHandler) getContext() *gin.Context {
-	return h.ctx
-}
-func (h *FindProductHandler) getResponse() interface{} {
-	return h.resp
-}
-func (h *FindProductHandler) run() {
-	data := *&http_model.FindProductRequest{}
-	data = *h.req
-	res, err := service.Product.FindByID(h.ctx, data.ProductID)
-	if err != nil {
-		// 数据库查询失败,返回5001
-		logrus.Errorf("[FindProductHandler] call FindByID err:%+v\n", err)
-		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
-		logrus.Info("FindProduct fail,req:%+v", h.req)
-		return
-	}
-	h.resp.Data = res
-}
-func (h *FindProductHandler) checkParam() error {
-	return nil
-}
+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 WrapFindProductHandler(ctx *gin.Context) {
+	handler := newFindProductHandler(ctx)
+	BaseRun(handler)
+}
+
+func newFindProductHandler(ctx *gin.Context) *FindProductHandler {
+	return &FindProductHandler{
+		req:  http_model.NewFindProductRequest(),
+		resp: http_model.NewFindProductResponse(),
+		ctx:  ctx,
+	}
+}
+
+type FindProductHandler struct {
+	req  *http_model.FindProductRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *FindProductHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *FindProductHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *FindProductHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h *FindProductHandler) run() {
+	data := *&http_model.FindProductRequest{}
+	data = *h.req
+	res, err := service.Product.FindByID(h.ctx, data.ProductID)
+	if err != nil {
+		// 数据库查询失败,返回5001
+		logrus.Errorf("[FindProductHandler] call FindByID err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		logrus.Info("FindProduct fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Data = res
+}
+func (h *FindProductHandler) checkParam() error {
+	return nil
+}

+ 59 - 58
handler/selection_detail.go

@@ -1,58 +1,59 @@
-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 WrapSelectionDetailHandler(ctx *gin.Context) {
-	handler := newSelectionDetail(ctx)
-	BaseRun(handler)
-}
-
-type SelectionDetailHandler struct {
-	ctx  *gin.Context
-	req  *http_model.SelectionDetailRequest
-	resp *http_model.CommonResponse
-}
-
-func (s SelectionDetailHandler) getContext() *gin.Context {
-	return s.ctx
-}
-
-func (s SelectionDetailHandler) getResponse() interface{} {
-	return s.resp
-}
-
-func (s SelectionDetailHandler) getRequest() interface{} {
-	return s.req
-}
-
-func (s SelectionDetailHandler) run() {
-	//enterpriseID := middleware.GetSessionAuth(s.ctx).EnterpriseID
-	res, err := service.Selection.GetSelectionDetail(s.ctx, s.req.SelectionId, s.req.EnterpriseId)
-	if err != nil {
-		logrus.Errorf("[GetSelectionDetail] call Show err:%+v\n", err)
-		util.HandlerPackErrorResp(s.resp, consts.ErrorInternal, "")
-		logrus.Info("GetSelectionDetail fail,req:%+v", s.req)
-		return
-	}
-	s.resp.Message = "成功查询项目"
-	s.resp.Data = res
-}
-
-func (s SelectionDetailHandler) checkParam() error {
-	return nil
-}
-
-func newSelectionDetail(ctx *gin.Context) *SelectionDetailHandler {
-	return &SelectionDetailHandler{
-		ctx:  ctx,
-		req:  http_model.NewSelectionDetailRequest(),
-		resp: http_model.NewSelectionDetailResponse(),
-	}
-}
+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 WrapSelectionDetailHandler(ctx *gin.Context) {
+	handler := newSelectionDetail(ctx)
+	BaseRun(handler)
+}
+
+type SelectionDetailHandler struct {
+	ctx  *gin.Context
+	req  *http_model.SelectionDetailRequest
+	resp *http_model.CommonResponse
+}
+
+func (s SelectionDetailHandler) getContext() *gin.Context {
+	return s.ctx
+}
+
+func (s SelectionDetailHandler) getResponse() interface{} {
+	return s.resp
+}
+
+func (s SelectionDetailHandler) getRequest() interface{} {
+	return s.req
+}
+
+func (s SelectionDetailHandler) run() {
+	//enterpriseID := middleware.GetSessionAuth(s.ctx).EnterpriseID
+
+	res, err := service.Selection.GetSelectionDetail(s.ctx, s.req.SelectionId, s.req.EnterpriseId)
+	if err != nil {
+		logrus.Errorf("[GetSelectionDetail] call Show err:%+v\n", err)
+		util.HandlerPackErrorResp(s.resp, consts.ErrorInternal, "")
+		logrus.Info("GetSelectionDetail fail,req:%+v", s.req)
+		return
+	}
+	s.resp.Message = "成功查询项目"
+	s.resp.Data = res
+}
+
+func (s SelectionDetailHandler) checkParam() error {
+	return nil
+}
+
+func newSelectionDetail(ctx *gin.Context) *SelectionDetailHandler {
+	return &SelectionDetailHandler{
+		ctx:  ctx,
+		req:  http_model.NewSelectionDetailRequest(),
+		resp: http_model.NewSelectionDetailResponse(),
+	}
+}

+ 62 - 60
handler/selection_update.go

@@ -1,60 +1,62 @@
-package handler
-
-import (
-	"youngee_m_api/consts"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/service"
-	"youngee_m_api/util"
-
-	"github.com/gin-gonic/gin"
-	"github.com/sirupsen/logrus"
-)
-
-func WrapUpdateSelectionHandler(ctx *gin.Context) {
-	handler := newUpdateSelectionHandler(ctx)
-	BaseRun(handler)
-}
-
-type UpdateSelection struct {
-	ctx  *gin.Context
-	req  *http_model.UpdateSelectionRequest
-	resp *http_model.CommonResponse
-}
-
-func (c UpdateSelection) getContext() *gin.Context {
-	return c.ctx
-}
-
-func (c UpdateSelection) getResponse() interface{} {
-	return c.resp
-}
-
-func (c UpdateSelection) getRequest() interface{} {
-	return c.req
-}
-
-func (c UpdateSelection) run() {
-	data := http_model.UpdateSelectionRequest{}
-	data = *c.req
-	res, err := service.Selection.Update(c.ctx, data, data.EnterpriseId)
-	if err != nil {
-		logrus.Errorf("[UpdateSelection] call UpdateSelection err:%+v\n", err)
-		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
-		logrus.Info("UpdateSelection fail,req:%+v", c.req)
-		return
-	}
-	c.resp.Message = "更新选品成功"
-	c.resp.Data = res
-}
-
-func (c UpdateSelection) checkParam() error {
-	return nil
-}
-
-func newUpdateSelectionHandler(ctx *gin.Context) *UpdateSelection {
-	return &UpdateSelection{
-		ctx:  ctx,
-		req:  http_model.NewUpdateSelectionRequest(),
-		resp: http_model.NewUpdateSelectionResponse(),
-	}
-}
+package handler
+
+import (
+	"fmt"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+)
+
+func WrapUpdateSelectionHandler(ctx *gin.Context) {
+	handler := newUpdateSelectionHandler(ctx)
+	BaseRun(handler)
+}
+
+type UpdateSelection struct {
+	ctx  *gin.Context
+	req  *http_model.UpdateSelectionRequest
+	resp *http_model.CommonResponse
+}
+
+func (c UpdateSelection) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c UpdateSelection) getResponse() interface{} {
+	return c.resp
+}
+
+func (c UpdateSelection) getRequest() interface{} {
+	return c.req
+}
+
+func (c UpdateSelection) run() {
+	data := http_model.UpdateSelectionRequest{}
+	data = *c.req
+	fmt.Print("data: awdawwa", data)
+	res, err := service.Selection.Update(c.ctx, data, data.EnterpriseId)
+	if err != nil {
+		logrus.Errorf("[UpdateSelection] call UpdateSelection err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("UpdateSelection fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "更新带货任务成功"
+	c.resp.Data = res
+}
+
+func (c UpdateSelection) checkParam() error {
+	return nil
+}
+
+func newUpdateSelectionHandler(ctx *gin.Context) *UpdateSelection {
+	return &UpdateSelection{
+		ctx:  ctx,
+		req:  http_model.NewUpdateSelectionRequest(),
+		resp: http_model.NewUpdateSelectionResponse(),
+	}
+}

+ 19 - 0
model/gorm_model/free_strategy.go

@@ -0,0 +1,19 @@
+package gorm_model
+
+type FreeStrategy struct {
+	FreeStrategyId    int64  `gorm:"column:free_strategy_id;primary_key;AUTO_INCREMENT"` // 免费领样策略id
+	StrategyId        int64  `gorm:"column:strategy_id"`                                 // 策略编号
+	SelectionId       string `gorm:"column:selection_id"`                                // 带货任务id
+	FansNum           int64  `gorm:"column:fans_num"`                                    // 粉丝数量
+	SaleNum           int64  `gorm:"column:sale_num"`                                    // 近30天橱窗销量
+	StrategyStatus    int64  `gorm:"column:strategy_status"`                             // 招募策略状态
+	EnrollNum         int    `gorm:"column:enroll_num"`                                  // 报名数量
+	ChooseNum         int    `gorm:"column:choose_num"`                                  // 已选数量
+	BeforeDeliveryNum int    `gorm:"column:before_delivery_num"`                         // 待发货数量
+	DeliveryNum       int    `gorm:"column:delivery_num"`                                // 已发货数量
+	AfterDeliveryNum  int    `gorm:"column:after_delivery_num"`                          // 已收货数量
+}
+
+func (m *FreeStrategy) TableName() string {
+	return "free_strategy"
+}

+ 15 - 0
model/gorm_model/platform_kuaishou_user_info.go

@@ -0,0 +1,15 @@
+package gorm_model
+
+type PlatformKuaishouUserInfo struct {
+	Id           int    `gorm:"column:id;primary_key;AUTO_INCREMENT"` // ID
+	OpenId       string `gorm:"column:open_id"`                       // 快手openid
+	PlatformId   int    `gorm:"column:platform_id"`                   // 平台id
+	TalentId     string `gorm:"column:talent_id"`                     // 达人id
+	Code         string `gorm:"column:code"`                          // 扫码后获得的临时票据
+	AccessToken  string `gorm:"column:access_token"`                  // 扫码后获得的临时票据
+	RefreshToken string `gorm:"column:refresh_token"`                 // 用于刷新access_token
+}
+
+func (m *PlatformKuaishouUserInfo) TableName() string {
+	return "platform_kuaishou_user_info"
+}

+ 28 - 24
model/gorm_model/product.go

@@ -1,24 +1,28 @@
-// Code generated by sql2gorm. DO NOT EDIT.
-package gorm_model
-
-import (
-	"time"
-)
-
-type YounggeeProduct struct {
-	ProductID     int64     `gorm:"column:product_id;primary_key;AUTO_INCREMENT"` // 商品id
-	ProductName   string    `gorm:"column:product_name"`                          // 商品名称
-	ProductType   int64     `gorm:"column:product_type"`                          // 商品类型
-	ShopAddress   string    `gorm:"column:shop_address"`                          // 店铺地址,商品类型为线下品牌时需填写
-	ProductPrice  float64   `gorm:"column:product_price"`                         // 商品价值
-	ProductDetail string    `gorm:"column:product_detail"`
-	ProductUrl    string    `gorm:"column:product_url"`   // 商品链接,可为电商网址、公司官网、大众点评的店铺地址等可以说明商品信息或者品牌信息的线上地址;
-	EnterpriseID  string    `gorm:"column:enterprise_id"` // 所属企业id
-	CreatedAt     time.Time `gorm:"column:created_at"`    // 创建时间
-	UpdatedAt     time.Time `gorm:"column:updated_at"`    // 更新时间
-	BrandName     string    `gorm:"column:brand_name"`
-}
-
-func (m *YounggeeProduct) TableName() string {
-	return "younggee_product"
-}
+package gorm_model
+
+import (
+	"time"
+)
+
+type YounggeeProduct struct {
+	ProductID           int64     `gorm:"column:product_id;primary_key;AUTO_INCREMENT"` // 商品id
+	ProductName         string    `gorm:"column:product_name"`                          // 商品名称
+	ProductType         int64     `gorm:"column:product_type"`                          // 商品类型
+	ShopAddress         string    `gorm:"column:shop_address"`                          // 店铺地址,商品类型为线下品牌时需填写
+	ProductPrice        float64   `gorm:"column:product_price"`                         // 商品价值
+	ProductDetail       string    `gorm:"column:product_detail"`                        // 商品详情
+	ProductUrl          string    `gorm:"column:product_url"`                           // 商品链接,可为电商网址、公司官网、大众点评的店铺地址等可以说明商品信息或者品牌信息的线上地址;
+	EnterpriseID        string    `gorm:"column:enterprise_id"`                         // 所属企业id
+	CreatedAt           time.Time `gorm:"column:created_at"`                            // 创建时间
+	UpdatedAt           time.Time `gorm:"column:updated_at"`                            // 更新时间
+	BrandName           string    `gorm:"column:brand_name"`                            // 品牌名称
+	PublicCommission    float64   `gorm:"column:public_commission"`                     // 公开佣金
+	ExclusiveCommission float64   `gorm:"column:exclusive_commission"`                  // 专属佣金
+	CommissionPrice     float64   `gorm:"column:commission_price"`                      // 佣金金额
+	KuaishouProductId   int64     `gorm:"column:kuaishou_product_id"`                   // 快手商品ID
+	SalesCount          string    `gorm:"column:sales_count"`                           // 商品30天销量
+}
+
+func (m *YounggeeProduct) TableName() string {
+	return "younggee_product"
+}

+ 14 - 0
model/gorm_model/reward_strategy.go

@@ -0,0 +1,14 @@
+package gorm_model
+
+type RewardStrategy struct {
+	RewardStrategyId int64   `gorm:"column:reward_strategy_id;primary_key;AUTO_INCREMENT"` // 悬赏策略id
+	SelectionId      string  `gorm:"column:selection_id"`                                  // 带货任务id
+	Reward           float64 `gorm:"column:reward"`                                        // 悬赏池总金额
+	SaleActual       int64   `gorm:"column:sale_actual"`                                   // 实际带货销量
+	PerReward        float64 `gorm:"column:per_reward"`                                    // 每人可获得悬赏金
+	StrategyStatus   int64   `gorm:"column:strategy_status"`                               // 悬赏策略状态
+}
+
+func (m *RewardStrategy) TableName() string {
+	return "reward_strategy"
+}

+ 1 - 0
model/gorm_model/selection_info.go

@@ -37,6 +37,7 @@ type YounggeeSelectionInfo struct {
 	IsRead           int        `gorm:"column:is_read"`                  // 是否已读
 	AutoTaskID       int        `gorm:"column:auto_task_id"`             // 定时任务id
 	AutoFailAt       *time.Time `gorm:"column:auto_fail_at"`             // 失效自动处理时间
+	Status           int        `gorm:"column:status"`                   // 选品是否删除 2代表删除
 }
 
 func (m *YounggeeSelectionInfo) TableName() string {

+ 51 - 44
model/gorm_model/selection_task_info.go

@@ -1,44 +1,51 @@
-package gorm_model
-
-// Code generated by sql2gorm. DO NOT EDIT.
-
-import (
-	"time"
-)
-
-type YounggeeSecTaskInfo struct {
-	ID                     int       `gorm:"column:id;primary_key"`                        // 递增id
-	TaskID                 string    `gorm:"column:task_id"`                               // 选品任务id
-	SelectionID            string    `gorm:"column:selection_id"`                          // 选品id
-	TalentID               string    `gorm:"column:talent_id"`                             // 达人id
-	AccountID              int       `gorm:"column:account_id"`                            // 账号id
-	TalentPlatformInfoSnap string    `gorm:"column:talent_platform_info_snap"`             // 达人平台信息快照
-	TalentPersonalInfoSnap string    `gorm:"column:talent_personal_info_snap"`             // 达人个人信息快照
-	TalentPostAddrSnap     string    `gorm:"column:talent_post_addr_snap"`                 // 收货地址快照
-	TaskReward             string    `gorm:"column:task_reward"`                           //  达人赏金
-	TalentPayment          string    `gorm:"column:talent_payment"`                        // 达人垫付金额
-	IsPayPayment           int       `gorm:"column:is_pay_payment"`                        // 企业是否返样品钱
-	IsPayReward            int       `gorm:"column:is_pay_reward"`                         // 企业是否结算悬赏
-	TaskMode               int       `gorm:"column:task_mode"`                             // 任务形式,1、2分别表示纯佣带货、悬赏任务
-	SampleMode             int       `gorm:"column:sample_mode"`                           // 领样形式,1-3分别表示免费领样、垫付买样、不提供样品
-	TaskStatus             int       `gorm:"column:task_status;default:1"`                 // 任务状态 1待选 2已选 3落选
-	TaskStage              int       `gorm:"column:task_stage"`                            // 任务阶段,详情见info_sec_task_stage表
-	CreateDate             time.Time `gorm:"column:create_date;default:CURRENT_TIMESTAMP"` // 创建时间
-	SelectDate             time.Time `gorm:"column:select_date"`                           // 反选时间
-	DeliveryDate           time.Time `gorm:"column:delivery_date"`                         // 发货时间
-	CompleteDate           time.Time `gorm:"column:complete_date"`                         // 结束时间
-	WithdrawDate           time.Time `gorm:"column:withdraw_date"`                         // 提现时间
-	CompleteStatus         int       `gorm:"column:complete_status;default:1"`             // 结束方式 1未结束 2正常结束 3反选失败
-	LogisticsStatus        int       `gorm:"column:logistics_status;default:1"`            // 发货状态 1 待发货 2已发货 3 已签收
-	AssignmentStatus       uint      `gorm:"column:assignment_status;default:1"`           // 作业上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
-	UpdateAt               time.Time `gorm:"column:update_at"`                             // 更新时间
-	WithdrawStatus         int       `gorm:"column:withdraw_status;default:1"`             // 提现状态,1-4分别代表不可提现、可提现、提现中、已提现
-	LeadTeamID             string    `gorm:"column:lead_team_id"`                          // 作为团长的young之团id,对应younggee_talent_team中的team_id字段
-	TeamID                 string    `gorm:"column:team_id"`                               // 作为团员的young之团id,对应younggee_talent_team中的team_id字段
-	TeamIncome             int       `gorm:"column:team_income"`                           // young之团团长现金收益
-	TeamPoint              int       `gorm:"column:team_point"`                            // young之团团长积分收益
-}
-
-func (m *YounggeeSecTaskInfo) TableName() string {
-	return "younggee_sec_task_info"
-}
+package gorm_model
+
+import (
+	"time"
+)
+
+type YounggeeSecTaskInfo struct {
+	ID                     int       `gorm:"column:id;primary_key"`                        // 递增id
+	TaskID                 string    `gorm:"column:task_id"`                               // 选品任务id
+	SelectionID            string    `gorm:"column:selection_id"`                          // 选品id
+	TalentID               string    `gorm:"column:talent_id"`                             // 达人id
+	AccountID              int       `gorm:"column:account_id"`                            // 账号id
+	TalentPlatformInfoSnap string    `gorm:"column:talent_platform_info_snap"`             // 达人平台信息快照
+	TalentPersonalInfoSnap string    `gorm:"column:talent_personal_info_snap"`             // 达人个人信息快照
+	TalentPostAddrSnap     string    `gorm:"column:talent_post_addr_snap"`                 // 收货地址快照
+	TaskReward             string    `gorm:"column:task_reward"`                           //  达人赏金
+	TalentPayment          string    `gorm:"column:talent_payment"`                        // 达人垫付金额
+	IsPayPayment           int       `gorm:"column:is_pay_payment"`                        // 企业是否返样品钱
+	IsPayReward            int       `gorm:"column:is_pay_reward"`                         // 企业是否结算悬赏
+	TaskMode               int       `gorm:"column:task_mode"`                             // 任务形式,1、2分别表示纯佣带货、悬赏任务
+	SampleMode             int       `gorm:"column:sample_mode"`                           // 领样形式,1-3分别表示免费领样、垫付买样、不提供样品
+	TaskStatus             int       `gorm:"column:task_status;default:1"`                 // 任务状态 1待选 2已选 3落选
+	TaskStage              int       `gorm:"column:task_stage"`                            // 任务阶段,详情见info_sec_task_stage表
+	CreateDate             time.Time `gorm:"column:create_date;default:CURRENT_TIMESTAMP"` // 创建时间
+	SelectDate             time.Time `gorm:"column:select_date"`                           // 反选时间
+	DeliveryDate           time.Time `gorm:"column:delivery_date"`                         // 发货时间
+	CompleteDate           time.Time `gorm:"column:complete_date"`                         // 结束时间
+	WithdrawDate           time.Time `gorm:"column:withdraw_date"`                         // 提现时间
+	CompleteStatus         int       `gorm:"column:complete_status;default:1"`             // 结束方式 1未结束 2正常结束 3反选失败
+	LogisticsStatus        int       `gorm:"column:logistics_status;default:1"`            // 发货状态 1 待发货 2已发货 3 已签收
+	AssignmentStatus       uint      `gorm:"column:assignment_status;default:1"`           // 作业上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
+	UpdateAt               time.Time `gorm:"column:update_at"`                             // 更新时间
+	WithdrawStatus         int       `gorm:"column:withdraw_status;default:1"`             // 提现状态,1-4分别代表不可提现、可提现、提现中、已提现
+	LeadTeamID             string    `gorm:"column:lead_team_id"`                          // 作为团长的young之团id,对应younggee_talent_team中的team_id字段
+	TeamID                 string    `gorm:"column:team_id"`                               // 作为团员的young之团id,对应younggee_talent_team中的team_id字段
+	TeamIncome             int       `gorm:"column:team_income"`                           // young之团团长现金收益
+	TeamPoint              int       `gorm:"column:team_point"`                            // young之团团长积分收益
+	SignedTime             time.Time `gorm:"column:signed_time"`                           // 快递签收时间
+	SaleNum                int       `gorm:"column:sale_num"`                              // 30天橱窗销量
+	FreeStrategyId         int       `gorm:"column:free_strategy_id"`                      // 免费领样策略id
+	ProductId              int       `gorm:"column:product_id"`                            // 商品id
+	SaleActual             int       `gorm:"column:sale_actual"`                           // 实际带货量
+	SaleNumAll             int       `gorm:"column:sale_num_all"`                          // 达人对此商品的全部销售量(大于1表示已出单)
+	FansNum                int       `gorm:"column:fans_num"`                              // 粉丝数
+	FreeStage              int       `gorm:"column:free_stage"`                            // 免费领样阶段,1-5分别代表已申请、已拒绝、待发货、已发货、已收货
+	RewardStage            int       `gorm:"column:reward_stage"`                          // 悬赏阶段,1-2分别代表待结算(管理后台设置)、已结算(小程序端设置)
+}
+
+func (m *YounggeeSecTaskInfo) TableName() string {
+	return "younggee_sec_task_info"
+}

+ 25 - 24
model/http_model/CreateSecTaskLogisticsRequest.go

@@ -1,24 +1,25 @@
-package http_model
-
-type CreateSecTaskLogisticsRequest struct {
-	TaskID                string `json:"task_id"`                // 任务id
-	CompanyName           string `json:"company_name"`           // 实物商品-物流公司名称
-	LogisticsNumber       string `json:"logistics_number"`       // 实物商品-物流单号
-	ExplorestoreStarttime string `json:"explorestore_starttime"` // 线下探店-探店开始时间
-	ExplorestoreEndtime   string `json:"explorestore_endtime"`   // 线下探店-探店结束时间
-	ExplorestorePeriod    string `json:"explorestore_period"`    // 线下探店-探店持续时间
-	ThingsType            int    `json:"things_type"`            // 产品类型 1:实物, 3:线下探店
-}
-
-type CreateSecTaskLogisticsData struct {
-}
-
-func NewCreateSecTaskLogisticsRequest() *CreateSecTaskLogisticsRequest {
-	return new(CreateSecTaskLogisticsRequest)
-}
-
-func NewCreateSecTaskLogisticsResponse() *CommonResponse {
-	resp := new(CommonResponse)
-	resp.Data = new(CreateSecTaskLogisticsData)
-	return resp
-}
+package http_model
+
+type CreateSecTaskLogisticsRequest struct {
+	TaskID                string `json:"task_id"`                // 任务id
+	CompanyName           string `json:"company_name"`           // 实物商品-物流公司名称
+	LogisticsNumber       string `json:"logistics_number"`       // 实物商品-物流单号
+	ExplorestoreStarttime string `json:"explorestore_starttime"` // 线下探店-探店开始时间
+	ExplorestoreEndtime   string `json:"explorestore_endtime"`   // 线下探店-探店结束时间
+	ExplorestorePeriod    string `json:"explorestore_period"`    // 线下探店-探店持续时间
+	ThingsType            int    `json:"things_type"`            // 产品类型 1:实物, 3:线下探店
+	SelectionId           string `json:"selection_id"`           // 带货任务ID
+}
+
+type CreateSecTaskLogisticsData struct {
+}
+
+func NewCreateSecTaskLogisticsRequest() *CreateSecTaskLogisticsRequest {
+	return new(CreateSecTaskLogisticsRequest)
+}
+
+func NewCreateSecTaskLogisticsResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(CreateSecTaskLogisticsData)
+	return resp
+}

+ 9 - 0
model/http_model/GetSecTaskListRequest.go

@@ -10,6 +10,8 @@ type GetSecTaskListRequest struct {
 	SearchValue   string `json:"search_value"`
 	Type          int    `json:"type"` // 查询类型,1、2、3分别表示确定达人查询、发货管理查询、结算管理查询
 	TaskStage     int    `json:"sec_task_stage"`
+	FreeStage     int    `json:"free_stage"`   // 免费领样阶段,1-5分别代表已申请、已拒绝、待发货、已发货、已收货
+	RewardStage   int    `json:"reward_stage"` // 悬赏阶段,1-2分别代表待结算(管理后台设置)、已结算(小程序端设置)
 }
 
 type GetSecTaskListData struct {
@@ -20,6 +22,7 @@ type GetSecTaskListData struct {
 type SecTaskInfo struct {
 	SecTaskId             string    `json:"sec_task_id"`
 	PlatformNickname      string    `json:"platform_nickname"`     // 帐号昵称
+	TalentId              string    `json:"talent_id"`             // 达人ID
 	FansCount             string    `json:"fans_count"`            // 粉丝数
 	HomePageCaptureUrl    string    `json:"home_page_capture_url"` // 主页截图链接
 	HomePageUrl           string    `json:"home_page_url"`         // 主页链接
@@ -40,6 +43,12 @@ type SecTaskInfo struct {
 	SelectDate            string    `json:"select_date"`            // 反选时间
 	DeliveryDate          string    `json:"delivery_date"`          // 发货时间
 	CompleteDate          string    `json:"complete_date"`          // 结算时间
+	SignedTime            string    `json:"signed_time"`            // 快递签收时间
+	SaleNum               int       `json:"sale_num"`               // 30天橱窗销量
+	FreeStrategyId        int       `json:"free_strategy_id"`       // 免费领样策略id
+	ProductId             int       `json:"product_id"`             // 商品ID
+	FreeStage             int       `json:"free_stage"`             // 免费领样阶段,1-5分别代表已申请、已拒绝、待发货、已发货、已收货
+	RewardStage           int       `json:"reward_stage"`           // 悬赏阶段,1-2分别代表待结算(管理后台设置)、已结算(小程序端设置)
 }
 
 func NewGetSecTaskListRequest() *GetSecTaskListRequest {

+ 28 - 26
model/http_model/SelectionDetailRequest.go

@@ -1,26 +1,28 @@
-package http_model
-
-import "youngee_m_api/model/gorm_model"
-
-type SelectionDetailRequest struct {
-	EnterpriseId string `json:"enterprise_id"`
-	SelectionId  string `json:"selection_id"` // 选品id
-}
-
-type SelectionDetail struct {
-	SelectionInfo    *gorm_model.YounggeeSelectionInfo  // 选品详情
-	SelectionBrief   []*gorm_model.YounggeeSecBrief     // 选品brief列表
-	SelectionExample []*gorm_model.YounggeeSecExample   // 选品示例列表
-	ProductInfo      *gorm_model.YounggeeProduct        // 商品详情
-	ProductPhotoInfo []*gorm_model.YounggeeProductPhoto // 商品图片列表
-}
-
-func NewSelectionDetailRequest() *SelectionDetailRequest {
-	return new(SelectionDetailRequest)
-}
-
-func NewSelectionDetailResponse() *CommonResponse {
-	resp := new(CommonResponse)
-	resp.Data = new(SelectionDetail)
-	return resp
-}
+package http_model
+
+import "youngee_m_api/model/gorm_model"
+
+type SelectionDetailRequest struct {
+	EnterpriseId string `json:"enterprise_id"`
+	SelectionId  string `json:"selection_id"` // 选品id
+}
+
+type SelectionDetail struct {
+	SelectionInfo    *gorm_model.YounggeeSelectionInfo  // 选品详情
+	SelectionBrief   []*gorm_model.YounggeeSecBrief     // 选品brief列表
+	SelectionExample []*gorm_model.YounggeeSecExample   // 选品示例列表
+	ProductInfo      *gorm_model.YounggeeProduct        // 商品详情
+	ProductPhotoInfo []*gorm_model.YounggeeProductPhoto // 商品图片列表
+	FreeStrategy     []*gorm_model.FreeStrategy         // 免费领样策略
+	RewardStrategy   []*gorm_model.RewardStrategy       // 悬赏策略
+}
+
+func NewSelectionDetailRequest() *SelectionDetailRequest {
+	return new(SelectionDetailRequest)
+}
+
+func NewSelectionDetailResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(SelectionDetail)
+	return resp
+}

+ 23 - 23
model/http_model/SettleSecTaskRequest.go

@@ -1,23 +1,23 @@
-package http_model
-
-type SettleSecTaskRequest struct {
-	EnterpriseId  string `json:"enterprise_id"`
-	SelectionID   string `json:"selection_id"`    // 选品项目id
-	TaskID        string `json:"task_id"`         // 任务id
-	IsReturnMoney int    `json:"is_return_money"` //是否返回样品钱
-	IsPayReward   int    `json:"is_pay_reward"`   //是否给悬赏金
-	TotalPayMoney string `json:"total_pay_money"` //合计结算金额
-}
-
-type SettleSecTaskData struct {
-}
-
-func NewSettleSecTaskRequest() *SettleSecTaskRequest {
-	return new(SettleSecTaskRequest)
-}
-
-func NewSettleSecTaskResponse() *CommonResponse {
-	resp := new(CommonResponse)
-	resp.Data = new(SettleSecTaskData)
-	return resp
-}
+package http_model
+
+type SettleSecTaskRequest struct {
+	EnterpriseId  string `json:"enterprise_id"`   // 企业id
+	SelectionID   string `json:"selection_id"`    // 选品项目id
+	TaskID        string `json:"task_id"`         // 任务id
+	IsReturnMoney int    `json:"is_return_money"` // 是否返回样品钱
+	IsPayReward   int    `json:"is_pay_reward"`   // 是否给悬赏金
+	TotalPayMoney string `json:"total_pay_money"` // 合计结算金额
+}
+
+type SettleSecTaskData struct {
+}
+
+func NewSettleSecTaskRequest() *SettleSecTaskRequest {
+	return new(SettleSecTaskRequest)
+}
+
+func NewSettleSecTaskResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(SettleSecTaskData)
+	return resp
+}

+ 37 - 20
model/http_model/UpdateSelectionRequest.go

@@ -1,26 +1,29 @@
 package http_model
 
 type UpdateSelectionRequest struct {
-	EnterpriseId     string            `json:"enterprise_id"`
-	SelectionID      string            `json:"selection_id"` // 选品项目id
-	SelectionStatus  int               `json:"selection_status"`
-	Platform         int               `json:"platform"`
-	ProductId        string            `json:"product_id"`
-	ContentType      int               `json:"content_type"`
-	TaskMode         int               `json:"task_mode"`
-	SampleNum        int               `json:"sample_num"`  // 样品数量
-	RemainNum        int               `json:"remain_num"`  // 剩余数量
-	TaskReward       float64           `json:"task_reward"` // 任务悬赏
-	TaskDdl          string            `json:"task_ddl"`
-	SampleMode       int               `json:"sample_mode"`
-	CommissionRate   string            `json:"commission_rate"`
-	ProductUrl       string            `json:"product_url"`
-	SampleCondition  string            `json:"sample_condition"`
-	RewardCondition  string            `json:"reward_condition"` // 返现悬赏条件
-	SecBrief         []*SecBriefInfo   `json:"sec_brief"`
-	SecExample       []*SecExampleInfo `json:"sec_example"`
-	Detail           string            `json:"detail"`
-	SettlementAmount float64           `json:"settlement_amount"`
+	EnterpriseId     string                  `json:"enterprise_id"`
+	SelectionID      string                  `json:"selection_id"` // 选品id
+	SelectionStatus  int                     `json:"selection_status"`
+	Platform         int                     `json:"platform"`
+	ProductId        string                  `json:"product_id"`
+	ContentType      int                     `json:"content_type"`
+	TaskMode         int                     `json:"task_mode"`
+	SampleNum        int                     `json:"sample_num"`  // 样品数量
+	RemainNum        int                     `json:"remain_num"`  // 剩余数量
+	TaskReward       float64                 `json:"task_reward"` // 任务悬赏
+	TaskDdl          string                  `json:"task_ddl"`
+	SampleMode       int                     `json:"sample_mode"`
+	CommissionRate   string                  `json:"commission_rate"`
+	ProductUrl       string                  `json:"product_url"`
+	SampleCondition  string                  `json:"sample_condition"`
+	RewardCondition  string                  `json:"reward_condition"` // 返现悬赏条件
+	SecBrief         []*SecBriefInfo         `json:"sec_brief"`
+	SecExample       []*SecExampleInfo       `json:"sec_example"`
+	Detail           string                  `json:"detail"`
+	SettlementAmount float64                 `json:"settlement_amount"`
+	FreeStrategys    []UpdateFreeStrategys   `json:"free_strategys"`   // 免费领样策略
+	RewardStrategys  []UpdateRewardStrategys `json:"reward_strategys"` // 悬赏策略
+	Status           int                     `json:"status"`           // 是否删除
 }
 
 type SecBriefInfo struct {
@@ -43,6 +46,20 @@ type UpdateProductData struct {
 	ProductId string `json:"product_id"`
 }
 
+type UpdateFreeStrategys struct {
+	StrategyId int64 `json:"strategy_id"` // 策略编号
+	FansNum    int64 `json:"fans_num"`    // 粉丝数目
+	SaleNum    int64 `json:"sale_num"`    // 近30天橱窗销量
+	EnrollNum  int64 `json:"enroll_num"`  // 报名人数
+	ChooseNum  int64 `json:"choose_num"`  // 已选人数
+}
+
+type UpdateRewardStrategys struct {
+	Reward     float64 `json:"reward"`      // 悬赏池总金额
+	SaleActual int64   `json:"sale_actual"` // 实际带货销量
+	PerReward  float64 `json:"per_reward"`  // 每人可获得悬赏金
+}
+
 func NewUpdateSelectionRequest() *UpdateSelectionRequest {
 	return new(UpdateSelectionRequest)
 }

+ 38 - 33
model/http_model/product_create.go

@@ -1,33 +1,38 @@
-package http_model
-
-type CreateProductPhoto struct {
-	PhotoUrl string `json:"photo_url"` // 图片或视频url
-	PhotoUid string `json:"photo_uid"`
-	Symbol   int64  `json:"symbol"` // 图片为主图或详情图标志位,1为主图,2为详情图,3为视频
-}
-
-type CreateProductRequest struct {
-	ProductId     int64                `json:"product_id"`     // 产品id
-	EnterpriseId  string               `json:"enterprise_id"`  // 要绑定的企业id
-	ProductName   string               `json:"product_name"`   // 商品名称
-	ProductType   int64                `json:"product_type"`   // 商品类型
-	ShopAddress   string               `json:"shop_address"`   // 店铺地址,商品类型为线下品牌时需填写
-	ProductDetail string               `json:"product_detail"` // 商品详细
-	ProductPrice  float64              `json:"product_price"`  // 商品价值
-	ProductPhotos []CreateProductPhoto `json:"product_photos"` // 商品图片列表
-	ProductUrl    string               `json:"product_url"`    // 商品链接,可为电商网址、公司官网、大众点评的店铺地址等可以说明商品信息或者品牌信息的线上地址;
-	BrandName     string               `json:"brand_name"`
-}
-
-type CreateProductData struct {
-	ProductID int64 `json:"product_id"` // 商品id
-}
-
-func NewCreateProductRequest() *CreateProductRequest {
-	return new(CreateProductRequest)
-}
-func NewCreateProductResponse() *CommonResponse {
-	resp := new(CommonResponse)
-	resp.Data = new(CreateProductData)
-	return resp
-}
+package http_model
+
+type CreateProductPhoto struct {
+	PhotoUrl string `json:"photo_url"` // 图片或视频url
+	PhotoUid string `json:"photo_uid"`
+	Symbol   int64  `json:"symbol"` // 图片为主图或详情图标志位,1为主图,2为轮播图,3为轮播视频. 4为详情图. 5为详情视频
+}
+
+type CreateProductRequest struct {
+	ProductId                   int64                `json:"product_id"`                      // 产品id
+	EnterpriseId                string               `json:"enterprise_id"`                   // 要绑定的企业id
+	ProductName                 string               `json:"product_name"`                    // 商品名称
+	ProductType                 int64                `json:"product_type"`                    // 商品类型
+	ShopAddress                 string               `json:"shop_address"`                    // 店铺地址,商品类型为线下品牌时需填写
+	ProductDetail               string               `json:"product_detail"`                  // 商品详细
+	ProductPrice                float64              `json:"product_price"`                   // 商品价值
+	ProductPhotos               []CreateProductPhoto `json:"product_photos"`                  // 商品图片列表
+	ProductUrl                  string               `json:"product_url"`                     // 商品链接,可为电商网址、公司官网、大众点评的店铺地址等可以说明商品信息或者品牌信息的线上地址;
+	BrandName                   string               `json:"brand_name"`                      // 品牌名称
+	PublicCommission            float64              `json:"public_commission"`               // 公开佣金
+	ExclusiveCommission         float64              `json:"exclusive_commission"`            // 专属佣金
+	CommissionPrice             float64              `json:"commission_price"`                // 佣金金额
+	MerchantSoldCountThirtyDays int64                `json:"merchant_sold_count_thirty_days"` // 商品30天销量
+	KuaishouProductId           int64                `json:"kuaishou_product_id"`             // 快手商品ID
+}
+
+type CreateProductData struct {
+	ProductID int64 `json:"product_id"` // 商品id
+}
+
+func NewCreateProductRequest() *CreateProductRequest {
+	return new(CreateProductRequest)
+}
+func NewCreateProductResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(CreateProductData)
+	return resp
+}

+ 38 - 33
model/http_model/product_find.go

@@ -1,33 +1,38 @@
-package http_model
-
-type FindProductRequest struct {
-	ProductID int64 `json:"product_id"`
-}
-
-type ProductPhoto struct {
-	PhotoUrl string `json:"photo_url"` // 图片或视频url
-	PhotoUid string `json:"photo_uid"` // 图片uuid
-	Symbol   int64  `json:"symbol"`    // 图片为主图或详情图标志位,1为主图,2为详情图,3为视频
-}
-
-type FindProductData struct {
-	ProductID     int64          `json:"product_id"`
-	ProductName   string         `json:"product_name"`   // 商品名称
-	ProductType   int64          `json:"product_type"`   // 商品类型
-	ShopAddress   string         `json:"shop_address"`   // 店铺地址,商品类型为线下品牌时需填写
-	ProductPrice  float64        `json:"product_price"`  // 商品价值
-	ProductDetail string         `json:"product_detail"` // 商品描述
-	ProductPhotos []ProductPhoto `json:"product_photos"` // 商品图片列表
-	ProductUrl    string         `json:"product_url"`    // 商品链接,可为电商网址、公司官网、大众点评的店铺地址等可以说明商品信息或者品牌信息的线上地址;
-	EnterpriseID  string         `json:"enterprise_id"`  // 所属企业id
-	BrandName     string         `json:"brand_name"`     // 品牌名称
-}
-
-func NewFindProductRequest() *FindProductRequest {
-	return new(FindProductRequest)
-}
-func NewFindProductResponse() *CommonResponse {
-	resp := new(CommonResponse)
-	resp.Data = new(FindProductData)
-	return resp
-}
+package http_model
+
+type FindProductRequest struct {
+	ProductID int64 `json:"product_id"`
+}
+
+type ProductPhoto struct {
+	PhotoUrl string `json:"photo_url"` // 图片或视频url
+	PhotoUid string `json:"photo_uid"` // 图片uuid
+	Symbol   int64  `json:"symbol"`    // 图片为主图或详情图标志位,1为主图,2为详情图,3为视频
+}
+
+type FindProductData struct {
+	ProductID           int64          `json:"product_id"`
+	ProductName         string         `json:"product_name"`         // 商品名称
+	ProductType         int64          `json:"product_type"`         // 商品类型
+	ShopAddress         string         `json:"shop_address"`         // 店铺地址,商品类型为线下品牌时需填写
+	ProductPrice        float64        `json:"product_price"`        // 商品价值
+	ProductDetail       string         `json:"product_detail"`       // 商品描述
+	ProductPhotos       []ProductPhoto `json:"product_photos"`       // 商品图片列表
+	ProductUrl          string         `json:"product_url"`          // 商品链接,可为电商网址、公司官网、大众点评的店铺地址等可以说明商品信息或者品牌信息的线上地址;
+	EnterpriseID        string         `json:"enterprise_id"`        // 所属企业id
+	BrandName           string         `json:"brand_name"`           // 品牌名称
+	PublicCommission    float64        `json:"public_commission"`    // 公开佣金
+	ExclusiveCommission float64        `json:"exclusive_commission"` // 专属佣金
+	CommissionPrice     float64        `json:"commission_price"`     // 佣金金额
+	KuaishouProductId   int64          `json:"kuaishou_product_id"`  // 快手商品ID
+
+}
+
+func NewFindProductRequest() *FindProductRequest {
+	return new(FindProductRequest)
+}
+func NewFindProductResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(FindProductData)
+	return resp
+}

+ 42 - 0
model/http_model/product_kuaishou_query.go

@@ -0,0 +1,42 @@
+package http_model
+
+type FindKuaishouProductRequest struct {
+	AppKey      string   `json:"app_key"`
+	SignSecret  string   `json:"sign_secret"`
+	AccessToken string   `json:"access_token"`
+	ItemList    []string `json:"item_list"`
+}
+
+type KuaishouCarousePhoto struct {
+	PhotoUrl string `json:"photo_url"` // 图片或视频url
+}
+
+type KuaishouDetailPhoto struct {
+	PhotoUrl string `json:"photo_url"` // 图片或视频url
+}
+
+type FindKuaishouProductData struct {
+	ProductName                 string   `json:"product_name"`                    // 商品名称
+	ProductPrice                float64  `json:"product_price"`                   // 商品价值
+	ProductDetail               string   `json:"product_detail"`                  // 商品描述
+	KuaishouMainPhoto           string   `json:"kuaishou_main_photo"`             // 商品主图
+	KuaishouCarousePhotoList    []string `json:"kuaishou_carouse_photo_list"`     // 商品轮播图列表
+	KuaishouDetailPhotoList     []string `json:"kuaishou_detail_photo_list"`      // 商品详情图列表
+	ProductUrl                  string   `json:"product_url"`                     // 商品链接,可为电商网址、公司官网、大众点评的店铺地址等可以说明商品信息或者品牌信息的线上地址;
+	EnterpriseID                string   `json:"enterprise_id"`                   // 所属企业id
+	BrandName                   string   `json:"brand_name"`                      // 品牌名称
+	PublicCommission            float64  `json:"public_commission"`               // 公开佣金
+	ExclusiveCommission         float64  `json:"exclusive_commission"`            // 专属佣金
+	CommissionPrice             float64  `json:"commission_price"`                // 佣金金额
+	KuaishouProductId           int64    `json:"kuaishou_product_id"`             // 快手商品ID
+	MerchantSoldCountThirtyDays int64    `json:"merchant_sold_count_thirty_days"` // 商品30天销量
+}
+
+func NewFindKuaishouProductRequest() *FindKuaishouProductRequest {
+	return new(FindKuaishouProductRequest)
+}
+func NewFindKuaishouProductResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(FindKuaishouProductData)
+	return resp
+}

+ 46 - 39
pack/sec_task_list.go

@@ -1,39 +1,46 @@
-package pack
-
-import (
-	"github.com/tidwall/gjson"
-	"strconv"
-	"youngee_m_api/model/gorm_model"
-	"youngee_m_api/model/http_model"
-
-	"github.com/caixw/lib.go/conv"
-)
-
-func GormSecTaskListToHttpSecTaskList(secTaskList []*gorm_model.YounggeeSecTaskInfo) []*http_model.SecTaskInfo {
-	var resTaskTaskList []*http_model.SecTaskInfo
-	for _, secTask := range secTaskList {
-		secTaskH := GormSecTaskToHttpSecTask(secTask)
-		resTaskTaskList = append(resTaskTaskList, secTaskH)
-	}
-	return resTaskTaskList
-}
-
-func GormSecTaskToHttpSecTask(secTask *gorm_model.YounggeeSecTaskInfo) *http_model.SecTaskInfo {
-	TalentPlatformInfoSnap := secTask.TalentPlatformInfoSnap
-	regionCode, _ := strconv.Atoi(conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "region_code"), ""))
-	return &http_model.SecTaskInfo{
-		SecTaskId:          secTask.TaskID,
-		PlatformNickname:   conv.MustString(gjson.Get(TalentPlatformInfoSnap, "platform_nickname"), ""),
-		FansCount:          conv.MustString(gjson.Get(TalentPlatformInfoSnap, "fans_count"), ""),
-		HomePageCaptureUrl: conv.MustString(gjson.Get(TalentPlatformInfoSnap, "home_page_capture_url"), ""),
-		HomePageUrl:        conv.MustString(gjson.Get(TalentPlatformInfoSnap, "home_page_url"), ""),
-		RegionCode:         regionCode,
-		DetailAddr:         conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "detail_addr"), "") + " " + conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "receiver_name"), "") + " " + conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "phone_number"), ""),
-		CreateDate:         conv.MustString(secTask.CreateDate, ""),
-		SelectDate:         conv.MustString(secTask.SelectDate, ""),
-		DeliveryDate:       conv.MustString(secTask.DeliveryDate, ""),
-		CompleteDate:       conv.MustString(secTask.CompleteDate, ""),
-		IsPayReward:        secTask.IsPayReward,
-		IsPayPayment:       secTask.IsPayPayment,
-	}
-}
+package pack
+
+import (
+	"fmt"
+	"github.com/tidwall/gjson"
+	"strconv"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+
+	"github.com/caixw/lib.go/conv"
+)
+
+func GormSecTaskListToHttpSecTaskList(secTaskList []*gorm_model.YounggeeSecTaskInfo) []*http_model.SecTaskInfo {
+	var resTaskTaskList []*http_model.SecTaskInfo
+	for _, secTask := range secTaskList {
+		secTaskH := GormSecTaskToHttpSecTask(secTask)
+		resTaskTaskList = append(resTaskTaskList, secTaskH)
+	}
+	return resTaskTaskList
+}
+
+func GormSecTaskToHttpSecTask(secTask *gorm_model.YounggeeSecTaskInfo) *http_model.SecTaskInfo {
+	TalentPlatformInfoSnap := secTask.TalentPlatformInfoSnap
+	regionCode, _ := strconv.Atoi(conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "region_code"), ""))
+	fmt.Println("粉丝数: ", strconv.Itoa(secTask.FansNum))
+	return &http_model.SecTaskInfo{
+		SecTaskId:          secTask.TaskID,
+		PlatformNickname:   conv.MustString(gjson.Get(TalentPlatformInfoSnap, "platform_nickname"), ""),
+		FansCount:          strconv.Itoa(secTask.FansNum),
+		HomePageCaptureUrl: conv.MustString(gjson.Get(TalentPlatformInfoSnap, "home_page_capture_url"), ""),
+		HomePageUrl:        conv.MustString(gjson.Get(TalentPlatformInfoSnap, "home_page_url"), ""),
+		RegionCode:         regionCode,
+		DetailAddr:         conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "detail_addr"), "") + " " + conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "receiver_name"), "") + " " + conv.MustString(gjson.Get(secTask.TalentPostAddrSnap, "phone_number"), ""),
+		CreateDate:         conv.MustString(secTask.CreateDate, ""),
+		SelectDate:         conv.MustString(secTask.SelectDate, ""),
+		DeliveryDate:       conv.MustString(secTask.DeliveryDate, ""),
+		CompleteDate:       conv.MustString(secTask.CompleteDate, ""),
+		IsPayReward:        secTask.IsPayReward,
+		IsPayPayment:       secTask.IsPayPayment,
+		SignedTime:         conv.MustString(secTask.SignedTime, "0000"),
+		SaleNum:            secTask.SaleNum,
+		FreeStrategyId:     secTask.FreeStrategyId,
+		TalentId:           secTask.TalentID,
+		ProductId:          secTask.ProductId,
+	}
+}

+ 62 - 61
pack/selection.go

@@ -1,61 +1,62 @@
-package pack
-
-import (
-	"youngee_m_api/model/common_model"
-	"youngee_m_api/model/gorm_model"
-	"youngee_m_api/model/http_model"
-)
-
-func HttpFindAllSelectionRequestToCondition(req *http_model.FindAllSelectionRequest) *common_model.SelectionConditions {
-	return &common_model.SelectionConditions{
-		SelectionStatus: req.SelectionStatus,
-		Platform:        req.Platform,
-		SampleMode:      req.SampleMode,
-		ContentType:     req.ContentType,
-		TaskMode:        req.TaskMode,
-		SearchValue:     req.SearchValue,
-		SubmitAt:        req.SubmitAt,
-		TaskDdl:         req.TaskDdl,
-	}
-}
-
-func MGormSelectionToHttpSelectionPreview(gormSelectionInfos []*gorm_model.YounggeeSelectionInfo) []*gorm_model.YounggeeSelectionInfo {
-	var httpSelectionPreviews []*gorm_model.YounggeeSelectionInfo
-	for _, gormSelectionInfo := range gormSelectionInfos {
-		gormSelectionInfo := GormSelectionToHttpSelectionPreview(gormSelectionInfo)
-		httpSelectionPreviews = append(httpSelectionPreviews, gormSelectionInfo)
-	}
-	return httpSelectionPreviews
-}
-
-func GormSelectionToHttpSelectionPreview(selectionInfo *gorm_model.YounggeeSelectionInfo) *gorm_model.YounggeeSelectionInfo {
-	return &gorm_model.YounggeeSelectionInfo{
-		SelectionID:      selectionInfo.SelectionID,
-		SelectionName:    selectionInfo.SelectionName,
-		EnterpriseID:     selectionInfo.EnterpriseID,
-		ProductID:        selectionInfo.ProductID,
-		ContentType:      selectionInfo.ContentType,
-		SelectionStatus:  selectionInfo.SelectionStatus,
-		Platform:         selectionInfo.Platform,
-		ProductUrl:       selectionInfo.ProductUrl,
-		RemainNum:        selectionInfo.RemainNum,
-		EstimatedCost:    selectionInfo.EstimatedCost,
-		TaskReward:       selectionInfo.TaskReward,
-		SampleCondition:  selectionInfo.SampleCondition,
-		RewardCondition:  selectionInfo.RewardCondition,
-		SettlementAmount: selectionInfo.SettlementAmount,
-		TaskDdl:          selectionInfo.TaskDdl,
-		Detail:           selectionInfo.Detail,
-		ProductSnap:      selectionInfo.ProductSnap,
-		ProductPhotoSnap: selectionInfo.ProductPhotoSnap,
-		CreatedAt:        selectionInfo.CreatedAt,
-		UpdatedAt:        selectionInfo.UpdatedAt,
-		SubmitAt:         selectionInfo.SubmitAt,
-		PassAt:           selectionInfo.PassAt,
-		FailReason:       selectionInfo.FailReason,
-		PayAt:            selectionInfo.PayAt,
-		FinishAt:         selectionInfo.FinishAt,
-		IsRead:           selectionInfo.IsRead,
-		TaskMode:         selectionInfo.TaskMode,
-	}
-}
+package pack
+
+import (
+	"youngee_m_api/model/common_model"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+)
+
+func HttpFindAllSelectionRequestToCondition(req *http_model.FindAllSelectionRequest) *common_model.SelectionConditions {
+	return &common_model.SelectionConditions{
+		SelectionStatus: req.SelectionStatus,
+		Platform:        req.Platform,
+		SampleMode:      req.SampleMode,
+		ContentType:     req.ContentType,
+		TaskMode:        req.TaskMode,
+		SearchValue:     req.SearchValue,
+		SubmitAt:        req.SubmitAt,
+		TaskDdl:         req.TaskDdl,
+	}
+}
+
+func MGormSelectionToHttpSelectionPreview(gormSelectionInfos []*gorm_model.YounggeeSelectionInfo) []*gorm_model.YounggeeSelectionInfo {
+	var httpSelectionPreviews []*gorm_model.YounggeeSelectionInfo
+	for _, gormSelectionInfo := range gormSelectionInfos {
+		gormSelectionInfo := GormSelectionToHttpSelectionPreview(gormSelectionInfo)
+		httpSelectionPreviews = append(httpSelectionPreviews, gormSelectionInfo)
+	}
+	return httpSelectionPreviews
+}
+
+func GormSelectionToHttpSelectionPreview(selectionInfo *gorm_model.YounggeeSelectionInfo) *gorm_model.YounggeeSelectionInfo {
+	return &gorm_model.YounggeeSelectionInfo{
+		SelectionID:      selectionInfo.SelectionID,
+		SampleMode:       selectionInfo.SampleMode,
+		SelectionName:    selectionInfo.SelectionName,
+		EnterpriseID:     selectionInfo.EnterpriseID,
+		ProductID:        selectionInfo.ProductID,
+		ContentType:      selectionInfo.ContentType,
+		SelectionStatus:  selectionInfo.SelectionStatus,
+		Platform:         selectionInfo.Platform,
+		ProductUrl:       selectionInfo.ProductUrl,
+		RemainNum:        selectionInfo.RemainNum,
+		EstimatedCost:    selectionInfo.EstimatedCost,
+		TaskReward:       selectionInfo.TaskReward,
+		SampleCondition:  selectionInfo.SampleCondition,
+		RewardCondition:  selectionInfo.RewardCondition,
+		SettlementAmount: selectionInfo.SettlementAmount,
+		TaskDdl:          selectionInfo.TaskDdl,
+		Detail:           selectionInfo.Detail,
+		ProductSnap:      selectionInfo.ProductSnap,
+		ProductPhotoSnap: selectionInfo.ProductPhotoSnap,
+		CreatedAt:        selectionInfo.CreatedAt,
+		UpdatedAt:        selectionInfo.UpdatedAt,
+		SubmitAt:         selectionInfo.SubmitAt,
+		PassAt:           selectionInfo.PassAt,
+		FailReason:       selectionInfo.FailReason,
+		PayAt:            selectionInfo.PayAt,
+		FinishAt:         selectionInfo.FinishAt,
+		IsRead:           selectionInfo.IsRead,
+		TaskMode:         selectionInfo.TaskMode,
+	}
+}

+ 8 - 4
route/init.go

@@ -19,6 +19,9 @@ func InitRoute(r *gin.Engine) {
 			Message: "",
 			Data:    "ping",
 		}
+		str := c.Query("code")
+		println("str: ")
+		println(str)
 		c.JSON(200, resp)
 	})
 	m := r.Group("/youngee/m")
@@ -41,6 +44,7 @@ func InitRoute(r *gin.Engine) {
 		m.POST("/project/create", handler.WrapCreateProjectHandler)                                // 创建项目
 		m.POST("/product/create", handler.WrapCreateProductHandler)                                // 创建产品
 		m.POST("/product/find", handler.WrapFindProductHandler)                                    // 查询产品信息
+		m.POST("/product/findKuaishou", handler.WrapFindKuaishouProductHandler)                    // 查询快手产品信息
 		m.POST("/product/deletePhotoUrl", handler.WrapDeletePhotoUrlHandler)                       // 在数据库中删除图片url
 		m.POST("/pay/paysum", handler.WrapPaySumHandler)                                           // 支付
 		m.POST("/pay/projectpay", handler.WrapProjectPayHandler)                                   // 支付
@@ -192,10 +196,10 @@ func InitRoute(r *gin.Engine) {
 	{
 		//s.Use(middleware.LoginAuthMiddleware)
 		s.Use(middleware.LoginAuthMiddleware)
-		s.GET("/reviewnumber", handler.WrapSelectionReviewNumberHandler)            //查询选品待审核的数量
-		s.POST("/delete", handler.WrapDeleteSelectionHandler)                       //删除选品
-		s.POST("/findAll", handler.WrapFindAllSelectionHandler)                     //选品列表
-		s.POST("/detail", handler.WrapSelectionDetailHandler)                       //选品详情
+		s.GET("/reviewnumber", handler.WrapSelectionReviewNumberHandler)            // 查询选品待审核的数量
+		s.POST("/delete", handler.WrapDeleteSelectionHandler)                       // 删除选品
+		s.POST("/findAll", handler.WrapFindAllSelectionHandler)                     // 选品列表
+		s.POST("/detail", handler.WrapSelectionDetailHandler)                       // 选品详情
 		s.POST("/create", handler.WrapCreateSelectionHandler)                       // 创建选品
 		s.POST("/update", handler.WrapUpdateSelectionHandler)                       // 更新选品(提交项目审核)
 		s.POST("/submit", handler.WrapSubmitSelectionHandler)                       // 提交项目审核

+ 123 - 8
service/auto_task.go

@@ -2,15 +2,18 @@ package service
 
 import (
 	"context"
+	"fmt"
+	"github.com/caixw/lib.go/conv"
+	"github.com/lin-jim-leon/kuaishou"
+	"github.com/robfig/cron/v3"
+	"github.com/sirupsen/logrus"
 	"log"
+	"strconv"
 	"time"
 	"youngee_m_api/consts"
 	"youngee_m_api/db"
 	"youngee_m_api/model/gorm_model"
-
-	"github.com/caixw/lib.go/conv"
-	"github.com/robfig/cron/v3"
-	"github.com/sirupsen/logrus"
+	"youngee_m_api/model/http_model"
 )
 
 func AutoTask() error {
@@ -19,13 +22,21 @@ func AutoTask() error {
 	// crontab := cron.New()  默认从分开始进行时间调度
 	crontab := cron.New(cron.WithSeconds()) //精确到秒
 	// 定义定时器调用的任务函数
+	// 定时任务 自动查询更新项目快递的签收情况
 	taskKDStatus := func() {
+		// 在YoungeeTaskLogistics表中取出状态为未签收的快递
 		logisticNums := db.GetLogisticsNum()
 		for i := 0; i < len(logisticNums); i++ {
 			logisticNum := logisticNums[i]
+			// println("logisticNum[0]: ", logisticNum[0])
+			// logisticNum[0]是快递公司名称 logisticNum[1]为快递编号
 			status := GetKDStatus(consts.GetKD(logisticNum[0]), logisticNum[1])
+			// status 返回的是快递100接口的状态码,1表示已签收
 			if status == "1" {
+				// logisticNum[2]为货物id
+				// db.SignLogistic变更了项目任务的状态,并且返回了项目任务的id
 				taskId := db.SignLogistic(conv.MustInt64(logisticNum[2], 0))
+				// println("length of taskid: ", len(taskId))
 				// 记录任务日志
 				err := db.CreateTaskLog(context.Background(), taskId, "签收时间")
 				if err != nil {
@@ -35,6 +46,7 @@ func AutoTask() error {
 			}
 		}
 	}
+
 	//	定时任务1 ,线下探店打卡的自动签收操作
 	task1 := func() {
 		DB := db.GetReadDB(context.Background())
@@ -49,6 +61,7 @@ func AutoTask() error {
 		}
 		log.Println("GetSignInOfflineTask is running ,Time :", time.Now())
 	}
+
 	// 定时任务2 ,虚拟产品测评的自动签收操作
 	task2 := func() {
 		DB := db.GetReadDB(context.Background())
@@ -63,6 +76,7 @@ func AutoTask() error {
 		}
 		log.Println("GetSignInVirtualTask is running ,Time :", time.Now())
 	}
+
 	// 定时任务3 ,视频形式的审稿处理
 	task3 := func() {
 		DB := db.GetReadDB(context.Background())
@@ -77,6 +91,7 @@ func AutoTask() error {
 		}
 		log.Println("GetAutoReviewTask is running ,Time :", time.Now())
 	}
+
 	// 定时任务4 ,不限形式的审稿处理
 	task4 := func() {
 		DB := db.GetReadDB(context.Background())
@@ -91,6 +106,7 @@ func AutoTask() error {
 		}
 		log.Println("GetAutoReviewUnlimitedTask is running ,Time :", time.Now())
 	}
+
 	// 定时任务5 ,发布审核自动处理
 	task5 := func() {
 		DB := db.GetReadDB(context.Background())
@@ -105,6 +121,7 @@ func AutoTask() error {
 		}
 		log.Println("GetAutoPostReviewTask is running ,Time :", time.Now())
 	}
+
 	// 定时任务6 ,项目结案自动处理
 	task6 := func() {
 		DB := db.GetReadDB(context.Background())
@@ -119,6 +136,7 @@ func AutoTask() error {
 		}
 		log.Println("GetAutoCaseCloseTask is running ,Time :", time.Now())
 	}
+
 	// 定时任务7  全流程项目失效自动处理
 	task7 := func() {
 		DB := db.GetReadDB(context.Background())
@@ -133,6 +151,7 @@ func AutoTask() error {
 		}
 		log.Println("GetAutoInvalidTask is running ,Time :", time.Now())
 	}
+
 	// 定时任务8.图文形式的初稿违约自动处理
 	task8 := func() {
 		DB := db.GetReadDB(context.Background())
@@ -147,6 +166,7 @@ func AutoTask() error {
 		}
 		log.Println("GetAutoDraftDefaultInPicTask is running ,Time :", time.Now())
 	}
+
 	// 定时任务9.视频形式的初稿违约自动处理
 	task9 := func() {
 		DB := db.GetReadDB(context.Background())
@@ -161,6 +181,7 @@ func AutoTask() error {
 		}
 		log.Println("GetAutoDraftDefaultInMvTask is running ,Time :", time.Now())
 	}
+
 	// 定时任务10.视频形式的脚本违约自动处理
 	task10 := func() {
 		DB := db.GetReadDB(context.Background())
@@ -175,6 +196,7 @@ func AutoTask() error {
 		}
 		log.Println("GetAutoScriptDefaultTask is running ,Time :", time.Now())
 	}
+
 	// 定时任务11.链接违约自动处理
 	task11 := func() {
 		DB := db.GetReadDB(context.Background())
@@ -189,6 +211,7 @@ func AutoTask() error {
 		}
 		log.Println("GetAutoLinkBreachTask is running ,Time :", time.Now())
 	}
+
 	// 定时任务12.数据违约自动处理
 	task12 := func() {
 		DB := db.GetReadDB(context.Background())
@@ -203,9 +226,10 @@ func AutoTask() error {
 		}
 		log.Println("GetAutoCaseCloseDefaultTask is running ,Time :", time.Now())
 	}
+
 	//定时任务13. 选品项目失效自动处理
 	task13 := func() {
-		println("AWdawdawdawdawd")
+		// println("AWdawdawdawdawd")
 		DB := db.GetReadDB(context.Background())
 		autoTaskTime := gorm_model.InfoAutoTask{}
 		DB.Model(gorm_model.InfoAutoTask{}).Last(&autoTaskTime)
@@ -218,13 +242,92 @@ func AutoTask() error {
 		}
 		log.Println("GetAutoSelectionInvalidTask is running ,Time :", time.Now())
 	}
+
+	//定时任务14. 拉取快手平台达人实际销量
+	task14 := func() {
+		ctx := context.Background()
+		//筛选出所有执行中的Selection
+		selectionIds, _ := db.FindSelectionIdBySelectionStatus(ctx, 6)
+		for i := range len(selectionIds) {
+			var SelectionId string = selectionIds[i]
+			println("开始拉取快手平台达人实际销量")
+			err1 := SelectionTask.UpdateActualNumBySelectionId(ctx, SelectionId)
+			fmt.Println(err1)
+			println("完成拉取快手平台达人实际销量")
+		}
+	}
+
+	//定时任务15 定时刷新AccessToken
+	task15 := func() {
+		println("开始自动刷新AccessToken")
+		//var refreshkey string = "ChJvYXV0aC5yZWZyZXNoVG9rZW4SsAGQCXElJ20T3HTrDjxxZV9rrR7R2YzBymWjhdwmxs7mtu4GWiT2cy6JIAq0CWpa7P235JMrzfkWGn0qkTENul1TDd2n-cKQsJkuzUTD19ju1X1MuTLGcAqAPLbdJNkta79MJAN6xbhLylkEgOp7xte4XxT1jhmUqKjB_nL5EkdujoJttqo4-uq_HrisXkoQVFX8BIHdyLrLayqcjTxHXSHQJTvQVCH1NE-kTyOqaPgtVBoS15q2jT8K34-pnrlOMxuV8Ep1IiDVSApx1ijnxstgKmdo6vTNOXLkVwwn1YMBy4Z0fZrnPSgFMAE"
+		var AppKey string = "ks651333097154138217"
+		var SignSecret string = "dBt0rVRhTpUqcrOYGGpv0A"
+		//re, err := kuaishou.RefreshAccessToken(refreshkey, AppKey, SignSecret)
+		//fmt.Println("AccessToken: ", re.AccessToken)
+		//fmt.Println("ResreshToken: ", re.RefreshToken)
+		//fmt.Println("err: ", err)
+		ctx := context.Background()
+
+		talentList := db.GetAllKuaishouUser(ctx)
+
+		for i, _ := range talentList {
+			var refreshkey string = talentList[i].RefreshToken
+			re, err := kuaishou.RefreshAccessToken(refreshkey, AppKey, SignSecret)
+			fmt.Println(err)
+			newKuaishouUserInfo := gorm_model.PlatformKuaishouUserInfo{
+				TalentId:     talentList[i].TalentId,
+				RefreshToken: re.RefreshToken,
+				AccessToken:  re.AccessToken,
+			}
+			err1 := db.UpdateKuaishouUserInfoByTalentID(ctx, newKuaishouUserInfo)
+			fmt.Println(err1)
+		}
+		println("完成自动刷新AccessToken")
+	}
+
+	// 定时任务16 自动结算
+	task16 := func() {
+		ctx := context.Background()
+		//筛选出所有执行中的Selection
+		selectionIds, _ := db.FindSelectionIdBySelectionStatus(ctx, 6)
+		for i := range len(selectionIds) {
+			var SelectionId string = selectionIds[i]
+
+			println("开始自动结算")
+			var SecTaskStatus = 9
+			var PageSize = int64(0)
+			var PageNum = int64(0)
+			var SearchValue = ""
+			secTaskList, total, err2 := db.GetSecTaskList(ctx, SelectionId, SecTaskStatus, SearchValue, PageSize, PageNum)
+			fmt.Println(err2)
+			fmt.Println("待自动结算的子任务数量: ", total)
+			selection_curr, _ := db.GetSelectionById(ctx, SelectionId)
+			rewardStrategy, _ := db.GetRewardStrategyBySelectionId(ctx, SelectionId)
+			for j, _ := range secTaskList {
+				var secTaskId = secTaskList[j].SecTaskId
+				settleData := http_model.SettleSecTaskRequest{
+					SelectionID:   SelectionId,
+					TaskID:        secTaskId,
+					EnterpriseId:  selection_curr.EnterpriseID,
+					TotalPayMoney: strconv.FormatFloat(rewardStrategy[0].PerReward, 'f', -1, 64),
+					IsPayReward:   1,
+				}
+				_, err3 := SelectionTask.Settle(ctx, selection_curr.EnterpriseID, settleData)
+				fmt.Println("结算报错: ", err3)
+			}
+			println("完成自动结算")
+		}
+	}
+
 	//定时任务
-	//spec := "*/30 * * * * ?" //cron表达式,每30秒一次
+	spec := "*/30 * * * * ?" //cron表达式,每30秒一次
 	//spec := "0 */1 * * * ?" //cron表达式,每一分钟执行一次
-	spec := "0 0 * * * *" //每小时执行
+	//spec := "0 0 * * * *" //每小时执行
+	// "0 0 12 * * ?" 每天中午12点执行
 	// 添加定时任务,
 	_, err := crontab.AddFunc("0 0 * * * *", taskKDStatus) //每小时执行一次快递是否签收的查询
-	//_, err := crontab.AddFunc("*/30 * * * * ?", taskKDStatus)
+	//_, err := crontab.AddFunc("0 */1 * * * ?", taskKDStatus) //每分钟执行一次快递是否签收的查询
 	if err != nil {
 		return err
 	}
@@ -280,6 +383,18 @@ func AutoTask() error {
 	if err13 != nil {
 		return err13
 	}
+	_, err14 := crontab.AddFunc(spec, task14)
+	if err14 != nil {
+		return err14
+	}
+	_, err15 := crontab.AddFunc(spec, task15)
+	if err15 != nil {
+		return err15
+	}
+	_, err16 := crontab.AddFunc(spec, task16)
+	if err16 != nil {
+		return err16
+	}
 	// 启动定时器
 	crontab.Start()
 	// 定时任务是另起协程执行的,这里使用 select 简单阻塞.需要根据实际情况进行控制

+ 189 - 152
service/product.go

@@ -1,152 +1,189 @@
-package service
-
-import (
-	"context"
-	"fmt"
-	"strconv"
-	"youngee_m_api/consts"
-	"youngee_m_api/db"
-	"youngee_m_api/model/gorm_model"
-	"youngee_m_api/model/http_model"
-)
-
-var Product *product
-
-type product struct {
-}
-
-func (*product) Create(ctx context.Context, newProduct http_model.CreateProductRequest, enterpriseID string) (*http_model.CreateProductData, error) {
-	product := gorm_model.YounggeeProduct{
-		ProductName:   newProduct.ProductName,
-		ProductType:   newProduct.ProductType,
-		ShopAddress:   newProduct.ShopAddress,
-		ProductPrice:  newProduct.ProductPrice,
-		ProductDetail: newProduct.ProductDetail,
-		ProductUrl:    newProduct.ProductUrl,
-		EnterpriseID:  enterpriseID,
-		BrandName:     newProduct.BrandName,
-	}
-	productID, err := db.CreateProduct(ctx, product)
-	if err != nil {
-		return nil, err
-	}
-	if newProduct.ProductPhotos != nil {
-		productPhotos := []gorm_model.YounggeeProductPhoto{}
-		for _, photo := range newProduct.ProductPhotos {
-			productPhoto := gorm_model.YounggeeProductPhoto{
-				PhotoUrl:  photo.PhotoUrl,
-				PhotoUid:  photo.PhotoUid,
-				Symbol:    photo.Symbol,
-				ProductID: *productID,
-			}
-			productPhotos = append(productPhotos, productPhoto)
-		}
-		err = db.CreateProductPhoto(ctx, productPhotos)
-		if err != nil {
-			return nil, err
-		}
-	}
-	res := &http_model.CreateProductData{
-		ProductID: *productID,
-	}
-	return res, nil
-}
-
-func (*product) FindByID(ctx context.Context, productID int64) (*http_model.FindProductData, error) {
-	product, err := db.GetProductByID(ctx, productID)
-	if err != nil {
-		return nil, err
-	}
-	if product == nil {
-		return nil, nil
-	}
-	productPhotos, err := db.GetProductPhotoByProductID(ctx, productID)
-	if err != nil {
-		return nil, err
-	}
-	productPrice, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", product.ProductPrice), 64)
-	findProductData := http_model.FindProductData{
-		ProductID:     product.ProductID,
-		ProductName:   product.ProductName,
-		ProductType:   product.ProductType,
-		ShopAddress:   product.ShopAddress,
-		ProductPrice:  productPrice,
-		ProductDetail: product.ProductDetail,
-		ProductUrl:    product.ProductUrl,
-		EnterpriseID:  product.EnterpriseID,
-		BrandName:     product.BrandName,
-	}
-	for _, photo := range productPhotos {
-		productPhoto := http_model.ProductPhoto{
-			PhotoUrl: photo.PhotoUrl,
-			PhotoUid: photo.PhotoUid,
-			Symbol:   photo.Symbol,
-		}
-		findProductData.ProductPhotos = append(findProductData.ProductPhotos, productPhoto)
-	}
-	return &findProductData, nil
-}
-
-func (*product) FindAll(ctx context.Context, enterpriseID string) (*http_model.FindAllProductData, error) {
-	products, err := db.GetProductByEnterpriseID(ctx, enterpriseID)
-	if err != nil {
-		// 数据库查询error
-		return nil, err
-	}
-	findAllProductData := http_model.FindAllProductData{}
-	for _, product := range products {
-		productData := http_model.ProductInfo{
-			ProductID:   product.ProductID,
-			BrandName:   product.BrandName,
-			ProductName: product.ProductName,
-			ProductType: consts.GetProjectTypes(product.ProductType),
-		}
-		findAllProductData.ProductInfos = append(findAllProductData.ProductInfos, productData)
-	}
-	return &findAllProductData, nil
-}
-
-func (*product) Update(ctx context.Context, newProduct http_model.CreateProductRequest, enterpriseID string) (*http_model.CreateProductData, error) {
-	productPrice, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", newProduct.ProductPrice), 64)
-	product := gorm_model.YounggeeProduct{
-		ProductID:     newProduct.ProductId,
-		ProductName:   newProduct.ProductName,
-		ProductType:   newProduct.ProductType,
-		ShopAddress:   newProduct.ShopAddress,
-		ProductPrice:  productPrice,
-		ProductDetail: newProduct.ProductDetail,
-		ProductUrl:    newProduct.ProductUrl,
-		EnterpriseID:  enterpriseID,
-		BrandName:     newProduct.BrandName,
-	}
-	productID, err := db.UpdateProduct(ctx, product)
-	if err != nil {
-		return nil, err
-	}
-	// 删除该商品之前的所有图片
-	err = db.DeleteProductPhotoByProductID(ctx, *productID)
-	if err != nil {
-		return nil, err
-	}
-	if newProduct.ProductPhotos != nil {
-		// 新增图片
-		productPhotos := []gorm_model.YounggeeProductPhoto{}
-		for _, photo := range newProduct.ProductPhotos {
-			productPhoto := gorm_model.YounggeeProductPhoto{
-				PhotoUrl:  photo.PhotoUrl,
-				PhotoUid:  photo.PhotoUid,
-				Symbol:    photo.Symbol,
-				ProductID: *productID,
-			}
-			productPhotos = append(productPhotos, productPhoto)
-		}
-		err = db.CreateProductPhoto(ctx, productPhotos)
-		if err != nil {
-			return nil, err
-		}
-	}
-	res := &http_model.CreateProductData{
-		ProductID: *productID,
-	}
-	return res, nil
-}
+package service
+
+import (
+	"context"
+	"fmt"
+	"github.com/lin-jim-leon/kuaishou"
+	"strconv"
+	"youngee_m_api/consts"
+	"youngee_m_api/db"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+)
+
+var Product *product
+
+type product struct {
+}
+
+func (*product) Create(ctx context.Context, newProduct http_model.CreateProductRequest, enterpriseID string) (*http_model.CreateProductData, error) {
+	product := gorm_model.YounggeeProduct{
+		ProductName:         newProduct.ProductName,
+		ProductType:         int64(6),
+		ShopAddress:         newProduct.ShopAddress,
+		ProductPrice:        newProduct.ProductPrice,
+		ProductDetail:       newProduct.ProductDetail,
+		ProductUrl:          newProduct.ProductUrl,
+		EnterpriseID:        enterpriseID,
+		BrandName:           newProduct.BrandName,
+		PublicCommission:    newProduct.PublicCommission,
+		ExclusiveCommission: newProduct.ExclusiveCommission,
+		CommissionPrice:     newProduct.CommissionPrice,
+		SalesCount:          strconv.Itoa(int(newProduct.MerchantSoldCountThirtyDays)),
+		KuaishouProductId:   newProduct.KuaishouProductId,
+	}
+	productID, err := db.CreateProduct(ctx, product)
+	if err != nil {
+		return nil, err
+	}
+	if newProduct.ProductPhotos != nil {
+		productPhotos := []gorm_model.YounggeeProductPhoto{}
+		for _, photo := range newProduct.ProductPhotos {
+			productPhoto := gorm_model.YounggeeProductPhoto{
+				PhotoUrl:  photo.PhotoUrl,
+				PhotoUid:  photo.PhotoUid,
+				Symbol:    photo.Symbol,
+				ProductID: *productID,
+			}
+			productPhotos = append(productPhotos, productPhoto)
+		}
+		err = db.CreateProductPhoto(ctx, productPhotos)
+		if err != nil {
+			return nil, err
+		}
+	}
+	res := &http_model.CreateProductData{
+		ProductID: *productID,
+	}
+	return res, nil
+}
+
+func (*product) FindByID(ctx context.Context, productID int64) (*http_model.FindProductData, error) {
+	product, err := db.GetProductByID(ctx, productID)
+	if err != nil {
+		return nil, err
+	}
+	if product == nil {
+		return nil, nil
+	}
+	productPhotos, err := db.GetProductPhotoByProductID(ctx, productID)
+	if err != nil {
+		return nil, err
+	}
+	productPrice, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", product.ProductPrice), 64)
+	findProductData := http_model.FindProductData{
+		ProductID:           product.ProductID,
+		ProductName:         product.ProductName,
+		ProductType:         product.ProductType,
+		ShopAddress:         product.ShopAddress,
+		ProductPrice:        productPrice,
+		ProductDetail:       product.ProductDetail,
+		ProductUrl:          product.ProductUrl,
+		EnterpriseID:        product.EnterpriseID,
+		BrandName:           product.BrandName,
+		PublicCommission:    product.PublicCommission,
+		ExclusiveCommission: product.ExclusiveCommission,
+		CommissionPrice:     product.CommissionPrice,
+		KuaishouProductId:   product.KuaishouProductId,
+	}
+	for _, photo := range productPhotos {
+		productPhoto := http_model.ProductPhoto{
+			PhotoUrl: photo.PhotoUrl,
+			PhotoUid: photo.PhotoUid,
+			Symbol:   photo.Symbol,
+		}
+		findProductData.ProductPhotos = append(findProductData.ProductPhotos, productPhoto)
+	}
+	return &findProductData, nil
+}
+
+func (*product) FindAll(ctx context.Context, enterpriseID string) (*http_model.FindAllProductData, error) {
+	products, err := db.GetProductByEnterpriseID(ctx, enterpriseID)
+	if err != nil {
+		// 数据库查询error
+		return nil, err
+	}
+	findAllProductData := http_model.FindAllProductData{}
+	for _, product := range products {
+		productData := http_model.ProductInfo{
+			ProductID:   product.ProductID,
+			BrandName:   product.BrandName,
+			ProductName: product.ProductName,
+			ProductType: consts.GetProjectTypes(product.ProductType),
+		}
+		findAllProductData.ProductInfos = append(findAllProductData.ProductInfos, productData)
+	}
+	return &findAllProductData, nil
+}
+
+func (*product) Update(ctx context.Context, newProduct http_model.CreateProductRequest, enterpriseID string) (*http_model.CreateProductData, error) {
+	productPrice, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", newProduct.ProductPrice), 64)
+	product := gorm_model.YounggeeProduct{
+		ProductID:           newProduct.ProductId,
+		ProductName:         newProduct.ProductName,
+		ProductType:         newProduct.ProductType,
+		ShopAddress:         newProduct.ShopAddress,
+		ProductPrice:        productPrice,
+		ProductDetail:       newProduct.ProductDetail,
+		ProductUrl:          newProduct.ProductUrl,
+		EnterpriseID:        enterpriseID,
+		BrandName:           newProduct.BrandName,
+		PublicCommission:    newProduct.PublicCommission,
+		ExclusiveCommission: newProduct.ExclusiveCommission,
+		CommissionPrice:     newProduct.CommissionPrice,
+	}
+	productID, err := db.UpdateProduct(ctx, product)
+	if err != nil {
+		return nil, err
+	}
+	// 删除该商品之前的所有图片
+	err = db.DeleteProductPhotoByProductID(ctx, *productID)
+	if err != nil {
+		return nil, err
+	}
+	if newProduct.ProductPhotos != nil {
+		// 新增图片
+		productPhotos := []gorm_model.YounggeeProductPhoto{}
+		for _, photo := range newProduct.ProductPhotos {
+			productPhoto := gorm_model.YounggeeProductPhoto{
+				PhotoUrl:  photo.PhotoUrl,
+				PhotoUid:  photo.PhotoUid,
+				Symbol:    photo.Symbol,
+				ProductID: *productID,
+			}
+			productPhotos = append(productPhotos, productPhoto)
+		}
+		err = db.CreateProductPhoto(ctx, productPhotos)
+		if err != nil {
+			return nil, err
+		}
+	}
+	res := &http_model.CreateProductData{
+		ProductID: *productID,
+	}
+	return res, nil
+}
+
+// QueryKuaishouProduct 通过快手商品ID从SDK拉取快手商品信息
+func (*product) QueryKuaishouProduct(ctx context.Context, newKuaishouProduct http_model.FindKuaishouProductRequest) (*http_model.FindKuaishouProductData, error) {
+	var talentID string = "223329990"
+	kuaishouUser := db.GetKuaishouUserInfoByTalentId(ctx, talentID)
+	AccessToken := kuaishouUser.AccessToken
+	kuaishouProduct, err := kuaishou.Queryselectiondetail(newKuaishouProduct.AppKey, newKuaishouProduct.SignSecret, AccessToken, newKuaishouProduct.ItemList)
+	if err != nil {
+		return nil, err
+	}
+	findKuaishouProductData := http_model.FindKuaishouProductData{
+		ProductName:                 kuaishouProduct.ItemList[0].ItemTitle,
+		ProductPrice:                float64(kuaishouProduct.ItemList[0].ItemPrice) * 0.01,
+		ExclusiveCommission:         float64(kuaishouProduct.ItemList[0].CommissionRate) * 0.1,
+		CommissionPrice:             float64(kuaishouProduct.ItemList[0].ProfitAmount) * 0.01,
+		KuaishouMainPhoto:           kuaishouProduct.ItemList[0].ItemImgURL,
+		KuaishouCarousePhotoList:    kuaishouProduct.ItemList[0].ItemGalleryURLs,
+		KuaishouDetailPhotoList:     kuaishouProduct.ItemList[0].ItemDescURLs,
+		MerchantSoldCountThirtyDays: kuaishouProduct.ItemList[0].MerchantSoldCountThirtyDays,
+		KuaishouProductId:           kuaishouProduct.ItemList[0].ItemID,
+	}
+	// print("kuaoshou_product: ", findKuaishouProductData.ProductName)
+	return &findKuaishouProductData, err
+}

+ 386 - 7
service/sec_task.go

@@ -6,6 +6,7 @@ import (
 	"errors"
 	"fmt"
 	"github.com/issue9/conv"
+	"github.com/lin-jim-leon/kuaishou"
 	"github.com/sirupsen/logrus"
 	"strconv"
 	"time"
@@ -25,12 +26,14 @@ func (*selectionTask) GetList(ctx context.Context, request http_model.GetSecTask
 	// 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)
+	fmt.Println("查找信息:", request.SelectionId, request.TaskStage)
+	secTaskList, total, err := db.GetSecTaskList(ctx, request.SelectionId, request.TaskStage, request.SearchValue, request.PageSize, request.PageNum)
+	fmt.Println("查找报错信息:", err)
 	if err != nil {
 		logrus.WithContext(ctx).Errorf("[sectask_service service] call GetSecTaskList error,err:%+v", err)
 		return nil, err
 	}
+	fmt.Println("查找完成:", total)
 
 	// 2. 根据不同查询类型查询补充信息
 	switch request.Type {
@@ -41,7 +44,7 @@ func (*selectionTask) GetList(ctx context.Context, request http_model.GetSecTask
 		// 发货管理根据任务阶段和商品类型查询物流信息
 		// 查询商品类型
 		product, err := db.GetProductType(ctx, request.SelectionId)
-		println("product: ", product)
+		fmt.Println("product: ", product)
 		if err != nil {
 			logrus.WithContext(ctx).Errorf("[sectask_service service] call GetAllSelection error,err:%+v", err)
 			return nil, err
@@ -73,7 +76,7 @@ func (*selectionTask) GetList(ctx context.Context, request http_model.GetSecTask
 }
 
 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)
@@ -98,6 +101,7 @@ func (*selectionTask) RefuseCoop(ctx context.Context, request http_model.RefuseS
 	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
@@ -155,9 +159,8 @@ func (*selectionTask) Settle(ctx context.Context, entersizeId string, request ht
 			return nil, err
 		}
 	}
-	if rewardMoney+returnMoney != payMoney {
-		return nil, errors.New("结算金额有误")
-	}
+	println("payMoney: ", payMoney)
+	println("rewardMoney+returnMoney: ", rewardMoney+returnMoney)
 
 	// 3. 更新选品结算金额
 	_, err = db.UpdateSelectionSettleMoney(ctx, selection.SelectionID, payMoney)
@@ -243,3 +246,379 @@ func (*selectionTask) Settle(ctx context.Context, entersizeId string, request ht
 
 	return &settleSecTaskData, nil
 }
+*/
+
+// UpdateStrategyId 为带货子任务匹配满足要求的免费领样策略
+func (*selectionTask) UpdateStrategyId(ctx context.Context, selectionId string) error {
+	var taskStage int = 11
+	var SearchValue = ""
+	var PageSize = int64(0)
+	var PageNum = int64(0)
+	secTaskList, total, err := db.GetSecTaskList(ctx, selectionId, taskStage, SearchValue, PageSize, PageNum)
+	fmt.Println("此选品的带货子任务数量: ", total)
+	FreeStrategys, err := db.GetFreeStrategyBySelectionId(ctx, selectionId)
+	for i, _ := range FreeStrategys {
+		var strate_id = FreeStrategys[i].StrategyId
+		var fans_num = FreeStrategys[i].FansNum
+		var sale_num = FreeStrategys[i].SaleNum
+		var interval []int
+		switch fans_num {
+		case 1:
+			interval = []int{0, 100000000}
+			break
+		case 2:
+			interval = []int{0, 10000}
+			break
+		case 3:
+			interval = []int{10001, 100000}
+			break
+		case 4:
+			interval = []int{100001, 1000000}
+			break
+		case 5:
+			interval = []int{1000000, 5000000}
+			break
+		case 6:
+			interval = []int{5000000, 10000000}
+			break
+		case 7:
+			interval = []int{10000000, 100000000}
+			break
+		}
+		for j, _ := range secTaskList {
+			var fans int
+			fans, err = strconv.Atoi(secTaskList[j].FansCount)
+			var sale int64
+			sale = int64(secTaskList[j].SaleNum)
+			if fans <= interval[1] && fans >= interval[0] && sale >= sale_num {
+				secTaskList[j].FreeStrategyId = int(strate_id)
+				err := db.UpdataFreeStratrgyId(ctx, secTaskList[j].SecTaskId, secTaskList[j].FreeStrategyId)
+				println("Update: ", err)
+			}
+		}
+	}
+	return err
+}
+
+// UpdateStrategyNumBySelectionId 统计满足某一条FreeStrategy的带货子任务数量
+func (*selectionTask) UpdateStrategyNumBySelectionId(ctx context.Context, selectionId string) error {
+	FreeStrategys, err := db.GetFreeStrategyBySelectionId(ctx, selectionId)
+	fmt.Println(err)
+	for i, _ := range FreeStrategys {
+		var id = FreeStrategys[i].StrategyId
+		var selection_id = FreeStrategys[i].SelectionId
+		// 报名且符合策略的数量
+		var stage = 3
+		enroll_num, err := db.GetSecTaskCountByStrategyId(ctx, selection_id, int(id), stage)
+		fmt.Println(err)
+		fmt.Println("已申请免费领样且符合策略的数量: ", enroll_num)
+		// 申请成功且符合策略的数量
+		stage = 4
+		choose_num, err := db.GetSecTaskCountByStrategyId(ctx, selection_id, int(id), stage)
+		fmt.Println(err)
+		fmt.Println("申请免费领样成功且符合策略的数量: ", choose_num)
+		// 待发货且符合策略的数量
+		stage = 6
+		before_delivery_num, err := db.GetSecTaskCountByStrategyId(ctx, selection_id, int(id), stage)
+		fmt.Println(err)
+		fmt.Println("待发货且符合策略的数量: ", before_delivery_num)
+		// 已发货且符合策略的数量
+		stage = 7
+		delivery_num, err := db.GetSecTaskCountByStrategyId(ctx, selection_id, int(id), stage)
+		fmt.Println(err)
+		fmt.Println("已发货且符合策略的数量: ", delivery_num)
+		// 已收货且符合策略的数量
+		stage = 8
+		after_delivery_num, err := db.GetSecTaskCountByStrategyId(ctx, selection_id, int(id), stage)
+		fmt.Println(err)
+		fmt.Println("已收货且符合策略的数量: ", after_delivery_num)
+		// 把要更新的参数初始化为结构体
+		updatestrategy := gorm_model.FreeStrategy{
+			SelectionId:       selection_id,
+			StrategyId:        id,
+			EnrollNum:         enroll_num,
+			ChooseNum:         choose_num,
+			BeforeDeliveryNum: before_delivery_num,
+			DeliveryNum:       delivery_num,
+			AfterDeliveryNum:  after_delivery_num,
+		}
+		// 更新
+		err = db.UpdateFreeStrategyNum(ctx, updatestrategy)
+	}
+	return err
+}
+
+// UpdateActualNumBySelectionId 根据带货任务ID更新达人实际带货量
+func (*selectionTask) UpdateActualNumBySelectionId(ctx context.Context, selectionId string) error {
+	// 1. 预处理
+	// 1.1. 根据selectionID和task_stage筛选出所有满足条件的子任务
+	var SecTaskStatus = 11
+	var SearchValue = ""
+	var PageSize = int64(0)
+	var PageNum = int64(0)
+	var AppKey string = "ks651333097154138217"
+	var SignSecret string = "bf6393dce0a2b669ee348bebb837b0da"
+	var cpsOrderStatus int = 0
+	var pageSize int = 100
+	var endTime int64 = time.Now().Unix() * 1000
+	var beginTime int64 = endTime - 432000000
+	var pcursor = ""
+	// var sale_num_all = 0
+
+	secTaskList, total, err := db.GetSecTaskList(ctx, selectionId, SecTaskStatus, SearchValue, PageSize, PageNum)
+	if err != nil {
+		return err
+	}
+	fmt.Println("待更新达人实际带货量的子任务数量: ", total)
+
+	// 1.2. 筛选出Selection的开始时间和结束时间
+	selectionInfo, err := db.GetSelectionById(ctx, selectionId)
+	if err != nil {
+		return err
+	}
+	selectionPassTime := selectionInfo.PassAt
+	selectionFinishTime := selectionInfo.FinishAt
+	fmt.Println("带货任务开始时间和结束时间: ", selectionPassTime, selectionFinishTime)
+
+	// 2. 在筛选出的secTaskList中调用SDK查询实际带货量
+	for i, _ := range secTaskList {
+		// 通过talentID取出AccessToken和快手商品ID
+		var talentID string = "223329990"
+		KuaishouProductID, _ := db.GetProductByID(ctx, int64(secTaskList[i].ProductId))
+		KuaishouProductId := KuaishouProductID.KuaishouProductId
+		var actual_num int = 0
+		// var sale_num_all = 0
+		AccessToken := db.GetKuaishouUserInfoByTalentId(ctx, talentID).AccessToken
+		fmt.Println("AccessToken: ", AccessToken)
+		// 根据AccessToken去查实际带货量
+		// 递归
+		for k := 1; k < 18; k++ {
+			corderlist, err := kuaishou.Corderlist(AppKey, SignSecret, AccessToken, cpsOrderStatus, pageSize, beginTime, endTime, pcursor)
+			fmt.Println("error: ", err)
+			if err != nil {
+				return err
+			}
+
+			var orderList = corderlist.Data.OrderViews
+			pcursor = corderlist.Data.Cursor
+			fmt.Println("pcursor: ", pcursor)
+
+			// 在orderList中统计符合要求的商品销量
+			for j := range orderList {
+				if KuaishouProductId == orderList[j].CPSOrderProductViews[0].ItemID {
+					actual_num += orderList[j].CPSOrderProductViews[0].Num
+				}
+			}
+
+			fmt.Println("len of orderList: ", len(orderList))
+
+			// 游标方式遍历100条后的订单
+			for {
+				if pcursor == "nomore" || len(orderList) == 0 {
+					println("nomore")
+					break
+				}
+				corderlist_cursor, err1 := kuaishou.Corderlist(AppKey, SignSecret, AccessToken, cpsOrderStatus, pageSize, beginTime, endTime, pcursor)
+				fmt.Println("error: ", err1)
+				if err1 != nil {
+					return err1
+				}
+				var orderList_cursor = corderlist_cursor.Data.OrderViews
+				pcursor = corderlist_cursor.Data.Cursor
+				if KuaishouProductId == orderList_cursor[99].CPSOrderProductViews[0].ItemID {
+					actual_num += orderList_cursor[99].CPSOrderProductViews[0].Num
+				}
+			}
+			endTime = beginTime
+			beginTime -= 432000000
+			println("k= ", k)
+		}
+
+		updateData := gorm_model.YounggeeSecTaskInfo{
+			TaskID:     secTaskList[i].SecTaskId,
+			SaleActual: actual_num,
+			SaleNumAll: actual_num,
+		}
+		_, err = db.UpdateSecTask(ctx, updateData)
+		fmt.Println(err)
+	}
+	return err
+}
+
+// Settle 结算
+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)
+	fmt.Println("待支付金额: ", payMoney)
+	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("账户余额不足")
+	}
+	fmt.Println("余额充足")
+	// 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("非悬赏任务不能支付悬赏")
+	}
+	fmt.Println("是悬赏任务")
+	// 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("该任务暂不可结算")
+		}
+	*/
+	if secTask.RewardStage != 1 && secTask.TaskStatus != 2 {
+		return nil, errors.New("该任务暂不可结算")
+	}
+
+	fmt.Println("可结算")
+
+	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
+		}
+		}
+		println("payMoney: ", payMoney)
+		println("rewardMoney+returnMoney: ", rewardMoney+returnMoney)
+		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
+	}
+
+	fmt.Println("已结算")
+
+	// 4. 更新选品任务阶段
+	updateSecTaskData := gorm_model.YounggeeSecTaskInfo{
+		TaskID:           request.TaskID,
+		TaskStage:        10,
+		RewardStage:      2,
+		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
+			}
+		}
+	*/
+	// 悬赏收益
+	t := time.Now()
+	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(payMoney, '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
+		}
+	}
+
+	fmt.Println("成功写入达人信息")
+
+	// 7. 若有young之团存在,则为young之团创建收益
+
+	settleSecTaskData := http_model.SettleSecTaskData{}
+
+	// 8. 统计
+	println("开始为每个带货子任务绑定免费领样策略")
+	err1 := SelectionTask.UpdateStrategyId(ctx, request.SelectionID)
+	nerr := SelectionTask.UpdateStrategyNumBySelectionId(ctx, request.SelectionID)
+	fmt.Println(nerr, err1)
+	println("完成为每个带货子任务绑定免费领样策略")
+
+	return &settleSecTaskData, nil
+}

+ 126 - 112
service/sec_task_logistics.go

@@ -1,112 +1,126 @@
-package service
-
-import (
-	"context"
-	"github.com/sirupsen/logrus"
-	"time"
-	"youngee_m_api/db"
-	"youngee_m_api/model/gorm_model"
-	"youngee_m_api/model/http_model"
-)
-
-var SecLogistics *secLogistics
-
-type secLogistics struct {
-}
-
-func (*secLogistics) Create(ctx context.Context, request http_model.CreateSecTaskLogisticsRequest) (*http_model.CreateSecTaskLogisticsData, error) {
-	ThingsType := request.ThingsType
-	newLogistics := gorm_model.YoungeeTaskLogistics{
-		TaskID:                request.TaskID,
-		ThingsType:            int64(ThingsType),
-		ExplorestoreStarttime: time.Now(),
-		ExplorestoreEndtime:   time.Now(),
-		DeliveryTime:          time.Now(),
-	}
-	//实物
-	if ThingsType == 1 {
-		newLogistics.CompanyName = request.CompanyName
-		newLogistics.LogisticsNumber = request.LogisticsNumber
-		newLogistics.DeliveryTime = time.Now()
-	} else if ThingsType == 3 {
-		ExplorestoreStarttime, _ := time.ParseInLocation("2006-01-02 15:04:05", request.ExplorestoreStarttime, time.Local)
-		ExplorestoreEndtime, _ := time.ParseInLocation("2006-01-02 15:04:05", request.ExplorestoreEndtime, time.Local)
-		newLogistics.ExplorestoreStarttime = ExplorestoreStarttime
-		newLogistics.ExplorestoreEndtime = ExplorestoreEndtime
-	}
-
-	_, err := db.CreateSecTaskLogistics(ctx, newLogistics)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[newLogistics service] call CreatenewLogistics error,err:%+v", err)
-		return nil, err
-	}
-
-	// 修改task_info中发货时间、任务阶段
-	updatdSecTask := gorm_model.YounggeeSecTaskInfo{
-		TaskID:          request.TaskID,
-		LogisticsStatus: 2,
-		TaskStage:       8,
-		DeliveryDate:    time.Now(),
-	}
-	_, err = db.UpdateSecTask(ctx, updatdSecTask)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[sectask logistics service] call UpdateSecTask error,err:%+v", err)
-		return nil, err
-	}
-
-	// 插入任务日志、达人消息
-	err = db.CreateTaskLog(ctx, newLogistics.TaskID, "发货时间")
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[newLogistics service] call CreateTaskLog error,err:%+v", err)
-		return nil, err
-	}
-
-	err = db.CreateMessageBySecTaskId(ctx, 8, 2, newLogistics.TaskID)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[newLogistics service] call CreateMessageByTaskId error,err:%+v", err)
-		return nil, err
-	}
-
-	data := http_model.CreateSecTaskLogisticsData{}
-
-	return &data, nil
-}
-
-func (*secLogistics) Update(ctx context.Context, request http_model.UpdateSecTaskLogisticsRequest) (*http_model.UpdateSecTaskLogisticsData, error) {
-	ThingsType := request.ThingsType
-	// 根据任务查询物流id
-	logisticsInfo, err := db.GetLogistics(ctx, request.TaskID)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[newLogistics service] call UpdatenewLogistics error,err:%+v", err)
-		return nil, err
-	}
-	newLogistics := gorm_model.YoungeeTaskLogistics{
-		LogisticsID:           logisticsInfo.LogisticsID,
-		TaskID:                request.TaskID,
-		ThingsType:            int64(ThingsType),
-		ExplorestoreStarttime: time.Now(),
-		ExplorestoreEndtime:   time.Now(),
-		DeliveryTime:          time.Now(),
-	}
-	//实物
-	if ThingsType == 1 {
-		newLogistics.CompanyName = request.CompanyName
-		newLogistics.LogisticsNumber = request.LogisticsNumber
-		newLogistics.DeliveryTime = time.Now()
-	} else if ThingsType == 3 {
-		ExplorestoreStarttime, _ := time.ParseInLocation("2006-01-02 15:04:05", request.ExplorestoreStarttime, time.Local)
-		ExplorestoreEndtime, _ := time.ParseInLocation("2006-01-02 15:04:05", request.ExplorestoreEndtime, time.Local)
-		newLogistics.ExplorestoreStarttime = ExplorestoreStarttime
-		newLogistics.ExplorestoreEndtime = ExplorestoreEndtime
-	}
-
-	_, err = db.UpdateSecTaskLogistics(ctx, newLogistics)
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[newLogistics service] call UpdatenewLogistics error,err:%+v", err)
-		return nil, err
-	}
-
-	data := http_model.UpdateSecTaskLogisticsData{}
-
-	return &data, nil
-}
+package service
+
+import (
+	"context"
+	"github.com/sirupsen/logrus"
+	"time"
+	"youngee_m_api/db"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+)
+
+var SecLogistics *secLogistics
+
+type secLogistics struct {
+}
+
+func (*secLogistics) Create(ctx context.Context, request http_model.CreateSecTaskLogisticsRequest) (*http_model.CreateSecTaskLogisticsData, error) {
+	ThingsType := request.ThingsType
+	newLogistics := gorm_model.YoungeeTaskLogistics{
+		TaskID:                request.TaskID,
+		ThingsType:            int64(ThingsType),
+		ExplorestoreStarttime: time.Now(),
+		ExplorestoreEndtime:   time.Now(),
+		DeliveryTime:          time.Now(),
+	}
+	//实物
+	if ThingsType == 1 {
+		newLogistics.CompanyName = request.CompanyName
+		newLogistics.LogisticsNumber = request.LogisticsNumber
+		newLogistics.DeliveryTime = time.Now()
+	} else if ThingsType == 3 {
+		ExplorestoreStarttime, _ := time.ParseInLocation("2006-01-02 15:04:05", request.ExplorestoreStarttime, time.Local)
+		ExplorestoreEndtime, _ := time.ParseInLocation("2006-01-02 15:04:05", request.ExplorestoreEndtime, time.Local)
+		newLogistics.ExplorestoreStarttime = ExplorestoreStarttime
+		newLogistics.ExplorestoreEndtime = ExplorestoreEndtime
+	}
+
+	_, err := db.CreateSecTaskLogistics(ctx, newLogistics)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[newLogistics service] call CreatenewLogistics error,err:%+v", err)
+		return nil, err
+	}
+
+	// 修改task_info中发货时间、任务阶段
+	updatdSecTask := gorm_model.YounggeeSecTaskInfo{
+		TaskID:          request.TaskID,
+		LogisticsStatus: 2,
+		TaskStage:       7,
+		DeliveryDate:    time.Now(),
+		FreeStage:       4,
+	}
+	_, err = db.UpdateSecTask(ctx, updatdSecTask)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[sectask logistics service] call UpdateSecTask error,err:%+v", err)
+		return nil, err
+	}
+
+	// 插入任务日志、达人消息
+	err = db.CreateTaskLog(ctx, newLogistics.TaskID, "发货时间")
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[newLogistics service] call CreateTaskLog error,err:%+v", err)
+		return nil, err
+	}
+
+	err = db.CreateMessageBySecTaskId(ctx, 8, 2, newLogistics.TaskID)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[newLogistics service] call CreateMessageByTaskId error,err:%+v", err)
+		return nil, err
+	}
+
+	// Selection中SampleNum - 1
+	updateSelection, err := db.GetSelectionById(ctx, request.SelectionId)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[newLogistics service] call CreateMessageByTaskId error,err:%+v", err)
+		return nil, err
+	}
+	num := updateSelection.RemainNum - 1
+	selectionInfo := gorm_model.YounggeeSelectionInfo{
+		SelectionID: request.SelectionId,
+		RemainNum:   num,
+	}
+	err = db.UpdateSelection(ctx, selectionInfo)
+
+	data := http_model.CreateSecTaskLogisticsData{}
+
+	return &data, nil
+}
+
+func (*secLogistics) Update(ctx context.Context, request http_model.UpdateSecTaskLogisticsRequest) (*http_model.UpdateSecTaskLogisticsData, error) {
+	ThingsType := request.ThingsType
+	// 根据任务查询物流id
+	logisticsInfo, err := db.GetLogistics(ctx, request.TaskID)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[newLogistics service] call UpdatenewLogistics error,err:%+v", err)
+		return nil, err
+	}
+	newLogistics := gorm_model.YoungeeTaskLogistics{
+		LogisticsID:           logisticsInfo.LogisticsID,
+		TaskID:                request.TaskID,
+		ThingsType:            int64(ThingsType),
+		ExplorestoreStarttime: time.Now(),
+		ExplorestoreEndtime:   time.Now(),
+		DeliveryTime:          time.Now(),
+	}
+	//实物
+	if ThingsType == 1 {
+		newLogistics.CompanyName = request.CompanyName
+		newLogistics.LogisticsNumber = request.LogisticsNumber
+		newLogistics.DeliveryTime = time.Now()
+	} else if ThingsType == 3 {
+		ExplorestoreStarttime, _ := time.ParseInLocation("2006-01-02 15:04:05", request.ExplorestoreStarttime, time.Local)
+		ExplorestoreEndtime, _ := time.ParseInLocation("2006-01-02 15:04:05", request.ExplorestoreEndtime, time.Local)
+		newLogistics.ExplorestoreStarttime = ExplorestoreStarttime
+		newLogistics.ExplorestoreEndtime = ExplorestoreEndtime
+	}
+
+	_, err = db.UpdateSecTaskLogistics(ctx, newLogistics)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[newLogistics service] call UpdatenewLogistics error,err:%+v", err)
+		return nil, err
+	}
+
+	data := http_model.UpdateSecTaskLogisticsData{}
+
+	return &data, nil
+}

+ 96 - 8
service/selection.go

@@ -84,7 +84,9 @@ func (*selection) Create(ctx context.Context, request http_model.CreateSelection
 
 func (*selection) Update(ctx context.Context, request http_model.UpdateSelectionRequest, enterpriseId string) (*http_model.UpdateSelectionData, error) {
 	// 1. 检查该企业id和商品id有无选品
-	println("awdawdawdawdwad", request.EnterpriseId)
+	// println("awdawdawdawdwad", request.EnterpriseId)
+	fmt.Println("更新的选品信息")
+
 	selectionInfo, err := db.GetSelectionById(ctx, request.SelectionID)
 	if err != nil {
 		return nil, err
@@ -113,6 +115,7 @@ func (*selection) Update(ctx context.Context, request http_model.UpdateSelection
 		request.SelectionStatus = 1
 	}
 	t := time.Now()
+	println("taskDDl: ", &taskDdl)
 	updateSelection := gorm_model.YounggeeSelectionInfo{
 		SelectionID:      request.SelectionID,
 		SelectionStatus:  request.SelectionStatus,
@@ -142,6 +145,9 @@ func (*selection) Update(ctx context.Context, request http_model.UpdateSelection
 	if request.SelectionStatus == 2 {
 		updateSelection.SubmitAt = &t
 	}
+	if request.Status == 1 {
+		updateSelection.Status = 1
+	}
 	// 合并传入参数和数据表中原记录,若传入参数字段值为空,则将字段赋值为原记录中值
 	result := util.MergeStructValue(&updateSelection, selectionInfo)
 	// 利用反射机制将interface类型转换为结构体类型
@@ -151,12 +157,14 @@ func (*selection) Update(ctx context.Context, request http_model.UpdateSelection
 		//fmt.Println(p)
 	}
 	// c) 计算预估成本(如果有)
-	var estimatedCost float64
-	if conv.MustInt(updateSelection.TaskMode, 0) == 1 {
-		estimatedCost = conv.MustFloat64(updateSelection.TaskReward, 0) * conv.MustFloat64(updateSelection.SampleNum, 0)
-	}
-	estimatedCostToString, _ := conv.String(estimatedCost)
-	updateSelection.EstimatedCost = estimatedCostToString
+	/*
+		var estimatedCost float64
+		if conv.MustInt(updateSelection.TaskMode, 0) == 1 {
+			estimatedCost = conv.MustFloat64(updateSelection.TaskReward, 0) * conv.MustFloat64(updateSelection.SampleNum, 0)
+		}
+		estimatedCostToString, _ := conv.String(estimatedCost)
+		updateSelection.EstimatedCost = estimatedCostToString
+	*/
 
 	// 3. 更新选品
 	err = db.UpdateSelection(ctx, updateSelection)
@@ -164,6 +172,8 @@ func (*selection) Update(ctx context.Context, request http_model.UpdateSelection
 		return nil, err
 	}
 
+	println("brief")
+
 	// 4. 更新选品brief和示例
 	if request.SecBrief != nil {
 		// 删除已有brief
@@ -209,6 +219,65 @@ func (*selection) Update(ctx context.Context, request http_model.UpdateSelection
 		}
 	}
 
+	println("更新带货任务的免费领样策略")
+	fmt.Println("SampleMode: ", request.SampleMode)
+	// 更新带货任务的免费领样策略
+	if request.FreeStrategys != nil {
+		// 1. 删除已有的免费领样策略
+		err = db.DeleteFreeStrategyBySelectionId(ctx, request.SelectionID)
+		if err != nil {
+			return nil, err
+		}
+		// 2. 接收并创建新的免费领样策略
+		if request.SampleMode == 1 {
+			var Frees []gorm_model.FreeStrategy
+			for _, v := range request.FreeStrategys {
+				Free := gorm_model.FreeStrategy{
+					SelectionId:    selectionInfo.SelectionID,
+					StrategyId:     v.StrategyId,
+					FansNum:        v.FansNum,
+					SaleNum:        v.SaleNum,
+					StrategyStatus: 1,
+					EnrollNum:      0,
+					ChooseNum:      0,
+				}
+				Frees = append(Frees, Free)
+			}
+			err = db.CreateFreeStrategy(ctx, Frees)
+			if err != nil {
+				return nil, err
+			}
+		}
+	}
+
+	println("更新带货任务的悬赏策略")
+	fmt.Println("TaskMode: ", request.TaskMode)
+	// 更新带货任务的悬赏策略
+	if request.RewardStrategys != nil {
+		// 1. 删除已有的悬赏策略
+		err = db.DeleteRewardStrategyBySelectionId(ctx, request.SelectionID)
+		if err != nil {
+			return nil, err
+		}
+		if request.TaskMode == 1 {
+			var Rewards []gorm_model.RewardStrategy
+			for _, v := range request.RewardStrategys {
+				Reward := gorm_model.RewardStrategy{
+					SelectionId:    selectionInfo.SelectionID,
+					Reward:         v.Reward,
+					SaleActual:     v.SaleActual,
+					PerReward:      v.PerReward,
+					StrategyStatus: 1,
+				}
+				Rewards = append(Rewards, Reward)
+			}
+			err = db.CreateRewardStrategy(ctx, Rewards)
+			if err != nil {
+				return nil, err
+			}
+		}
+	}
+
 	res := &http_model.UpdateSelectionData{
 		SelectionId: updateSelection.SelectionID,
 	}
@@ -305,11 +374,26 @@ func (s *selection) GetSelectionDetail(ctx *gin.Context, selectionId string, ent
 		logrus.WithContext(ctx).Errorf("[selectionDB service] call GetProductPhotoInfo error,err:%+v", err)
 		return nil, err
 	}
+	// 查找免费领样策略
+	freeStrategy, err := db.GetFreeStrategyBySelectionId(ctx, selectionId)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[selectionDB service] call GetFreeStrategy error,err:%+v", err)
+		return nil, err
+	}
+	// 查找悬赏策略
+	rewardStrategy, err := db.GetRewardStrategyBySelectionId(ctx, selectionId)
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[selectionDB service] call GetRewardStrategy error,err:%+v", err)
+		return nil, err
+	}
+
 	selectionDetail.SelectionBrief = selectionBriefInfo
 	selectionDetail.SelectionInfo = selectionInfo
 	selectionDetail.SelectionExample = selectionExampleInfo
 	selectionDetail.ProductInfo = productInfo
 	selectionDetail.ProductPhotoInfo = productPhotoInfo
+	selectionDetail.FreeStrategy = freeStrategy
+	selectionDetail.RewardStrategy = rewardStrategy
 	return &selectionDetail, nil
 }
 
@@ -324,8 +408,12 @@ func (*selection) Review(ctx context.Context, request http_model.ReviewSelection
 	// 计算预估成本
 	var estimatedCost float64 = 0.0
 	var estimatedCostToString string = ""
+
+	selection1, _ := db.GetRewardStrategyBySelectionId(ctx, request.SelectionId)
+
 	if conv.MustInt(selectionInfo.TaskMode, 0) == 1 {
-		estimatedCost = conv.MustFloat64(selectionInfo.TaskReward, 0) * conv.MustFloat64(selectionInfo.SampleNum, 0)
+		// estimatedCost = conv.MustFloat64(selectionInfo.TaskReward, 0) * conv.MustFloat64(selectionInfo.SampleNum, 0)
+		estimatedCost = conv.MustFloat64(selection1[0].Reward, 0)
 		estimatedCostToString, _ = conv.String(estimatedCost)
 	}