Quellcode durchsuchen

[20250214]任务中心迁移

lin-jim-leon vor 2 Monaten
Ursprung
Commit
85c3bc18de
100 geänderte Dateien mit 9341 neuen und 2062 gelöschten Zeilen
  1. 16 6
      config/dev.yaml
  2. 28 28
      consts/error_code.go
  3. 467 320
      db/data.go
  4. 1479 438
      db/finance.go
  5. 531 279
      db/link.go
  6. 713 0
      db/locallife_task.go
  7. 16 0
      db/project.go
  8. 766 0
      db/project_task.go
  9. 572 307
      db/sketch.go
  10. 323 16
      db/task.go
  11. 57 0
      handler/LocalPrelinklist.go
  12. 61 0
      handler/PasslocalTaskCoop.go
  13. 62 0
      handler/PassproTaskCoop.go
  14. 57 0
      handler/Prelinklist.go
  15. 55 0
      handler/RefuseTalentWithdraw.go
  16. 61 0
      handler/Refuseloacltaskcoop.go
  17. 62 0
      handler/RefuseproTaskCoop.go
  18. 59 58
      handler/accept_data.go
  19. 59 59
      handler/accept_link.go
  20. 59 0
      handler/acceptrecharge.go
  21. 57 0
      handler/confirmsupplierInvoice.go
  22. 57 0
      handler/confirmwithdraw.go
  23. 56 0
      handler/getInvoicevalue.go
  24. 56 55
      handler/getWithdrawNum.go
  25. 57 56
      handler/getWithdrawalRecord.go
  26. 58 0
      handler/getbilllist.go
  27. 56 0
      handler/getinvoiceinfo.go
  28. 59 0
      handler/getinvoicelist.go
  29. 60 0
      handler/getlocaltasklist.go
  30. 60 0
      handler/getprerechargelist.go
  31. 57 0
      handler/getrechargevalue.go
  32. 58 0
      handler/getsupplierinvoicelist.go
  33. 56 0
      handler/getsupplierinvoicevalue.go
  34. 58 0
      handler/getsupplierwithdrawlist.go
  35. 58 0
      handler/gettalentwithdrawlist.go
  36. 60 0
      handler/gettasklist.go
  37. 56 0
      handler/getwithdrawvalue.go
  38. 60 0
      handler/localaccept_data.go
  39. 60 0
      handler/localaccept_link.go
  40. 59 0
      handler/localaccept_sketch.go
  41. 60 0
      handler/localdata_opinion.go
  42. 60 0
      handler/locallink_opinion.go
  43. 57 0
      handler/localpredatalist.go
  44. 60 0
      handler/localpresketchlist.go
  45. 60 0
      handler/localreject_data.go
  46. 60 0
      handler/localreject_link.go
  47. 58 0
      handler/localreject_sketch.go
  48. 59 0
      handler/localsketch_opinion.go
  49. 60 0
      handler/localtaskdatalist.go
  50. 60 0
      handler/localtasklinklist.go
  51. 60 0
      handler/localtasksketchlist.go
  52. 57 0
      handler/predatalist.go
  53. 60 0
      handler/presketchlist.go
  54. 59 0
      handler/refusecharge.go
  55. 57 0
      handler/refusesupplierInvoice.go
  56. 57 0
      handler/refusewithdraw.go
  57. 60 0
      handler/reject_data.go
  58. 60 0
      handler/reject_link.go
  59. 58 0
      handler/reject_sketch.go
  60. 62 0
      handler/reviewlocallife.go
  61. 62 0
      handler/reviewproject.go
  62. 57 0
      handler/setinvoiceinfo.go
  63. 59 58
      handler/sketch_photo.go
  64. 56 0
      handler/supplierwithdrawprevalue.go
  65. 56 0
      handler/talentwithdrawprevalue.go
  66. 60 0
      handler/taskdatalist.go
  67. 60 0
      handler/tasklinklist.go
  68. 60 0
      handler/tasksketchlist.go
  69. 68 67
      handler/withdrawalRecords.go
  70. 2 1
      model/gorm_model/auto_task.go
  71. 15 0
      model/gorm_model/enterprise_talent_cooperate.go
  72. 37 25
      model/gorm_model/invoice_record.go
  73. 86 0
      model/gorm_model/local_task.go
  74. 55 0
      model/gorm_model/locallife_info.go
  75. 22 7
      model/gorm_model/platform_kuaishou_user_info.go
  76. 16 0
      model/gorm_model/platforminvoiceinfo.go
  77. 22 20
      model/gorm_model/product_photo.go
  78. 63 46
      model/gorm_model/project.go
  79. 87 49
      model/gorm_model/project_task.go
  80. 27 24
      model/gorm_model/rechargeRecord.go
  81. 30 0
      model/gorm_model/s_locallife_info.go
  82. 27 0
      model/gorm_model/s_project.go
  83. 36 35
      model/gorm_model/selection_info.go
  84. 28 0
      model/gorm_model/stroe.go
  85. 23 0
      model/gorm_model/supplier.go
  86. 17 0
      model/gorm_model/supplier_income.go
  87. 25 0
      model/gorm_model/supplier_invoice_record.go
  88. 30 0
      model/gorm_model/supplier_withdraw.go
  89. 31 27
      model/gorm_model/talent_income.go
  90. 30 24
      model/gorm_model/withdraw_info.go
  91. 14 14
      model/http_model/ConfirmInvoiceRequest.go
  92. 13 0
      model/http_model/ConfirmSupplierInvoiceRequest.go
  93. 19 0
      model/http_model/GetInvoiceValueRequest.go
  94. 33 0
      model/http_model/GetRechargeListRequest.go
  95. 19 0
      model/http_model/GetRechargeValueRequest.go
  96. 43 43
      model/http_model/InvoiceRecordsRequest.go
  97. 31 0
      model/http_model/LocalPrelinkList.go
  98. 23 0
      model/http_model/PassLocalTaskCoopRequest.go
  99. 23 0
      model/http_model/PassproTaskCoopRequest.go
  100. 31 0
      model/http_model/PreLinkList.go

+ 16 - 6
config/dev.yaml

@@ -1,16 +1,26 @@
+#mysql:
+#  host: 139.9.53.143
+#  port: 3306
+#  user: talent
+#  password: talentDB_123
+#  database: youngmini
+#
+#redis:
+#  host: 139.9.53.143
+#  port: 6379
+#  auth: younggeeRedis_123
+#  database: 1
 mysql:
-  host: 139.9.53.143
+  host: 1.92.142.62
   port: 3306
-  user: talent
-  password: talentDB_123
+  user: root
+  password: Younggee_root_DB_123
   database: youngmini
-
 redis:
-  host: 139.9.53.143
+  host: 1.92.142.62
   port: 6379
   auth: younggeeRedis_123
   database: 1
-
 server:
   host: 0.0.0.0
   port: 8488

+ 28 - 28
consts/error_code.go

@@ -1,28 +1,28 @@
-package consts
-
-import "github.com/go-redis/redis/v8"
-
-var RedisNil = redis.Nil
-var errorCodeToastMap = map[int32]string{}
-
-const DefaultToast = ""
-
-const ErrorSuccess int32 = 0
-const ErrorNotLogin int32 = 4001
-const ErrorParamCheck int32 = 5001
-const ErrorInternal int32 = 5001
-
-func init() {
-	errorCodeToastMap[ErrorSuccess] = "请求成功"
-	errorCodeToastMap[ErrorNotLogin] = "请登录后操作"
-	errorCodeToastMap[ErrorParamCheck] = "参数有误"
-	errorCodeToastMap[ErrorInternal] = "请求错误"
-}
-
-func GetErrorToast(errorCode int32) string {
-	toast, contain := errorCodeToastMap[errorCode]
-	if contain {
-		return toast
-	}
-	return "网络错误,请稍后再试"
-}
+package consts
+
+import "github.com/go-redis/redis/v8"
+
+var RedisNil = redis.Nil
+var errorCodeToastMap = map[int32]string{}
+
+const DefaultToast = ""
+
+const ErrorSuccess int32 = 20000
+const ErrorNotLogin int32 = 44000
+const ErrorInternal int32 = 40000
+const ErrorParamCheck int32 = 50000
+
+func init() {
+	errorCodeToastMap[ErrorSuccess] = "请求成功"
+	errorCodeToastMap[ErrorNotLogin] = "请登录后操作"
+	errorCodeToastMap[ErrorInternal] = "error"
+	errorCodeToastMap[ErrorParamCheck] = "网络错误"
+}
+
+func GetErrorToast(errorCode int32) string {
+	toast, contain := errorCodeToastMap[errorCode]
+	if contain {
+		return toast
+	}
+	return "网络错误,请稍后再试"
+}

+ 467 - 320
db/data.go

@@ -1,320 +1,467 @@
-package db
-
-import (
-	"context"
-	"fmt"
-	"github.com/caixw/lib.go/conv"
-	"github.com/sirupsen/logrus"
-	"reflect"
-	"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"
-)
-
-// GetTaskDataList 查询上传链接的task list
-func GetTaskDataList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskDataInfo, int64, error) {
-	db := GetReadDB(ctx)
-	// 查询Task表信息
-	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
-	// 根据Project条件过滤
-	conditionType := reflect.TypeOf(conditions).Elem()
-	conditionValue := reflect.ValueOf(conditions).Elem()
-	var platform_nickname string = ""
-	for i := 0; i < conditionType.NumField(); i++ {
-		field := conditionType.Field(i)
-		tag := field.Tag.Get("condition")
-		value := conditionValue.FieldByName(field.Name)
-
-		if tag == "data_status" {
-			fmt.Printf("Data %+v", value.Interface() == int64(0))
-			if value.Interface() == int64(0) {
-				db = db.Where("task_stage = 14")
-			} else {
-				db = db.Where("task_stage > 14 and task_stage <> 16")
-			}
-			continue
-		} else if !util.IsBlank(value) {
-			if tag == "platform_nickname" {
-				platform_nickname = fmt.Sprintf("%v", value.Interface())
-				continue
-			} else if tag == "project_id" || tag == "strategy_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("[GetTaskDataList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	db.Order("task_id").Find(&taskInfos)
-
-	// 查询任务id
-	var taskIds []string
-	taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
-	for _, taskInfo := range taskInfos {
-		taskIds = append(taskIds, taskInfo.TaskId)
-		taskMap[taskInfo.TaskId] = taskInfo
-	}
-
-	// 查询链接
-	db1 := GetReadDB(ctx)
-	// db1 = db1.Debug().Model(gorm_model.YounggeeDataInfo{})
-	var LinkInfos []gorm_model.YounggeeLinkInfo
-	db1 = db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_submit= 1 AND is_ok = 1", taskIds)
-	err := db1.Find(&LinkInfos).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	LinkMap := make(map[string]gorm_model.YounggeeLinkInfo)
-	for _, LinkInfo := range LinkInfos {
-		LinkMap[LinkInfo.TaskID] = LinkInfo
-	}
-
-	db2 := GetReadDB(ctx)
-	// db2 = db1.Debug().Model(gorm_model.YounggeeDataInfo{})
-
-	var DataInfos []gorm_model.YounggeeDataInfo
-	db2 = db2.Model(gorm_model.YounggeeDataInfo{}).Where("task_id IN ? AND is_submit = 1", taskIds)
-	fmt.Printf("conditions %+v", conditions)
-	if conditions.DataStatus == int64(0) {
-		db2 = db2.Where("is_review = 0")
-	} else {
-		db2 = db2.Where("is_ok = 1")
-	}
-	err = db2.Find(&DataInfos).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	DataMap := make(map[string]gorm_model.YounggeeDataInfo)
-	for _, DataInfo := range DataInfos {
-		DataMap[DataInfo.TaskID] = DataInfo
-	}
-	// 查询总数
-	var totalData int64
-	if err := db2.Count(&totalData).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	var misNum int64
-	if totalData > totalTask {
-		misNum = totalData - totalTask
-	} else {
-		misNum = totalTask - totalData
-	}
-	logrus.Println("totalData,totalTalent,misNum:", totalData, totalTask, misNum)
-
-	// 查询该页数据
-	limit := pageSize + misNum
-	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("[GetTaskDataList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-
-	var TaskDatas []*http_model.TaskData
-	var taskDatas []*http_model.TaskDataInfo
-	var newTaskDatas []*http_model.TaskDataInfo
-	for _, taskId := range taskIds {
-		TaskData := new(http_model.TaskData)
-		TaskData.Talent = taskMap[taskId]
-		TaskData.Data = DataMap[taskId]
-		TaskData.Link = LinkMap[taskId]
-		TaskDatas = append(TaskDatas, TaskData)
-	}
-
-	taskDatas = pack.TaskDataToTaskInfo(TaskDatas)
-
-	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 fulltaskData, total, nil
-	return newTaskDatas, totalTask, nil
-}
-
-// DataOpinion 提交意见
-func DataOpinion(ctx context.Context, TaskID string, ReviseOpinion string) error {
-	db := GetReadDB(ctx)
-	err := db.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_review = 0", TaskID).Updates(map[string]interface{}{"revise_opinion": ReviseOpinion, "reject_at": time.Now(), "is_review": 1}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Data db] Update YounggeeDataInfo error,err:%+v", err)
-		return err
-	}
-	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{DataStatus: 3}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Data db] Update YoungeeTaskInfo error,err:%+v", err)
-		return err
-	}
-	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 13}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Data db] Update YoungeeTaskInfo error,err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-// AcceptData 同意数据-结案
-func AcceptData(ctx context.Context, TaskIDs []string) error {
-	db := GetReadDB(ctx)
-	err := db.Model(gorm_model.YounggeeDataInfo{}).Where("task_id in ?  and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 1, "is_review": 1, "agree_at": time.Now()}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Data db] Update YounggeeDataInfo error,err:%+v", err)
-		return err
-	}
-	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{DataStatus: 5, TaskStage: 15, CompleteStatus: 2}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Data db] Update YoungeeTaskInfo error,err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-// GetSpecialTaskDataList 专项任务-查询上传链接的task list
-func GetSpecialTaskDataList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskDataInfo, int64, error) {
-	db := GetReadDB(ctx)
-	// 查询Task表信息
-	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
-	// 根据Project条件过滤
-	conditionType := reflect.TypeOf(conditions).Elem()
-	conditionValue := reflect.ValueOf(conditions).Elem()
-	var platform_nickname string = ""
-	for i := 0; i < conditionType.NumField(); i++ {
-		field := conditionType.Field(i)
-		tag := field.Tag.Get("condition")
-		value := conditionValue.FieldByName(field.Name)
-
-		if tag == "data_status" {
-			fmt.Printf("Data %+v", value.Interface() == int64(0))
-			if value.Interface() == int64(0) {
-				db = db.Where("task_stage = 14")
-			} else {
-				db = db.Where("task_stage > 14 and task_stage <> 16")
-			}
-			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("[GetTaskDataList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	db.Order("task_id").Find(&taskInfos)
-
-	// 查询任务id
-	var taskIds []string
-	taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
-	for _, taskInfo := range taskInfos {
-		taskIds = append(taskIds, taskInfo.TaskId)
-		taskMap[taskInfo.TaskId] = taskInfo
-	}
-
-	// 查询链接
-	db1 := GetReadDB(ctx)
-	// db1 = db1.Debug().Model(gorm_model.YounggeeDataInfo{})
-	var LinkInfos []gorm_model.YounggeeLinkInfo
-	db1 = db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_submit= 1 AND is_ok = 1", taskIds)
-	err := db1.Find(&LinkInfos).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	LinkMap := make(map[string]gorm_model.YounggeeLinkInfo)
-	for _, LinkInfo := range LinkInfos {
-		LinkMap[LinkInfo.TaskID] = LinkInfo
-	}
-
-	db2 := GetReadDB(ctx)
-	var DataInfos []gorm_model.YounggeeDataInfo
-	db2 = db2.Model(gorm_model.YounggeeDataInfo{}).Where("task_id IN ? AND is_submit = 1", taskIds)
-	if conditions.DataStatus == int64(0) {
-		db2 = db2.Where("is_review = 0")
-	} else {
-		db2 = db2.Where("is_ok = 1")
-	}
-	err = db2.Find(&DataInfos).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	DataMap := make(map[string]gorm_model.YounggeeDataInfo)
-	for _, DataInfo := range DataInfos {
-		DataMap[DataInfo.TaskID] = DataInfo
-	}
-	// 查询总数
-	var totalData int64
-	if err := db2.Count(&totalData).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	var misNum int64
-	if totalData > totalTask {
-		misNum = totalData - totalTask
-	} else {
-		misNum = totalTask - totalData
-	}
-	logrus.Println("totalData,totalTalent,misNum:", totalData, totalTask, misNum)
-
-	// 查询该页数据
-	limit := pageSize + misNum
-	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("[GetTaskDataList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-
-	var TaskDatas []*http_model.SpecialTaskData
-	var taskDatas []*http_model.SpecialTaskDataInfo
-	var newTaskDatas []*http_model.SpecialTaskDataInfo
-	for _, taskId := range taskIds {
-		TaskData := new(http_model.SpecialTaskData)
-		TaskData.Talent = taskMap[taskId]
-		TaskData.Data = DataMap[taskId]
-		TaskData.Link = LinkMap[taskId]
-		TaskDatas = append(TaskDatas, TaskData)
-	}
-
-	taskDatas = pack.SpecialTaskDataToTaskInfo(TaskDatas)
-
-	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 fulltaskData, total, nil
-	return newTaskDatas, totalTask, nil
-}
+package db
+
+import (
+	"context"
+	"fmt"
+	"github.com/caixw/lib.go/conv"
+	"github.com/sirupsen/logrus"
+	"reflect"
+	"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"
+)
+
+// GetTaskDataList 查询上传链接的task list
+func GetTaskDataList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskDataInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询Task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	var platform_nickname string = ""
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+
+		if tag == "data_status" {
+			fmt.Printf("Data %+v", value.Interface() == int64(0))
+			if value.Interface() == int64(0) {
+				db = db.Where("task_stage = 14")
+			} else {
+				db = db.Where("task_stage > 14 and task_stage <> 16")
+			}
+			continue
+		} else if !util.IsBlank(value) {
+			if tag == "platform_nickname" {
+				platform_nickname = fmt.Sprintf("%v", value.Interface())
+				continue
+			} else if tag == "project_id" || tag == "strategy_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("[GetTaskDataList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	db.Order("task_id").Find(&taskInfos)
+
+	// 查询任务id
+	var taskIds []string
+	taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
+	for _, taskInfo := range taskInfos {
+		taskIds = append(taskIds, taskInfo.TaskId)
+		taskMap[taskInfo.TaskId] = taskInfo
+	}
+
+	// 查询链接
+	db1 := GetReadDB(ctx)
+	// db1 = db1.Debug().Model(gorm_model.YounggeeDataInfo{})
+	var LinkInfos []gorm_model.YounggeeLinkInfo
+	db1 = db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_submit= 1 AND is_ok = 1", taskIds)
+	err := db1.Find(&LinkInfos).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	LinkMap := make(map[string]gorm_model.YounggeeLinkInfo)
+	for _, LinkInfo := range LinkInfos {
+		LinkMap[LinkInfo.TaskID] = LinkInfo
+	}
+
+	db2 := GetReadDB(ctx)
+	// db2 = db1.Debug().Model(gorm_model.YounggeeDataInfo{})
+
+	var DataInfos []gorm_model.YounggeeDataInfo
+	db2 = db2.Model(gorm_model.YounggeeDataInfo{}).Where("task_id IN ? AND is_submit = 1", taskIds)
+	fmt.Printf("conditions %+v", conditions)
+	if conditions.DataStatus == int64(0) {
+		db2 = db2.Where("is_review = 0")
+	} else {
+		db2 = db2.Where("is_ok = 1")
+	}
+	err = db2.Find(&DataInfos).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	DataMap := make(map[string]gorm_model.YounggeeDataInfo)
+	for _, DataInfo := range DataInfos {
+		DataMap[DataInfo.TaskID] = DataInfo
+	}
+	// 查询总数
+	var totalData int64
+	if err := db2.Count(&totalData).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	var misNum int64
+	if totalData > totalTask {
+		misNum = totalData - totalTask
+	} else {
+		misNum = totalTask - totalData
+	}
+	logrus.Println("totalData,totalTalent,misNum:", totalData, totalTask, misNum)
+
+	// 查询该页数据
+	limit := pageSize + misNum
+	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("[GetTaskDataList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+
+	var TaskDatas []*http_model.TaskData
+	var taskDatas []*http_model.TaskDataInfo
+	var newTaskDatas []*http_model.TaskDataInfo
+	for _, taskId := range taskIds {
+		TaskData := new(http_model.TaskData)
+		TaskData.Talent = taskMap[taskId]
+		TaskData.Data = DataMap[taskId]
+		TaskData.Link = LinkMap[taskId]
+		TaskDatas = append(TaskDatas, TaskData)
+	}
+
+	taskDatas = pack.TaskDataToTaskInfo(TaskDatas)
+
+	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 fulltaskData, total, nil
+	return newTaskDatas, totalTask, nil
+}
+
+//// DataOpinion 提交意见
+//func DataOpinion(ctx context.Context, TaskID string, ReviseOpinion string) error {
+//	db := GetReadDB(ctx)
+//	err := db.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_review = 0", TaskID).Updates(map[string]interface{}{"revise_opinion": ReviseOpinion, "reject_at": time.Now(), "is_review": 1}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Data db] Update YounggeeDataInfo error,err:%+v", err)
+//		return err
+//	}
+//	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{DataStatus: 3}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Data db] Update YoungeeTaskInfo error,err:%+v", err)
+//		return err
+//	}
+//	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 13}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Data db] Update YoungeeTaskInfo error,err:%+v", err)
+//		return err
+//	}
+//	return nil
+//}
+
+// DataOpinion 提交意见
+func DataOpinion(ctx context.Context, TaskID string, ReviseOpinion string, operatorid string, operatetype int, projectid string) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_review = 0", TaskID).Updates(map[string]interface{}{"revise_opinion": ReviseOpinion, "reject_at": time.Now(), "is_review": 1, "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Update YounggeeDataInfo error,err:%+v", err)
+		return err
+	}
+	var project gorm_model.ProjectInfo
+	err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectid).Find(&project).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
+		return err
+	}
+
+	var data_default gorm_model.InfoAutoTask
+	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskID).Find(&data_default).Error
+	if err != nil {
+		return err
+	}
+	duration := time.Duration(data_default.CaseCloseDefault) * time.Hour
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{DataStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 13}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+//// AcceptData 同意数据-结案
+//func AcceptData(ctx context.Context, TaskIDs []string) error {
+//	db := GetReadDB(ctx)
+//	err := db.Model(gorm_model.YounggeeDataInfo{}).Where("task_id in ?  and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 1, "is_review": 1, "agree_at": time.Now()}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Data db] Update YounggeeDataInfo error,err:%+v", err)
+//		return err
+//	}
+//	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{DataStatus: 5, TaskStage: 15, CompleteStatus: 2}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Data db] Update YoungeeTaskInfo error,err:%+v", err)
+//		return err
+//	}
+//	return nil
+//}
+
+// AcceptData 同意数据-结案
+func AcceptData(ctx context.Context, TaskIDs []string, operatorid string, operatetype int) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeDataInfo{}).Where("task_id in ?  and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 1, "is_review": 1, "agree_at": time.Now(), "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Update YounggeeDataInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// RejectData 拒绝数据-结案
+func LocalRejectData(ctx context.Context, TaskIDs []string, operatorid string, operatetype int, projectid string) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeDataInfo{}).Where("task_id in ?  and is_review = 0", TaskIDs).Updates(map[string]interface{}{"reject_at": time.Now(), "is_review": 1, "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Update YounggeeDataInfo error,err:%+v", err)
+		return err
+	}
+	var project gorm_model.YounggeeLocalLifeInfo
+	err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", projectid).Find(&project).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
+		return err
+	}
+
+	var data_default gorm_model.InfoAutoTask
+	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskId).Find(&data_default).Error
+	if err != nil {
+		return err
+	}
+	duration := time.Duration(data_default.CaseCloseDefault) * time.Hour
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ?", TaskIDs).Updates(gorm_model.YoungeeLocalTaskInfo{DataStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Update YoungeeLocalTaskInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ?", TaskIDs).Updates(gorm_model.YoungeeLocalTaskInfo{TaskStage: 13}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Update YoungeeLocalTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// GetSpecialTaskDataList 专项任务-查询上传链接的task list
+func GetSpecialTaskDataList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskDataInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询Task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	var platform_nickname string = ""
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+
+		if tag == "data_status" {
+			fmt.Printf("Data %+v", value.Interface() == int64(0))
+			if value.Interface() == int64(0) {
+				db = db.Where("task_stage = 14")
+			} else {
+				db = db.Where("task_stage > 14 and task_stage <> 16")
+			}
+			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("[GetTaskDataList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	db.Order("task_id").Find(&taskInfos)
+
+	// 查询任务id
+	var taskIds []string
+	taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
+	for _, taskInfo := range taskInfos {
+		taskIds = append(taskIds, taskInfo.TaskId)
+		taskMap[taskInfo.TaskId] = taskInfo
+	}
+
+	// 查询链接
+	db1 := GetReadDB(ctx)
+	// db1 = db1.Debug().Model(gorm_model.YounggeeDataInfo{})
+	var LinkInfos []gorm_model.YounggeeLinkInfo
+	db1 = db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_submit= 1 AND is_ok = 1", taskIds)
+	err := db1.Find(&LinkInfos).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	LinkMap := make(map[string]gorm_model.YounggeeLinkInfo)
+	for _, LinkInfo := range LinkInfos {
+		LinkMap[LinkInfo.TaskID] = LinkInfo
+	}
+
+	db2 := GetReadDB(ctx)
+	var DataInfos []gorm_model.YounggeeDataInfo
+	db2 = db2.Model(gorm_model.YounggeeDataInfo{}).Where("task_id IN ? AND is_submit = 1", taskIds)
+	if conditions.DataStatus == int64(0) {
+		db2 = db2.Where("is_review = 0")
+	} else {
+		db2 = db2.Where("is_ok = 1")
+	}
+	err = db2.Find(&DataInfos).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	DataMap := make(map[string]gorm_model.YounggeeDataInfo)
+	for _, DataInfo := range DataInfos {
+		DataMap[DataInfo.TaskID] = DataInfo
+	}
+	// 查询总数
+	var totalData int64
+	if err := db2.Count(&totalData).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	var misNum int64
+	if totalData > totalTask {
+		misNum = totalData - totalTask
+	} else {
+		misNum = totalTask - totalData
+	}
+	logrus.Println("totalData,totalTalent,misNum:", totalData, totalTask, misNum)
+
+	// 查询该页数据
+	limit := pageSize + misNum
+	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("[GetTaskDataList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+
+	var TaskDatas []*http_model.SpecialTaskData
+	var taskDatas []*http_model.SpecialTaskDataInfo
+	var newTaskDatas []*http_model.SpecialTaskDataInfo
+	for _, taskId := range taskIds {
+		TaskData := new(http_model.SpecialTaskData)
+		TaskData.Talent = taskMap[taskId]
+		TaskData.Data = DataMap[taskId]
+		TaskData.Link = LinkMap[taskId]
+		TaskDatas = append(TaskDatas, TaskData)
+	}
+
+	taskDatas = pack.SpecialTaskDataToTaskInfo(TaskDatas)
+
+	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 fulltaskData, total, nil
+	return newTaskDatas, totalTask, nil
+}
+
+// RejectData 拒绝数据-结案
+func RejectData(ctx context.Context, TaskIDs []string, operatorid string, operatetype int, projectid string) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeDataInfo{}).Where("task_id in ?  and is_review = 0", TaskIDs).Updates(map[string]interface{}{"reject_at": time.Now(), "is_review": 1, "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Update YounggeeDataInfo error,err:%+v", err)
+		return err
+	}
+	var project gorm_model.ProjectInfo
+	err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectid).Find(&project).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
+		return err
+	}
+
+	var data_default gorm_model.InfoAutoTask
+	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskID).Find(&data_default).Error
+	if err != nil {
+		return err
+	}
+	duration := time.Duration(data_default.CaseCloseDefault) * time.Hour
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{DataStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 13}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// DataOpinion 提交意见
+func LocalDataOpinion(ctx context.Context, TaskID string, ReviseOpinion string, operatorid string, operatetype int, projectid string) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_review = 0", TaskID).Updates(map[string]interface{}{"revise_opinion": ReviseOpinion, "reject_at": time.Now(), "is_review": 1, "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Update YounggeeDataInfo error,err:%+v", err)
+		return err
+	}
+	var project gorm_model.YounggeeLocalLifeInfo
+	err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", projectid).Find(&project).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
+		return err
+	}
+
+	var data_default gorm_model.InfoAutoTask
+	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskId).Find(&data_default).Error
+	if err != nil {
+		return err
+	}
+	duration := time.Duration(data_default.CaseCloseDefault) * time.Hour
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeLocalTaskInfo{DataStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Update YoungeeLocalTaskInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeLocalTaskInfo{TaskStage: 13}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Data db] Update YoungeeLocalTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}

+ 1479 - 438
db/finance.go

@@ -1,438 +1,1479 @@
-package db
-
-import (
-	"context"
-	"fmt"
-	"reflect"
-	"strconv"
-	"strings"
-	"time"
-	"youngee_m_api/consts"
-	"youngee_m_api/model/common_model"
-	"youngee_m_api/model/gorm_model"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/util"
-
-	"github.com/caixw/lib.go/conv"
-	"github.com/sirupsen/logrus"
-	"gorm.io/gorm"
-)
-
-func GetWithdrawRecords(ctx context.Context, pageSize, pageNum int32, req *http_model.WithdrawalRecordsRequest, condition *common_model.WithdrawRecordsCondition) (*http_model.WithdrawalRecordsPreview, error) {
-	db := GetReadDB(ctx)
-	var withdrawRecords []*gorm_model.YounggeeWithdrawRecord
-	db = db.Debug().Model(gorm_model.YounggeeWithdrawRecord{})
-	conditionType := reflect.TypeOf(condition).Elem()
-	conditionValue := reflect.ValueOf(condition).Elem()
-	for i := 0; i < conditionType.NumField(); i++ {
-		field := conditionType.Field(i)
-		tag := field.Tag.Get("condition")
-		value := conditionValue.FieldByName(field.Name)
-		if tag == "submit_at" && value.Interface() != "" {
-			db = db.Where(fmt.Sprintf("submit_at like '%s%%'", value.Interface()))
-		}
-		if tag == "withdraw_at" && value.Interface() != "" {
-			db = db.Where(fmt.Sprintf("withdraw_at like '%s%%'", value.Interface()))
-		}
-		if !util.IsBlank(value) && tag != "submit_at" && tag != "withdraw_at" {
-			db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
-		}
-	}
-	if req.TalentName != "" {
-		fmt.Println("TalentName:", req.TalentName)
-		db1 := GetReadDB(ctx)
-		var talentId string
-		db1.Model(gorm_model.YoungeeTalentInfo{}).Select("id").Where(fmt.Sprintf("talent_wx_nickname like '%%%s%%'", req.TalentName)).Find(&talentId)
-		db = db.Where("talent_id = ?", talentId)
-	}
-	// 查询总数
-	var total int64
-	if err := db.Count(&total).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetWithdrawRecords] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	// 查询该页数据
-	limit := pageSize
-	offset := pageSize * pageNum // assert pageNum start with 0
-	err := db.Order("submit_at").Limit(int(limit)).Offset(int(offset)).Find(&withdrawRecords).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetWithdrawRecords] error query mysql limit, err:%+v", err)
-		return nil, err
-	}
-	var talentIds []string
-	for _, withdrawRecord := range withdrawRecords {
-		talentIds = append(talentIds, withdrawRecord.TalentID)
-	}
-	talentIdToTalentInfoMap := make(map[string]gorm_model.YoungeeTalentInfo)
-	for _, talentId := range talentIds {
-		db1 := GetReadDB(ctx)
-		talentInfo := gorm_model.YoungeeTalentInfo{}
-		db1.Model(gorm_model.YoungeeTalentInfo{}).Where("id = ?", talentId).Find(&talentInfo)
-		talentIdToTalentInfoMap[talentId] = talentInfo
-	}
-	var withdrawRecordsDatas []*http_model.WithdrawalRecordsData
-	for _, withdrawRecord := range withdrawRecords {
-		withdrawRecordsData := new(http_model.WithdrawalRecordsData)
-		withdrawRecordsData.WithdrawId = withdrawRecord.WithdrawID
-		withdrawRecordsData.TalentId = withdrawRecord.TalentID
-		withdrawRecordsData.TalentName = talentIdToTalentInfoMap[withdrawRecord.TalentID].TalentWxNickname
-		withdrawRecordsData.WithdrawAmount = float32(withdrawRecord.WithdrawAmount)
-		withdrawRecordsData.AmountPayable = float32(withdrawRecord.AmountPayable)
-		withdrawRecordsData.ReceiveInfo = withdrawRecord.ReceiveInfo
-		withdrawRecordsData.BankType = withdrawRecord.BankType
-		withdrawRecordsData.Phone = talentIdToTalentInfoMap[withdrawRecord.TalentID].TalentPhoneNumber
-		withdrawRecordsData.SubmitAt = conv.MustString(withdrawRecord.SubmitAt, "")[0:19]
-		withdrawRecordsData.WithdrawAt = conv.MustString(withdrawRecord.WithdrawAt, "")[0:19]
-		withdrawRecordsDatas = append(withdrawRecordsDatas, withdrawRecordsData)
-	}
-	var withdrawRecordsPreview http_model.WithdrawalRecordsPreview
-	withdrawRecordsPreview.WithdrawalRecordsData = withdrawRecordsDatas
-	withdrawRecordsPreview.Total = total
-	return &withdrawRecordsPreview, nil
-}
-
-func GetWithdrawRecord(ctx context.Context, req *http_model.GetWithdrawalRecordRequest) (*http_model.WithdrawalRecordPreview, error) {
-	db := GetReadDB(ctx)
-	//fmt.Println("talentId:", req.TalentId)
-	var withdrawRecords []*gorm_model.YounggeeWithdrawRecord
-	db = db.Debug().Model(gorm_model.YounggeeWithdrawRecord{}).Where("talent_id = ? AND  status = ?", req.TalentId, 2).Find(&withdrawRecords)
-	var withdrawRecordsPreview http_model.WithdrawalRecordPreview
-	var withdrawRecordsDatas []*http_model.WithdrawalRecordData
-	for _, withdrawRecord := range withdrawRecords {
-		withdrawRecordData := new(http_model.WithdrawalRecordData)
-		withdrawRecordData.WithdrawAmount = float32(withdrawRecord.WithdrawAmount)
-		withdrawRecordData.WithdrawAt = conv.MustString(withdrawRecord.WithdrawAt, "")[0:19]
-		withdrawRecordsDatas = append(withdrawRecordsDatas, withdrawRecordData)
-	}
-	withdrawRecordsPreview.WithdrawalRecordData = withdrawRecordsDatas
-	return &withdrawRecordsPreview, nil
-}
-
-func GetWithdrawNums(ctx context.Context) (*http_model.WithdrawNums, error) {
-	var withdrawNums int64
-	db := GetReadDB(ctx)
-	err := db.Model(gorm_model.YounggeeWithdrawRecord{}).Where("status = 1").Count(&withdrawNums).Error
-	if err != nil {
-		return nil, err
-	}
-	WithdrawNums := new(http_model.WithdrawNums)
-	WithdrawNums.WithdrawNums = int(withdrawNums)
-	return WithdrawNums, err
-}
-
-func GetInvoiceNums(ctx context.Context) (*http_model.InvoiceNums, error) {
-	var invoiceNums int64
-	db := GetReadDB(ctx)
-	err := db.Model(gorm_model.YounggeeInvoiceRecord{}).Where("status = 1").Count(&invoiceNums).Error
-	if err != nil {
-		return nil, err
-	}
-	InvoiceNums := new(http_model.InvoiceNums)
-	InvoiceNums.InvoiceNums = int(invoiceNums)
-	return InvoiceNums, err
-}
-
-func GetRechargeNums(ctx context.Context) (*http_model.RechargeNums, error) {
-	var rechargeNums int64
-	db := GetReadDB(ctx)
-	err := db.Model(gorm_model.YounggeeRechargeRecord{}).Where("status = 1").Count(&rechargeNums).Error
-	if err != nil {
-		return nil, err
-	}
-	RechargeNums := new(http_model.RechargeNums)
-	RechargeNums.RechargeNums = rechargeNums
-	return RechargeNums, err
-}
-
-func ConfirmWithdrawal(ctx context.Context, withdrawId string) error {
-	db := GetReadDB(ctx)
-	db2 := GetReadDB(ctx)
-	withdrawInfo := gorm_model.YounggeeWithdrawRecord{}
-	db = db.Debug().Model(gorm_model.YounggeeWithdrawRecord{}).Where("withdraw_id = ?", withdrawId).Find(&withdrawInfo)
-	db2.Debug().Where("withdraw_id = ?", withdrawId).Updates(gorm_model.YounggeeWithdrawRecord{Status: 2, WithdrawAt: time.Now()})
-	taskIdLists := strings.Split(withdrawInfo.TaskIDList, ",")
-	for _, taskId := range taskIdLists {
-		db1 := GetReadDB(ctx)
-		err := db1.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{WithdrawStatus: 4}).Error
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[finance db] Update YoungeeTaskInfo error,err:%+v", err)
-			return err
-		}
-
-		err = CreateMessageByTaskId(ctx, 6, 1, taskId)
-		if err != nil {
-			logrus.WithContext(ctx).Errorf("[ConfirmWithdrawal] call CreateMessageByTaskId error,err:%+v", err)
-			return err
-		}
-	}
-	db3 := GetReadDB(ctx)
-	db3.Debug().Model(gorm_model.YoungeeTalentInfo{}).Where("id = ?", withdrawInfo.TalentID).Updates(
-		map[string]interface{}{
-			"withdrawing": gorm.Expr("withdrawing - ?", withdrawInfo.WithdrawAmount),
-			"withdrawed":  gorm.Expr("withdrawed + ?", withdrawInfo.WithdrawAmount)})
-	return nil
-}
-
-func GetBankInfo(ctx context.Context, req *http_model.GetBankInfoRequest) (*http_model.BankInfo, error) {
-	//db := GetReadDB(ctx)
-	//if req.BankId == "" {
-	//	return nil, nil
-	//}
-	//var infoBank *gorm_model.InfoBank
-	//db.Debug().Model(gorm_model.InfoBank{}).Where("id = ?", req.BankId).First(&infoBank)
-	db1 := GetReadDB(ctx)
-	var infoRegion *gorm_model.InfoRegion
-	db1.Debug().Model(gorm_model.InfoRegion{}).Where("self_code = ?", conv.MustInt(req.BankOpenAddress, 0)).First(&infoRegion)
-
-	provinceCode := conv.MustString(req.BankOpenAddress, "")[0:2] + "0000"
-	var province *gorm_model.InfoRegion
-	db1.Debug().Model(gorm_model.InfoRegion{}).Where("self_code = ?", conv.MustInt(provinceCode, 0)).First(&province)
-
-	cityCode := conv.MustString(req.BankOpenAddress, "")[0:4] + "00"
-	var city *gorm_model.InfoRegion
-	db1.Debug().Model(gorm_model.InfoRegion{}).Where("self_code = ?", conv.MustInt(cityCode, 0)).First(&city)
-	data := new(http_model.BankInfo)
-	//data.BankName = infoBank.Name
-	data.BankOpenAddress = province.RegionName + city.RegionName + infoRegion.RegionName
-	//db.Model(gorm_model.InfoBank{}).Where("")
-	return data, nil
-}
-
-// GetEnterpriseIDByBusiness 根据企业名称查找企业ID
-func GetEnterpriseIDByBusiness(ctx context.Context, BusinessName string) int64 {
-	db := GetReadDB(ctx)
-	var EnterpriseID int64
-	db = db.Model([]gorm_model.Enterprise{}).Select("enterprise_id").Where("business_name", BusinessName).First(&EnterpriseID)
-	return EnterpriseID
-}
-
-// GetEnterpriseIDByUserId 根据企业名称查找企业ID
-func GetEnterpriseIDByUserId(ctx context.Context, UserId int64) int64 {
-	db := GetReadDB(ctx)
-	var EnterpriseID int64
-	db = db.Model([]gorm_model.Enterprise{}).Select("enterprise_id").Where("user_id", UserId).First(&EnterpriseID)
-	return EnterpriseID
-}
-
-// GetUserIDByUsername 根据用户名称查UserID
-func GetUserIDByUsername(ctx context.Context, Username string) int64 {
-	db := GetReadDB(ctx)
-	var UserID int64
-	db = db.Model([]gorm_model.YounggeeUser{}).Select("id").Where(fmt.Sprintf("username like '%%%s%%'", Username)).First(&UserID)
-	return UserID
-}
-
-func GetInvoiceRecords(ctx context.Context, req *http_model.InvoiceRecordsRequest, condition *common_model.InvoiceRecordsCondition) (*http_model.InvoiceRecordsData, error) {
-	db := GetReadDB(ctx)
-	var invoiceRecords []*gorm_model.YounggeeInvoiceRecord
-	db = db.Debug().Model(gorm_model.YounggeeInvoiceRecord{}).Where("status = ?", req.InvoiceStatus)
-	conditionType := reflect.TypeOf(condition).Elem()
-	conditionValue := reflect.ValueOf(condition).Elem()
-	for i := 0; i < conditionType.NumField(); i++ {
-		field := conditionType.Field(i)
-		tag := field.Tag.Get("condition")
-		value := conditionValue.FieldByName(field.Name)
-		if tag == "submit_at" && value.Interface() != "" {
-			db = db.Where(fmt.Sprintf("submit_at like '%s%%'", value.Interface()))
-		}
-		if tag == "billing_at" && value.Interface() != "" {
-			db = db.Where(fmt.Sprintf("billing_at like '%s%%'", value.Interface()))
-		}
-	}
-	if req.Username != "" {
-		UserID := GetUserIDByUsername(ctx, req.Username)
-		enterpriseId := GetEnterpriseIDByUserId(ctx, UserID)
-		db = db.Where("enterprise_id = ?", enterpriseId)
-	}
-	if req.UserId != 0 {
-		enterpriseId := GetEnterpriseIDByUserId(ctx, req.UserId)
-		db = db.Where("enterprise_id = ?", enterpriseId)
-	}
-	// 查询总数
-	var total int64
-	if err := db.Count(&total).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetInvoiceRecords] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	if req.InvoiceStatus != 3 {
-		db.Order("submit_at")
-	} else {
-		db.Order("billing_at desc")
-	}
-	// 查询该页数据
-	limit := req.PageSize
-	offset := req.PageSize * req.PageNum // assert pageNum start with 0
-	err := db.Limit(int(limit)).Offset(int(offset)).Find(&invoiceRecords).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetInvoiceRecords] error query mysql limit, err:%+v", err)
-		return nil, err
-	}
-	enterpriseIdToUserInfoMap := make(map[string]gorm_model.Enterprise)
-	regionAddressMap := make(map[string]string)
-	for _, invoiceRecord := range invoiceRecords {
-		if _, ok := enterpriseIdToUserInfoMap[invoiceRecord.EnterpriseID]; !ok {
-			db1 := GetReadDB(ctx)
-			enterpriseInfo := gorm_model.Enterprise{}
-			db1.Model(gorm_model.Enterprise{}).Where("enterprise_id = ?", invoiceRecord.EnterpriseID).Find(&enterpriseInfo)
-			enterpriseIdToUserInfoMap[invoiceRecord.EnterpriseID] = enterpriseInfo
-		}
-		if _, ok := regionAddressMap[invoiceRecord.EnterpriseID]; !ok {
-			db1 := GetReadDB(ctx)
-			var regionCode string
-			db1.Model(gorm_model.YounggeeInvoiceAddress{}).Select("region_code").Where("enterprise_id = ?", invoiceRecord.EnterpriseID).Find(&regionCode)
-			regionAddressMap[invoiceRecord.EnterpriseID] = GetRegion(ctx, conv.MustInt(regionCode, 0))
-		}
-	}
-	var InvoiceRecords []*http_model.InvoiceRecordsPreviews
-	for _, invoiceRecord := range invoiceRecords {
-		InvoiceRecord := new(http_model.InvoiceRecordsPreviews)
-		InvoiceRecord.BillingId = invoiceRecord.BillingID
-		InvoiceRecord.InvoiceInfo = invoiceRecord.InvoiceSnap
-		InvoiceRecord.AddressInfo = invoiceRecord.AddressSnap
-		InvoiceRecord.InvoiceAddress = regionAddressMap[invoiceRecord.EnterpriseID]
-		InvoiceRecord.InvoiceType = invoiceRecord.InvoiceType
-		InvoiceRecord.Amount = invoiceRecord.InvoiceAmount
-		InvoiceRecord.Phone = invoiceRecord.Phone
-		InvoiceRecord.ShipmentNumber = invoiceRecord.ShipmentNumber
-		InvoiceRecord.BusinessName = enterpriseIdToUserInfoMap[invoiceRecord.EnterpriseID].BusinessName
-		InvoiceRecord.UserId = invoiceRecord.EnterpriseID
-		InvoiceRecord.Username = GetUsernameByUserID(ctx, enterpriseIdToUserInfoMap[invoiceRecord.EnterpriseID].UserID)
-		InvoiceRecord.SubmitAt = conv.MustString(invoiceRecord.SubmitAt, "")[:19]
-		InvoiceRecord.BillingAt = conv.MustString(invoiceRecord.BillingAt, "")[:19]
-		InvoiceRecords = append(InvoiceRecords, InvoiceRecord)
-	}
-	var InvoiceRecordsData http_model.InvoiceRecordsData
-	InvoiceRecordsData.InvoiceRecordsPreviews = InvoiceRecords
-	InvoiceRecordsData.Total = strconv.FormatInt(total, 10)
-	return &InvoiceRecordsData, nil
-}
-
-func ConfirmInvoice(ctx context.Context, request *http_model.ConfirmInvoiceRequest) error {
-	db := GetReadDB(ctx)
-	return db.Model(gorm_model.YounggeeInvoiceRecord{}).Where("billing_id = ?", request.BillingId).Updates(
-		gorm_model.YounggeeInvoiceRecord{
-			BillingAt:      time.Now(),
-			ShipmentNumber: request.ShipmentNumber,
-			Status:         2,
-		}).Error
-}
-
-func GetUsernameByUserID(ctx context.Context, UserID int64) (username string) {
-	db := GetReadDB(ctx)
-	db = db.Model([]gorm_model.YounggeeUser{}).Select("username").Where("id", UserID).First(&username)
-	return username
-}
-
-func GetRechargeRecords(ctx context.Context, req *http_model.GetRechargeRecordsRequest, condition *common_model.RechargeRecordsCondition) (*http_model.RechargeRecordsData, error) {
-	db := GetReadDB(ctx)
-	var rechargeRecords []*gorm_model.YounggeeRechargeRecord
-	db = db.Debug().Model(gorm_model.YounggeeRechargeRecord{}).Where("status = ?", req.Status)
-	conditionType := reflect.TypeOf(condition).Elem()
-	conditionValue := reflect.ValueOf(condition).Elem()
-	for i := 0; i < conditionType.NumField(); i++ {
-		field := conditionType.Field(i)
-		tag := field.Tag.Get("condition")
-		value := conditionValue.FieldByName(field.Name)
-		if tag == "commit_at" && value.Interface() != "" {
-			db = db.Where(fmt.Sprintf("commit_at like '%s%%'", value.Interface()))
-		}
-		if tag == "confirm_at" && value.Interface() != "" {
-			db = db.Where(fmt.Sprintf("confirm_at like '%s%%'", value.Interface()))
-		}
-	}
-	if req.Username != "" {
-		UserID := GetUserIDByUsername(ctx, req.Username)
-		enterpriseId := GetEnterpriseIDByUserId(ctx, UserID)
-		db = db.Where("enterprise_id = ?", enterpriseId)
-	}
-	if req.UserId != 0 {
-		enterpriseId := GetEnterpriseIDByUserId(ctx, req.UserId)
-		db = db.Where("enterprise_id = ?", enterpriseId)
-	}
-	if req.RechargeMethod == 1 {
-		db = db.Where("recharge_method = ?", 1)
-	} else if req.RechargeMethod == 2 {
-		db = db.Where("recharge_method = ?", 2)
-	} else if req.RechargeMethod == 3 {
-		db = db.Where("recharge_method = ?", 3)
-	}
-	// 查询总数
-	var total int64
-	if err := db.Count(&total).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetRechargeRecords] error query mysql total, err:%+v", err)
-		return nil, err
-	}
-	if req.Status == 1 {
-		db = db.Order("commit_at")
-	} else {
-		db = db.Order("confirm_at desc")
-	}
-	// 查询该页数据
-	limit := req.PageSize
-	offset := req.PageSize * req.PageNum // assert pageNum start with 0
-	err := db.Limit(int(limit)).Offset(int(offset)).Find(&rechargeRecords).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[GetRechargeRecords] error query mysql limit, err:%+v", err)
-		return nil, err
-	}
-	var enterpriseIds []string
-	for _, rechargeRecord := range rechargeRecords {
-		enterpriseIds = append(enterpriseIds, rechargeRecord.EnterpriseID)
-	}
-	util.RemoveStrRepByMap(enterpriseIds)
-	enterpriseIdToUserInfoMap := make(map[string]gorm_model.Enterprise)
-	db1 := GetReadDB(ctx)
-	for _, v := range enterpriseIds {
-		enterpriseInfo := gorm_model.Enterprise{}
-		db1.Model(gorm_model.Enterprise{}).Where("enterprise_id = ?", v).Find(&enterpriseInfo)
-		enterpriseIdToUserInfoMap[v] = enterpriseInfo
-	}
-	var RechargeRecords []*http_model.RechargeRecordsPreview
-	for _, rechargeRecord := range rechargeRecords {
-		RechargeRecord := new(http_model.RechargeRecordsPreview)
-		RechargeRecord.RechargeId = rechargeRecord.RechargeID
-		RechargeRecord.EnterpriseID = rechargeRecord.EnterpriseID
-		RechargeRecord.RechargeAmount = rechargeRecord.RechargeAmount
-		RechargeRecord.ConfirmAt = conv.MustString(rechargeRecord.ConfirmAt, "")[:19]
-		RechargeRecord.CommitAt = conv.MustString(rechargeRecord.CommitAt, "")[:19]
-		RechargeRecord.Phone = rechargeRecord.Phone
-		RechargeRecord.TransferVoucher = rechargeRecord.TransferVoucherUrl
-		RechargeRecord.RechargeMethod = consts.GetRechargeMethod(rechargeRecord.RechargeMethod)
-		RechargeRecord.UserId = rechargeRecord.EnterpriseID
-		RechargeRecord.Username = GetUsernameByUserID(ctx, enterpriseIdToUserInfoMap[rechargeRecord.EnterpriseID].UserID)
-		RechargeRecord.BusinessName = enterpriseIdToUserInfoMap[rechargeRecord.EnterpriseID].BusinessName
-		RechargeRecords = append(RechargeRecords, RechargeRecord)
-	}
-	var RechargeRecordsData http_model.RechargeRecordsData
-	RechargeRecordsData.RechargeRecordsPreview = RechargeRecords
-	RechargeRecordsData.Total = conv.MustString(total, "")
-	return &RechargeRecordsData, nil
-}
-
-func OperateRecharge(ctx context.Context, req *http_model.OperateRechargeRequest) error {
-	db := GetReadDB(ctx)
-	db1 := GetReadDB(ctx)
-	err := db1.Model(gorm_model.Enterprise{}).Where("enterprise_id = ?", req.EnterpriseId).Updates(map[string]interface{}{
-		"balance":           gorm.Expr("balance + ?", req.RechargeAmount),
-		"available_balance": gorm.Expr("available_balance + ?", req.RechargeAmount)}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[OperateRecharge] error Updates balance, err:%+v", err)
-		return err
-	}
-	err1 := db.Model(gorm_model.YounggeeRechargeRecord{}).Where("recharge_id = ?", req.RechargeId).Updates(gorm_model.YounggeeRechargeRecord{
-		Status:        2,
-		InvoiceStatus: 2,
-		ConfirmAt:     time.Now(),
-	}).Error
-	if err1 != nil {
-		logrus.WithContext(ctx).Errorf("[OperateRecharge] error Updates Status, err:%+v", err)
-		return err1
-	}
-	if req.Method == 1 {
-		db2 := GetReadDB(ctx)
-		db2.Model(gorm_model.YounggeeRechargeRecord{}).Where("recharge_id = ?", req.RechargeId).Updates(gorm_model.YounggeeRechargeRecord{
-			RechargeAmount: req.RechargeAmount,
-		})
-	}
-	return nil
-}
+package db
+
+import (
+	"context"
+	"encoding/json"
+	"fmt"
+	"reflect"
+	"strconv"
+	"strings"
+	"time"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/common_model"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/util"
+
+	"github.com/caixw/lib.go/conv"
+	"github.com/sirupsen/logrus"
+	"gorm.io/gorm"
+)
+
+func GetWithdrawRecords(ctx context.Context, pageSize, pageNum int32, req *http_model.WithdrawalRecordsRequest, condition *common_model.WithdrawRecordsCondition) (*http_model.WithdrawalRecordsPreview, error) {
+	db := GetReadDB(ctx)
+	var withdrawRecords []*gorm_model.YounggeeWithdrawRecord
+	db = db.Debug().Model(gorm_model.YounggeeWithdrawRecord{})
+	conditionType := reflect.TypeOf(condition).Elem()
+	conditionValue := reflect.ValueOf(condition).Elem()
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if tag == "submit_at" && value.Interface() != "" {
+			db = db.Where(fmt.Sprintf("submit_at like '%s%%'", value.Interface()))
+		}
+		if tag == "withdraw_at" && value.Interface() != "" {
+			db = db.Where(fmt.Sprintf("withdraw_at like '%s%%'", value.Interface()))
+		}
+		if !util.IsBlank(value) && tag != "submit_at" && tag != "withdraw_at" {
+			db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
+		}
+	}
+	if req.TalentName != "" {
+		fmt.Println("TalentName:", req.TalentName)
+		db1 := GetReadDB(ctx)
+		var talentId string
+		db1.Model(gorm_model.YoungeeTalentInfo{}).Select("id").Where(fmt.Sprintf("talent_wx_nickname like '%%%s%%'", req.TalentName)).Find(&talentId)
+		db = db.Where("talent_id = ?", talentId)
+	}
+	// 查询总数
+	var total int64
+	if err := db.Count(&total).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetWithdrawRecords] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	// 查询该页数据
+	limit := pageSize
+	offset := pageSize * pageNum // assert pageNum start with 0
+	err := db.Order("submit_at").Limit(int(limit)).Offset(int(offset)).Find(&withdrawRecords).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetWithdrawRecords] error query mysql limit, err:%+v", err)
+		return nil, err
+	}
+	var talentIds []string
+	for _, withdrawRecord := range withdrawRecords {
+		talentIds = append(talentIds, withdrawRecord.TalentID)
+	}
+	talentIdToTalentInfoMap := make(map[string]gorm_model.YoungeeTalentInfo)
+	for _, talentId := range talentIds {
+		db1 := GetReadDB(ctx)
+		talentInfo := gorm_model.YoungeeTalentInfo{}
+		db1.Model(gorm_model.YoungeeTalentInfo{}).Where("id = ?", talentId).Find(&talentInfo)
+		talentIdToTalentInfoMap[talentId] = talentInfo
+	}
+	var withdrawRecordsDatas []*http_model.WithdrawalRecordsData
+	for _, withdrawRecord := range withdrawRecords {
+		withdrawRecordsData := new(http_model.WithdrawalRecordsData)
+		withdrawRecordsData.WithdrawId = withdrawRecord.WithdrawID
+		withdrawRecordsData.TalentId = withdrawRecord.TalentID
+		withdrawRecordsData.TalentName = talentIdToTalentInfoMap[withdrawRecord.TalentID].TalentWxNickname
+		withdrawRecordsData.WithdrawAmount = float32(withdrawRecord.WithdrawAmount)
+		withdrawRecordsData.AmountPayable = float32(withdrawRecord.AmountPayable)
+		withdrawRecordsData.ReceiveInfo = withdrawRecord.ReceiveInfo
+		withdrawRecordsData.BankType = withdrawRecord.BankType
+		withdrawRecordsData.Phone = talentIdToTalentInfoMap[withdrawRecord.TalentID].TalentPhoneNumber
+		withdrawRecordsData.SubmitAt = conv.MustString(withdrawRecord.SubmitAt, "")[0:19]
+		withdrawRecordsData.WithdrawAt = conv.MustString(withdrawRecord.WithdrawAt, "")[0:19]
+		withdrawRecordsDatas = append(withdrawRecordsDatas, withdrawRecordsData)
+	}
+	var withdrawRecordsPreview http_model.WithdrawalRecordsPreview
+	withdrawRecordsPreview.WithdrawalRecordsData = withdrawRecordsDatas
+	withdrawRecordsPreview.Total = total
+	return &withdrawRecordsPreview, nil
+}
+
+func GetWithdrawRecord(ctx context.Context, req *http_model.GetWithdrawalRecordRequest) (*http_model.WithdrawalRecordPreview, error) {
+	db := GetReadDB(ctx)
+	//fmt.Println("talentId:", req.TalentId)
+	var withdrawRecords []*gorm_model.YounggeeWithdrawRecord
+	db = db.Debug().Model(gorm_model.YounggeeWithdrawRecord{}).Where("talent_id = ? AND  status = ?", req.TalentId, 2).Find(&withdrawRecords)
+	var withdrawRecordsPreview http_model.WithdrawalRecordPreview
+	var withdrawRecordsDatas []*http_model.WithdrawalRecordData
+	for _, withdrawRecord := range withdrawRecords {
+		withdrawRecordData := new(http_model.WithdrawalRecordData)
+		withdrawRecordData.WithdrawAmount = float32(withdrawRecord.WithdrawAmount)
+		withdrawRecordData.WithdrawAt = conv.MustString(withdrawRecord.WithdrawAt, "")[0:19]
+		withdrawRecordsDatas = append(withdrawRecordsDatas, withdrawRecordData)
+	}
+	withdrawRecordsPreview.WithdrawalRecordData = withdrawRecordsDatas
+	return &withdrawRecordsPreview, nil
+}
+
+func GetWithdrawNums(ctx context.Context) (*http_model.WithdrawNums, error) {
+	var withdrawNums int64
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeWithdrawRecord{}).Where("status = 1").Count(&withdrawNums).Error
+	if err != nil {
+		return nil, err
+	}
+	WithdrawNums := new(http_model.WithdrawNums)
+	WithdrawNums.WithdrawNums = int(withdrawNums)
+	return WithdrawNums, err
+}
+
+func GetRechargeValue(ctx context.Context, request http_model.GetRechargeValueRequest) (*http_model.RechargeValue, error) {
+	var rechargeValue float64
+	db := GetReadDB(ctx)
+	var rechargelist []gorm_model.YounggeeRechargeRecord
+	err := db.Model(gorm_model.YounggeeRechargeRecord{}).Where("status = ?", request.Status).Find(rechargelist).Error
+	if err != nil {
+		return nil, err
+	}
+	for _, recharge := range rechargelist {
+		rechargeValue += recharge.RechargeAmount
+	}
+	RechargeValue := new(http_model.RechargeValue)
+	RechargeValue.RechargeValue = rechargeValue
+	return RechargeValue, err
+
+}
+func GetInvoiceValue(ctx context.Context, request http_model.GetInvoiceValueRequest) (*http_model.InvoiceValue, error) {
+	var invoicevalue float64
+	db := GetReadDB(ctx)
+	var invoicelist []gorm_model.YounggeeInvoiceRecord
+	err := db.Model(gorm_model.YounggeeInvoiceRecord{}).Where("status = ?", request.Status).Find(invoicelist).Error
+	if err != nil {
+		return nil, err
+	}
+	for _, invoice := range invoicelist {
+		invoicevalue += invoice.InvoiceAmount
+	}
+	InvoiceValue := new(http_model.InvoiceValue)
+	InvoiceValue.InvoiceValue = invoicevalue
+	return InvoiceValue, err
+}
+
+func GetSupplierWithdrawPrevalue(ctx context.Context, request http_model.GetSupplierWithdrawPrevalueRequest) (*http_model.WithdrawValue, error) {
+	var withdrawvalue float64
+	db := GetReadDB(ctx)
+	var withdrawlist []gorm_model.YounggeeSupplierWithdraw
+	// 获取所有符合条件的发票
+	err := db.Model(gorm_model.YounggeeSupplierWithdraw{}).Where("withdraw_status =2").Find(&withdrawlist).Error
+	if err != nil {
+		return nil, err
+	}
+	for _, withdraw := range withdrawlist {
+		withdrawvalue += withdraw.WithdrawAmount
+	}
+	return &http_model.WithdrawValue{
+		withdrawvalue,
+	}, err
+}
+
+func GetTalentWithdrawPrevalue(ctx context.Context, request http_model.GetTalentWithdrawPrevalueRequest) (*http_model.TalentWithdrawValue, error) {
+	var withdrawvalue float64
+	db := GetReadDB(ctx)
+	var withdrawlist []gorm_model.YounggeeWithdrawRecord
+	// 获取所有符合条件的发票
+	err := db.Model(gorm_model.YounggeeSupplierWithdraw{}).Where("withdraw_status =1").Find(&withdrawlist).Error
+	if err != nil {
+		return nil, err
+	}
+	for _, withdraw := range withdrawlist {
+		withdrawvalue += withdraw.WithdrawAmount
+	}
+	return &http_model.TalentWithdrawValue{
+		withdrawvalue,
+	}, err
+}
+
+func GetWithdrawValue(ctx context.Context, request http_model.GetWithdrawValueRequest) (*http_model.ALlWithdrawValue, error) {
+	var withdrawvalue float64
+	db := GetReadDB(ctx)
+	var withdrawlist []gorm_model.YounggeeWithdrawRecord
+	// 获取所有符合条件的发票
+	err := db.Model(gorm_model.YounggeeSupplierWithdraw{}).Where("withdraw_status =2").Find(&withdrawlist).Error
+	if err != nil {
+		return nil, err
+	}
+	for _, withdraw := range withdrawlist {
+		withdrawvalue += withdraw.WithdrawAmount
+	}
+	var swithdrawlist []gorm_model.YounggeeSupplierWithdraw
+	// 获取所有符合条件的发票
+	err = db.Model(gorm_model.YounggeeSupplierWithdraw{}).Where("withdraw_status =3").Find(&swithdrawlist).Error
+	if err != nil {
+		return nil, err
+	}
+	for _, withdraw := range withdrawlist {
+		withdrawvalue += withdraw.WithdrawAmount
+	}
+	return &http_model.ALlWithdrawValue{
+		withdrawvalue,
+	}, err
+}
+
+func GetSupplierInvoiceValue(ctx context.Context, request http_model.GetSupplierInvoiceValueRequest) (*http_model.SupplierInvoiceValue, error) {
+	var invoicevalue float64
+	db := GetReadDB(ctx)
+	var invoicelist []gorm_model.YounggeeSupplierInvoice
+
+	// 获取所有符合条件的发票
+	err := db.Model(gorm_model.YounggeeSupplierInvoice{}).Where("status = ?", request.Status).Find(&invoicelist).Error
+	if err != nil {
+		return nil, err
+	}
+
+	// 收集所有的 TaskIDs
+	var taskIDList []int
+	for _, invoice := range invoicelist {
+		TaskIDs := strings.Split(invoice.IncomeIds, ",")
+		for _, taskId := range TaskIDs {
+			// 将 taskId 转换为 int 并添加到 taskIDList 中
+			if id, err := strconv.Atoi(taskId); err == nil {
+				taskIDList = append(taskIDList, id)
+			}
+		}
+	}
+
+	// 批量查询所有相关的收入数据
+	var supplierIncome []gorm_model.YounggeeSupplierIncome
+	err = db.Model(gorm_model.YounggeeSupplierIncome{}).Where("income_id IN ?", taskIDList).Find(&supplierIncome).Error
+	if err != nil {
+		return &http_model.SupplierInvoiceValue{}, err
+	}
+
+	// 将查询到的 SupplierIncome 存入 map,以便快速查找
+	incomeMap := make(map[int]gorm_model.YounggeeSupplierIncome)
+	for _, income := range supplierIncome {
+		incomeMap[income.IncomeId] = income
+	}
+
+	// 根据每个发票的 IncomeIds 查找对应的收入数据,并累加 SupplierChargeActual
+	for _, invoice := range invoicelist {
+		TaskIDs := strings.Split(invoice.IncomeIds, ",")
+		for _, taskId := range TaskIDs {
+			// 将 taskId 转换为 int
+			if id, err := strconv.Atoi(taskId); err == nil {
+				if income, exists := incomeMap[id]; exists {
+					invoicevalue += income.SupplierChargeActual
+				}
+			}
+		}
+	}
+
+	// 返回最终的发票值
+	InvoiceValue := new(http_model.SupplierInvoiceValue)
+	InvoiceValue.InvoiceValue = invoicevalue
+	return InvoiceValue, nil
+
+}
+
+func GetInvoiceNums(ctx context.Context) (*http_model.InvoiceNums, error) {
+	var invoiceNums int64
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeInvoiceRecord{}).Where("status = 1").Count(&invoiceNums).Error
+	if err != nil {
+		return nil, err
+	}
+	InvoiceNums := new(http_model.InvoiceNums)
+	InvoiceNums.InvoiceNums = int(invoiceNums)
+	return InvoiceNums, err
+}
+
+func GetRechargeNums(ctx context.Context) (*http_model.RechargeNums, error) {
+	var rechargeNums int64
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeRechargeRecord{}).Where("status = 1").Count(&rechargeNums).Error
+	if err != nil {
+		return nil, err
+	}
+	RechargeNums := new(http_model.RechargeNums)
+	RechargeNums.RechargeNums = rechargeNums
+	return RechargeNums, err
+}
+
+func AcceptRecharge(ctx context.Context, req http_model.AcceptRechargeRequest) (*http_model.AcceptRechargeData, error) {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeRechargeRecord{}).Where("recharge_id=?", req.Id).Updates(map[string]interface{}{"status": 2, "agree_at": time.Now()}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Recharge service] call AcceptRecharge error,err:%+v", err)
+		return nil, err
+	}
+	res := &http_model.AcceptRechargeData{
+		Id: req.Id,
+	}
+	return res, nil
+
+}
+
+func RefuseRecharge(ctx context.Context, req http_model.RefuseRechargeRequest) (*http_model.RefuseRechargeData, error) {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeRechargeRecord{}).Where("recharge_id=?", req.Id).Updates(map[string]interface{}{"status": 3, "refuse_at": time.Now(), "fail_reason": req.FailReason}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Recharge service] call AcceptRecharge error,err:%+v", err)
+		return nil, err
+	}
+	res := &http_model.RefuseRechargeData{
+		Id: req.Id,
+	}
+	return res, nil
+
+}
+func GetPreRechargeList(ctx context.Context, req http_model.GetPreRechargeListRequest) (*http_model.PreRechargeListData, error) {
+	db := GetReadDB(ctx)
+
+	// 获取分页参数
+	page := req.PageNum
+	pageSize := req.PageSize
+	if page < 1 {
+		page = 1
+	}
+	if pageSize < 1 {
+		pageSize = 10 // 设置默认每页记录数为 10
+	}
+
+	var prerechargelist []gorm_model.YounggeeRechargeRecord
+	var total int64
+
+	// 计算总记录数
+	err := db.Model(gorm_model.YounggeeRechargeRecord{}).Where("status = ?", req.Status).Count(&total).Error
+	if err != nil {
+		return &http_model.PreRechargeListData{}, err
+	}
+
+	// 查询当前页的数据
+	err = db.Model(gorm_model.YounggeeRechargeRecord{}).
+		Where("status = 1").
+		Offset((page - 1) * pageSize). // 计算偏移量
+		Limit(pageSize).               // 设置每页限制
+		Find(&prerechargelist).Error
+	if err != nil {
+		return &http_model.PreRechargeListData{}, err
+	}
+
+	rechargePointers := make([]*http_model.PreRechargeListResponse, 0, len(prerechargelist))
+	for _, recharge := range prerechargelist {
+		subaccountinfo := gorm_model.YounggeeSubAccount{}
+		userResult := db.Where(gorm_model.YounggeeSubAccount{SubAccountId: recharge.SubAccountID, SubAccountType: 1}).First(&subaccountinfo)
+		if userResult.Error != nil {
+			return nil, userResult.Error
+		}
+		enterprise := gorm_model.Enterprise{}
+		result := db.Where(gorm_model.Enterprise{EnterpriseID: recharge.EnterpriseID}).First(&enterprise)
+		if result.Error != nil {
+			return nil, result.Error
+		}
+		response := &http_model.PreRechargeListResponse{
+			ID:                 recharge.RechargeID,
+			EnterPrise:         enterprise.BusinessName,
+			Operator:           subaccountinfo.SubAccountName,
+			RechargeAmount:     recharge.RechargeAmount,
+			RechargeMethod:     recharge.RechargeMethod,
+			TransferVoucherUrl: recharge.TransferVoucherUrl,
+			Phone:              recharge.Phone,
+			CommitAt:           recharge.CommitAt,
+			ConfirmAt:          recharge.ConfirmAt,
+			RefuseAt:           recharge.RefuseAt,
+			FailReason:         recharge.FailReason,
+		}
+		rechargePointers = append(rechargePointers, response)
+	}
+
+	return &http_model.PreRechargeListData{
+		PreRechargeListinfo: rechargePointers,
+		Total:               total,
+	}, nil
+}
+
+func GetTalentWithdrawList(ctx context.Context, req *http_model.GetTalentWithdrawListRequest) (*http_model.TalentWithdrawListData, error) {
+	db := GetReadDB(ctx)
+	page := req.PageNum
+	pageSize := req.PageSize
+	if page < 1 {
+		page = 1
+	}
+	if pageSize < 1 {
+		pageSize = 10 // 设置默认每页记录数为 10
+	}
+
+	var withdrawlist []gorm_model.YounggeeWithdrawRecord
+	var total int64
+
+	// 计算总记录数
+	err := db.Model(gorm_model.YounggeeWithdrawRecord{}).Where("status = ?", req.Status).Count(&total).Error
+	if err != nil {
+		return &http_model.TalentWithdrawListData{}, err
+	}
+
+	// 查询当前页的数据
+	err = db.Model(gorm_model.YounggeeWithdrawRecord{}).
+		Offset((page - 1) * pageSize). // 计算偏移量
+		Limit(pageSize).               // 设置每页限制
+		Find(&withdrawlist).Error
+	if err != nil {
+		return &http_model.TalentWithdrawListData{}, err
+	}
+
+	withdrawPointers := make([]*http_model.TalentWithdrawListResponse, 0, len(withdrawlist))
+	for _, withdraw := range withdrawlist {
+		response := &http_model.TalentWithdrawListResponse{
+			WithdrawId:     withdraw.WithdrawID,
+			TalentId:       withdraw.TalentID,
+			WithdrawAmount: withdraw.WithdrawAmount,
+			ActualAmount:   withdraw.AmountPayable,
+			ReajectAt:      withdraw.RejectAt,
+			SubmitAt:       withdraw.SubmitAt,
+			WithdrawAt:     withdraw.WithdrawAt,
+			RejectReason:   withdraw.RejectReason,
+			Name:           withdraw.Name,
+			PhoneNumber:    withdraw.PhoneNum,
+			IdcardNumber:   withdraw.IdcardNum,
+			BankNumber:     withdraw.BankNum,
+		}
+		withdrawPointers = append(withdrawPointers, response)
+
+	}
+	return &http_model.TalentWithdrawListData{
+		TalentwithdrawList: withdrawPointers,
+		Total:              total,
+	}, nil
+}
+func ConfirmWithdrawal(ctx context.Context, withdrawId string) error {
+	db := GetReadDB(ctx)
+	db2 := GetReadDB(ctx)
+	withdrawInfo := gorm_model.YounggeeWithdrawRecord{}
+	db = db.Debug().Model(gorm_model.YounggeeWithdrawRecord{}).Where("withdraw_id = ?", withdrawId).Find(&withdrawInfo)
+	db2.Debug().Where("withdraw_id = ?", withdrawId).Updates(gorm_model.YounggeeWithdrawRecord{Status: 2, WithdrawAt: time.Now()})
+
+	IncomeIdLists := strings.Split(withdrawInfo.IncomeIdList, ",")
+	for _, income := range IncomeIdLists {
+		var incomeinfo gorm_model.YounggeeTalentIncome
+		err := db.Debug().Model(gorm_model.YounggeeTalentIncome{}).
+			Where("id = ?", income).
+			First(&incomeinfo).Error // 使用 First 而不是 Updates 来查询数据
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[finance db] Query YounggeeTalentIncome error, err:%+v", err)
+			return err
+		}
+		err = db.Model(gorm_model.YounggeeTalentIncome{}).Where("id = ?", income).Updates(gorm_model.YounggeeTalentIncome{WithdrawStatus: 1}).Error
+		if err != nil {
+			logrus.WithContext(ctx).Errorf("[finance db] Updates YounggeeTalentIncome error, err:%+v", err)
+			return err
+		}
+		switch incomeinfo.Type {
+		case 1:
+			{
+				err = db.Debug().Model(gorm_model.YounggeeSecTaskInfo{}).Where("task_id = ?", incomeinfo.SectaskID).Updates(gorm_model.YounggeeSecTaskInfo{WithdrawStatus: 4}).Error
+				if err != nil {
+					logrus.WithContext(ctx).Errorf("[finance db] Updates YounggeeSecTaskInfo error, err:%+v", err)
+					return err
+				}
+			}
+		case 2:
+			{
+				err = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", incomeinfo.TaskID).Updates(gorm_model.YoungeeTaskInfo{WithdrawStatus: 4}).Error
+				if err != nil {
+					logrus.WithContext(ctx).Errorf("[finance db] Updates YoungeeTaskInfo error, err:%+v", err)
+					return err
+				}
+			}
+		case 3:
+			{
+				err = db.Debug().Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ?", incomeinfo.LocalTaskId).Updates(gorm_model.YoungeeLocalTaskInfo{WithdrawStatus: 4}).Error
+				if err != nil {
+					logrus.WithContext(ctx).Errorf("[finance db] Updates YoungeeLocalTaskInfo error, err:%+v", err)
+					return err
+				}
+			}
+		}
+
+	}
+	//for _, taskId := range taskIdLists {
+	//	db1 := GetReadDB(ctx)
+	//	err := db1.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{WithdrawStatus: 4}).Error
+	//	if err != nil {
+	//		logrus.WithContext(ctx).Errorf("[finance db] Update YoungeeTaskInfo error,err:%+v", err)
+	//		return err
+	//	}
+	//
+	//	err = CreateMessageByTaskId(ctx, 6, 1, taskId)
+	//	if err != nil {
+	//		logrus.WithContext(ctx).Errorf("[ConfirmWithdrawal] call CreateMessageByTaskId error,err:%+v", err)
+	//		return err
+	//	}
+	//}
+	db3 := GetReadDB(ctx)
+	db3.Debug().Model(gorm_model.YoungeeTalentInfo{}).Where("id = ?", withdrawInfo.TalentID).Updates(
+		map[string]interface{}{
+			"withdrawing": gorm.Expr("withdrawing - ?", withdrawInfo.WithdrawAmount),
+			"withdrawed":  gorm.Expr("withdrawed + ?", withdrawInfo.WithdrawAmount)})
+	return nil
+}
+func RefuseTalentWithdrawal(ctx context.Context, req *http_model.RefuseTalentWithdrawalRequest) error {
+	db := GetReadDB(ctx)
+
+	// 获取撤回记录
+	var withdrwainfo gorm_model.YounggeeWithdrawRecord
+	err := db.Debug().Model(gorm_model.YounggeeWithdrawRecord{}).
+		Where("withdraw_id = ?", req.WithdrawId).
+		First(&withdrwainfo).Error // 使用 First 而不是 Updates 来查询数据
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[finance db] Query YounggeeWithdrawRecord error, err:%+v", err)
+		return err
+	}
+
+	// 更新 YounggeeWithdrawRecord
+	err = db.Debug().Model(gorm_model.YounggeeWithdrawRecord{}).
+		Where("withdraw_id = ?", req.WithdrawId).
+		Updates(gorm_model.YounggeeWithdrawRecord{
+			Status:       3,
+			RejectAt:     time.Now(),
+			RejectReason: req.Reason,
+		}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[finance db] Update YounggeeWithdrawRecord error, err:%+v", err)
+		return err
+	}
+
+	// 更新 YoungeeTalentInfo
+	err = db.Debug().Model(gorm_model.YoungeeTalentInfo{}).
+		Where("id = ?", withdrwainfo.TalentID).
+		Updates(map[string]interface{}{
+			"withdrawing": gorm.Expr("withdrawing + ?", withdrwainfo.WithdrawAmount),
+			"canwithdraw": gorm.Expr("canwithdraw - ?", withdrwainfo.WithdrawAmount),
+		}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[finance db] Update YoungeeTalentInfo error, err:%+v", err)
+		return err
+	}
+
+	return nil
+}
+
+func GetBankInfo(ctx context.Context, req *http_model.GetBankInfoRequest) (*http_model.BankInfo, error) {
+	//db := GetReadDB(ctx)
+	//if req.BankId == "" {
+	//	return nil, nil
+	//}
+	//var infoBank *gorm_model.InfoBank
+	//db.Debug().Model(gorm_model.InfoBank{}).Where("id = ?", req.BankId).First(&infoBank)
+	db1 := GetReadDB(ctx)
+	var infoRegion *gorm_model.InfoRegion
+	db1.Debug().Model(gorm_model.InfoRegion{}).Where("self_code = ?", conv.MustInt(req.BankOpenAddress, 0)).First(&infoRegion)
+
+	provinceCode := conv.MustString(req.BankOpenAddress, "")[0:2] + "0000"
+	var province *gorm_model.InfoRegion
+	db1.Debug().Model(gorm_model.InfoRegion{}).Where("self_code = ?", conv.MustInt(provinceCode, 0)).First(&province)
+
+	cityCode := conv.MustString(req.BankOpenAddress, "")[0:4] + "00"
+	var city *gorm_model.InfoRegion
+	db1.Debug().Model(gorm_model.InfoRegion{}).Where("self_code = ?", conv.MustInt(cityCode, 0)).First(&city)
+	data := new(http_model.BankInfo)
+	//data.BankName = infoBank.Name
+	data.BankOpenAddress = province.RegionName + city.RegionName + infoRegion.RegionName
+	//db.Model(gorm_model.InfoBank{}).Where("")
+	return data, nil
+}
+
+// GetEnterpriseIDByBusiness 根据企业名称查找企业ID
+func GetEnterpriseIDByBusiness(ctx context.Context, BusinessName string) int64 {
+	db := GetReadDB(ctx)
+	var EnterpriseID int64
+	db = db.Model([]gorm_model.Enterprise{}).Select("enterprise_id").Where("business_name", BusinessName).First(&EnterpriseID)
+	return EnterpriseID
+}
+
+// GetEnterpriseIDByUserId 根据企业名称查找企业ID
+func GetEnterpriseIDByUserId(ctx context.Context, UserId int64) int64 {
+	db := GetReadDB(ctx)
+	var EnterpriseID int64
+	db = db.Model([]gorm_model.Enterprise{}).Select("enterprise_id").Where("user_id", UserId).First(&EnterpriseID)
+	return EnterpriseID
+}
+
+// GetUserIDByUsername 根据用户名称查UserID
+func GetUserIDByUsername(ctx context.Context, Username string) int64 {
+	db := GetReadDB(ctx)
+	var UserID int64
+	db = db.Model([]gorm_model.YounggeeUser{}).Select("id").Where(fmt.Sprintf("username like '%%%s%%'", Username)).First(&UserID)
+	return UserID
+}
+
+func GetInvoiceRecords(ctx context.Context, req *http_model.InvoiceRecordsRequest, condition *common_model.InvoiceRecordsCondition) (*http_model.InvoiceRecordsData, error) {
+	db := GetReadDB(ctx)
+	var invoiceRecords []*gorm_model.YounggeeInvoiceRecord
+	db = db.Debug().Model(gorm_model.YounggeeInvoiceRecord{}).Where("status = ?", req.InvoiceStatus)
+	conditionType := reflect.TypeOf(condition).Elem()
+	conditionValue := reflect.ValueOf(condition).Elem()
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if tag == "submit_at" && value.Interface() != "" {
+			db = db.Where(fmt.Sprintf("submit_at like '%s%%'", value.Interface()))
+		}
+		if tag == "billing_at" && value.Interface() != "" {
+			db = db.Where(fmt.Sprintf("billing_at like '%s%%'", value.Interface()))
+		}
+	}
+	if req.Username != "" {
+		UserID := GetUserIDByUsername(ctx, req.Username)
+		enterpriseId := GetEnterpriseIDByUserId(ctx, UserID)
+		db = db.Where("enterprise_id = ?", enterpriseId)
+	}
+	if req.UserId != 0 {
+		enterpriseId := GetEnterpriseIDByUserId(ctx, req.UserId)
+		db = db.Where("enterprise_id = ?", enterpriseId)
+	}
+	// 查询总数
+	var total int64
+	if err := db.Count(&total).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetInvoiceRecords] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	if req.InvoiceStatus != 3 {
+		db.Order("submit_at")
+	} else {
+		db.Order("billing_at desc")
+	}
+	// 查询该页数据
+	limit := req.PageSize
+	offset := req.PageSize * req.PageNum // assert pageNum start with 0
+	err := db.Limit(int(limit)).Offset(int(offset)).Find(&invoiceRecords).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetInvoiceRecords] error query mysql limit, err:%+v", err)
+		return nil, err
+	}
+	enterpriseIdToUserInfoMap := make(map[string]gorm_model.Enterprise)
+	regionAddressMap := make(map[string]string)
+	for _, invoiceRecord := range invoiceRecords {
+		if _, ok := enterpriseIdToUserInfoMap[invoiceRecord.EnterpriseID]; !ok {
+			db1 := GetReadDB(ctx)
+			enterpriseInfo := gorm_model.Enterprise{}
+			db1.Model(gorm_model.Enterprise{}).Where("enterprise_id = ?", invoiceRecord.EnterpriseID).Find(&enterpriseInfo)
+			enterpriseIdToUserInfoMap[invoiceRecord.EnterpriseID] = enterpriseInfo
+		}
+		if _, ok := regionAddressMap[invoiceRecord.EnterpriseID]; !ok {
+			db1 := GetReadDB(ctx)
+			var regionCode string
+			db1.Model(gorm_model.YounggeeInvoiceAddress{}).Select("region_code").Where("enterprise_id = ?", invoiceRecord.EnterpriseID).Find(&regionCode)
+			regionAddressMap[invoiceRecord.EnterpriseID] = GetRegion(ctx, conv.MustInt(regionCode, 0))
+		}
+	}
+	var InvoiceRecords []*http_model.InvoiceRecordsPreviews
+	for _, invoiceRecord := range invoiceRecords {
+		InvoiceRecord := new(http_model.InvoiceRecordsPreviews)
+		InvoiceRecord.BillingId = invoiceRecord.BillingID
+		InvoiceRecord.InvoiceInfo = invoiceRecord.InvoiceSnap
+		InvoiceRecord.AddressInfo = invoiceRecord.AddressSnap
+		InvoiceRecord.InvoiceAddress = regionAddressMap[invoiceRecord.EnterpriseID]
+		InvoiceRecord.InvoiceType = invoiceRecord.InvoiceType
+		InvoiceRecord.Amount = invoiceRecord.InvoiceAmount
+		InvoiceRecord.Phone = invoiceRecord.Phone
+		InvoiceRecord.ShipmentNumber = invoiceRecord.ShipmentNumber
+		InvoiceRecord.BusinessName = enterpriseIdToUserInfoMap[invoiceRecord.EnterpriseID].BusinessName
+		InvoiceRecord.UserId = invoiceRecord.EnterpriseID
+		InvoiceRecord.Username = GetUsernameByUserID(ctx, enterpriseIdToUserInfoMap[invoiceRecord.EnterpriseID].UserID)
+		InvoiceRecord.SubmitAt = conv.MustString(invoiceRecord.SubmitAt, "")[:19]
+		InvoiceRecord.BillingAt = conv.MustString(invoiceRecord.BillingAt, "")[:19]
+		InvoiceRecords = append(InvoiceRecords, InvoiceRecord)
+	}
+	var InvoiceRecordsData http_model.InvoiceRecordsData
+	InvoiceRecordsData.InvoiceRecordsPreviews = InvoiceRecords
+	InvoiceRecordsData.Total = strconv.FormatInt(total, 10)
+	return &InvoiceRecordsData, nil
+}
+
+func GetInvoiceList(ctx context.Context, req http_model.GetInvoiceListRequest) (*http_model.InvoiceListData, error) {
+	db := GetReadDB(ctx)
+	// 获取分页参数
+	page := req.PageNum
+	pageSize := req.PageSize
+	if page < 1 {
+		page = 1
+	}
+	if pageSize < 1 {
+		pageSize = 10 // 设置默认每页记录数为 10
+	}
+
+	var invoicelist []gorm_model.YounggeeInvoiceRecord
+	var total int64
+
+	// 计算总记录数
+	err := db.Model(gorm_model.YounggeeInvoiceRecord{}).Where("status = ?", req.Status).Count(&total).Error
+	if err != nil {
+		return &http_model.InvoiceListData{}, err
+	}
+
+	// 查询当前页的数据
+	err = db.Model(gorm_model.YounggeeInvoiceRecord{}).
+		Offset((page - 1) * pageSize). // 计算偏移量
+		Limit(pageSize).               // 设置每页限制
+		Find(&invoicelist).Error
+	if err != nil {
+		return &http_model.InvoiceListData{}, err
+	}
+
+	invoicePointers := make([]*http_model.InvoiceListResponse, 0, len(invoicelist))
+	for _, invoice := range invoicelist {
+		var operator string
+		if invoice.SubAccountID == 0 {
+			operator = GetEnterprisenameByEnterpriseID(ctx, invoice.EnterpriseID)
+		} else {
+			operator = GetOperatorBySubacountID(ctx, invoice.SubAccountID)
+		}
+		response := &http_model.InvoiceListResponse{
+			BillingID:     invoice.BillingID,
+			InvoiceAmount: invoice.InvoiceAmount,
+			Operator:      operator,
+			SubmitAt:      invoice.SubmitAt,
+			AgreeAt:       invoice.BillingAt,
+			TaskNumber:    GetTasknum(invoice.TaskIds),
+			InvoiceType:   invoice.InvoiceType,
+		}
+		invoicePointers = append(invoicePointers, response)
+
+	}
+	return &http_model.InvoiceListData{
+		InvoiceListinfo: invoicePointers,
+		Total:           total,
+	}, nil
+}
+
+func GetSupplierWithdrawList(ctx context.Context, req http_model.GetSupplierWithdrawListRequest) (*http_model.SupplierWithdrawListData, error) {
+	db := GetReadDB(ctx)
+	// 获取分页参数
+	page := req.PageNum
+	pageSize := req.PageSize
+	if page < 1 {
+		page = 1
+	}
+	if pageSize < 1 {
+		pageSize = 10 // 设置默认每页记录数为 10
+	}
+
+	var withdrawlist []gorm_model.YounggeeSupplierWithdraw
+	var total int64
+
+	// 计算总记录数
+	err := db.Model(gorm_model.YounggeeSupplierWithdraw{}).Where("withdraw_status = ?", req.Status).Count(&total).Error
+	if err != nil {
+		return &http_model.SupplierWithdrawListData{}, err
+	}
+
+	// 查询当前页的数据
+	err = db.Model(gorm_model.YounggeeSupplierWithdraw{}).
+		Offset((page - 1) * pageSize). // 计算偏移量
+		Limit(pageSize).               // 设置每页限制
+		Find(&withdrawlist).Error
+	if err != nil {
+		return &http_model.SupplierWithdrawListData{}, err
+	}
+
+	withdrawPointers := make([]*http_model.SupplierWithdrawListResponse, 0, len(withdrawlist))
+	for _, withdraw := range withdrawlist {
+		var supplier gorm_model.YounggeeSupplier
+		err = db.Model(gorm_model.YounggeeSupplier{}).Where("supplier_id = ?", withdraw.SupplierId).First(&supplier).Error
+		if err != nil {
+			return &http_model.SupplierWithdrawListData{}, err
+		}
+		var name string
+		if supplier.SupplierType == 1 {
+			name = supplier.Name
+		} else {
+			name = supplier.CompanyName
+		}
+		var InvoiceIDList []string
+		TaskIDs := strings.Split(withdraw.InvoiceIds, ",")
+		for _, taskId := range TaskIDs {
+			InvoiceIDList = append(InvoiceIDList, taskId)
+		}
+
+		var invoiceIncome []gorm_model.YounggeeSupplierInvoice
+		err = db.Model(gorm_model.YounggeeSupplierInvoice{}).Where("invoice_id IN ?", InvoiceIDList).Find(&invoiceIncome).Error
+		if err != nil {
+			return &http_model.SupplierWithdrawListData{}, err
+		}
+		// 收集所有的 incomeIDs
+		var incomelist []string
+		for _, invoice := range invoiceIncome {
+			TaskIDs := strings.Split(invoice.IncomeIds, ",")
+			for _, taskId := range TaskIDs {
+				incomelist = append(incomelist, taskId)
+			}
+		}
+
+		var supplier_income []gorm_model.YounggeeSupplierIncome
+		err = db.Model(gorm_model.YounggeeSupplierIncome{}).Where("income_id in ?", incomelist).Find(&supplier_income).Error
+		if err != nil {
+			return &http_model.SupplierWithdrawListData{}, err
+		}
+
+		var taskinfo []http_model.Tasklist
+		taskinfo = make([]http_model.Tasklist, 0, len(supplier_income)) // 预分配足够的空间
+
+		for _, income := range supplier_income {
+			var info http_model.Tasklist
+
+			// 根据 IncomeType 判断信息的来源
+			switch income.IncomeType {
+			case 1:
+				info.Id = income.SProjectId
+			case 3:
+				info.Id = income.SLocalLifeId
+			}
+
+			info.Fee = income.SupplierChargeActual
+
+			// 添加到任务信息列表
+			taskinfo = append(taskinfo, info)
+		}
+		withdrawinfo := &http_model.Withdrawinfo{
+			Name:       withdraw.Name,
+			IdNumber:   withdraw.IdNumber,
+			BankName:   withdraw.BankName,
+			BankNumber: withdraw.BankNumber,
+			Phone:      withdraw.Phone,
+		}
+		response := &http_model.SupplierWithdrawListResponse{
+			WithDrawId:     withdraw.SupplierWithdrawId,
+			WithdrawAmount: withdraw.WithdrawAmount,
+			ActualAmount:   withdraw.AmountPayable,
+			PhoneNumber:    withdraw.Phone,
+			SupplierName:   supplier.SupplierName,
+			Name:           name,
+			WithDrawinfo:   withdrawinfo,
+			SubmitAt:       withdraw.SupplyTime,
+			AggreeAt:       withdraw.AgreeTime,
+			ReajectAt:      withdraw.RejectTime,
+			ReajectReason:  withdraw.FailReson,
+			Taskinfo:       &taskinfo,
+			SupplierId:     supplier.SupplierId,
+			Avater:         supplier.Avater,
+		}
+		withdrawPointers = append(withdrawPointers, response)
+
+	}
+	return &http_model.SupplierWithdrawListData{
+		WithdrawListinfo: withdrawPointers,
+		Total:            total,
+	}, nil
+}
+func GetSupplierInvoiceList(ctx context.Context, req http_model.GetSupplierInvoiceListRequest) (*http_model.SupplierInvoiceListData, error) {
+	db := GetReadDB(ctx)
+	// 获取分页参数
+	page := req.PageNum
+	pageSize := req.PageSize
+	if page < 1 {
+		page = 1
+	}
+	if pageSize < 1 {
+		pageSize = 10 // 设置默认每页记录数为 10
+	}
+
+	var invoicelist []gorm_model.YounggeeSupplierInvoice
+	var total int64
+
+	// 计算总记录数
+	err := db.Model(gorm_model.YounggeeSupplierInvoice{}).Where("invoice_status = ?", req.Status).Count(&total).Error
+	if err != nil {
+		return &http_model.SupplierInvoiceListData{}, err
+	}
+
+	// 查询当前页的数据
+	err = db.Model(gorm_model.YounggeeSupplierInvoice{}).
+		Offset((page - 1) * pageSize). // 计算偏移量
+		Limit(pageSize).               // 设置每页限制
+		Find(&invoicelist).Error
+	if err != nil {
+		return &http_model.SupplierInvoiceListData{}, err
+	}
+
+	invoicePointers := make([]*http_model.SupplierInvoiceListResponse, 0, len(invoicelist))
+	for _, invoice := range invoicelist {
+		var supplier gorm_model.YounggeeSupplier
+		err = db.Model(gorm_model.YounggeeSupplier{}).Where("supplier_id = ?", invoice.SupplierId).First(&supplier).Error
+		if err != nil {
+			return &http_model.SupplierInvoiceListData{}, err
+		}
+		var name string
+		if supplier.SupplierType == 1 {
+			name = supplier.Name
+		} else {
+			name = supplier.CompanyName
+		}
+		var TaskIDList []string
+		TaskIDs := strings.Split(invoice.IncomeIds, ",")
+		for _, taskId := range TaskIDs {
+			TaskIDList = append(TaskIDList, taskId)
+		}
+
+		var supplier_income []gorm_model.YounggeeSupplierIncome
+		err = db.Model(gorm_model.YounggeeSupplierIncome{}).Where("income_id in ?", TaskIDs).Find(&supplier_income).Error
+		if err != nil {
+			return &http_model.SupplierInvoiceListData{}, err
+		}
+
+		var taskinfo []http_model.Tasklist
+		taskinfo = make([]http_model.Tasklist, 0, len(supplier_income)) // 预分配足够的空间
+		var AllFee float64
+
+		for _, income := range supplier_income {
+			var info http_model.Tasklist
+
+			// 根据 IncomeType 判断信息的来源
+			switch income.IncomeType {
+			case 1:
+				info.Id = income.SProjectId
+			case 3:
+				info.Id = income.SLocalLifeId
+			}
+
+			info.Fee = income.SupplierChargeActual
+			AllFee += income.SupplierChargeActual
+
+			// 添加到任务信息列表
+			taskinfo = append(taskinfo, info)
+		}
+
+		response := &http_model.SupplierInvoiceListResponse{
+			InvoiceId:     invoice.InvoiceId,
+			SubmitAt:      invoice.UploadInvoiceTime,
+			AggreeAt:      invoice.AgreeTime,
+			ReajectAt:     invoice.RejectTime,
+			SupplierId:    invoice.SupplierId,
+			ReajectReason: invoice.FailReason,
+			PhoneNumber:   supplier.PhoneNumber,
+			Name:          name,
+			SupplierName:  supplier.SupplierName,
+			CompanyName:   invoice.Company,
+			Taskinfo:      &taskinfo,
+			InvoiceAmount: AllFee,
+			Avater:        supplier.Avater,
+			InvoiceUrl:    invoice.InvoiceUrl,
+		}
+		invoicePointers = append(invoicePointers, response)
+
+	}
+	return &http_model.SupplierInvoiceListData{
+		InvoiceListinfo: invoicePointers,
+		Total:           total,
+	}, nil
+}
+
+func GetInvoiceInfo(ctx context.Context, request http_model.GetInvoiceInfoRequest) (*http_model.InvoiceInfoResponse, error) {
+	db := GetReadDB(ctx)
+	var invoice gorm_model.YounggeeInvoiceRecord
+	err := db.Model(gorm_model.YounggeeInvoiceRecord{}).Where("billing_id=?", request.BillingID).First(&invoice).Error
+	if err != nil {
+		return nil, err
+	}
+	res := &http_model.InvoiceInfoResponse{
+		Businessname:      GetEnterprisenameByEnterpriseID(ctx, invoice.EnterpriseID),
+		TaxCode:           invoice.TaxCode,
+		RegisteredAddress: invoice.RegisteredAddress,
+		RegisteredPhone:   invoice.RegisteredPhone,
+		Bank:              invoice.Bank,
+		BankCardNumber:    invoice.BankCardNumber,
+		InvoiceType:       invoice.InvoiceType,
+	}
+	return res, nil
+}
+
+func ConfirmInvoice(ctx context.Context, request *http_model.ConfirmInvoiceRequest) error {
+	db := GetReadDB(ctx)
+	return db.Model(gorm_model.YounggeeInvoiceRecord{}).Where("billing_id = ?", request.BillingId).Updates(
+		gorm_model.YounggeeInvoiceRecord{
+			BillingAt:  time.Now(),
+			InvoiceUrl: request.Url,
+			Status:     2,
+		}).Error
+}
+func SetInvoiceInfo(ctx context.Context, request *http_model.SetInvoiceInfoRequest) error {
+	db := GetReadDB(ctx)
+	invoiceInfo := gorm_model.YounggeePlatformInvoiceInfo{
+		EnterpriseName: request.EnterpriseName,
+		EnterpriseTax:  request.EnterpriseTax,
+		Phone:          request.Phone,
+		Address:        request.Address,
+		BankAccount:    request.BankAccount,
+		BankName:       request.BankName,
+		Project:        request.Project,
+	}
+	return db.Create(&invoiceInfo).Error
+}
+func RefuseSupplierInvoice(ctx context.Context, request *http_model.RefuseSupplierInvoiceRequest) error {
+	db := GetReadDB(ctx)
+	return db.Model(gorm_model.YounggeeSupplierInvoice{}).Where("invoice_id = ?", request.InvoiceId).Updates(
+		gorm_model.YounggeeSupplierInvoice{
+			RejectTime:    time.Now(),
+			InvoiceStatus: 4,
+			FailReason:    request.Reason,
+		}).Error
+}
+
+func ConfirmSupplierInvoice(ctx context.Context, request *http_model.ConfirmSupplierInvoiceRequest) error {
+	db := GetReadDB(ctx)
+	return db.Model(gorm_model.YounggeeSupplierInvoice{}).Where("invoice_id = ?", request.InvoiceId).Updates(
+		gorm_model.YounggeeSupplierInvoice{
+			AgreeTime:     time.Now(),
+			InvoiceStatus: 3,
+		}).Error
+}
+
+func ConfirmWithdraw(ctx context.Context, request *http_model.ConfirmWithdrawRequest) error {
+	db := GetReadDB(ctx)
+	// 获取撤回记录
+	var supplierincomeinfo gorm_model.YounggeeSupplierWithdraw
+	err := db.Debug().Model(gorm_model.YounggeeSupplierWithdraw{}).
+		Where("supplier_withdraw_id = ?", request.InvoiceId).
+		First(&supplierincomeinfo).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[finance db] Query YounggeeWithdrawRecord error, err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YounggeeSupplierWithdraw{}).Where("supplier_withdraw_id = ?", request.InvoiceId).Updates(
+		gorm_model.YounggeeSupplierWithdraw{
+			AgreeTime:      time.Now(),
+			WithdrawStatus: 3,
+		}).Error
+	if err != nil {
+		return err
+	}
+	if supplierincomeinfo.SupplierType == 2 {
+		var InvoiceIDList []string
+		InvoiceIDs := strings.Split(supplierincomeinfo.InvoiceIds, ",")
+		for _, taskId := range InvoiceIDs {
+			InvoiceIDList = append(InvoiceIDList, taskId)
+		}
+
+		var invoiceIncome []gorm_model.YounggeeSupplierInvoice
+		err = db.Model(gorm_model.YounggeeSupplierInvoice{}).Where("invoice_id IN ?", InvoiceIDList).Find(&invoiceIncome).Error
+		if err != nil {
+			return err
+		}
+		err = db.Model(gorm_model.YounggeeSupplierInvoice{}).Where("invoice_id in ?", InvoiceIDList).Updates(
+			gorm_model.YounggeeSupplierInvoice{
+				WithdrawStatus: 3,
+			}).Error
+		if err != nil {
+			return err
+		}
+		// 收集所有的 incomeIDs
+		var incomelist []string
+		for _, invoice := range invoiceIncome {
+			IncomeIds := strings.Split(invoice.IncomeIds, ",")
+			for _, IncomeId := range IncomeIds {
+				incomelist = append(incomelist, IncomeId)
+
+			}
+		}
+		err = db.Model(gorm_model.YounggeeSupplierIncome{}).Where("income_id in ?", incomelist).Updates(gorm_model.YounggeeSupplierIncome{WithdrawStatus: 3}).Error
+		if err != nil {
+			return err
+		}
+	} else {
+		incomeids := strings.Split(supplierincomeinfo.IncomeIds, ",")
+		err = db.Model(gorm_model.YounggeeSupplierIncome{}).Where("income_id in ?", incomeids).Updates(gorm_model.YounggeeSupplierIncome{WithdrawStatus: 3}).Error
+		if err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
+func RefuseWithdraw(ctx context.Context, request *http_model.RefuseWithdrawRequest) error {
+	db := GetReadDB(ctx)
+	// 获取撤回记录
+	var supplierincomeinfo gorm_model.YounggeeSupplierWithdraw
+	err := db.Debug().Model(gorm_model.YounggeeSupplierWithdraw{}).
+		Where("supplier_withdraw_id = ?", request.InvoiceId).
+		First(&supplierincomeinfo).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[finance db] Query YounggeeWithdrawRecord error, err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YounggeeSupplierWithdraw{}).Where("supplier_withdraw_id = ?", request.InvoiceId).Updates(
+		gorm_model.YounggeeSupplierWithdraw{
+			RejectTime:     time.Now(),
+			WithdrawStatus: 4,
+			FailReson:      request.Reason,
+		}).Error
+	if err != nil {
+		return err
+	}
+	if supplierincomeinfo.SupplierType == 2 {
+		var InvoiceIDList []string
+		InvoiceIDs := strings.Split(supplierincomeinfo.InvoiceIds, ",")
+		for _, taskId := range InvoiceIDs {
+			InvoiceIDList = append(InvoiceIDList, taskId)
+		}
+
+		var invoiceIncome []gorm_model.YounggeeSupplierInvoice
+		err = db.Model(gorm_model.YounggeeSupplierInvoice{}).Where("invoice_id IN ?", InvoiceIDList).Find(&invoiceIncome).Error
+		if err != nil {
+			return err
+		}
+		err = db.Model(gorm_model.YounggeeSupplierInvoice{}).Where("invoice_id in ?", InvoiceIDList).Updates(
+			gorm_model.YounggeeSupplierInvoice{
+				WithdrawStatus: 1,
+			}).Error
+		if err != nil {
+			return err
+		}
+		// 收集所有的 incomeIDs
+		var incomelist []string
+		for _, invoice := range invoiceIncome {
+			IncomeIds := strings.Split(invoice.IncomeIds, ",")
+			for _, IncomeId := range IncomeIds {
+				incomelist = append(incomelist, IncomeId)
+
+			}
+		}
+		err = db.Model(gorm_model.YounggeeSupplierIncome{}).Where("income_id in ?", incomelist).Updates(gorm_model.YounggeeSupplierIncome{WithdrawStatus: 1}).Error
+		if err != nil {
+			return err
+		}
+	} else {
+		incomeids := strings.Split(supplierincomeinfo.IncomeIds, ",")
+		err = db.Model(gorm_model.YounggeeSupplierIncome{}).Where("income_id in ?", incomeids).Updates(gorm_model.YounggeeSupplierIncome{WithdrawStatus: 1}).Error
+		if err != nil {
+			return err
+		}
+	}
+	return nil
+}
+func GetTasknum(taskIds string) int {
+	var ids [][]string // 修改为二维字符串切片
+	if err := json.Unmarshal([]byte(taskIds), &ids); err != nil {
+		return 0
+	}
+	count := 0
+	for _, pair := range ids {
+		count += len(pair)
+	}
+	return count
+}
+
+func GetOperatorBySubacountID(ctx context.Context, SubaccountID int) (username string) {
+	db := GetReadDB(ctx)
+	db = db.Model([]gorm_model.YounggeeSubAccount{}).Select("sub_account_name").Where("sub_account_id = ?", SubaccountID).First(&username)
+	return username
+}
+func GetEnterprisenameByEnterpriseID(ctx context.Context, EnterpriseID string) (username string) {
+	db := GetReadDB(ctx)
+	db = db.Model([]gorm_model.Enterprise{}).Select("business_name").Where("enterprise_id = ?", EnterpriseID).First(&username)
+	return username
+}
+
+func GetUsernameByUserID(ctx context.Context, UserID int64) (username string) {
+	db := GetReadDB(ctx)
+	db = db.Model([]gorm_model.YounggeeUser{}).Select("username").Where("id", UserID).First(&username)
+	return username
+}
+
+func GetRechargeRecords(ctx context.Context, req *http_model.GetRechargeRecordsRequest, condition *common_model.RechargeRecordsCondition) (*http_model.RechargeRecordsData, error) {
+	db := GetReadDB(ctx)
+	var rechargeRecords []*gorm_model.YounggeeRechargeRecord
+	db = db.Debug().Model(gorm_model.YounggeeRechargeRecord{}).Where("status = ?", req.Status)
+	conditionType := reflect.TypeOf(condition).Elem()
+	conditionValue := reflect.ValueOf(condition).Elem()
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if tag == "commit_at" && value.Interface() != "" {
+			db = db.Where(fmt.Sprintf("commit_at like '%s%%'", value.Interface()))
+		}
+		if tag == "confirm_at" && value.Interface() != "" {
+			db = db.Where(fmt.Sprintf("confirm_at like '%s%%'", value.Interface()))
+		}
+	}
+	if req.Username != "" {
+		UserID := GetUserIDByUsername(ctx, req.Username)
+		enterpriseId := GetEnterpriseIDByUserId(ctx, UserID)
+		db = db.Where("enterprise_id = ?", enterpriseId)
+	}
+	if req.UserId != 0 {
+		enterpriseId := GetEnterpriseIDByUserId(ctx, req.UserId)
+		db = db.Where("enterprise_id = ?", enterpriseId)
+	}
+	if req.RechargeMethod == 1 {
+		db = db.Where("recharge_method = ?", 1)
+	} else if req.RechargeMethod == 2 {
+		db = db.Where("recharge_method = ?", 2)
+	} else if req.RechargeMethod == 3 {
+		db = db.Where("recharge_method = ?", 3)
+	}
+	// 查询总数
+	var total int64
+	if err := db.Count(&total).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetRechargeRecords] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	if req.Status == 1 {
+		db = db.Order("commit_at")
+	} else {
+		db = db.Order("confirm_at desc")
+	}
+	// 查询该页数据
+	limit := req.PageSize
+	offset := req.PageSize * req.PageNum // assert pageNum start with 0
+	err := db.Limit(int(limit)).Offset(int(offset)).Find(&rechargeRecords).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[GetRechargeRecords] error query mysql limit, err:%+v", err)
+		return nil, err
+	}
+	var enterpriseIds []string
+	for _, rechargeRecord := range rechargeRecords {
+		enterpriseIds = append(enterpriseIds, rechargeRecord.EnterpriseID)
+	}
+	util.RemoveStrRepByMap(enterpriseIds)
+	enterpriseIdToUserInfoMap := make(map[string]gorm_model.Enterprise)
+	db1 := GetReadDB(ctx)
+	for _, v := range enterpriseIds {
+		enterpriseInfo := gorm_model.Enterprise{}
+		db1.Model(gorm_model.Enterprise{}).Where("enterprise_id = ?", v).Find(&enterpriseInfo)
+		enterpriseIdToUserInfoMap[v] = enterpriseInfo
+	}
+	var RechargeRecords []*http_model.RechargeRecordsPreview
+	for _, rechargeRecord := range rechargeRecords {
+		RechargeRecord := new(http_model.RechargeRecordsPreview)
+		RechargeRecord.RechargeId = rechargeRecord.RechargeID
+		RechargeRecord.EnterpriseID = rechargeRecord.EnterpriseID
+		RechargeRecord.RechargeAmount = rechargeRecord.RechargeAmount
+		RechargeRecord.ConfirmAt = conv.MustString(rechargeRecord.ConfirmAt, "")[:19]
+		RechargeRecord.CommitAt = conv.MustString(rechargeRecord.CommitAt, "")[:19]
+		RechargeRecord.Phone = rechargeRecord.Phone
+		RechargeRecord.TransferVoucher = rechargeRecord.TransferVoucherUrl
+		RechargeRecord.RechargeMethod = consts.GetRechargeMethod(rechargeRecord.RechargeMethod)
+		RechargeRecord.UserId = rechargeRecord.EnterpriseID
+		RechargeRecord.Username = GetUsernameByUserID(ctx, enterpriseIdToUserInfoMap[rechargeRecord.EnterpriseID].UserID)
+		RechargeRecord.BusinessName = enterpriseIdToUserInfoMap[rechargeRecord.EnterpriseID].BusinessName
+		RechargeRecords = append(RechargeRecords, RechargeRecord)
+	}
+	var RechargeRecordsData http_model.RechargeRecordsData
+	RechargeRecordsData.RechargeRecordsPreview = RechargeRecords
+	RechargeRecordsData.Total = conv.MustString(total, "")
+	return &RechargeRecordsData, nil
+}
+
+func OperateRecharge(ctx context.Context, req *http_model.OperateRechargeRequest) error {
+	db := GetReadDB(ctx)
+	db1 := GetReadDB(ctx)
+	err := db1.Model(gorm_model.Enterprise{}).Where("enterprise_id = ?", req.EnterpriseId).Updates(map[string]interface{}{
+		"balance":           gorm.Expr("balance + ?", req.RechargeAmount),
+		"available_balance": gorm.Expr("available_balance + ?", req.RechargeAmount)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[OperateRecharge] error Updates balance, err:%+v", err)
+		return err
+	}
+	err1 := db.Model(gorm_model.YounggeeRechargeRecord{}).Where("recharge_id = ?", req.RechargeId).Updates(gorm_model.YounggeeRechargeRecord{
+		Status:        2,
+		InvoiceStatus: 2,
+		ConfirmAt:     time.Now(),
+	}).Error
+	if err1 != nil {
+		logrus.WithContext(ctx).Errorf("[OperateRecharge] error Updates Status, err:%+v", err)
+		return err1
+	}
+	if req.Method == 1 {
+		db2 := GetReadDB(ctx)
+		db2.Model(gorm_model.YounggeeRechargeRecord{}).Where("recharge_id = ?", req.RechargeId).Updates(gorm_model.YounggeeRechargeRecord{
+			RechargeAmount: req.RechargeAmount,
+		})
+	}
+	return nil
+}
+
+func GetBillTaskList(ctx context.Context, req http_model.GetBillTaskListRequest) (*http_model.BillTaskData, error) {
+	db := GetReadDB(ctx)
+	// 获取分页参数
+	page := req.PageNum
+	pageSize := req.PageSize
+	if page < 1 {
+		page = 1
+	}
+	if pageSize < 1 {
+		pageSize = 10 // 设置默认每页记录数为 10
+	}
+
+	var invoice gorm_model.YounggeeInvoiceRecord
+	err := db.Model(gorm_model.YounggeeInvoiceRecord{}).Where("billing_id = ?", req.BillingID).First(&invoice).Error
+	if err != nil {
+		return nil, err
+	}
+
+	var ids [][]string // 二维切片用于存储二元组
+	if err = json.Unmarshal([]byte(invoice.TaskIds), &ids); err != nil {
+		return nil, err // 返回错误信息
+	}
+	var results []*http_model.BillTaskDataResponse // 用于存储合并后的结果
+
+	// 检查ID组的有效性
+	if len(ids) != 3 {
+		return nil, fmt.Errorf("task_ids must contain three groups")
+	}
+	// 第一组ID对应 selection 表
+	if len(ids[0]) > 0 {
+		var selections []gorm_model.YounggeeSelectionInfo
+		if err := db.Where("selection_id IN ?", ids[0]).Find(&selections).Error; err != nil {
+			return nil, err
+		}
+		for _, selection := range selections {
+			var productName string
+			var productPrice float64
+			var mainImage string
+			var creater string
+			product, err := GetProductByID(ctx, int64(selection.ProductID))
+			if err == nil && product != nil {
+				productName = product.ProductName
+				productPrice = product.ProductPrice
+			}
+			if selection.SubAccountID == 0 {
+				creater = GetEnterprisenameByEnterpriseID(ctx, selection.EnterpriseID)
+			} else {
+				creater = GetOperatorBySubacountID(ctx, selection.SubAccountID)
+			}
+			mainImage, err = GetMainPhotoByProductID(ctx, int64(selection.ProductID))
+			results = append(results, &http_model.BillTaskDataResponse{
+				TaskType:     1,
+				TaskForm:     selection.TaskMode,
+				Platform:     selection.Platform,
+				ContentType:  selection.ContentType,
+				SettleAmount: selection.SettlementAmount,
+				Operator:     creater,
+				PhotoUrl:     mainImage,
+				Price:        productPrice,
+				ProductName:  productName,
+				Taskid:       selection.SelectionID,
+			})
+		}
+	}
+
+	// 第二组ID对应 project 表
+	if len(ids[1]) > 0 {
+		var projects []gorm_model.ProjectInfo
+		if err := db.Where("project_id IN ?", ids[1]).Find(&projects).Error; err != nil {
+			return nil, err
+		}
+		for _, project := range projects {
+			var productName string
+			var productPrice float64
+			var mainImage string
+			var creater string
+			product, err := GetProductByID(ctx, project.ProductID)
+			if err == nil && product != nil {
+				productName = product.ProductName
+				productPrice = product.ProductPrice
+			}
+			if project.SubAccountID == 0 {
+				creater = GetEnterprisenameByEnterpriseID(ctx, project.EnterpriseID)
+			} else {
+				creater = GetOperatorBySubacountID(ctx, int(project.SubAccountID))
+			}
+			mainImage, err = GetMainPhotoByProductID(ctx, project.ProductID)
+			results = append(results, &http_model.BillTaskDataResponse{
+				TaskType:     2,
+				TaskForm:     int(project.ProjectForm),
+				ContentType:  int(project.ContentType),
+				SettleAmount: conv.MustString(project.SettlementAmount, ""),
+				Operator:     creater,
+				PhotoUrl:     mainImage,
+				Price:        productPrice,
+				ProductName:  productName,
+				Taskid:       project.ProjectID,
+			})
+		}
+	}
+
+	// 第三组ID对应 llocalife 表
+	if len(ids[2]) > 0 {
+		var localifes []gorm_model.YounggeeLocalLifeInfo
+		if err := db.Where("local_id IN ?", ids[2]).Find(&localifes).Error; err != nil {
+			return nil, err
+		}
+		for _, localife := range localifes {
+			var productName string
+			var address string
+			var mainImage string
+			var creater string
+			store, err := GetStoreByID(ctx, int64(localife.StoreId))
+			if err == nil && store != nil {
+				productName = store.StoreName
+				address = store.StoreLocation
+			}
+			if localife.SubAccountId == 0 {
+				creater = GetEnterprisenameByEnterpriseID(ctx, localife.EnterpriseId)
+			} else {
+				creater = GetOperatorBySubacountID(ctx, localife.SubAccountId)
+			}
+			mainImage, err = GetMainPhotoByStoreID(ctx, int64(localife.StoreId))
+			results = append(results, &http_model.BillTaskDataResponse{
+				TaskType:     3,
+				TaskForm:     localife.TaskForm,
+				ContentType:  localife.ContentType,
+				SettleAmount: conv.MustString(localife.SettlementAmount, ""),
+				Operator:     creater,
+				Taskid:       localife.LocalId,
+				ProductName:  productName,
+				Address:      address,
+				PhotoUrl:     mainImage,
+			})
+		}
+	}
+
+	// 计算总数
+	total := len(results)
+
+	// 分页处理
+	start := (page - 1) * pageSize
+	if start >= total {
+		return &http_model.BillTaskData{InvoiceListinfo: nil, Total: total}, nil // 返回空结果
+	}
+	end := start + pageSize
+	if end > total {
+		end = total
+	}
+
+	// 返回分页后的结果
+	return &http_model.BillTaskData{
+		InvoiceListinfo: results[start:end],
+		Total:           total,
+	}, nil
+}
+
+func GetMainPhotoByStoreID(ctx context.Context, storeID int64) (string, error) {
+	db := GetReadDB(ctx)
+	var productPhoto gorm_model.YounggeeProductPhoto
+	err := db.Where("store_id = ? AND symbol = ?", storeID, 1).First(&productPhoto).Error
+	if err != nil {
+		return "", err
+	}
+	return productPhoto.PhotoUrl, nil
+}
+func GetMainPhotoByProductID(ctx context.Context, productId int64) (string, error) {
+	db := GetReadDB(ctx)
+	var productPhoto gorm_model.YounggeeProductPhoto
+	err := db.Where("product_id = ? AND symbol = ?", productId, 1).First(&productPhoto).Error
+	if err != nil {
+		return "", err
+	}
+	return productPhoto.PhotoUrl, nil
+}
+
+func GetStoreByID(ctx context.Context, stroeid int64) (*gorm_model.YounggeeStore, error) {
+	db := GetReadDB(ctx)
+	store := &gorm_model.YounggeeStore{}
+	err := db.First(&store, stroeid).Error
+	if err != nil {
+		if err == gorm.ErrRecordNotFound {
+			return nil, nil
+		} else {
+			return nil, err
+		}
+	}
+	return store, nil
+}

+ 531 - 279
db/link.go

@@ -1,279 +1,531 @@
-package db
-
-import (
-	"context"
-	"fmt"
-	"reflect"
-	"strings"
-	"time"
-	"youngee_m_api/model/common_model"
-	"youngee_m_api/model/gorm_model"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/pack"
-	"youngee_m_api/util"
-
-	"github.com/caixw/lib.go/conv"
-	"github.com/sirupsen/logrus"
-)
-
-// GetTaskLinkList 查询上传链接的task list
-func GetTaskLinkList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskLinkInfo, int64, error) {
-	db := GetReadDB(ctx)
-	// 查询Task表信息
-	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
-	// 根据Project条件过滤
-	conditionType := reflect.TypeOf(conditions).Elem()
-	conditionValue := reflect.ValueOf(conditions).Elem()
-	var platform_nickname string = ""
-	for i := 0; i < conditionType.NumField(); i++ {
-		field := conditionType.Field(i)
-		tag := field.Tag.Get("condition")
-		value := conditionValue.FieldByName(field.Name)
-		if tag == "link_status" {
-			fmt.Printf("link %+v", value.Interface() == int64(0))
-			if value.Interface() == int64(0) {
-				db = db.Where("task_stage = 12")
-			} else {
-				db = db.Where("task_stage > 12 and task_stage <> 16")
-			}
-			continue
-		} else if !util.IsBlank(value) {
-			if tag == "platform_nickname" {
-				platform_nickname = fmt.Sprintf("%v", value.Interface())
-				continue
-			} else if tag == "project_id" || tag == "strategy_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)
-
-	// 查询任务id
-	var taskIds []string
-	taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
-	for _, taskInfo := range taskInfos {
-		taskIds = append(taskIds, taskInfo.TaskId)
-		taskMap[taskInfo.TaskId] = taskInfo
-	}
-	db1 := GetReadDB(ctx)
-	db1 = db1.Debug().Model(gorm_model.YounggeeLinkInfo{})
-
-	var LinkInfos []gorm_model.YounggeeLinkInfo
-	db1 = db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_submit=? ", taskIds, 1)
-	if conditions.LinkStatus == int64(0) {
-		db1 = db1.Where("is_review = 0").Find(&LinkInfos)
-	} else {
-		db1 = db1.Where("is_ok = 1").Find(&LinkInfos)
-	}
-	LinkMap := make(map[string]gorm_model.YounggeeLinkInfo)
-	for _, LinkInfo := range LinkInfos {
-		LinkMap[LinkInfo.TaskID] = LinkInfo
-	}
-	// 查询总数
-	var totalLink int64
-	if err := db1.Count(&totalLink).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	var misNum int64
-	if totalLink > totalTask {
-		misNum = totalLink - totalTask
-	} else {
-		misNum = totalTask - totalLink
-	}
-	logrus.Println("totalLink,totalTalent,misNum:", totalLink, totalTask, misNum)
-
-	// 查询该页数据
-	limit := pageSize + misNum
-	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 TaskLinks []*http_model.TaskLink
-	var taskLinks []*http_model.TaskLinkInfo
-	var newTaskLinks []*http_model.TaskLinkInfo
-	for _, taskId := range taskIds {
-		TaskLink := new(http_model.TaskLink)
-		TaskLink.Talent = taskMap[taskId]
-		TaskLink.Link = LinkMap[taskId]
-		TaskLinks = append(TaskLinks, TaskLink)
-	}
-
-	taskLinks = pack.TaskLinkToTaskInfo(TaskLinks)
-
-	for _, v := range taskLinks {
-		if platform_nickname == "" {
-			newTaskLinks = append(newTaskLinks, v)
-		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
-			newTaskLinks = append(newTaskLinks, v)
-		} else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
-			newTaskLinks = append(newTaskLinks, v)
-		} else {
-			totalTask--
-		}
-	}
-	return newTaskLinks, totalTask, nil
-}
-
-// LinkOpinion 提交意见
-func LinkOpinion(ctx context.Context, TaskID string, ReviseOpinion string) error {
-	db := GetReadDB(ctx)
-	err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ? and is_review = 0", TaskID).Updates(map[string]interface{}{"revise_opinion": ReviseOpinion, "reject_at": time.Now(), "is_review": 1}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
-		return err
-	}
-	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{LinkStatus: 3}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
-		return err
-	}
-	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 11}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-// AcceptLink 同意链接
-func AcceptLink(ctx context.Context, TaskIDs []string) error {
-	db := GetReadDB(ctx)
-	err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id in ?  and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 1, "is_review": 1, "agree_at": time.Now()}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
-		return err
-	}
-	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{LinkStatus: 5}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
-		return err
-	}
-	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 13}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-// GetSpecialTaskLinkList 专项任务-查询上传链接的task list
-func GetSpecialTaskLinkList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskLinkInfo, int64, error) {
-	db := GetReadDB(ctx)
-	// 查询Task表信息
-	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
-	// 根据Project条件过滤
-	conditionType := reflect.TypeOf(conditions).Elem()
-	conditionValue := reflect.ValueOf(conditions).Elem()
-	var platform_nickname string = ""
-	for i := 0; i < conditionType.NumField(); i++ {
-		field := conditionType.Field(i)
-		tag := field.Tag.Get("condition")
-		value := conditionValue.FieldByName(field.Name)
-		if tag == "link_status" {
-			fmt.Printf("link %+v", value.Interface() == int64(0))
-			if value.Interface() == int64(0) {
-				db = db.Where("task_stage = 12")
-			} else {
-				db = db.Where("task_stage > 12 and task_stage <> 16")
-			}
-			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)
-
-	// 查询任务id
-	var taskIds []string
-	taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
-	for _, taskInfo := range taskInfos {
-		taskIds = append(taskIds, taskInfo.TaskId)
-		taskMap[taskInfo.TaskId] = taskInfo
-	}
-	db1 := GetReadDB(ctx)
-	db1 = db1.Debug().Model(gorm_model.YounggeeLinkInfo{})
-
-	var LinkInfos []gorm_model.YounggeeLinkInfo
-	db1 = db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_submit=? ", taskIds, 1)
-	if conditions.LinkStatus == int64(0) {
-		db1 = db1.Where("is_review = 0").Find(&LinkInfos)
-	} else {
-		db1 = db1.Where("is_ok = 1").Find(&LinkInfos)
-	}
-	LinkMap := make(map[string]gorm_model.YounggeeLinkInfo)
-	for _, LinkInfo := range LinkInfos {
-		LinkMap[LinkInfo.TaskID] = LinkInfo
-	}
-	// 查询总数
-	var totalLink int64
-	if err := db1.Count(&totalLink).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	var misNum int64
-	if totalLink > totalTask {
-		misNum = totalLink - totalTask
-	} else {
-		misNum = totalTask - totalLink
-	}
-	//logrus.Println("totalLink,totalTalent,misNum:", totalLink, totalTask, misNum)
-
-	// 查询该页数据
-	limit := pageSize + misNum
-	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 TaskLinks []*http_model.SpecialTaskLink
-	var taskLinks []*http_model.SpecialTaskLinkInfo
-	var newTaskLinks []*http_model.SpecialTaskLinkInfo
-	for _, taskId := range taskIds {
-		TaskLink := new(http_model.SpecialTaskLink)
-		TaskLink.Talent = taskMap[taskId]
-		TaskLink.Link = LinkMap[taskId]
-		TaskLinks = append(TaskLinks, TaskLink)
-	}
-
-	taskLinks = pack.SpecialTaskLinkToTaskInfo(TaskLinks)
-
-	for _, v := range taskLinks {
-		if platform_nickname == "" {
-			newTaskLinks = append(newTaskLinks, v)
-		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
-			newTaskLinks = append(newTaskLinks, v)
-		} else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
-			newTaskLinks = append(newTaskLinks, v)
-		} else {
-			totalTask--
-		}
-	}
-	return newTaskLinks, totalTask, nil
-}
+package db
+
+import (
+	"context"
+	"fmt"
+	"reflect"
+	"strconv"
+	"strings"
+	"time"
+	"youngee_m_api/model/common_model"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/pack"
+	"youngee_m_api/util"
+
+	"github.com/caixw/lib.go/conv"
+	"github.com/sirupsen/logrus"
+)
+
+// GetTaskLinkList 查询上传链接的task list
+func GetTaskLinkList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskLinkInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询Task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	var platform_nickname string = ""
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if tag == "link_status" {
+			fmt.Printf("link %+v", value.Interface() == int64(0))
+			if value.Interface() == int64(0) {
+				db = db.Where("task_stage = 12")
+			} else {
+				db = db.Where("task_stage > 12 and task_stage <> 16")
+			}
+			continue
+		} else if !util.IsBlank(value) {
+			if tag == "platform_nickname" {
+				platform_nickname = fmt.Sprintf("%v", value.Interface())
+				continue
+			} else if tag == "project_id" || tag == "strategy_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)
+
+	// 查询任务id
+	var taskIds []string
+	taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
+	for _, taskInfo := range taskInfos {
+		taskIds = append(taskIds, taskInfo.TaskId)
+		taskMap[taskInfo.TaskId] = taskInfo
+	}
+	db1 := GetReadDB(ctx)
+	db1 = db1.Debug().Model(gorm_model.YounggeeLinkInfo{})
+
+	var LinkInfos []gorm_model.YounggeeLinkInfo
+	db1 = db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_submit=? ", taskIds, 1)
+	if conditions.LinkStatus == int64(0) {
+		db1 = db1.Where("is_review = 0").Find(&LinkInfos)
+	} else {
+		db1 = db1.Where("is_ok = 1").Find(&LinkInfos)
+	}
+	LinkMap := make(map[string]gorm_model.YounggeeLinkInfo)
+	for _, LinkInfo := range LinkInfos {
+		LinkMap[LinkInfo.TaskID] = LinkInfo
+	}
+	// 查询总数
+	var totalLink int64
+	if err := db1.Count(&totalLink).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	var misNum int64
+	if totalLink > totalTask {
+		misNum = totalLink - totalTask
+	} else {
+		misNum = totalTask - totalLink
+	}
+	logrus.Println("totalLink,totalTalent,misNum:", totalLink, totalTask, misNum)
+
+	// 查询该页数据
+	limit := pageSize + misNum
+	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 TaskLinks []*http_model.TaskLink
+	var taskLinks []*http_model.TaskLinkInfo
+	var newTaskLinks []*http_model.TaskLinkInfo
+	for _, taskId := range taskIds {
+		TaskLink := new(http_model.TaskLink)
+		TaskLink.Talent = taskMap[taskId]
+		TaskLink.Link = LinkMap[taskId]
+		TaskLinks = append(TaskLinks, TaskLink)
+	}
+
+	taskLinks = pack.TaskLinkToTaskInfo(TaskLinks)
+
+	for _, v := range taskLinks {
+		if platform_nickname == "" {
+			newTaskLinks = append(newTaskLinks, v)
+		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
+			newTaskLinks = append(newTaskLinks, v)
+		} else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
+			newTaskLinks = append(newTaskLinks, v)
+		} else {
+			totalTask--
+		}
+	}
+	return newTaskLinks, totalTask, nil
+}
+
+//// LinkOpinion 提交意见
+//func LinkOpinion(ctx context.Context, TaskID string, ReviseOpinion string) error {
+//	db := GetReadDB(ctx)
+//	err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ? and is_review = 0", TaskID).Updates(map[string]interface{}{"revise_opinion": ReviseOpinion, "reject_at": time.Now(), "is_review": 1}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
+//		return err
+//	}
+//	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{LinkStatus: 3}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
+//		return err
+//	}
+//	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 11}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
+//		return err
+//	}
+//	return nil
+//}
+
+// LinkOpinion 提交意见
+func LinkOpinion(ctx context.Context, TaskID string, ReviseOpinion string, operatorid string, operatetype int, projectid string) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ? and is_review = 0", TaskID).Updates(map[string]interface{}{"revise_opinion": ReviseOpinion, "reject_at": time.Now(), "is_review": 1, "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
+		return err
+	}
+	var project gorm_model.ProjectInfo
+	err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectid).Find(&project).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
+		return err
+	}
+
+	var link_default gorm_model.InfoAutoTask
+	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskID).Find(&link_default).Error
+	if err != nil {
+		return err
+	}
+	duration := time.Duration(link_default.LinkBreach) * time.Hour
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{LinkStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 11}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// LinkOpinion 提交意见
+func LocalLinkOpinion(ctx context.Context, TaskID string, ReviseOpinion string, operatorid string, operatetype int, projectid string) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ? and is_review = 0", TaskID).Updates(map[string]interface{}{"revise_opinion": ReviseOpinion, "reject_at": time.Now(), "is_review": 1, "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
+		return err
+	}
+	var project gorm_model.YounggeeLocalLifeInfo
+	err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", projectid).Find(&project).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
+		return err
+	}
+
+	var link_default gorm_model.InfoAutoTask
+	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskId).Find(&link_default).Error
+	if err != nil {
+		return err
+	}
+	duration := time.Duration(link_default.LinkBreach) * time.Hour
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeLocalTaskInfo{LinkStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeLocalTaskInfo{TaskStage: 11}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+//// AcceptLink 同意链接
+//func AcceptLink(ctx context.Context, TaskIDs []string) error {
+//	db := GetReadDB(ctx)
+//	err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id in ?  and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 1, "is_review": 1, "agree_at": time.Now()}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
+//		return err
+//	}
+//	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{LinkStatus: 5}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
+//		return err
+//	}
+//	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 13}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
+//		return err
+//	}
+//	return nil
+//}
+
+// AcceptLink 同意链接
+func AcceptLink(ctx context.Context, TaskIDs []string, operatorid string, operatetype int, projectid string, isspecial int) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id in ?  and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 1, "is_review": 1, "agree_at": time.Now(), "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
+		return err
+	}
+	var project gorm_model.ProjectInfo
+	err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectid).Find(&project).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
+		return err
+	}
+	taskstages := 13
+	nextstage := [6]int{0, 0, 0, 0, 0, 0} // 数组长度为6,表示6种工具 4,9,11,13
+	if isspecial == 1 {
+
+		toolList := strings.Split(project.Tools, ",")
+		for _, tool := range toolList {
+			// 将 tool 转换为整数
+			if t, err := strconv.Atoi(tool); err == nil && t >= 0 && t <= len(nextstage) {
+				nextstage[t-1] = 1
+			}
+		}
+		for i := 4; i < len(nextstage); i++ { // 从位置1开始
+			if nextstage[i] == 1 {
+				switch i {
+				case 4:
+					taskstages = 13
+				case 5:
+					taskstages = 15
+				}
+				break
+			}
+		}
+	}
+	var data_default gorm_model.InfoAutoTask
+	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskID).Find(&data_default).Error
+	if err != nil {
+		return err
+	}
+	duration := time.Duration(data_default.CaseCloseDefault) * time.Hour
+
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{LinkStatus: 5, CurBreakAt: time.Now().Add(duration)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{TaskStage: taskstages}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// AcceptLink 同意链接
+func LocalAcceptLink(ctx context.Context, TaskIDs []string, operatorid string, operatetype int, projectid string, isspecial int) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id in ?  and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 1, "is_review": 1, "agree_at": time.Now(), "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
+		return err
+	}
+	var project gorm_model.YounggeeLocalLifeInfo
+	err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", projectid).Find(&project).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Find YounggeeLocalLifeInfo error,err:%+v", err)
+		return err
+	}
+	taskstages := 13
+	nextstage := [6]int{0, 0, 0, 0, 0, 0} // 数组长度为6,表示6种工具 4,9,11,13
+	if isspecial == 1 {
+
+		toolList := strings.Split(project.Tools, ",")
+		for _, tool := range toolList {
+			// 将 tool 转换为整数
+			if t, err := strconv.Atoi(tool); err == nil && t >= 0 && t <= len(nextstage) {
+				nextstage[t-1] = 1
+			}
+		}
+		for i := 4; i < len(nextstage); i++ { // 从位置1开始
+			if nextstage[i] == 1 {
+				switch i {
+				case 4:
+					taskstages = 13
+				case 5:
+					taskstages = 15
+				}
+				break
+			}
+		}
+	}
+
+	var data_default gorm_model.InfoAutoTask
+	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskId).Find(&data_default).Error
+	if err != nil {
+		return err
+	}
+	duration := time.Duration(data_default.CaseCloseDefault) * time.Hour
+
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeLocalTaskInfo{LinkStatus: 5, CurBreakAt: time.Now().Add(duration)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeLocalTaskInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeLocalTaskInfo{TaskStage: taskstages}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeLocalTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// RejectLink 不同意链接
+func RejectLink(ctx context.Context, TaskIDs []string, operatorid string, operatetype int, projectid string) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id in ?  and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 0, "is_review": 1, "reject_at": time.Now(), "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
+		return err
+	}
+	var project gorm_model.ProjectInfo
+	err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectid).Find(&project).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
+		return err
+	}
+
+	var link_default gorm_model.InfoAutoTask
+	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskID).Find(&link_default).Error
+	if err != nil {
+		return err
+	}
+	duration := time.Duration(link_default.LinkBreach) * time.Hour
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{LinkStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 11}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// RejectLink 不同意链接
+func LocalRejectLink(ctx context.Context, TaskIDs []string, operatorid string, operatetype int, projectid string) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id in ?  and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 0, "is_review": 1, "reject_at": time.Now(), "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YounggeeLinkInfo error,err:%+v", err)
+		return err
+	}
+	var project gorm_model.YounggeeLocalLifeInfo
+	err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", projectid).Find(&project).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
+		return err
+	}
+
+	var link_default gorm_model.InfoAutoTask
+	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskId).Find(&link_default).Error
+	if err != nil {
+		return err
+	}
+	duration := time.Duration(link_default.LinkBreach) * time.Hour
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeLocalTaskInfo{LinkStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeLocalTaskInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeLocalTaskInfo{TaskStage: 11}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Link db] Update YoungeeLocalTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// GetSpecialTaskLinkList 专项任务-查询上传链接的task list
+func GetSpecialTaskLinkList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskLinkInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询Task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	var platform_nickname string = ""
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if tag == "link_status" {
+			fmt.Printf("link %+v", value.Interface() == int64(0))
+			if value.Interface() == int64(0) {
+				db = db.Where("task_stage = 12")
+			} else {
+				db = db.Where("task_stage > 12 and task_stage <> 16")
+			}
+			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)
+
+	// 查询任务id
+	var taskIds []string
+	taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
+	for _, taskInfo := range taskInfos {
+		taskIds = append(taskIds, taskInfo.TaskId)
+		taskMap[taskInfo.TaskId] = taskInfo
+	}
+	db1 := GetReadDB(ctx)
+	db1 = db1.Debug().Model(gorm_model.YounggeeLinkInfo{})
+
+	var LinkInfos []gorm_model.YounggeeLinkInfo
+	db1 = db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id IN ? AND is_submit=? ", taskIds, 1)
+	if conditions.LinkStatus == int64(0) {
+		db1 = db1.Where("is_review = 0").Find(&LinkInfos)
+	} else {
+		db1 = db1.Where("is_ok = 1").Find(&LinkInfos)
+	}
+	LinkMap := make(map[string]gorm_model.YounggeeLinkInfo)
+	for _, LinkInfo := range LinkInfos {
+		LinkMap[LinkInfo.TaskID] = LinkInfo
+	}
+	// 查询总数
+	var totalLink int64
+	if err := db1.Count(&totalLink).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	var misNum int64
+	if totalLink > totalTask {
+		misNum = totalLink - totalTask
+	} else {
+		misNum = totalTask - totalLink
+	}
+	//logrus.Println("totalLink,totalTalent,misNum:", totalLink, totalTask, misNum)
+
+	// 查询该页数据
+	limit := pageSize + misNum
+	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 TaskLinks []*http_model.SpecialTaskLink
+	var taskLinks []*http_model.SpecialTaskLinkInfo
+	var newTaskLinks []*http_model.SpecialTaskLinkInfo
+	for _, taskId := range taskIds {
+		TaskLink := new(http_model.SpecialTaskLink)
+		TaskLink.Talent = taskMap[taskId]
+		TaskLink.Link = LinkMap[taskId]
+		TaskLinks = append(TaskLinks, TaskLink)
+	}
+
+	taskLinks = pack.SpecialTaskLinkToTaskInfo(TaskLinks)
+
+	for _, v := range taskLinks {
+		if platform_nickname == "" {
+			newTaskLinks = append(newTaskLinks, v)
+		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
+			newTaskLinks = append(newTaskLinks, v)
+		} else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
+			newTaskLinks = append(newTaskLinks, v)
+		} else {
+			totalTask--
+		}
+	}
+	return newTaskLinks, totalTask, nil
+}

+ 713 - 0
db/locallife_task.go

@@ -0,0 +1,713 @@
+package db
+
+import (
+	"context"
+	"errors"
+	"fmt"
+	"github.com/issue9/conv"
+	"gorm.io/gorm"
+	"strconv"
+	"strings"
+	"time"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+)
+
+func GetLocallifetaskList(ctx context.Context, request http_model.GetLocalTaskListRequest) (*http_model.GetLocalTaskListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
+	query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_status = ?", request.ProjectId, request.CoopType)
+	fmt.Println(query)
+	// 构建查询条件
+	if request.FeeFrom != nil {
+		query = query.Where("fee_form = ?", request.FeeFrom)
+	}
+	if request.Type != nil {
+		switch *request.Type {
+		case 1:
+			query = query.Where("supplier_id = 0 AND supplier_status = 0")
+		case 2:
+			query = query.Where("supplier_id !=0 AND supplier_status = 2")
+		}
+	}
+	if request.TalentFromList != "" {
+		citylist := strings.Split(request.TalentFromList, ",")
+		query = query.Where("city in ?", citylist)
+	}
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.LocaLTaskInfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		var Time time.Time
+		switch request.CoopType {
+		case 1:
+			Time = task.CreateDate
+		case 2:
+			Time = task.SelectDate //2 signedtime
+		case 3:
+			Time = task.CompleteDate
+		}
+		boperator := getBOperator(db, task.BOperator, task.BOperatorType)
+		nickname, headurl := getTalentinfo(db, task.TalentId)
+		Iscoop := getIscoop(db, task.TalentId, request.EnterPriseId)
+		response := &http_model.LocaLTaskInfo{
+			TaskId:             task.TaskId,
+			ProjectId:          task.LocalId,
+			TalentId:           task.TalentId,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			Boperator:          boperator,
+			CreateAt:           Time,
+			NickName:           nickname,
+			HeadUrl:            headurl,
+			ISCoop:             Iscoop,
+			Sprojectid:         task.SLocalLifeId,
+			City:               task.City,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+	}
+
+	return &http_model.GetLocalTaskListData{
+		TaskList: taskInfoPointers,
+		Total:    conv.MustString(total, ""),
+	}, nil
+}
+
+func PassLocalTaskCoop(ctx context.Context, req http_model.PasslocalTaskCoopRequest) (bool, error) {
+	db := GetReadDB(ctx)
+	var count int64
+	fmt.Println("task_ids: ", req.TaskIds)
+	err := db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ? AND task_stage = 1", req.TaskIds).Count(&count).Error
+
+	fmt.Println("count: ", count)
+	if err != nil {
+		return false, err
+	}
+	if int64(len(req.TaskIds)) == 0 || count != int64(len(req.TaskIds)) {
+		return false, errors.New("任务id有误")
+	}
+
+	// 2. 查询任务对应达人id(用于生成达人消息)
+	var talentIds []string
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ?", req.TaskIds).Select("talent_id").Find(&talentIds).Error
+	if err != nil {
+		return false, err
+	}
+
+	// 3. 查询任务对应project名称(用于生成达人消息)
+	var project gorm_model.YounggeeLocalLifeInfo
+	err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", req.ProjectId).Find(&project).Error
+	if err != nil {
+		return false, err
+	}
+
+	var taskstages int
+	if project.TaskForm == 1 {
+		taskstages = 4
+	} else {
+		taskstages = 9
+	}
+
+	nextstage := [6]int{0, 0, 0, 0, 0, 0} // 数组长度为6,表示6种工具 4,9,11,13
+	if req.IsSpecial == 1 {
+		toolList := strings.Split(project.Tools, ",")
+		for _, tool := range toolList {
+			// 将 tool 转换为整数
+			if t, err := strconv.Atoi(tool); err == nil && t >= 0 && t <= len(nextstage) {
+				nextstage[t-1] = 1
+			}
+		}
+		fmt.Println(nextstage)
+		for i := 1; i < len(nextstage); i++ { // 从位置1开始
+			if nextstage[i] == 1 {
+				switch i {
+				case 1:
+					taskstages = 4
+				case 2:
+					taskstages = 9
+				case 3:
+					taskstages = 11
+				case 4:
+					taskstages = 13
+				case 5:
+					taskstages = 15
+				}
+				break
+			}
+		}
+	}
+
+	//4.根据达人来源改变状态、阶段、数目
+	var tasks []gorm_model.YoungeeLocalTaskInfo
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ? AND task_stage = 1", req.TaskIds).Find(&tasks).Error
+	if err != nil {
+		return false, err
+	}
+	err = db.Transaction(func(tx *gorm.DB) error {
+		// 2. 修改任务状态和任务阶段
+		for _, taskInfo := range tasks {
+			if taskInfo.SupplierId != 0 && taskInfo.SupplierStatus == 2 { //服务商招募数量+1
+				updateData := gorm_model.YoungeeLocalTaskInfo{
+					TaskStage:     taskstages,
+					TaskStatus:    2,
+					UpdateAt:      time.Now(),
+					BOperator:     req.OperatorId,
+					BOperatorType: req.OperateType,
+					SelectDate:    time.Now(),
+				}
+				err = tx.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ? AND task_stage = 1", taskInfo.TaskId).Updates(updateData).Error
+				if err != nil {
+					return err
+				}
+
+				//project招募数+1,预估成本+服务商价格
+				var projectinfo gorm_model.YounggeeLocalLifeInfo
+				err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", req.ProjectId).Find(&projectinfo).Error
+				if err != nil {
+					return err
+				}
+				projectinfo.RecruitNum += 1
+				projectinfo.EstimatedCost += taskInfo.SupportFee
+				err = tx.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ? ", req.ProjectId).Updates(projectinfo).Error
+				if err != nil {
+					return err
+				}
+				//服务商s_project已招募人数+1改成s_locallife
+				var sprojectinfo gorm_model.YounggeeSProjectInfo
+				err = db.Model(gorm_model.YounggeeSProjectInfo{}).Where(" s_project_id =?", req.SProjectId).Find(&sprojectinfo).Error
+				if err != nil {
+					return err
+				}
+				sprojectinfo.RecruitNum += 1
+				fmt.Println("......", projectinfo.RecruitNum)
+				err = tx.Model(gorm_model.YounggeeSProjectInfo{}).Where(" s_project_id =?", req.SProjectId).Updates(sprojectinfo).Error
+				if err != nil {
+					return err
+				} //
+
+			}
+
+			//if project.TaskForm != 1 { //素材分发
+			//	var draft_default gorm_model.InfoAutoTask
+			//	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskId).Find(&draft_default).Error
+			//	if err != nil {
+			//		return err
+			//	}
+			//	duration := time.Duration(draft_default.DraftDefault) * time.Hour
+			//	upbreakdate := gorm_model.YoungeeLocalTaskInfo{
+			//		CurBreakAt: time.Now().Add(duration),
+			//	}
+			//	err = tx.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ? ", taskInfo.TaskId).Updates(upbreakdate).Error
+			//	if err != nil {
+			//		return err
+			//	}
+			//}
+
+			if taskInfo.SupplierId == 0 && taskInfo.SupplierStatus == 0 { //来源于公海
+				updateData := gorm_model.YoungeeLocalTaskInfo{
+					TaskStage:     taskstages,
+					TaskStatus:    2,
+					UpdateAt:      time.Now(),
+					BOperator:     req.OperatorId,
+					BOperatorType: req.OperateType,
+					SelectDate:    time.Now(),
+				}
+				err = tx.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ? AND task_stage = 1", taskInfo.TaskId).Updates(updateData).Error
+				if err != nil {
+					return err
+				}
+
+				//project招募数+1
+				var projectinfo gorm_model.YounggeeLocalLifeInfo
+				err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", req.ProjectId).Find(&projectinfo).Error
+				if err != nil {
+					return err
+				}
+				projectinfo.RecruitNum += 1
+				err = tx.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ? ", req.ProjectId).Updates(projectinfo).Error
+				if err != nil {
+					return err
+				}
+			}
+
+		}
+		// 4. 生成达人消息
+		for _, talendId := range talentIds {
+			err = CreateMessage(ctx, 1, 1, talendId, project.LocalName)
+			if err != nil {
+				return err
+			}
+		}
+		// 返回 nil 提交事务
+		return nil
+	})
+	if err != nil {
+		return false, err
+	}
+	return true, nil
+}
+
+func RefuseLocalTaskCoop(ctx context.Context, req http_model.RefuselocalTaskCoopRequest) (bool, error) {
+	db := GetWriteDB(ctx)
+	// 1. 校验
+	var count int64
+	err := db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ? AND task_stage = 1", req.TaskIds).Count(&count).Error
+	if err != nil {
+		return false, err
+	}
+	if count != int64(len(req.TaskIds)) {
+		return false, errors.New("任务id有误")
+	}
+
+	// 2. 查询任务对应达人id(用于生成达人消息)
+	var talentIds []string
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ?", req.TaskIds).Select("talent_id").Find(&talentIds).Error
+	if err != nil {
+		return false, err
+	}
+
+	var tasks []gorm_model.YoungeeLocalTaskInfo
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ? AND task_stage = 1", req.TaskIds).Find(&tasks).Error
+
+	err = db.Transaction(func(tx *gorm.DB) error {
+		// 2. 修改任务状态和任务阶段
+		for _, taskInfo := range tasks {
+			updateData := gorm_model.YoungeeLocalTaskInfo{
+				TaskStage:     3,
+				TaskStatus:    3,
+				UpdateAt:      time.Now(),
+				BOperator:     req.OperatorId,
+				BOperatorType: req.OperateType,
+				CompleteDate:  time.Now(),
+			}
+			err = tx.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ? AND task_stage = 1", taskInfo.TaskId).Updates(updateData).Error
+		}
+		if err != nil {
+			return err
+		}
+
+		// 返回 nil 提交事务
+		return nil
+	})
+	if err != nil {
+		return false, err
+	}
+	return true, nil
+}
+
+func UpdateLocallife(ctx context.Context, project gorm_model.YounggeeLocalLifeInfo) (*string, error) {
+	db := GetReadDB(ctx)
+	err := db.Model(&project).Updates(project).Error
+	if err != nil {
+		return nil, err
+	}
+	return &project.LocalId, nil
+}
+
+func GetLocalPreSketchList(ctx context.Context, request http_model.LocalPreSketchListRequest) (*http_model.GetLocalSketchTaskListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
+	query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.ScriptStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.LocalTasksketchInfo, 0, len(projecrtaskinfo))
+
+	for _, task := range projecrtaskinfo {
+		nickname, headurl := getTalentinfo(db, task.TalentId)
+		Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
+		taskinfo := &http_model.LocaLTaskInfo{
+			TaskId:             task.TaskId,
+			ProjectId:          task.LocalId,
+			TalentId:           task.TalentId,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			NickName:           nickname,
+			HeadUrl:            headurl,
+			ISCoop:             Iscoop,
+			City:               task.City,
+		}
+		response := &http_model.LocalTasksketchInfo{
+			Task: taskinfo,
+			DDl:  task.CurBreakAt,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GetLocalSketchTaskListData{
+		TasksketchList: taskInfoPointers,
+		Total:          conv.MustString(total, ""),
+	}, nil
+}
+
+func GetLocalSketchList(ctx context.Context, request http_model.LocalTasksketchlistRequest) (*http_model.GetsketchlocaltaskListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
+	query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.ScriptStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.LocalTasksketchinfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		nickname, headurl := getTalentinfo(db, task.TalentId)
+		taskinfo := &http_model.LocaLTaskInfo{
+			TaskId:             task.TaskId,
+			ProjectId:          task.LocalId,
+			TalentId:           task.TalentId,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			NickName:           nickname,
+			HeadUrl:            headurl,
+			City:               task.City,
+		}
+		var sketchinfo gorm_model.YounggeeSketchInfo
+		err := db.Model(&gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_review = 0", task.TaskId).First(&sketchinfo).Error
+		if err != nil {
+			return nil, err
+		}
+		boperator := getBOperator(db, task.BOperator, task.BOperatorType)
+		response := &http_model.LocalTasksketchinfo{
+			Task:     taskinfo,
+			SketchId: sketchinfo.SketchID,
+			SubmitAt: sketchinfo.SubmitAt,
+			AgreeAt:  sketchinfo.AgreeAt,
+			Operator: boperator,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GetsketchlocaltaskListData{
+		LocalTasksketchList: taskInfoPointers,
+		Total:               conv.MustString(total, ""),
+	}, nil
+}
+
+func GetLocalPreLinkList(ctx context.Context, request http_model.LocalPreLinkListRequest) (*http_model.GetLocalPreLinkListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
+	query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.LinkStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.LocalTasklinkinfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		nickname, headurl := getTalentinfo(db, task.TalentId)
+		Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
+		taskinfo := &http_model.LocaLTaskInfo{
+			TaskId:             task.TaskId,
+			ProjectId:          task.LocalId,
+			TalentId:           task.TalentId,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			NickName:           nickname,
+			HeadUrl:            headurl,
+			ISCoop:             Iscoop,
+			City:               task.City,
+		}
+		response := &http_model.LocalTasklinkinfo{
+			Task: taskinfo,
+			DDl:  task.CurBreakAt,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GetLocalPreLinkListData{
+		TasklinkList: taskInfoPointers,
+		Total:        conv.MustString(total, ""),
+	}, nil
+}
+
+func GetLocalLinkList(ctx context.Context, request http_model.LocalTaskLinklistRequest) (*http_model.GetLocalTaskLinkListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
+	query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.LinkStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.LocalTaskLinkinfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		nickname, headurl := getTalentinfo(db, task.TalentId)
+		Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
+		taskinfo := &http_model.LocaLTaskInfo{
+			TaskId:             task.TaskId,
+			ProjectId:          task.LocalId,
+			TalentId:           task.TalentId,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			NickName:           nickname,
+			HeadUrl:            headurl,
+			ISCoop:             Iscoop,
+			City:               task.City,
+		}
+		var linkinfo gorm_model.YounggeeLinkInfo
+		err := db.Model(&gorm_model.YounggeeLinkInfo{}).Where("task_id = ? and is_review = 0", task.TaskId).First(&linkinfo).Error
+		if err != nil {
+			return nil, err
+		}
+		boperator := getBOperator(db, task.BOperator, task.BOperatorType)
+		response := &http_model.LocalTaskLinkinfo{
+			Task:     taskinfo,
+			LinkId:   linkinfo.LinkID,
+			SubmitAt: linkinfo.SubmitAt,
+			AgreeAt:  linkinfo.AgreeAt,
+			LinkUrl:  linkinfo.LinkUrl,
+			PhotoUrl: linkinfo.PhotoUrl,
+			Operator: boperator,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GetLocalTaskLinkListData{
+		LocalTaskLinklist: taskInfoPointers,
+		Total:             conv.MustString(total, ""),
+	}, nil
+}
+
+func GetLocalPreDataList(ctx context.Context, request http_model.LocalPreDataListRequest) (*http_model.GetLocalPreDataListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
+	query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.DataStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.LocalTaskdatainfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		nickname, headurl := getTalentinfo(db, task.TalentId)
+		Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
+		taskinfo := &http_model.LocaLTaskInfo{
+			TaskId:             task.TaskId,
+			ProjectId:          task.LocalId,
+			TalentId:           task.TalentId,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			NickName:           nickname,
+			HeadUrl:            headurl,
+			ISCoop:             Iscoop,
+			City:               task.City,
+		}
+		response := &http_model.LocalTaskdatainfo{
+			Task: taskinfo,
+			DDl:  task.CurBreakAt,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GetLocalPreDataListData{
+		TaskdataList: taskInfoPointers,
+		Total:        conv.MustString(total, ""),
+	}, nil
+}
+
+func GetLocalDataList(ctx context.Context, request http_model.LocalTaskDatalistRequest) (*http_model.GetLocalTaskDatalistData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeLocalTaskInfo
+	query := db.Model(&gorm_model.YoungeeLocalTaskInfo{}).Where("local_id = ? AND task_stage = ?", request.ProjectId, request.DataStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.LocalTaskDatainfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		nickname, headurl := getTalentinfo(db, task.TalentId)
+		Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
+		taskinfo := &http_model.LocaLTaskInfo{
+			TaskId:             task.TaskId,
+			ProjectId:          task.LocalId,
+			TalentId:           task.TalentId,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			NickName:           nickname,
+			HeadUrl:            headurl,
+			ISCoop:             Iscoop,
+			City:               task.City,
+		}
+		var datainfo gorm_model.YounggeeDataInfo
+		err := db.Model(&gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_review = 0", task.TaskId).First(&datainfo).Error
+		if err != nil {
+			return nil, err
+		}
+		boperator := getBOperator(db, task.BOperator, task.BOperatorType)
+		response := &http_model.LocalTaskDatainfo{
+			Task:          taskinfo,
+			DataId:        datainfo.DataID,
+			SubmitAt:      datainfo.SubmitAt,
+			AgreeAt:       datainfo.AgreeAt,
+			PhotoUrl:      datainfo.PhotoUrl,
+			PlayNumber:    datainfo.PlayNumber,
+			LikeNumber:    datainfo.LikeNumber,
+			CollectNumber: datainfo.CollectNumber,
+			CommentNumber: datainfo.CommentNumber,
+			SettleAmount:  task.SettleAmount,
+			Breakrate:     task.SketchBreakRate + task.LinkBreakRate + task.DataBreakRate,
+			Operator:      boperator,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GetLocalTaskDatalistData{
+		LocalTaskDatalist: taskInfoPointers,
+		Total:             conv.MustString(total, ""),
+	}, nil
+}

+ 16 - 0
db/project.go

@@ -2,6 +2,7 @@ package db
 
 import (
 	"context"
+	"errors"
 	"fmt"
 	"log"
 	"reflect"
@@ -466,3 +467,18 @@ func ProjectReviewNumber(ctx context.Context) (*http_model.Reviewnums, error) {
 	ReviewNums.ReviewNums = reviewNums
 	return ReviewNums, err
 }
+
+func GetProjectIdById(ctx context.Context, projectId string) (*gorm_model.ProjectInfo, error) {
+	db := GetWriteDB(ctx)
+	projectInfo := gorm_model.ProjectInfo{}
+	whereCondition := gorm_model.ProjectInfo{ProjectID: projectId}
+	result := db.Where(&whereCondition).First(&projectInfo)
+	if result.Error != nil {
+		if errors.Is(result.Error, gorm.ErrRecordNotFound) {
+			return nil, nil
+		} else {
+			return nil, result.Error
+		}
+	}
+	return &projectInfo, nil
+}

+ 766 - 0
db/project_task.go

@@ -0,0 +1,766 @@
+package db
+
+import (
+	"context"
+	"errors"
+	"fmt"
+	"github.com/issue9/conv"
+	"gorm.io/gorm"
+	"strconv"
+	"strings"
+	"time"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+)
+
+func GetProjecttaskList(ctx context.Context, request http_model.GetTaskListRequest) (*http_model.GetTaskListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_status = ?", request.ProjectId, request.CoopType)
+
+	// 构建查询条件
+	if request.FeeFrom != nil {
+		query = query.Where("fee_form = ?", request.FeeFrom)
+	}
+	if request.Type != nil {
+		switch *request.Type {
+		case 1:
+			query = query.Where("supplier_id = 0 AND supplier_status = 0")
+		case 2:
+			query = query.Where("supplier_id !=0 AND supplier_status = 2")
+		}
+	}
+
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+
+	taskInfoPointers := make([]*http_model.TaskInfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		var Time time.Time
+		switch request.CoopType {
+		case 1:
+			Time = task.CreateDate
+		case 2:
+			Time = task.SelectDate //2 signedtime
+		case 3:
+			Time = task.CompleteDate
+		}
+		boperator := getBOperator(db, task.BOperator, task.BOperatorType)
+		nickname, headurl := getTalentinfo(db, task.TalentId)
+		Iscoop := getIscoop(db, task.TalentId, request.EnterPriseId)
+		response := &http_model.TaskInfo{
+			TaskId:             task.TaskId,
+			ProjectId:          task.ProjectId,
+			TalentId:           task.TalentId,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			SType:              stype(db, task.SupplierId, task.SupplierStatus),
+			Boperator:          boperator,
+			CreateAt:           Time,
+			NickName:           nickname,
+			HeadUrl:            headurl,
+			ISCoop:             Iscoop,
+			Sprojectid:         task.SProjectId,
+			City:               task.City,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+	}
+
+	return &http_model.GetTaskListData{
+		TaskList: taskInfoPointers,
+		Total:    conv.MustString(total, ""),
+	}, nil
+}
+
+func getBOperator(db *gorm.DB, bOperatorID string, bOperatorType int) string {
+	if bOperatorID == "" {
+		return ""
+	}
+	if bOperatorType == 1 {
+		var boperatorinfo gorm_model.Enterprise
+		if err := db.Where(gorm_model.Enterprise{EnterpriseID: bOperatorID}).First(&boperatorinfo).Error; err != nil {
+			return ""
+		}
+		return boperatorinfo.BusinessName
+	}
+	if bOperatorType == 2 {
+		var bsubaccount gorm_model.YounggeeSubAccount
+		if err := db.Where(gorm_model.YounggeeSubAccount{SubAccountId: conv.MustInt(bOperatorID)}).First(&bsubaccount).Error; err != nil {
+			return ""
+		}
+		return bsubaccount.SubAccountName
+	}
+	if bOperatorType == 3 {
+		return "管理后台"
+	}
+	return ""
+}
+
+func getTalentinfo(db *gorm.DB, talentID string) (string, string) {
+	var talentinfo gorm_model.PlatformKuaishouUserInfo
+	if err := db.Where(gorm_model.PlatformKuaishouUserInfo{TalentId: talentID}).First(&talentinfo).Error; err != nil {
+		return "", ""
+	}
+	return talentinfo.NickName, talentinfo.HeadUri
+}
+
+func getIscoop(db *gorm.DB, talentid string, enterpriseid string) int {
+	var etcoop gorm_model.EnterpriseTalentCooperate
+	if err := db.Where(gorm_model.EnterpriseTalentCooperate{TalentId: talentid, EnterpriseId: enterpriseid}).First(&etcoop).Error; err != nil {
+		return 0
+	}
+	return 1
+}
+
+func determineFrom(supplierID, supplierStatus int) int {
+	if supplierID != 0 && supplierStatus == 2 {
+		return 2
+	}
+	return 1
+}
+
+func stype(db *gorm.DB, supplierID, supplierStatus int) int {
+	if supplierID != 0 && supplierStatus == 2 {
+		var supplierinfo gorm_model.YounggeeSupplier
+		err := db.Model(gorm_model.YounggeeSupplier{}).Where("supplier_id = ?", supplierID).First(&supplierinfo).Error
+		if err != nil {
+			return 0
+		}
+		return supplierinfo.SupplierType
+	}
+	return 0
+}
+func PassProTaskCoop(ctx context.Context, projectId string, taskIds []string, operatorid string, operatetype int, Isspecial int, req http_model.PassproTaskCoopRequest) (bool, error) {
+	db := GetReadDB(ctx)
+	var count int64
+	fmt.Println("task_ids: ", taskIds)
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ? AND task_stage = 1", taskIds).Count(&count).Error
+
+	fmt.Println("count: ", count)
+	if err != nil {
+		return false, err
+	}
+	if int64(len(taskIds)) == 0 || count != int64(len(taskIds)) {
+		return false, errors.New("任务id有误")
+	}
+
+	// 2. 查询任务对应达人id(用于生成达人消息)
+	var talentIds []string
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds).Select("talent_id").Find(&talentIds).Error
+	if err != nil {
+		return false, err
+	}
+
+	// 3. 查询任务对应project名称(用于生成达人消息)
+	var project gorm_model.ProjectInfo
+	err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Find(&project).Error
+	if err != nil {
+		return false, err
+	}
+
+	var taskstages int
+	if project.ProjectForm == 1 {
+		taskstages = 4
+	} else {
+		taskstages = 9
+	}
+	nextstage := [6]int{0, 0, 0, 0, 0, 0} // 数组长度为6,表示6种工具 4,9,11,13
+	if Isspecial == 1 {
+		toolList := strings.Split(project.Tools, ",")
+		for _, tool := range toolList {
+			// 将 tool 转换为整数
+			if t, err := strconv.Atoi(tool); err == nil && t >= 0 && t <= len(nextstage) {
+				nextstage[t-1] = 1
+			}
+		}
+		fmt.Println(nextstage)
+		for i := 1; i < len(nextstage); i++ { // 从位置1开始
+			if nextstage[i] == 1 {
+				switch i {
+				case 1:
+					taskstages = 4
+				case 2:
+					taskstages = 9
+				case 3:
+					taskstages = 11
+				case 4:
+					taskstages = 13
+				case 5:
+					taskstages = 15
+				}
+				break
+			}
+		}
+	}
+
+	//4.根据达人来源改变状态、阶段、数目
+	var tasks []gorm_model.YoungeeTaskInfo
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ? AND task_stage = 1", taskIds).Find(&tasks).Error
+	if err != nil {
+		return false, err
+	}
+	err = db.Transaction(func(tx *gorm.DB) error {
+		// 2. 修改任务状态和任务阶段
+		for _, taskInfo := range tasks {
+			if taskInfo.SupplierId != 0 && taskInfo.SupplierStatus == 2 { //服务商招募数量+1
+				updateData := gorm_model.YoungeeTaskInfo{
+					TaskStage:     taskstages,
+					TaskStatus:    2,
+					UpdateAt:      time.Now(),
+					BOperator:     operatorid,
+					BOperatorType: operatetype,
+					SelectDate:    time.Now(),
+				}
+				err = tx.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ? AND task_stage = 1", taskInfo.TaskId).Updates(updateData).Error
+				if err != nil {
+					return err
+				}
+
+				//project招募数+1,预估成本+服务商价格
+				var projectinfo gorm_model.ProjectInfo
+				err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Find(&projectinfo).Error
+				if err != nil {
+					return err
+				}
+				projectinfo.RecruitNum += 1
+				projectinfo.EstimatedCost += taskInfo.SupportFee
+				err = tx.Model(gorm_model.ProjectInfo{}).Where("project_id = ? ", projectId).Updates(projectinfo).Error
+				if err != nil {
+					return err
+				}
+				//服务商s_project已招募人数+1
+				var sprojectinfo gorm_model.YounggeeSProjectInfo
+				err = db.Model(gorm_model.YounggeeSProjectInfo{}).Where(" s_project_id =?", req.SProjectId).Find(&sprojectinfo).Error
+				if err != nil {
+					return err
+				}
+				sprojectinfo.RecruitNum += 1
+				fmt.Println("......", projectinfo.RecruitNum)
+				err = tx.Model(gorm_model.YounggeeSProjectInfo{}).Where(" s_project_id =?", req.SProjectId).Updates(sprojectinfo).Error
+				if err != nil {
+					return err
+				}
+
+			}
+
+			if project.ProjectForm != 1 { //非签收截止时间
+				var draft_default gorm_model.InfoAutoTask
+				err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskID).Find(&draft_default).Error
+				if err != nil {
+					return err
+				}
+				duration := time.Duration(draft_default.DraftDefault) * time.Hour
+				upbreakdate := gorm_model.YoungeeTaskInfo{
+					CurBreakAt: time.Now().Add(duration),
+				}
+				err = tx.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ? ", taskInfo.TaskId).Updates(upbreakdate).Error
+				if err != nil {
+					return err
+				}
+			}
+
+			if taskInfo.SupplierId == 0 && taskInfo.SupplierStatus == 0 { //来源于公海
+				updateData := gorm_model.YoungeeTaskInfo{
+					TaskStage:     taskstages,
+					TaskStatus:    2,
+					UpdateAt:      time.Now(),
+					BOperator:     operatorid,
+					BOperatorType: operatetype,
+					SelectDate:    time.Now(),
+				}
+				err = tx.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ? AND task_stage = 1", taskInfo.TaskId).Updates(updateData).Error
+				if err != nil {
+					return err
+				}
+
+				//project招募数+1
+				var projectinfo gorm_model.ProjectInfo
+				err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Find(&projectinfo).Error
+				if err != nil {
+					return err
+				}
+				projectinfo.RecruitNum += 1
+				err = tx.Model(gorm_model.ProjectInfo{}).Where("project_id = ? ", projectId).Updates(projectinfo).Error
+				if err != nil {
+					return err
+				}
+			}
+
+		}
+		// 4. 生成达人消息
+		for _, talendId := range talentIds {
+			err = CreateMessage(ctx, 1, 1, talendId, project.ProjectName)
+			if err != nil {
+				return err
+			}
+		}
+		// 返回 nil 提交事务
+		return nil
+	})
+	if err != nil {
+		return false, err
+	}
+	return true, nil
+}
+
+func RefuseproTaskCoop(ctx context.Context, taskIds []string, operatorid string, operatetype int) (bool, error) {
+	db := GetWriteDB(ctx)
+	// 1. 校验
+	var count int64
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ? AND task_stage = 1", taskIds).Count(&count).Error
+	if err != nil {
+		return false, err
+	}
+	if count != int64(len(taskIds)) {
+		return false, errors.New("任务id有误")
+	}
+
+	// 2. 查询任务对应达人id(用于生成达人消息)
+	var talentIds []string
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ?", taskIds).Select("talent_id").Find(&talentIds).Error
+	if err != nil {
+		return false, err
+	}
+
+	var tasks []gorm_model.YoungeeTaskInfo
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ? AND task_stage = 1", taskIds).Find(&tasks).Error
+
+	err = db.Transaction(func(tx *gorm.DB) error {
+		// 2. 修改任务状态和任务阶段
+		for _, taskInfo := range tasks {
+			updateData := gorm_model.YoungeeTaskInfo{
+				TaskStage:     3,
+				TaskStatus:    3,
+				UpdateAt:      time.Now(),
+				BOperator:     operatorid,
+				BOperatorType: operatetype,
+				CompleteDate:  time.Now(),
+			}
+			err = tx.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ? AND task_stage = 1", taskInfo.TaskId).Updates(updateData).Error
+		}
+		if err != nil {
+			return err
+		}
+
+		// 返回 nil 提交事务
+		return nil
+	})
+	if err != nil {
+		return false, err
+	}
+	return true, nil
+}
+
+func GetPreSketchList(ctx context.Context, request http_model.PreSketchListRequest) (*http_model.GetSketchTaskListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.ScriptStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.TasksketchInfo, 0, len(projecrtaskinfo))
+
+	for _, task := range projecrtaskinfo {
+		nickname, headurl := getTalentinfo(db, task.TalentId)
+		Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
+		taskinfo := &http_model.TaskInfo{
+			TaskId:             task.TaskId,
+			ProjectId:          task.ProjectId,
+			TalentId:           task.TalentId,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			SType:              stype(db, task.SupplierId, task.SupplierStatus),
+			NickName:           nickname,
+			HeadUrl:            headurl,
+			ISCoop:             Iscoop,
+			City:               task.City,
+		}
+		response := &http_model.TasksketchInfo{
+			Task: taskinfo,
+			DDl:  task.CurBreakAt,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GetSketchTaskListData{
+		TasksketchList: taskInfoPointers,
+		Total:          conv.MustString(total, ""),
+	}, nil
+}
+
+func GetSketchList(ctx context.Context, request http_model.TasksketchlistRequest) (*http_model.GetsketchtaskListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.ScriptStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.Tasksketchinfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		nickname, headurl := getTalentinfo(db, task.TalentId)
+		taskinfo := &http_model.TaskInfo{
+			TaskId:             task.TaskId,
+			ProjectId:          task.ProjectId,
+			TalentId:           task.TalentId,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			SType:              stype(db, task.SupplierId, task.SupplierStatus),
+			NickName:           nickname,
+			HeadUrl:            headurl,
+			City:               task.City,
+		}
+		var sketchinfo gorm_model.YounggeeSketchInfo
+		err := db.Model(&gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_review = 0", task.TaskId).First(&sketchinfo).Error
+		if err != nil {
+			return nil, err
+		}
+		boperator := getBOperator(db, task.BOperator, task.BOperatorType)
+		response := &http_model.Tasksketchinfo{
+			Task:     taskinfo,
+			SketchId: sketchinfo.SketchID,
+			SubmitAt: sketchinfo.SubmitAt,
+			AgreeAt:  sketchinfo.AgreeAt,
+			Operator: boperator,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GetsketchtaskListData{
+		TasksketchList: taskInfoPointers,
+		Total:          conv.MustString(total, ""),
+	}, nil
+}
+
+func GetPreLinkList(ctx context.Context, request http_model.PreLinkListRequest) (*http_model.GetprelinkListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.LinkStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.Tasklinkinfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		nickname, headurl := getTalentinfo(db, task.TalentId)
+		Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
+		taskinfo := &http_model.TaskInfo{
+			TaskId:             task.TaskId,
+			ProjectId:          task.ProjectId,
+			TalentId:           task.TalentId,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			SType:              stype(db, task.SupplierId, task.SupplierStatus),
+			NickName:           nickname,
+			HeadUrl:            headurl,
+			ISCoop:             Iscoop,
+			City:               task.City,
+		}
+		response := &http_model.Tasklinkinfo{
+			Task: taskinfo,
+			DDl:  task.CurBreakAt,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GetprelinkListData{
+		TasklinkList: taskInfoPointers,
+		Total:        conv.MustString(total, ""),
+	}, nil
+}
+
+func GetLinkList(ctx context.Context, request http_model.TaskLinklistRequest) (*http_model.GettasklinkListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.LinkStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.TaskLinkinfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		nickname, headurl := getTalentinfo(db, task.TalentId)
+		Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
+		taskinfo := &http_model.TaskInfo{
+			TaskId:             task.TaskId,
+			ProjectId:          task.ProjectId,
+			TalentId:           task.TalentId,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			SType:              stype(db, task.SupplierId, task.SupplierStatus),
+			NickName:           nickname,
+			HeadUrl:            headurl,
+			ISCoop:             Iscoop,
+			City:               task.City,
+		}
+		var linkinfo gorm_model.YounggeeLinkInfo
+		err := db.Model(&gorm_model.YounggeeLinkInfo{}).Where("task_id = ? and is_review = 0", task.TaskId).First(&linkinfo).Error
+		if err != nil {
+			return nil, err
+		}
+		boperator := getBOperator(db, task.BOperator, task.BOperatorType)
+		response := &http_model.TaskLinkinfo{
+			Task:     taskinfo,
+			LinkId:   linkinfo.LinkID,
+			SubmitAt: linkinfo.SubmitAt,
+			AgreeAt:  linkinfo.AgreeAt,
+			LinkUrl:  linkinfo.LinkUrl,
+			PhotoUrl: linkinfo.PhotoUrl,
+			Operator: boperator,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GettasklinkListData{
+		TaskLinklist: taskInfoPointers,
+		Total:        conv.MustString(total, ""),
+	}, nil
+}
+
+func GetPreDataList(ctx context.Context, request http_model.PreDataListRequest) (*http_model.GetPreDataListData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.DataStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.Taskdatainfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		nickname, headurl := getTalentinfo(db, task.TalentId)
+		Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
+		taskinfo := &http_model.TaskInfo{
+			TaskId:             task.TaskId,
+			ProjectId:          task.ProjectId,
+			TalentId:           task.TalentId,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			SType:              stype(db, task.SupplierId, task.SupplierStatus),
+			NickName:           nickname,
+			HeadUrl:            headurl,
+			ISCoop:             Iscoop,
+			City:               task.City,
+		}
+		response := &http_model.Taskdatainfo{
+			Task: taskinfo,
+			DDl:  task.CurBreakAt,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GetPreDataListData{
+		TaskdataList: taskInfoPointers,
+		Total:        conv.MustString(total, ""),
+	}, nil
+}
+
+func GetDataList(ctx context.Context, request http_model.TaskDatalistRequest) (*http_model.GetTaskDatalistData, error) {
+	db := GetReadDB(ctx)
+	var projecrtaskinfo []gorm_model.YoungeeTaskInfo
+	query := db.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND task_stage = ?", request.ProjectId, request.DataStatus)
+	// 计算总数
+	var total int64
+	if err := query.Count(&total).Error; err != nil {
+		return nil, err
+	}
+
+	// 添加分页逻辑
+	pageSize := request.PageSize
+	if pageSize == 0 {
+		pageSize = 10
+	}
+	pageNum := request.PageNum
+	if pageNum == 0 {
+		pageNum = 1
+	}
+	offset := (pageNum - 1) * pageSize
+	// 执行分页查询
+	if err := query.Offset(offset).Limit(pageSize).Find(&projecrtaskinfo).Error; err != nil {
+		return nil, err
+	}
+	taskInfoPointers := make([]*http_model.TaskDatainfo, 0, len(projecrtaskinfo))
+	for _, task := range projecrtaskinfo {
+		nickname, headurl := getTalentinfo(db, task.TalentId)
+		Iscoop := getIscoop(db, task.TalentId, request.EnterpriseId)
+		taskinfo := &http_model.TaskInfo{
+			TaskId:             task.TaskId,
+			ProjectId:          task.ProjectId,
+			TalentId:           task.TalentId,
+			FansNum:            task.FansNum,
+			DraftFee:           task.DraftFee,
+			Voteavg:            task.VoteAvg,
+			FeeFrom:            task.FeeForm,
+			TaskStage:          task.TaskStage,
+			Commentavg:         task.CommitAvg,
+			CurrentDefaultType: task.CurDefaultType,
+			From:               determineFrom(task.SupplierId, task.SupplierStatus),
+			SType:              stype(db, task.SupplierId, task.SupplierStatus),
+			NickName:           nickname,
+			HeadUrl:            headurl,
+			ISCoop:             Iscoop,
+			City:               task.City,
+		}
+		var datainfo gorm_model.YounggeeDataInfo
+		err := db.Model(&gorm_model.YounggeeDataInfo{}).Where("task_id = ? and is_review = 0", task.TaskId).First(&datainfo).Error
+		if err != nil {
+			return nil, err
+		}
+		boperator := getBOperator(db, task.BOperator, task.BOperatorType)
+		response := &http_model.TaskDatainfo{
+			Task:          taskinfo,
+			DataId:        datainfo.DataID,
+			SubmitAt:      datainfo.SubmitAt,
+			AgreeAt:       datainfo.AgreeAt,
+			PhotoUrl:      datainfo.PhotoUrl,
+			PlayNumber:    datainfo.PlayNumber,
+			LikeNumber:    datainfo.LikeNumber,
+			CollectNumber: datainfo.CollectNumber,
+			CommentNumber: datainfo.CommentNumber,
+			SettleAmount:  task.SettleAmount,
+			Breakrate:     task.SketchBreakRate + task.LinkBreakRate + task.DataBreakRate,
+			Operator:      boperator,
+		}
+		taskInfoPointers = append(taskInfoPointers, response)
+
+	}
+	return &http_model.GetTaskDatalistData{
+		TaskDatalist: taskInfoPointers,
+		Total:        conv.MustString(total, ""),
+	}, nil
+}

+ 572 - 307
db/sketch.go

@@ -1,307 +1,572 @@
-package db
-
-import (
-	"context"
-	"fmt"
-	"reflect"
-	"strings"
-	"time"
-	"youngee_m_api/model/common_model"
-	"youngee_m_api/model/gorm_model"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/pack"
-	"youngee_m_api/util"
-
-	"github.com/caixw/lib.go/conv"
-	"github.com/sirupsen/logrus"
-)
-
-// GetTaskSketchList 查询上传初稿的task list
-func GetTaskSketchList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskSketchInfo, int64, error) {
-	db := GetReadDB(ctx)
-	// 查询Task表信息
-	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
-	// 根据Project条件过滤
-	conditionType := reflect.TypeOf(conditions).Elem()
-	conditionValue := reflect.ValueOf(conditions).Elem()
-	var platform_nickname string = ""
-	for i := 0; i < conditionType.NumField(); i++ {
-		field := conditionType.Field(i)
-		tag := field.Tag.Get("condition")
-		value := conditionValue.FieldByName(field.Name)
-		if tag == "sketch_status" {
-			fmt.Printf("sketch %+v", value.Interface() == int64(0))
-			if value.Interface() == int64(0) {
-				db = db.Where("task_stage = 10")
-			} else {
-				db = db.Where("task_stage > 10 and task_stage <> 16")
-			}
-			continue
-		} else if !util.IsBlank(value) {
-			if tag == "platform_nickname" {
-				platform_nickname = fmt.Sprintf("%v", value.Interface())
-				continue
-			} else if tag == "project_id" || tag == "strategy_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)
-
-	// 查询任务id
-	var taskIds []string
-	taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
-	for _, taskInfo := range taskInfos {
-		taskIds = append(taskIds, taskInfo.TaskId)
-		taskMap[taskInfo.TaskId] = taskInfo
-	}
-	db1 := GetReadDB(ctx)
-	db1 = db1.Debug().Model(gorm_model.YounggeeSketchInfo{})
-
-	var SketchInfos []gorm_model.YounggeeSketchInfo
-	db1 = db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id IN ? AND is_submit=? ", taskIds, 1)
-	if conditions.SketchStatus == int64(0) {
-		db1 = db1.Where("is_review = 0").Find(&SketchInfos)
-	} else {
-		db1 = db1.Where("is_ok = 1").Find(&SketchInfos)
-	}
-	//fmt.Printf("初稿查询:%+v", SketchInfos)
-	SketchMap := make(map[string]gorm_model.YounggeeSketchInfo)
-	for _, SketchInfo := range SketchInfos {
-		SketchMap[SketchInfo.TaskID] = SketchInfo
-	}
-	// 查询总数
-	var totalSketch int64
-	if err := db1.Count(&totalSketch).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	var misNum int64
-	if totalSketch > totalTask {
-		misNum = totalSketch - totalTask
-	} else {
-		misNum = totalTask - totalSketch
-	}
-	//logrus.Println("totalSketch,totalTalent,misNum:", totalSketch, totalTask, misNum)
-
-	// 查询该页数据
-	limit := pageSize + misNum
-	offset := pageSize * pageNum // assert pageNum start with 0
-	//fmt.Printf("limit %+v  offset %+v \n", limit, offset)
-	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 TaskSketches []*http_model.TaskSketch
-	var taskSketches []*http_model.TaskSketchInfo
-	var newTaskSketches []*http_model.TaskSketchInfo
-	for _, taskId := range taskIds {
-		TaskSketch := new(http_model.TaskSketch)
-		TaskSketch.Talent = taskMap[taskId]
-		TaskSketch.Sketch = SketchMap[taskId]
-		TaskSketches = append(TaskSketches, TaskSketch)
-	}
-
-	taskSketches = pack.TaskSketchToTaskInfo(TaskSketches)
-
-	for _, v := range taskSketches {
-		if platform_nickname == "" {
-			newTaskSketches = append(newTaskSketches, v)
-		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
-			newTaskSketches = append(newTaskSketches, v)
-		} else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
-			newTaskSketches = append(newTaskSketches, v)
-		} else {
-			totalTask--
-		}
-	}
-	return newTaskSketches, totalTask, nil
-}
-
-// SketchOption 提交意见
-func SketchOption(ctx context.Context, TaskID string, ReviseOpinion string) error {
-	db := GetReadDB(ctx)
-	//fmt.Printf("初稿意见 %d %+v", TaskID, ReviseOpinion)
-	err := db.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_review = 0", TaskID).Updates(map[string]interface{}{"revise_opinion": ReviseOpinion, "reject_at": time.Now(), "is_review": 1}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Sketch db] call RevisieOption error,err:%+v", err)
-		return err
-	}
-	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{SketchStatus: 3}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
-		return err
-	}
-	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 9}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-// AcceptSketch 同意初稿
-func AcceptSketch(ctx context.Context, TaskIDs []string) error {
-	db := GetReadDB(ctx)
-	err := db.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id in ? and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 1, "is_review": 1, "agree_at": time.Now()}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Sketch db] Update YounggeeSketchInfo error,err:%+v", err)
-		return err
-	}
-	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{SketchStatus: 5}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
-		return err
-	}
-
-	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 11}).Error
-	if err != nil {
-		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
-		return err
-	}
-	return nil
-}
-
-// FindPhoto
-func FindSketchInfo(ctx context.Context, TaskID string) (*gorm_model.YounggeeSketchInfo, error) {
-	db := GetReadDB(ctx)
-	var SketchInfo gorm_model.YounggeeSketchInfo
-	err := db.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_ok = 1", TaskID).Find(&SketchInfo).Error
-	if err != nil {
-		return nil, err
-	}
-	return &SketchInfo, nil
-}
-
-// FindPhoto
-func FindPhoto(ctx context.Context, SketchID int64) ([]gorm_model.YounggeeSketchPhoto, error) {
-	db := GetReadDB(ctx)
-	var SketchPhotos []gorm_model.YounggeeSketchPhoto
-	err := db.Model(gorm_model.YounggeeSketchPhoto{}).Where("sketch_id=?", SketchID).Find(&SketchPhotos).Error
-	if err != nil {
-		return nil, err
-	}
-	return SketchPhotos, nil
-}
-
-// GetSpecialTaskSketchList 专项任务-查询上传初稿的task list
-func GetSpecialTaskSketchList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskSketchInfo, int64, error) {
-	db := GetReadDB(ctx)
-	// 查询Task表信息
-	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
-	// 根据Project条件过滤
-	conditionType := reflect.TypeOf(conditions).Elem()
-	conditionValue := reflect.ValueOf(conditions).Elem()
-	var platform_nickname string = ""
-	for i := 0; i < conditionType.NumField(); i++ {
-		field := conditionType.Field(i)
-		tag := field.Tag.Get("condition")
-		value := conditionValue.FieldByName(field.Name)
-		if tag == "sketch_status" {
-			fmt.Printf("sketch %+v", value.Interface() == int64(0))
-			if value.Interface() == int64(0) {
-				db = db.Where("task_stage = ?", 10)
-			} else {
-				db = db.Where("task_stage > ?", 10)
-			}
-			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)
-
-	// 查询任务id
-	var taskIds []string
-	taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
-	for _, taskInfo := range taskInfos {
-		taskIds = append(taskIds, taskInfo.TaskId)
-		taskMap[taskInfo.TaskId] = taskInfo
-	}
-	db1 := GetReadDB(ctx)
-	db1 = db1.Debug().Model(gorm_model.YounggeeSketchInfo{})
-
-	var SketchInfos []gorm_model.YounggeeSketchInfo
-	db1 = db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id IN ? AND is_submit=? ", taskIds, 1)
-	if conditions.SketchStatus == int64(0) {
-		db1 = db1.Where("is_review = 0").Find(&SketchInfos)
-	} else {
-		db1 = db1.Where("is_ok = 1").Find(&SketchInfos)
-	}
-	SketchMap := make(map[string]gorm_model.YounggeeSketchInfo)
-	for _, SketchInfo := range SketchInfos {
-		SketchMap[SketchInfo.TaskID] = SketchInfo
-	}
-	// 查询总数
-	var totalSketch int64
-	if err := db1.Count(&totalSketch).Error; err != nil {
-		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
-		return nil, 0, err
-	}
-	var misNum int64
-	if totalSketch > totalTask {
-		misNum = totalSketch - totalTask
-	} else {
-		misNum = totalTask - totalSketch
-	}
-	//logrus.Println("totalSketch,totalTalent,misNum:", totalSketch, totalTask, misNum)
-
-	// 查询该页数据
-	limit := pageSize + misNum
-	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 TaskSketches []*http_model.SpecialTaskSketch
-	var taskSketches []*http_model.SpecialTaskSketchInfo
-	var newTaskSketches []*http_model.SpecialTaskSketchInfo
-	for _, taskId := range taskIds {
-		TaskSketch := new(http_model.SpecialTaskSketch)
-		TaskSketch.Talent = taskMap[taskId]
-		TaskSketch.Sketch = SketchMap[taskId]
-		TaskSketches = append(TaskSketches, TaskSketch)
-	}
-
-	taskSketches = pack.SpecialTaskSketchToTaskInfo(TaskSketches)
-
-	for _, v := range taskSketches {
-		if platform_nickname == "" {
-			newTaskSketches = append(newTaskSketches, v)
-		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
-			newTaskSketches = append(newTaskSketches, v)
-		} else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
-			newTaskSketches = append(newTaskSketches, v)
-		} else {
-			totalTask--
-		}
-	}
-	return newTaskSketches, totalTask, nil
-}
+package db
+
+import (
+	"context"
+	"fmt"
+	"reflect"
+	"strconv"
+	"strings"
+	"time"
+	"youngee_m_api/model/common_model"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/pack"
+	"youngee_m_api/util"
+
+	"github.com/caixw/lib.go/conv"
+	"github.com/sirupsen/logrus"
+)
+
+// GetTaskSketchList 查询上传初稿的task list
+func GetTaskSketchList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.TaskSketchInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询Task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	var platform_nickname string = ""
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if tag == "sketch_status" {
+			fmt.Printf("sketch %+v", value.Interface() == int64(0))
+			if value.Interface() == int64(0) {
+				db = db.Where("task_stage = 10")
+			} else {
+				db = db.Where("task_stage > 10 and task_stage <> 16")
+			}
+			continue
+		} else if !util.IsBlank(value) {
+			if tag == "platform_nickname" {
+				platform_nickname = fmt.Sprintf("%v", value.Interface())
+				continue
+			} else if tag == "project_id" || tag == "strategy_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)
+
+	// 查询任务id
+	var taskIds []string
+	taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
+	for _, taskInfo := range taskInfos {
+		taskIds = append(taskIds, taskInfo.TaskId)
+		taskMap[taskInfo.TaskId] = taskInfo
+	}
+	db1 := GetReadDB(ctx)
+	db1 = db1.Debug().Model(gorm_model.YounggeeSketchInfo{})
+
+	var SketchInfos []gorm_model.YounggeeSketchInfo
+	db1 = db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id IN ? AND is_submit=? ", taskIds, 1)
+	if conditions.SketchStatus == int64(0) {
+		db1 = db1.Where("is_review = 0").Find(&SketchInfos)
+	} else {
+		db1 = db1.Where("is_ok = 1").Find(&SketchInfos)
+	}
+	//fmt.Printf("初稿查询:%+v", SketchInfos)
+	SketchMap := make(map[string]gorm_model.YounggeeSketchInfo)
+	for _, SketchInfo := range SketchInfos {
+		SketchMap[SketchInfo.TaskID] = SketchInfo
+	}
+	// 查询总数
+	var totalSketch int64
+	if err := db1.Count(&totalSketch).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	var misNum int64
+	if totalSketch > totalTask {
+		misNum = totalSketch - totalTask
+	} else {
+		misNum = totalTask - totalSketch
+	}
+	//logrus.Println("totalSketch,totalTalent,misNum:", totalSketch, totalTask, misNum)
+
+	// 查询该页数据
+	limit := pageSize + misNum
+	offset := pageSize * pageNum // assert pageNum start with 0
+	//fmt.Printf("limit %+v  offset %+v \n", limit, offset)
+	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 TaskSketches []*http_model.TaskSketch
+	var taskSketches []*http_model.TaskSketchInfo
+	var newTaskSketches []*http_model.TaskSketchInfo
+	for _, taskId := range taskIds {
+		TaskSketch := new(http_model.TaskSketch)
+		TaskSketch.Talent = taskMap[taskId]
+		TaskSketch.Sketch = SketchMap[taskId]
+		TaskSketches = append(TaskSketches, TaskSketch)
+	}
+
+	taskSketches = pack.TaskSketchToTaskInfo(TaskSketches)
+
+	for _, v := range taskSketches {
+		if platform_nickname == "" {
+			newTaskSketches = append(newTaskSketches, v)
+		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
+			newTaskSketches = append(newTaskSketches, v)
+		} else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
+			newTaskSketches = append(newTaskSketches, v)
+		} else {
+			totalTask--
+		}
+	}
+	return newTaskSketches, totalTask, nil
+}
+
+//// SketchOption 提交意见
+//func SketchOption(ctx context.Context, TaskID string, ReviseOpinion string) error {
+//	db := GetReadDB(ctx)
+//	//fmt.Printf("初稿意见 %d %+v", TaskID, ReviseOpinion)
+//	err := db.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_review = 0", TaskID).Updates(map[string]interface{}{"revise_opinion": ReviseOpinion, "reject_at": time.Now(), "is_review": 1}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Sketch db] call RevisieOption error,err:%+v", err)
+//		return err
+//	}
+//	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{SketchStatus: 3}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+//		return err
+//	}
+//	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 9}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+//		return err
+//	}
+//	return nil
+//}
+
+// SketchOption 提交意见
+func SketchOption(ctx context.Context, TaskID string, ReviseOpinion string, operatorid string, operatetype int, projectid string) error {
+	db := GetReadDB(ctx)
+	fmt.Printf("初稿意见 %d %+v", TaskID, ReviseOpinion)
+	err := db.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_review = 0", TaskID).Updates(map[string]interface{}{"revise_opinion": ReviseOpinion, "reject_at": time.Now(), "is_review": 1, "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] call RevisieOption error,err:%+v", err)
+		return err
+	}
+	var project gorm_model.ProjectInfo
+	err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectid).Find(&project).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
+		return err
+	}
+
+	var draft_default gorm_model.InfoAutoTask
+	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskID).Find(&draft_default).Error
+	if err != nil {
+		return err
+	}
+
+	duration := time.Duration(draft_default.DraftDefault) * time.Hour
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{SketchStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 9}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+//// AcceptSketch 同意初稿
+//func AcceptSketch(ctx context.Context, TaskIDs []string) error {
+//	db := GetReadDB(ctx)
+//	err := db.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id in ? and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 1, "is_review": 1, "agree_at": time.Now()}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Sketch db] Update YounggeeSketchInfo error,err:%+v", err)
+//		return err
+//	}
+//	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{SketchStatus: 5}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+//		return err
+//	}
+//
+//	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 11}).Error
+//	if err != nil {
+//		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+//		return err
+//	}
+//	return nil
+//}
+
+// AcceptSketch 同意初稿
+func AcceptSketch(ctx context.Context, TaskIDs []string, operatorid string, operatetype int, projectid string, isspecial int) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id in ? and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 1, "is_review": 1, "agree_at": time.Now(), "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YounggeeSketchInfo error,err:%+v", err)
+		return err
+	}
+
+	var project gorm_model.ProjectInfo
+	err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectid).Find(&project).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
+		return err
+	}
+	taskstages := 11
+	nextstage := [6]int{0, 0, 0, 0, 0, 0} // 数组长度为6,表示6种工具 4,9,11,13
+	if isspecial == 1 {
+
+		toolList := strings.Split(project.Tools, ",")
+		for _, tool := range toolList {
+			// 将 tool 转换为整数
+			if t, err := strconv.Atoi(tool); err == nil && t >= 0 && t <= len(nextstage) {
+				nextstage[t-1] = 1
+			}
+		}
+		for i := 3; i < len(nextstage); i++ { // 从位置1开始
+			if nextstage[i] == 1 {
+				switch i {
+				case 3:
+					taskstages = 11
+				case 4:
+					taskstages = 13
+				case 5:
+					taskstages = 15
+				}
+				break
+			}
+		}
+	}
+	var link_default gorm_model.InfoAutoTask
+	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskID).Find(&link_default).Error
+	if err != nil {
+		return err
+	}
+	duration := time.Duration(link_default.LinkBreach) * time.Hour
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{SketchStatus: 5, CurBreakAt: time.Now().Add(duration)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{TaskStage: taskstages}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// RejectSketch 不同意初稿
+func RejectSketch(ctx context.Context, TaskIDs []string, operatorid string, operatetype int, projectid string) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id in ? and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 0, "is_review": 1, "reject_at": time.Now(), "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YounggeeSketchInfo error,err:%+v", err)
+		return err
+	}
+
+	var project gorm_model.ProjectInfo
+	err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectid).Find(&project).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+
+	var draft_default gorm_model.InfoAutoTask
+	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskID).Find(&draft_default).Error
+	if err != nil {
+		return err
+	}
+	duration := time.Duration(draft_default.DraftDefault) * time.Hour
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{SketchStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+
+	err = db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeTaskInfo{TaskStage: 9}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// FindPhoto
+func FindSketchInfo(ctx context.Context, TaskID string) (*gorm_model.YounggeeSketchInfo, error) {
+	db := GetReadDB(ctx)
+	var SketchInfo gorm_model.YounggeeSketchInfo
+	err := db.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_ok = 1", TaskID).Find(&SketchInfo).Error
+	if err != nil {
+		return nil, err
+	}
+	return &SketchInfo, nil
+}
+
+// FindPhoto
+func FindPhoto(ctx context.Context, SketchID int64) ([]gorm_model.YounggeeSketchPhoto, error) {
+	db := GetReadDB(ctx)
+	var SketchPhotos []gorm_model.YounggeeSketchPhoto
+	err := db.Model(gorm_model.YounggeeSketchPhoto{}).Where("sketch_id=?", SketchID).Find(&SketchPhotos).Error
+	if err != nil {
+		return nil, err
+	}
+	return SketchPhotos, nil
+}
+
+// GetSpecialTaskSketchList 专项任务-查询上传初稿的task list
+func GetSpecialTaskSketchList(ctx context.Context, projectID string, pageSize, pageNum int64, conditions *common_model.TalentConditions) ([]*http_model.SpecialTaskSketchInfo, int64, error) {
+	db := GetReadDB(ctx)
+	// 查询Task表信息
+	db = db.Debug().Model(gorm_model.YoungeeTaskInfo{}).Where("task_status = 2")
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	var platform_nickname string = ""
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if tag == "sketch_status" {
+			fmt.Printf("sketch %+v", value.Interface() == int64(0))
+			if value.Interface() == int64(0) {
+				db = db.Where("task_stage = ?", 10)
+			} else {
+				db = db.Where("task_stage > ?", 10)
+			}
+			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)
+
+	// 查询任务id
+	var taskIds []string
+	taskMap := make(map[string]gorm_model.YoungeeTaskInfo)
+	for _, taskInfo := range taskInfos {
+		taskIds = append(taskIds, taskInfo.TaskId)
+		taskMap[taskInfo.TaskId] = taskInfo
+	}
+	db1 := GetReadDB(ctx)
+	db1 = db1.Debug().Model(gorm_model.YounggeeSketchInfo{})
+
+	var SketchInfos []gorm_model.YounggeeSketchInfo
+	db1 = db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id IN ? AND is_submit=? ", taskIds, 1)
+	if conditions.SketchStatus == int64(0) {
+		db1 = db1.Where("is_review = 0").Find(&SketchInfos)
+	} else {
+		db1 = db1.Where("is_ok = 1").Find(&SketchInfos)
+	}
+	SketchMap := make(map[string]gorm_model.YounggeeSketchInfo)
+	for _, SketchInfo := range SketchInfos {
+		SketchMap[SketchInfo.TaskID] = SketchInfo
+	}
+	// 查询总数
+	var totalSketch int64
+	if err := db1.Count(&totalSketch).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[GetProjectTalentList] error query mysql total, err:%+v", err)
+		return nil, 0, err
+	}
+	var misNum int64
+	if totalSketch > totalTask {
+		misNum = totalSketch - totalTask
+	} else {
+		misNum = totalTask - totalSketch
+	}
+	//logrus.Println("totalSketch,totalTalent,misNum:", totalSketch, totalTask, misNum)
+
+	// 查询该页数据
+	limit := pageSize + misNum
+	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 TaskSketches []*http_model.SpecialTaskSketch
+	var taskSketches []*http_model.SpecialTaskSketchInfo
+	var newTaskSketches []*http_model.SpecialTaskSketchInfo
+	for _, taskId := range taskIds {
+		TaskSketch := new(http_model.SpecialTaskSketch)
+		TaskSketch.Talent = taskMap[taskId]
+		TaskSketch.Sketch = SketchMap[taskId]
+		TaskSketches = append(TaskSketches, TaskSketch)
+	}
+
+	taskSketches = pack.SpecialTaskSketchToTaskInfo(TaskSketches)
+
+	for _, v := range taskSketches {
+		if platform_nickname == "" {
+			newTaskSketches = append(newTaskSketches, v)
+		} else if strings.Contains(v.PlatformNickname, platform_nickname) {
+			newTaskSketches = append(newTaskSketches, v)
+		} else if strings.Contains(conv.MustString(v.TaskID, ""), platform_nickname) {
+			newTaskSketches = append(newTaskSketches, v)
+		} else {
+			totalTask--
+		}
+	}
+	return newTaskSketches, totalTask, nil
+}
+
+// SketchOption 提交意见
+func LocalSketchOption(ctx context.Context, TaskID string, ReviseOpinion string, operatorid string, operatetype int, projectid string) error {
+	db := GetReadDB(ctx)
+	fmt.Printf("初稿意见 %d %+v", TaskID, ReviseOpinion)
+	err := db.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? and is_review = 0", TaskID).Updates(map[string]interface{}{"revise_opinion": ReviseOpinion, "reject_at": time.Now(), "is_review": 1, "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] call RevisieOption error,err:%+v", err)
+		return err
+	}
+	var project gorm_model.YounggeeLocalLifeInfo
+	err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", projectid).Find(&project).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
+		return err
+	}
+
+	var draft_default gorm_model.InfoAutoTask
+	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskId).Find(&draft_default).Error
+	if err != nil {
+		return err
+	}
+
+	duration := time.Duration(draft_default.DraftDefault) * time.Hour
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeLocalTaskInfo{SketchStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id = ?", TaskID).Updates(gorm_model.YoungeeLocalTaskInfo{TaskStage: 9}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// AcceptSketch 同意初稿
+func LocalAcceptSketch(ctx context.Context, TaskIDs []string, operatorid string, operatetype int, projectid string, isspecial int) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id in ? and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 1, "is_review": 1, "agree_at": time.Now(), "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YounggeeSketchInfo error,err:%+v", err)
+		return err
+	}
+
+	var project gorm_model.YounggeeLocalLifeInfo
+	err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("LocalId = ?", projectid).Find(&project).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Find ProjectInfo error,err:%+v", err)
+		return err
+	}
+	taskstages := 11
+	nextstage := [6]int{0, 0, 0, 0, 0, 0} // 数组长度为6,表示6种工具 4,9,11,13
+	if isspecial == 1 {
+
+		toolList := strings.Split(project.Tools, ",")
+		for _, tool := range toolList {
+			// 将 tool 转换为整数
+			if t, err := strconv.Atoi(tool); err == nil && t >= 0 && t <= len(nextstage) {
+				nextstage[t-1] = 1
+			}
+		}
+		for i := 3; i < len(nextstage); i++ { // 从位置1开始
+			if nextstage[i] == 1 {
+				switch i {
+				case 3:
+					taskstages = 11
+				case 4:
+					taskstages = 13
+				case 5:
+					taskstages = 15
+				}
+				break
+			}
+		}
+	}
+	var link_default gorm_model.InfoAutoTask
+	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskId).Find(&link_default).Error //待确认
+	if err != nil {
+		return err
+	}
+	duration := time.Duration(link_default.LinkBreach) * time.Hour
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeLocalTaskInfo{SketchStatus: 5, CurBreakAt: time.Now().Add(duration)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeLocalTaskInfo{TaskStage: taskstages}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+// RejectSketch 不同意初稿
+func LocalRejectSketch(ctx context.Context, TaskIDs []string, operatorid string, operatetype int, projectid string) error {
+	db := GetReadDB(ctx)
+	err := db.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id in ? and is_review = 0", TaskIDs).Updates(map[string]interface{}{"is_ok": 0, "is_review": 1, "reject_at": time.Now(), "b_operator": operatorid, "b_operator_type": operatetype}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YounggeeSketchInfo error,err:%+v", err)
+		return err
+	}
+
+	var project gorm_model.YounggeeLocalLifeInfo
+	err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("LocalId = ?", projectid).Find(&project).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YounggeeLocalLifeInfo error,err:%+v", err)
+		return err
+	}
+
+	var draft_default gorm_model.InfoAutoTask
+	err = db.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", project.AutoTaskId).Find(&draft_default).Error
+	if err != nil {
+		return err
+	}
+	duration := time.Duration(draft_default.DraftDefault) * time.Hour
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeLocalTaskInfo{SketchStatus: 3, CurBreakAt: time.Now().Add(duration)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YounggeeLocalLifeInfo error,err:%+v", err)
+		return err
+	}
+
+	err = db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeLocalTaskInfo{TaskStage: 9}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Sketch db] Update YounggeeLocalLifeInfo error,err:%+v", err)
+		return err
+	}
+	return nil
+}

+ 323 - 16
db/task.go

@@ -2,8 +2,8 @@ package db
 
 import (
 	"context"
-	"encoding/json"
 	"fmt"
+	"github.com/tidwall/gjson"
 	"reflect"
 	"strconv"
 	"strings"
@@ -15,7 +15,6 @@ import (
 	"youngee_m_api/util"
 
 	"github.com/caixw/lib.go/conv"
-	"github.com/tidwall/gjson"
 	"gorm.io/gorm"
 
 	"github.com/sirupsen/logrus"
@@ -215,18 +214,98 @@ func GetSpecialTaskInviteList(ctx context.Context, projectID string, pageSize, p
 	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 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
+	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(), SettleStatus: 2}).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)
@@ -252,19 +331,15 @@ func SetTaskFinish(ctx context.Context, TaskIDs []string) error {
 			return err1
 		}
 
-		// 2. 创建任务收益
-		var productStruct gorm_model.YounggeeProduct
-		if err = json.Unmarshal([]byte(projectInfo.ProductSnap), &productStruct); err != nil {
-			fmt.Println("Error:", err)
-			return err
-		}
 		t := time.Now()
 		income := gorm_model.YounggeeTalentIncome{
-			TalentID:       taskInfo.TalentId,
-			ProjectID:      taskInfo.ProjectId,
-			SectaskID:      taskInfo.TaskId,
-			BrandName:      productStruct.BrandName,
-			TaskName:       projectInfo.ProjectName,
+			TalentID:  taskInfo.TalentId,
+			ProjectID: taskInfo.ProjectId,
+			TaskID:    taskInfo.TaskId,
+			Type:      1,
+			//BrandName:      productStruct.BrandName,
+			TaskName: projectInfo.ProjectName,
+			//PhotoUrl:       mainPhoto,
 			Income:         strconv.FormatFloat(taskInfo.SettleAmount, 'f', 10, 32),
 			IncomeType:     1,
 			WithdrawStatus: 1,
@@ -277,6 +352,7 @@ func SetTaskFinish(ctx context.Context, TaskIDs []string) error {
 			return err
 		}
 
+		// 3. 修改招募策略表,更新粉丝量、播放量、点赞数、收藏数、评论数、总支付、结案数量
 		// 更新招募策略
 		db = GetReadDB(ctx)
 		db = db.Model(gorm_model.RecruitStrategy{}).Where("project_id = ? and strategy_id = ?", taskInfo.ProjectId, taskInfo.StrategyId)
@@ -309,6 +385,70 @@ func SetSpecialTaskFinish(ctx context.Context, TaskIDs []string) error {
 	return nil
 }
 
+// SetTaskFinish 专项任务结案
+func SetSpecialLocalTaskFinish(ctx context.Context, TaskIDs []string) error {
+	db := GetReadDB(ctx)
+	// 1. 修改任务表,更新任务阶段为已结案,结案方式为正常结束,数据状态为已通过,
+	err := db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeLocalTaskInfo{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
+}
+
+// SetSpecialTaskSettleNum 结案人数+1
+func SetSpecialLocalTaskSettleNum(ctx context.Context, TaskIDs []string) error {
+	db := GetReadDB(ctx)
+	//4.根据达人来源改变状态、阶段、数目
+	var tasks []gorm_model.YoungeeLocalTaskInfo
+	err := db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id IN ? ", TaskIDs).Find(&tasks).Error
+	if err != nil {
+		return err
+	}
+	for _, taskInfo := range tasks {
+		if taskInfo.SupplierId != 0 && taskInfo.SupplierStatus == 2 {
+			//project招募数+1,预估成本+服务商价格
+			var projectinfo gorm_model.YounggeeLocalLifeInfo
+			err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", taskInfo.LocalId).Find(&projectinfo).Error
+			if err != nil {
+				return err
+			}
+			projectinfo.SettleNum += 1
+			err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ? ", taskInfo.LocalId).Updates(projectinfo).Error
+			if err != nil {
+				return err
+			}
+			//服务商s_project已招募人数+1
+			var sprojectinfo gorm_model.YounggeeSLocalLifeInfo
+			err = db.Model(gorm_model.YounggeeSLocalLifeInfo{}).Where(" s_local_life_id =?", taskInfo.SLocalLifeId).Find(&sprojectinfo).Error
+			if err != nil {
+				return err
+			}
+			sprojectinfo.RecruitNum += 1
+			fmt.Println("......", projectinfo.RecruitNum)
+			err = db.Model(gorm_model.YounggeeSLocalLifeInfo{}).Where(" s_local_life_id =?", taskInfo.SLocalLifeId).Updates(sprojectinfo).Error
+			if err != nil {
+				return err
+			}
+		}
+		if taskInfo.SupplierId == 0 && taskInfo.SupplierStatus == 0 {
+			//project招募数+1
+			var projectinfo gorm_model.YounggeeLocalLifeInfo
+			err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ?", taskInfo.LocalId).Find(&projectinfo).Error
+			if err != nil {
+				return err
+			}
+			projectinfo.SettleNum += 1
+			err = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("local_id = ? ", taskInfo.LocalId).Updates(projectinfo).Error
+			if err != nil {
+				return err
+			}
+		}
+	}
+	return nil
+}
+
 func SetTalentIncome(ctx context.Context, TaskIDs []string) error {
 	db := GetReadDB(ctx)
 	var TaskInfoList []gorm_model.YoungeeTaskInfo
@@ -329,6 +469,121 @@ func SetTalentIncome(ctx context.Context, TaskIDs []string) error {
 	return nil
 }
 
+// SetTaskFinish 任务结案
+func SetLocalTaskFinish(ctx context.Context, TaskIDs []string) error {
+	db := GetReadDB(ctx)
+	// 1. 修改任务表,更新任务阶段为已结案,结案方式为正常结束,数据状态为已通过,
+	err := db.Model(gorm_model.YoungeeLocalTaskInfo{}).Where("task_id in ?", TaskIDs).Updates(gorm_model.YoungeeLocalTaskInfo{DataStatus: 5, TaskStage: 15, CompleteStatus: 2, WithdrawStatus: 2, CompleteDate: time.Now(), SettleStatus: 2}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[Task db] Update YoungeeTaskInfo error,err:%+v", err)
+		return err
+	}
+
+	for _, v := range TaskIDs {
+		// 查询task_info
+		db = GetReadDB(ctx)
+		taskInfo := gorm_model.YoungeeLocalTaskInfo{}
+		err1 := db.Model(gorm_model.YoungeeLocalTaskInfo{}).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.YounggeeLocalLifeInfo{}
+		err1 = db.Model(gorm_model.YounggeeLocalLifeInfo{}).Where("project_id = ?", taskInfo.LocalId).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
+		//}
+		//var productPhotoStruct []gorm_model.YounggeeProductPhoto
+		//if err = json.Unmarshal([]byte(projectInfo.ProductPhotoSnap), &productPhotoStruct); err != nil {
+		//	fmt.Println("Error:", err)
+		//	return err
+		//}
+		//var mainPhoto = ""
+		//for _, w := range productPhotoStruct {
+		//	if w.Symbol == 1 {
+		//		mainPhoto = w.PhotoUrl
+		//	}
+		//}
+
+		t := time.Now()
+		income := gorm_model.YounggeeTalentIncome{
+			TalentID:  taskInfo.TalentId,
+			ProjectID: taskInfo.LocalId,
+			TaskID:    taskInfo.TaskId,
+			Type:      1,
+			//BrandName:      productStruct.BrandName,
+			TaskName: projectInfo.LocalName,
+			//PhotoUrl:       mainPhoto,
+			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
+		}
+
+		// 3. 修改招募策略表,更新粉丝量、播放量、点赞数、收藏数、评论数、总支付、结案数量
+		// 更新招募策略
+		db = GetReadDB(ctx)
+		db = db.Model(gorm_model.RecruitStrategy{}).Where("project_id = ? and strategy_id = ?", taskInfo.LocalId, 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
+}
+
+func SetLocalTalentIncome(ctx context.Context, TaskIDs []string) error {
+	db := GetReadDB(ctx)
+	var TaskInfoList []gorm_model.YoungeeLocalTaskInfo
+	fmt.Println("收入", TaskIDs)
+	err := db.Model(gorm_model.YoungeeLocalTaskInfo{}).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)
@@ -382,3 +637,55 @@ func UpdateTask(ctx context.Context, updateData gorm_model.YoungeeTaskInfo, tx *
 
 	return true, nil
 }
+
+// SetSpecialTaskSettleNum 结案人数+1
+func SetSpecialTaskSettleNum(ctx context.Context, TaskIDs []string) error {
+	db := GetReadDB(ctx)
+	//4.根据达人来源改变状态、阶段、数目
+	var tasks []gorm_model.YoungeeTaskInfo
+	err := db.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id IN ? ", TaskIDs).Find(&tasks).Error
+	if err != nil {
+		return err
+	}
+	for _, taskInfo := range tasks {
+		if taskInfo.SupplierId != 0 && taskInfo.SupplierStatus == 2 {
+			//project招募数+1,预估成本+服务商价格
+			var projectinfo gorm_model.ProjectInfo
+			err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", taskInfo.ProjectId).Find(&projectinfo).Error
+			if err != nil {
+				return err
+			}
+			projectinfo.SettleNum += 1
+			err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ? ", taskInfo.ProjectId).Updates(projectinfo).Error
+			if err != nil {
+				return err
+			}
+			//服务商s_project已招募人数+1
+			var sprojectinfo gorm_model.YounggeeSProjectInfo
+			err = db.Model(gorm_model.YounggeeSProjectInfo{}).Where(" s_project_id =?", taskInfo.SProjectId).Find(&sprojectinfo).Error
+			if err != nil {
+				return err
+			}
+			sprojectinfo.RecruitNum += 1
+			fmt.Println("......", projectinfo.RecruitNum)
+			err = db.Model(gorm_model.YounggeeSProjectInfo{}).Where(" s_project_id =?", taskInfo.SProjectId).Updates(sprojectinfo).Error
+			if err != nil {
+				return err
+			}
+		}
+		if taskInfo.SupplierId == 0 && taskInfo.SupplierStatus == 0 {
+			//project招募数+1
+			var projectinfo gorm_model.ProjectInfo
+			err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", taskInfo.ProjectId).Find(&projectinfo).Error
+			if err != nil {
+				return err
+			}
+			projectinfo.SettleNum += 1
+			err = db.Model(gorm_model.ProjectInfo{}).Where("project_id = ? ", taskInfo.ProjectId).Updates(projectinfo).Error
+			if err != nil {
+				return err
+			}
+		}
+	}
+	return nil
+}

+ 57 - 0
handler/LocalPrelinklist.go

@@ -0,0 +1,57 @@
+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 WrapLocalPreLinkListHandler(ctx *gin.Context) {
+	handler := newLocalPreLinkListHandler(ctx)
+	BaseRun(handler)
+}
+
+func newLocalPreLinkListHandler(ctx *gin.Context) *LocalPreLinkListHandler {
+	return &LocalPreLinkListHandler{
+		req:  http_model.NewLocalPreLinkListRequest(),
+		resp: http_model.NewLocalPreLinkListResponse(),
+		ctx:  ctx,
+	}
+}
+
+type LocalPreLinkListHandler struct {
+	req  *http_model.LocalPreLinkListRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h LocalPreLinkListHandler) getRequest() interface{} {
+	return h.req
+}
+func (h LocalPreLinkListHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h LocalPreLinkListHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h LocalPreLinkListHandler) run() {
+	data := http_model.LocalPreLinkListRequest{}
+	data = *h.req
+	res, err := service.LocalTask.GetLocalPreLinkList(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetLocalPreLinkList] call GetLocalPreLinkList err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		logrus.Info("GetLocalPreLinkList fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功查询链接待传列表"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h LocalPreLinkListHandler) checkParam() error {
+	return nil
+}

+ 61 - 0
handler/PasslocalTaskCoop.go

@@ -0,0 +1,61 @@
+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 WrapPasslocalTaskCoopHandler(ctx *gin.Context) {
+	handler := newPasslocalTaskCoopHandler(ctx)
+	BaseRun(handler)
+}
+
+type PasslocalTaskCoop struct {
+	ctx  *gin.Context
+	req  *http_model.PasslocalTaskCoopRequest
+	resp *http_model.CommonResponse
+}
+
+func (c PasslocalTaskCoop) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c PasslocalTaskCoop) getResponse() interface{} {
+	return c.resp
+}
+
+func (c PasslocalTaskCoop) getRequest() interface{} {
+	return c.req
+}
+
+func (c PasslocalTaskCoop) run() {
+	data := *c.req
+	//auth := middleware.GetSessionAuth(c.ctx)
+	//enterpriseID := auth.EnterpriseID
+	res, err := service.LocalTask.PassCoop(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[PasslocalTaskCoop] call PasslocalTaskCoop err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("PasslocalTaskCoop fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功合作任务"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c PasslocalTaskCoop) checkParam() error {
+	return nil
+}
+
+func newPasslocalTaskCoopHandler(ctx *gin.Context) *PasslocalTaskCoop {
+	return &PasslocalTaskCoop{
+		ctx:  ctx,
+		req:  http_model.NewPasslocalTaskCoopRequest(),
+		resp: http_model.NewPasslocalTaskCoopResponse(),
+	}
+}

+ 62 - 0
handler/PassproTaskCoop.go

@@ -0,0 +1,62 @@
+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 WrapPassproTaskCoopHandler(ctx *gin.Context) {
+	handler := newPassproTaskCoopHandler(ctx)
+	BaseRun(handler)
+}
+
+type PassproTaskCoop struct {
+	ctx  *gin.Context
+	req  *http_model.PassproTaskCoopRequest
+	resp *http_model.CommonResponse
+}
+
+func (c PassproTaskCoop) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c PassproTaskCoop) getResponse() interface{} {
+	return c.resp
+}
+
+func (c PassproTaskCoop) getRequest() interface{} {
+	return c.req
+}
+
+func (c PassproTaskCoop) run() {
+	data := http_model.PassproTaskCoopRequest{}
+	data = *c.req
+	//auth := middleware.GetSessionAuth(c.ctx)
+	//enterpriseID := auth.EnterpriseID
+	res, err := service.Task.PassCoop(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[PassproTaskCoop] call PassproTaskCoop err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("PassproTaskCoop fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功合作种草任务"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c PassproTaskCoop) checkParam() error {
+	return nil
+}
+
+func newPassproTaskCoopHandler(ctx *gin.Context) *PassproTaskCoop {
+	return &PassproTaskCoop{
+		ctx:  ctx,
+		req:  http_model.NewPassproTaskCoopRequest(),
+		resp: http_model.NewPassproTaskCoopResponse(),
+	}
+}

+ 57 - 0
handler/Prelinklist.go

@@ -0,0 +1,57 @@
+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 WrapPreLinkListHandler(ctx *gin.Context) {
+	handler := newPreLinkListHandler(ctx)
+	BaseRun(handler)
+}
+
+func newPreLinkListHandler(ctx *gin.Context) *PreLinkListHandler {
+	return &PreLinkListHandler{
+		req:  http_model.NewPreLinkListRequest(),
+		resp: http_model.NewPreLinkListResponse(),
+		ctx:  ctx,
+	}
+}
+
+type PreLinkListHandler struct {
+	req  *http_model.PreLinkListRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h PreLinkListHandler) getRequest() interface{} {
+	return h.req
+}
+func (h PreLinkListHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h PreLinkListHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h PreLinkListHandler) run() {
+	data := http_model.PreLinkListRequest{}
+	data = *h.req
+	res, err := service.Task.GetPreLinkList(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetPreLinkList] call GetPreLinkList err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		logrus.Info("GetPreLinkList fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功查询链接待传列表"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h PreLinkListHandler) checkParam() error {
+	return nil
+}

+ 55 - 0
handler/RefuseTalentWithdraw.go

@@ -0,0 +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 WrapRefuseTalentWithdrawalHandler(ctx *gin.Context) {
+	handler := newRefuseTalentWithdrawalHandler(ctx)
+	BaseRun(handler)
+}
+
+type RefuseTalentWithdrawalHandler struct {
+	ctx  *gin.Context
+	req  *http_model.RefuseTalentWithdrawalRequest
+	resp *http_model.CommonResponse
+}
+
+func (c RefuseTalentWithdrawalHandler) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c RefuseTalentWithdrawalHandler) getResponse() interface{} {
+	return c.resp
+}
+
+func (c RefuseTalentWithdrawalHandler) getRequest() interface{} {
+	return c.req
+}
+
+func (c RefuseTalentWithdrawalHandler) run() {
+	err := db.RefuseTalentWithdrawal(c.ctx, c.req)
+	if err != nil {
+		logrus.WithContext(c.ctx).Errorf("[RefuseTalentWithdrawalHandler] error RefuseTalentWithdrawal, err:%+v", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	c.resp.Message = "驳回提现成功"
+}
+
+func (c RefuseTalentWithdrawalHandler) checkParam() error {
+	return nil
+}
+
+func newRefuseTalentWithdrawalHandler(ctx *gin.Context) *RefuseTalentWithdrawalHandler {
+	return &RefuseTalentWithdrawalHandler{
+		ctx:  ctx,
+		req:  http_model.NewRefuseTalentWithdrawalRequest(),
+		resp: http_model.NewRefuseTalentWithdrawalResponse(),
+	}
+}

+ 61 - 0
handler/Refuseloacltaskcoop.go

@@ -0,0 +1,61 @@
+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 WrapRefuselocalTaskCoopHandler(ctx *gin.Context) {
+	handler := newRefuselocalTaskCoopHandler(ctx)
+	BaseRun(handler)
+}
+
+type RefuselocalTaskCoop struct {
+	ctx  *gin.Context
+	req  *http_model.RefuselocalTaskCoopRequest
+	resp *http_model.CommonResponse
+}
+
+func (c RefuselocalTaskCoop) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c RefuselocalTaskCoop) getResponse() interface{} {
+	return c.resp
+}
+
+func (c RefuselocalTaskCoop) getRequest() interface{} {
+	return c.req
+}
+
+func (c RefuselocalTaskCoop) run() {
+	data := *c.req
+	//auth := middleware.GetSessionAuth(c.ctx)
+	//enterpriseID := auth.EnterpriseID
+	res, err := service.LocalTask.RefuseCoop(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[RefuselocalTaskCoop] call RefuselocalTaskCoop err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("RefuselocalTaskCoop fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功拒绝任务"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c RefuselocalTaskCoop) checkParam() error {
+	return nil
+}
+
+func newRefuselocalTaskCoopHandler(ctx *gin.Context) *RefuselocalTaskCoop {
+	return &RefuselocalTaskCoop{
+		ctx:  ctx,
+		req:  http_model.NewRefuselocalTaskCoopRequest(),
+		resp: http_model.NewRefuselocalTaskCoopResponse(),
+	}
+}

+ 62 - 0
handler/RefuseproTaskCoop.go

@@ -0,0 +1,62 @@
+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 WrapRefuseproTaskCoopHandler(ctx *gin.Context) {
+	handler := newRefuseproTaskCoopHandler(ctx)
+	BaseRun(handler)
+}
+
+type RefuseproTaskCoop struct {
+	ctx  *gin.Context
+	req  *http_model.RefuseproTaskCoopRequest
+	resp *http_model.CommonResponse
+}
+
+func (c RefuseproTaskCoop) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c RefuseproTaskCoop) getResponse() interface{} {
+	return c.resp
+}
+
+func (c RefuseproTaskCoop) getRequest() interface{} {
+	return c.req
+}
+
+func (c RefuseproTaskCoop) run() {
+	data := http_model.RefuseproTaskCoopRequest{}
+	data = *c.req
+	//auth := middleware.GetSessionAuth(c.ctx)
+	//enterpriseID := auth.EnterpriseID
+	res, err := service.Task.RefuseCoop(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[RefuseproTaskCoop] call RefuseproTaskCoop err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("RefuseproTaskCoop fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功拒绝种草任务"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c RefuseproTaskCoop) checkParam() error {
+	return nil
+}
+
+func newRefuseproTaskCoopHandler(ctx *gin.Context) *RefuseproTaskCoop {
+	return &RefuseproTaskCoop{
+		ctx:  ctx,
+		req:  http_model.NewRefuseproTaskCoopRequest(),
+		resp: http_model.NewRefuseproTaskCoopResponse(),
+	}
+}

+ 59 - 58
handler/accept_data.go

@@ -1,58 +1,59 @@
-package handler
-
-import (
-	"github.com/gin-gonic/gin"
-	"github.com/sirupsen/logrus"
-	log "github.com/sirupsen/logrus"
-	"youngee_m_api/consts"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/service"
-	"youngee_m_api/util"
-)
-
-func WrapAcceptDataHandler(ctx *gin.Context) {
-	handler := newAcceptDataHandler(ctx)
-	BaseRun(handler)
-}
-
-func newAcceptDataHandler(ctx *gin.Context) *AcceptDataHandler {
-	return &AcceptDataHandler{
-		req:  http_model.NewAcceptDataRequest(),
-		resp: http_model.NewAcceptDataResponse(),
-		ctx:  ctx,
-	}
-}
-
-type AcceptDataHandler struct {
-	req  *http_model.AcceptDataRequest
-	resp *http_model.CommonResponse
-	ctx  *gin.Context
-}
-
-func (h *AcceptDataHandler) getRequest() interface{} {
-	return h.req
-}
-func (h *AcceptDataHandler) getContext() *gin.Context {
-	return h.ctx
-}
-func (h *AcceptDataHandler) getResponse() interface{} {
-	return h.resp
-}
-
-func (h *AcceptDataHandler) run() {
-	data := http_model.AcceptDataRequest{}
-	data = *h.req
-	res, err := service.Data.AcceptData(h.ctx, data)
-	if err != nil {
-		logrus.Errorf("[ReviseOpinionHandler] call Create err:%+v\n", err)
-		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
-		log.Info("CreateProject fail,req:%+v", h.req)
-		return
-	}
-	h.resp.Message = "成功通过脚本"
-	h.resp.Data = res
-}
-
-func (h *AcceptDataHandler) checkParam() error {
-	return nil
-}
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+)
+
+func WrapAcceptDataHandler(ctx *gin.Context) {
+	handler := newAcceptDataHandler(ctx)
+	BaseRun(handler)
+}
+
+func newAcceptDataHandler(ctx *gin.Context) *AcceptDataHandler {
+	return &AcceptDataHandler{
+		req:  http_model.NewAcceptDataRequest(),
+		resp: http_model.NewAcceptDataResponse(),
+		ctx:  ctx,
+	}
+}
+
+type AcceptDataHandler struct {
+	req  *http_model.AcceptDataRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *AcceptDataHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *AcceptDataHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *AcceptDataHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *AcceptDataHandler) run() {
+	data := http_model.AcceptDataRequest{}
+	data = *h.req
+	res, err := service.Data.AcceptData(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ReviseOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功通过脚本"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h *AcceptDataHandler) checkParam() error {
+	return nil
+}

+ 59 - 59
handler/accept_link.go

@@ -1,59 +1,59 @@
-package handler
-
-import (
-	"github.com/gin-gonic/gin"
-	"github.com/sirupsen/logrus"
-	log "github.com/sirupsen/logrus"
-	"youngee_m_api/consts"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/service"
-	"youngee_m_api/util"
-)
-
-func WrapAcceptLinkHandler(ctx *gin.Context) {
-	handler := newAcceptLinkHandler(ctx)
-	BaseRun(handler)
-}
-
-func newAcceptLinkHandler(ctx *gin.Context) *AcceptLinkHandler {
-	return &AcceptLinkHandler{
-		req:  http_model.NewAcceptLinkRequest(),
-		resp: http_model.NewAcceptLinkResponse(),
-		ctx:  ctx,
-	}
-}
-
-type AcceptLinkHandler struct {
-	req  *http_model.AcceptLinkRequest
-	resp *http_model.CommonResponse
-	ctx  *gin.Context
-}
-
-func (h *AcceptLinkHandler) getRequest() interface{} {
-	return h.req
-}
-func (h *AcceptLinkHandler) getContext() *gin.Context {
-	return h.ctx
-}
-func (h *AcceptLinkHandler) getResponse() interface{} {
-	return h.resp
-}
-
-func (h *AcceptLinkHandler) run() {
-	data := http_model.AcceptLinkRequest{}
-	data = *h.req
-	res, err := service.Link.AcceptLink(h.ctx, data)
-	if err != nil {
-		logrus.Errorf("[ReviseOpinionHandler] call Create err:%+v\n", err)
-		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
-		log.Info("CreateProject fail,req:%+v", h.req)
-		return
-	}
-	h.resp.Message = "成功通过链接"
-	h.resp.Data = res
-	h.resp.Data = data
-}
-
-func (h *AcceptLinkHandler) checkParam() error {
-	return nil
-}
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+)
+
+func WrapAcceptLinkHandler(ctx *gin.Context) {
+	handler := newAcceptLinkHandler(ctx)
+	BaseRun(handler)
+}
+
+func newAcceptLinkHandler(ctx *gin.Context) *AcceptLinkHandler {
+	return &AcceptLinkHandler{
+		req:  http_model.NewAcceptLinkRequest(),
+		resp: http_model.NewAcceptLinkResponse(),
+		ctx:  ctx,
+	}
+}
+
+type AcceptLinkHandler struct {
+	req  *http_model.AcceptLinkRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *AcceptLinkHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *AcceptLinkHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *AcceptLinkHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *AcceptLinkHandler) run() {
+	data := http_model.AcceptLinkRequest{}
+	data = *h.req
+	res, err := service.Link.AcceptLink(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ReviseOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功通过链接"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h *AcceptLinkHandler) checkParam() error {
+	return nil
+}

+ 59 - 0
handler/acceptrecharge.go

@@ -0,0 +1,59 @@
+package handler
+
+import (
+	"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/util"
+)
+
+func WrapAcceptRechargeHandler(ctx *gin.Context) {
+	handler := newAcceptRechargeHandler(ctx)
+	BaseRun(handler)
+}
+
+func newAcceptRechargeHandler(ctx *gin.Context) *AcceptRechargeHandler {
+	return &AcceptRechargeHandler{
+		req:  http_model.NewAcceptRechargeRequest(),
+		resp: http_model.NewAcceptRechargeResponse(),
+		ctx:  ctx,
+	}
+}
+
+type AcceptRechargeHandler struct {
+	req  *http_model.AcceptRechargeRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *AcceptRechargeHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *AcceptRechargeHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *AcceptRechargeHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *AcceptRechargeHandler) run() {
+	data := http_model.AcceptRechargeRequest{}
+	data = *h.req
+	res, err := db.AcceptRecharge(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[AcceptRechargeHandler] call AcceptRecharge err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("AcceptRecharge fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功同意充值"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h *AcceptRechargeHandler) checkParam() error {
+	return nil
+}

+ 57 - 0
handler/confirmsupplierInvoice.go

@@ -0,0 +1,57 @@
+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 WrapConfirmSupplierInvoiceHandler(ctx *gin.Context) {
+	handler := newConfirmSupplierInvoiceHandler(ctx)
+	BaseRun(handler)
+}
+
+type ConfirmSupplierInvoiceHandler struct {
+	ctx  *gin.Context
+	req  *http_model.ConfirmSupplierInvoiceRequest
+	resp *http_model.CommonResponse
+}
+
+func (c ConfirmSupplierInvoiceHandler) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c ConfirmSupplierInvoiceHandler) getResponse() interface{} {
+	return c.resp
+}
+
+func (c ConfirmSupplierInvoiceHandler) getRequest() interface{} {
+	return c.req
+}
+
+func (c ConfirmSupplierInvoiceHandler) run() {
+	err := db.ConfirmSupplierInvoice(c.ctx, c.req)
+	if err != nil {
+		// 数据库查询失败,返回5001
+		logrus.Errorf("[ConfirmSupplierInvoiceHandler] call ConfirmSupplierInvoice err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("ConfirmSupplierInvoice fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "确认开票成功"
+}
+
+func (c ConfirmSupplierInvoiceHandler) checkParam() error {
+	return nil
+}
+
+func newConfirmSupplierInvoiceHandler(ctx *gin.Context) *ConfirmSupplierInvoiceHandler {
+	return &ConfirmSupplierInvoiceHandler{
+		ctx:  ctx,
+		req:  http_model.NewConfirmSupplierInvoiceRequest(),
+		resp: http_model.NewConfirmSupplierInvoiceResponse(),
+	}
+}

+ 57 - 0
handler/confirmwithdraw.go

@@ -0,0 +1,57 @@
+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 WrapConfirmWithdrawHandler(ctx *gin.Context) {
+	handler := newConfirmWithdrawHandler(ctx)
+	BaseRun(handler)
+}
+
+type ConfirmWithdrawHandler struct {
+	ctx  *gin.Context
+	req  *http_model.ConfirmWithdrawRequest
+	resp *http_model.CommonResponse
+}
+
+func (c ConfirmWithdrawHandler) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c ConfirmWithdrawHandler) getResponse() interface{} {
+	return c.resp
+}
+
+func (c ConfirmWithdrawHandler) getRequest() interface{} {
+	return c.req
+}
+
+func (c ConfirmWithdrawHandler) run() {
+	err := db.ConfirmWithdraw(c.ctx, c.req)
+	if err != nil {
+		// 数据库查询失败,返回5001
+		logrus.Errorf("[ConfirmWithdrawHandler] call ConfirmWithdraw err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("ConfirmWithdraw fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "确认提现成功"
+}
+
+func (c ConfirmWithdrawHandler) checkParam() error {
+	return nil
+}
+
+func newConfirmWithdrawHandler(ctx *gin.Context) *ConfirmWithdrawHandler {
+	return &ConfirmWithdrawHandler{
+		ctx:  ctx,
+		req:  http_model.NewConfirmWithdrawRequest(),
+		resp: http_model.NewConfirmWithdrawResponse(),
+	}
+}

+ 56 - 0
handler/getInvoicevalue.go

@@ -0,0 +1,56 @@
+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 WrapGetInvoiceValueHandler(ctx *gin.Context) {
+	handler := newGetInvoiceValueHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetInvoiceValueHandler struct {
+	ctx  *gin.Context
+	req  *http_model.GetInvoiceValueRequest
+	resp *http_model.CommonResponse
+}
+
+func (g GetInvoiceValueHandler) getContext() *gin.Context {
+	return g.ctx
+}
+
+func (g GetInvoiceValueHandler) getResponse() interface{} {
+	return g.resp
+}
+
+func (g GetInvoiceValueHandler) getRequest() interface{} {
+	return g.req
+}
+
+func (g GetInvoiceValueHandler) run() {
+	req := g.req
+	data, err := db.GetInvoiceValue(g.ctx, *req)
+	if err != nil {
+		logrus.WithContext(g.ctx).Errorf("[GetInvoiceValueHandler] error GetInvoiceValue, err:%+v", err)
+		util.HandlerPackErrorResp(g.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	g.resp.Data = data
+}
+
+func (g GetInvoiceValueHandler) checkParam() error {
+	return nil
+}
+
+func newGetInvoiceValueHandler(ctx *gin.Context) *GetInvoiceValueHandler {
+	return &GetInvoiceValueHandler{
+		ctx:  ctx,
+		req:  http_model.NewGetInvoiceValueRequest(),
+		resp: http_model.NewGetInvoiceValueResponse(),
+	}
+}

+ 56 - 55
handler/getWithdrawNum.go

@@ -1,55 +1,56 @@
-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 WrapGetWithdrawNumsHandler(ctx *gin.Context) {
-	handler := newGetWithdrawNumsHandler(ctx)
-	BaseRun(handler)
-}
-
-type GetWithdrawNumsHandler struct {
-	ctx  *gin.Context
-	req  *http_model.GetWithdrawNumsRequest
-	resp *http_model.CommonResponse
-}
-
-func (g GetWithdrawNumsHandler) getContext() *gin.Context {
-	return g.ctx
-}
-
-func (g GetWithdrawNumsHandler) getResponse() interface{} {
-	return g.resp
-}
-
-func (g GetWithdrawNumsHandler) getRequest() interface{} {
-	return g.req
-}
-
-func (g GetWithdrawNumsHandler) run() {
-	data, err := db.GetWithdrawNums(g.ctx)
-	if err != nil {
-		logrus.WithContext(g.ctx).Errorf("[GetWithdrawNumsHandler] error GetWithdrawNums, err:%+v", err)
-		util.HandlerPackErrorResp(g.resp, consts.ErrorInternal, consts.DefaultToast)
-		return
-	}
-	g.resp.Data = data
-}
-
-func (g GetWithdrawNumsHandler) checkParam() error {
-	return nil
-}
-
-func newGetWithdrawNumsHandler(ctx *gin.Context) *GetWithdrawNumsHandler {
-	return &GetWithdrawNumsHandler{
-		ctx:  ctx,
-		req:  http_model.NewGetWithdrawNumsRequest(),
-		resp: http_model.NewGetWithdrawNumsResponse(),
-	}
-}
+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 WrapGetWithdrawNumsHandler(ctx *gin.Context) {
+	handler := newGetWithdrawNumsHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetWithdrawNumsHandler struct {
+	ctx  *gin.Context
+	req  *http_model.GetWithdrawNumsRequest
+	resp *http_model.CommonResponse
+}
+
+func (g GetWithdrawNumsHandler) getContext() *gin.Context {
+	return g.ctx
+}
+
+func (g GetWithdrawNumsHandler) getResponse() interface{} {
+	return g.resp
+}
+
+func (g GetWithdrawNumsHandler) getRequest() interface{} {
+	return g.req
+}
+
+func (g GetWithdrawNumsHandler) run() {
+	data, err := db.GetWithdrawNums(g.ctx)
+	if err != nil {
+		logrus.WithContext(g.ctx).Errorf("[GetWithdrawNumsHandler] error GetWithdrawNums, err:%+v", err)
+		util.HandlerPackErrorResp(g.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	g.resp.Data = data
+	g.resp.Status = consts.ErrorSuccess
+}
+
+func (g GetWithdrawNumsHandler) checkParam() error {
+	return nil
+}
+
+func newGetWithdrawNumsHandler(ctx *gin.Context) *GetWithdrawNumsHandler {
+	return &GetWithdrawNumsHandler{
+		ctx:  ctx,
+		req:  http_model.NewGetWithdrawNumsRequest(),
+		resp: http_model.NewGetWithdrawNumsResponse(),
+	}
+}

+ 57 - 56
handler/getWithdrawalRecord.go

@@ -1,56 +1,57 @@
-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 WrapGetWithdrawalRecordHandler(ctx *gin.Context) {
-	handler := newGetWithdrawalRecordHandler(ctx)
-	BaseRun(handler)
-}
-
-type GetWithdrawalRecordHandler struct {
-	ctx  *gin.Context
-	req  *http_model.GetWithdrawalRecordRequest
-	resp *http_model.CommonResponse
-}
-
-func (g GetWithdrawalRecordHandler) getContext() *gin.Context {
-	return g.ctx
-}
-
-func (g GetWithdrawalRecordHandler) getResponse() interface{} {
-	return g.resp
-}
-
-func (g GetWithdrawalRecordHandler) getRequest() interface{} {
-	return g.req
-}
-
-func (g GetWithdrawalRecordHandler) run() {
-	//fmt.Println("talentId1:", g.req.TalentId)
-	data, err := db.GetWithdrawRecord(g.ctx, g.req)
-	if err != nil {
-		logrus.WithContext(g.ctx).Errorf("[GetWithdrawalRecordHandler] error GetWithdrawRecord, err:%+v", err)
-		util.HandlerPackErrorResp(g.resp, consts.ErrorInternal, consts.DefaultToast)
-		return
-	}
-	g.resp.Data = data
-}
-
-func (g GetWithdrawalRecordHandler) checkParam() error {
-	return nil
-}
-
-func newGetWithdrawalRecordHandler(ctx *gin.Context) *GetWithdrawalRecordHandler {
-	return &GetWithdrawalRecordHandler{
-		ctx:  ctx,
-		req:  http_model.NewGetWithdrawalRecordRequest(),
-		resp: http_model.NewGetWithdrawRecordRequest(),
-	}
-}
+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 WrapGetWithdrawalRecordHandler(ctx *gin.Context) {
+	handler := newGetWithdrawalRecordHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetWithdrawalRecordHandler struct {
+	ctx  *gin.Context
+	req  *http_model.GetWithdrawalRecordRequest
+	resp *http_model.CommonResponse
+}
+
+func (g GetWithdrawalRecordHandler) getContext() *gin.Context {
+	return g.ctx
+}
+
+func (g GetWithdrawalRecordHandler) getResponse() interface{} {
+	return g.resp
+}
+
+func (g GetWithdrawalRecordHandler) getRequest() interface{} {
+	return g.req
+}
+
+func (g GetWithdrawalRecordHandler) run() {
+	//fmt.Println("talentId1:", g.req.TalentId)
+	data, err := db.GetWithdrawRecord(g.ctx, g.req)
+	if err != nil {
+		logrus.WithContext(g.ctx).Errorf("[GetWithdrawalRecordHandler] error GetWithdrawRecord, err:%+v", err)
+		util.HandlerPackErrorResp(g.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	g.resp.Data = data
+	g.resp.Status = consts.ErrorSuccess
+}
+
+func (g GetWithdrawalRecordHandler) checkParam() error {
+	return nil
+}
+
+func newGetWithdrawalRecordHandler(ctx *gin.Context) *GetWithdrawalRecordHandler {
+	return &GetWithdrawalRecordHandler{
+		ctx:  ctx,
+		req:  http_model.NewGetWithdrawalRecordRequest(),
+		resp: http_model.NewGetWithdrawRecordRequest(),
+	}
+}

+ 58 - 0
handler/getbilllist.go

@@ -0,0 +1,58 @@
+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 WrapGetBillTaskListHandler(ctx *gin.Context) {
+	handler := newGetBillTaskListHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetBillTaskList struct {
+	ctx  *gin.Context
+	req  *http_model.GetBillTaskListRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetBillTaskList) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetBillTaskList) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetBillTaskList) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetBillTaskList) run() {
+	data := *c.req
+	res, err := db.GetBillTaskList(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetBillTaskList] call GetBillTaskList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetBillTaskList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询开票列表"
+	c.resp.Data = res
+}
+
+func (c GetBillTaskList) checkParam() error {
+	return nil
+}
+
+func newGetBillTaskListHandler(ctx *gin.Context) *GetBillTaskList {
+	return &GetBillTaskList{
+		ctx:  ctx,
+		req:  http_model.NewGetBillTaskListRequest(),
+		resp: http_model.NewGetBillTaskListResponse(),
+	}
+}

+ 56 - 0
handler/getinvoiceinfo.go

@@ -0,0 +1,56 @@
+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 WrapGetInvoiceInfoHandler(ctx *gin.Context) {
+	handler := newGetInvoiceInfoHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetInvoiceInfoHandler struct {
+	ctx  *gin.Context
+	req  *http_model.GetInvoiceInfoRequest
+	resp *http_model.CommonResponse
+}
+
+func (g GetInvoiceInfoHandler) getContext() *gin.Context {
+	return g.ctx
+}
+
+func (g GetInvoiceInfoHandler) getResponse() interface{} {
+	return g.resp
+}
+
+func (g GetInvoiceInfoHandler) getRequest() interface{} {
+	return g.req
+}
+
+func (g GetInvoiceInfoHandler) run() {
+	req := g.req
+	data, err := db.GetInvoiceInfo(g.ctx, *req)
+	if err != nil {
+		logrus.WithContext(g.ctx).Errorf("[GetInvoiceInfoHandler] error GetInvoiceInfo, err:%+v", err)
+		util.HandlerPackErrorResp(g.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	g.resp.Data = data
+}
+
+func (g GetInvoiceInfoHandler) checkParam() error {
+	return nil
+}
+
+func newGetInvoiceInfoHandler(ctx *gin.Context) *GetInvoiceInfoHandler {
+	return &GetInvoiceInfoHandler{
+		ctx:  ctx,
+		req:  http_model.NewGetInvoiceInfoRequest(),
+		resp: http_model.NewGetInvoiceInfoResponse(),
+	}
+}

+ 59 - 0
handler/getinvoicelist.go

@@ -0,0 +1,59 @@
+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 WrapGetInvoiceListHandler(ctx *gin.Context) {
+	handler := newGetInvoiceListHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetInvoiceList struct {
+	ctx  *gin.Context
+	req  *http_model.GetInvoiceListRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetInvoiceList) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetInvoiceList) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetInvoiceList) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetInvoiceList) run() {
+	data := http_model.GetInvoiceListRequest{}
+	data = *c.req
+	res, err := db.GetInvoiceList(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetInvoiceList] call GetInvoiceList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetInvoiceList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询开票列表"
+	c.resp.Data = res
+}
+
+func (c GetInvoiceList) checkParam() error {
+	return nil
+}
+
+func newGetInvoiceListHandler(ctx *gin.Context) *GetInvoiceList {
+	return &GetInvoiceList{
+		ctx:  ctx,
+		req:  http_model.NewGetInvoiceListRequest(),
+		resp: http_model.NewGetInvoiceListResponse(),
+	}
+}

+ 60 - 0
handler/getlocaltasklist.go

@@ -0,0 +1,60 @@
+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 WrapGetLocalTaskListHandler(ctx *gin.Context) {
+	handler := newGetLocalTaskListHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetLocalTaskList struct {
+	ctx  *gin.Context
+	req  *http_model.GetLocalTaskListRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetLocalTaskList) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetLocalTaskList) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetLocalTaskList) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetLocalTaskList) run() {
+	data := http_model.GetLocalTaskListRequest{}
+	data = *c.req
+	res, err := service.LocalTask.GetLocalList(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetSecTaskList] call GetSecTaskList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetSecTaskList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询本地生活报名达人"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c GetLocalTaskList) checkParam() error {
+	return nil
+}
+
+func newGetLocalTaskListHandler(ctx *gin.Context) *GetLocalTaskList {
+	return &GetLocalTaskList{
+		ctx:  ctx,
+		req:  http_model.NewGetLocalTaskListRequest(),
+		resp: http_model.NewGetLocalTaskListResponse(),
+	}
+}

+ 60 - 0
handler/getprerechargelist.go

@@ -0,0 +1,60 @@
+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 WrapGetPreRechargeListHandler(ctx *gin.Context) {
+	handler := newGetPreRechargeListHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetPreRechargeList struct {
+	ctx  *gin.Context
+	req  *http_model.GetPreRechargeListRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetPreRechargeList) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetPreRechargeList) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetPreRechargeList) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetPreRechargeList) run() {
+	data := http_model.GetPreRechargeListRequest{}
+	data = *c.req
+	res, err := db.GetPreRechargeList(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetPreRechargeList] call GetPreRechargeList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetPreRechargeList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询充值待确认列表"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c GetPreRechargeList) checkParam() error {
+	return nil
+}
+
+func newGetPreRechargeListHandler(ctx *gin.Context) *GetPreRechargeList {
+	return &GetPreRechargeList{
+		ctx:  ctx,
+		req:  http_model.NewGetPreRechargeListRequest(),
+		resp: http_model.NewGetPreRechargeListResponse(),
+	}
+}

+ 57 - 0
handler/getrechargevalue.go

@@ -0,0 +1,57 @@
+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 WrapGetRechargeValueHandler(ctx *gin.Context) {
+	handler := newGetRechargeValueHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetRechargeValueHandler struct {
+	ctx  *gin.Context
+	req  *http_model.GetRechargeValueRequest
+	resp *http_model.CommonResponse
+}
+
+func (g GetRechargeValueHandler) getContext() *gin.Context {
+	return g.ctx
+}
+
+func (g GetRechargeValueHandler) getResponse() interface{} {
+	return g.resp
+}
+
+func (g GetRechargeValueHandler) getRequest() interface{} {
+	return g.req
+}
+
+func (g GetRechargeValueHandler) run() {
+	req := g.req
+	data, err := db.GetRechargeValue(g.ctx, *req)
+	if err != nil {
+		logrus.WithContext(g.ctx).Errorf("[GetRechargeValueHandler] error GetRechargeValue, err:%+v", err)
+		util.HandlerPackErrorResp(g.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	g.resp.Data = data
+	g.resp.Status = consts.ErrorSuccess
+}
+
+func (g GetRechargeValueHandler) checkParam() error {
+	return nil
+}
+
+func newGetRechargeValueHandler(ctx *gin.Context) *GetRechargeValueHandler {
+	return &GetRechargeValueHandler{
+		ctx:  ctx,
+		req:  http_model.NewGetRechargeValueRequest(),
+		resp: http_model.NewGetRechargeValueResponse(),
+	}
+}

+ 58 - 0
handler/getsupplierinvoicelist.go

@@ -0,0 +1,58 @@
+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 WrapGetSupplierInvoiceListHandler(ctx *gin.Context) {
+	handler := newGetSupplierInvoiceListHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetSupplierInvoiceList struct {
+	ctx  *gin.Context
+	req  *http_model.GetSupplierInvoiceListRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetSupplierInvoiceList) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetSupplierInvoiceList) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetSupplierInvoiceList) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetSupplierInvoiceList) run() {
+	data := *c.req
+	res, err := db.GetSupplierInvoiceList(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetSupplierInvoiceList] call GetSupplierInvoiceList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetSupplierInvoiceList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询开票列表"
+	c.resp.Data = res
+}
+
+func (c GetSupplierInvoiceList) checkParam() error {
+	return nil
+}
+
+func newGetSupplierInvoiceListHandler(ctx *gin.Context) *GetSupplierInvoiceList {
+	return &GetSupplierInvoiceList{
+		ctx:  ctx,
+		req:  http_model.NewGetSupplierInvoiceListRequest(),
+		resp: http_model.NewGetSupplierInvoiceListResponse(),
+	}
+}

+ 56 - 0
handler/getsupplierinvoicevalue.go

@@ -0,0 +1,56 @@
+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 WrapGetSupplierInvoiceValueHandler(ctx *gin.Context) {
+	handler := newGetSupplierInvoiceValueHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetSupplierInvoiceValueHandler struct {
+	ctx  *gin.Context
+	req  *http_model.GetSupplierInvoiceValueRequest
+	resp *http_model.CommonResponse
+}
+
+func (g GetSupplierInvoiceValueHandler) getContext() *gin.Context {
+	return g.ctx
+}
+
+func (g GetSupplierInvoiceValueHandler) getResponse() interface{} {
+	return g.resp
+}
+
+func (g GetSupplierInvoiceValueHandler) getRequest() interface{} {
+	return g.req
+}
+
+func (g GetSupplierInvoiceValueHandler) run() {
+	req := g.req
+	data, err := db.GetSupplierInvoiceValue(g.ctx, *req)
+	if err != nil {
+		logrus.WithContext(g.ctx).Errorf("[GetSupplierInvoiceValueHandler] error GetSupplierInvoiceValue, err:%+v", err)
+		util.HandlerPackErrorResp(g.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	g.resp.Data = data
+}
+
+func (g GetSupplierInvoiceValueHandler) checkParam() error {
+	return nil
+}
+
+func newGetSupplierInvoiceValueHandler(ctx *gin.Context) *GetSupplierInvoiceValueHandler {
+	return &GetSupplierInvoiceValueHandler{
+		ctx:  ctx,
+		req:  http_model.NewGetSupplierInvoiceValueRequest(),
+		resp: http_model.NewGetSupplierInvoiceValueResponse(),
+	}
+}

+ 58 - 0
handler/getsupplierwithdrawlist.go

@@ -0,0 +1,58 @@
+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 WrapGetSupplierWithdrawListHandler(ctx *gin.Context) {
+	handler := newGetSupplierWithdrawListHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetSupplierWithdrawList struct {
+	ctx  *gin.Context
+	req  *http_model.GetSupplierWithdrawListRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetSupplierWithdrawList) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetSupplierWithdrawList) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetSupplierWithdrawList) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetSupplierWithdrawList) run() {
+	data := *c.req
+	res, err := db.GetSupplierWithdrawList(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetSupplierWithdrawList] call GetSupplierWithdrawList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetSupplierWithdrawList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询开票列表"
+	c.resp.Data = res
+}
+
+func (c GetSupplierWithdrawList) checkParam() error {
+	return nil
+}
+
+func newGetSupplierWithdrawListHandler(ctx *gin.Context) *GetSupplierWithdrawList {
+	return &GetSupplierWithdrawList{
+		ctx:  ctx,
+		req:  http_model.NewGetSupplierWithdrawListRequest(),
+		resp: http_model.NewGetSupplierWithdrawListResponse(),
+	}
+}

+ 58 - 0
handler/gettalentwithdrawlist.go

@@ -0,0 +1,58 @@
+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 WrapGetTalentWithdrawListHandler(ctx *gin.Context) {
+	handler := newGetTalentWithdrawListHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetTalentWithdrawList struct {
+	ctx  *gin.Context
+	req  *http_model.GetTalentWithdrawListRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetTalentWithdrawList) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetTalentWithdrawList) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetTalentWithdrawList) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetTalentWithdrawList) run() {
+	data := *c.req
+	res, err := db.GetTalentWithdrawList(c.ctx, &data)
+	if err != nil {
+		logrus.Errorf("[GetTalentWithdrawList] call GetTalentWithdrawList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetTalentWithdrawList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询开票列表"
+	c.resp.Data = res
+}
+
+func (c GetTalentWithdrawList) checkParam() error {
+	return nil
+}
+
+func newGetTalentWithdrawListHandler(ctx *gin.Context) *GetTalentWithdrawList {
+	return &GetTalentWithdrawList{
+		ctx:  ctx,
+		req:  http_model.NewGetTalentWithdrawListRequest(),
+		resp: http_model.NewGetTalentWithdrawListResponse(),
+	}
+}

+ 60 - 0
handler/gettasklist.go

@@ -0,0 +1,60 @@
+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 WrapGetTaskListHandler(ctx *gin.Context) {
+	handler := newGetTaskListHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetTaskList struct {
+	ctx  *gin.Context
+	req  *http_model.GetTaskListRequest
+	resp *http_model.CommonResponse
+}
+
+func (c GetTaskList) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c GetTaskList) getResponse() interface{} {
+	return c.resp
+}
+
+func (c GetTaskList) getRequest() interface{} {
+	return c.req
+}
+
+func (c GetTaskList) run() {
+	data := http_model.GetTaskListRequest{}
+	data = *c.req
+	res, err := service.Task.GetList(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetSecTaskList] call GetSecTaskList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetSecTaskList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询种草达人"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c GetTaskList) checkParam() error {
+	return nil
+}
+
+func newGetTaskListHandler(ctx *gin.Context) *GetTaskList {
+	return &GetTaskList{
+		ctx:  ctx,
+		req:  http_model.NewGetTaskListRequest(),
+		resp: http_model.NewGetTaskListResponse(),
+	}
+}

+ 56 - 0
handler/getwithdrawvalue.go

@@ -0,0 +1,56 @@
+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 WarpGetWithdrawValueHandler(ctx *gin.Context) {
+	handler := newGetWithdrawValueHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetWithdrawValueHandler struct {
+	ctx  *gin.Context
+	req  *http_model.GetWithdrawValueRequest
+	resp *http_model.CommonResponse
+}
+
+func (g GetWithdrawValueHandler) getContext() *gin.Context {
+	return g.ctx
+}
+
+func (g GetWithdrawValueHandler) getResponse() interface{} {
+	return g.resp
+}
+
+func (g GetWithdrawValueHandler) getRequest() interface{} {
+	return g.req
+}
+
+func (g GetWithdrawValueHandler) run() {
+	req := g.req
+	data, err := db.GetWithdrawValue(g.ctx, *req)
+	if err != nil {
+		logrus.WithContext(g.ctx).Errorf("[GetWithdrawValueHandler] error GetWithdrawValue, err:%+v", err)
+		util.HandlerPackErrorResp(g.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	g.resp.Data = data
+}
+
+func (g GetWithdrawValueHandler) checkParam() error {
+	return nil
+}
+
+func newGetWithdrawValueHandler(ctx *gin.Context) *GetWithdrawValueHandler {
+	return &GetWithdrawValueHandler{
+		ctx:  ctx,
+		req:  http_model.NewGetWithdrawValueRequest(),
+		resp: http_model.NewGetWithdrawValueResponse(),
+	}
+}

+ 60 - 0
handler/localaccept_data.go

@@ -0,0 +1,60 @@
+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"
+	log "github.com/sirupsen/logrus"
+)
+
+func WrapLocalAcceptDataHandler(ctx *gin.Context) {
+	handler := newLocalAcceptDataHandler(ctx)
+	BaseRun(handler)
+}
+
+func newLocalAcceptDataHandler(ctx *gin.Context) *LocalAcceptDataHandler {
+	return &LocalAcceptDataHandler{
+		req:  http_model.NewLocalAcceptDataRequest(),
+		resp: http_model.NewLocalAcceptDataResponse(),
+		ctx:  ctx,
+	}
+}
+
+type LocalAcceptDataHandler struct {
+	req  *http_model.LocalAcceptDataRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *LocalAcceptDataHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *LocalAcceptDataHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *LocalAcceptDataHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *LocalAcceptDataHandler) run() {
+	data := http_model.LocalAcceptDataRequest{}
+	data = *h.req
+	res, err := service.Data.LocalAcceptData(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ReviseOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功通过数据"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h *LocalAcceptDataHandler) checkParam() error {
+	return nil
+}

+ 60 - 0
handler/localaccept_link.go

@@ -0,0 +1,60 @@
+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"
+	log "github.com/sirupsen/logrus"
+)
+
+func WrapLocalAcceptLinkHandler(ctx *gin.Context) {
+	handler := newLocalAcceptLinkHandler(ctx)
+	BaseRun(handler)
+}
+
+func newLocalAcceptLinkHandler(ctx *gin.Context) *LocalAcceptLinkHandler {
+	return &LocalAcceptLinkHandler{
+		req:  http_model.NewLocalAcceptLinkRequest(),
+		resp: http_model.NewLocalAcceptLinkResponse(),
+		ctx:  ctx,
+	}
+}
+
+type LocalAcceptLinkHandler struct {
+	req  *http_model.LocalAcceptLinkRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *LocalAcceptLinkHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *LocalAcceptLinkHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *LocalAcceptLinkHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *LocalAcceptLinkHandler) run() {
+	data := http_model.LocalAcceptLinkRequest{}
+	data = *h.req
+	res, err := service.Link.LocalAcceptLink(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ReviseOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功通过链接"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h *LocalAcceptLinkHandler) checkParam() error {
+	return nil
+}

+ 59 - 0
handler/localaccept_sketch.go

@@ -0,0 +1,59 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+)
+
+func WrapLocalAcceptSketchHandler(ctx *gin.Context) {
+	handler := newLocalAcceptSketchHandler(ctx)
+	BaseRun(handler)
+}
+
+func newLocalAcceptSketchHandler(ctx *gin.Context) *LocalAcceptSketchHandler {
+	return &LocalAcceptSketchHandler{
+		req:  http_model.NewLocalAcceptSketchRequest(),
+		resp: http_model.NewLocalAcceptSketchResponse(),
+		ctx:  ctx,
+	}
+}
+
+type LocalAcceptSketchHandler struct {
+	req  *http_model.LocalAcceptSketchRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *LocalAcceptSketchHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *LocalAcceptSketchHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *LocalAcceptSketchHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *LocalAcceptSketchHandler) run() {
+	data := http_model.LocalAcceptSketchRequest{}
+	data = *h.req
+	res, err := service.Sketch.LocalAcceptSketch(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ReviseOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功通过初稿"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h *LocalAcceptSketchHandler) checkParam() error {
+	return nil
+}

+ 60 - 0
handler/localdata_opinion.go

@@ -0,0 +1,60 @@
+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"
+	log "github.com/sirupsen/logrus"
+)
+
+func WrapLocalDataOpinionHandler(ctx *gin.Context) {
+	handler := newLocalDataOpinionHandler(ctx)
+	BaseRun(handler)
+}
+
+func newLocalDataOpinionHandler(ctx *gin.Context) *LocalDataOpinionHandler {
+	return &LocalDataOpinionHandler{
+		req:  http_model.NewLocalDataOpinionRequest(),
+		resp: http_model.NewLocalDataOpinionResponse(),
+		ctx:  ctx,
+	}
+}
+
+type LocalDataOpinionHandler struct {
+	req  *http_model.LocalDataOpinionRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *LocalDataOpinionHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *LocalDataOpinionHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *LocalDataOpinionHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *LocalDataOpinionHandler) run() {
+	data := http_model.LocalDataOpinionRequest{}
+	data = *h.req
+	res, err := service.Data.LocalDataOpinion(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[LocalDataOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "提交数据审核修改意见成功"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h *LocalDataOpinionHandler) checkParam() error {
+	return nil
+}

+ 60 - 0
handler/locallink_opinion.go

@@ -0,0 +1,60 @@
+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"
+	log "github.com/sirupsen/logrus"
+)
+
+func WrapLocalLinkOpinionHandler(ctx *gin.Context) {
+	handler := newLocalLinkOpinionHandler(ctx)
+	BaseRun(handler)
+}
+
+func newLocalLinkOpinionHandler(ctx *gin.Context) *LocalLinkOpinionHandler {
+	return &LocalLinkOpinionHandler{
+		req:  http_model.NewLocalLinkOpinionRequest(),
+		resp: http_model.NewLocalLinkOpinionResponse(),
+		ctx:  ctx,
+	}
+}
+
+type LocalLinkOpinionHandler struct {
+	req  *http_model.LocalLinkOpinionRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *LocalLinkOpinionHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *LocalLinkOpinionHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *LocalLinkOpinionHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *LocalLinkOpinionHandler) run() {
+	data := http_model.LocalLinkOpinionRequest{}
+	data = *h.req
+	res, err := service.Link.LocalLinkOpinion(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[LocalLinkOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "提交脚本修改意见成功"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h *LocalLinkOpinionHandler) checkParam() error {
+	return nil
+}

+ 57 - 0
handler/localpredatalist.go

@@ -0,0 +1,57 @@
+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 WrapLocalPreDataListHandler(ctx *gin.Context) {
+	handler := newLocalPreDataListHandler(ctx)
+	BaseRun(handler)
+}
+
+func newLocalPreDataListHandler(ctx *gin.Context) *LocalPreDataListHandler {
+	return &LocalPreDataListHandler{
+		req:  http_model.NewLocalPreDataListRequest(),
+		resp: http_model.NewLocalPreDataListResponse(),
+		ctx:  ctx,
+	}
+}
+
+type LocalPreDataListHandler struct {
+	req  *http_model.LocalPreDataListRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h LocalPreDataListHandler) getRequest() interface{} {
+	return h.req
+}
+func (h LocalPreDataListHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h LocalPreDataListHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h LocalPreDataListHandler) run() {
+	data := http_model.LocalPreDataListRequest{}
+	data = *h.req
+	res, err := service.LocalTask.GetLocalPreDataList(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetLocalPreDataList] call GetLocalPreDataList err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		logrus.Info("GetLocalPreDataList fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功查询数据待传列表"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h LocalPreDataListHandler) checkParam() error {
+	return nil
+}

+ 60 - 0
handler/localpresketchlist.go

@@ -0,0 +1,60 @@
+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 WrapLocalPreSketchListHandler(ctx *gin.Context) {
+	handler := newLocalPreSketchListHandler(ctx)
+	BaseRun(handler)
+}
+
+type LocalPreSketchList struct {
+	ctx  *gin.Context
+	req  *http_model.LocalPreSketchListRequest
+	resp *http_model.CommonResponse
+}
+
+func (c LocalPreSketchList) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c LocalPreSketchList) getResponse() interface{} {
+	return c.resp
+}
+
+func (c LocalPreSketchList) getRequest() interface{} {
+	return c.req
+}
+
+func (c LocalPreSketchList) run() {
+	data := http_model.LocalPreSketchListRequest{}
+	data = *c.req
+	res, err := service.LocalTask.GetLocalPreSketchList(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetLocalPreSketchList] call GetLocalPreSketchList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetLocalPreSketchList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询待传初稿"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c LocalPreSketchList) checkParam() error {
+	return nil
+}
+
+func newLocalPreSketchListHandler(ctx *gin.Context) *LocalPreSketchList {
+	return &LocalPreSketchList{
+		ctx:  ctx,
+		req:  http_model.NewLocalPreSketchListRequest(),
+		resp: http_model.NewLocalPreSketchListResponse(),
+	}
+}

+ 60 - 0
handler/localreject_data.go

@@ -0,0 +1,60 @@
+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"
+	log "github.com/sirupsen/logrus"
+)
+
+func WrapLocalRejectDataHandler(ctx *gin.Context) {
+	handler := newLocalRejectDataHandler(ctx)
+	BaseRun(handler)
+}
+
+func newLocalRejectDataHandler(ctx *gin.Context) *LocalRejectDataHandler {
+	return &LocalRejectDataHandler{
+		req:  http_model.NewLocalRejectDataRequest(),
+		resp: http_model.NewLocalRejectDataResponse(),
+		ctx:  ctx,
+	}
+}
+
+type LocalRejectDataHandler struct {
+	req  *http_model.LocalRejectDataRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *LocalRejectDataHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *LocalRejectDataHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *LocalRejectDataHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *LocalRejectDataHandler) run() {
+	data := http_model.LocalRejectDataRequest{}
+	data = *h.req
+	res, err := service.Data.LocalRejectData(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ReviseOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功拒绝数据"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h *LocalRejectDataHandler) checkParam() error {
+	return nil
+}

+ 60 - 0
handler/localreject_link.go

@@ -0,0 +1,60 @@
+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"
+	log "github.com/sirupsen/logrus"
+)
+
+func WrapLocalRejectLinkHandler(ctx *gin.Context) {
+	handler := newLocalRejectLinkHandler(ctx)
+	BaseRun(handler)
+}
+
+func newLocalRejectLinkHandler(ctx *gin.Context) *LocalRejectLinkHandler {
+	return &LocalRejectLinkHandler{
+		req:  http_model.NewLocalRejectLinkRequest(),
+		resp: http_model.NewLocalRejectLinkResponse(),
+		ctx:  ctx,
+	}
+}
+
+type LocalRejectLinkHandler struct {
+	req  *http_model.LocalRejectLinkRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *LocalRejectLinkHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *LocalRejectLinkHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *LocalRejectLinkHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *LocalRejectLinkHandler) run() {
+	data := http_model.LocalRejectLinkRequest{}
+	data = *h.req
+	res, err := service.Link.LocalRejectLink(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ReviseOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功拒绝链接"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h *LocalRejectLinkHandler) checkParam() error {
+	return nil
+}

+ 58 - 0
handler/localreject_sketch.go

@@ -0,0 +1,58 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+)
+
+func WrapLocalRejectSketchHandler(ctx *gin.Context) {
+	handler := newLocalRejectSketchHandler(ctx)
+	BaseRun(handler)
+}
+
+func newLocalRejectSketchHandler(ctx *gin.Context) *LocalRejectSketchHandler {
+	return &LocalRejectSketchHandler{
+		req:  http_model.NewLocalRejectSketchRequest(),
+		resp: http_model.NewLocalRejectSketchResponse(),
+		ctx:  ctx,
+	}
+}
+
+type LocalRejectSketchHandler struct {
+	req  *http_model.LocalRejectSketchRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *LocalRejectSketchHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *LocalRejectSketchHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *LocalRejectSketchHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *LocalRejectSketchHandler) run() {
+	data := http_model.LocalRejectSketchRequest{}
+	data = *h.req
+	res, err := service.Sketch.LocalRejectSketch(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ReviseOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功拒绝初稿"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+func (h *LocalRejectSketchHandler) checkParam() error {
+	return nil
+}

+ 59 - 0
handler/localsketch_opinion.go

@@ -0,0 +1,59 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+)
+
+func WrapLocalSketchOpinionHandler(ctx *gin.Context) {
+	handler := newLocalSketchOpinionHandler(ctx)
+	BaseRun(handler)
+}
+
+func newLocalSketchOpinionHandler(ctx *gin.Context) *LocalSketchOpinionHandler {
+	return &LocalSketchOpinionHandler{
+		req:  http_model.NewLocalSketchOpinionRequest(),
+		resp: http_model.NewLocalSketchOpinionResponse(),
+		ctx:  ctx,
+	}
+}
+
+type LocalSketchOpinionHandler struct {
+	req  *http_model.LocalSketchOpinionRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *LocalSketchOpinionHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *LocalSketchOpinionHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *LocalSketchOpinionHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *LocalSketchOpinionHandler) run() {
+	data := http_model.LocalSketchOpinionRequest{}
+	data = *h.req
+	res, err := service.Sketch.LocalSketchOption(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[LocalSketchOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "提交初稿修改意见成功"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h *LocalSketchOpinionHandler) checkParam() error {
+	return nil
+}

+ 60 - 0
handler/localtaskdatalist.go

@@ -0,0 +1,60 @@
+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 WrapLocalTaskDatalistHandler(ctx *gin.Context) {
+	handler := newLocalTaskDatalistHandler(ctx)
+	BaseRun(handler)
+}
+
+type LocalTaskDatalist struct {
+	ctx  *gin.Context
+	req  *http_model.LocalTaskDatalistRequest
+	resp *http_model.CommonResponse
+}
+
+func (c LocalTaskDatalist) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c LocalTaskDatalist) getResponse() interface{} {
+	return c.resp
+}
+
+func (c LocalTaskDatalist) getRequest() interface{} {
+	return c.req
+}
+
+func (c LocalTaskDatalist) run() {
+	data := http_model.LocalTaskDatalistRequest{}
+	data = *c.req
+	res, err := service.LocalTask.GetLocalTaskDatalist(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetLocalTaskDatalist] call GetLocalTaskDatalist err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetLocalTaskDatalist fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询数据待审列表"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c LocalTaskDatalist) checkParam() error {
+	return nil
+}
+
+func newLocalTaskDatalistHandler(ctx *gin.Context) *LocalTaskDatalist {
+	return &LocalTaskDatalist{
+		ctx:  ctx,
+		req:  http_model.NewLocalTaskDatalistRequest(),
+		resp: http_model.NewLocalTaskDatalistResponse(),
+	}
+}

+ 60 - 0
handler/localtasklinklist.go

@@ -0,0 +1,60 @@
+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 WrapLocalTaskLinklistHandler(ctx *gin.Context) {
+	handler := newLocalTaskLinklistHandler(ctx)
+	BaseRun(handler)
+}
+
+type LocalTaskLinklist struct {
+	ctx  *gin.Context
+	req  *http_model.LocalTaskLinklistRequest
+	resp *http_model.CommonResponse
+}
+
+func (c LocalTaskLinklist) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c LocalTaskLinklist) getResponse() interface{} {
+	return c.resp
+}
+
+func (c LocalTaskLinklist) getRequest() interface{} {
+	return c.req
+}
+
+func (c LocalTaskLinklist) run() {
+	data := http_model.LocalTaskLinklistRequest{}
+	data = *c.req
+	res, err := service.LocalTask.GetLocalTaskLinklist(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetLocalTaskLinklist] call GetLocalTaskLinklist err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetLocalTaskLinklist fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询链接待审列表"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c LocalTaskLinklist) checkParam() error {
+	return nil
+}
+
+func newLocalTaskLinklistHandler(ctx *gin.Context) *LocalTaskLinklist {
+	return &LocalTaskLinklist{
+		ctx:  ctx,
+		req:  http_model.NewLocalTaskLinklistRequest(),
+		resp: http_model.NewLocalTaskLinklistResponse(),
+	}
+}

+ 60 - 0
handler/localtasksketchlist.go

@@ -0,0 +1,60 @@
+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 WrapLocalTasksketchlistHandler(ctx *gin.Context) {
+	handler := newLocalTasksketchlistHandler(ctx)
+	BaseRun(handler)
+}
+
+type LocalTasksketchlist struct {
+	ctx  *gin.Context
+	req  *http_model.LocalTasksketchlistRequest
+	resp *http_model.CommonResponse
+}
+
+func (c LocalTasksketchlist) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c LocalTasksketchlist) getResponse() interface{} {
+	return c.resp
+}
+
+func (c LocalTasksketchlist) getRequest() interface{} {
+	return c.req
+}
+
+func (c LocalTasksketchlist) run() {
+	data := http_model.LocalTasksketchlistRequest{}
+	data = *c.req
+	res, err := service.LocalTask.GetLocalTasksketchlist(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetLocalTasksketchList] call GetLocalTasksketchList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetLocalTasksketchList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询初稿列表"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c LocalTasksketchlist) checkParam() error {
+	return nil
+}
+
+func newLocalTasksketchlistHandler(ctx *gin.Context) *LocalTasksketchlist {
+	return &LocalTasksketchlist{
+		ctx:  ctx,
+		req:  http_model.NewLocalTasksketchlistRequest(),
+		resp: http_model.NewLocalTasksketchlistResponse(),
+	}
+}

+ 57 - 0
handler/predatalist.go

@@ -0,0 +1,57 @@
+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 WrapPreDataListHandler(ctx *gin.Context) {
+	handler := newPreDataListHandler(ctx)
+	BaseRun(handler)
+}
+
+func newPreDataListHandler(ctx *gin.Context) *PreDataListHandler {
+	return &PreDataListHandler{
+		req:  http_model.NewPreDataListRequest(),
+		resp: http_model.NewPreDataListResponse(),
+		ctx:  ctx,
+	}
+}
+
+type PreDataListHandler struct {
+	req  *http_model.PreDataListRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h PreDataListHandler) getRequest() interface{} {
+	return h.req
+}
+func (h PreDataListHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h PreDataListHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h PreDataListHandler) run() {
+	data := http_model.PreDataListRequest{}
+	data = *h.req
+	res, err := service.Task.GetPreDataList(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetPreDataList] call GetPreDataList err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		logrus.Info("GetPreDataList fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功查询数据待传列表"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h PreDataListHandler) checkParam() error {
+	return nil
+}

+ 60 - 0
handler/presketchlist.go

@@ -0,0 +1,60 @@
+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 WrapPreSketchListHandler(ctx *gin.Context) {
+	handler := newPreSketchListHandler(ctx)
+	BaseRun(handler)
+}
+
+type PreSketchList struct {
+	ctx  *gin.Context
+	req  *http_model.PreSketchListRequest
+	resp *http_model.CommonResponse
+}
+
+func (c PreSketchList) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c PreSketchList) getResponse() interface{} {
+	return c.resp
+}
+
+func (c PreSketchList) getRequest() interface{} {
+	return c.req
+}
+
+func (c PreSketchList) run() {
+	data := http_model.PreSketchListRequest{}
+	data = *c.req
+	res, err := service.Task.GetPreSketchList(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetPreSketchList] call GetPreSketchList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetPreSketchList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询待传初稿"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c PreSketchList) checkParam() error {
+	return nil
+}
+
+func newPreSketchListHandler(ctx *gin.Context) *PreSketchList {
+	return &PreSketchList{
+		ctx:  ctx,
+		req:  http_model.NewPreSketchListRequest(),
+		resp: http_model.NewPreSketchListResponse(),
+	}
+}

+ 59 - 0
handler/refusecharge.go

@@ -0,0 +1,59 @@
+package handler
+
+import (
+	"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/util"
+)
+
+func WrapRefuseRechargeHandler(ctx *gin.Context) {
+	handler := newRefuseRechargeHandler(ctx)
+	BaseRun(handler)
+}
+
+func newRefuseRechargeHandler(ctx *gin.Context) *RefuseRechargeHandler {
+	return &RefuseRechargeHandler{
+		req:  http_model.NewRefuseRechargeRequest(),
+		resp: http_model.NewRefuseRechargeResponse(),
+		ctx:  ctx,
+	}
+}
+
+type RefuseRechargeHandler struct {
+	req  *http_model.RefuseRechargeRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *RefuseRechargeHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *RefuseRechargeHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *RefuseRechargeHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *RefuseRechargeHandler) run() {
+	data := http_model.RefuseRechargeRequest{}
+	data = *h.req
+	res, err := db.RefuseRecharge(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[RefuseRechargeHandler] call RefuseRecharge err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("RefuseRecharge fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功同意充值"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h *RefuseRechargeHandler) checkParam() error {
+	return nil
+}

+ 57 - 0
handler/refusesupplierInvoice.go

@@ -0,0 +1,57 @@
+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 WrapRefuseSupplierInvoiceHandler(ctx *gin.Context) {
+	handler := newRefuseSupplierInvoiceHandler(ctx)
+	BaseRun(handler)
+}
+
+type RefuseSupplierInvoiceHandler struct {
+	ctx  *gin.Context
+	req  *http_model.RefuseSupplierInvoiceRequest
+	resp *http_model.CommonResponse
+}
+
+func (c RefuseSupplierInvoiceHandler) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c RefuseSupplierInvoiceHandler) getResponse() interface{} {
+	return c.resp
+}
+
+func (c RefuseSupplierInvoiceHandler) getRequest() interface{} {
+	return c.req
+}
+
+func (c RefuseSupplierInvoiceHandler) run() {
+	err := db.RefuseSupplierInvoice(c.ctx, c.req)
+	if err != nil {
+		// 数据库查询失败,返回5001
+		logrus.Errorf("[RefuseSupplierInvoiceHandler] call RefuseSupplierInvoice err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("RefuseSupplierInvoice fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "确认开票成功"
+}
+
+func (c RefuseSupplierInvoiceHandler) checkParam() error {
+	return nil
+}
+
+func newRefuseSupplierInvoiceHandler(ctx *gin.Context) *RefuseSupplierInvoiceHandler {
+	return &RefuseSupplierInvoiceHandler{
+		ctx:  ctx,
+		req:  http_model.NewRefuseSupplierInvoiceRequest(),
+		resp: http_model.NewRefuseSupplierInvoiceResponse(),
+	}
+}

+ 57 - 0
handler/refusewithdraw.go

@@ -0,0 +1,57 @@
+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 WrapRefuseWithdrawHandler(ctx *gin.Context) {
+	handler := newRefuseWithdrawHandler(ctx)
+	BaseRun(handler)
+}
+
+type RefuseWithdrawHandler struct {
+	ctx  *gin.Context
+	req  *http_model.RefuseWithdrawRequest
+	resp *http_model.CommonResponse
+}
+
+func (c RefuseWithdrawHandler) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c RefuseWithdrawHandler) getResponse() interface{} {
+	return c.resp
+}
+
+func (c RefuseWithdrawHandler) getRequest() interface{} {
+	return c.req
+}
+
+func (c RefuseWithdrawHandler) run() {
+	err := db.RefuseWithdraw(c.ctx, c.req)
+	if err != nil {
+		// 数据库查询失败,返回5001
+		logrus.Errorf("[RefuseWithdrawHandler] call RefuseWithdraw err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("RefuseWithdraw fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "拒绝成功"
+}
+
+func (c RefuseWithdrawHandler) checkParam() error {
+	return nil
+}
+
+func newRefuseWithdrawHandler(ctx *gin.Context) *RefuseWithdrawHandler {
+	return &RefuseWithdrawHandler{
+		ctx:  ctx,
+		req:  http_model.NewRefuseWithdrawRequest(),
+		resp: http_model.NewRefuseWithdrawResponse(),
+	}
+}

+ 60 - 0
handler/reject_data.go

@@ -0,0 +1,60 @@
+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"
+	log "github.com/sirupsen/logrus"
+)
+
+func WrapRejectDataHandler(ctx *gin.Context) {
+	handler := newRejectDataHandler(ctx)
+	BaseRun(handler)
+}
+
+func newRejectDataHandler(ctx *gin.Context) *RejectDataHandler {
+	return &RejectDataHandler{
+		req:  http_model.NewRejectDataRequest(),
+		resp: http_model.NewRejectDataResponse(),
+		ctx:  ctx,
+	}
+}
+
+type RejectDataHandler struct {
+	req  *http_model.RejectDataRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *RejectDataHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *RejectDataHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *RejectDataHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *RejectDataHandler) run() {
+	data := http_model.RejectDataRequest{}
+	data = *h.req
+	res, err := service.Data.RejectData(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ReviseOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功拒绝数据"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h *RejectDataHandler) checkParam() error {
+	return nil
+}

+ 60 - 0
handler/reject_link.go

@@ -0,0 +1,60 @@
+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"
+	log "github.com/sirupsen/logrus"
+)
+
+func WrapRejectLinkHandler(ctx *gin.Context) {
+	handler := newRejectLinkHandler(ctx)
+	BaseRun(handler)
+}
+
+func newRejectLinkHandler(ctx *gin.Context) *RejectLinkHandler {
+	return &RejectLinkHandler{
+		req:  http_model.NewRejectLinkRequest(),
+		resp: http_model.NewRejectLinkResponse(),
+		ctx:  ctx,
+	}
+}
+
+type RejectLinkHandler struct {
+	req  *http_model.RejectLinkRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *RejectLinkHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *RejectLinkHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *RejectLinkHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *RejectLinkHandler) run() {
+	data := http_model.RejectLinkRequest{}
+	data = *h.req
+	res, err := service.Link.RejectLink(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ReviseOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功拒绝链接"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+
+func (h *RejectLinkHandler) checkParam() error {
+	return nil
+}

+ 58 - 0
handler/reject_sketch.go

@@ -0,0 +1,58 @@
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+)
+
+func WrapRejectSketchHandler(ctx *gin.Context) {
+	handler := newRejectSketchHandler(ctx)
+	BaseRun(handler)
+}
+
+func newRejectSketchHandler(ctx *gin.Context) *RejectSketchHandler {
+	return &RejectSketchHandler{
+		req:  http_model.NewRejectSketchRequest(),
+		resp: http_model.NewRejectSketchResponse(),
+		ctx:  ctx,
+	}
+}
+
+type RejectSketchHandler struct {
+	req  *http_model.RejectSketchRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *RejectSketchHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *RejectSketchHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *RejectSketchHandler) getResponse() interface{} {
+	return h.resp
+}
+
+func (h *RejectSketchHandler) run() {
+	data := http_model.RejectSketchRequest{}
+	data = *h.req
+	res, err := service.Sketch.RejectSketch(h.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ReviseOpinionHandler] call Create err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorParamCheck, "")
+		log.Info("CreateProject fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Message = "成功拒绝初稿"
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+func (h *RejectSketchHandler) checkParam() error {
+	return nil
+}

+ 62 - 0
handler/reviewlocallife.go

@@ -0,0 +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 WrapReviewLocallifeHandler(ctx *gin.Context) {
+	handler := newReviewLocallifeHandler(ctx)
+	BaseRun(handler)
+}
+
+type ReviewLocallife struct {
+	ctx  *gin.Context
+	req  *http_model.ReviewLocallifeRequest
+	resp *http_model.CommonResponse
+}
+
+func (c ReviewLocallife) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c ReviewLocallife) getResponse() interface{} {
+	return c.resp
+}
+
+func (c ReviewLocallife) getRequest() interface{} {
+	return c.req
+}
+
+func (c ReviewLocallife) run() {
+	data := http_model.ReviewLocallifeRequest{}
+	data = *c.req
+	res, err := service.LocalTask.Review(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ReviewLocallife] call ReviewLocallife err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("ReviewLocallife fail,req:%+v", c.req)
+		return
+	}
+	if data.IsPass == 1 {
+		c.resp.Message = "审核成功"
+	}
+	c.resp.Data = res
+}
+
+func (c ReviewLocallife) checkParam() error {
+	return nil
+}
+
+func newReviewLocallifeHandler(ctx *gin.Context) *ReviewLocallife {
+	return &ReviewLocallife{
+		ctx:  ctx,
+		req:  http_model.NewReviewLocallifeRequest(),
+		resp: http_model.NewReviewLocallifeResponse(),
+	}
+}

+ 62 - 0
handler/reviewproject.go

@@ -0,0 +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 WrapReviewProjectHandler(ctx *gin.Context) {
+	handler := newReviewProjectHandler(ctx)
+	BaseRun(handler)
+}
+
+type ReviewProject struct {
+	ctx  *gin.Context
+	req  *http_model.ReviewProjectRequest
+	resp *http_model.CommonResponse
+}
+
+func (c ReviewProject) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c ReviewProject) getResponse() interface{} {
+	return c.resp
+}
+
+func (c ReviewProject) getRequest() interface{} {
+	return c.req
+}
+
+func (c ReviewProject) run() {
+	data := http_model.ReviewProjectRequest{}
+	data = *c.req
+	res, err := service.Project.Review(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[ReviewProject] call ReviewProject err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("ReviewProject fail,req:%+v", c.req)
+		return
+	}
+	if data.IsPass == 1 {
+		c.resp.Message = "审核成功"
+	}
+	c.resp.Data = res
+}
+
+func (c ReviewProject) checkParam() error {
+	return nil
+}
+
+func newReviewProjectHandler(ctx *gin.Context) *ReviewProject {
+	return &ReviewProject{
+		ctx:  ctx,
+		req:  http_model.NewReviewProjectRequest(),
+		resp: http_model.NewReviewProjectResponse(),
+	}
+}

+ 57 - 0
handler/setinvoiceinfo.go

@@ -0,0 +1,57 @@
+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 WrapSetInvoiceInfoHandler(ctx *gin.Context) {
+	handler := newSetInvoiceInfoHandler(ctx)
+	BaseRun(handler)
+}
+
+type SetInvoiceInfoHandler struct {
+	ctx  *gin.Context
+	req  *http_model.SetInvoiceInfoRequest
+	resp *http_model.CommonResponse
+}
+
+func (c SetInvoiceInfoHandler) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c SetInvoiceInfoHandler) getResponse() interface{} {
+	return c.resp
+}
+
+func (c SetInvoiceInfoHandler) getRequest() interface{} {
+	return c.req
+}
+
+func (c SetInvoiceInfoHandler) run() {
+	err := db.SetInvoiceInfo(c.ctx, c.req)
+	if err != nil {
+		// 数据库查询失败,返回5001
+		logrus.Errorf("[SetInvoiceInfoHandler] call SetInvoiceInfo err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("SetInvoiceInfo fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "确认开票成功"
+}
+
+func (c SetInvoiceInfoHandler) checkParam() error {
+	return nil
+}
+
+func newSetInvoiceInfoHandler(ctx *gin.Context) *SetInvoiceInfoHandler {
+	return &SetInvoiceInfoHandler{
+		ctx:  ctx,
+		req:  http_model.NewSetInvoiceInfoRequest(),
+		resp: http_model.NewSetInvoiceInfoResponse(),
+	}
+}

+ 59 - 58
handler/sketch_photo.go

@@ -1,58 +1,59 @@
-package handler
-
-import (
-	"github.com/gin-gonic/gin"
-	"github.com/sirupsen/logrus"
-	log "github.com/sirupsen/logrus"
-	"youngee_m_api/consts"
-	"youngee_m_api/model/http_model"
-	"youngee_m_api/service"
-	"youngee_m_api/util"
-)
-
-// WrapFindSketchPhotoHandler
-
-func WrapFindSketchPhotoHandler(ctx *gin.Context) {
-	handler := newFindSketchPhotoHandler(ctx)
-	BaseRun(handler)
-}
-
-func newFindSketchPhotoHandler(ctx *gin.Context) *FindSketchPhotoHandler {
-	return &FindSketchPhotoHandler{
-		req:  http_model.NewFindSketchPhotoRequest(),
-		resp: http_model.NewFindSketchPhotoResponse(),
-		ctx:  ctx,
-	}
-}
-
-type FindSketchPhotoHandler struct {
-	req  *http_model.FindSketchPhotoRequest
-	resp *http_model.CommonResponse
-	ctx  *gin.Context
-}
-
-func (h *FindSketchPhotoHandler) getRequest() interface{} {
-	return h.req
-}
-func (h *FindSketchPhotoHandler) getContext() *gin.Context {
-	return h.ctx
-}
-func (h *FindSketchPhotoHandler) getResponse() interface{} {
-	return h.resp
-}
-func (h *FindSketchPhotoHandler) run() {
-	data := *&http_model.FindSketchPhotoRequest{}
-	data = *h.req
-	res, err := service.Sketch.FindPhoto(h.ctx, data)
-	if err != nil {
-		// 数据库查询失败,返回5001
-		logrus.Errorf("[FindSketchPhotoHandler] call FindByID err:%+v\n", err)
-		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
-		log.Info("FindProduct fail,req:%+v", h.req)
-		return
-	}
-	h.resp.Data = res
-}
-func (h *FindSketchPhotoHandler) checkParam() error {
-	return nil
-}
+package handler
+
+import (
+	"github.com/gin-gonic/gin"
+	"github.com/sirupsen/logrus"
+	log "github.com/sirupsen/logrus"
+	"youngee_m_api/consts"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/service"
+	"youngee_m_api/util"
+)
+
+// WrapFindSketchPhotoHandler
+
+func WrapFindSketchPhotoHandler(ctx *gin.Context) {
+	handler := newFindSketchPhotoHandler(ctx)
+	BaseRun(handler)
+}
+
+func newFindSketchPhotoHandler(ctx *gin.Context) *FindSketchPhotoHandler {
+	return &FindSketchPhotoHandler{
+		req:  http_model.NewFindSketchPhotoRequest(),
+		resp: http_model.NewFindSketchPhotoResponse(),
+		ctx:  ctx,
+	}
+}
+
+type FindSketchPhotoHandler struct {
+	req  *http_model.FindSketchPhotoRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (h *FindSketchPhotoHandler) getRequest() interface{} {
+	return h.req
+}
+func (h *FindSketchPhotoHandler) getContext() *gin.Context {
+	return h.ctx
+}
+func (h *FindSketchPhotoHandler) getResponse() interface{} {
+	return h.resp
+}
+func (h *FindSketchPhotoHandler) run() {
+	data := *&http_model.FindSketchPhotoRequest{}
+	data = *h.req
+	res, err := service.Sketch.FindPhoto(h.ctx, data)
+	if err != nil {
+		// 数据库查询失败,返回5001
+		logrus.Errorf("[FindSketchPhotoHandler] call FindByID err:%+v\n", err)
+		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, "")
+		log.Info("FindProduct fail,req:%+v", h.req)
+		return
+	}
+	h.resp.Data = res
+	h.resp.Status = consts.ErrorSuccess
+}
+func (h *FindSketchPhotoHandler) checkParam() error {
+	return nil
+}

+ 56 - 0
handler/supplierwithdrawprevalue.go

@@ -0,0 +1,56 @@
+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 WarpGetSupplierWithdrawPrevalueHandler(ctx *gin.Context) {
+	handler := newGetSupplierWithdrawPrevalueHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetSupplierWithdrawPrevalueHandler struct {
+	ctx  *gin.Context
+	req  *http_model.GetSupplierWithdrawPrevalueRequest
+	resp *http_model.CommonResponse
+}
+
+func (g GetSupplierWithdrawPrevalueHandler) getContext() *gin.Context {
+	return g.ctx
+}
+
+func (g GetSupplierWithdrawPrevalueHandler) getResponse() interface{} {
+	return g.resp
+}
+
+func (g GetSupplierWithdrawPrevalueHandler) getRequest() interface{} {
+	return g.req
+}
+
+func (g GetSupplierWithdrawPrevalueHandler) run() {
+	req := g.req
+	data, err := db.GetSupplierWithdrawPrevalue(g.ctx, *req)
+	if err != nil {
+		logrus.WithContext(g.ctx).Errorf("[GetSupplierWithdrawPrevalueHandler] error GetSupplierWithdrawPrevalue, err:%+v", err)
+		util.HandlerPackErrorResp(g.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	g.resp.Data = data
+}
+
+func (g GetSupplierWithdrawPrevalueHandler) checkParam() error {
+	return nil
+}
+
+func newGetSupplierWithdrawPrevalueHandler(ctx *gin.Context) *GetSupplierWithdrawPrevalueHandler {
+	return &GetSupplierWithdrawPrevalueHandler{
+		ctx:  ctx,
+		req:  http_model.NewGetSupplierWithdrawPrevalueRequest(),
+		resp: http_model.NewGetSupplierWithdrawPrevalueResponse(),
+	}
+}

+ 56 - 0
handler/talentwithdrawprevalue.go

@@ -0,0 +1,56 @@
+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 WarpGetTalentWithdrawPrevalueHandler(ctx *gin.Context) {
+	handler := newGetTalentWithdrawPrevalueHandler(ctx)
+	BaseRun(handler)
+}
+
+type GetTalentWithdrawPrevalueHandler struct {
+	ctx  *gin.Context
+	req  *http_model.GetTalentWithdrawPrevalueRequest
+	resp *http_model.CommonResponse
+}
+
+func (g GetTalentWithdrawPrevalueHandler) getContext() *gin.Context {
+	return g.ctx
+}
+
+func (g GetTalentWithdrawPrevalueHandler) getResponse() interface{} {
+	return g.resp
+}
+
+func (g GetTalentWithdrawPrevalueHandler) getRequest() interface{} {
+	return g.req
+}
+
+func (g GetTalentWithdrawPrevalueHandler) run() {
+	req := g.req
+	data, err := db.GetTalentWithdrawPrevalue(g.ctx, *req)
+	if err != nil {
+		logrus.WithContext(g.ctx).Errorf("[GetTalentWithdrawPrevalueHandler] error GetTalentWithdrawPrevalue, err:%+v", err)
+		util.HandlerPackErrorResp(g.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	g.resp.Data = data
+}
+
+func (g GetTalentWithdrawPrevalueHandler) checkParam() error {
+	return nil
+}
+
+func newGetTalentWithdrawPrevalueHandler(ctx *gin.Context) *GetTalentWithdrawPrevalueHandler {
+	return &GetTalentWithdrawPrevalueHandler{
+		ctx:  ctx,
+		req:  http_model.NewGetTalentWithdrawPrevalueRequest(),
+		resp: http_model.NewGetTalentWithdrawPrevalueResponse(),
+	}
+}

+ 60 - 0
handler/taskdatalist.go

@@ -0,0 +1,60 @@
+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 WrapTaskDatalistHandler(ctx *gin.Context) {
+	handler := newTaskDatalistHandler(ctx)
+	BaseRun(handler)
+}
+
+type TaskDatalist struct {
+	ctx  *gin.Context
+	req  *http_model.TaskDatalistRequest
+	resp *http_model.CommonResponse
+}
+
+func (c TaskDatalist) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c TaskDatalist) getResponse() interface{} {
+	return c.resp
+}
+
+func (c TaskDatalist) getRequest() interface{} {
+	return c.req
+}
+
+func (c TaskDatalist) run() {
+	data := http_model.TaskDatalistRequest{}
+	data = *c.req
+	res, err := service.Task.GetTaskDatalist(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetTaskDatalist] call GetTaskDatalist err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetTaskDatalist fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询数据待审列表"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c TaskDatalist) checkParam() error {
+	return nil
+}
+
+func newTaskDatalistHandler(ctx *gin.Context) *TaskDatalist {
+	return &TaskDatalist{
+		ctx:  ctx,
+		req:  http_model.NewTaskDatalistRequest(),
+		resp: http_model.NewTaskDatalistResponse(),
+	}
+}

+ 60 - 0
handler/tasklinklist.go

@@ -0,0 +1,60 @@
+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 WrapTaskLinklistHandler(ctx *gin.Context) {
+	handler := newTaskLinklistHandler(ctx)
+	BaseRun(handler)
+}
+
+type TaskLinklist struct {
+	ctx  *gin.Context
+	req  *http_model.TaskLinklistRequest
+	resp *http_model.CommonResponse
+}
+
+func (c TaskLinklist) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c TaskLinklist) getResponse() interface{} {
+	return c.resp
+}
+
+func (c TaskLinklist) getRequest() interface{} {
+	return c.req
+}
+
+func (c TaskLinklist) run() {
+	data := http_model.TaskLinklistRequest{}
+	data = *c.req
+	res, err := service.Task.GetTaskLinklist(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetTaskLinklist] call GetTaskLinklist err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetTaskLinklist fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询链接待审列表"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c TaskLinklist) checkParam() error {
+	return nil
+}
+
+func newTaskLinklistHandler(ctx *gin.Context) *TaskLinklist {
+	return &TaskLinklist{
+		ctx:  ctx,
+		req:  http_model.NewTaskLinklistRequest(),
+		resp: http_model.NewTaskLinklistResponse(),
+	}
+}

+ 60 - 0
handler/tasksketchlist.go

@@ -0,0 +1,60 @@
+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 WrapTasksketchlistHandler(ctx *gin.Context) {
+	handler := newTasksketchlistHandler(ctx)
+	BaseRun(handler)
+}
+
+type Tasksketchlist struct {
+	ctx  *gin.Context
+	req  *http_model.TasksketchlistRequest
+	resp *http_model.CommonResponse
+}
+
+func (c Tasksketchlist) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c Tasksketchlist) getResponse() interface{} {
+	return c.resp
+}
+
+func (c Tasksketchlist) getRequest() interface{} {
+	return c.req
+}
+
+func (c Tasksketchlist) run() {
+	data := http_model.TasksketchlistRequest{}
+	data = *c.req
+	res, err := service.Task.GetTasksketchlist(c.ctx, data)
+	if err != nil {
+		logrus.Errorf("[GetTasksketchList] call GetTasksketchList err:%+v\n", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, "")
+		logrus.Info("GetTasksketchList fail,req:%+v", c.req)
+		return
+	}
+	c.resp.Message = "成功查询初稿待审列表"
+	c.resp.Data = res
+	c.resp.Status = consts.ErrorSuccess
+}
+
+func (c Tasksketchlist) checkParam() error {
+	return nil
+}
+
+func newTasksketchlistHandler(ctx *gin.Context) *Tasksketchlist {
+	return &Tasksketchlist{
+		ctx:  ctx,
+		req:  http_model.NewTasksketchlistRequest(),
+		resp: http_model.NewTasksketchlistResponse(),
+	}
+}

+ 68 - 67
handler/withdrawalRecords.go

@@ -1,67 +1,68 @@
-package handler
-
-import (
-	"errors"
-	"fmt"
-	"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/pack"
-	"youngee_m_api/util"
-)
-
-func WrapWithdrawalRecordsHandler(ctx *gin.Context) {
-	handler := newWithdrawalRecordsHandler(ctx)
-	BaseRun(handler)
-}
-
-type WithdrawalRecordsHandler struct {
-	ctx  *gin.Context
-	req  *http_model.WithdrawalRecordsRequest
-	resp *http_model.CommonResponse
-}
-
-func (w WithdrawalRecordsHandler) getContext() *gin.Context {
-	return w.ctx
-}
-
-func (w WithdrawalRecordsHandler) getResponse() interface{} {
-	return w.resp
-}
-
-func (w WithdrawalRecordsHandler) getRequest() interface{} {
-	return w.req
-}
-
-func (w WithdrawalRecordsHandler) run() {
-	condition := pack.HttpWithdrawRecordsRequestToCondition(w.req)
-	data, err := db.GetWithdrawRecords(w.ctx, w.req.PageSize, w.req.PageNum, w.req, condition)
-	if err != nil {
-		logrus.WithContext(w.ctx).Errorf("[WithdrawalRecordsHandler] error GetWithdrawRecords, err:%+v", err)
-		util.HandlerPackErrorResp(w.resp, consts.ErrorInternal, consts.DefaultToast)
-		return
-	}
-	w.resp.Data = data
-}
-
-func (w WithdrawalRecordsHandler) checkParam() error {
-	var errs []error
-	if w.req.PageNum < 0 || w.req.PageSize <= 0 {
-		errs = append(errs, errors.New("page param error"))
-	}
-	w.req.PageNum--
-	if len(errs) != 0 {
-		return fmt.Errorf("check param errs:%+v", errs)
-	}
-	return nil
-}
-
-func newWithdrawalRecordsHandler(ctx *gin.Context) *WithdrawalRecordsHandler {
-	return &WithdrawalRecordsHandler{
-		ctx:  ctx,
-		req:  http_model.NewWithdrawalRecordsRequest(),
-		resp: http_model.NewWithdrawalRecordsResponse(),
-	}
-}
+package handler
+
+import (
+	"errors"
+	"fmt"
+	"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/pack"
+	"youngee_m_api/util"
+)
+
+func WrapWithdrawalRecordsHandler(ctx *gin.Context) {
+	handler := newWithdrawalRecordsHandler(ctx)
+	BaseRun(handler)
+}
+
+type WithdrawalRecordsHandler struct {
+	ctx  *gin.Context
+	req  *http_model.WithdrawalRecordsRequest
+	resp *http_model.CommonResponse
+}
+
+func (w WithdrawalRecordsHandler) getContext() *gin.Context {
+	return w.ctx
+}
+
+func (w WithdrawalRecordsHandler) getResponse() interface{} {
+	return w.resp
+}
+
+func (w WithdrawalRecordsHandler) getRequest() interface{} {
+	return w.req
+}
+
+func (w WithdrawalRecordsHandler) run() {
+	condition := pack.HttpWithdrawRecordsRequestToCondition(w.req)
+	data, err := db.GetWithdrawRecords(w.ctx, w.req.PageSize, w.req.PageNum, w.req, condition)
+	if err != nil {
+		logrus.WithContext(w.ctx).Errorf("[WithdrawalRecordsHandler] error GetWithdrawRecords, err:%+v", err)
+		util.HandlerPackErrorResp(w.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	w.resp.Data = data
+	w.resp.Status = consts.ErrorSuccess
+}
+
+func (w WithdrawalRecordsHandler) checkParam() error {
+	var errs []error
+	if w.req.PageNum < 0 || w.req.PageSize <= 0 {
+		errs = append(errs, errors.New("page param error"))
+	}
+	w.req.PageNum--
+	if len(errs) != 0 {
+		return fmt.Errorf("check param errs:%+v", errs)
+	}
+	return nil
+}
+
+func newWithdrawalRecordsHandler(ctx *gin.Context) *WithdrawalRecordsHandler {
+	return &WithdrawalRecordsHandler{
+		ctx:  ctx,
+		req:  http_model.NewWithdrawalRecordsRequest(),
+		resp: http_model.NewWithdrawalRecordsResponse(),
+	}
+}

+ 2 - 1
model/gorm_model/auto_task.go

@@ -16,7 +16,8 @@ type InfoAutoTask struct {
 	ScriptDefault     int32 `gorm:"column:script_default"`                          // 脚本违约自动处理
 	LinkBreach        int32 `gorm:"column:link_breach"`                             // 链接违约自动处理
 	CaseCloseDefault  int32 `gorm:"column:case_close_default"`                      // 结案违约自动处理
-	SelectionInvalid  int32 `gorm:"column:selectioninvalid"`                        // 选品项目失效自动处理
+	SelectionInvalid  int32 `gorm:"column:selectioninvalid"`
+	DraftDefault      int   `gorm:"column:draft_default;NOT NULL"` // 选品项目失效自动处理
 }
 
 func (m *InfoAutoTask) TableName() string {

+ 15 - 0
model/gorm_model/enterprise_talent_cooperate.go

@@ -0,0 +1,15 @@
+package gorm_model
+
+type EnterpriseTalentCooperate struct {
+	CooperateId   int    `gorm:"column:cooperate_id;type:int(11);primary_key;AUTO_INCREMENT;comment:主键ID" json:"cooperate_id"`
+	EnterpriseId  string `gorm:"column:enterprise_id;type:varchar(255);comment:商家ID" json:"enterprise_id"`
+	TalentId      string `gorm:"column:talent_id;type:varchar(255);comment:达人ID" json:"talent_id"`
+	SupplierId    int    `gorm:"column:supplier_id;type:int(11);comment:服务商ID" json:"supplier_id"`
+	TalentOrigin  int    `gorm:"column:talent_origin;type:int(11);comment:达人来源,1公海,2服务商" json:"talent_origin"`
+	CooperateType int    `gorm:"column:cooperate_type;type:int(11);comment:合作关系类型,1带货达人,2种草达人,3本地生活达人" json:"cooperate_type"`
+	CooperateNum  int    `gorm:"column:cooperate_num;type:int(11);comment:累计合作次数" json:"cooperate_num"`
+}
+
+func (m *EnterpriseTalentCooperate) TableName() string {
+	return "enterprise_talent_cooperate"
+}

+ 37 - 25
model/gorm_model/invoice_record.go

@@ -1,25 +1,37 @@
-package gorm_model
-
-// Code generated by sql2gorm. DO NOT EDIT.
-
-import (
-	"time"
-)
-
-type YounggeeInvoiceRecord struct {
-	BillingID      string    `gorm:"column:billing_id;primary_key"`  // 开票订单ID
-	EnterpriseID   string    `gorm:"column:enterprise_id;NOT NULL"`  // 企业id
-	InvoiceType    string    `gorm:"column:invoice_type;NOT NULL"`   // 发票类型
-	InvoiceAmount  float64   `gorm:"column:invoice_amount;NOT NULL"` // 开票金额
-	InvoiceSnap    string    `gorm:"column:invoice_snap;NOT NULL"`   // 开票信息快照
-	AddressSnap    string    `gorm:"column:address_snap;NOT NULL"`   // 邮寄地址快照
-	Status         int64     `gorm:"column:status;NOT NULL"`         // 开票状态:1 为待开票,2为已开票
-	Phone          string    `gorm:"column:phone;NOT NULL"`          // 联系方式
-	ShipmentNumber string    `gorm:"column:shipment_number"`         // 物流单号
-	SubmitAt       time.Time `gorm:"column:submit_at;NOT NULL"`      // 申请提交时间
-	BillingAt      time.Time `gorm:"column:billing_at"`              // 开票时间
-}
-
-func (m *YounggeeInvoiceRecord) TableName() string {
-	return "younggee_invoice_record"
-}
+package gorm_model
+
+// Code generated by sql2gorm. DO NOT EDIT.
+
+import (
+	"time"
+)
+
+type YounggeeInvoiceRecord struct {
+	Id                int       `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT;comment:自增id" json:"id"`
+	BillingID         string    `gorm:"column:billing_id;type:varchar(16);comment:开票订单ID;NOT NULL" json:"billing_id"`
+	EnterpriseID      string    `gorm:"column:enterprise_id;type:varchar(10);comment:企业id;NOT NULL" json:"enterprise_id"`
+	SubAccountID      int       `gorm:"column:sub_account_id;type:int(11);default:0;comment:子账号id;NOT NULL" json:"sub_account_id"`
+	InvoiceAmount     float64   `gorm:"column:invoice_amount;type:decimal(10,2);comment:开票金额;NOT NULL" json:"invoice_amount"`
+	InvoiceBody       string    `gorm:"column:invoice_body;type:varchar(64);comment:开票方信息;NOT NULL" json:"invoice_body"`
+	InvoiceContent    string    `gorm:"column:invoice_content;type:varchar(64);comment:发票内容;NOT NULL" json:"invoice_content"`
+	InvoiceType       int64     `gorm:"column:invoice_type;type:int(11);comment:发票类型(1数电普票 2数电专票);NOT NULL" json:"invoice_type"`
+	InvoiceHeader     string    `gorm:"column:invoice_header;type:varchar(50);comment:发票抬头(企业名称);NOT NULL" json:"invoice_header"`
+	TaxCode           string    `gorm:"column:tax_code;type:varchar(50);comment:税务登记证号/统一社会信用代码(企业税号);NOT NULL" json:"tax_code"`
+	RegisteredAddress string    `gorm:"column:registered_address;type:varchar(50);comment:企业注册地址;NOT NULL" json:"registered_address"`
+	RegisteredPhone   string    `gorm:"column:registered_phone;type:varchar(50);comment:企业注册电话;NOT NULL" json:"registered_phone"`
+	Bank              string    `gorm:"column:bank;type:varchar(50);comment:开户银行;NOT NULL" json:"bank"`
+	BankCardNumber    string    `gorm:"column:bank_card_number;type:varchar(50);comment:开户银行账号;NOT NULL" json:"bank_card_number"`
+	TaskIds           string    `gorm:"column:task_ids;type:json;comment:账单列表;NOT NULL" json:"task_ids"`
+	Status            int       `gorm:"column:status;type:int(11);comment:开票状态:1开票中 2已开票;NOT NULL" json:"status"`
+	SubmitAt          time.Time `gorm:"column:submit_at;type:datetime;comment:申请提交时间;NOT NULL" json:"submit_at"`
+	BillingAt         time.Time `gorm:"column:billing_at;type:datetime;comment:开票时间" json:"billing_at"`
+	InvoiceSnap       string    `gorm:"column:invoice_snap;type:json;comment:开票信息快照(3.0未用)" json:"invoice_snap"`
+	AddressSnap       string    `gorm:"column:address_snap;type:json;comment:邮寄地址快照(3.0未用)" json:"address_snap"`
+	Phone             string    `gorm:"column:phone;type:varchar(20);comment:联系方式(3.0未用)" json:"phone"`
+	ShipmentNumber    string    `gorm:"column:shipment_number;type:varchar(50);comment:物流单号(3.0未用)" json:"shipment_number"`
+	InvoiceUrl        string    `gorm:"column:invoice_url;type:varchar(1000)" json:"invoice_url"`
+}
+
+func (m *YounggeeInvoiceRecord) TableName() string {
+	return "younggee_invoice_record"
+}

+ 86 - 0
model/gorm_model/local_task.go

@@ -0,0 +1,86 @@
+package gorm_model
+
+import (
+	"time"
+)
+
+// 种草子任务
+type YoungeeLocalTaskInfo struct {
+	TaskId                 string    `gorm:"column:task_id;type:char(15);primary_key;comment:任务id" json:"task_id"`
+	LocalId                string    `gorm:"column:local_id;type:char(10);comment:项目id;NOT NULL" json:"local_id"`
+	TalentId               string    `gorm:"column:talent_id;type:char(25);comment:达人id;NOT NULL" json:"talent_id"`
+	AccountId              int       `gorm:"column:account_id;type:int(11);comment:账号id;NOT NULL" json:"account_id"`
+	StrategyId             int       `gorm:"column:strategy_id;type:int(11);comment:报名选择的招募策略id" json:"strategy_id"`
+	TalentPlatformInfoSnap string    `gorm:"column:talent_platform_info_snap;type:json;comment:达人平台信息快照;NOT NULL" json:"talent_platform_info_snap"`
+	TalentPersonalInfoSnap string    `gorm:"column:talent_personal_info_snap;type:json;comment:达人个人信息快照;NOT NULL" json:"talent_personal_info_snap"`
+	TalentPostAddrSnap     string    `gorm:"column:talent_post_addr_snap;type:json;comment:收货地址快照;NOT NULL" json:"talent_post_addr_snap"`
+	TaskReward             float64   `gorm:"column:task_reward;type:decimal(10,2);comment:达人报酬(3.0未用);NOT NULL" json:"task_reward"`
+	SettleAmount           float64   `gorm:"column:settle_amount;type:decimal(10,2);comment:达人实际所得(自动填充)(扣除违约扣款);NOT NULL" json:"settle_amount"`
+	AllPayment             float64   `gorm:"column:all_payment;type:decimal(10,2);comment:企业支付(3.0未用);NOT NULL" json:"all_payment"`
+	RealPayment            float64   `gorm:"column:real_payment;type:decimal(10,2);comment:企业实际支付(加上服务商的服务费)(扣除违约扣款);NOT NULL" json:"real_payment"`
+	ServiceRate            int       `gorm:"column:service_rate;type:int(11);comment:服务费率,千分之" json:"service_rate"`
+	ServiceCharge          float64   `gorm:"column:service_charge;type:decimal(10,2);comment:服务费" json:"service_charge"`
+	RealServiceCharge      float64   `gorm:"column:real_service_charge;type:decimal(10,2);comment:服务商实际所得服务费(扣除违约)" json:"real_service_charge"`
+	FeeForm                int       `gorm:"column:fee_form;type:tinyint(4);comment:稿费形式,1,2,3分别代表产品置换、一口价、自报价" json:"fee_form"`
+	ErrBreakRate           int       `gorm:"column:err_break_rate;type:int(11);default:0;comment:未上传类型违约扣款比例,百分之;NOT NULL" json:"err_break_rate"`
+	ScriptBreakRate        int       `gorm:"column:script_break_rate;type:int(11);default:0;comment:脚本上传超时违约扣款比例,百分之;NOT NULL" json:"script_break_rate"`
+	SketchBreakRate        int       `gorm:"column:sketch_break_rate;type:int(11);default:0;comment:初稿上传超时违约扣款比例,百分之;NOT NULL" json:"sketch_break_rate"`
+	LinkBreakRate          int       `gorm:"column:link_break_rate;type:int(11);default:0;comment:链接上传超时违约扣款比例,百分之;NOT NULL" json:"link_break_rate"`
+	DataBreakRate          int       `gorm:"column:data_break_rate;type:int(11);default:0;comment:数据上传超时违约扣款比例,百分之;NOT NULL" json:"data_break_rate"`
+	TaskStage              int       `gorm:"column:task_stage;type:tinyint(1);comment:任务阶段,1:已报名, 2:申请成功, 3:申请失败, 4:待预约探店, 5:预约确认中 6:  , 7:待传脚本, 8:脚本待审, 9:待传初稿, 10:初稿待审, 11:待传链接, 12:链接待审, 13:待传数据, 14:数据待审, 15:已结案, 16:解约, 17:终止合作(过渡态);NOT NULL" json:"task_stage"`
+	TaskStatus             int       `gorm:"column:task_status;type:tinyint(4);default:1;comment:商家任务状态 1待选 2已选 3落选;NOT NULL" json:"task_status"`
+	LogisticsStatus        int       `gorm:"column:logistics_status;type:tinyint(1);default:1;comment:发货状态 1 待发货 2已发货 3 已签收" json:"logistics_status"`
+	BookStatus             uint      `gorm:"column:book_status;type:tinyint(4) unsigned;default:1;comment:预约探店状态 1-5分别代表待预约、已预约、待修改、已修改、已通过" json:"book_status"`
+	SketchStatus           uint      `gorm:"column:sketch_status;type:tinyint(4) unsigned;default:1;comment:初稿上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过" json:"sketch_status"`
+	LinkStatus             uint      `gorm:"column:link_status;type:tinyint(4) unsigned;default:1;comment:链接上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过" json:"link_status"`
+	DataStatus             uint      `gorm:"column:data_status;type:tinyint(4) unsigned;default:1;comment:数据上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过" json:"data_status"`
+	CompleteStatus         int       `gorm:"column:complete_status;type:tinyint(1);default:1;comment:结束方式 1未结束 2正常结束 3反选失败 4被解约" json:"complete_status"`
+	UpdateAt               time.Time `gorm:"column:update_at;type:datetime;comment:更新时间" json:"update_at"`
+	CreateDate             time.Time `gorm:"column:create_date;type:datetime;comment:创建时间,即报名时间;NOT NULL" json:"create_date"`
+	SelectDate             time.Time `gorm:"column:select_date;type:datetime;comment:反选时间,即任务开始执行时间" json:"select_date"`
+	DeliveryDate           time.Time `gorm:"column:delivery_date;type:datetime;comment:发货时间" json:"delivery_date"`
+	CompleteDate           time.Time `gorm:"column:complete_date;type:datetime;comment:结束时间" json:"complete_date"`
+	WithdrawDate           time.Time `gorm:"column:withdraw_date;type:datetime;comment:提现时间" json:"withdraw_date"`
+	CurDefaultType         int       `gorm:"column:cur_default_type;type:tinyint(4);comment:当前违约类型 0未违约 1脚本超时违约 2脚本未上传违约 3初稿超时违约 4初稿未上传违约 5链接超时违约 6链接未上传违约 7数据超时违约 8数据未上传违约 9解约待处理 10解约" json:"cur_default_type"`
+	WithdrawStatus         int       `gorm:"column:withdraw_status;type:tinyint(4);default:1;comment:提现状态,1-4分别代表不可提现、可提现、提现中、已提现" json:"withdraw_status"`
+	LeadTeamId             string    `gorm:"column:lead_team_id;type:char(10);comment:作为团长的young之团id,对应younggee_talent_team中的team_id字段" json:"lead_team_id"`
+	TeamId                 string    `gorm:"column:team_id;type:char(10);comment:作为团员的young之团id,对应younggee_talent_team中的team_id字段" json:"team_id"`
+	SettleStatus           int       `gorm:"column:settle_status;type:tinyint(4);default:1;comment:结算状态,1、2分别表示待结算、已结算" json:"settle_status"`
+	TeamIncome             float64   `gorm:"column:team_income;type:decimal(10,2);comment:young之团团长现金收益" json:"team_income"`
+	TeamPoint              int       `gorm:"column:team_point;type:int(11);comment:young之团团长积分收益" json:"team_point"`
+	CurBreakAt             time.Time `gorm:"column:cur_break_at;type:datetime;comment:当前阶段截止时间" json:"cur_break_at"`
+	SupplierId             int       `gorm:"column:supplier_id;type:int(11);default:0;comment:服务商ID" json:"supplier_id"`
+	SupplierStatus         int       `gorm:"column:supplier_status;type:int(11);default:0;comment:服务商任务状态 0表示达人来源非服务商 1待选 2已选 3落选" json:"supplier_status"`
+	DraftFee               float64   `gorm:"column:draft_fee;type:decimal(10,2);default:0.00;comment:达人稿费,达人所见的稿费金额" json:"draft_fee"`
+	SignedTime             time.Time `gorm:"column:signed_time;type:datetime;comment:签收时间" json:"signed_time"`
+	FansNum                int       `gorm:"column:fans_num;type:int(11);comment:粉丝数" json:"fans_num"`
+	VoteAvg                int       `gorm:"column:vote_avg;type:int(11);comment:平均点赞数" json:"vote_avg"`
+	CommitAvg              int       `gorm:"column:commit_avg;type:int(11);comment:平均评论数" json:"commit_avg"`
+	BOperator              string    `gorm:"column:b_operator;type:varchar(255);comment:商家确定达人操作人ID" json:"b_operator"`
+	BOperatorType          int       `gorm:"column:b_operator_type;type:int(11);default:0;comment:商家操作人类型,1商家用户,2商家子账号,3管理后台" json:"b_operator_type"`
+	SOperator              int       `gorm:"column:s_operator;type:int(11);default:0;comment:服务商提报达人操作人ID" json:"s_operator"`
+	SOperatorType          int       `gorm:"column:s_operator_type;type:int(11);default:0;comment:服务商操作人类型,1服务商主账号,2服务商子账号,3管理后台" json:"s_operator_type"`
+	OpenId                 string    `gorm:"column:open_id;type:varchar(255);comment:达人报名的快手唯一标识" json:"open_id"`
+	SLocalLifeId           int       `gorm:"column:s_local_life_id;type:int(11);comment:服务商种草任务ID" json:"s_local_life_id"`
+	SupportFee             float64   `gorm:"column:support_fee;type:decimal(10,2);comment:提报价格(达人自报价经过计算后,)" json:"support_fee"`
+	SketchMissingTime      time.Time `gorm:"column:sketch_missing_time;type:datetime;comment:未传初稿违约时间" json:"sketch_missing_time"`
+	SketchMissingStatus    int       `gorm:"column:sketch_missing_status;type:int(11);default:0;comment:未传初稿违约状态,0无违约,1有违约" json:"sketch_missing_status"`
+	LinkMissingTime        time.Time `gorm:"column:link_missing_time;type:datetime;comment:未发作品违约时间" json:"link_missing_time"`
+	LinkMissingStatus      int       `gorm:"column:link_missing_status;type:int(11);default:0;comment:未发作品违约状态,0无违约,1有违约" json:"link_missing_status"`
+	DataMissingTime        time.Time `gorm:"column:data_missing_time;type:datetime;comment:未传数据违约时间" json:"data_missing_time"`
+	DataMissingStatus      int       `gorm:"column:data_missing_status;type:int(11);default:0;comment:未传数据违约状态,0无违约,1有违约" json:"data_missing_status"`
+	TerminateOperatorType  int       `gorm:"column:terminate_operator_type;type:int(11);comment:终止合作操作人类型,1商家用户,2商家子账号,3管理后台" json:"terminate_operator_type"`
+	TerminateOperator      string    `gorm:"column:terminate_operator;type:varchar(255);comment:终止合作操作人ID" json:"terminate_operator"`
+	TerminateReason        string    `gorm:"column:terminate_reason;type:varchar(255);comment:终止理由" json:"terminate_reason"`
+	TerminateTime          time.Time `gorm:"column:terminate_time;type:datetime;comment:终止合作时间" json:"terminate_time"`
+	CancelOperatorType     int       `gorm:"column:cancel_operator_type;type:int(11);comment:解约操作人类型,1商家用户,2商家子账号,3管理后台" json:"cancel_operator_type"`
+	CancelOperator         string    `gorm:"column:cancel_operator;type:varchar(255);comment:解约操作人ID" json:"cancel_operator"`
+	CancelReason           string    `gorm:"column:cancel_reason;type:varchar(255);comment:解约原因" json:"cancel_reason"`
+	CancelTime             time.Time `gorm:"column:cancel_time;type:datetime;comment:解约时间" json:"cancel_time"`
+	PlatformId             int       `gorm:"column:platform_id;type:int(11);comment:平台" json:"platform_id"`
+	City                   string    `gorm:"column:city;type:varchar(255);comment:城市" json:"city"`
+}
+
+func (m *YoungeeLocalTaskInfo) TableName() string {
+	return "youngee_local_task_info"
+}

+ 55 - 0
model/gorm_model/locallife_info.go

@@ -0,0 +1,55 @@
+package gorm_model
+
+import (
+	"time"
+)
+
+type YounggeeLocalLifeInfo struct {
+	Id                  int        `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT;comment:本地生活表主键ID" json:"id"`
+	LocalId             string     `gorm:"column:local_id;type:varchar(10);comment:项目id;NOT NULL" json:"local_id"`
+	LocalType           int        `gorm:"column:local_type;type:tinyint(4);comment:项目类型,1代表公开项目,2代表定向项目" json:"local_type"`
+	LocalPlatform       int        `gorm:"column:local_platform;type:tinyint(4);comment:项目平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎" json:"local_platform"`
+	ServiceChargeRate   float64    `gorm:"column:service_charge_rate;type:decimal(10,2);default:0.00;comment:公开服务费率;NOT NULL" json:"service_charge_rate"`
+	StoreId             int        `gorm:"column:store_id;type:int(11);comment:关联门店id" json:"store_id"`
+	StoreRelatedAt      *time.Time `gorm:"column:store_related_at;type:timestamp;comment:关联门店时间" json:"store_related_at"`
+	TeamBuyingId        int        `gorm:"column:team_buying_id;type:int(11);comment:关联团购id" json:"team_buying_id"`
+	TeamBuyingRelatedAt *time.Time `gorm:"column:team_buying_related_at;type:timestamp;comment:关联团购时间" json:"team_buying_related_at"`
+	PromoteBody         int        `gorm:"column:promote_body;type:int(11);comment:推广主体(1门店 2团购)" json:"promote_body"`
+	Donate              int        `gorm:"column:donate;type:int(11);comment:赠送达人套餐(1有赠送 2无赠送)" json:"donate"`
+	LocalName           string     `gorm:"column:local_name;type:varchar(50);comment:任务标题" json:"local_name"`
+	TalentType          string     `gorm:"column:talent_type;type:text;comment:达人类型(,分隔)" json:"talent_type"`
+	RecruitDdl          *time.Time `gorm:"column:recruit_ddl;type:timestamp;comment:招募截止时间" json:"recruit_ddl"`
+	TaskForm            int        `gorm:"column:task_form;type:tinyint(4);comment:任务形式,1-2分别代表线下探店,素材分发" json:"task_form"`
+	ContentType         int        `gorm:"column:content_type;type:tinyint(4);comment:内容形式,1代表图文,2代表视频" json:"content_type"`
+	TaskDetail          string     `gorm:"column:task_detail;type:varchar(1000);comment:任务详情" json:"task_detail"`
+	TaskStatus          int        `gorm:"column:task_status;type:tinyint(4);comment:项目状态,1-10分别代表创建中、待审核、审核通过、招募中、招募完毕、待支付、已支付、执行中、失效、已结案" json:"task_status"`
+	EnterpriseId        string     `gorm:"column:enterprise_id;type:varchar(10);comment:所属企业id" json:"enterprise_id"`
+	SubAccountId        int        `gorm:"column:sub_account_id;type:int(11);default:0;comment:子账号id;NOT NULL" json:"sub_account_id"`
+	OperatorType        int        `gorm:"column:operator_type;type:int(11);comment:创建者类型,1商家主账号,2商家子账号" json:"operator_type"`
+	ApplyNum            int64      `gorm:"column:apply_num;type:int(11);default:0;comment:报名人数;NOT NULL" json:"apply_num"`
+	RecruitNum          int64      `gorm:"column:recruit_num;type:int(11);default:0;comment:已招募人数;NOT NULL" json:"recruit_num"`
+	SettleNum           int64      `gorm:"column:settle_num;type:int(11);default:0;comment:结案人数;NOT NULL" json:"settle_num"`
+	CreatedAt           *time.Time `gorm:"column:created_at;type:timestamp;comment:创建时间" json:"created_at"`
+	UpdatedAt           *time.Time `gorm:"column:updated_at;type:timestamp;comment:修改时间" json:"updated_at"`
+	AutoFailAt          *time.Time `gorm:"column:auto_fail_at;type:timestamp;comment:失效自动处理时间" json:"auto_fail_at"`
+	AutoTaskId          int        `gorm:"column:auto_task_id;type:int(11);default:0;comment:定时任务id;NOT NULL" json:"auto_task_id"`
+	AutoDefaultId       int        `gorm:"column:auto_default_id;type:int(11);default:0;comment:违约状态id;NOT NULL" json:"auto_default_id"`
+	FailReason          int64      `gorm:"column:fail_reason"` // 失效原因,1、2分别表示逾期未支付、项目存在风险
+	PaymentAmount       float64    `gorm:"column:payment_amount;type:float;comment:支付金额" json:"payment_amount"`
+	PayAt               *time.Time `gorm:"column:pay_at;type:timestamp;comment:支付时间" json:"pay_at"`
+	SubmitAt            *time.Time `gorm:"column:submit_at;type:timestamp;comment:提交审核时间" json:"submit_at"`
+	PassAt              *time.Time `gorm:"column:pass_at;type:timestamp;comment:审核通过时间" json:"pass_at"`
+	FinishAt            *time.Time `gorm:"column:finish_at;type:timestamp;comment:结案时间" json:"finish_at"`
+	EstimatedCost       float64    `gorm:"column:estimated_cost;type:decimal(10,2);comment:预估成本" json:"estimated_cost"`
+	SettlementAmount    float64    `gorm:"column:settlement_amount;type:decimal(10,2);comment:结算金额" json:"settlement_amount"`
+	TotalRecruitNum     int        `gorm:"column:total_recruit_num;type:int(11);comment:此任务各策略招募人数总和" json:"total_recruit_num"`
+	Tools               string     `gorm:"column:tools;type:varchar(255);comment:工具选择,1邀约招募 2样品物流 3审稿工具 4作品审查 5数据巡检 6结算账单(,分隔);NOT NULL" json:"tools"`
+	NeedReview          int        `gorm:"column:need_review;type:int(11);default:0;comment:待审稿;NOT NULL" json:"need_review"`
+	NeedQuality         int        `gorm:"column:need_quality;type:int(11);default:0;comment:待质检;NOT NULL" json:"need_quality"`
+	NeedCalculate       int        `gorm:"column:need_calculate;type:int(11);default:0;comment:待结算;NOT NULL" json:"need_calculate"`
+	InvoiceStatus       int        `gorm:"column:invoice_status;type:int(11);default:0;comment:开票状态(1开票中 2已开票);NOT NULL" json:"invoice_status"`
+}
+
+func (m *YounggeeLocalLifeInfo) TableName() string {
+	return "younggee_local_life_info"
+}

+ 22 - 7
model/gorm_model/platform_kuaishou_user_info.go

@@ -1,13 +1,28 @@
 package gorm_model
 
+import "time"
+
 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
+	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
+	NickName     string    `gorm:"column:nick_name;type:varchar(255);comment:快手昵称" json:"nick_name"`
+	HeadUri      string    `gorm:"column:head_uri;type:varchar(255);comment:用户头像" json:"head_uri"`
+	Fan          string    `gorm:"column:fan;type:varchar(255);comment:用户粉丝数" json:"fan"`
+	Expired      int       `gorm:"column:expired;type:tinyint(4);comment:access_token是否可用" json:"expired"`
+	SaleNum30Day int       `gorm:"column:sale_num_30day;type:int(11);comment:30日销量" json:"sale_num_30day"`
+	SaleNumTotal int       `gorm:"column:sale_num_total;type:int(11);comment:总销量" json:"sale_num_total"`
+	CreateTime   time.Time `gorm:"column:create_time;type:datetime;comment:创建时间" json:"create_time"`
+	UpdateTime   time.Time `gorm:"column:update_time;type:datetime;comment:更新时间" json:"update_time"`
+	IsDelete     int       `gorm:"column:is_delete;type:int(11);default:0;comment:是否被删除" json:"is_delete"`
+	LikeNum      int       `gorm:"column:like_num;type:int(11);default:0;comment:点赞数" json:"like_num"`
+	VideoNum     int       `gorm:"column:video_num;type:int(11);default:0;comment:作品数" json:"video_num"`
+	Gender       string    `gorm:"column:gender;type:varchar(255);comment:快手性别" json:"gender"`
+	City         string    `gorm:"column:city;type:varchar(255);comment:快手用户城市所在地" json:"city"`
 }
 
 func (m *PlatformKuaishouUserInfo) TableName() string {

+ 16 - 0
model/gorm_model/platforminvoiceinfo.go

@@ -0,0 +1,16 @@
+package gorm_model
+
+type YounggeePlatformInvoiceInfo struct {
+	PlatformInvoiceId int    `gorm:"column:platform_invoice_id;type:int(11);primary_key;AUTO_INCREMENT" json:"platform_invoice_id"`
+	EnterpriseName    string `gorm:"column:enterprise_name;type:varchar(255);comment:企业名称" json:"enterprise_name"`
+	EnterpriseTax     string `gorm:"column:enterprise_tax;type:varchar(255);comment:企业税号" json:"enterprise_tax"`
+	Address           string `gorm:"column:address;type:varchar(255);comment:注册地址" json:"address"`
+	Phone             string `gorm:"column:phone;type:varchar(255);comment:注册电话" json:"phone"`
+	BankName          string `gorm:"column:bank_name;type:varchar(255);comment:注册银行名称" json:"bank_name"`
+	BankAccount       string `gorm:"column:bank_account;type:varchar(255);comment:银行账号" json:"bank_account"`
+	Project           string `gorm:"column:project;type:varchar(255);comment:项目名称" json:"project"`
+}
+
+func (m *YounggeePlatformInvoiceInfo) TableName() string {
+	return "younggee_platform_invoice_info"
+}

+ 22 - 20
model/gorm_model/product_photo.go

@@ -1,20 +1,22 @@
-// Code generated by sql2gorm. DO NOT EDIT.
-package gorm_model
-
-import (
-	"time"
-)
-
-type YounggeeProductPhoto struct {
-	ProductPhotoID int64       `gorm:"column:product_photo_id;primary_key;AUTO_INCREMENT"` // 商品图片id
-	PhotoUrl       string    `gorm:"column:photo_url"`                                   // 图片或视频url
-	PhotoUid       string    `gorm:"column:photo_uid"`
-	Symbol         int64       `gorm:"column:symbol"`     // 图片为主图或详情图标志位,1为主图,2为详情图,3为视频
-	ProductID      int64       `gorm:"column:product_id"` // 所属商品id
-	CreatedAt      time.Time `gorm:"column:created_at"` // 创建时间
-}
-
-func (m *YounggeeProductPhoto) TableName() string {
-	return "younggee_product_photo"
-}
-
+// Code generated by sql2gorm. DO NOT EDIT.
+package gorm_model
+
+import (
+	"time"
+)
+
+type YounggeeProductPhoto struct {
+	ProductPhotoID   int64     `gorm:"column:product_photo_id;primary_key;AUTO_INCREMENT"` // 商品图片id
+	PhotoUrl         string    `gorm:"column:photo_url"`                                   // 图片或视频url
+	PhotoUid         string    `gorm:"column:photo_uid"`
+	Symbol           int64     `gorm:"column:symbol"`     // 图片为主图或详情图标志位,1为主图,2为详情图,3为视频
+	ProductID        int64     `gorm:"column:product_id"` // 所属商品id
+	CreatedAt        time.Time `gorm:"column:created_at"` // 创建时间
+	StoreId          int       `gorm:"column:store_id;type:int(11);comment:所属门店ID" json:"store_id"`
+	TeamBuyingId     int       `gorm:"column:team_buying_id;type:int(11);comment:所属团购ID" json:"team_buying_id"`
+	ProductPhotoType int       `gorm:"column:product_photo_type;type:int(11);default:1;comment:图片类型:1商品,2门店,3团购" json:"product_photo_type"`
+}
+
+func (m *YounggeeProductPhoto) TableName() string {
+	return "younggee_product_photo"
+}

+ 63 - 46
model/gorm_model/project.go

@@ -1,46 +1,63 @@
-// Code generated by sql2gorm. DO NOT EDIT.
-package gorm_model
-
-import (
-	"time"
-)
-
-type ProjectInfo struct {
-	ProjectID         string     `gorm:"column:project_id;primary_key;AUTO_INCREMENT"` // 项目id 项目ID生成规则:年(2位)+一年中的第几天(3位)+5位数随机数,雪花算法也可,生成10位订单号
-	ProjectName       string     `gorm:"column:project_name"`                          // 项目名称
-	ProjectStatus     int64      `gorm:"column:project_status"`                        // 项目状态,1-10分别代表创建中、待审核、审核通过、招募中、招募完毕、待支付、已支付、失效、执行中、已结案
-	ProjectType       int64      `gorm:"column:project_type"`                          // 项目类型,1代表全流程项目,2代表专项项目
-	ProjectPlatform   int64      `gorm:"column:project_platform"`                      // 项目平台,1-7分别代表红book、抖音、微博、快手、b站、大众点评、知乎
-	ProjectForm       int64      `gorm:"column:project_form"`                          // 项目形式,1-4分别代表实体商品寄拍、虚拟产品测评、线下探店打卡、素材微原创
-	TalentType        string     `gorm:"column:talent_type"`                           // 达人类型
-	RecruitDdl        *time.Time `gorm:"column:recruit_ddl"`                           // 招募截止时间
-	ContentType       int64      `gorm:"column:content_type"`                          // 内容形式,1代表图文,2代表视频
-	ProjectDetail     string     `gorm:"column:project_detail"`                        // 项目详情
-	ApplyNum          int64      `gorm:"column:apply_num;default:0;NOT NULL"`          // 报名人数
-	RecruitNum        int64      `gorm:"column:recruit_num;default:0;NOT NULL"`        // 已招募人数
-	EnterpriseID      string     `gorm:"column:enterprise_id"`                         // 所属企业id
-	ProductID         int64      `gorm:"column:product_id"`                            // 关联商品id
-	CreatedAt         *time.Time `gorm:"column:created_at"`                            // 创建时间
-	UpdatedAt         *time.Time `gorm:"column:updated_at"`                            // 修改时间
-	FeeForm           string     `gorm:"column:fee_form"`                              // 稿费形式列表
-	AutoFailAt        *time.Time `gorm:"column:auto_fail_at"`                          // 失效自动处理时间
-	AutoTaskID        int64      `gorm:"column:auto_task_id;NOT NULL"`                 // 定时任务id
-	AutoDefaultID     int64      `gorm:"column:auto_default_id;NOT NULL"`              // 违约状态id
-	PaymentAmount     float64    `gorm:"column:payment_amount"`                        // 支付金额
-	PayAt             *time.Time `gorm:"column:pay_at"`                                // 支付时间
-	AutoScriptBreakAt *time.Time `gorm:"column:auto_script_break_at"`                  // 脚本违约自动处理时间
-	AutoSketchBreakAt *time.Time `gorm:"column:auto_sketch_break_at"`                  // 初稿违约自动处理时间
-	FailReason        int64      `gorm:"column:fail_reason"`                           // 失效原因,1、2分别表示逾期未支付、项目存在风险
-	PassAt            *time.Time `gorm:"column:pass_at"`                               // 审核通过时间
-	FinishAt          *time.Time `gorm:"column:finish_at"`                             // 结案时间
-	EstimatedCost     float64    `gorm:"column:estimated_cost"`                        // 预估成本
-	IsRead            int64      `gorm:"column:is_read"`                               // 是否已读
-	SettlementAmount  float64    `gorm:"column:settlement_amount"`                     // 结算金额
-	ProductSnap       string     `gorm:"column:product_snap"`                          // 商品信息快照
-	ProductPhotoSnap  string     `gorm:"column:product_photo_snap"`                    // 商品图片快照
-	SubmitAt          *time.Time `gorm:"column:submit_at"`                             // 提交审核时间
-}
-
-func (m *ProjectInfo) TableName() string {
-	return "project_info"
-}
+// Code generated by sql2gorm. DO NOT EDIT.
+package gorm_model
+
+import (
+	"time"
+)
+
+type ProjectInfo struct {
+	ID                int64      `gorm:"column:id;primary_key;auto_increment"`           // 自增id
+	ProjectID         string     `gorm:"column:project_id;type:varchar(10);not null"`    // 项目id
+	ProjectName       string     `gorm:"column:project_name;type:varchar(100)"`          // 项目名称
+	ProjectStatus     int64      `gorm:"column:project_status;type:tinyint"`             // 项目状态,1-10分别代表创建中、待审核、审核通过、招募中、招募完毕、待支付、已支付、执行中、失效、已结案
+	ProjectType       int64      `gorm:"column:project_type;type:tinyint"`               // 项目类型,1代表公开,2代表定向
+	ProjectPlatform   int64      `gorm:"column:project_platform;type:tinyint"`           // 项目平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎
+	ProjectForm       int64      `gorm:"column:project_form;type:tinyint"`               // 项目形式,1-3分别代表商品寄拍、素材分发、虚拟产品测评
+	TalentType        string     `gorm:"column:talent_type;type:text"`                   // 达人类型(,分隔)
+	RecruitDdl        *time.Time `gorm:"column:recruit_ddl;type:timestamp"`              // 招募截止时间
+	ContentType       int64      `gorm:"column:content_type;type:tinyint"`               // 内容形式,1代表图文,2代表视频
+	ProjectDetail     string     `gorm:"column:project_detail;type:varchar(1000)"`       // 项目详情
+	ApplyNum          int64      `gorm:"column:apply_num;type:int;default:0;not null"`   // 报名人数
+	RecruitNum        int64      `gorm:"column:recruit_num;type:int;default:0;not null"` // 已招募人数
+	SettleNum         int64      `gorm:"column:settle_num;type:int(11);default:0;comment:结案人数;NOT NULL" json:"settle_num"`
+	EnterpriseID      string     `gorm:"column:enterprise_id;type:varchar(10)"`                                                  // 所属企业id
+	SubAccountID      int64      `gorm:"column:sub_account_id;type:int;default:0;not null"`                                      // 子账号id
+	ProductID         int64      `gorm:"column:product_id;type:int"`                                                             // 关联商品id
+	ProductCategory   string     `gorm:"column:product_category;type:varchar(10);default:'0'"`                                   // 商品类目1--20
+	CreatedAt         *time.Time `gorm:"column:created_at;type:timestamp"`                                                       // 创建时间
+	UpdatedAt         *time.Time `gorm:"column:updated_at;type:timestamp;default:CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"` // 修改时间
+	FeeForm           string     `gorm:"column:fee_form;type:varchar(20)"`                                                       // 稿费形式列表(3.0暂未用)
+	AutoFailAt        *time.Time `gorm:"column:auto_fail_at;type:timestamp"`                                                     // 失效自动处理时间
+	AutoTaskID        int64      `gorm:"column:auto_task_id;type:int;default:0;not null"`                                        // 定时任务id
+	AutoDefaultID     int64      `gorm:"column:auto_default_id;type:int;default:0;not null"`                                     // 违约状态id
+	PaymentAmount     float64    `gorm:"column:payment_amount;type:decimal(10,2)"`                                               // 支付金额
+	PayAt             *time.Time `gorm:"column:pay_at;type:timestamp"`                                                           // 支付时间
+	AutoScriptBreakAt *time.Time `gorm:"column:auto_script_break_at;type:timestamp"`                                             // 脚本违约自动处理时间
+	AutoSketchBreakAt *time.Time `gorm:"column:auto_sketch_break_at;type:timestamp"`                                             // 初稿违约自动处理时间
+	FailReason        int64      `gorm:"column:fail_reason;type:tinyint"`                                                        // 失效原因,1、2分别表示逾期未支付、项目存在风险
+	PassAt            *time.Time `gorm:"column:pass_at;type:timestamp"`                                                          // 审核通过时间
+	FinishAt          *time.Time `gorm:"column:finish_at;type:timestamp"`                                                        // 结案时间
+	EstimatedCost     float64    `gorm:"column:estimated_cost;type:decimal(10,2)"`                                               // 预估成本
+	IsRead            int64      `gorm:"column:is_read;type:int"`                                                                // 是否已读
+	SettlementAmount  float64    `gorm:"column:settlement_amount;type:decimal(10,2)"`                                            // 结算金额
+	ProductSnap       string     `gorm:"column:product_snap;type:json"`                                                          // 商品信息快照
+	ProductPhotoSnap  string     `gorm:"column:product_photo_snap;type:json"`                                                    // 商品图片快照
+	SubmitAt          *time.Time `gorm:"column:submit_at;type:timestamp"`                                                        // 提交审核时间
+	NeedReview        int64      `gorm:"column:need_review;type:int;default:0;not null"`                                         // 待审稿
+	NeedQuality       int64      `gorm:"column:need_quality;type:int;default:0;not null"`                                        // 待质检
+	NeedCalculate     int64      `gorm:"column:need_calculate;type:int;default:0;not null"`                                      // 待结算
+	ServiceChargeRate float64    `gorm:"column:service_charge_rate;type:decimal(10,2);default:0.00;not null"`                    // 公开服务费率
+	OperatorType      *int64     `gorm:"column:operator_type;type:int"`                                                          // 创建者类型,1商家主账号,2商家子账号
+	TotalRecruitNum   *int64     `gorm:"column:total_recruit_num;type:int"`                                                      // 此任务各策略招募人数总和
+	ViewNum           int64      `gorm:"column:view_num;type:int;default:0"`                                                     // 浏览量
+	Tools             string     `gorm:"column:tools;type:varchar(255);default:'';not null"`                                     // 工具选择,1邀约招募 2样品物流 3审稿工具 4作品审查 5数据巡检 6结算账单(,分隔)
+	InvoiceStatus     int64      `gorm:"column:invoice_status;type:int;default:0;not null"`                                      // 开票状态(1开票中 2已开票)
+	CreateTime        *time.Time `gorm:"column:create_time;type:datetime"`                                                       // 创建时间
+	BeforeDeliveryNum int64      `gorm:"column:before_delivery_num;type:int;default:0;not null"`                                 // 待发货数量
+	DeliveryNum       int64      `gorm:"column:delivery_num;type:int;default:0;not null"`                                        // 已发货数量
+	AfterDeliveryNum  int64      `gorm:"column:after_delivery_num;type:int;default:0;not null"`                                  // 已签收数量
+}
+
+func (m *ProjectInfo) TableName() string {
+	return "project_info"
+}

+ 87 - 49
model/gorm_model/project_task.go

@@ -1,49 +1,87 @@
-// Code generated by sql2gorm. DO NOT EDIT.
-package gorm_model
-
-import (
-	"time"
-)
-
-type YoungeeTaskInfo struct {
-	TaskId                 string    `gorm:"column:task_id;primary_key;AUTO_INCREMENT"`             // 任务id
-	ProjectId              string    `gorm:"column:project_id;NOT NULL"`                            // 项目id
-	TalentId               string    `gorm:"column:talent_id;NOT NULL"`                             // 达人id
-	AccountId              int       `gorm:"column:account_id;NOT NULL"`                            // 账号id
-	TalentPlatformInfoSnap string    `gorm:"column:talent_platform_info_snap;NOT NULL"`             // 达人平台信息快照
-	TalentPersonalInfoSnap string    `gorm:"column:talent_personal_info_snap;NOT NULL"`             // 达人个人信息快照
-	TalentPostAddrSnap     string    `gorm:"column:talent_post_addr_snap;NOT NULL"`                 // 收货地址快照
-	StrategyId             int       `gorm:"column:strategy_id"`                                    // 报名选择的招募策略id
-	TaskReward             float64   `gorm:"column:task_reward;NOT NULL"`                           // 达人报酬
-	SettleAmount           float64   `gorm:"column:settle_amount;NOT NULL"`                         // 达人实际所得(扣除违约扣款)
-	AllPayment             float64   `gorm:"column:all_payment;NOT NULL"`                           // 企业支付
-	RealPayment            float64   `gorm:"column:real_payment;NOT NULL"`                          // 企业实际支付(扣除违约扣款)
-	ErrBreakRate           int       `gorm:"column:err_break_rate;default:0;NOT NULL"`              // 未上传类型违约扣款比例,百分之
-	ScriptBreakRate        int       `gorm:"column:script_break_rate;default:0;NOT NULL"`           // 脚本上传超时违约扣款比例,百分之
-	SketchBreakRate        int       `gorm:"column:sketch_break_rate;default:0;NOT NULL"`           // 初稿上传超时违约扣款比例,百分之
-	LinkBreakRate          int       `gorm:"column:link_break_rate;default:0;NOT NULL"`             // 链接上传超时违约扣款比例,百分之
-	DataBreakRate          int       `gorm:"column:data_break_rate;default:0;NOT NULL"`             // 数据上传超时违约扣款比例,百分之
-	FeeForm                int       `gorm:"column:fee_form;NOT NULL"`                              // 稿费形式,1,2,3分别代表产品置换、固定稿费、自报价
-	ServiceCharge          float64   `gorm:"column:service_charge"`                                 // 服务费
-	ServiceRate            int       `gorm:"column:service_rate"`                                   // 服务费率,千分之
-	TaskStatus             int       `gorm:"column:task_status;default:1;NOT NULL"`                 // 任务状态 1待选 2已选 3落选
-	TaskStage              int       `gorm:"column:task_stage;NOT NULL"`                            // 任务阶段,详情见info_task_stage表
-	CreateDate             time.Time `gorm:"column:create_date;default:CURRENT_TIMESTAMP;NOT NULL"` // 创建时间
-	SelectDate             time.Time `gorm:"column:select_date"`                                    // 反选时间
-	DeliveryDate           time.Time `gorm:"column:delivery_date"`                                  // 发货时间
-	CompleteStatus         int       `gorm:"column:complete_status;default:1;NOT NULL"`             // 结束方式 1未结束 2正常结束 3反选失败 4被解约
-	CompleteDate           time.Time `gorm:"column:complete_date"`                                  // 结束时间
-	LogisticsStatus        int       `gorm:"column:logistics_status;default:1"`                     // 发货状态 1 待发货 2已发货 3 已签收
-	ScriptStatus           uint      `gorm:"column:script_status;default:1"`                        // 脚本上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
-	SketchStatus           uint      `gorm:"column:sketch_status;default:1"`                        // 初稿上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
-	UpdateAt               time.Time `gorm:"column:update_at"`                                      // 更新时间
-	LinkStatus             uint      `gorm:"column:link_status;default:1"`                          // 链接上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
-	DataStatus             uint      `gorm:"column:data_status;default:1"`                          // 数据上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
-	CurDefaultType         int       `gorm:"column:cur_default_type"`                               // 任务当前处于的违约类型 0-8分别表示未违约、脚本超时违约、脚本未上传违约、初稿超时违约、初稿未上传违约、链接超时违约、链接未上传违约、数据超时违约、数据未上传违约
-	WithdrawStatus         int       `gorm:"column:withdraw_status;default:1"`                      // 提现状态,1-4分别代表不可提现、可提现、提现中、已提现
-	SettleStatus           int       `gorm:"column:settle_status;default:1"`                        // 结算状态,1、2分别表示待结算、已结算
-}
-
-func (m *YoungeeTaskInfo) TableName() string {
-	return "youngee_task_info"
-}
+// Code generated by sql2gorm. DO NOT EDIT.
+package gorm_model
+
+import (
+	"time"
+)
+
+type YoungeeTaskInfo struct {
+	TaskId                 string    `gorm:"column:task_id;primary_key;AUTO_INCREMENT"`   // 任务id
+	ProjectId              string    `gorm:"column:project_id;NOT NULL"`                  // 项目id
+	TalentId               string    `gorm:"column:talent_id;NOT NULL"`                   // 达人id
+	AccountId              int       `gorm:"column:account_id;NOT NULL"`                  // 账号id
+	TalentPlatformInfoSnap string    `gorm:"column:talent_platform_info_snap;NOT NULL"`   // 达人平台信息快照
+	TalentPersonalInfoSnap string    `gorm:"column:talent_personal_info_snap;NOT NULL"`   // 达人个人信息快照
+	TalentPostAddrSnap     string    `gorm:"column:talent_post_addr_snap;NOT NULL"`       // 收货地址快照
+	StrategyId             int       `gorm:"column:strategy_id"`                          // 报名选择的招募策略id
+	TaskReward             float64   `gorm:"column:task_reward;NOT NULL"`                 // 达人报酬
+	SettleAmount           float64   `gorm:"column:settle_amount;NOT NULL"`               // 达人实际所得(扣除违约扣款)
+	AllPayment             float64   `gorm:"column:all_payment;NOT NULL"`                 // 企业支付
+	RealPayment            float64   `gorm:"column:real_payment;NOT NULL"`                // 企业实际支付(扣除违约扣款)
+	ErrBreakRate           int       `gorm:"column:err_break_rate;default:0;NOT NULL"`    // 未上传类型违约扣款比例,百分之
+	ScriptBreakRate        int       `gorm:"column:script_break_rate;default:0;NOT NULL"` // 脚本上传超时违约扣款比例,百分之
+	SketchBreakRate        int       `gorm:"column:sketch_break_rate;default:0;NOT NULL"` // 初稿上传超时违约扣款比例,百分之
+	LinkBreakRate          int       `gorm:"column:link_break_rate;default:0;NOT NULL"`   // 链接上传超时违约扣款比例,百分之
+	DataBreakRate          int       `gorm:"column:data_break_rate;default:0;NOT NULL"`   // 数据上传超时违约扣款比例,百分之
+	FeeForm                int       `gorm:"column:fee_form;NOT NULL"`
+	RealServiceCharge      float64   `gorm:"column:real_service_charge;type:decimal(10,2);comment:服务商实际所得服务费(扣除违约)" json:"real_service_charge"` // 稿费形式,1,2,3分别代表产品置换、固定稿费、自报价
+	ServiceCharge          float64   `gorm:"column:service_charge"`                                                                             // 服务费
+	ServiceRate            int       `gorm:"column:service_rate"`                                                                               // 服务费率,千分之
+	TaskStatus             int       `gorm:"column:task_status;default:1;NOT NULL"`                                                             // 任务状态 1待选 2已选 3落选
+	TaskStage              int       `gorm:"column:task_stage;NOT NULL"`                                                                        // 任务阶段,详情见info_task_stage表
+	CreateDate             time.Time `gorm:"column:create_date;default:CURRENT_TIMESTAMP;NOT NULL"`                                             // 创建时间
+	SelectDate             time.Time `gorm:"column:select_date"`                                                                                // 反选时间
+	DeliveryDate           time.Time `gorm:"column:delivery_date"`                                                                              // 发货时间
+	CompleteStatus         int       `gorm:"column:complete_status;default:1;NOT NULL"`                                                         // 结束方式 1未结束 2正常结束 3反选失败 4被解约
+	CompleteDate           time.Time `gorm:"column:complete_date"`                                                                              // 结束时间
+	LogisticsStatus        int       `gorm:"column:logistics_status;default:1"`                                                                 // 发货状态 1 待发货 2已发货 3 已签收
+	ScriptStatus           uint      `gorm:"column:script_status;default:1"`                                                                    // 脚本上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
+	SketchStatus           uint      `gorm:"column:sketch_status;default:1"`                                                                    // 初稿上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
+	UpdateAt               time.Time `gorm:"column:update_at"`                                                                                  // 更新时间
+	LinkStatus             uint      `gorm:"column:link_status;default:1"`                                                                      // 链接上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
+	DataStatus             uint      `gorm:"column:data_status;default:1"`                                                                      // 数据上传状态 1-5分别代表待添加、已添加、待修改、已修改、已通过
+	CurDefaultType         int       `gorm:"column:cur_default_type"`                                                                           // 任务当前处于的违约类型 0-8分别表示未违约、脚本超时违约、脚本未上传违约、初稿超时违约、初稿未上传违约、链接超时违约、链接未上传违约、数据超时违约、数据未上传违约
+	WithdrawStatus         int       `gorm:"column:withdraw_status;default:1"`
+	WithdrawDate           time.Time `gorm:"column:withdraw_date;type:datetime;comment:提现时间" json:"withdraw_date"` // 提现状态,1-4分别代表不可提现、可提现、提现中、已提现
+	SettleStatus           int       `gorm:"column:settle_status;default:1"`
+	LeadTeamId             string    `gorm:"column:lead_team_id;type:char(10);comment:作为团长的young之团id,对应younggee_talent_team中的team_id字段" json:"lead_team_id"`
+	TeamId                 string    `gorm:"column:team_id;type:char(10);comment:作为团员的young之团id,对应younggee_talent_team中的team_id字段" json:"team_id"`
+	TeamIncome             float64   `gorm:"column:team_income;type:decimal(10,2);comment:young之团团长现金收益" json:"team_income"`
+	TeamPoint              int       `gorm:"column:team_point;type:int(11);comment:young之团团长积分收益" json:"team_point"`
+	CurBreakAt             time.Time `gorm:"column:cur_break_at;type:datetime;comment:当前阶段截止时间" json:"cur_break_at"`
+	SupplierId             int       `gorm:"column:supplier_id;type:int(11);default:0;comment:服务商ID" json:"supplier_id"`
+	SupplierStatus         int       `gorm:"column:supplier_status;type:int(11);default:0;comment:服务商任务状态 0表示达人来源非服务商 1待选 2已选 3落选" json:"supplier_status"`
+	DraftFee               float64   `gorm:"column:draft_fee;type:decimal(10,2);default:0.00;comment:达人稿费,达人所见的稿费金额" json:"draft_fee"`
+	SignedTime             time.Time `gorm:"column:signed_time;type:datetime;comment:签收时间" json:"signed_time"`
+	FansNum                int       `gorm:"column:fans_num;type:int(11);comment:粉丝数" json:"fans_num"`
+	VoteAvg                int       `gorm:"column:vote_avg;type:int(11);comment:总点赞数" json:"vote_avg"`
+	CommitAvg              int       `gorm:"column:commit_avg;type:int(11);comment:总评论数" json:"commit_avg"`
+	ViewNum                int       `gorm:"column:view_num;type:int(11);comment:作品总浏览量" json:"view_num"`
+	PlatformId             int       `gorm:"column:platform_id;type:int(11);comment:平台id;NOT NULL" json:"platform_id"`
+	BOperator              string    `gorm:"column:b_operator;type:varchar(255);comment:商家确定达人操作人ID" json:"b_operator"`
+	BOperatorType          int       `gorm:"column:b_operator_type;type:int(11);default:0;comment:商家操作人类型,1商家用户,2商家子账号,3管理后台" json:"b_operator_type"`
+	SOperator              int       `gorm:"column:s_operator;type:int(11);default:0;comment:服务商提报达人操作人ID" json:"s_operator"`
+	SOperatorType          int       `gorm:"column:s_operator_type;type:int(11);default:0;comment:服务商操作人类型,1服务商主账号,2服务商子账号,3管理后台" json:"s_operator_type"`
+	OpenId                 string    `gorm:"column:open_id;type:varchar(255);comment:达人报名的快手唯一标识" json:"open_id"`
+	SProjectId             int       `gorm:"column:s_project_id;type:int(11);comment:服务商种草任务ID" json:"s_project_id"`
+	SupportFee             float64   `gorm:"column:support_fee;type:decimal(10,2);comment:提报价格(达人自报价经过计算后,)" json:"support_fee"`
+	SketchMissingTime      time.Time `gorm:"column:sketch_missing_time;type:datetime;comment:未传初稿违约时间" json:"sketch_missing_time"`
+	SketchMissingStatus    int       `gorm:"column:sketch_missing_status;type:int(11);default:0;comment:未传初稿违约状态,0无违约,1有违约" json:"sketch_missing_status"`
+	LinkMissingTime        time.Time `gorm:"column:link_missing_time;type:datetime;comment:未发作品违约时间" json:"link_missing_time"`
+	LinkMissingStatus      int       `gorm:"column:link_missing_status;type:int(11);default:0;comment:未发作品违约状态,0无违约,1有违约" json:"link_missing_status"`
+	DataMissingTime        time.Time `gorm:"column:data_missing_time;type:datetime;comment:未传数据违约时间" json:"data_missing_time"`
+	DataMissingStatus      int       `gorm:"column:data_missing_status;type:int(11);default:0;comment:未传数据违约状态,0无违约,1有违约" json:"data_missing_status"`
+	TerminateOperatorType  int       `gorm:"column:terminate_operator_type;type:int(11);comment:终止合作操作人类型,1商家用户,2商家子账号,3管理后台" json:"terminate_operator_type"`
+	TerminateOperator      string    `gorm:"column:terminate_operator;type:varchar(255);comment:终止合作操作人ID" json:"terminate_operator"`
+	TerminateReason        string    `gorm:"column:terminate_reason;type:varchar(255);comment:终止理由" json:"terminate_reason"`
+	TerminateTime          time.Time `gorm:"column:terminate_time;type:datetime;comment:终止合作时间" json:"terminate_time"`
+	CancelOperatorType     int       `gorm:"column:cancel_operator_type;type:int(11);comment:解约操作人类型,1商家用户,2商家子账号,3管理后台" json:"cancel_operator_type"`
+	CancelOperator         string    `gorm:"column:cancel_operator;type:varchar(255);comment:解约操作人ID" json:"cancel_operator"`
+	CancelReason           string    `gorm:"column:cancel_reason;type:varchar(255);comment:解约原因" json:"cancel_reason"`
+	CancelTime             time.Time `gorm:"column:cancel_time;type:datetime;comment:解约时间" json:"cancel_time"`
+	City                   string    `gorm:"column:city;type:varchar(255);comment:报名达人的所在城市" json:"city"` // 结算状态,1、2分别表示待结算、已结算
+}
+
+func (m *YoungeeTaskInfo) TableName() string {
+	return "youngee_task_info"
+}

+ 27 - 24
model/gorm_model/rechargeRecord.go

@@ -1,24 +1,27 @@
-package gorm_model
-
-// Code generated by sql2gorm. DO NOT EDIT.
-
-import (
-	"time"
-)
-
-type YounggeeRechargeRecord struct {
-	RechargeID         string    `gorm:"column:recharge_id;primary_key"`       // 充值订单ID
-	EnterpriseID       string    `gorm:"column:enterprise_id;NOT NULL"`        // 企业id
-	RechargeAmount     float64   `gorm:"column:recharge_amount;NOT NULL"`      // 充值金额
-	TransferVoucherUrl string    `gorm:"column:transfer_voucher_url;NOT NULL"` // 转账凭证图片链接
-	Phone              string    `gorm:"column:phone;NOT NULL"`                // 联系方式
-	RechargeMethod     int64     `gorm:"column:recharge_method;NOT NULL"`      // 充值方式:1为对公转账,2为支付宝在线支付,3为微信支付
-	Status             int64     `gorm:"column:status;NOT NULL"`               // 充值状态:0为充值待确认,1为充值已确认
-	InvoiceStatus      int64     `gorm:"column:invoice_status;NOT NULL"`       // 开票状态:1为可开票,2为待开票,3为已开票
-	CommitAt           time.Time `gorm:"column:commit_at;NOT NULL"`            // 充值申请提交时间
-	ConfirmAt          time.Time `gorm:"column:confirm_at"`                    // 充值确认时间
-}
-
-func (m *YounggeeRechargeRecord) TableName() string {
-	return "younggee_recharge_record"
-}
+package gorm_model
+
+// Code generated by sql2gorm. DO NOT EDIT.
+
+import (
+	"time"
+)
+
+type YounggeeRechargeRecord struct {
+	RechargeID         string    `gorm:"column:recharge_id;primary_key"` // 充值订单ID
+	EnterpriseID       string    `gorm:"column:enterprise_id;NOT NULL"`  // 企业id
+	SubAccountID       int       `gorm:"column:sub_account_id;NOT NULL"`
+	RechargeAmount     float64   `gorm:"column:recharge_amount;NOT NULL"`      // 充值金额
+	TransferVoucherUrl string    `gorm:"column:transfer_voucher_url;NOT NULL"` // 转账凭证图片链接
+	Phone              string    `gorm:"column:phone;NOT NULL"`                // 联系方式
+	RechargeMethod     int64     `gorm:"column:recharge_method;NOT NULL"`      // 充值方式:1为对公转账,2为支付宝在线支付,3为微信支付
+	Status             int64     `gorm:"column:status;NOT NULL"`               // 充值状态:0为充值待确认,1为充值已确认
+	InvoiceStatus      int64     `gorm:"column:invoice_status;NOT NULL"`       // 开票状态:1为可开票,2为待开票,3为已开票
+	CommitAt           time.Time `gorm:"column:commit_at;NOT NULL"`            // 充值申请提交时间
+	ConfirmAt          time.Time `gorm:"column:confirm_at"`                    // 充值确认时间
+	FailReason         string    `gorm:"column:fail_reason"`                   //失败原因
+	RefuseAt           time.Time `gorm:"column:refuse_at"`                     //失败时间
+}
+
+func (m *YounggeeRechargeRecord) TableName() string {
+	return "younggee_recharge_record"
+}

+ 30 - 0
model/gorm_model/s_locallife_info.go

@@ -0,0 +1,30 @@
+package gorm_model
+
+import (
+	"time"
+)
+
+type YounggeeSLocalLifeInfo struct {
+	SLocalLifeId        int       `gorm:"column:s_local_life_id;type:int(11);primary_key" json:"s_local_life_id"`
+	LocalLifeId         int       `gorm:"column:local_life_id;type:int(11);comment:被加入商单的原本地生活ID" json:"local_life_id"`
+	EnterpriseId        string    `gorm:"column:enterprise_id;type:varchar(255);comment:商家ID" json:"enterprise_id"`
+	SupplierId          int       `gorm:"column:supplier_id;type:int(11);comment:服务商ID" json:"supplier_id"`
+	ApplyNum            int       `gorm:"column:apply_num;type:int(11);comment:报名人数" json:"apply_num"`
+	RecruitNum          int       `gorm:"column:recruit_num;type:int(11);comment:已招募人数" json:"recruit_num"`
+	SettleNum           int       `gorm:"column:settle_num;type:int(11);default:0;comment:已结算人数" json:"settle_num"`
+	SubAccountId        int       `gorm:"column:sub_account_id;type:int(11);comment:服务商子账号ID" json:"sub_account_id"`
+	ServiceCharge       string    `gorm:"column:service_charge;type:varchar(255);comment:服务商预估可赚服务费" json:"service_charge"`
+	ServiceChargeActual string    `gorm:"column:service_charge_actual;type:varchar(255);comment:服务商实际可赚服务费" json:"service_charge_actual"`
+	OperatorType        string    `gorm:"column:operator_type;type:varchar(255);comment:添加商单操作人类型,1为服务商主账号,2为服务商子账号" json:"operator_type"`
+	SProjectStatus      string    `gorm:"column:s_project_status;type:varchar(255);comment:服务商本地生活任务状态,1待确认,2已确认,3已拒绝" json:"s_project_status"`
+	StrategyStatus      string    `gorm:"column:strategy_status;type:varchar(255);comment:定向本地生活任务是否替换招募策略" json:"strategy_status"`
+	BOperator           string    `gorm:"column:b_operator;type:varchar(255);comment:商家发起入库邀约人" json:"b_operator"`
+	BOperatorType       string    `gorm:"column:b_operator_type;type:varchar(255);comment:商家发起入库邀约人类型:1主账号 2子账号" json:"b_operator_type"`
+	CreateTime          time.Time `gorm:"column:create_time;type:datetime;comment:创建时间" json:"create_time"`
+	CreateStrategyId    int       `gorm:"column:create_strategy_id;type:int(11)" json:"create_strategy_id"`
+	CreateStrategyType  string    `gorm:"column:create_strategy_type;type:varchar(255)" json:"create_strategy_type"`
+}
+
+func (m *YounggeeSLocalLifeInfo) TableName() string {
+	return "younggee_s_local_life_info"
+}

+ 27 - 0
model/gorm_model/s_project.go

@@ -0,0 +1,27 @@
+package gorm_model
+
+// 服务商加入商单的种草任务
+type YounggeeSProjectInfo struct {
+	SProjectId          int     `gorm:"column:s_project_id;type:int(11);primary_key;AUTO_INCREMENT;comment:服务商种草任务ID" json:"s_project_id"`
+	ProjectId           string  `gorm:"column:project_id;type:varchar(255);comment:被服务商加入商单的原种草任务ID" json:"project_id"`
+	ProjectStatus       int     `gorm:"column:project_status;type:tinyint(4);comment:项目状态,1-10分别代表创建中、待审核、审核通过、招募中、招募完毕、待支付、已支付、失效、执行中、已结案" json:"project_status"`
+	ProjectType         int     `gorm:"column:project_type;type:tinyint(4);comment:种草任务类型,1为公开,2为定向" json:"project_type"`
+	ProjectName         string  `gorm:"column:project_name;type:varchar(50);comment:种草任务名称" json:"project_name"`
+	ProjectPlatform     int     `gorm:"column:project_platform;type:tinyint(4);comment:种草任务平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎" json:"project_platform"`
+	ProjectForm         int     `gorm:"column:project_form;type:tinyint(4);comment:任务形式,1-3分别代表商品寄拍、素材分发、虚拟产品测评" json:"project_form"`
+	ContentType         int     `gorm:"column:content_type;type:tinyint(4);comment:内容形式,1代表图文,2代表视频" json:"content_type"`
+	ShareCode           string  `gorm:"column:share_code;type:varchar(255);comment:分享码URL" json:"share_code"`
+	SupplierId          int     `gorm:"column:supplier_id;type:int(11);comment:服务商ID" json:"supplier_id"`
+	EnterpriseId        string  `gorm:"column:enterprise_id;type:varchar(255);comment:所属企业id" json:"enterprise_id"`
+	ApplyNum            int     `gorm:"column:apply_num;type:int(11);default:0;comment:报名人数;NOT NULL" json:"apply_num"`
+	RecruitNum          int     `gorm:"column:recruit_num;type:int(11);default:0;comment:已招募人数;NOT NULL" json:"recruit_num"`
+	SettleNum           int     `gorm:"column:settle_num;type:int(11);default:0;comment:已结算人数" json:"settle_num"`
+	SubAccountId        int     `gorm:"column:sub_account_id;type:int(11);default:0;comment:服务商子账号ID" json:"sub_account_id"`
+	ServiceCharge       float64 `gorm:"column:service_charge;type:decimal(10,2);default:0.00;comment:服务商预估可赚服务费" json:"service_charge"`
+	ServiceChargeActual float64 `gorm:"column:service_charge_actual;type:decimal(10,2);default:0.00;comment:服务商实际可赚服务费" json:"service_charge_actual"`
+	OperatorType        int     `gorm:"column:operator_type;type:int(11);default:0;comment:添加商单操作人类型,1为服务商主账号,2为服务商子账号" json:"operator_type"`
+}
+
+func (m *YounggeeSProjectInfo) TableName() string {
+	return "younggee_s_project_info"
+}

+ 36 - 35
model/gorm_model/selection_info.go

@@ -8,41 +8,42 @@ type YounggeeSelectionInfo struct {
 	SelectionID       string     `gorm:"column:selection_id;primary_key"` // 选品项目id
 	SelectionName     string     `gorm:"column:selection_name"`           // 选品项目名称
 	EnterpriseID      string     `gorm:"column:enterprise_id"`            // 所属企业id
-	ProductID         int        `gorm:"column:product_id"`               // 关联商品id
-	ContentType       int        `gorm:"column:content_type"`             // 内容形式,1代表图文,2代表视频
-	SelectionStatus   int        `gorm:"column:selection_status"`         // 选品项目状态,1-8分别代表创建中、待审核、审核通过、待支付、已支付、执行中、失效、已结案
-	TaskMode          int        `gorm:"column:task_mode"`                // 任务形式,1、2分别表示悬赏任务、纯佣带货
-	Platform          int        `gorm:"column:platform"`                 // 项目平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎
-	SampleMode        int        `gorm:"column:sample_mode"`              // 领样形式,1、2分别表示免费领样、无领样
-	ProductUrl        string     `gorm:"column:product_url"`              // 带货链接
-	SampleNum         int        `gorm:"column:sample_num"`               // 样品数量
-	RemainNum         int        `gorm:"column:remain_num"`               // 剩余数量
-	CommissionRate    string     `gorm:"column:commission_rate"`          // 佣金比例
-	EstimatedCost     string     `gorm:"column:estimated_cost"`           // 预估成本
-	TaskReward        string     `gorm:"column:task_reward"`              // 任务悬赏
-	SampleCondition   string     `gorm:"column:sample_condition"`         // 领样条件
-	RewardCondition   string     `gorm:"column:reward_condition"`         // 返现悬赏条件
-	SettlementAmount  string     `gorm:"column:settlement_amount"`        // 结算金额
-	TaskDdl           *time.Time `gorm:"column:task_ddl"`                 // 招募截止时间
-	Detail            string     `gorm:"column:detail"`                   // 卖点总结
-	ProductSnap       string     `gorm:"column:product_snap"`             // 商品信息快照
-	ProductPhotoSnap  string     `gorm:"column:product_photo_snap"`       // 商品图片快照
-	CreatedAt         *time.Time `gorm:"column:created_at"`               // 创建时间
-	UpdatedAt         *time.Time `gorm:"column:updated_at"`               // 修改时间
-	SubmitAt          *time.Time `gorm:"column:submit_at"`                // 提交审核时间
-	PassAt            *time.Time `gorm:"column:pass_at"`                  // 审核通过时间
-	FailReason        int        `gorm:"column:fail_reason"`              // 失效原因,1、2分别表示逾期未支付、项目存在风险
-	PayAt             *time.Time `gorm:"column:pay_at"`                   // 支付时间
-	FinishAt          *time.Time `gorm:"column:finish_at"`                // 结案时间
-	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代表删除
-	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"`       // 已签收数量
+	SubAccountID      int        `gorm:"column:sub_account_id;default:0;NOT NULL"`
+	ProductID         int        `gorm:"column:product_id"`          // 关联商品id
+	ContentType       int        `gorm:"column:content_type"`        // 内容形式,1代表图文,2代表视频
+	SelectionStatus   int        `gorm:"column:selection_status"`    // 选品项目状态,1-8分别代表创建中、待审核、审核通过、待支付、已支付、执行中、失效、已结案
+	TaskMode          int        `gorm:"column:task_mode"`           // 任务形式,1、2分别表示悬赏任务、纯佣带货
+	Platform          int        `gorm:"column:platform"`            // 项目平台,1-7分别代表小红书、抖音、微博、快手、b站、大众点评、知乎
+	SampleMode        int        `gorm:"column:sample_mode"`         // 领样形式,1、2分别表示免费领样、无领样
+	ProductUrl        string     `gorm:"column:product_url"`         // 带货链接
+	SampleNum         int        `gorm:"column:sample_num"`          // 样品数量
+	RemainNum         int        `gorm:"column:remain_num"`          // 剩余数量
+	CommissionRate    string     `gorm:"column:commission_rate"`     // 佣金比例
+	EstimatedCost     string     `gorm:"column:estimated_cost"`      // 预估成本
+	TaskReward        string     `gorm:"column:task_reward"`         // 任务悬赏
+	SampleCondition   string     `gorm:"column:sample_condition"`    // 领样条件
+	RewardCondition   string     `gorm:"column:reward_condition"`    // 返现悬赏条件
+	SettlementAmount  string     `gorm:"column:settlement_amount"`   // 结算金额
+	TaskDdl           *time.Time `gorm:"column:task_ddl"`            // 招募截止时间
+	Detail            string     `gorm:"column:detail"`              // 卖点总结
+	ProductSnap       string     `gorm:"column:product_snap"`        // 商品信息快照
+	ProductPhotoSnap  string     `gorm:"column:product_photo_snap"`  // 商品图片快照
+	CreatedAt         *time.Time `gorm:"column:created_at"`          // 创建时间
+	UpdatedAt         *time.Time `gorm:"column:updated_at"`          // 修改时间
+	SubmitAt          *time.Time `gorm:"column:submit_at"`           // 提交审核时间
+	PassAt            *time.Time `gorm:"column:pass_at"`             // 审核通过时间
+	FailReason        int        `gorm:"column:fail_reason"`         // 失效原因,1、2分别表示逾期未支付、项目存在风险
+	PayAt             *time.Time `gorm:"column:pay_at"`              // 支付时间
+	FinishAt          *time.Time `gorm:"column:finish_at"`           // 结案时间
+	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代表删除
+	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 *YounggeeSelectionInfo) TableName() string {

+ 28 - 0
model/gorm_model/stroe.go

@@ -0,0 +1,28 @@
+package gorm_model
+
+import (
+	"database/sql"
+	"time"
+)
+
+type YounggeeStore struct {
+	StoreId            int          `gorm:"column:store_id;type:int(11);primary_key;AUTO_INCREMENT;comment:门店id" json:"store_id"`
+	StoreName          string       `gorm:"column:store_name;type:varchar(255);comment:门店名称;NOT NULL" json:"store_name"`
+	StoreCategory      string       `gorm:"column:store_category;type:varchar(255);comment:门店类目(/分隔);NOT NULL" json:"store_category"`
+	StoreType          int          `gorm:"column:store_type;type:int(11);comment:门店类型,1单门店,2连锁门店;NOT NULL" json:"store_type"`
+	StoreLocation      string       `gorm:"column:store_location;type:varchar(255);comment:门店地址" json:"store_location"`
+	StoreDetail        string       `gorm:"column:store_detail;type:varchar(255);comment:门店特点" json:"store_detail"`
+	StoreLink          string       `gorm:"column:store_link;type:varchar(255);comment:分销链接" json:"store_link"`
+	TeamNum            int          `gorm:"column:team_num;type:int(11);default:0;comment:包含团购套餐数;NOT NULL" json:"team_num"`
+	BelongEnterpriseId string       `gorm:"column:belong_enterprise_id;type:varchar(10);comment:门店所属商家ID" json:"belong_enterprise_id"`
+	IsDeleted          int          `gorm:"column:is_deleted;type:int(11);default:0;comment:已删除(0否 1是);NOT NULL" json:"is_deleted"`
+	OperateType        int          `gorm:"column:operate_type;type:int(11);comment:操作人类型(1商家 2后台);NOT NULL" json:"operate_type"`
+	EnterpriseId       string       `gorm:"column:enterprise_id;type:varchar(10);comment:商家id;NOT NULL" json:"enterprise_id"`
+	SubAccountId       int          `gorm:"column:sub_account_id;type:int(11);default:0;comment:商家子账号id;NOT NULL" json:"sub_account_id"`
+	CreatedAt          time.Time    `gorm:"column:created_at;type:timestamp;comment:创建时间;NOT NULL" json:"created_at"`
+	UpdatedAt          sql.NullTime `gorm:"column:updated_at;type:timestamp;comment:更新时间" json:"updated_at"`
+}
+
+func (m *YounggeeStore) TableName() string {
+	return "younggee_store"
+}

+ 23 - 0
model/gorm_model/supplier.go

@@ -0,0 +1,23 @@
+package gorm_model
+
+type YounggeeSupplier struct {
+	SupplierId      int    `gorm:"column:supplier_id;type:int(11);primary_key;AUTO_INCREMENT;comment:服务商ID" json:"supplier_id"`
+	SupplierName    string `gorm:"column:supplier_name;type:varchar(255);comment:服务商名称" json:"supplier_name"`
+	PhoneNumber     string `gorm:"column:phone_number;type:varchar(255);comment:手机号" json:"phone_number"`
+	WechatNumber    string `gorm:"column:wechat_number;type:varchar(255);comment:微信号" json:"wechat_number"`
+	WechatQrcode    string `gorm:"column:wechat_qrcode;type:varchar(255);comment:微信二维码" json:"wechat_qrcode"`
+	BusinessLicense string `gorm:"column:business_license;type:varchar(255);comment:营业执照url" json:"business_license"`
+	Usci            string `gorm:"column:usci;type:varchar(255);comment:统一社会信用代码" json:"usci"`
+	CompanyName     string `gorm:"column:company_name;type:varchar(255);comment:公司名称" json:"company_name"`
+	IdFront         string `gorm:"column:id_front;type:varchar(255);comment:身份证人像面url" json:"id_front"`
+	IdBack          string `gorm:"column:id_back;type:varchar(255);comment:身份证国徽面url" json:"id_back"`
+	IdNumber        string `gorm:"column:id_number;type:varchar(255);comment:身份证号" json:"id_number"`
+	Name            string `gorm:"column:name;type:varchar(255);comment:姓名" json:"name"`
+	UserId          int    `gorm:"column:user_id;type:int(11);default:0;comment:用户表中的用户ID" json:"user_id"`
+	SupplierType    int    `gorm:"column:supplier_type;type:int(11);default:0;comment:服务商用户类型,1为个人PR,2为机构" json:"supplier_type"`
+	Avater          string `gorm:"column:avatar;type:varchar(255);comment:头像" json:"avater"`
+}
+
+func (m *YounggeeSupplier) TableName() string {
+	return "younggee_supplier"
+}

+ 17 - 0
model/gorm_model/supplier_income.go

@@ -0,0 +1,17 @@
+package gorm_model
+
+type YounggeeSupplierIncome struct {
+	IncomeId             int     `gorm:"column:income_id;type:int(11);primary_key;AUTO_INCREMENT;comment:服务商收入表ID" json:"income_id"`
+	SupplierId           int     `gorm:"column:supplier_id;type:int(11);comment:服务商ID" json:"supplier_id"`
+	SupplierType         int     `gorm:"column:supplier_type;type:int(11);comment:服务商用户类型,1为个人PR,2为机构" json:"supplier_type"`
+	SProjectId           int     `gorm:"column:s_project_id;type:int(11);comment:服务商加入商单后的种草任务ID" json:"s_project_id"`
+	SLocalLifeId         int     `gorm:"column:s_local_life_id;type:int(11);comment:服务商加入商单后的本地生活ID" json:"s_local_life_id"`
+	WithdrawStatus       int     `gorm:"column:withdraw_status;type:int(11);comment:提现状态,1-3分别表示可提现、提现中、已提现" json:"withdraw_status"`
+	IncomeType           int     `gorm:"column:income_type;type:int(11);comment:服务商收入类型,1种草,2带货,3本地生活" json:"income_type"`
+	IncomeStatus         int     `gorm:"column:income_status;type:int(11);comment:收入状态:1可回发票,2待传发票,3平台确认中,4已回发票,5可提现,6提现中,7平台确认中,8已提现" json:"income_status"`
+	SupplierChargeActual float64 `gorm:"column:supplier_charge_actual;type:decimal(10,2);comment:服务费已结算" json:"supplier_charge_actual"`
+}
+
+func (m *YounggeeSupplierIncome) TableName() string {
+	return "younggee_supplier_income"
+}

+ 25 - 0
model/gorm_model/supplier_invoice_record.go

@@ -0,0 +1,25 @@
+package gorm_model
+
+import (
+	"time"
+)
+
+type YounggeeSupplierInvoice struct {
+	InvoiceId         int       `gorm:"column:invoice_id;type:int(11);primary_key;AUTO_INCREMENT;comment:服务商回票ID" json:"invoice_id"`
+	SupplierId        int       `gorm:"column:supplier_id;type:int(11);comment:服务商ID" json:"supplier_id"`
+	IncomeIds         string    `gorm:"column:income_ids;type:varchar(255);comment:服务商收入ID" json:"income_ids"`
+	InvoiceStatus     int       `gorm:"column:invoice_status;type:int(11);comment:回票状态,1待传发票,2平台确认中,3已回发票,4发票驳回" json:"invoice_status"`
+	InvoiceUrl        string    `gorm:"column:invoice_url;type:varchar(255);comment:发票url" json:"invoice_url"`
+	SOperator         int       `gorm:"column:s_operator;type:int(11);comment:服务商回票操作人" json:"s_operator"`
+	SOperatorType     int       `gorm:"column:s_operator_type;type:int(11);comment:服务商回票操作人类型,1主,2子" json:"s_operator_type"`
+	UploadInvoiceTime time.Time `gorm:"column:upload_invoice_time;type:datetime;comment:上传发票时间" json:"upload_invoice_time"`
+	AgreeTime         time.Time `gorm:"column:agree_time;type:datetime;comment:同意时间" json:"agree_time"`
+	RejectTime        time.Time `gorm:"column:reject_time;type:datetime;comment:驳回开票时间" json:"reject_time"`
+	FailReason        string    `gorm:"column:fail_reason;type:varchar(255);comment:驳回理由" json:"fail_reason"`
+	Company           string    `gorm:"column:company;type:varchar(255);comment:开票公司" json:"company"`
+	WithdrawStatus    int       `gorm:"column:withdraw_status;type:int(11);comment:提现状态:1可提现,2提现中,3已提现,4不可提现'" json:"withdraw_status"`
+}
+
+func (m *YounggeeSupplierInvoice) TableName() string {
+	return "younggee_supplier_invoice"
+}

+ 30 - 0
model/gorm_model/supplier_withdraw.go

@@ -0,0 +1,30 @@
+package gorm_model
+
+import (
+	"time"
+)
+
+type YounggeeSupplierWithdraw struct {
+	SupplierWithdrawId int       `gorm:"column:supplier_withdraw_id;type:int(11);primary_key;comment:提现流水ID" json:"supplier_withdraw_id"`
+	SupplierId         int       `gorm:"column:supplier_id;type:int(11);comment:服务商ID" json:"supplier_id"`
+	WithdrawAmount     float64   `gorm:"column:withdraw_amount;type:decimal(10,2);comment:提现金额" json:"withdraw_amount"`
+	AmountPayable      float64   `gorm:"column:amount_payable;type:decimal(10,2);comment:实际提现金额(扣税后)" json:"amount_payable"`
+	InvoiceIds         string    `gorm:"column:invoice_ids;type:varchar(255);comment:发票ID列表(根据发票ID去查对应的income)" json:"invoice_ids"`
+	IncomeIds          string    `gorm:"column:income_ids;type:varchar(255);comment:收入列表(个人服务商不需要回票所以看这个)" json:"income_ids"`
+	Company            string    `gorm:"column:company;type:varchar(255);comment:机构名称" json:"company"`
+	SupplierType       int       `gorm:"column:supplier_type;type:int(11);comment:服务商用户类型,1为个人PR,2为机构" json:"supplier_type"`
+	Name               string    `gorm:"column:name;type:varchar(255);comment:姓名" json:"name"`
+	IdNumber           string    `gorm:"column:id_number;type:varchar(255);comment:身份证号码" json:"id_number"`
+	BankName           string    `gorm:"column:bank_name;type:varchar(255);comment:提现银行" json:"bank_name"`
+	BankNumber         int       `gorm:"column:bank_number;type:int(11);comment:提现银行卡号" json:"bank_number"`
+	Phone              string    `gorm:"column:phone;type:varchar(255);comment:手机号码" json:"phone"`
+	WithdrawStatus     int       `gorm:"column:withdraw_status;type:int(11);comment:提现状态:1待提现,2提现中,3已提现,4已驳回" json:"withdraw_status"`
+	SupplyTime         time.Time `gorm:"column:supply_time;type:datetime" json:"supply_time"`
+	AgreeTime          time.Time `gorm:"column:agree_time;type:datetime" json:"agree_time"`
+	RejectTime         time.Time `gorm:"column:reject_time;type:datetime" json:"reject_time"`
+	FailReson          string    `gorm:"column:fail_reson;type:varchar(255)" json:"fail_reson"`
+}
+
+func (m *YounggeeSupplierWithdraw) TableName() string {
+	return "younggee_supplier_withdraw"
+}

+ 31 - 27
model/gorm_model/talent_income.go

@@ -1,27 +1,31 @@
-// Code generated by sql2gorm. DO NOT EDIT.
-package gorm_model
-
-import (
-	"time"
-)
-
-type YounggeeTalentIncome struct {
-	ID             int       `gorm:"column:id;primary_key"`  // 递增id
-	TalentID       string    `gorm:"column:talent_id"`       // 达人id,对应youngee_talent_info中id字段
-	ProjectID      string    `gorm:"column:project_id"`      // 项目id
-	SelectionID    string    `gorm:"column:selection_id"`    // 选品id
-	TaskID         string    `gorm:"column:task_id"`         // 任务id
-	SectaskID      string    `gorm:"column:sectask_id"`      // 选品任务id
-	BrandName      string    `gorm:"column:brand_name"`      // 品牌名称
-	TaskName       string    `gorm:"column:task_name"`       // 任务名称
-	TeamID         string    `gorm:"column:team_id"`         // young之团id
-	Income         string    `gorm:"column:income"`          // 收益金额
-	IncomeType     int       `gorm:"column:income_type"`     // 收益类型,1-4分别表示任务收益、开团收益、样品返现、悬赏收益
-	WithdrawStatus int       `gorm:"column:withdraw_status"` // 提现状态,1-3分别表示可提现、提现中、已提现
-	IncomeAt       *time.Time `gorm:"column:income_at"`       // 收益产生时间
-	WithdrawAt     *time.Time `gorm:"column:withdraw_at"`     // 提现时间
-}
-
-func (m *YounggeeTalentIncome) TableName() string {
-	return "younggee_talent_income"
-}
+// Code generated by sql2gorm. DO NOT EDIT.
+package gorm_model
+
+import (
+	"time"
+)
+
+type YounggeeTalentIncome struct {
+	ID             int        `gorm:"column:id;primary_key"` // 递增id
+	TalentID       string     `gorm:"column:talent_id"`      // 达人id,对应youngee_talent_info中id字段
+	ProjectID      string     `gorm:"column:project_id"`     // 项目id
+	SelectionID    string     `gorm:"column:selection_id"`   // 选品id
+	TaskID         string     `gorm:"column:task_id"`        // 任务id
+	SectaskID      string     `gorm:"column:sectask_id"`     // 选品任务id
+	LocalId        string     `gorm:"column:local_id;type:char(19);comment:本地生活id" json:"local_id"`
+	LocalTaskId    string     `gorm:"column:local_task_id;type:varchar(255);comment:本地生活taskid" json:"local_task_id"`
+	BrandName      string     `gorm:"column:brand_name"`      // 品牌名称
+	TaskName       string     `gorm:"column:task_name"`       // 任务名称
+	TeamID         string     `gorm:"column:team_id"`         // young之团id
+	Income         string     `gorm:"column:income"`          // 收益金额
+	IncomeType     int        `gorm:"column:income_type"`     // 收益类型,1-4分别表示任务收益、开团收益、样品返现、悬赏收益
+	WithdrawStatus int        `gorm:"column:withdraw_status"` // 提现状态,1-3分别表示可提现、提现中、已提现
+	IncomeAt       *time.Time `gorm:"column:income_at"`       // 收益产生时间
+	WithdrawAt     *time.Time `gorm:"column:withdraw_at"`     // 提现时间
+	PhotoUrl       string     `gorm:"column:photo_url"`
+	Type           int        `gorm:"column:type"` //1.种草2.带货3.本地生活
+}
+
+func (m *YounggeeTalentIncome) TableName() string {
+	return "younggee_talent_income"
+}

+ 30 - 24
model/gorm_model/withdraw_info.go

@@ -1,24 +1,30 @@
-package gorm_model
-
-// Code generated by sql2gorm. DO NOT EDIT.
-
-import (
-	"time"
-)
-
-type YounggeeWithdrawRecord struct {
-	WithdrawID     string    `gorm:"column:withdraw_id;primary_key"`  // 提现订单ID
-	TalentID       string    `gorm:"column:talent_id;NOT NULL"`       // 达人id
-	WithdrawAmount float64   `gorm:"column:withdraw_amount;NOT NULL"` // 提现金额
-	AmountPayable  float64   `gorm:"column:amount_payable;NOT NULL"`  // 应付金额
-	TaskIDList     string    `gorm:"column:task_id_list;NOT NULL"`    // 该提现订单包含的task_id列表
-	ReceiveInfo    string    `gorm:"column:receive_info;NOT NULL"`    // 收款信息
-	Status         int       `gorm:"column:status;NOT NULL"`          // 提现状态:1为提现待确认,2为已提现
-	BankType       int       `gorm:"column:bank_type;NOT NULL"`       // 到账方式,1为支付宝,2为银行卡
-	SubmitAt       time.Time `gorm:"column:submit_at;NOT NULL"`       // 申请提交时间
-	WithdrawAt     time.Time `gorm:"column:withdraw_at"`              // 提现时间
-}
-
-func (m *YounggeeWithdrawRecord) TableName() string {
-	return "younggee_withdraw_record"
-}
+package gorm_model
+
+import (
+	"time"
+)
+
+type YounggeeWithdrawRecord struct {
+	WithdrawID     string    `gorm:"column:withdraw_id;type:char(20);primary_key;comment:提现订单ID" json:"withdraw_id"`
+	TalentID       string    `gorm:"column:talent_id;type:char(25);comment:达人id" json:"talent_id"`
+	WithdrawAmount float64   `gorm:"column:withdraw_amount;type:decimal(10,2);comment:提现金额" json:"withdraw_amount"`
+	AmountPayable  float64   `gorm:"column:amount_payable;type:decimal(10,2);comment:应付金额" json:"amount_payable"`
+	PayPoint       int       `gorm:"column:pay_point;type:int(11);comment:抵扣积分" json:"pay_point"`
+	IncomeIdList   string    `gorm:"column:income_id_list;type:varchar(2000);comment:该提现订单包含的income_id列表" json:"income_id_list"`
+	ReceiveInfo    string    `gorm:"column:receive_info;type:json;comment:收款信息" json:"receive_info"`
+	Status         int       `gorm:"column:status;type:int(11);comment:提现状态:1为提现中,2为已提现, 3,为提现失败" json:"status"`
+	BankType       int       `gorm:"column:bank_type;type:tinyint(4);comment:到账方式,1为支付宝,2为银行卡" json:"bank_type"`
+	SubmitAt       time.Time `gorm:"column:submit_at;type:datetime;comment:申请提交时间" json:"submit_at"`
+	WithdrawAt     time.Time `gorm:"column:withdraw_at;type:datetime;comment:提现时间" json:"withdraw_at"`
+	TaxAmount      float64   `gorm:"column:tax_amount;type:float;comment:扣税" json:"tax_amount"`
+	RejectReason   string    `gorm:"column:reject_reason;type:varchar(255);comment:拒绝理由" json:"reject_reason"`
+	RejectAt       time.Time `gorm:"column:reject_at;type:datetime;comment:拒绝时间 " json:"reject_at"`
+	Name           string    `gorm:"column:name;type:varchar(255);comment:提现人姓名" json:"name"`
+	IdcardNum      string    `gorm:"column:idcard_num;type:varchar(20);comment:身份证号" json:"idcard_num"`
+	BankNum        string    `gorm:"column:bank_num;type:varchar(100);comment:银行卡号" json:"bank_num"`
+	PhoneNum       string    `gorm:"column:phone_num;type:varchar(20);comment:手机号" json:"phone_num"`
+}
+
+func (m *YounggeeWithdrawRecord) TableName() string {
+	return "younggee_withdraw_record"
+}

+ 14 - 14
model/http_model/ConfirmInvoiceRequest.go

@@ -1,14 +1,14 @@
-package http_model
-
-type ConfirmInvoiceRequest struct {
-	BillingId      string `json:"billing_id"`
-	ShipmentNumber string `json:"shipment_number"`
-}
-
-func NewConfirmInvoiceRequest() *ConfirmInvoiceRequest {
-	return new(ConfirmInvoiceRequest)
-}
-
-func NewConfirmInvoiceResponse() *CommonResponse {
-	return new(CommonResponse)
-}
+package http_model
+
+type ConfirmInvoiceRequest struct {
+	BillingId string `json:"billing_id"`
+	Url       string `json:"url"`
+}
+
+func NewConfirmInvoiceRequest() *ConfirmInvoiceRequest {
+	return new(ConfirmInvoiceRequest)
+}
+
+func NewConfirmInvoiceResponse() *CommonResponse {
+	return new(CommonResponse)
+}

+ 13 - 0
model/http_model/ConfirmSupplierInvoiceRequest.go

@@ -0,0 +1,13 @@
+package http_model
+
+type ConfirmSupplierInvoiceRequest struct {
+	InvoiceId string `json:"withdraw_id"`
+}
+
+func NewConfirmSupplierInvoiceRequest() *ConfirmSupplierInvoiceRequest {
+	return new(ConfirmSupplierInvoiceRequest)
+}
+
+func NewConfirmSupplierInvoiceResponse() *CommonResponse {
+	return new(CommonResponse)
+}

+ 19 - 0
model/http_model/GetInvoiceValueRequest.go

@@ -0,0 +1,19 @@
+package http_model
+
+type GetInvoiceValueRequest struct {
+	Status int `json:"status"`
+}
+
+type InvoiceValue struct {
+	InvoiceValue float64 `json:"invoice_value"`
+}
+
+func NewGetInvoiceValueRequest() *GetInvoiceValueRequest {
+	return new(GetInvoiceValueRequest)
+}
+
+func NewGetInvoiceValueResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(InvoiceValue)
+	return resp
+}

+ 33 - 0
model/http_model/GetRechargeListRequest.go

@@ -0,0 +1,33 @@
+package http_model
+
+import "time"
+
+type GetRechargeListRequest struct {
+	PageSize int `json:"page_size"`
+	PageNum  int `json:"page_num"`
+}
+
+type RechargeListResponse struct {
+	ID                 string    `json:"id"`
+	Operator           string    `json:"operator"`
+	RechargeAmount     float64   `json:"recharge_amount"`
+	RechargeMethod     int64     `json:"recharge_method"`
+	TransferVoucherUrl string    `json:"transfer_voucher_url"`
+	Phone              string    `json:"phone"`
+	ConfirmAt          time.Time `json:"confirm_at"`
+}
+
+type RechargeListData struct {
+	RechargeListinfo []*RechargeListResponse `json:"recharge_list_info"`
+	Total            int64                   `json:"total"`
+}
+
+func NewGetRechargeListRequest() *GetRechargeListRequest {
+	return new(GetRechargeListRequest)
+}
+
+func NewGetRechargeListResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(RechargeListData)
+	return resp
+}

+ 19 - 0
model/http_model/GetRechargeValueRequest.go

@@ -0,0 +1,19 @@
+package http_model
+
+type GetRechargeValueRequest struct {
+	Status int `json:"status"`
+}
+
+type RechargeValue struct {
+	RechargeValue float64 `json:"Recharge_value"`
+}
+
+func NewGetRechargeValueRequest() *GetRechargeValueRequest {
+	return new(GetRechargeValueRequest)
+}
+
+func NewGetRechargeValueResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(RechargeValue)
+	return resp
+}

+ 43 - 43
model/http_model/InvoiceRecordsRequest.go

@@ -1,43 +1,43 @@
-package http_model
-
-type InvoiceRecordsRequest struct {
-	PageSize      int32  `json:"page_size"`
-	PageNum       int32  `json:"page_num"`
-	InvoiceStatus int32  `json:"invoice_status"`
-	SubmitAt      string `json:"submit_at"`
-	BusinessName  string `json:"business_name"`
-	Username      string `json:"username"`
-	UserId        int64  `json:"user_id"`
-	BillingAt     string `json:"billing_at"`
-}
-
-type InvoiceRecordsPreviews struct {
-	BillingId      string  `json:"billing_id"`
-	UserId         string  `json:"user_id"`
-	Username       string  `json:"username"`
-	BusinessName   string  `json:"business_name"`
-	Amount         float64 `json:"amount"`
-	InvoiceType    string  `json:"invoice_type"`
-	InvoiceInfo    string  `json:"invoice_info"`
-	InvoiceAddress string  `json:"invoice_address"`
-	AddressInfo    string  `json:"address_info"`
-	ShipmentNumber string  `json:"shipment_number"` // 物流单号
-	Phone          string  `json:"phone"`
-	SubmitAt       string  `json:"submit_at"`
-	BillingAt      string  `json:"billing_at"`
-}
-
-type InvoiceRecordsData struct {
-	InvoiceRecordsPreviews []*InvoiceRecordsPreviews `json:"invoice_records_previews"`
-	Total                  string                    `json:"total"`
-}
-
-func NewInvoiceRecordsRequest() *InvoiceRecordsRequest {
-	return new(InvoiceRecordsRequest)
-}
-
-func NewInvoiceRecordsResponse() *CommonResponse {
-	resp := new(CommonResponse)
-	resp.Data = new(InvoiceRecordsData)
-	return resp
-}
+package http_model
+
+type InvoiceRecordsRequest struct {
+	PageSize      int32  `json:"page_size"`
+	PageNum       int32  `json:"page_num"`
+	InvoiceStatus int32  `json:"invoice_status"`
+	SubmitAt      string `json:"submit_at"`
+	BusinessName  string `json:"business_name"`
+	Username      string `json:"username"`
+	UserId        int64  `json:"user_id"`
+	BillingAt     string `json:"billing_at"`
+}
+
+type InvoiceRecordsPreviews struct {
+	BillingId      string  `json:"billing_id"`
+	UserId         string  `json:"user_id"`
+	Username       string  `json:"username"`
+	BusinessName   string  `json:"business_name"`
+	Amount         float64 `json:"amount"`
+	InvoiceType    int64   `json:"invoice_type"`
+	InvoiceInfo    string  `json:"invoice_info"`
+	InvoiceAddress string  `json:"invoice_address"`
+	AddressInfo    string  `json:"address_info"`
+	ShipmentNumber string  `json:"shipment_number"` // 物流单号
+	Phone          string  `json:"phone"`
+	SubmitAt       string  `json:"submit_at"`
+	BillingAt      string  `json:"billing_at"`
+}
+
+type InvoiceRecordsData struct {
+	InvoiceRecordsPreviews []*InvoiceRecordsPreviews `json:"invoice_records_previews"`
+	Total                  string                    `json:"total"`
+}
+
+func NewInvoiceRecordsRequest() *InvoiceRecordsRequest {
+	return new(InvoiceRecordsRequest)
+}
+
+func NewInvoiceRecordsResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(InvoiceRecordsData)
+	return resp
+}

+ 31 - 0
model/http_model/LocalPrelinkList.go

@@ -0,0 +1,31 @@
+package http_model
+
+import "time"
+
+type LocalPreLinkListRequest struct {
+	PageSize     int    `json:"page_size"`
+	PageNum      int    `json:"page_num"`
+	ProjectId    string `json:"project_id"`  // 项目ID
+	LinkStatus   string `json:"link_status"` // 链接状态,11待传链接
+	EnterpriseId string `json:"enterprise_id"`
+}
+
+type GetLocalPreLinkListData struct {
+	TasklinkList []*LocalTasklinkinfo `json:"task_list"`
+	Total        string               `json:"total"`
+}
+
+type LocalTasklinkinfo struct {
+	Task *LocaLTaskInfo `json:"task_info"`
+	DDl  time.Time      `json:"ddl"` // 提交时间
+}
+
+func NewLocalPreLinkListRequest() *LocalPreLinkListRequest {
+	return new(LocalPreLinkListRequest)
+}
+
+func NewLocalPreLinkListResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetLocalPreLinkListData)
+	return resp
+}

+ 23 - 0
model/http_model/PassLocalTaskCoopRequest.go

@@ -0,0 +1,23 @@
+package http_model
+
+type PasslocalTaskCoopRequest struct {
+	ProjectId   string   `json:"project_id"`
+	TaskIds     []string `json:"task_ids"`
+	SProjectId  *int     `json:"s_project_id"`
+	OperatorId  string   `json:"operator_id"`
+	OperateType int      `json:"operate_type"`
+	IsSpecial   int      `json:"is_special"`
+}
+
+type PasslocalTaskCoopData struct {
+}
+
+func NewPasslocalTaskCoopRequest() *PasslocalTaskCoopRequest {
+	return new(PasslocalTaskCoopRequest)
+}
+
+func NewPasslocalTaskCoopResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(PasslocalTaskCoopData)
+	return resp
+}

+ 23 - 0
model/http_model/PassproTaskCoopRequest.go

@@ -0,0 +1,23 @@
+package http_model
+
+type PassproTaskCoopRequest struct {
+	ProjectId   string   `json:"project_id"`
+	TaskIds     []string `json:"task_ids"`
+	SProjectId  *int     `json:"s_project_id"`
+	OperatorId  string   `json:"operator_id"`
+	OperateType int      `json:"operate_type"`
+	IsSpecial   int      `json:"is_special"`
+}
+
+type PassproTaskCoopData struct {
+}
+
+func NewPassproTaskCoopRequest() *PassproTaskCoopRequest {
+	return new(PassproTaskCoopRequest)
+}
+
+func NewPassproTaskCoopResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(PassproTaskCoopData)
+	return resp
+}

+ 31 - 0
model/http_model/PreLinkList.go

@@ -0,0 +1,31 @@
+package http_model
+
+import "time"
+
+type PreLinkListRequest struct {
+	PageSize     int    `json:"page_size"`
+	PageNum      int    `json:"page_num"`
+	ProjectId    string `json:"project_id"`  // 项目ID
+	LinkStatus   string `json:"link_status"` // 链接状态,11待传链接
+	EnterpriseId string `json:"enterprise_id"`
+}
+
+type GetprelinkListData struct {
+	TasklinkList []*Tasklinkinfo `json:"task_list"`
+	Total        string          `json:"total"`
+}
+
+type Tasklinkinfo struct {
+	Task *TaskInfo `json:"task_info"`
+	DDl  time.Time `json:"ddl"` // 提交时间
+}
+
+func NewPreLinkListRequest() *PreLinkListRequest {
+	return new(PreLinkListRequest)
+}
+
+func NewPreLinkListResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(GetprelinkListData)
+	return resp
+}

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.