Ver código fonte

定时任务

yuliang1112 2 anos atrás
pai
commit
c9d6c833e5
100 arquivos alterados com 4941 adições e 100 exclusões
  1. 1 1
      consts/error_code.go
  2. 43 20
      consts/project.go
  3. 382 0
      db/default.go
  4. 101 0
      db/finance.go
  5. 1478 7
      db/operate.go
  6. 4 4
      db/talent.go
  7. 1 1
      db/user.go
  8. 1 0
      go.mod
  9. 2 0
      go.sum
  10. 57 0
      handler/getWithdrawalRecord.go
  11. 56 0
      handler/operate/auto_review.go
  12. 56 0
      handler/operate/auto_review_unlimited.go
  13. 56 0
      handler/operate/auto_sign_in_offline.go
  14. 56 0
      handler/operate/auto_sign_in_virtual.go
  15. 67 0
      handler/operate/breach_handled.go
  16. 65 0
      handler/operate/breach_pending.go
  17. 56 0
      handler/operate/case_close.go
  18. 56 0
      handler/operate/case_close_default.go
  19. 55 0
      handler/operate/contract_breach.go
  20. 55 0
      handler/operate/count_num_of_defaults.go
  21. 56 0
      handler/operate/dataOtherNotUpload.go
  22. 56 0
      handler/operate/dataOtherTimeOut.go
  23. 56 0
      handler/operate/dataReplaceNotUpload.go
  24. 56 0
      handler/operate/dataReplaceTimeOut.go
  25. 56 0
      handler/operate/draft_default_in_mv.go
  26. 57 0
      handler/operate/draft_default_in_pic.go
  27. 55 0
      handler/operate/get_sketch_info_by_taskid.go
  28. 56 0
      handler/operate/invalid.go
  29. 56 0
      handler/operate/linkOtherNotUpload.go
  30. 56 0
      handler/operate/linkOtherTimeOut.go
  31. 56 0
      handler/operate/linkReplaceNotUpload.go
  32. 56 0
      handler/operate/linkReplaceTimeOut.go
  33. 56 0
      handler/operate/link_breach.go
  34. 56 0
      handler/operate/post_review.go
  35. 56 0
      handler/operate/scriptOtherNotUpload.go
  36. 56 0
      handler/operate/scriptOtherTimeOut.go
  37. 56 0
      handler/operate/scriptReplaceNotUpload.go
  38. 56 0
      handler/operate/scriptReplaceTimeOut.go
  39. 56 0
      handler/operate/script_deafult.go
  40. 56 0
      handler/operate/sketchOtherNotUpload.go
  41. 56 0
      handler/operate/sketchOtherTimeOut.go
  42. 56 0
      handler/operate/sketchReplaceNotUpload.go
  43. 56 0
      handler/operate/sketchReplaceTimeOut.go
  44. 67 0
      handler/withdrawalRecords.go
  45. 6 0
      main.go
  46. 8 0
      model/common_model/WithdrawRecordsCondition.go
  47. 6 0
      model/common_model/breach_handled_conditions.go
  48. 27 0
      model/gorm_model/auto_default_handle.go
  49. 23 0
      model/gorm_model/auto_task.go
  50. 22 0
      model/gorm_model/contract_info.go
  51. 31 0
      model/gorm_model/dataInfo.go
  52. 1 1
      model/gorm_model/info_pricing_strategy.go
  53. 30 0
      model/gorm_model/linkInfo.go
  54. 24 17
      model/gorm_model/project.go
  55. 34 23
      model/gorm_model/project_task.go
  56. 29 0
      model/gorm_model/script_info.go
  57. 30 0
      model/gorm_model/sketch_info.go
  58. 20 0
      model/gorm_model/sketch_photo.go
  59. 23 0
      model/gorm_model/task_logistic.go
  60. 22 0
      model/gorm_model/withdraw_info.go
  61. 13 0
      model/http_model/DataOtherNotUploadRequest.go
  62. 13 0
      model/http_model/DataOtherTimeOutRequest.go
  63. 13 0
      model/http_model/DataReplaceNotUploadRequest.go
  64. 13 0
      model/http_model/DataReplaceTimeOutRequest.go
  65. 14 0
      model/http_model/DraftDefaultInMv.go
  66. 14 0
      model/http_model/DraftDefaultInPic.go
  67. 24 0
      model/http_model/GetWithdrawalRecordRequest.go
  68. 14 0
      model/http_model/LinkBreach.go
  69. 13 0
      model/http_model/LinkOtherNotUploadRequest.go
  70. 13 0
      model/http_model/LinkOtherTimeOutRequest.go
  71. 13 0
      model/http_model/LinkReplaceNotUploadRequest.go
  72. 13 0
      model/http_model/LinkReplaceTimeOutRequest.go
  73. 13 0
      model/http_model/ScriptDefault.go
  74. 13 0
      model/http_model/ScriptOtherTimeOutRequest.go
  75. 13 0
      model/http_model/SketchOtherNotUploadRequest.go
  76. 13 0
      model/http_model/SketchOtherTimeOutRequest.go
  77. 13 0
      model/http_model/SketchReplaceNotUploadRequest.go
  78. 13 0
      model/http_model/SketchReplaceTimeOutRequest.go
  79. 37 0
      model/http_model/WithDrawalRecordsRequest.go
  80. 13 13
      model/http_model/account_income.go
  81. 3 3
      model/http_model/account_info.go
  82. 7 7
      model/http_model/add_pricing.go
  83. 15 0
      model/http_model/auto_review.go
  84. 14 0
      model/http_model/auto_review_unlimited.go
  85. 14 0
      model/http_model/auto_sign_in_offline.go
  86. 14 0
      model/http_model/auto_sign_in_virtual.go
  87. 39 0
      model/http_model/breach_handled.go
  88. 41 0
      model/http_model/breach_pending.go
  89. 14 0
      model/http_model/caseClose.go
  90. 14 0
      model/http_model/caseCloseDefault.go
  91. 15 0
      model/http_model/contract_breach.go
  92. 20 0
      model/http_model/count_num_of_defaults.go
  93. 21 0
      model/http_model/get_sketch_info.go
  94. 14 0
      model/http_model/invalid.go
  95. 1 1
      model/http_model/platform_acc_info.go
  96. 14 0
      model/http_model/postReview.go
  97. 14 0
      model/http_model/script_other_not_upload.go
  98. 14 0
      model/http_model/script_replace_not_upload.go
  99. 14 0
      model/http_model/script_replace_time_out.go
  100. 2 2
      pack/creator_list_conditions.go

+ 1 - 1
consts/error_code.go

@@ -16,7 +16,7 @@ func init() {
 	errorCodeToastMap[ErrorSuccess] = "请求成功"
 	errorCodeToastMap[ErrorNotLogin] = "请登录后操作"
 	errorCodeToastMap[ErrorParamCheck] = "参数有误"
-	errorCodeToastMap[ErrorInternal] = "网络错误"
+	errorCodeToastMap[ErrorInternal] = "请求错误"
 }
 
 func GetErrorToast(errorCode int32) string {

+ 43 - 20
consts/project.go

@@ -136,26 +136,21 @@ func GetFeeForm(fee_form int64) string {
 
 var TaskStage = map[int]string{
 	1:  "已报名",
-	2:  "待选号",
-	3:  "申请成功",
-	4:  "申请失败",
-	5:  "待发货",
-	6:  "已发货",
-	7:  "已签收",
-	8:  "待传脚本",
-	9:  "脚本待审",
-	10: "脚本通过",
-	11: "待传初稿",
-	12: "初稿待审",
-	13: "初稿通过",
-	14: "待传链接",
-	15: "链接待审",
-	16: "链接通过",
-	17: "待传数据",
-	18: "数据待审",
-	19: "已结案",
-	20: "解约待处理",
-	21: "解约",
+	2:  "申请成功",
+	3:  "申请失败",
+	4:  "待发货",
+	5:  "已发货",
+	6:  "已签收",
+	7:  "待传脚本",
+	8:  "脚本待审",
+	9:  "待传初稿",
+	10: "初稿待审",
+	11: "待传链接",
+	12: "链接待审",
+	13: "待传数据",
+	14: "数据待审",
+	15: "已结案",
+	16: "解约",
 }
 
 func GetTaskStage(task_stage int) string {
@@ -165,3 +160,31 @@ func GetTaskStage(task_stage int) string {
 	}
 	return "未知"
 }
+
+var BreakType = map[int]string{
+	1: "未传脚本",
+	2: "未传初稿",
+	3: "未传链接",
+	4: "未传数据",
+}
+
+func GetBreakType(breakType int) string {
+	toast, contain := BreakType[breakType]
+	if contain {
+		return toast
+	}
+	return "未知"
+}
+
+var HandleResult = map[int]string{
+	4: "驳回",
+	5: "解约",
+}
+
+func GetHandleResult(handleResult int) string {
+	toast, contain := HandleResult[handleResult]
+	if contain {
+		return toast
+	}
+	return "未知"
+}

+ 382 - 0
db/default.go

@@ -0,0 +1,382 @@
+package db
+
+import (
+	"context"
+	"fmt"
+	"github.com/caixw/lib.go/conv"
+	"github.com/sirupsen/logrus"
+	"reflect"
+	"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"
+)
+
+func CountDefaultNum(ctx context.Context) (error, *http_model.CountNumOfDefaultsResponse) {
+	db := GetReadDB(ctx)
+	var contractInfos []gorm_model.YoungeeContractInfo
+	err := db.Debug().Model(gorm_model.YoungeeContractInfo{}).Where("default_status = 3").Find(&contractInfos).Error
+	if err != nil {
+		return err, nil
+	}
+	DraftDefaultNum, ScriptDefaultNum, LinkDefaultNum, DataDefaultNum := 0, 0, 0, 0
+	for _, contractInfo := range contractInfos {
+		if contractInfo.BreakType == 1 {
+			ScriptDefaultNum++
+		} else if contractInfo.BreakType == 2 {
+			DraftDefaultNum++
+		} else if contractInfo.BreakType == 3 {
+			LinkDefaultNum++
+		} else {
+			DataDefaultNum++
+		}
+	}
+	data := &http_model.CountNumOfDefaultsResponse{}
+	data.ScriptDefaultNum = int32(ScriptDefaultNum)
+	data.DraftDefaultNum = int32(DraftDefaultNum)
+	data.LinkDefaultNum = int32(LinkDefaultNum)
+	data.DataDefaultNum = int32(DataDefaultNum)
+	return nil, data
+}
+
+func BreachPending(ctx context.Context, pageSize, pageNum int32, req *http_model.BreachPendingRequest) (*http_model.BreachPendingData, error) {
+	db := GetReadDB(ctx)
+	var contractInfos []*gorm_model.YoungeeContractInfo
+	db = db.Model(gorm_model.YoungeeContractInfo{}).Where("default_status = 3")
+	if req.DefaultType == 1 || req.DefaultType == 2 {
+		db = db.Where("break_type = 1 OR break_type = 2")
+	} else {
+		db = db.Where("break_type = ?", req.DefaultType)
+	}
+	if req.TaskId != 0 {
+		db = db.Where("task_id = ?", req.TaskId)
+	}
+	var findProjectIds []int64
+	if req.ProjectName != "" {
+		db1 := GetReadDB(ctx)
+		db1.Model(gorm_model.ProjectInfo{}).Select("project_id").Where("project_name = ?", req.ProjectName).Find(&findProjectIds)
+		var findTaskIds []int
+		db2 := GetReadDB(ctx)
+		db2.Model(gorm_model.YoungeeTaskInfo{}).Select("task_id").Where("project_id IN ?", findProjectIds).Find(&findTaskIds)
+		db = db.Where("task_id IN ?", findTaskIds)
+	}
+	// 查询总数
+	var total int64
+	if err := db.Count(&total).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[BreachPending] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	// 查询该页数据
+	limit := pageSize
+	offset := pageSize * pageNum // assert pageNum start with 0
+	err := db.Order("terminate_at").Limit(int(limit)).Offset(int(offset)).Find(&contractInfos).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[BreachPending] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	var taskIds []int
+	for _, contractInfo := range contractInfos {
+		taskIds = append(taskIds, contractInfo.TaskID)
+	}
+	taskIds = util.RemoveIntRepByMap(taskIds)
+	taskIdToProjectMap := make(map[int]int)
+	taskIdToTalentIdMap := make(map[int]string)
+	taskIdToTaskInfoMap := make(map[int]gorm_model.YoungeeTaskInfo)
+	var projectIds []int
+	for _, taskId := range taskIds {
+		db1 := GetReadDB(ctx)
+		var taskInfo gorm_model.YoungeeTaskInfo
+		db1.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Find(&taskInfo)
+		taskIdToProjectMap[taskId] = taskInfo.ProjectId
+		taskIdToTalentIdMap[taskId] = taskInfo.TalentId
+		taskIdToTaskInfoMap[taskId] = taskInfo
+		projectIds = append(projectIds, taskInfo.ProjectId)
+	}
+	//fmt.Println("TaskID:", taskIds)
+	//fmt.Println("projectIds:", projectIds)
+	//fmt.Println("taskIdToProjectMap:", taskIdToProjectMap)
+	//fmt.Println("taskIdToTalentIdMap:", taskIdToTalentIdMap)
+	projectIds = util.RemoveIntRepByMap(projectIds)
+	var enterpriseIds []int64
+	projectIdToProjectInfoMap := make(map[int64]gorm_model.ProjectInfo)
+	for _, projectId := range projectIds {
+		db1 := GetReadDB(ctx)
+		projectInfo := gorm_model.ProjectInfo{}
+		db1.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Find(&projectInfo)
+		projectIdToProjectInfoMap[projectInfo.ProjectID] = projectInfo
+		enterpriseIds = append(enterpriseIds, projectInfo.EnterpriseID)
+	}
+	enterpriseIds = util.RemoveRepByMap(enterpriseIds)
+	//fmt.Println("enterpriseIds:", enterpriseIds)
+	enterpriseIdToUserId := make(map[int64]int64)
+	var userIds []int64
+	for _, enterpriseId := range enterpriseIds {
+		db1 := GetReadDB(ctx)
+		var userId int64
+		db1.Model(gorm_model.Enterprise{}).Select("user_id").Where("enterprise_id = ?", enterpriseId).Find(&userId)
+		enterpriseIdToUserId[enterpriseId] = userId
+		userIds = append(userIds, userId)
+	}
+	//fmt.Println("projectIdToProjectInfoMap:", projectIdToProjectInfoMap)
+	//fmt.Println("enterpriseIdToUserId:", enterpriseIdToUserId)
+	//fmt.Println("userIds:", userIds)
+	userIdToUserPhone := make(map[int64]string)
+	for _, userId := range userIds {
+		db1 := GetReadDB(ctx)
+		var userPhone string
+		db1.Model(gorm_model.YounggeeUser{}).Select("phone").Where("id = ?", userId).Find(&userPhone)
+		userIdToUserPhone[userId] = userPhone
+	}
+	//fmt.Println("userIdToUserPhone:", userIdToUserPhone)
+	talentIdToTalentPhoneMap := make(map[string]string)
+	for _, v := range taskIdToTalentIdMap {
+		if len(talentIdToTalentPhoneMap) == 0 {
+			db1 := GetReadDB(ctx)
+			var talentPhoneNumber string
+			db1.Model(gorm_model.YoungeeTalentInfo{}).Select("talent_phone_number").Where("id = ?", v).Find(&talentPhoneNumber)
+			talentIdToTalentPhoneMap[v] = talentPhoneNumber
+		}
+		if _, ok := talentIdToTalentPhoneMap[v]; !ok {
+			db1 := GetReadDB(ctx)
+			var talentPhoneNumber string
+			db1.Model(gorm_model.YoungeeTalentInfo{}).Select("talent_phone_number").Where("id = ?", v).Find(&talentPhoneNumber)
+			talentIdToTalentPhoneMap[v] = talentPhoneNumber
+		}
+	}
+	taskIdToDefaultInfo := make(map[int]string)
+	if req.DefaultType == 4 {
+		for _, taskId := range taskIds {
+			db1 := GetReadDB(ctx)
+			var link string
+			db1.Debug().Model(gorm_model.YounggeeLinkInfo{}).Select("link_url").Where("task_id = ? AND is_ok = 1", taskId).Find(&link)
+			taskIdToDefaultInfo[taskId] = link
+		}
+	}
+	//fmt.Println("talentIdToTalentPhoneMap:", talentIdToTalentPhoneMap)
+	var BreachPendingPreviews []*http_model.BreachPendingPreview
+	for _, contractInfo := range contractInfos {
+		BreachPendingPreview := new(http_model.BreachPendingPreview)
+		BreachPendingPreview.ContractId = int32(contractInfo.ContractID)
+		BreachPendingPreview.ProjectId = int32(taskIdToProjectMap[contractInfo.TaskID])
+		BreachPendingPreview.UserId = int32(enterpriseIdToUserId[projectIdToProjectInfoMap[int64(taskIdToProjectMap[contractInfo.TaskID])].EnterpriseID])
+		BreachPendingPreview.ProjectName = projectIdToProjectInfoMap[int64(taskIdToProjectMap[contractInfo.TaskID])].ProjectName
+		BreachPendingPreview.UserPhone = userIdToUserPhone[enterpriseIdToUserId[projectIdToProjectInfoMap[int64(taskIdToProjectMap[contractInfo.TaskID])].EnterpriseID]]
+		BreachPendingPreview.TaskId = int32(contractInfo.TaskID)
+		BreachPendingPreview.TalentId = taskIdToTalentIdMap[contractInfo.TaskID]
+		BreachPendingPreview.TalentPhone = talentIdToTalentPhoneMap[taskIdToTalentIdMap[contractInfo.TaskID]]
+		BreachPendingPreview.LinkInfo = taskIdToDefaultInfo[contractInfo.TaskID]
+		BreachPendingPreview.Price = taskIdToTaskInfoMap[contractInfo.TaskID].AllPayment
+		BreachPendingPreview.SettlementAmount = taskIdToTaskInfoMap[contractInfo.TaskID].SettleAmount
+		BreachPendingPreview.DefaultAt = conv.MustString(contractInfo.BreakAt, "")[0:19]
+		BreachPendingPreview.TerminateAt = conv.MustString(contractInfo.TerminateAt, "")[0:19]
+		BreachPendingPreviews = append(BreachPendingPreviews, BreachPendingPreview)
+	}
+	var BreachPendingData http_model.BreachPendingData
+	BreachPendingData.BreachPendingPreview = BreachPendingPreviews
+	BreachPendingData.Total = total
+	return &BreachPendingData, nil
+}
+
+func ContractBreach(ctx context.Context, req *http_model.ContractBreachRequest) error {
+	db := GetReadDB(ctx)
+	var breakType int
+	db.Model(gorm_model.YoungeeContractInfo{}).Select("break_type").Where("contract_id IN ?", req.ContractIds).Find(&breakType)
+	err := db.Debug().Where("contract_id IN ?", req.ContractIds).Updates(&gorm_model.YoungeeContractInfo{DefaultStatus: int(req.DefaultStatus)}).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[BreachPending] error query mysql total, err:%+v", err)
+		return err
+	}
+	var taskId int
+	db.Model(gorm_model.YoungeeContractInfo{}).Select("task_id").Where("contract_id IN ?", req.ContractIds).Find(&taskId)
+	if req.DefaultStatus == 5 {
+		db1 := GetReadDB(ctx)
+		var projectId, autoDefaultId, feeForm int
+		db1.Model(gorm_model.YoungeeTaskInfo{}).Select("project_id").Where("task_id = ?", taskId).Find(&projectId)
+		db2 := GetReadDB(ctx)
+		db2.Model(gorm_model.ProjectInfo{}).Select("auto_default_id").Where("project_id = ?", projectId).Find(&autoDefaultId)
+		var rateInfo gorm_model.InfoAutoDefaultHandle
+		db3 := GetReadDB(ctx)
+		db3.Model(gorm_model.InfoAutoDefaultHandle{}).Where("auto_default_id = ?", autoDefaultId).Find(&rateInfo)
+		db4 := GetReadDB(ctx)
+		db4.Model(gorm_model.YoungeeTaskInfo{}).Select("fee_form").Where("task_id = ?", taskId).Find(&feeForm)
+		if feeForm == 1 {
+			if breakType == 1 {
+				db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{
+					ErrBreakRate: rateInfo.ScriptReplaceNotUpload, CurDefaultType: 2})
+			} else if breakType == 2 {
+				db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{
+					ErrBreakRate: rateInfo.SketchReplaceNotUpload, CurDefaultType: 4})
+			} else if breakType == 3 {
+				db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{
+					ErrBreakRate: rateInfo.LinkReplaceNotUpload, CurDefaultType: 6})
+			} else if breakType == 4 {
+				db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{
+					ErrBreakRate: rateInfo.DataReplaceNotUpload, CurDefaultType: 8})
+			}
+		} else {
+			if breakType == 1 {
+				db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{
+					ErrBreakRate: rateInfo.ScriptOtherNotUpload, CurDefaultType: 2})
+			} else if breakType == 2 {
+				db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{
+					ErrBreakRate: rateInfo.SketchOtherNotUpload, CurDefaultType: 4})
+			} else if breakType == 3 {
+				db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{
+					ErrBreakRate: rateInfo.LinkOtherNotUpload, CurDefaultType: 6})
+			} else if breakType == 4 {
+				db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Updates(gorm_model.YoungeeTaskInfo{
+					ErrBreakRate: rateInfo.DataOtherNotUpload, CurDefaultType: 8})
+			}
+		}
+	}
+	return nil
+}
+
+func GetSketchInfoByTaskId(ctx context.Context, request *http_model.GetSketchInfoByTaskIdRequest) (*http_model.SketchInfoResponse, error) {
+	db := GetReadDB(ctx)
+	var sketchInfo gorm_model.YounggeeSketchInfo
+	db.Debug().Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? AND is_ok = 1", request.TaskId).Find(&sketchInfo)
+	db2 := GetReadDB(ctx)
+	sketchPhotoInfo := gorm_model.YounggeeSketchPhoto{}
+	db2.Debug().Model(gorm_model.YounggeeSketchPhoto{}).Where("sketch_id = ?", sketchInfo.SketchID).Find(&sketchPhotoInfo)
+	data := new(http_model.SketchInfoResponse)
+	data.Type = int32(sketchPhotoInfo.Symbol)
+	data.PhotoUrl = sketchPhotoInfo.PhotoUrl
+	data.Content = sketchInfo.Content
+	return data, nil
+}
+
+func BreachHandled(ctx context.Context, pageSize, pageNum int32, req *http_model.BreachHandledRequest, conditions *common_model.BreachHandledConditions) (*http_model.BreachHandledData, error) {
+	db := GetReadDB(ctx)
+	var contractInfos []*gorm_model.YoungeeContractInfo
+	db = db.Model(gorm_model.YoungeeContractInfo{}).Where("default_status = 4 OR default_status = 5")
+	// 根据Project条件过滤
+	conditionType := reflect.TypeOf(conditions).Elem()
+	conditionValue := reflect.ValueOf(conditions).Elem()
+	for i := 0; i < conditionType.NumField(); i++ {
+		field := conditionType.Field(i)
+		tag := field.Tag.Get("condition")
+		value := conditionValue.FieldByName(field.Name)
+		if !util.IsBlank(value) {
+			db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
+		}
+	}
+	if req.TaskId != 0 {
+		db = db.Where("task_id = ?", req.TaskId)
+	}
+	var findProjectIds []int64
+	if req.ProjectName != "" {
+		db1 := GetReadDB(ctx)
+		db1.Model(gorm_model.ProjectInfo{}).Select("project_id").Where("project_name = ?", req.ProjectName).Find(&findProjectIds)
+		var findTaskIds []int
+		db2 := GetReadDB(ctx)
+		db2.Model(gorm_model.YoungeeTaskInfo{}).Select("task_id").Where("project_id IN ?", findProjectIds).Find(&findTaskIds)
+		db = db.Where("task_id IN ?", findTaskIds)
+	}
+	// 查询总数
+	var total int64
+	if err := db.Count(&total).Error; err != nil {
+		logrus.WithContext(ctx).Errorf("[BreachHandled] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+	// 查询该页数据
+	limit := pageSize
+	offset := pageSize * pageNum // assert pageNum start with 0
+	err := db.Order("terminate_at").Limit(int(limit)).Offset(int(offset)).Find(&contractInfos).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[BreachHandled] error query mysql total, err:%+v", err)
+		return nil, err
+	}
+
+	var taskIds []int
+	for _, contractInfo := range contractInfos {
+		taskIds = append(taskIds, contractInfo.TaskID)
+	}
+	taskIds = util.RemoveIntRepByMap(taskIds)
+	taskIdToProjectMap := make(map[int]int)
+	taskIdToTalentIdMap := make(map[int]string)
+	taskIdToTaskInfoMap := make(map[int]gorm_model.YoungeeTaskInfo)
+	var projectIds []int
+	for _, taskId := range taskIds {
+		db1 := GetReadDB(ctx)
+		var taskInfo gorm_model.YoungeeTaskInfo
+		db1.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).Find(&taskInfo)
+		taskIdToProjectMap[taskId] = taskInfo.ProjectId
+		taskIdToTalentIdMap[taskId] = taskInfo.TalentId
+		taskIdToTaskInfoMap[taskId] = taskInfo
+		projectIds = append(projectIds, taskInfo.ProjectId)
+	}
+	//fmt.Println("TaskID:", taskIds)
+	//fmt.Println("projectIds:", projectIds)
+	//fmt.Println("taskIdToProjectMap:", taskIdToProjectMap)
+	//fmt.Println("taskIdToTalentIdMap:", taskIdToTalentIdMap)
+	projectIds = util.RemoveIntRepByMap(projectIds)
+	var enterpriseIds []int64
+	projectIdToProjectInfoMap := make(map[int64]gorm_model.ProjectInfo)
+	for _, projectId := range projectIds {
+		db1 := GetReadDB(ctx)
+		projectInfo := gorm_model.ProjectInfo{}
+		db1.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Find(&projectInfo)
+		projectIdToProjectInfoMap[projectInfo.ProjectID] = projectInfo
+		enterpriseIds = append(enterpriseIds, projectInfo.EnterpriseID)
+	}
+	enterpriseIds = util.RemoveRepByMap(enterpriseIds)
+	//fmt.Println("enterpriseIds:", enterpriseIds)
+	enterpriseIdToUserId := make(map[int64]int64)
+	var userIds []int64
+	for _, enterpriseId := range enterpriseIds {
+		db1 := GetReadDB(ctx)
+		var userId int64
+		db1.Model(gorm_model.Enterprise{}).Select("user_id").Where("enterprise_id = ?", enterpriseId).Find(&userId)
+		enterpriseIdToUserId[enterpriseId] = userId
+		userIds = append(userIds, userId)
+	}
+	//fmt.Println("projectIdToProjectInfoMap:", projectIdToProjectInfoMap)
+	//fmt.Println("enterpriseIdToUserId:", enterpriseIdToUserId)
+	//fmt.Println("userIds:", userIds)
+	userIdToUserPhone := make(map[int64]string)
+	for _, userId := range userIds {
+		db1 := GetReadDB(ctx)
+		var userPhone string
+		db1.Model(gorm_model.YounggeeUser{}).Select("phone").Where("id = ?", userId).Find(&userPhone)
+		userIdToUserPhone[userId] = userPhone
+	}
+	//fmt.Println("userIdToUserPhone:", userIdToUserPhone)
+	talentIdToTalentPhoneMap := make(map[string]string)
+	for _, v := range taskIdToTalentIdMap {
+		if len(talentIdToTalentPhoneMap) == 0 {
+			db1 := GetReadDB(ctx)
+			var talentPhoneNumber string
+			db1.Model(gorm_model.YoungeeTalentInfo{}).Select("talent_phone_number").Where("id = ?", v).Find(&talentPhoneNumber)
+			talentIdToTalentPhoneMap[v] = talentPhoneNumber
+		}
+		if _, ok := talentIdToTalentPhoneMap[v]; !ok {
+			db1 := GetReadDB(ctx)
+			var talentPhoneNumber string
+			db1.Model(gorm_model.YoungeeTalentInfo{}).Select("talent_phone_number").Where("id = ?", v).Find(&talentPhoneNumber)
+			talentIdToTalentPhoneMap[v] = talentPhoneNumber
+		}
+	}
+	//fmt.Println("talentIdToTalentPhoneMap:", talentIdToTalentPhoneMap)
+	var BreachHandledPreviews []*http_model.BreachHandledPreview
+	for _, contractInfo := range contractInfos {
+		BreachHandledPreview := new(http_model.BreachHandledPreview)
+		BreachHandledPreview.ContractId = int32(contractInfo.ContractID)
+		BreachHandledPreview.ProjectId = int32(taskIdToProjectMap[contractInfo.TaskID])
+		BreachHandledPreview.UserId = int32(enterpriseIdToUserId[projectIdToProjectInfoMap[int64(taskIdToProjectMap[contractInfo.TaskID])].EnterpriseID])
+		BreachHandledPreview.ProjectName = projectIdToProjectInfoMap[int64(taskIdToProjectMap[contractInfo.TaskID])].ProjectName
+		BreachHandledPreview.UserPhone = userIdToUserPhone[enterpriseIdToUserId[projectIdToProjectInfoMap[int64(taskIdToProjectMap[contractInfo.TaskID])].EnterpriseID]]
+		BreachHandledPreview.TaskId = int32(contractInfo.TaskID)
+		BreachHandledPreview.TalentId = taskIdToTalentIdMap[contractInfo.TaskID]
+		BreachHandledPreview.TalentPhone = talentIdToTalentPhoneMap[taskIdToTalentIdMap[contractInfo.TaskID]]
+		BreachHandledPreview.TerminateReason = consts.GetBreakType(contractInfo.BreakType)
+		BreachHandledPreview.HandleResult = consts.GetHandleResult(contractInfo.DefaultStatus)
+		BreachHandledPreview.HandleAt = conv.MustString(contractInfo.HandleAt, "")[0:19]
+		BreachHandledPreviews = append(BreachHandledPreviews, BreachHandledPreview)
+	}
+	var BreachHandledData http_model.BreachHandledData
+	BreachHandledData.BreachHandledPreview = BreachHandledPreviews
+	BreachHandledData.Total = total
+	return &BreachHandledData, nil
+}

+ 101 - 0
db/finance.go

@@ -0,0 +1,101 @@
+package db
+
+import (
+	"context"
+	"fmt"
+	"github.com/caixw/lib.go/conv"
+	"github.com/sirupsen/logrus"
+	"reflect"
+	"youngee_m_api/model/common_model"
+	"youngee_m_api/model/gorm_model"
+	"youngee_m_api/model/http_model"
+	"youngee_m_api/util"
+)
+
+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("talent_wx_nickname = ? ", 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.TalentId = withdrawRecord.TalentID
+		withdrawRecordsData.TalentName = talentIdToTalentInfoMap[withdrawRecord.TalentID].TalentWxNickname
+		withdrawRecordsData.WithdrawAmount = float32(withdrawRecord.WithdrawAmount)
+		withdrawRecordsData.AmountPayable = float32(withdrawRecord.AmountPayable)
+		withdrawRecordsData.ReceiveInfo = withdrawRecord.ReceiveInfo
+		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
+}

+ 1478 - 7
db/operate.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"github.com/caixw/lib.go/conv"
 	"github.com/sirupsen/logrus"
+	"log"
 	"reflect"
 	"time"
 	"youngee_m_api/model/common_model"
@@ -17,7 +18,7 @@ func CreatePricingStrategy(ctx context.Context, req *http_model.AddPricingReques
 	db := GetReadDB(ctx)
 	project_type, fee_form, platform, fans_low, fans_up, service_charge, base_offer := req.ProjectType, req.ManuscriptForm, req.Platform, req.FansLow, req.FansHigh, req.PlatformFee, req.BaseOffer
 	var IsExclusive gorm_model.InfoPricingStrategy
-	err := db.Debug().Where(" fee_form = ? && platform = ? && fans_low <= ? && fans_up >= ?", fee_form, platform, fans_low, fans_up).First(&IsExclusive).Error
+	err := db.Where(" fee_form = ? && platform = ? && fans_low <= ? && fans_up >= ?", fee_form, platform, fans_low, fans_up).First(&IsExclusive).Error
 	if err == nil {
 		return "该策略与已经运行的策略互斥,请修改相关字段后重新创建", "", nil
 	}
@@ -33,7 +34,7 @@ func CreatePricingStrategy(ctx context.Context, req *http_model.AddPricingReques
 		dayString = conv.MustString(getDay, "")
 	}
 	monthAndDay := conv.MustString(getMonth, "") + dayString
-	err = db.Debug().Where(fmt.Sprintf(" strategyId like '%s%%'", monthAndDay)).Last(&strategyInfo).Error
+	err = db.Where(fmt.Sprintf(" strategyId like '%s%%'", monthAndDay)).Last(&strategyInfo).Error
 
 	num := 1
 	if strategyInfo.StrategyId != "" {
@@ -54,7 +55,7 @@ func CreatePricingStrategy(ctx context.Context, req *http_model.AddPricingReques
 	newStrategy.FansLow = fans_low
 	newStrategy.FansUp = fans_up
 	newStrategy.ProjectType = conv.MustInt64(project_type, 0)
-	newStrategy.BaseOffer = conv.MustInt64(base_offer, 0)
+	newStrategy.BaseOffer = conv.MustFloat32(base_offer, 0)
 	newStrategy.Platform = conv.MustInt64(platform, 0)
 	newStrategy.FeeForm = conv.MustInt64(fee_form, 0)
 	newStrategy.ServiceCharge = conv.MustInt64(service_charge, 0)
@@ -69,7 +70,7 @@ func CreatePricingStrategy(ctx context.Context, req *http_model.AddPricingReques
 
 func SearchPricing(ctx context.Context, pageSize, pageNum int32, conditions *common_model.PricingConditions) ([]*gorm_model.InfoPricingStrategy, int64, error) {
 	db := GetReadDB(ctx)
-	db = db.Debug().Model(gorm_model.InfoPricingStrategy{})
+	db = db.Model(gorm_model.InfoPricingStrategy{})
 	// 根据 查询条件过滤
 	conditionType := reflect.TypeOf(conditions).Elem()
 	conditionValue := reflect.ValueOf(conditions).Elem()
@@ -79,7 +80,7 @@ func SearchPricing(ctx context.Context, pageSize, pageNum int32, conditions *com
 		value := conditionValue.FieldByName(field.Name)
 		if !util.IsBlank(value) && tag != "update_at" {
 			db = db.Where(fmt.Sprintf("%s = ?", tag), value.Interface())
-		} else if tag == "created_at" && value.Interface() != nil {
+		} else if tag == "update_at" && value.Interface() != nil {
 			db = db.Where(fmt.Sprintf("update_at like '%s%%'", value.Interface()))
 		}
 	}
@@ -104,10 +105,10 @@ func SearchPricing(ctx context.Context, pageSize, pageNum int32, conditions *com
 func ModifyPricing(ctx context.Context, req *http_model.ModifyPricingRequest) (string, error) {
 	db := GetReadDB(ctx)
 	strategyId := req.StrategyId
-	db = db.Debug().Model(gorm_model.InfoPricingStrategy{}).Where("strategyId = ?", strategyId)
+	db = db.Model(gorm_model.InfoPricingStrategy{}).Where("strategyId = ?", strategyId)
 	project_type, fee_form, platform, fans_low, fans_up, service_charge, base_offer := req.ProjectType, req.FeeForm, req.Platform, req.FansLow, req.FansHigh, req.PlatformFee, req.BaseOffer
 	var IsExclusive gorm_model.InfoPricingStrategy
-	err := db.Debug().Where(" fee_form = ? && platform = ? && fans_low <= ? && fans_up >= ?", fee_form, platform, fans_low, fans_up).First(&IsExclusive).Error
+	err := db.Where(" fee_form = ? && platform = ? && fans_low <= ? && fans_up >= ?", fee_form, platform, fans_low, fans_up).First(&IsExclusive).Error
 	if err == nil {
 		return "要修改策略与已经运行的策略互斥,请修改相关字段", nil
 	}
@@ -120,3 +121,1473 @@ func ModifyPricing(ctx context.Context, req *http_model.ModifyPricingRequest) (s
 	}
 	return "修改成功", nil
 }
+
+func UpdateAutoTaskTime(ctx context.Context, time int32, num int32) error {
+	db := GetReadDB(ctx)
+	var autoTaskInfo gorm_model.InfoAutoTask
+	err := db.Model(gorm_model.InfoAutoTask{}).Last(&autoTaskInfo).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[UpdateAutoTaskTime] error get Last mysql, err:%+v", err)
+		return err
+	}
+	switch num {
+	case 1:
+		autoTaskInfo.SignInOffline = time
+	case 2:
+		autoTaskInfo.SignInVirtual = time
+	case 3:
+		autoTaskInfo.ReviewInMv = time
+	case 4:
+		autoTaskInfo.ReviewUnlimited = time
+	case 5:
+		autoTaskInfo.Postreview = time
+	case 6:
+		autoTaskInfo.CaseClose = time
+	case 7:
+		autoTaskInfo.Invalid = time
+	case 8:
+		autoTaskInfo.DraftDefaultInPic = time
+	case 9:
+		autoTaskInfo.DraftDefaultInMv = time
+	case 10:
+		autoTaskInfo.ScriptDefault = time
+	case 11:
+		autoTaskInfo.LinkBreach = time
+	case 12:
+		autoTaskInfo.CaseCloseDefault = time
+	}
+	autoTaskInfo.AutoTaskID += 1
+	err = db.Model(gorm_model.InfoAutoTask{}).Create(&autoTaskInfo).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[UpdateAutoTaskTime] error Create mysql, err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+func UpdateAutoDefaultRate(ctx context.Context, rate int, num int32) error {
+	db := GetReadDB(ctx)
+	autoDefaultRateInfo := gorm_model.InfoAutoDefaultHandle{}
+	err := db.Model(&gorm_model.InfoAutoDefaultHandle{}).Last(&autoDefaultRateInfo).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[UpdateAutoDefaultRate] error get Last mysql, err:%+v", err)
+		return err
+	}
+	switch num {
+	case 1:
+		autoDefaultRateInfo.SketchReplaceNotUpload = rate
+	case 2:
+		autoDefaultRateInfo.SketchReplaceTimeOut = rate
+	case 3:
+		autoDefaultRateInfo.SketchOtherNotUpload = rate
+	case 4:
+		autoDefaultRateInfo.SketchOtherTimeOut = rate
+	case 5:
+		autoDefaultRateInfo.ScriptReplaceNotUpload = rate
+	case 6:
+		autoDefaultRateInfo.ScriptReplaceTimeOut = rate
+	case 7:
+		autoDefaultRateInfo.ScriptOtherNotUpload = rate
+	case 8:
+		autoDefaultRateInfo.ScriptOtherTimeOut = rate
+	case 9:
+		autoDefaultRateInfo.LinkReplaceNotUpload = rate
+	case 10:
+		autoDefaultRateInfo.LinkReplaceTimeOut = rate
+	case 11:
+		autoDefaultRateInfo.LinkOtherNotUpload = rate
+	case 12:
+		autoDefaultRateInfo.LinkOtherTimeOut = rate
+	case 13:
+		autoDefaultRateInfo.DataReplaceNotUpload = rate
+	case 14:
+		autoDefaultRateInfo.DataReplaceTimeOut = rate
+	case 15:
+		autoDefaultRateInfo.DataOtherNotUpload = rate
+	case 16:
+		autoDefaultRateInfo.DataOtherTimeOut = rate
+	}
+	autoDefaultRateInfo.AutoDefaultID += 1
+	err = db.Model(&gorm_model.InfoAutoDefaultHandle{}).Create(autoDefaultRateInfo).Error
+	if err != nil {
+		logrus.WithContext(ctx).Errorf("[UpdateAutoDefaultRate] error Create mysql, err:%+v", err)
+		return err
+	}
+	return nil
+}
+
+func GetSignInOfflineTask(projectForm int32) error {
+	db := GetReadDB(context.Background())
+	var projectInfos []*gorm_model.ProjectInfo
+	err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND project_form = ?", 1, projectForm).Find(&projectInfos).Error
+	if err != nil {
+		return err
+	}
+	projectIdMap := make(map[int64]int64)
+	taskIDs := make(map[int]int)
+	var projectIds []int64
+	var taskIds []int
+	var t int32
+	for _, projectInfo := range projectInfos {
+		autoTaskId := projectInfo.AutoTaskID
+		dbStart := GetReadDB(context.Background())
+		var autoTaskInfo gorm_model.InfoAutoTask
+		dbStart.Model(gorm_model.InfoAutoTask{}).Where("auto_task_id = ?", autoTaskId).First(&autoTaskInfo)
+		//fmt.Println("t:", autoTaskInfo.SignInOffline)
+		if projectForm == 3 {
+			t = autoTaskInfo.SignInOffline
+		} else {
+			t = autoTaskInfo.SignInVirtual
+		}
+		projectIds = append(projectIds, projectInfo.ProjectID)
+		if _, ok := projectIdMap[projectInfo.ProjectID]; !ok {
+			projectIdMap[projectInfo.ProjectID] = projectInfo.ContentType
+			db1 := GetReadDB(context.Background())
+			var taskInfos []gorm_model.YoungeeTaskInfo
+			db1.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND logistics_status = ?", projectInfo.ProjectID, 2).Find(&taskInfos)
+			//fmt.Println("taskInfos", taskInfos)
+			for _, taskInfo := range taskInfos {
+				fmt.Println("TaskId", taskInfo.TaskId)
+				if _, ok1 := taskIDs[taskInfo.TaskId]; !ok1 {
+					taskIds = append(taskIds, taskInfo.TaskId)
+					taskIDs[taskInfo.TaskId] = taskInfo.ProjectId
+					var logisticInfo gorm_model.YoungeeTaskLogistics
+					db2 := GetReadDB(context.Background())
+					db2.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id = ?", taskInfo.TaskId).Find(&logisticInfo)
+					fmt.Println("logisticID", logisticInfo.LogisticsID)
+					dd, _ := time.ParseDuration(conv.MustString(t, "") + "h")
+					if logisticInfo.AutoSignAt.IsZero() {
+						db5 := GetReadDB(context.Background())
+						db5.Model(gorm_model.YoungeeTaskLogistics{}).Where("logistics_id = ?", logisticInfo.LogisticsID).
+							Updates(&gorm_model.YoungeeTaskLogistics{AutoSignAt: logisticInfo.DeliveryTime.Add(dd)})
+						fmt.Println("已添加自动签收时间")
+					}
+				}
+			}
+		}
+	}
+	//fmt.Println("projectIdMap", projectIdMap)
+	fmt.Println("taskIds", taskIds)
+	var logisticInfos []gorm_model.YoungeeTaskLogistics
+	db3 := GetReadDB(context.Background())
+	err = db3.Model(gorm_model.YoungeeTaskLogistics{}).Where("auto_sign_at <= ? AND task_id IN ?", time.Now(), taskIds).Find(&logisticInfos).Error
+	if err != nil {
+		log.Println("DB AutoGetSignInOfflineTask error :", err)
+		return err
+	}
+	var signedTaskId []int
+	for _, logisticInfo := range logisticInfos {
+		signedTaskId = append(signedTaskId, logisticInfo.TaskID)
+		if logisticInfo.SignedTime.IsZero() {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.YoungeeTaskLogistics{}).Where("logistics_id = ?", logisticInfo.LogisticsID).Updates(&gorm_model.YoungeeTaskLogistics{SignedTime: time.Now()})
+			fmt.Println("已更新签收时间")
+		}
+	}
+	util.RemoveIntRepByMap(signedTaskId)
+	//fmt.Println("signedTaskId", signedTaskId)
+	for _, taskID := range signedTaskId {
+		//fmt.Println("taskID", taskID)
+		db4 := GetReadDB(context.Background())
+		taskNeedMod := gorm_model.YoungeeTaskInfo{}
+		db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskID).Find(&taskNeedMod)
+		if projectIdMap[int64(taskIDs[taskID])] == 1 {
+			if taskNeedMod.LogisticsStatus == 2 && taskNeedMod.TaskStage == 5 {
+				db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskID).Updates(&gorm_model.YoungeeTaskInfo{LogisticsStatus: 3, TaskStage: 9})
+				fmt.Println("内容形式为图片的项目 已修改任务状态为待传初稿 及物流状态为已签收")
+			}
+		} else if projectIdMap[int64(taskIDs[taskID])] == 2 {
+			if taskNeedMod.LogisticsStatus == 2 && taskNeedMod.TaskStage == 5 {
+				db4.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskID).Updates(&gorm_model.YoungeeTaskInfo{LogisticsStatus: 3, TaskStage: 7})
+				fmt.Println("内容形式为视频的项目 已修改任务状态为待传脚本 及物流状态为已签收")
+			}
+		}
+	}
+	return nil
+}
+
+func GetAutoReviewTask(contentType int32) error {
+	db := GetReadDB(context.Background())
+	var projectInfos []*gorm_model.ProjectInfo
+	if contentType == 2 {
+		err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND content_type = ?", 1, contentType).Find(&projectInfos).Error
+		if err != nil {
+			return err
+		}
+		var projectIds []int64
+		projectIdToAutoTaskIdMap := map[int64]int{}
+		for _, projectInfo := range projectInfos {
+			projectIds = append(projectIds, projectInfo.ProjectID)
+			projectIdToAutoTaskIdMap[projectInfo.ProjectID] = projectInfo.AutoTaskID
+		}
+		//fmt.Println("projectIds:", projectIds)
+		TaskIdToProjectId := make(map[int]int)
+		var taskId []int
+		db1 := GetReadDB(context.Background())
+		for _, projectId := range projectIds {
+			// 获取 autoTaskId 及其对应的限制时间、
+			autoTaskId := projectIdToAutoTaskIdMap[projectId]
+			dbStart := GetReadDB(context.Background())
+			var ReviewInMv int32
+			dbStart.Model(gorm_model.InfoAutoTask{}).Select("review_in_mv").Where("auto_task_id = ?", autoTaskId).First(&ReviewInMv)
+			//fmt.Println("t:", autoTaskInfo.ReviewInMv)
+			// 获取 projectId 对应的 taskId 及添加脚本自动审核时间
+			var taskInfos []gorm_model.YoungeeTaskInfo
+			db1.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ?", projectId).Find(&taskInfos)
+			for _, taskInfo := range taskInfos {
+				//fmt.Println("TaskID:", taskInfo.TaskId)
+				taskId = append(taskId, taskInfo.TaskId)
+				TaskIdToProjectId[taskInfo.TaskId] = int(projectId)
+				db2 := GetReadDB(context.Background())
+				var scriptInfos gorm_model.YounggeeScriptInfo
+				db2.Model(gorm_model.YounggeeScriptInfo{}).Where("task_id = ? AND is_submit = ? AND is_review = ? ", taskInfo.TaskId, 1, 0).Find(&scriptInfos)
+				dd, _ := time.ParseDuration(conv.MustString(ReviewInMv, "") + "h")
+				if scriptInfos.AutoAgreeAt.IsZero() && scriptInfos.IsSubmit == 1 {
+					db3 := GetReadDB(context.Background())
+					db3.Model(gorm_model.YounggeeScriptInfo{}).Where("task_id = ?", taskInfo.TaskId).Updates(&gorm_model.YounggeeScriptInfo{AutoAgreeAt: scriptInfos.SubmitAt.Add(dd)})
+					fmt.Println("已添加脚本自动审核时间")
+				}
+			}
+		}
+		//fmt.Println("TaskIdToProjectId:", TaskIdToProjectId)
+		//fmt.Println("taskId:", taskId)
+
+		var scriptInfos []gorm_model.YounggeeScriptInfo
+		db4 := GetReadDB(context.Background())
+		err = db4.Model(gorm_model.YounggeeScriptInfo{}).Where("auto_agree_at <= ? AND task_id IN ?", time.Now(), taskId).Find(&scriptInfos).Error
+		if err != nil {
+			log.Println("DB GetAutoReviewTask error in script :", err)
+			return err
+		}
+		//fmt.Println("scriptInfos:", scriptInfos)
+		var scriptTaskIds []int
+		for _, scriptInfo := range scriptInfos {
+			scriptTaskIds = append(scriptTaskIds, scriptInfo.TaskID)
+			scriptReviewNeedMod := gorm_model.YounggeeScriptInfo{}
+			db5 := GetReadDB(context.Background())
+			db5.Model(gorm_model.YounggeeScriptInfo{}).Where("script_id = ?", scriptInfo.ScriptID).Find(&scriptReviewNeedMod)
+			if scriptInfo.AgreeAt.IsZero() && scriptInfo.IsSubmit == 1 {
+				if scriptReviewNeedMod.IsReview != 1 {
+					db7 := GetReadDB(context.Background())
+					db7.Model(gorm_model.YounggeeScriptInfo{}).Where("script_id = ?", scriptInfo.ScriptID).Updates(&gorm_model.YounggeeScriptInfo{AgreeAt: time.Now(), IsReview: 1, IsOk: 1})
+					fmt.Println("已更新脚本同意时间 及脚本审核状态")
+				}
+			}
+		}
+		fmt.Println("scriptTaskIds:", scriptTaskIds)
+		for _, scriptTaskId := range scriptTaskIds {
+			//fmt.Println("scriptTaskId", scriptTaskId)
+			taskStatusNeedMod := gorm_model.YoungeeTaskInfo{}
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", scriptTaskId).Find(&taskStatusNeedMod)
+			if (taskStatusNeedMod.ScriptStatus == 2 || taskStatusNeedMod.ScriptStatus == 4) && taskStatusNeedMod.TaskStage == 7 {
+				db8 := GetReadDB(context.Background())
+				db8.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", scriptTaskId).Updates(&gorm_model.YoungeeTaskInfo{ScriptStatus: 5, TaskStage: 9})
+				fmt.Println("已更新任务阶段为待传初稿 及脚本上传状态为已通过")
+			}
+		}
+		return nil
+	} else {
+		err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? ", 1).Find(&projectInfos).Error
+		if err != nil {
+			return err
+		}
+		var projectIds []int64
+		projectIdToAutoTaskIdMap := map[int64]int{}
+		for _, projectInfo := range projectInfos {
+			projectIds = append(projectIds, projectInfo.ProjectID)
+			projectIdToAutoTaskIdMap[projectInfo.ProjectID] = projectInfo.AutoTaskID
+		}
+		//fmt.Println("projectIds:", projectIds)
+		TaskIdToProjectId := make(map[int]int)
+		var taskId []int
+		db1 := GetReadDB(context.Background())
+		for _, projectId := range projectIds {
+			// 获取 autoTaskId 及其对应的限制时间、
+			autoTaskId := projectIdToAutoTaskIdMap[projectId]
+			dbStart := GetReadDB(context.Background())
+			var ReviewUnlimited int32
+			dbStart.Model(gorm_model.InfoAutoTask{}).Select("review_unlimited").Where("auto_task_id = ?", autoTaskId).First(&ReviewUnlimited)
+			//fmt.Println("t:", autoTaskInfo.ReviewUnlimited)
+			var taskInfos []gorm_model.YoungeeTaskInfo
+			db1.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ?", projectId).Find(&taskInfos)
+			for _, taskInfo := range taskInfos {
+				TaskIdToProjectId[taskInfo.TaskId] = int(projectId)
+				taskId = append(taskId, taskInfo.TaskId)
+				db2 := GetReadDB(context.Background())
+				var scriptInfos gorm_model.YounggeeSketchInfo
+				db2.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? AND is_submit = ? AND is_review = ? ", taskInfo.TaskId, 1, 0).Find(&scriptInfos)
+				dd, _ := time.ParseDuration(conv.MustString(ReviewUnlimited, "") + "h")
+				if scriptInfos.AutoAgreeAt.IsZero() && scriptInfos.IsSubmit == 1 {
+					db3 := GetReadDB(context.Background())
+					db3.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ?", scriptInfos.TaskID).Updates(&gorm_model.YounggeeSketchInfo{AutoAgreeAt: scriptInfos.SubmitAt.Add(dd)})
+					fmt.Println("已添加脚本自动审核时间")
+				}
+			}
+		}
+
+		//fmt.Println("TaskIdToProjectId:", TaskIdToProjectId)
+		//fmt.Println("taskId:", taskId)
+
+		var sketchInfos []gorm_model.YounggeeSketchInfo
+		db3 := GetReadDB(context.Background())
+		err = db3.Model(gorm_model.YounggeeSketchInfo{}).Where("auto_agree_at <= ? AND task_id IN ?", time.Now(), taskId).Find(&sketchInfos).Error
+		if err != nil {
+			log.Println("DB GetAutoReviewTask error in sketch:", err)
+			return err
+		}
+		var sketchTaskIds []int
+		for _, scriptInfo := range sketchInfos {
+			sketchTaskIds = append(sketchTaskIds, scriptInfo.TaskID)
+			sketchNeedMod := gorm_model.YounggeeSketchInfo{}
+			db4 := GetReadDB(context.Background())
+			db4.Model(gorm_model.YounggeeSketchInfo{}).Where("sketch_id = ?", scriptInfo.SketchID).Find(&sketchNeedMod)
+			if scriptInfo.AgreeAt.IsZero() && scriptInfo.IsSubmit == 1 {
+				if sketchNeedMod.IsReview != 1 {
+					db6 := GetReadDB(context.Background())
+					db6.Model(gorm_model.YounggeeSketchInfo{}).Where("sketch_id = ?", scriptInfo.SketchID).Updates(&gorm_model.YounggeeSketchInfo{AgreeAt: time.Now(), IsReview: 1, IsOk: 1})
+					fmt.Println("已更新初稿审核同意时间")
+				}
+			}
+		}
+		for _, sketchTaskId := range sketchTaskIds {
+			//fmt.Println("taskID", sketchTaskId)
+			sketchNeedMod := gorm_model.YoungeeTaskInfo{}
+			db5 := GetReadDB(context.Background())
+			db5.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", sketchTaskId).Find(&sketchNeedMod)
+			if (sketchNeedMod.SketchStatus == 2 || sketchNeedMod.SketchStatus == 4) && sketchNeedMod.TaskStage == 9 {
+				db7 := GetReadDB(context.Background())
+				db7.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", sketchTaskId).Updates(&gorm_model.YoungeeTaskInfo{SketchStatus: 5, TaskStage: 11})
+				fmt.Println("已更新任务阶段为待传链接 及初稿上传状态为已通过")
+			}
+		}
+		return nil
+	}
+}
+
+func GetAutoPostReviewTask() error {
+	db := GetReadDB(context.Background())
+	var projectInfos []*gorm_model.ProjectInfo
+	err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? ", 1).Find(&projectInfos).Error
+	if err != nil {
+		return err
+	}
+	var projectIds []int64
+	projectIdToAutoTaskIdMap := map[int64]int{}
+	for _, projectInfo := range projectInfos {
+		projectIds = append(projectIds, projectInfo.ProjectID)
+		projectIdToAutoTaskIdMap[projectInfo.ProjectID] = projectInfo.AutoTaskID
+	}
+	//fmt.Println("projectIds:", projectIds)
+	TaskIdToProjectId := make(map[int]int)
+	var taskId []int
+	db1 := GetReadDB(context.Background())
+	for _, projectId := range projectIds {
+		// 获取 autoTaskId 及其对应的限制时间、
+		autoTaskId := projectIdToAutoTaskIdMap[projectId]
+		dbStart := GetReadDB(context.Background())
+		var Postreview int32
+		dbStart.Model(gorm_model.InfoAutoTask{}).Select("postreview").Where("auto_task_id = ?", autoTaskId).First(&Postreview)
+		//fmt.Println("t:", autoTaskInfo.Postreview)
+		var taskInfos []gorm_model.YoungeeTaskInfo
+		db1.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ?", projectId).Find(&taskInfos)
+		for _, taskInfo := range taskInfos {
+			TaskIdToProjectId[taskInfo.TaskId] = int(projectId)
+			taskId = append(taskId, taskInfo.TaskId)
+			db2 := GetReadDB(context.Background())
+			var linkInfos gorm_model.YounggeeLinkInfo
+			db2.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ? AND is_submit = ? AND is_review = ? ", taskInfo.TaskId, 1, 0).Find(&linkInfos)
+			dd, _ := time.ParseDuration(conv.MustString(Postreview, "") + "h")
+			if linkInfos.AutoAgreeAt.IsZero() && linkInfos.IsSubmit == 1 {
+				db3 := GetReadDB(context.Background())
+				db3.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ?", linkInfos.TaskID).Updates(&gorm_model.YounggeeLinkInfo{AutoAgreeAt: linkInfos.SubmitAt.Add(dd)})
+				fmt.Println("已添加链接自动审核时间")
+			}
+		}
+	}
+	var linkInfos []gorm_model.YounggeeLinkInfo
+	db3 := GetReadDB(context.Background())
+	err = db3.Model(gorm_model.YounggeeLinkInfo{}).Where("auto_agree_at <= ? AND task_id IN ?", time.Now(), taskId).Find(&linkInfos).Error
+	if err != nil {
+		log.Println("DB GetAutoPostReviewTask error in sketch:", err)
+		return err
+	}
+	var linkTaskIds []int
+	for _, linkInfo := range linkInfos {
+		linkTaskIds = append(linkTaskIds, linkInfo.TaskID)
+		linkNeedMod := gorm_model.YounggeeLinkInfo{}
+		db4 := GetReadDB(context.Background())
+		db4.Model(gorm_model.YounggeeLinkInfo{}).Where("link_id = ?", linkInfo.LinkID).Find(&linkNeedMod)
+		if linkInfo.AgreeAt.IsZero() && linkInfo.IsSubmit == 1 {
+			if linkNeedMod.IsReview != 1 {
+				db6 := GetReadDB(context.Background())
+				db6.Model(gorm_model.YounggeeLinkInfo{}).Where("link_id = ?", linkInfo.LinkID).Updates(&gorm_model.YounggeeLinkInfo{AgreeAt: time.Now(), IsReview: 1, IsOk: 1})
+				fmt.Println("已更新链接审核同意时间")
+			}
+		}
+	}
+	for _, linkTaskId := range linkTaskIds {
+		//fmt.Println("taskID", linkTaskId)
+		linkNeedMod := gorm_model.YoungeeTaskInfo{}
+		db5 := GetReadDB(context.Background())
+		db5.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", linkTaskId).Find(&linkNeedMod)
+		if (linkNeedMod.LinkStatus == 2 || linkNeedMod.LinkStatus == 4) && linkNeedMod.TaskStage == 11 {
+			db7 := GetReadDB(context.Background())
+			db7.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", linkTaskId).Updates(&gorm_model.YoungeeTaskInfo{LinkStatus: 5, TaskStage: 13})
+			fmt.Println("已更新任务阶段为待传数据 及 链接上传状态为已通过")
+		}
+	}
+	return nil
+}
+
+func GetAutoCaseCloseTask() error {
+	db := GetReadDB(context.Background())
+	var projectInfos []*gorm_model.ProjectInfo
+	err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? ", 1).Find(&projectInfos).Error
+	if err != nil {
+		return err
+	}
+	var projectIds []int64
+	projectIdToAutoTaskIdMap := map[int64]int{}
+	for _, projectInfo := range projectInfos {
+		projectIds = append(projectIds, projectInfo.ProjectID)
+		projectIdToAutoTaskIdMap[projectInfo.ProjectID] = projectInfo.AutoTaskID
+	}
+	//fmt.Println("projectIds:", projectIds)
+	TaskIdToProjectId := make(map[int]int)
+	var taskId []int
+	db1 := GetReadDB(context.Background())
+	for _, projectId := range projectIds {
+		// 获取 autoTaskId 及其对应的限制时间、
+		autoTaskId := projectIdToAutoTaskIdMap[projectId]
+		dbStart := GetReadDB(context.Background())
+		var CaseClose int32
+		dbStart.Model(gorm_model.InfoAutoTask{}).Select("case_close").Where("auto_task_id = ?", autoTaskId).First(&CaseClose)
+		//fmt.Println("t:", autoTaskInfo.CaseClose)
+		var taskInfos []gorm_model.YoungeeTaskInfo
+		db1.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ?", projectId).Find(&taskInfos)
+		for _, taskInfo := range taskInfos {
+			TaskIdToProjectId[taskInfo.TaskId] = int(projectId)
+			taskId = append(taskId, taskInfo.TaskId)
+			db2 := GetReadDB(context.Background())
+			var dataInfos gorm_model.YounggeeDataInfo
+			db2.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ? AND is_submit = ? AND is_review = ? ", taskInfo.TaskId, 1, 0).Find(&dataInfos)
+			dd, _ := time.ParseDuration(conv.MustString(CaseClose, "") + "h")
+			if dataInfos.AutoAgreeAt.IsZero() && dataInfos.IsSubmit == 1 {
+				db3 := GetReadDB(context.Background())
+				db3.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ?", dataInfos.TaskID).Updates(&gorm_model.YounggeeDataInfo{AutoAgreeAt: dataInfos.SubmitAt.Add(dd)})
+				fmt.Println("已添加链接自动审核时间")
+			}
+		}
+	}
+	var dataInfos []gorm_model.YounggeeDataInfo
+	db3 := GetReadDB(context.Background())
+	err = db3.Model(gorm_model.YounggeeDataInfo{}).Where("auto_agree_at <= ? AND task_id IN ?", time.Now(), taskId).Find(&dataInfos).Error
+	if err != nil {
+		log.Println("DB GetAutoCaseCloseTask error in sketch:", err)
+		return err
+	}
+	var dataTaskIds []int
+	for _, dataInfo := range dataInfos {
+		dataTaskIds = append(dataTaskIds, dataInfo.TaskID)
+		dataNeedMod := gorm_model.YounggeeDataInfo{}
+		db4 := GetReadDB(context.Background())
+		db4.Model(gorm_model.YounggeeDataInfo{}).Where("data_id = ?", dataInfo.DataID).Find(&dataNeedMod)
+		if dataInfo.AgreeAt.IsZero() && dataInfo.IsSubmit == 1 {
+			if dataNeedMod.IsReview != 1 {
+				db6 := GetReadDB(context.Background())
+				db6.Model(gorm_model.YounggeeDataInfo{}).Where("data_id = ?", dataInfo.DataID).Updates(&gorm_model.YounggeeDataInfo{AgreeAt: time.Now(), IsReview: 1, IsOk: 1})
+				fmt.Println("已更新数据审核同意时间")
+			}
+		}
+	}
+	for _, dataTaskId := range dataTaskIds {
+		dataNeedMod := gorm_model.YoungeeTaskInfo{}
+		db5 := GetReadDB(context.Background())
+		db5.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", dataTaskId).Find(&dataNeedMod)
+		if (dataNeedMod.DataStatus == 2 || dataNeedMod.DataStatus == 4) && dataNeedMod.TaskStage == 13 {
+			db7 := GetReadDB(context.Background())
+			db7.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", dataTaskId).Updates(&gorm_model.YoungeeTaskInfo{DataStatus: 5, TaskStage: 15})
+			fmt.Println("已更新任务阶段为已结案 及 数据上传状态为已通过")
+		}
+	}
+	return nil
+}
+
+func GetAutoInvalidTask() error {
+	db := GetReadDB(context.Background())
+	var projectInfos []*gorm_model.ProjectInfo
+	err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND project_status = ? ", 1, 6).Find(&projectInfos).Error
+	if err != nil {
+		return err
+	}
+	var projectIds []int64
+	projectIdToAutoTaskIdMap := map[int64]int{}
+	for _, projectInfo := range projectInfos {
+		projectIds = append(projectIds, projectInfo.ProjectID)
+		projectIdToAutoTaskIdMap[projectInfo.ProjectID] = projectInfo.AutoTaskID
+	}
+	for _, projectId := range projectIds {
+		// 获取 autoTaskId 及其对应的限制时间、
+		autoTaskId := projectIdToAutoTaskIdMap[projectId]
+		dbStart := GetReadDB(context.Background())
+		var Invalid int32
+		dbStart.Model(gorm_model.InfoAutoTask{}).Select("invalid").Where("auto_task_id = ?", autoTaskId).First(&Invalid)
+		//fmt.Println("t:", autoTaskInfo.Invalid)
+		db1 := GetReadDB(context.Background())
+		project := gorm_model.ProjectInfo{}
+		db1.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).First(&project)
+		if project.AutoFailAt.IsZero() {
+			dd, _ := time.ParseDuration(conv.MustString(Invalid, "") + "h")
+			db2 := GetReadDB(context.Background())
+			db2.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Updates(&gorm_model.ProjectInfo{AutoFailAt: project.RecruitDdl.Add(dd)})
+			fmt.Println("已添加失效自动处理时间")
+		}
+		projectNeedMod := gorm_model.ProjectInfo{}
+		db2 := GetReadDB(context.Background())
+		db2.Where("project_id = ?", projectId).First(&projectNeedMod)
+		if !projectNeedMod.AutoFailAt.IsZero() {
+			if projectNeedMod.AutoFailAt.Sub(time.Now()) <= 0 && projectNeedMod.ProjectStatus < 8 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).Updates(&gorm_model.ProjectInfo{ProjectStatus: 8}).Error
+				if err1 != nil {
+					return err1
+				}
+				fmt.Println("已更新项目状态")
+			}
+		}
+	}
+	return nil
+}
+
+func GetAutoDraftDefaultInPicTask() error {
+	db := GetReadDB(context.Background())
+	var projectInfos []*gorm_model.ProjectInfo
+	err := db.Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND content_type = ? ", 1, 1).Find(&projectInfos).Error
+	if err != nil {
+		return err
+	}
+	// 项目类型为 实体商品寄拍、虚拟产品测评、线下探店打卡 均为正常的 收发货情况,以签收状况作为判断条件
+	var projectIds []int64
+	// 存储素材微原创的项目id,此情况单独处理,它不涉及到物流,也不涉及到脚本,初稿上一个状态直接就是支付。
+	var specialProjectIds []int64
+	projectIdToAutoTaskIdMap := map[int64]int{}
+	// 项目id 对 违约定时任务id 的map
+	projectIdToAutoDefaultIdMap := map[int64]int{}
+	// taskId 对 稿费形式的 map
+	taskIdToFeeFormMap := make(map[int]int)
+	TaskIdToProjectId := make(map[int]int)
+	var taskNeedModIds []int
+	var specialTaskNeedModIds []int
+	// 已提交初稿的任务记录id
+	var submitTaskNeedModIds []int
+	for _, projectInfo := range projectInfos {
+		if projectInfo.ProjectForm == 4 {
+			specialProjectIds = append(specialProjectIds, projectInfo.ProjectID)
+			specialProjectInfo := gorm_model.ProjectInfo{}
+			db1 := GetReadDB(context.Background())
+			db1.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectInfo.ProjectID).First(&specialProjectInfo)
+			dbStart := GetReadDB(context.Background())
+			var DraftDefaultInPic int32
+			dbStart.Model(gorm_model.InfoAutoTask{}).Select("draft_default_in_pic").Where("auto_task_id = ?", specialProjectInfo.AutoTaskID).First(&DraftDefaultInPic)
+			dd, _ := time.ParseDuration(conv.MustString(DraftDefaultInPic, "") + "h")
+			if !projectInfo.PayAt.IsZero() && projectInfo.AutoSketchBreakAt.IsZero() {
+				db1.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectInfo.ProjectID).Updates(&gorm_model.ProjectInfo{AutoSketchBreakAt: projectInfo.PayAt.Add(dd)})
+				fmt.Println("已添加素材微原创的初稿违约自动处理时间")
+			}
+		} else {
+			projectIds = append(projectIds, projectInfo.ProjectID)
+		}
+		projectIdToAutoTaskIdMap[projectInfo.ProjectID] = projectInfo.AutoTaskID
+		projectIdToAutoDefaultIdMap[projectInfo.ProjectID] = projectInfo.AutoDefaultID
+	}
+	//fmt.Println("projectIds:", projectIds)
+	//fmt.Println("specialProjectIds:", specialProjectIds)
+	for _, specialProjectId := range specialProjectIds {
+		db2 := GetReadDB(context.Background())
+		var taskInfos []gorm_model.YoungeeTaskInfo
+		db2.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND cur_default_type = ?", specialProjectId, 0).Find(&taskInfos)
+		for _, taskInfo := range taskInfos {
+			TaskIdToProjectId[taskInfo.TaskId] = int(specialProjectId)
+			taskIdToFeeFormMap[taskInfo.TaskId] = taskInfo.FeeForm
+			specialTaskNeedMod := gorm_model.YoungeeTaskInfo{}
+			db3 := GetReadDB(context.Background())
+			// 保存所有初稿上传状态为 1或 3 的任务记录的id
+			db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskInfo.TaskId).First(&specialTaskNeedMod)
+			if specialTaskNeedMod.SketchStatus == 1 && taskInfo.TaskStage == 10 {
+				specialTaskNeedModIds = append(specialTaskNeedModIds, taskInfo.TaskId)
+			}
+			if specialTaskNeedMod.SketchStatus == 3 && taskInfo.TaskStage == 10 {
+				submitTaskNeedModIds = append(submitTaskNeedModIds, taskInfo.TaskId)
+			}
+		}
+	}
+	//fmt.Println("specialTaskNeedModIds:", specialTaskNeedModIds)
+	for _, specialTaskNeedModId := range specialTaskNeedModIds {
+		projectNeedMod := gorm_model.ProjectInfo{}
+		db1 := GetReadDB(context.Background())
+		db1.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", TaskIdToProjectId[specialTaskNeedModId]).First(&projectNeedMod)
+		var sketchDefaultRate int
+		if taskIdToFeeFormMap[specialTaskNeedModId] == 1 {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_replace_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[int64(TaskIdToProjectId[specialTaskNeedModId])]).Find(&sketchDefaultRate)
+		} else {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_other_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[int64(TaskIdToProjectId[specialTaskNeedModId])]).Find(&sketchDefaultRate)
+		}
+		if projectNeedMod.AutoSketchBreakAt.Sub(time.Now()) <= 0 && !projectNeedMod.AutoSketchBreakAt.IsZero() {
+			db2 := GetReadDB(context.Background())
+			err1 := db2.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+				TaskID: specialTaskNeedModId, BreakType: 2, BreakAt: time.Now(), DefaultStatus: 1}).Error
+			if err1 != nil {
+				return err1
+			}
+			db3 := GetReadDB(context.Background())
+			db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", specialTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 3, SketchBreakRate: sketchDefaultRate})
+			fmt.Println("已创建素材微原创的任务初稿违约记录")
+		}
+	}
+	for _, projectId := range projectIds {
+		db1 := GetReadDB(context.Background())
+		var taskInfos []gorm_model.YoungeeTaskInfo
+		db1.Model(gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND cur_default_type = ? ", projectId, 0).Find(&taskInfos)
+		for _, taskInfo := range taskInfos {
+			TaskIdToProjectId[taskInfo.TaskId] = int(projectId)
+			taskNeedMod := gorm_model.YoungeeTaskInfo{}
+			db2 := GetReadDB(context.Background())
+			// 保存所有满足物流状态为3 且 初稿上传状态为 1或 3 的任务记录的id
+			db2.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskInfo.TaskId).First(&taskNeedMod)
+			if taskNeedMod.LogisticsStatus == 3 && taskNeedMod.ScriptStatus == 1 {
+				taskNeedModIds = append(taskNeedModIds, taskInfo.TaskId)
+			}
+			if taskNeedMod.LogisticsStatus == 3 && taskNeedMod.ScriptStatus == 3 {
+				submitTaskNeedModIds = append(submitTaskNeedModIds, taskInfo.TaskId)
+			}
+		}
+	}
+	//fmt.Println("projectIdToAutoTaskIdMap:", projectIdToAutoTaskIdMap)
+	//fmt.Println("TaskIdToProjectId:", TaskIdToProjectId)
+	//fmt.Println("taskNeedModIds:", taskNeedModIds)
+	for _, taskNeedModId := range taskNeedModIds {
+		// 获取 autoTaskId 及其对应的限制时间、
+		//fmt.Println("taskNeedModId:", taskNeedModId)
+		autoTaskId := projectIdToAutoTaskIdMap[int64(TaskIdToProjectId[taskNeedModId])]
+		dbStart := GetReadDB(context.Background())
+		var DraftDefaultInPic int32
+		dbStart.Model(gorm_model.InfoAutoTask{}).Select("draft_default_in_pic").Where("auto_task_id = ?", autoTaskId).First(&DraftDefaultInPic)
+		//fmt.Println("t:", autoTaskInfo.DraftDefaultInPic)
+		db3 := GetReadDB(context.Background())
+		taskLogisticNeedMod := gorm_model.YoungeeTaskLogistics{}
+		db3.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id = ?", taskNeedModId).First(&taskLogisticNeedMod)
+		var sketchDefaultRate int
+		if taskIdToFeeFormMap[taskNeedModId] == 1 {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_replace_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[int64(TaskIdToProjectId[taskNeedModId])]).Find(&sketchDefaultRate)
+		} else {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_other_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[int64(TaskIdToProjectId[taskNeedModId])]).Find(&sketchDefaultRate)
+		}
+		if taskLogisticNeedMod.AutoSketchBreakAt.IsZero() {
+			dd, _ := time.ParseDuration(conv.MustString(DraftDefaultInPic, "") + "h")
+			db4 := GetReadDB(context.Background())
+			logisticNeedMod := gorm_model.YoungeeTaskLogistics{}
+			db4.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id = ?", taskNeedModId).First(&logisticNeedMod)
+			if logisticNeedMod.ThingsType == 1 && !logisticNeedMod.SignedTime.IsZero() {
+				db4.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YoungeeTaskLogistics{
+					AutoSketchBreakAt: taskLogisticNeedMod.SignedTime.Add(dd),
+				})
+				fmt.Println("已添加实物的图片初稿违约自动处理时间")
+			}
+			if logisticNeedMod.ThingsType != 1 && !logisticNeedMod.AutoSignAt.IsZero() {
+				db4.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YoungeeTaskLogistics{
+					AutoSketchBreakAt: taskLogisticNeedMod.AutoSignAt.Add(dd),
+				})
+				fmt.Println("已添加虚拟产品及线下探店的图片初稿违约自动处理时间")
+			}
+		}
+		db7 := GetReadDB(context.Background())
+		taskLogisticNeedMod2 := gorm_model.YoungeeTaskLogistics{}
+		db7.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id = ?", taskNeedModId).First(&taskLogisticNeedMod2)
+		if !taskLogisticNeedMod2.AutoSketchBreakAt.IsZero() && taskLogisticNeedMod2.AutoSketchBreakAt.Sub(time.Now()) <= 0 {
+			db5 := GetReadDB(context.Background())
+			err1 := db5.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+				TaskID: taskNeedModId, BreakType: 2, BreakAt: time.Now(), DefaultStatus: 1}).Error
+			if err1 != nil {
+				return err1
+			}
+			db8 := GetReadDB(context.Background())
+			db8.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskLogisticNeedMod2.TaskID).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 3, SketchBreakRate: sketchDefaultRate})
+			fmt.Println("已创建图文类型的初稿违约记录")
+		}
+	}
+	for _, submitTaskNeedModId := range submitTaskNeedModIds {
+		db2 := GetReadDB(context.Background())
+		var DraftDefaultInMv int32
+		db2.Model(&gorm_model.InfoAutoTask{}).Select("draft_default_in_mv").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[int64(TaskIdToProjectId[submitTaskNeedModId])]).First(&DraftDefaultInMv)
+		dd, _ := time.ParseDuration(conv.MustString(DraftDefaultInMv, "") + "h")
+		var sketchDefaultRate int
+		if taskIdToFeeFormMap[submitTaskNeedModId] == 1 {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_replace_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[int64(TaskIdToProjectId[submitTaskNeedModId])]).Find(&sketchDefaultRate)
+		} else {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_other_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[int64(TaskIdToProjectId[submitTaskNeedModId])]).Find(&sketchDefaultRate)
+		}
+		db1 := GetReadDB(context.Background())
+		var taskSketchInfo gorm_model.YounggeeSketchInfo
+		db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ?", submitTaskNeedModId).Order("reject_at desc").First(&taskSketchInfo)
+		if taskSketchInfo.AutoSketchBreakAt.IsZero() {
+			err4 := db1.Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YounggeeSketchInfo{AutoSketchBreakAt: taskSketchInfo.RejectAt.Add(dd)}).Error
+			if err4 != nil {
+				return err4
+			}
+			fmt.Println("已添加图文形式的初稿违约自动处理时间")
+			if taskSketchInfo.RejectAt.Add(dd).Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: submitTaskNeedModId, BreakType: 2, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 3, SketchBreakRate: sketchDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("创建时已违约则创建已提交初稿的图文类型的初稿违约记录")
+			}
+		} else {
+			if taskSketchInfo.AutoSketchBreakAt.Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: submitTaskNeedModId, BreakType: 2, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 3, SketchBreakRate: sketchDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("创建已提交初稿的图文类型的初稿违约记录")
+			}
+		}
+	}
+	return nil
+}
+
+func GetAutoDraftDefaultInMvTask() error {
+	db := GetReadDB(context.Background())
+	var VideoProjectIds []int64
+	err := db.Select("project_id").Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND content_type = ? ", 1, 2).Find(&VideoProjectIds).Error
+	if err != nil {
+		return err
+	}
+	//fmt.Println("VideoProjectIds:", VideoProjectIds)
+	// 任务id 对 项目id 的map
+	taskIdToProjectIdMap := map[int]int64{}
+	// 项目id 对 定时任务id 的map
+	projectIdToAutoTaskIdMap := map[int64]int{}
+	// 项目id 对 违约定时任务id 的map
+	projectIdToAutoDefaultIdMap := map[int64]int{}
+	// taskId 对 稿费形式的 map
+	taskIdToFeeFormMap := make(map[int]int)
+	var videoTaskIds []int
+	for _, VideoProjectId := range VideoProjectIds {
+		db2 := GetReadDB(context.Background())
+		autoIds := gorm_model.ProjectInfo{}
+		db2.Select([]string{"auto_task_id", "auto_default_id"}).Model(&gorm_model.ProjectInfo{}).Where("project_id = ?", VideoProjectId).First(&autoIds)
+		projectIdToAutoTaskIdMap[VideoProjectId] = autoIds.AutoTaskID
+		projectIdToAutoDefaultIdMap[VideoProjectId] = autoIds.AutoDefaultID
+
+		var videoTaskInfos []*gorm_model.YoungeeTaskInfo
+		db1 := GetReadDB(context.Background())
+		db1.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND cur_default_type = ? ", VideoProjectId, 0).Find(&videoTaskInfos)
+		for _, videoTaskInfo := range videoTaskInfos {
+			taskIdToProjectIdMap[videoTaskInfo.TaskId] = VideoProjectId
+			taskIdToFeeFormMap[videoTaskInfo.TaskId] = videoTaskInfo.FeeForm
+			videoTaskIds = append(videoTaskIds, videoTaskInfo.TaskId)
+		}
+	}
+	//fmt.Println("taskIdToProjectIdMap:", taskIdToProjectIdMap)
+	//fmt.Println("projectIdToAutoTaskIdMap:", projectIdToAutoTaskIdMap)
+	//fmt.Println("videoTaskIds:", videoTaskIds)
+	// 首次提交初稿的任务记录id
+	var videoTaskNeedModIds []int
+	// 已提交初稿的任务记录id
+	var submitVideoTaskNeedModIds []int
+	for _, videoTaskId := range videoTaskIds {
+		var taskInfo gorm_model.YoungeeTaskInfo
+		db3 := GetReadDB(context.Background())
+		// 保存所有初稿上传状态为 1  且任务状态为10 的任务记录的id
+		db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", videoTaskId).First(&taskInfo)
+		if taskInfo.SketchStatus == 1 && taskInfo.TaskStage == 10 {
+			videoTaskNeedModIds = append(videoTaskNeedModIds, videoTaskId)
+		}
+		// 保存所有初稿上传状态为 3  且任务状态为10 的任务记录的id
+		if taskInfo.SketchStatus == 3 && taskInfo.TaskStage == 10 {
+			submitVideoTaskNeedModIds = append(submitVideoTaskNeedModIds, videoTaskId)
+		}
+	}
+	//fmt.Println("videoTaskNeedModIds:", videoTaskNeedModIds)
+	//fmt.Println("submitVideoTaskNeedModIds:", submitVideoTaskNeedModIds)
+	for _, videoTaskNeedModId := range videoTaskNeedModIds {
+		db2 := GetReadDB(context.Background())
+		var DraftDefaultInMv int32
+		db2.Model(&gorm_model.InfoAutoTask{}).Select("draft_default_in_mv").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[videoTaskNeedModId]]).First(&DraftDefaultInMv)
+		dd, _ := time.ParseDuration(conv.MustString(DraftDefaultInMv, "") + "h")
+		var sketchDefaultRate int
+		if taskIdToFeeFormMap[videoTaskNeedModId] == 1 {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_replace_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[videoTaskNeedModId]]).Find(&sketchDefaultRate)
+		} else {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_other_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[videoTaskNeedModId]]).Find(&sketchDefaultRate)
+		}
+		db1 := GetReadDB(context.Background())
+		var taskScriptInfo gorm_model.YounggeeScriptInfo
+		db1.Model(gorm_model.YounggeeScriptInfo{}).Where("task_id = ? AND is_ok = ?", videoTaskNeedModId, 1).Find(&taskScriptInfo)
+		if taskScriptInfo.AutoSketchBreakAt.IsZero() {
+			db1.Where("task_id = ?", videoTaskNeedModId).Updates(&gorm_model.YounggeeScriptInfo{AutoSketchBreakAt: taskScriptInfo.AutoAgreeAt.Add(dd)})
+			fmt.Println("已添加视频形式的初稿违约自动处理时间")
+			if taskScriptInfo.AutoAgreeAt.Add(dd).Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: videoTaskNeedModId, BreakType: 2, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", videoTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 3, SketchBreakRate: sketchDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("创建时已违约则创建视频类型的初稿违约记录")
+			}
+		} else {
+			if taskScriptInfo.AutoSketchBreakAt.Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: videoTaskNeedModId, BreakType: 2, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", videoTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 3, SketchBreakRate: sketchDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("已创建视频类型的初稿违约记录")
+			}
+		}
+	}
+	for _, submitVideoTaskNeedModId := range submitVideoTaskNeedModIds {
+		db2 := GetReadDB(context.Background())
+		var DraftDefaultInMv int32
+		db2.Model(&gorm_model.InfoAutoTask{}).Select("draft_default_in_mv").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[submitVideoTaskNeedModId]]).First(&DraftDefaultInMv)
+		dd, _ := time.ParseDuration(conv.MustString(DraftDefaultInMv, "") + "h")
+		var sketchDefaultRate int
+		if taskIdToFeeFormMap[submitVideoTaskNeedModId] == 1 {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_replace_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitVideoTaskNeedModId]]).Find(&sketchDefaultRate)
+		} else {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_other_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitVideoTaskNeedModId]]).Find(&sketchDefaultRate)
+		}
+		db1 := GetReadDB(context.Background())
+		var taskSketchInfo gorm_model.YounggeeSketchInfo
+		db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ?", submitVideoTaskNeedModId).Order("reject_at desc").First(&taskSketchInfo)
+		if taskSketchInfo.AutoSketchBreakAt.IsZero() {
+			err4 := db1.Where("task_id = ?", submitVideoTaskNeedModId).Updates(&gorm_model.YounggeeSketchInfo{AutoSketchBreakAt: taskSketchInfo.RejectAt.Add(dd)}).Error
+			if err4 != nil {
+				return err4
+			}
+			fmt.Println("已添加视频形式的初稿违约自动处理时间")
+			if taskSketchInfo.RejectAt.Add(dd).Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: submitVideoTaskNeedModId, BreakType: 2, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitVideoTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 3, SketchBreakRate: sketchDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("创建时已违约则创建已提交初稿的视频类型的初稿违约记录")
+			}
+		} else {
+			if taskSketchInfo.AutoSketchBreakAt.Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: submitVideoTaskNeedModId, BreakType: 2, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitVideoTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 3, SketchBreakRate: sketchDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("创建已提交初稿的视频类型的初稿违约记录")
+			}
+		}
+	}
+	return nil
+}
+
+func GetAutoScriptDefaultTask() error {
+	db := GetReadDB(context.Background())
+	var VideoProjectIds []int64
+	var specialProjectIds []int
+	err := db.Select("project_id").Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND content_type = ? AND project_form != 4", 1, 2).Find(&VideoProjectIds).Error
+	if err != nil {
+		return err
+	}
+	db.Select("project_id").Model(gorm_model.ProjectInfo{}).Where("project_type = ? AND content_type = ? AND project_form = 4", 1, 2).Find(&specialProjectIds)
+	//fmt.Println("VideoProjectIds:", VideoProjectIds)
+	//fmt.Println("specialProjectIds:", specialProjectIds)
+
+	// 任务id 对 项目id 的map
+	taskIdToProjectIdMap := map[int]int64{}
+	// 项目id 对 定时任务id 的map
+	projectIdToAutoTaskIdMap := map[int64]int{}
+	// 项目id 对 违约定时任务id 的map
+	projectIdToAutoDefaultIdMap := map[int64]int{}
+	// taskId 对 稿费形式的 map
+	taskIdToFeeFormMap := make(map[int]int)
+	// 素材微原创的任务id
+	var specialVideoTaskIds []int
+	// 需要判断是否违约的素材微原创的任务id
+	var specialTaskNeedModIds []int
+	// 首次提交脚本的任务记录id
+	var videoTaskNeedModIds []int
+	// 已提交脚本的任务记录id
+	var submitVideoTaskNeedModIds []int
+	for _, specialProjectId := range specialProjectIds {
+		db2 := GetReadDB(context.Background())
+		var projectInfo gorm_model.ProjectInfo
+		db2.Model(&gorm_model.ProjectInfo{}).Where("project_id = ?", specialProjectId).First(&projectInfo)
+		projectIdToAutoTaskIdMap[int64(specialProjectId)] = projectInfo.AutoTaskID
+		projectIdToAutoDefaultIdMap[int64(specialProjectId)] = projectInfo.AutoDefaultID
+		var ScriptDefault int32
+		dbStart := GetReadDB(context.Background())
+		dbStart.Model(gorm_model.InfoAutoTask{}).Select("script_default").Where("auto_task_id = ?", projectInfo.AutoTaskID).First(&ScriptDefault)
+		dd, _ := time.ParseDuration(conv.MustString(ScriptDefault, "") + "h")
+		if !projectInfo.PayAt.IsZero() && projectInfo.AutoScriptBreakAt.IsZero() {
+			db1 := GetReadDB(context.Background())
+			db1.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", projectInfo.ProjectID).Updates(&gorm_model.ProjectInfo{AutoScriptBreakAt: projectInfo.PayAt.Add(dd)})
+			fmt.Println("已添加素材微原创的脚本违约自动处理时间")
+		}
+		var videoTaskInfos []*gorm_model.YoungeeTaskInfo
+		db1 := GetReadDB(context.Background())
+		db1.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND cur_default_type = ? ", specialProjectId, 0).Find(&videoTaskInfos)
+		for _, videoTaskInfo := range videoTaskInfos {
+			taskIdToProjectIdMap[videoTaskInfo.TaskId] = int64(specialProjectId)
+			specialVideoTaskIds = append(specialVideoTaskIds, videoTaskInfo.TaskId)
+			specialTaskNeedMod := gorm_model.YoungeeTaskInfo{}
+			db3 := GetReadDB(context.Background())
+			// 保存所有脚本上传状态为 1  且任务状态为8 的任务记录的id
+			db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", videoTaskInfo.TaskId).First(&specialTaskNeedMod)
+			if specialTaskNeedMod.ScriptStatus == 1 && specialTaskNeedMod.TaskStage == 8 {
+				specialTaskNeedModIds = append(specialTaskNeedModIds, videoTaskInfo.TaskId)
+			}
+			// 保存所有脚本上传状态为 3  且任务状态为8 的任务记录的id
+			if specialTaskNeedMod.ScriptStatus == 3 && specialTaskNeedMod.TaskStage == 8 {
+				submitVideoTaskNeedModIds = append(submitVideoTaskNeedModIds, videoTaskInfo.TaskId)
+			}
+			taskIdToFeeFormMap[videoTaskInfo.TaskId] = videoTaskInfo.FeeForm
+		}
+	}
+	//fmt.Println("submitVideoTaskNeedModIds:", submitVideoTaskNeedModIds)
+	//fmt.Println("specialTaskNeedModIds:", specialTaskNeedModIds)
+	for _, specialTaskNeedModId := range specialTaskNeedModIds {
+		projectNeedMod := gorm_model.ProjectInfo{}
+		db1 := GetReadDB(context.Background())
+		db1.Model(gorm_model.ProjectInfo{}).Where("project_id = ?", taskIdToProjectIdMap[specialTaskNeedModId]).First(&projectNeedMod)
+		if projectNeedMod.AutoScriptBreakAt.Sub(time.Now()) <= 0 && !projectNeedMod.AutoScriptBreakAt.IsZero() {
+			var scriptDefaultRate int
+			if taskIdToFeeFormMap[specialTaskNeedModId] == 1 {
+				db6 := GetReadDB(context.Background())
+				db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_replace_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[specialTaskNeedModId]]).Find(&scriptDefaultRate)
+			} else {
+				db6 := GetReadDB(context.Background())
+				db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_other_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[specialTaskNeedModId]]).Find(&scriptDefaultRate)
+			}
+			db2 := GetReadDB(context.Background())
+			err1 := db2.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+				TaskID: specialTaskNeedModId, BreakType: 1, BreakAt: time.Now(), DefaultStatus: 1}).Error
+			if err1 != nil {
+				return err1
+			}
+			db3 := GetReadDB(context.Background())
+			db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", specialTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 1, ScriptBreakRate: scriptDefaultRate})
+			fmt.Println("已创建素材微原创的任务脚本违约记录")
+		}
+	}
+	var videoTaskIds []int
+	for _, VideoProjectId := range VideoProjectIds {
+		db2 := GetReadDB(context.Background())
+		var autoTaskId int
+		db2.Select("auto_task_id").Model(&gorm_model.ProjectInfo{}).Where("project_id = ?", VideoProjectId).First(&autoTaskId)
+		projectIdToAutoTaskIdMap[VideoProjectId] = autoTaskId
+		var videoTaskInfos []*gorm_model.YoungeeTaskInfo
+		db1 := GetReadDB(context.Background())
+		db1.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND cur_default_type = ? ", VideoProjectId, 0).Find(&videoTaskInfos)
+		for _, videoTaskInfo := range videoTaskInfos {
+			taskIdToProjectIdMap[videoTaskInfo.TaskId] = VideoProjectId
+			videoTaskIds = append(videoTaskIds, videoTaskInfo.TaskId)
+		}
+	}
+	//fmt.Println("taskIdToProjectIdMap:", taskIdToProjectIdMap)
+	//fmt.Println("projectIdToAutoTaskIdMap:", projectIdToAutoTaskIdMap)
+	//fmt.Println("videoTaskIds:", videoTaskIds)
+	for _, videoTaskId := range videoTaskIds {
+		var taskInfo gorm_model.YoungeeTaskInfo
+		db3 := GetReadDB(context.Background())
+		// 保存所有脚本上传状态为 1  且任务状态为8 的任务记录的id
+		db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", videoTaskId).First(&taskInfo)
+		if taskInfo.ScriptStatus == 1 && taskInfo.TaskStage == 8 {
+			videoTaskNeedModIds = append(videoTaskNeedModIds, videoTaskId)
+		}
+		// 保存所有脚本上传状态为 3  且任务状态为8 的任务记录的id
+		if taskInfo.ScriptStatus == 3 && taskInfo.TaskStage == 8 {
+			submitVideoTaskNeedModIds = append(submitVideoTaskNeedModIds, videoTaskId)
+		}
+	}
+	//fmt.Println("videoTaskNeedModIds:", videoTaskNeedModIds)
+	//fmt.Println("submitVideoTaskNeedModIds:", submitVideoTaskNeedModIds)
+	for _, videoTaskNeedModId := range videoTaskNeedModIds {
+		db2 := GetReadDB(context.Background())
+		var ScriptDefault int32
+		db2.Model(&gorm_model.InfoAutoTask{}).Select("script_default").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[videoTaskNeedModId]]).First(&ScriptDefault)
+		dd, _ := time.ParseDuration(conv.MustString(ScriptDefault, "") + "h")
+		db1 := GetReadDB(context.Background())
+		var taskLogisticInfo gorm_model.YoungeeTaskLogistics
+		db1.Model(gorm_model.YoungeeTaskLogistics{}).Where("task_id = ?", videoTaskNeedModId).Find(&taskLogisticInfo)
+		var scriptDefaultRate int
+		if taskIdToFeeFormMap[videoTaskNeedModId] == 1 {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_replace_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[videoTaskNeedModId]]).Find(&scriptDefaultRate)
+		} else {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_other_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[videoTaskNeedModId]]).Find(&scriptDefaultRate)
+		}
+		if taskLogisticInfo.AutoScriptBreakAt.IsZero() {
+			db1.Where("task_id = ?", videoTaskNeedModId).Updates(&gorm_model.YoungeeTaskLogistics{AutoScriptBreakAt: taskLogisticInfo.AutoSignAt.Add(dd)})
+			fmt.Println("已添加视频形式的脚本违约自动处理时间")
+			if taskLogisticInfo.AutoSignAt.Add(dd).Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: videoTaskNeedModId, BreakType: 1, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", videoTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 1, ScriptBreakRate: scriptDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("创建时已违约则创建视频类型的脚本违约记录")
+			}
+		} else {
+			if taskLogisticInfo.AutoScriptBreakAt.Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: videoTaskNeedModId, BreakType: 1, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", videoTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 1, ScriptBreakRate: scriptDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("已创建视频类型的脚本违约记录")
+			}
+		}
+	}
+	// 根据最近一次拒绝时间判断当前是否违约
+	for _, submitVideoTaskNeedModId := range submitVideoTaskNeedModIds {
+		db2 := GetReadDB(context.Background())
+		var ScriptDefault int32
+		db2.Model(&gorm_model.InfoAutoTask{}).Select("script_default").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[submitVideoTaskNeedModId]]).First(&ScriptDefault)
+		dd, _ := time.ParseDuration(conv.MustString(ScriptDefault, "") + "h")
+		db1 := GetReadDB(context.Background())
+		var taskScriptInfo gorm_model.YounggeeScriptInfo
+		db1.Model(gorm_model.YounggeeScriptInfo{}).Where("task_id = ?", submitVideoTaskNeedModId).Order("reject_at desc").First(&taskScriptInfo)
+		var scriptDefaultRate int
+		if taskIdToFeeFormMap[submitVideoTaskNeedModId] == 1 {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_replace_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitVideoTaskNeedModId]]).Find(&scriptDefaultRate)
+		} else {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("script_other_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitVideoTaskNeedModId]]).Find(&scriptDefaultRate)
+		}
+		if taskScriptInfo.AutoScriptBreakAt.IsZero() {
+			err4 := db1.Where("task_id = ?", submitVideoTaskNeedModId).Updates(&gorm_model.YounggeeScriptInfo{AutoScriptBreakAt: taskScriptInfo.RejectAt.Add(dd)}).Error
+			if err4 != nil {
+				return err4
+			}
+			fmt.Println("已添加视频形式的脚本违约自动处理时间")
+			if taskScriptInfo.RejectAt.Add(dd).Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: submitVideoTaskNeedModId, BreakType: 1, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitVideoTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{
+					CurDefaultType: 1, ScriptBreakRate: scriptDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("创建时已违约则创建已提交脚本的视频类型的脚本违约记录")
+			}
+		} else {
+			if taskScriptInfo.AutoScriptBreakAt.Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: submitVideoTaskNeedModId, BreakType: 1, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitVideoTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{
+					CurDefaultType: 1, ScriptBreakRate: scriptDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("创建已提交脚本的视频类型的脚本违约记录")
+			}
+		}
+	}
+	return nil
+}
+
+func GetAutoLinkBreachTask() error {
+	db := GetReadDB(context.Background())
+	var projectIds []int64
+	err := db.Select("project_id").Model(gorm_model.ProjectInfo{}).Where("project_type = ?", 1).Find(&projectIds).Error
+	if err != nil {
+		return err
+	}
+	//fmt.Println("projectIds:", projectIds)
+	// 任务id 对 项目id 的map
+	taskIdToProjectIdMap := map[int]int64{}
+	// 项目id 对 定时任务id 的map
+	projectIdToAutoTaskIdMap := map[int64]int{}
+	// 项目id 对 违约定时任务id 的map
+	projectIdToAutoDefaultIdMap := map[int64]int{}
+	var taskIds []int
+	// taskId 对 稿费形式的 map
+	taskIdToFeeFormMap := make(map[int]int)
+	for _, projectId := range projectIds {
+		db2 := GetReadDB(context.Background())
+		autoIds := gorm_model.ProjectInfo{}
+		db2.Select([]string{"auto_task_id", "auto_default_id"}).Model(&gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).First(&autoIds)
+		projectIdToAutoTaskIdMap[projectId] = autoIds.AutoTaskID
+		projectIdToAutoDefaultIdMap[projectId] = autoIds.AutoDefaultID
+		var taskInfos []*gorm_model.YoungeeTaskInfo
+		db1 := GetReadDB(context.Background())
+		db1.Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND cur_default_type = ? ", projectId, 0).Find(&taskInfos)
+		for _, taskInfo := range taskInfos {
+			taskIdToProjectIdMap[taskInfo.TaskId] = projectId
+			taskIds = append(taskIds, taskInfo.TaskId)
+			taskIdToFeeFormMap[taskInfo.TaskId] = taskInfo.FeeForm
+		}
+	}
+	//fmt.Println("taskIdToProjectIdMap:", taskIdToProjectIdMap)
+	//fmt.Println("taskIds:", taskIds)
+	// 首次提交链接的任务记录id
+	var taskNeedModIds []int
+	// 已提交链接的任务记录id
+	var submitTaskNeedModIds []int
+	for _, taskId := range taskIds {
+		var taskInfo gorm_model.YoungeeTaskInfo
+		db3 := GetReadDB(context.Background())
+		// 保存所有链接上传状态为 1  且任务状态为12 的任务记录的id
+		db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).First(&taskInfo)
+		if taskInfo.LinkStatus == 1 && taskInfo.TaskStage == 12 {
+			taskNeedModIds = append(taskNeedModIds, taskId)
+		}
+		// 保存所有链接上传状态为 3  且任务状态为12 的任务记录的id
+		if taskInfo.LinkStatus == 3 && taskInfo.TaskStage == 12 {
+			submitTaskNeedModIds = append(submitTaskNeedModIds, taskId)
+		}
+	}
+	//fmt.Println("taskNeedModIds:", taskNeedModIds)
+	//fmt.Println("submitTaskNeedModIds:", submitTaskNeedModIds)
+	for _, taskNeedModId := range taskNeedModIds {
+		db2 := GetReadDB(context.Background())
+		var linkBreach int32
+		db2.Model(&gorm_model.InfoAutoTask{}).Select("link_breach").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[taskNeedModId]]).First(&linkBreach)
+		dd, _ := time.ParseDuration(conv.MustString(linkBreach, "") + "h")
+		var linkDefaultRate int
+		if taskIdToFeeFormMap[taskNeedModId] == 1 {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("link_replace_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&linkDefaultRate)
+		} else {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("link_other_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&linkDefaultRate)
+		}
+		db1 := GetReadDB(context.Background())
+		var taskSketchInfo gorm_model.YounggeeSketchInfo
+		db1.Model(gorm_model.YounggeeSketchInfo{}).Where("task_id = ? AND is_ok = ?", taskNeedModId, 1).Find(&taskSketchInfo)
+		if taskSketchInfo.AutoLinkBreakAt.IsZero() {
+			db1.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YounggeeSketchInfo{AutoLinkBreakAt: taskSketchInfo.AutoAgreeAt.Add(dd)})
+			fmt.Println("已添加链接违约自动处理时间")
+			if taskSketchInfo.AutoAgreeAt.Add(dd).Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: taskNeedModId, BreakType: 3, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 5, LinkBreakRate: linkDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("创建时已违约则创建链接违约记录")
+			}
+		} else {
+			if taskSketchInfo.AutoLinkBreakAt.Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: taskNeedModId, BreakType: 3, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 5, LinkBreakRate: linkDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("已创建链接违约记录")
+			}
+		}
+	}
+	// 根据最近一次拒绝时间判断当前是否违约
+	for _, submitTaskNeedModId := range submitTaskNeedModIds {
+		db2 := GetReadDB(context.Background())
+		var LinkBreach int32
+		db2.Model(&gorm_model.InfoAutoTask{}).Select("link_breach").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).First(&LinkBreach)
+		dd, _ := time.ParseDuration(conv.MustString(LinkBreach, "") + "h")
+		var linkDefaultRate int
+		if taskIdToFeeFormMap[submitTaskNeedModId] == 1 {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("link_replace_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&linkDefaultRate)
+		} else {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("link_other_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&linkDefaultRate)
+		}
+		db1 := GetReadDB(context.Background())
+		var taskLinkInfo gorm_model.YounggeeLinkInfo
+		db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ?", submitTaskNeedModId).Order("reject_at desc").First(&taskLinkInfo)
+		if taskLinkInfo.AutoLinkBreakAt.IsZero() {
+			err4 := db1.Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YounggeeLinkInfo{AutoLinkBreakAt: taskLinkInfo.RejectAt.Add(dd)}).Error
+			if err4 != nil {
+				return err4
+			}
+			fmt.Println("已添加链接违约自动处理时间")
+			if taskLinkInfo.RejectAt.Add(dd).Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: submitTaskNeedModId, BreakType: 3, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 5, LinkBreakRate: linkDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("创建时已违约则创建已提交链接的链接违约记录")
+			}
+		} else {
+			if taskLinkInfo.AutoLinkBreakAt.Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: submitTaskNeedModId, BreakType: 3, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 5, LinkBreakRate: linkDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("创建已提交链接的链接违约记录")
+			}
+		}
+	}
+	return nil
+}
+
+func GetAutoCaseCloseDefaultTask() error {
+	db := GetReadDB(context.Background())
+	var projectIds []int64
+	err := db.Select("project_id").Model(gorm_model.ProjectInfo{}).Where("project_type = ?", 1).Find(&projectIds).Error
+	if err != nil {
+		return err
+	}
+	//fmt.Println("projectIds:", projectIds)
+	// 任务id 对 项目id 的map
+	taskIdToProjectIdMap := map[int]int64{}
+	// 项目id 对 定时任务id 的map
+	projectIdToAutoTaskIdMap := map[int64]int{}
+	// 项目id 对 违约定时任务id 的map
+	projectIdToAutoDefaultIdMap := map[int64]int{}
+	var taskIds []int
+	for _, projectId := range projectIds {
+		db2 := GetReadDB(context.Background())
+		autoIds := gorm_model.ProjectInfo{}
+		db2.Select([]string{"auto_task_id", "auto_default_id"}).Model(&gorm_model.ProjectInfo{}).Where("project_id = ?", projectId).First(&autoIds)
+		projectIdToAutoTaskIdMap[projectId] = autoIds.AutoTaskID
+		projectIdToAutoDefaultIdMap[projectId] = autoIds.AutoDefaultID
+		var taskInfos []int32
+		db1 := GetReadDB(context.Background())
+		db1.Select("task_id").Model(&gorm_model.YoungeeTaskInfo{}).Where("project_id = ? AND cur_default_type = ? ", projectId, 0).Find(&taskInfos)
+		for _, taskInfo := range taskInfos {
+			taskIdToProjectIdMap[int(taskInfo)] = projectId
+			taskIds = append(taskIds, int(taskInfo))
+		}
+	}
+	//fmt.Println("projectIdToAutoTaskIdMap:", projectIdToAutoTaskIdMap)
+	//fmt.Println("projectIdToAutoDefaultIdMap:", projectIdToAutoDefaultIdMap)
+	//fmt.Println("taskIdToProjectIdMap:", taskIdToProjectIdMap)
+	//fmt.Println("taskIds:", taskIds)
+	// 首次提交链接的任务记录id
+	var taskNeedModIds []int
+	// 已提交链接的任务记录id
+	var submitTaskNeedModIds []int
+	// taskId 对 稿费形式的 map
+	taskIdToFeeFormMap := make(map[int]int)
+	for _, taskId := range taskIds {
+		var taskInfo gorm_model.YoungeeTaskInfo
+		db3 := GetReadDB(context.Background())
+		// 保存所有数据上传状态为 1  且任务状态为14 的任务记录的id
+		db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskId).First(&taskInfo)
+		if taskInfo.DataStatus == 1 && taskInfo.TaskStage == 14 {
+			taskNeedModIds = append(taskNeedModIds, taskId)
+		}
+		// 保存所有数据上传状态为 3  且任务状态为14 的任务记录的id
+		if taskInfo.DataStatus == 3 && taskInfo.TaskStage == 14 {
+			submitTaskNeedModIds = append(submitTaskNeedModIds, taskId)
+		}
+		taskIdToFeeFormMap[taskId] = taskInfo.FeeForm
+	}
+	//fmt.Println("taskIdToFeeFormMap:", taskIdToFeeFormMap)
+	//fmt.Println("taskNeedModIds:", taskNeedModIds)
+	//fmt.Println("submitTaskNeedModIds:", submitTaskNeedModIds)
+	for _, taskNeedModId := range taskNeedModIds {
+		db2 := GetReadDB(context.Background())
+		var CaseCloseDefault int32
+		db2.Model(&gorm_model.InfoAutoTask{}).Select("case_close_default").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[taskNeedModId]]).First(&CaseCloseDefault)
+		dd, _ := time.ParseDuration(conv.MustString(CaseCloseDefault, "") + "h")
+		var dataDefaultRate int
+		if taskIdToFeeFormMap[taskNeedModId] == 1 {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_replace_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&dataDefaultRate)
+		} else {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_other_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[taskNeedModId]]).Find(&dataDefaultRate)
+		}
+		//fmt.Println("dataDefaultRate:", dataDefaultRate)
+		db1 := GetReadDB(context.Background())
+		var taskLinkInfo gorm_model.YounggeeLinkInfo
+		db1.Model(gorm_model.YounggeeLinkInfo{}).Where("task_id = ? AND is_ok = ?", taskNeedModId, 1).Find(&taskLinkInfo)
+		if taskLinkInfo.AutoDataBreakAt.IsZero() {
+			db1.Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YounggeeLinkInfo{AutoDataBreakAt: taskLinkInfo.AutoAgreeAt.Add(dd)})
+			fmt.Println("已添加数据违约自动处理时间")
+			if taskLinkInfo.AutoAgreeAt.Add(dd).Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: taskNeedModId, BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 7, DataBreakRate: dataDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("创建时已违约则创建数据违约记录")
+			}
+		} else {
+			if taskLinkInfo.AutoDataBreakAt.Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: taskNeedModId, BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", taskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 7, DataBreakRate: dataDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("已创建数据违约记录")
+			}
+		}
+	}
+	// 根据最近一次拒绝时间判断当前是否违约
+	for _, submitTaskNeedModId := range submitTaskNeedModIds {
+		db2 := GetReadDB(context.Background())
+		var LinkBreach int32
+		db2.Model(&gorm_model.InfoAutoTask{}).Select("case_close_default").Where("auto_task_id = ?", projectIdToAutoTaskIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).First(&LinkBreach)
+		dd, _ := time.ParseDuration(conv.MustString(LinkBreach, "") + "h")
+		var dataDefaultRate int
+		if taskIdToFeeFormMap[submitTaskNeedModId] == 1 {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_replace_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&dataDefaultRate)
+		} else {
+			db6 := GetReadDB(context.Background())
+			db6.Model(gorm_model.InfoAutoDefaultHandle{}).Select("data_other_time_out").Where("auto_default_id = ?", projectIdToAutoDefaultIdMap[taskIdToProjectIdMap[submitTaskNeedModId]]).Find(&dataDefaultRate)
+		}
+		db1 := GetReadDB(context.Background())
+		var taskDataInfo gorm_model.YounggeeDataInfo
+		db1.Model(gorm_model.YounggeeDataInfo{}).Where("task_id = ?", submitTaskNeedModId).Order("reject_at desc").First(&taskDataInfo)
+		if taskDataInfo.AutoDataBreakAt.IsZero() {
+			err4 := db1.Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YounggeeDataInfo{AutoDataBreakAt: taskDataInfo.RejectAt.Add(dd)}).Error
+			if err4 != nil {
+				return err4
+			}
+			fmt.Println("已添加数据违约自动处理时间")
+			if taskDataInfo.RejectAt.Add(dd).Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: submitTaskNeedModId, BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{CurDefaultType: 7, DataBreakRate: dataDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("创建时已违约则创建已提交数据的数据违约记录")
+			}
+		} else {
+			if taskDataInfo.AutoDataBreakAt.Sub(time.Now()) <= 0 {
+				db4 := GetReadDB(context.Background())
+				err1 := db4.Model(gorm_model.YoungeeContractInfo{}).Create(&gorm_model.YoungeeContractInfo{
+					TaskID: submitTaskNeedModId, BreakType: 4, BreakAt: time.Now(), DefaultStatus: 1}).Error
+				if err1 != nil {
+					return err1
+				}
+				db3 := GetReadDB(context.Background())
+				err2 := db3.Model(gorm_model.YoungeeTaskInfo{}).Where("task_id = ?", submitTaskNeedModId).Updates(&gorm_model.YoungeeTaskInfo{
+					CurDefaultType: 7, DataBreakRate: dataDefaultRate}).Error
+				if err2 != nil {
+					return err2
+				}
+				fmt.Println("创建已提交数据的数据违约记录")
+			}
+		}
+	}
+	return nil
+}

+ 4 - 4
db/talent.go

@@ -50,10 +50,10 @@ func AccountIncome(ctx context.Context, talentId string) (*http_model.TalentInfo
 		}
 	}
 	data := new(http_model.TalentInfoResponse)
-	data.Income = talentInfo.Income
-	data.Withdrawed = talentInfo.Withdrawed
-	data.Canwithdraw = talentInfo.Canwithdraw
-	data.Withdrawing = talentInfo.Withdrawing
+	data.Income = float32(talentInfo.Income)
+	data.Withdrawed = float32(talentInfo.Withdrawed)
+	data.Canwithdraw = float32(talentInfo.Canwithdraw)
+	data.Withdrawing = float32(talentInfo.Withdrawing)
 
 	// 查询是否绑定物流地址
 	IsBindLocation := talentInfo.IsBindLocation

+ 1 - 1
db/user.go

@@ -322,7 +322,7 @@ func AccountInfo(ctx context.Context, pageSize, pageNum int32, conditions *commo
 		accountInfo.PlatformNickname = PlatformAccountInfo.PlatformNickname
 		accountInfo.TalentId = PlatformAccountInfo.TalentID
 		accountInfo.Phone = phoneMap[PlatformAccountInfo.TalentID]
-		accountInfo.Fans = PlatformAccountInfo.FansCount
+		accountInfo.Fans = util.GetNumString(PlatformAccountInfo.FansCount)
 		accountInfo.HomePageUrl = PlatformAccountInfo.HomePageUrl
 		accountInfo.HomePageCaptureUrl = PlatformAccountInfo.HomePageCaptureUrl
 		accountInfoDatas = append(accountInfoDatas, accountInfo)

+ 1 - 0
go.mod

@@ -30,6 +30,7 @@ require (
 	github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/pelletier/go-toml/v2 v2.0.1 // indirect
+	github.com/robfig/cron/v3 v3.0.0 // indirect
 	github.com/ugorji/go/codec v1.2.7 // indirect
 	golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect
 	golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 // indirect

+ 2 - 0
go.sum

@@ -59,6 +59,8 @@ github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZO
 github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/robfig/cron/v3 v3.0.0 h1:kQ6Cb7aHOHTSzNVNEhmp8EcWKLb4CbiMW9h9VyIhO4E=
+github.com/robfig/cron/v3 v3.0.0/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
 github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
 github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
 github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=

+ 57 - 0
handler/getWithdrawalRecord.go

@@ -0,0 +1,57 @@
+package handler
+
+import (
+	"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/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(),
+	}
+}

+ 56 - 0
handler/operate/auto_review.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapAutoReviewHandler(ctx *gin.Context) {
+	handler := newAutoReviewHandler(ctx)
+	BaseRun(handler)
+}
+
+type autoReviewHandler struct {
+	req  *http_model.AutoReviewRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func newAutoReviewHandler(ctx *gin.Context) *autoReviewHandler {
+	return &autoReviewHandler{
+		req:  http_model.NewAutoReviewRequest(),
+		resp: http_model.NewAutoReviewResponse(),
+		ctx:  ctx,
+	}
+}
+
+func (a autoReviewHandler) getContext() *gin.Context {
+	return a.ctx
+}
+
+func (a autoReviewHandler) getResponse() interface{} {
+	return a.resp
+}
+
+func (a autoReviewHandler) getRequest() interface{} {
+	return a.req
+}
+
+func (a autoReviewHandler) run() {
+	time := a.req.Time
+	err := db.UpdateAutoTaskTime(a.ctx, time, 3)
+	if err != nil {
+		logrus.WithContext(a.ctx).Errorf("[autoReviewHandler] error autoReview, err:%+v", err)
+		util.HandlerPackErrorResp(a.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	a.resp.Message = "已启动视频形式的审稿自动处理服务"
+}
+
+func (a autoReviewHandler) checkParam() error {
+	return nil
+}

+ 56 - 0
handler/operate/auto_review_unlimited.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapAutoReviewUnlimitedHandler(ctx *gin.Context) {
+	handler := newAutoReviewUnlimited(ctx)
+	BaseRun(handler)
+}
+
+func newAutoReviewUnlimited(ctx *gin.Context) *autoReviewUnlimitedHandler {
+	return &autoReviewUnlimitedHandler{
+		ctx:  ctx,
+		req:  http_model.NewAutoReviewUnlimitedRequest(),
+		resp: http_model.NewAutoReviewUnlimitedResponse(),
+	}
+}
+
+type autoReviewUnlimitedHandler struct {
+	req  *http_model.AutoReviewUnlimitedRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (a autoReviewUnlimitedHandler) getContext() *gin.Context {
+	return a.ctx
+}
+
+func (a autoReviewUnlimitedHandler) getResponse() interface{} {
+	return a.resp
+}
+
+func (a autoReviewUnlimitedHandler) getRequest() interface{} {
+	return a.req
+}
+
+func (a autoReviewUnlimitedHandler) run() {
+	time := a.req.Time
+	err := db.UpdateAutoTaskTime(a.ctx, time, 4)
+	if err != nil {
+		logrus.WithContext(a.ctx).Errorf("[autoReviewUnlimitedHandler] error autoReviewUnlimited, err:%+v", err)
+		util.HandlerPackErrorResp(a.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	a.resp.Message = "已启动不限形式的审稿自动处理服务"
+}
+
+func (a autoReviewUnlimitedHandler) checkParam() error {
+	return nil
+}

+ 56 - 0
handler/operate/auto_sign_in_offline.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapSignInOfflineHandler(ctx *gin.Context) {
+	handler := newSignInOfflineHandler(ctx)
+	BaseRun(handler)
+}
+
+func newSignInOfflineHandler(ctx *gin.Context) *SignInOfflineHandler {
+	return &SignInOfflineHandler{
+		req:  http_model.NewSignInOfflineRequest(),
+		resp: http_model.NewSignInOfflineResponse(),
+		ctx:  ctx,
+	}
+}
+
+type SignInOfflineHandler struct {
+	req  *http_model.SignInOfflineRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (s SignInOfflineHandler) getContext() *gin.Context {
+	return s.ctx
+}
+
+func (s SignInOfflineHandler) getResponse() interface{} {
+	return s.resp
+}
+
+func (s SignInOfflineHandler) getRequest() interface{} {
+	return s.req
+}
+
+func (s SignInOfflineHandler) run() {
+	time := s.req.Time
+	err := db.UpdateAutoTaskTime(s.ctx, time, 1)
+	if err != nil {
+		logrus.WithContext(s.ctx).Errorf("[SignInOfflineHandler] error AutoSignInOffline, err:%+v", err)
+		util.HandlerPackErrorResp(s.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	s.resp.Message = "已启动线下探店打卡的自动签收服务"
+}
+
+func (s SignInOfflineHandler) checkParam() error {
+	return nil
+}

+ 56 - 0
handler/operate/auto_sign_in_virtual.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapSignInVirtualHandler(ctx *gin.Context) {
+	handler := newSignInVirtualHandler(ctx)
+	BaseRun(handler)
+}
+
+type SignInVirtualHandler struct {
+	req  *http_model.SignInVirtualRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func newSignInVirtualHandler(ctx *gin.Context) *SignInVirtualHandler {
+	return &SignInVirtualHandler{
+		req:  http_model.NewSignInVirtualRequest(),
+		resp: http_model.NewSignInVirtualResponse(),
+		ctx:  ctx,
+	}
+}
+
+func (s SignInVirtualHandler) getContext() *gin.Context {
+	return s.ctx
+}
+
+func (s SignInVirtualHandler) getResponse() interface{} {
+	return s.resp
+}
+
+func (s SignInVirtualHandler) getRequest() interface{} {
+	return s.req
+}
+
+func (s SignInVirtualHandler) run() {
+	time := s.req.Time
+	err := db.UpdateAutoTaskTime(s.ctx, time, 2)
+	if err != nil {
+		logrus.WithContext(s.ctx).Errorf("[SignInVirtualHandler] error AutoSignInVirtual, err:%+v", err)
+		util.HandlerPackErrorResp(s.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	s.resp.Message = "已启动虚拟产品测评的自动签收服务"
+}
+
+func (s SignInVirtualHandler) checkParam() error {
+	return nil
+}

+ 67 - 0
handler/operate/breach_handled.go

@@ -0,0 +1,67 @@
+package operate
+
+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 WrapBreachHandledHandler(ctx *gin.Context) {
+	handler := newBreachHandledHandler(ctx)
+	BaseRun(handler)
+}
+
+type BreachHandledHandler struct {
+	ctx  *gin.Context
+	req  *http_model.BreachHandledRequest
+	resp *http_model.CommonResponse
+}
+
+func (b BreachHandledHandler) getContext() *gin.Context {
+	return b.ctx
+}
+
+func (b BreachHandledHandler) getResponse() interface{} {
+	return b.resp
+}
+
+func (b BreachHandledHandler) getRequest() interface{} {
+	return b.req
+}
+
+func (b BreachHandledHandler) run() {
+	conditions := pack.HttpBreachHandledRequestToConditions(b.req)
+	data, err := db.BreachHandled(b.ctx, b.req.PageSize, b.req.PageNum, b.req, conditions)
+	if err != nil {
+		logrus.WithContext(b.ctx).Errorf("[BreachHandledHandler] error BreachHandled, err:%+v", err)
+		util.HandlerPackErrorResp(b.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	b.resp.Data = data
+}
+
+func (b BreachHandledHandler) checkParam() error {
+	var errs []error
+	if b.req.PageNum < 0 || b.req.PageSize <= 0 {
+		errs = append(errs, errors.New("page param error"))
+	}
+	b.req.PageNum--
+	if len(errs) != 0 {
+		return fmt.Errorf("check param errs:%+v", errs)
+	}
+	return nil
+}
+
+func newBreachHandledHandler(ctx *gin.Context) *BreachHandledHandler {
+	return &BreachHandledHandler{
+		ctx:  ctx,
+		req:  http_model.NewBreachHandledRequest(),
+		resp: http_model.NewBreachHandledResponse(),
+	}
+}

+ 65 - 0
handler/operate/breach_pending.go

@@ -0,0 +1,65 @@
+package operate
+
+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/util"
+)
+
+func WrapBreachPendingHandler(ctx *gin.Context) {
+	handler := newBreachPendingHandler(ctx)
+	BaseRun(handler)
+}
+
+type BreachPendingHandler struct {
+	ctx  *gin.Context
+	req  *http_model.BreachPendingRequest
+	resp *http_model.CommonResponse
+}
+
+func newBreachPendingHandler(ctx *gin.Context) *BreachPendingHandler {
+	return &BreachPendingHandler{
+		ctx:  ctx,
+		req:  http_model.NewBreachPendingRequest(),
+		resp: http_model.NewBreachPendingResponse(),
+	}
+}
+
+func (b BreachPendingHandler) getContext() *gin.Context {
+	return b.ctx
+}
+
+func (b BreachPendingHandler) getResponse() interface{} {
+	return b.resp
+}
+
+func (b BreachPendingHandler) getRequest() interface{} {
+	return b.req
+}
+
+func (b BreachPendingHandler) run() {
+	data, err := db.BreachPending(b.ctx, b.req.PageSize, b.req.PageNum, b.req)
+	if err != nil {
+		logrus.WithContext(b.ctx).Errorf("[BreachPendingHandler] error BreachPending, err:%+v", err)
+		util.HandlerPackErrorResp(b.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	b.resp.Data = data
+}
+
+func (b BreachPendingHandler) checkParam() error {
+	var errs []error
+	if b.req.PageNum < 0 || b.req.PageSize <= 0 {
+		errs = append(errs, errors.New("page param error"))
+	}
+	b.req.PageNum--
+	if len(errs) != 0 {
+		return fmt.Errorf("check param errs:%+v", errs)
+	}
+	return nil
+}

+ 56 - 0
handler/operate/case_close.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapCaseCloseHandler(ctx *gin.Context) {
+	handler := newCaseCloseHandler(ctx)
+	BaseRun(handler)
+}
+
+type caseCloseHandler struct {
+	req  *http_model.CaseCloseRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (c caseCloseHandler) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c caseCloseHandler) getResponse() interface{} {
+	return c.resp
+}
+
+func (c caseCloseHandler) getRequest() interface{} {
+	return c.req
+}
+
+func (c caseCloseHandler) run() {
+	time := c.req.Time
+	err := db.UpdateAutoTaskTime(c.ctx, time, 6)
+	if err != nil {
+		logrus.WithContext(c.ctx).Errorf("[caseCloseHandler] error caseClose, err:%+v", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	c.resp.Message = "已启动结案自动处理服务"
+}
+
+func (c caseCloseHandler) checkParam() error {
+	return nil
+}
+
+func newCaseCloseHandler(ctx *gin.Context) *caseCloseHandler {
+	return &caseCloseHandler{
+		ctx:  ctx,
+		req:  http_model.NewCaseCloseRequest(),
+		resp: http_model.NewCaseCloseResponse(),
+	}
+}

+ 56 - 0
handler/operate/case_close_default.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapCaseCloseDefaultHandler(ctx *gin.Context) {
+	handler := newCaseCloseDefaultHandler(ctx)
+	BaseRun(handler)
+}
+
+type caseCloseDefaultHandler struct {
+	req  *http_model.CaseCloseDefaultRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (c caseCloseDefaultHandler) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c caseCloseDefaultHandler) getResponse() interface{} {
+	return c.resp
+}
+
+func (c caseCloseDefaultHandler) getRequest() interface{} {
+	return c.req
+}
+
+func (c caseCloseDefaultHandler) run() {
+	time := c.req.Time
+	err := db.UpdateAutoTaskTime(c.ctx, time, 12)
+	if err != nil {
+		logrus.WithContext(c.ctx).Errorf("[caseCloseDefaultHandler] error AutoCaseCloseDefault, err:%+v", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	c.resp.Message = "已启动结案违约自动处理服务"
+}
+
+func (c caseCloseDefaultHandler) checkParam() error {
+	return nil
+}
+
+func newCaseCloseDefaultHandler(ctx *gin.Context) *caseCloseDefaultHandler {
+	return &caseCloseDefaultHandler{
+		ctx:  ctx,
+		req:  http_model.NewCaseCloseDefaultRequest(),
+		resp: http_model.NewCaseCloseDefaultResponse(),
+	}
+}

+ 55 - 0
handler/operate/contract_breach.go

@@ -0,0 +1,55 @@
+package operate
+
+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 WrapContractBreachHandler(ctx *gin.Context) {
+	handler := newContractBreachHandler(ctx)
+	BaseRun(handler)
+}
+
+func newContractBreachHandler(ctx *gin.Context) *ContractBreachHandler {
+	return &ContractBreachHandler{
+		ctx:  ctx,
+		req:  http_model.NewContractBreachRequest(),
+		resp: http_model.NewContractBreachResponse(),
+	}
+}
+
+type ContractBreachHandler struct {
+	ctx  *gin.Context
+	req  *http_model.ContractBreachRequest
+	resp *http_model.CommonResponse
+}
+
+func (c ContractBreachHandler) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c ContractBreachHandler) getResponse() interface{} {
+	return c.resp
+}
+
+func (c ContractBreachHandler) getRequest() interface{} {
+	return c.req
+}
+
+func (c ContractBreachHandler) run() {
+	err := db.ContractBreach(c.ctx, c.req)
+	if err != nil {
+		logrus.WithContext(c.ctx).Errorf("[ContractBreachHandler] error ContractBreach, err:%+v", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	c.resp.Message = "违约记录处理成功"
+}
+
+func (c ContractBreachHandler) checkParam() error {
+	return nil
+}

+ 55 - 0
handler/operate/count_num_of_defaults.go

@@ -0,0 +1,55 @@
+package operate
+
+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 WrapCountNumOfDefaultsHandler(ctx *gin.Context) {
+	handler := newCountNumOfDefaults(ctx)
+	BaseRun(handler)
+}
+
+type CountNumOfDefaults struct {
+	ctx  *gin.Context
+	req  *http_model.CountNumOfDefaultsRequest
+	resp *http_model.CommonResponse
+}
+
+func newCountNumOfDefaults(ctx *gin.Context) *CountNumOfDefaults {
+	return &CountNumOfDefaults{
+		ctx:  ctx,
+		req:  http_model.NewCountNumOfDefaultsRequest(),
+		resp: http_model.NewCountNumOfDefaultsResponse(),
+	}
+}
+
+func (c CountNumOfDefaults) getContext() *gin.Context {
+	return c.ctx
+}
+
+func (c CountNumOfDefaults) getResponse() interface{} {
+	return c.resp
+}
+
+func (c CountNumOfDefaults) getRequest() interface{} {
+	return c.req
+}
+
+func (c CountNumOfDefaults) run() {
+	err, data := db.CountDefaultNum(c.ctx)
+	if err != nil {
+		logrus.WithContext(c.ctx).Errorf("[caseCloseDefaultHandler] error AutoCaseCloseDefault, err:%+v", err)
+		util.HandlerPackErrorResp(c.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	c.resp.Data = data
+}
+
+func (c CountNumOfDefaults) checkParam() error {
+	return nil
+}

+ 56 - 0
handler/operate/dataOtherNotUpload.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapDataOtherNotUploadHandler(ctx *gin.Context) {
+	handler := newDataOtherNotUploadHandler(ctx)
+	BaseRun(handler)
+}
+
+type DataOtherNotUploadHandler struct {
+	ctx  *gin.Context
+	req  *http_model.DataOtherNotUploadRequest
+	resp *http_model.CommonResponse
+}
+
+func (d DataOtherNotUploadHandler) getContext() *gin.Context {
+	return d.ctx
+}
+
+func (d DataOtherNotUploadHandler) getResponse() interface{} {
+	return d.resp
+}
+
+func (d DataOtherNotUploadHandler) getRequest() interface{} {
+	return d.req
+}
+
+func (d DataOtherNotUploadHandler) run() {
+	rate := d.req.Rate
+	err := db.UpdateAutoDefaultRate(d.ctx, rate, 15)
+	if err != nil {
+		logrus.WithContext(d.ctx).Errorf("[DataOtherNotUploadHandler] error UpdateAutoDefaultRate, err:%+v", err)
+		util.HandlerPackErrorResp(d.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	d.resp.Message = "已更新自报价、固定稿费类型的数据违约未上传的扣款比率"
+}
+
+func (d DataOtherNotUploadHandler) checkParam() error {
+	return nil
+}
+
+func newDataOtherNotUploadHandler(ctx *gin.Context) *DataOtherNotUploadHandler {
+	return &DataOtherNotUploadHandler{
+		ctx:  ctx,
+		req:  http_model.NewDataOtherNotUploadRequest(),
+		resp: http_model.NewDataOtherNotUploadResponse(),
+	}
+}

+ 56 - 0
handler/operate/dataOtherTimeOut.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapDataOtherTimeOutHandler(ctx *gin.Context) {
+	handler := newDataOtherTimeOutHandler(ctx)
+	BaseRun(handler)
+}
+
+type DataOtherTimeOutHandler struct {
+	ctx  *gin.Context
+	req  *http_model.DataOtherTimeOutRequest
+	resp *http_model.CommonResponse
+}
+
+func (d DataOtherTimeOutHandler) getContext() *gin.Context {
+	return d.ctx
+}
+
+func (d DataOtherTimeOutHandler) getResponse() interface{} {
+	return d.resp
+}
+
+func (d DataOtherTimeOutHandler) getRequest() interface{} {
+	return d.req
+}
+
+func (d DataOtherTimeOutHandler) run() {
+	rate := d.req.Rate
+	err := db.UpdateAutoDefaultRate(d.ctx, rate, 16)
+	if err != nil {
+		logrus.WithContext(d.ctx).Errorf("[DataOtherNotUploadHandler] error UpdateAutoDefaultRate, err:%+v", err)
+		util.HandlerPackErrorResp(d.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	d.resp.Message = "已更新自报价、固定稿费类型的数据违约超时未上传的扣款比率"
+}
+
+func (d DataOtherTimeOutHandler) checkParam() error {
+	return nil
+}
+
+func newDataOtherTimeOutHandler(ctx *gin.Context) *DataOtherTimeOutHandler {
+	return &DataOtherTimeOutHandler{
+		ctx:  ctx,
+		req:  http_model.NewDataOtherTimeOutRequest(),
+		resp: http_model.NewDataOtherTimeOutResponse(),
+	}
+}

+ 56 - 0
handler/operate/dataReplaceNotUpload.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapDataReplaceNotUploadHandler(ctx *gin.Context) {
+	handler := newDataReplaceNotUploadHandler(ctx)
+	BaseRun(handler)
+}
+
+type DataReplaceNotUploadHandler struct {
+	ctx  *gin.Context
+	req  *http_model.DataReplaceNotUploadRequest
+	resp *http_model.CommonResponse
+}
+
+func (d DataReplaceNotUploadHandler) getContext() *gin.Context {
+	return d.ctx
+}
+
+func (d DataReplaceNotUploadHandler) getResponse() interface{} {
+	return d.resp
+}
+
+func (d DataReplaceNotUploadHandler) getRequest() interface{} {
+	return d.req
+}
+
+func (d DataReplaceNotUploadHandler) run() {
+	rate := d.req.Rate
+	err := db.UpdateAutoDefaultRate(d.ctx, rate, 13)
+	if err != nil {
+		logrus.WithContext(d.ctx).Errorf("[DataReplaceNotUploadHandler] error UpdateAutoDefaultRate, err:%+v", err)
+		util.HandlerPackErrorResp(d.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	d.resp.Message = "已更新产品置换类型的数据违约未上传的扣款比率"
+}
+
+func (d DataReplaceNotUploadHandler) checkParam() error {
+	return nil
+}
+
+func newDataReplaceNotUploadHandler(ctx *gin.Context) *DataReplaceNotUploadHandler {
+	return &DataReplaceNotUploadHandler{
+		ctx:  ctx,
+		req:  http_model.NewDataReplaceNotUploadRequest(),
+		resp: http_model.NewDataReplaceNotUploadResponse(),
+	}
+}

+ 56 - 0
handler/operate/dataReplaceTimeOut.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapDataReplaceTimeOutHandler(ctx *gin.Context) {
+	handler := newDataReplaceTimeOutHandler(ctx)
+	BaseRun(handler)
+}
+
+type DataReplaceTimeOutHandler struct {
+	ctx  *gin.Context
+	req  *http_model.DataReplaceTimeOutRequest
+	resp *http_model.CommonResponse
+}
+
+func (d DataReplaceTimeOutHandler) getContext() *gin.Context {
+	return d.ctx
+}
+
+func (d DataReplaceTimeOutHandler) getResponse() interface{} {
+	return d.resp
+}
+
+func (d DataReplaceTimeOutHandler) getRequest() interface{} {
+	return d.req
+}
+
+func (d DataReplaceTimeOutHandler) run() {
+	rate := d.req.Rate
+	err := db.UpdateAutoDefaultRate(d.ctx, rate, 14)
+	if err != nil {
+		logrus.WithContext(d.ctx).Errorf("[DataReplaceTimeOutHandler] error UpdateAutoDefaultRate, err:%+v", err)
+		util.HandlerPackErrorResp(d.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	d.resp.Message = "已更新产品置换类型的数据违约超时未上传的扣款比率"
+}
+
+func (d DataReplaceTimeOutHandler) checkParam() error {
+	return nil
+}
+
+func newDataReplaceTimeOutHandler(ctx *gin.Context) *DataReplaceTimeOutHandler {
+	return &DataReplaceTimeOutHandler{
+		ctx:  ctx,
+		req:  http_model.NewDataReplaceTimeOutRequest(),
+		resp: http_model.NewDataReplaceTimeOutResponse(),
+	}
+}

+ 56 - 0
handler/operate/draft_default_in_mv.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapDraftDefaultInMvHandler(ctx *gin.Context) {
+	handler := newDraftDefaultInMvHandler(ctx)
+	BaseRun(handler)
+}
+
+type draftDefaultInMv struct {
+	req  *http_model.DraftDefaultInMvRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (d draftDefaultInMv) getContext() *gin.Context {
+	return d.ctx
+}
+
+func (d draftDefaultInMv) getResponse() interface{} {
+	return d.resp
+}
+
+func (d draftDefaultInMv) getRequest() interface{} {
+	return d.req
+}
+
+func (d draftDefaultInMv) run() {
+	time := d.req.Time
+	err := db.UpdateAutoTaskTime(d.ctx, time, 9)
+	if err != nil {
+		logrus.WithContext(d.ctx).Errorf("[draftDefaultInMv] error draftDefaultInMv, err:%+v", err)
+		util.HandlerPackErrorResp(d.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	d.resp.Message = "已启动视频初稿违约自动处理服务"
+}
+
+func (d draftDefaultInMv) checkParam() error {
+	return nil
+}
+
+func newDraftDefaultInMvHandler(ctx *gin.Context) *draftDefaultInMv {
+	return &draftDefaultInMv{
+		ctx:  ctx,
+		req:  http_model.NewDraftDefaultInMvRequest(),
+		resp: http_model.NewDraftDefaultInMvResponse(),
+	}
+}

+ 57 - 0
handler/operate/draft_default_in_pic.go

@@ -0,0 +1,57 @@
+package operate
+
+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 WrapDraftDefaultInPicHandler(ctx *gin.Context) {
+	handler := newDraftDefaultInPicHandler(ctx)
+	BaseRun(handler)
+}
+
+type draftDefaultInPic struct {
+	req  *http_model.DraftDefaultInPicRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (d draftDefaultInPic) getContext() *gin.Context {
+	return d.ctx
+}
+
+func (d draftDefaultInPic) getResponse() interface{} {
+	return d.resp
+}
+
+func (d draftDefaultInPic) getRequest() interface{} {
+	return d.req
+}
+
+func (d draftDefaultInPic) run() {
+	time := d.req.Time
+	err := db.UpdateAutoTaskTime(d.ctx, time, 8)
+	if err != nil {
+		logrus.WithContext(d.ctx).Errorf("[draftDefaultInPic] error draftDefaultInPic, err:%+v", err)
+		util.HandlerPackErrorResp(d.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	d.resp.Message = "已启动图片初稿违约自动处理服务"
+}
+
+func (d draftDefaultInPic) checkParam() error {
+	return nil
+}
+
+func newDraftDefaultInPicHandler(ctx *gin.Context) *draftDefaultInPic {
+	return &draftDefaultInPic{
+		ctx:  ctx,
+		req:  http_model.NewDraftDefaultInPicRequest(),
+		resp: http_model.NewDraftDefaultInPicResponse(),
+	}
+
+}

+ 55 - 0
handler/operate/get_sketch_info_by_taskid.go

@@ -0,0 +1,55 @@
+package operate
+
+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 WrapGetSketchInfoByTaskIdHandler(ctx *gin.Context) {
+	handler := newGetSketchInfoByTaskId(ctx)
+	BaseRun(handler)
+}
+
+type GetSketchInfoByTaskId struct {
+	ctx  *gin.Context
+	req  *http_model.GetSketchInfoByTaskIdRequest
+	resp *http_model.CommonResponse
+}
+
+func (g GetSketchInfoByTaskId) getContext() *gin.Context {
+	return g.ctx
+}
+
+func (g GetSketchInfoByTaskId) getResponse() interface{} {
+	return g.resp
+}
+
+func (g GetSketchInfoByTaskId) getRequest() interface{} {
+	return g.req
+}
+
+func (g GetSketchInfoByTaskId) run() {
+	data, err := db.GetSketchInfoByTaskId(g.ctx, g.req)
+	if err != nil {
+		logrus.WithContext(g.ctx).Errorf("[caseCloseDefaultHandler] error AutoCaseCloseDefault, err:%+v", err)
+		util.HandlerPackErrorResp(g.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	g.resp.Data = data
+}
+
+func (g GetSketchInfoByTaskId) checkParam() error {
+	return nil
+}
+
+func newGetSketchInfoByTaskId(ctx *gin.Context) *GetSketchInfoByTaskId {
+	return &GetSketchInfoByTaskId{
+		ctx:  ctx,
+		req:  http_model.NewGetSketchInfoByTaskIdRequest(),
+		resp: http_model.NewGetSketchInfoByTaskIdResponse(),
+	}
+}

+ 56 - 0
handler/operate/invalid.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapInvalidHandler(ctx *gin.Context) {
+	handler := newInvalidHandler(ctx)
+	BaseRun(handler)
+}
+
+type invalidHandler struct {
+	req  *http_model.InvalidRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (i invalidHandler) getContext() *gin.Context {
+	return i.ctx
+}
+
+func (i invalidHandler) getResponse() interface{} {
+	return i.resp
+}
+
+func (i invalidHandler) getRequest() interface{} {
+	return i.req
+}
+
+func (i invalidHandler) run() {
+	time := i.req.Time
+	err := db.UpdateAutoTaskTime(i.ctx, time, 7)
+	if err != nil {
+		logrus.WithContext(i.ctx).Errorf("[invalidHandler] error invalid, err:%+v", err)
+		util.HandlerPackErrorResp(i.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	i.resp.Message = "已启动失效自动处理服务"
+}
+
+func (i invalidHandler) checkParam() error {
+	return nil
+}
+
+func newInvalidHandler(ctx *gin.Context) *invalidHandler {
+	return &invalidHandler{
+		ctx:  ctx,
+		req:  http_model.NewInvalidRequest(),
+		resp: http_model.NewInvalidResponse(),
+	}
+}

+ 56 - 0
handler/operate/linkOtherNotUpload.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapLinkOtherNotUploadHandler(ctx *gin.Context) {
+	handler := newLinkOtherNotUploadHandler(ctx)
+	BaseRun(handler)
+}
+
+type LinkOtherNotUploadHandler struct {
+	ctx  *gin.Context
+	req  *http_model.LinkOtherNotUploadRequest
+	resp *http_model.CommonResponse
+}
+
+func (l LinkOtherNotUploadHandler) getContext() *gin.Context {
+	return l.ctx
+}
+
+func (l LinkOtherNotUploadHandler) getResponse() interface{} {
+	return l.resp
+}
+
+func (l LinkOtherNotUploadHandler) getRequest() interface{} {
+	return l.req
+}
+
+func (l LinkOtherNotUploadHandler) run() {
+	rate := l.req.Rate
+	err := db.UpdateAutoDefaultRate(l.ctx, rate, 11)
+	if err != nil {
+		logrus.WithContext(l.ctx).Errorf("[LinkOtherNotUploadHandler] error UpdateAutoDefaultRate, err:%+v", err)
+		util.HandlerPackErrorResp(l.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	l.resp.Message = "已更新自报价、固定稿费类型的链接违约未上传的扣款比率"
+}
+
+func (l LinkOtherNotUploadHandler) checkParam() error {
+	return nil
+}
+
+func newLinkOtherNotUploadHandler(ctx *gin.Context) *LinkOtherNotUploadHandler {
+	return &LinkOtherNotUploadHandler{
+		ctx:  ctx,
+		req:  http_model.NewLinkOtherNotUploadRequest(),
+		resp: http_model.NewLinkOtherNotUploadResponse(),
+	}
+}

+ 56 - 0
handler/operate/linkOtherTimeOut.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapLinkOtherTimeOutHandler(ctx *gin.Context) {
+	handler := newLinkOtherTimeOutHandler(ctx)
+	BaseRun(handler)
+}
+
+type LinkOtherTimeOutHandler struct {
+	ctx  *gin.Context
+	req  *http_model.LinkOtherTimeOutRequest
+	resp *http_model.CommonResponse
+}
+
+func (l LinkOtherTimeOutHandler) getContext() *gin.Context {
+	return l.ctx
+}
+
+func (l LinkOtherTimeOutHandler) getResponse() interface{} {
+	return l.resp
+}
+
+func (l LinkOtherTimeOutHandler) getRequest() interface{} {
+	return l.req
+}
+
+func (l LinkOtherTimeOutHandler) run() {
+	rate := l.req.Rate
+	err := db.UpdateAutoDefaultRate(l.ctx, rate, 12)
+	if err != nil {
+		logrus.WithContext(l.ctx).Errorf("[LinkOtherTimeOutHandler] error UpdateAutoDefaultRate, err:%+v", err)
+		util.HandlerPackErrorResp(l.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	l.resp.Message = "已更新自报价、固定稿费类型的链接违约超时未上传的扣款比率"
+}
+
+func (l LinkOtherTimeOutHandler) checkParam() error {
+	return nil
+}
+
+func newLinkOtherTimeOutHandler(ctx *gin.Context) *LinkOtherTimeOutHandler {
+	return &LinkOtherTimeOutHandler{
+		ctx:  ctx,
+		req:  http_model.NewLinkOtherTimeOutRequest(),
+		resp: http_model.NewLinkOtherTimeOutResponse(),
+	}
+}

+ 56 - 0
handler/operate/linkReplaceNotUpload.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapLinkReplaceNotUploadHandler(ctx *gin.Context) {
+	handler := newLinkReplaceNotUploadHandler(ctx)
+	BaseRun(handler)
+}
+
+type LinkReplaceNotUploadHandler struct {
+	ctx  *gin.Context
+	req  *http_model.LinkReplaceNotUploadRequest
+	resp *http_model.CommonResponse
+}
+
+func (l LinkReplaceNotUploadHandler) getContext() *gin.Context {
+	return l.ctx
+}
+
+func (l LinkReplaceNotUploadHandler) getResponse() interface{} {
+	return l.resp
+}
+
+func (l LinkReplaceNotUploadHandler) getRequest() interface{} {
+	return l.req
+}
+
+func (l LinkReplaceNotUploadHandler) run() {
+	rate := l.req.Rate
+	err := db.UpdateAutoDefaultRate(l.ctx, rate, 9)
+	if err != nil {
+		logrus.WithContext(l.ctx).Errorf("[LinkReplaceNotUploadHandler] error UpdateAutoDefaultRate, err:%+v", err)
+		util.HandlerPackErrorResp(l.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	l.resp.Message = "已更新产品置换类型的链接违约未上传的扣款比率"
+}
+
+func (l LinkReplaceNotUploadHandler) checkParam() error {
+	return nil
+}
+
+func newLinkReplaceNotUploadHandler(ctx *gin.Context) *LinkReplaceNotUploadHandler {
+	return &LinkReplaceNotUploadHandler{
+		ctx:  ctx,
+		req:  http_model.NewLinkReplaceNotUploadRequest(),
+		resp: http_model.NewLinkReplaceNotUploadResponse(),
+	}
+}

+ 56 - 0
handler/operate/linkReplaceTimeOut.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapLinkReplaceTimeOutHandler(ctx *gin.Context) {
+	handler := newLinkReplaceTimeOutHandler(ctx)
+	BaseRun(handler)
+}
+
+type LinkReplaceTimeOutHandler struct {
+	ctx  *gin.Context
+	req  *http_model.LinkReplaceTimeOutRequest
+	resp *http_model.CommonResponse
+}
+
+func (l LinkReplaceTimeOutHandler) getContext() *gin.Context {
+	return l.ctx
+}
+
+func (l LinkReplaceTimeOutHandler) getResponse() interface{} {
+	return l.resp
+}
+
+func (l LinkReplaceTimeOutHandler) getRequest() interface{} {
+	return l.req
+}
+
+func (l LinkReplaceTimeOutHandler) run() {
+	rate := l.req.Rate
+	err := db.UpdateAutoDefaultRate(l.ctx, rate, 10)
+	if err != nil {
+		logrus.WithContext(l.ctx).Errorf("[LinkReplaceTimeOutHandler] error UpdateAutoDefaultRate, err:%+v", err)
+		util.HandlerPackErrorResp(l.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	l.resp.Message = "已更新产品置换类型的链接违约超时未上传的扣款比率"
+}
+
+func (l LinkReplaceTimeOutHandler) checkParam() error {
+	return nil
+}
+
+func newLinkReplaceTimeOutHandler(ctx *gin.Context) *LinkReplaceTimeOutHandler {
+	return &LinkReplaceTimeOutHandler{
+		ctx:  ctx,
+		req:  http_model.NewLinkReplaceTimeOutRequest(),
+		resp: http_model.NewLinkReplaceTimeOutResponse(),
+	}
+}

+ 56 - 0
handler/operate/link_breach.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapLinkBreachHandler(ctx *gin.Context) {
+	handler := newLinkBreachHandler(ctx)
+	BaseRun(handler)
+}
+
+type linkBreachHandler struct {
+	req  *http_model.LinkBreachRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (l linkBreachHandler) getContext() *gin.Context {
+	return l.ctx
+}
+
+func (l linkBreachHandler) getResponse() interface{} {
+	return l.resp
+}
+
+func (l linkBreachHandler) getRequest() interface{} {
+	return l.req
+}
+
+func (l linkBreachHandler) run() {
+	time := l.req.Time
+	err := db.UpdateAutoTaskTime(l.ctx, time, 11)
+	if err != nil {
+		logrus.WithContext(l.ctx).Errorf("[linkBreachHandler] error AutoLinkBreach, err:%+v", err)
+		util.HandlerPackErrorResp(l.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	l.resp.Message = "已启动链接违约自动处理服务"
+}
+
+func (l linkBreachHandler) checkParam() error {
+	return nil
+}
+
+func newLinkBreachHandler(ctx *gin.Context) *linkBreachHandler {
+	return &linkBreachHandler{
+		req:  http_model.NewLinkBreachRequest(),
+		resp: http_model.NewLinkBreachResponse(),
+		ctx:  ctx,
+	}
+}

+ 56 - 0
handler/operate/post_review.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapPostReviewHandler(ctx *gin.Context) {
+	handler := newPostReviewHandler(ctx)
+	BaseRun(handler)
+}
+
+type postReviewHandler struct {
+	req  *http_model.PostReviewRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (p postReviewHandler) getContext() *gin.Context {
+	return p.ctx
+}
+
+func (p postReviewHandler) getResponse() interface{} {
+	return p.resp
+}
+
+func (p postReviewHandler) getRequest() interface{} {
+	return p.req
+}
+
+func (p postReviewHandler) run() {
+	time := p.req.Time
+	err := db.UpdateAutoTaskTime(p.ctx, time, 5)
+	if err != nil {
+		logrus.WithContext(p.ctx).Errorf("[postReviewHandler] error postReview, err:%+v", err)
+		util.HandlerPackErrorResp(p.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	p.resp.Message = "已启动发布审核自动处理服务"
+}
+
+func (p postReviewHandler) checkParam() error {
+	return nil
+}
+
+func newPostReviewHandler(ctx *gin.Context) *postReviewHandler {
+	return &postReviewHandler{
+		ctx:  ctx,
+		req:  http_model.NewPostReviewRequest(),
+		resp: http_model.NewPostReviewResponse(),
+	}
+}

+ 56 - 0
handler/operate/scriptOtherNotUpload.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapScriptOtherNotUploadHandler(ctx *gin.Context) {
+	handler := newScriptOtherNotUploadHandler(ctx)
+	BaseRun(handler)
+}
+
+type ScriptOtherNotUploadHandler struct {
+	ctx  *gin.Context
+	req  *http_model.ScriptOtherNotUploadRequest
+	resp *http_model.CommonResponse
+}
+
+func (s ScriptOtherNotUploadHandler) getContext() *gin.Context {
+	return s.ctx
+}
+
+func (s ScriptOtherNotUploadHandler) getResponse() interface{} {
+	return s.resp
+}
+
+func (s ScriptOtherNotUploadHandler) getRequest() interface{} {
+	return s.req
+}
+
+func (s ScriptOtherNotUploadHandler) run() {
+	rate := s.req.Rate
+	err := db.UpdateAutoDefaultRate(s.ctx, rate, 7)
+	if err != nil {
+		logrus.WithContext(s.ctx).Errorf("[ScriptOtherNotUploadHandler] error UpdateAutoDefaultRate, err:%+v", err)
+		util.HandlerPackErrorResp(s.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	s.resp.Message = "已更新自报价、固定稿费类型的脚本违约未上传的扣款比率"
+}
+
+func (s ScriptOtherNotUploadHandler) checkParam() error {
+	return nil
+}
+
+func newScriptOtherNotUploadHandler(ctx *gin.Context) *ScriptOtherNotUploadHandler {
+	return &ScriptOtherNotUploadHandler{
+		ctx:  ctx,
+		req:  http_model.NewScriptOtherNotUploadRequest(),
+		resp: http_model.NewScriptOtherNotUploadResponse(),
+	}
+}

+ 56 - 0
handler/operate/scriptOtherTimeOut.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapScriptOtherTimeOutHandler(ctx *gin.Context) {
+	handler := newScriptOtherTimeOutHandler(ctx)
+	BaseRun(handler)
+}
+
+type ScriptOtherTimeOutHandler struct {
+	ctx  *gin.Context
+	req  *http_model.ScriptOtherTimeOutRequest
+	resp *http_model.CommonResponse
+}
+
+func (s ScriptOtherTimeOutHandler) getContext() *gin.Context {
+	return s.ctx
+}
+
+func (s ScriptOtherTimeOutHandler) getResponse() interface{} {
+	return s.resp
+}
+
+func (s ScriptOtherTimeOutHandler) getRequest() interface{} {
+	return s.req
+}
+
+func (s ScriptOtherTimeOutHandler) run() {
+	rate := s.req.Rate
+	err := db.UpdateAutoDefaultRate(s.ctx, rate, 8)
+	if err != nil {
+		logrus.WithContext(s.ctx).Errorf("[ScriptOtherTimeOutHandler] error UpdateAutoDefaultRate, err:%+v", err)
+		util.HandlerPackErrorResp(s.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	s.resp.Message = "已更新自报价、固定稿费类型的脚本违约未上传的扣款比率"
+}
+
+func (s ScriptOtherTimeOutHandler) checkParam() error {
+	return nil
+}
+
+func newScriptOtherTimeOutHandler(ctx *gin.Context) *ScriptOtherTimeOutHandler {
+	return &ScriptOtherTimeOutHandler{
+		ctx:  ctx,
+		req:  http_model.NewScriptOtherTimeOutRequest(),
+		resp: http_model.NewScriptOtherTimeOutResponse(),
+	}
+}

+ 56 - 0
handler/operate/scriptReplaceNotUpload.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapScriptReplaceNotUploadHandler(ctx *gin.Context) {
+	handler := newScriptReplaceNotUploadHandler(ctx)
+	BaseRun(handler)
+}
+
+type ScriptReplaceNotUploadHandler struct {
+	ctx  *gin.Context
+	req  *http_model.ScriptReplaceNotUploadRequest
+	resp *http_model.CommonResponse
+}
+
+func (s ScriptReplaceNotUploadHandler) getContext() *gin.Context {
+	return s.ctx
+}
+
+func (s ScriptReplaceNotUploadHandler) getResponse() interface{} {
+	return s.resp
+}
+
+func (s ScriptReplaceNotUploadHandler) getRequest() interface{} {
+	return s.req
+}
+
+func (s ScriptReplaceNotUploadHandler) run() {
+	rate := s.req.Rate
+	err := db.UpdateAutoDefaultRate(s.ctx, rate, 5)
+	if err != nil {
+		logrus.WithContext(s.ctx).Errorf("[ScriptReplaceNotUploadHandler] error UpdateAutoDefaultRate, err:%+v", err)
+		util.HandlerPackErrorResp(s.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	s.resp.Message = "已更新产品置换类型的脚本违约未上传的扣款比率"
+}
+
+func (s ScriptReplaceNotUploadHandler) checkParam() error {
+	return nil
+}
+
+func newScriptReplaceNotUploadHandler(ctx *gin.Context) *ScriptReplaceNotUploadHandler {
+	return &ScriptReplaceNotUploadHandler{
+		ctx:  ctx,
+		req:  http_model.NewScriptReplaceNotUploadRequest(),
+		resp: http_model.NewScriptReplaceNotUploadResponse(),
+	}
+}

+ 56 - 0
handler/operate/scriptReplaceTimeOut.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapScriptReplaceTimeOutHandler(ctx *gin.Context) {
+	handler := newScriptReplaceTimeOutHandler(ctx)
+	BaseRun(handler)
+}
+
+type ScriptReplaceTimeOutHandler struct {
+	ctx  *gin.Context
+	req  *http_model.ScriptReplaceTimeOutRequest
+	resp *http_model.CommonResponse
+}
+
+func (s ScriptReplaceTimeOutHandler) getContext() *gin.Context {
+	return s.ctx
+}
+
+func (s ScriptReplaceTimeOutHandler) getResponse() interface{} {
+	return s.resp
+}
+
+func (s ScriptReplaceTimeOutHandler) getRequest() interface{} {
+	return s.req
+}
+
+func (s ScriptReplaceTimeOutHandler) run() {
+	rate := s.req.Rate
+	err := db.UpdateAutoDefaultRate(s.ctx, rate, 6)
+	if err != nil {
+		logrus.WithContext(s.ctx).Errorf("[ScriptReplaceTimeOutHandler] error UpdateAutoDefaultRate, err:%+v", err)
+		util.HandlerPackErrorResp(s.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	s.resp.Message = "已更新产品置换类型的脚本违约超时未上传的扣款比率"
+}
+
+func (s ScriptReplaceTimeOutHandler) checkParam() error {
+	return nil
+}
+
+func newScriptReplaceTimeOutHandler(ctx *gin.Context) *ScriptReplaceTimeOutHandler {
+	return &ScriptReplaceTimeOutHandler{
+		ctx:  ctx,
+		req:  http_model.NewScriptReplaceTimeOutRequest(),
+		resp: http_model.NewScriptReplaceTimeOutResponse(),
+	}
+}

+ 56 - 0
handler/operate/script_deafult.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapScriptDefaultHandler(ctx *gin.Context) {
+	handler := newScriptDefaultHandler(ctx)
+	BaseRun(handler)
+}
+
+type scriptDefaultHandler struct {
+	req  *http_model.ScriptDefaultRequest
+	resp *http_model.CommonResponse
+	ctx  *gin.Context
+}
+
+func (s scriptDefaultHandler) getContext() *gin.Context {
+	return s.ctx
+}
+
+func (s scriptDefaultHandler) getResponse() interface{} {
+	return s.resp
+}
+
+func (s scriptDefaultHandler) getRequest() interface{} {
+	return s.req
+}
+
+func (s scriptDefaultHandler) run() {
+	time := s.req.Time
+	err := db.UpdateAutoTaskTime(s.ctx, time, 10)
+	if err != nil {
+		logrus.WithContext(s.ctx).Errorf("[scriptDefaultHandler] error AutoScriptDefault, err:%+v", err)
+		util.HandlerPackErrorResp(s.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	s.resp.Message = "已启动脚本违约自动处理服务"
+}
+
+func (s scriptDefaultHandler) checkParam() error {
+	return nil
+}
+
+func newScriptDefaultHandler(ctx *gin.Context) *scriptDefaultHandler {
+	return &scriptDefaultHandler{
+		ctx:  ctx,
+		req:  http_model.NewScriptDefaultRequest(),
+		resp: http_model.NewScriptDefaultResponse(),
+	}
+}

+ 56 - 0
handler/operate/sketchOtherNotUpload.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapSketchOtherNotUploadHandler(ctx *gin.Context) {
+	handler := newSketchOtherNotUploadHandler(ctx)
+	BaseRun(handler)
+}
+
+type SketchOtherNotUploadHandler struct {
+	ctx  *gin.Context
+	req  *http_model.SketchOtherNotUploadRequest
+	resp *http_model.CommonResponse
+}
+
+func (s SketchOtherNotUploadHandler) getContext() *gin.Context {
+	return s.ctx
+}
+
+func (s SketchOtherNotUploadHandler) getResponse() interface{} {
+	return s.resp
+}
+
+func (s SketchOtherNotUploadHandler) getRequest() interface{} {
+	return s.req
+}
+
+func (s SketchOtherNotUploadHandler) run() {
+	rate := s.req.Rate
+	err := db.UpdateAutoDefaultRate(s.ctx, rate, 3)
+	if err != nil {
+		logrus.WithContext(s.ctx).Errorf("[ScriptOtherNotUploadHandler] error UpdateAutoDefaultRate, err:%+v", err)
+		util.HandlerPackErrorResp(s.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	s.resp.Message = "已更新自报价、固定稿费类型的初稿违约未上传的扣款比率"
+}
+
+func (s SketchOtherNotUploadHandler) checkParam() error {
+	return nil
+}
+
+func newSketchOtherNotUploadHandler(ctx *gin.Context) *SketchOtherNotUploadHandler {
+	return &SketchOtherNotUploadHandler{
+		ctx:  ctx,
+		req:  http_model.NewSketchOtherNotUploadRequest(),
+		resp: http_model.NewSketchOtherNotUploadResponse(),
+	}
+}

+ 56 - 0
handler/operate/sketchOtherTimeOut.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapSketchOtherTimeOutHandler(ctx *gin.Context) {
+	handler := newSketchOtherTimeOutHandler(ctx)
+	BaseRun(handler)
+}
+
+type SketchOtherTimeOutHandler struct {
+	ctx  *gin.Context
+	req  *http_model.SketchOtherTimeOutRequest
+	resp *http_model.CommonResponse
+}
+
+func (s SketchOtherTimeOutHandler) getContext() *gin.Context {
+	return s.ctx
+}
+
+func (s SketchOtherTimeOutHandler) getResponse() interface{} {
+	return s.resp
+}
+
+func (s SketchOtherTimeOutHandler) getRequest() interface{} {
+	return s.req
+}
+
+func (s SketchOtherTimeOutHandler) run() {
+	rate := s.req.Rate
+	err := db.UpdateAutoDefaultRate(s.ctx, rate, 4)
+	if err != nil {
+		logrus.WithContext(s.ctx).Errorf("[SketchOtherTimeOutHandler] error UpdateAutoDefaultRate, err:%+v", err)
+		util.HandlerPackErrorResp(s.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	s.resp.Message = "已更新自报价、固定稿费类型的初稿违约未上传的扣款比率"
+}
+
+func (s SketchOtherTimeOutHandler) checkParam() error {
+	return nil
+}
+
+func newSketchOtherTimeOutHandler(ctx *gin.Context) *SketchOtherTimeOutHandler {
+	return &SketchOtherTimeOutHandler{
+		ctx:  ctx,
+		req:  http_model.NewSketchOtherTimeOutRequest(),
+		resp: http_model.NewSketchOtherTimeOutResponse(),
+	}
+}

+ 56 - 0
handler/operate/sketchReplaceNotUpload.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapSketchReplaceNotUploadHandler(ctx *gin.Context) {
+	handler := newSketchReplaceNotUploadHandler(ctx)
+	BaseRun(handler)
+}
+
+type SketchReplaceNotUploadHandler struct {
+	ctx  *gin.Context
+	req  *http_model.SketchReplaceNotUploadRequest
+	resp *http_model.CommonResponse
+}
+
+func (s SketchReplaceNotUploadHandler) getContext() *gin.Context {
+	return s.ctx
+}
+
+func (s SketchReplaceNotUploadHandler) getResponse() interface{} {
+	return s.resp
+}
+
+func (s SketchReplaceNotUploadHandler) getRequest() interface{} {
+	return s.req
+}
+
+func (s SketchReplaceNotUploadHandler) run() {
+	rate := s.req.Rate
+	err := db.UpdateAutoDefaultRate(s.ctx, rate, 1)
+	if err != nil {
+		logrus.WithContext(s.ctx).Errorf("[SketchReplaceNotUploadHandler] error UpdateAutoDefaultRate, err:%+v", err)
+		util.HandlerPackErrorResp(s.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	s.resp.Message = "已更新产品置换类型的初稿违约未上传的扣款比率"
+}
+
+func (s SketchReplaceNotUploadHandler) checkParam() error {
+	return nil
+}
+
+func newSketchReplaceNotUploadHandler(ctx *gin.Context) *SketchReplaceNotUploadHandler {
+	return &SketchReplaceNotUploadHandler{
+		ctx:  ctx,
+		req:  http_model.NewSketchReplaceNotUploadRequest(),
+		resp: http_model.NewSketchReplaceNotUploadResponse(),
+	}
+}

+ 56 - 0
handler/operate/sketchReplaceTimeOut.go

@@ -0,0 +1,56 @@
+package operate
+
+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 WrapSketchReplaceTimeOutHandler(ctx *gin.Context) {
+	handler := newSketchReplaceTimeOutHandler(ctx)
+	BaseRun(handler)
+}
+
+type SketchReplaceTimeOutHandler struct {
+	ctx  *gin.Context
+	req  *http_model.SketchReplaceTimeOutRequest
+	resp *http_model.CommonResponse
+}
+
+func (s SketchReplaceTimeOutHandler) getContext() *gin.Context {
+	return s.ctx
+}
+
+func (s SketchReplaceTimeOutHandler) getResponse() interface{} {
+	return s.resp
+}
+
+func (s SketchReplaceTimeOutHandler) getRequest() interface{} {
+	return s.req
+}
+
+func (s SketchReplaceTimeOutHandler) run() {
+	rate := s.req.Rate
+	err := db.UpdateAutoDefaultRate(s.ctx, rate, 2)
+	if err != nil {
+		logrus.WithContext(s.ctx).Errorf("[SketchReplaceNotUploadHandler] error UpdateAutoDefaultRate, err:%+v", err)
+		util.HandlerPackErrorResp(s.resp, consts.ErrorInternal, consts.DefaultToast)
+		return
+	}
+	s.resp.Message = "已更新产品置换类型的初稿超时未上传的扣款比率"
+}
+
+func (s SketchReplaceTimeOutHandler) checkParam() error {
+	return nil
+}
+
+func newSketchReplaceTimeOutHandler(ctx *gin.Context) *SketchReplaceTimeOutHandler {
+	return &SketchReplaceTimeOutHandler{
+		ctx:  ctx,
+		req:  http_model.NewSketchReplaceTimeOutRequest(),
+		resp: http_model.NewSketchReplaceTimeOutResponse(),
+	}
+}

+ 67 - 0
handler/withdrawalRecords.go

@@ -0,0 +1,67 @@
+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(),
+	}
+}

+ 6 - 0
main.go

@@ -3,8 +3,10 @@ package main
 import (
 	"fmt"
 	"github.com/gin-gonic/gin"
+	log "github.com/sirupsen/logrus"
 	"youngee_m_api/config"
 	"youngee_m_api/route"
+	"youngee_m_api/service"
 )
 
 func main() {
@@ -12,5 +14,9 @@ func main() {
 	route.InitRoute(r)
 	config := config.Init()
 	addr := fmt.Sprintf("%v:%v", config.Host, config.Port)
+	err := service.AutoTask()
+	if err != nil {
+		log.Println("service AutoTask error:", err)
+	}
 	r.Run(addr)
 }

+ 8 - 0
model/common_model/WithdrawRecordsCondition.go

@@ -0,0 +1,8 @@
+package common_model
+
+type WithdrawRecordsCondition struct {
+	TalentId   string `condition:"talent_id"`   // 达人ID
+	Status     int32  `condition:"status"`      //提现状态
+	SubmitAt   string `condition:"submit_at"`   // 申请提交时间
+	WithdrawAt string `condition:"withdraw_at"` // 申请提交时间
+}

+ 6 - 0
model/common_model/breach_handled_conditions.go

@@ -0,0 +1,6 @@
+package common_model
+
+type BreachHandledConditions struct {
+	HandleResult    int32 `condition:"default_status"` // 处理结果
+	TerminateReason int32 `condition:"break_type"`     // 解约原因
+}

+ 27 - 0
model/gorm_model/auto_default_handle.go

@@ -0,0 +1,27 @@
+package gorm_model
+
+// Code generated by sql2gorm. DO NOT EDIT.
+
+type InfoAutoDefaultHandle struct {
+	AutoDefaultID          int `gorm:"column:auto_default_id;primary_key;AUTO_INCREMENT"` // 自动处理规则id
+	SketchReplaceNotUpload int `gorm:"column:sketch_replace_not_upload"`                  // 初稿违约 产品置换 未上传初稿
+	SketchReplaceTimeOut   int `gorm:"column:sketch_replace_time_out"`                    // 初稿违约 产品置换 超时未上传初稿
+	SketchOtherNotUpload   int `gorm:"column:sketch_other_not_upload"`                    // 初稿违约 自报价、固定稿费 未上传初稿
+	SketchOtherTimeOut     int `gorm:"column:sketch_other_time_out"`                      // 初稿违约 自报价、固定稿费 超时未上传初稿
+	ScriptReplaceNotUpload int `gorm:"column:script_replace_not_upload"`                  // 脚本违约 产品置换 未上传脚本
+	ScriptReplaceTimeOut   int `gorm:"column:script_replace_time_out"`                    // 脚本违约 产品置换 超时未上传脚本
+	ScriptOtherNotUpload   int `gorm:"column:script_other_not_upload"`                    // 脚本违约 自报价、固定稿费 未上传脚本
+	ScriptOtherTimeOut     int `gorm:"column:script_other_time_out"`                      // 脚本违约 自报价、固定稿费 超时未上传脚本
+	LinkReplaceNotUpload   int `gorm:"column:link_replace_not_upload"`                    // 链接违约 产品置换 未上传链接
+	LinkReplaceTimeOut     int `gorm:"column:link_replace_time_out"`                      // 链接违约 产品置换 超时未上传链接
+	LinkOtherNotUpload     int `gorm:"column:link_other_not_upload"`                      // 链接违约 自报价、固定稿费 未上传链接
+	LinkOtherTimeOut       int `gorm:"column:link_other_time_out"`                        // 链接违约 自报价、固定稿费 超时未上传链接
+	DataReplaceNotUpload   int `gorm:"column:data_replace_not_upload"`                    // 数据违约 产品置换 未上传数据
+	DataReplaceTimeOut     int `gorm:"column:data_replace_time_out"`                      // 数据违约 产品置换 超时未上传数据
+	DataOtherNotUpload     int `gorm:"column:data_other_not_upload"`                      // 数据违约 自报价、固定稿费 未上传数据
+	DataOtherTimeOut       int `gorm:"column:data_other_time_out"`                        // 数据违约 自报价、固定稿费 超时未上传数据
+}
+
+func (m *InfoAutoDefaultHandle) TableName() string {
+	return "info_auto_default_handle"
+}

+ 23 - 0
model/gorm_model/auto_task.go

@@ -0,0 +1,23 @@
+package gorm_model
+
+// Code generated by sql2gorm. DO NOT EDIT.
+
+type InfoAutoTask struct {
+	AutoTaskID        int32 `gorm:"column:auto_task_id;primary_key;AUTO_INCREMENT"` // 自动处理规则id
+	SignInOffline     int32 `gorm:"column:sign_in_offline"`                         // 线下探店自动签收时间
+	SignInVirtual     int32 `gorm:"column:sign_in_virtual"`                         // 虚拟产品测评自动签收时间
+	ReviewInMv        int32 `gorm:"column:review_in_mv"`                            // 视频形式的审稿处理
+	ReviewUnlimited   int32 `gorm:"column:review_unlimited"`                        // 不限形式的审稿处理
+	Postreview        int32 `gorm:"column:postreview"`                              // 发布审核自动处理
+	CaseClose         int32 `gorm:"column:case_close"`                              // 结案自动处理
+	Invalid           int32 `gorm:"column:invalid"`                                 // 失效自动处理
+	DraftDefaultInPic int32 `gorm:"column:draft_default_in_pic"`                    // 图片初稿违约自动处理
+	DraftDefaultInMv  int32 `gorm:"column:draft_default_in_mv"`                     // 视频初稿违约自动处理
+	ScriptDefault     int32 `gorm:"column:script_default"`                          // 脚本违约自动处理
+	LinkBreach        int32 `gorm:"column:link_breach"`                             // 链接违约自动处理
+	CaseCloseDefault  int32 `gorm:"column:case_close_default"`                      // 结案违约自动处理
+}
+
+func (m *InfoAutoTask) TableName() string {
+	return "info_auto_task"
+}

+ 22 - 0
model/gorm_model/contract_info.go

@@ -0,0 +1,22 @@
+package gorm_model
+
+// Code generated by sql2gorm. DO NOT EDIT.
+
+import (
+	"time"
+)
+
+type YoungeeContractInfo struct {
+	ContractID       int        `gorm:"column:contract_id;primary_key;AUTO_INCREMENT"` // 合约id
+	TaskID           int        `gorm:"column:task_id;NOT NULL"`                       // 任务id
+	BreakType        int        `gorm:"column:break_type;NOT NULL"`                    // 违约类型(4类严重违约):1(脚本)2(初稿)3(链接)4(数据)
+	SettlementAmount float64    `gorm:"column:settlement_amount;NOT NULL"`             // 应结算金额
+	BreakAt          time.Time  `gorm:"column:break_at"`                               // 违约时间
+	HandleAt         *time.Time `gorm:"column:handle_at"`                              // 处理时间
+	TerminateAt      *time.Time `gorm:"column:terminate_at"`                           // 解约申请时间
+	DefaultStatus    int        `gorm:"column:default_status"`                         // 违约处理状态1-5分别表示为违约、已重新上传、解约待处理、解约已处理(驳回)、解约已处理(解约)
+}
+
+func (m *YoungeeContractInfo) TableName() string {
+	return "youngee_contract_info"
+}

+ 31 - 0
model/gorm_model/dataInfo.go

@@ -0,0 +1,31 @@
+package gorm_model
+
+// Code generated by sql2gorm. DO NOT EDIT.
+
+import (
+	"time"
+)
+
+type YounggeeDataInfo struct {
+	DataID          int       `gorm:"column:data_id;primary_key;AUTO_INCREMENT"` // 脚本id
+	TaskID          int       `gorm:"column:task_id;NOT NULL"`                   // 任务id
+	PlayNumber      int       `gorm:"column:play_number;NOT NULL"`               // 播放量/阅读量
+	LikeNumber      int       `gorm:"column:like_number;NOT NULL"`               // 点赞数
+	CommentNumber   int       `gorm:"column:comment_number;NOT NULL"`            // 评论数
+	CollectNumber   int       `gorm:"column:collect_number;NOT NULL"`            // 收藏数
+	PhotoUrl        string    `gorm:"column:photo_url;NOT NULL"`                 // 数据截图url
+	ReviseOpinion   string    `gorm:"column:revise_opinion"`                     // 审核意见
+	IsSubmit        int       `gorm:"column:is_submit;NOT NULL"`                 // 是否提交
+	IsReview        int       `gorm:"column:is_review;default:0;NOT NULL"`       // 是否审核
+	IsOk            int       `gorm:"column:is_ok;NOT NULL"`                     // 是否合格
+	CreateAt        time.Time `gorm:"column:create_at;NOT NULL"`                 // 创建时间
+	SubmitAt        time.Time `gorm:"column:submit_at"`                          // 提交时间
+	AgreeAt         time.Time `gorm:"column:agree_at"`                           // 同意时间
+	RejectAt        time.Time `gorm:"column:reject_at"`                          // 驳回时间
+	AutoAgreeAt     time.Time `gorm:"column:auto_agree_at"`                      // 结案自动处理时间
+	AutoDataBreakAt time.Time `gorm:"column:auto_data_break_at"`                 // 结案违约自动处理时间
+}
+
+func (m *YounggeeDataInfo) TableName() string {
+	return "younggee_data_info"
+}

+ 1 - 1
model/gorm_model/info_pricing_strategy.go

@@ -14,7 +14,7 @@ type InfoPricingStrategy struct {
 	FansLow       int64     `gorm:"column:fans_low;NOT NULL"`             // 对应粉丝量下限
 	FansUp        int64     `gorm:"column:fans_up;NOT NULL"`              // 对应粉丝量上限
 	ServiceCharge int64     `gorm:"column:service_charge"`                // 服务费,稿费形式为产品置换时填写,可以为空
-	BaseOffer     int64     `gorm:"column:base_offer"`                    // 基础报价
+	BaseOffer     float32   `gorm:"column:base_offer"`                    // 基础报价
 	Status        int64     `gorm:"column:status;NOT NULL"`               // 定价策略当前状态,0表示正常,1表示禁用
 	ServiceRate   int64     `gorm:"column:service_rate"`                  // 服务费率*1000,稿费形式为固定稿费和自报价时填写,可以为空
 	UpdateID      int64     `gorm:"column:update_id"`                     // 修改管理人员id,对应user表中主键

+ 30 - 0
model/gorm_model/linkInfo.go

@@ -0,0 +1,30 @@
+package gorm_model
+
+// Code generated by sql2gorm. DO NOT EDIT.
+
+import (
+	"time"
+)
+
+type YounggeeLinkInfo struct {
+	LinkID  int    `gorm:"column:link_id;primary_key;AUTO_INCREMENT"` // 链接id
+	TaskID  int    `gorm:"column:task_id;NOT NULL"`                   // 任务id
+	LinkUrl string `gorm:"column:link_url;NOT NULL"`                  // 上传链接url
+
+	PhotoUrl        string    `gorm:"column:photo_url;NOT NULL"`           // 上传截图url
+	ReviseOpinion   string    `gorm:"column:revise_opinion"`               // 审核意见
+	IsSubmit        int       `gorm:"column:is_submit;NOT NULL"`           // 是否提交
+	IsReview        int       `gorm:"column:is_review;default:0;NOT NULL"` // 是否审核
+	IsOk            int       `gorm:"column:is_ok;NOT NULL"`               // 是否合格
+	CreateAt        time.Time `gorm:"column:create_at"`                    // 创建时间
+	SubmitAt        time.Time `gorm:"column:submit_at"`                    // 提交时间
+	AgreeAt         time.Time `gorm:"column:agree_at"`                     // 同意时间
+	RejectAt        time.Time `gorm:"column:reject_at"`                    // 驳回时间
+	AutoAgreeAt     time.Time `gorm:"column:auto_agree_at"`                // 发布审核自动处理时间
+	AutoDataBreakAt time.Time `gorm:"column:auto_data_break_at"`           // 结案违约自动处理时间
+	AutoLinkBreakAt time.Time `gorm:"column:auto_link_break_at"`           // 链接违约自动处理时间
+}
+
+func (m *YounggeeLinkInfo) TableName() string {
+	return "younggee_link_info"
+}

+ 24 - 17
model/gorm_model/project.go

@@ -6,23 +6,30 @@ import (
 )
 
 type ProjectInfo struct {
-	ProjectID       int64     `gorm:"column:project_id;primary_key;AUTO_INCREMENT"` // 项目id
-	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    int64     `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"`                              // 稿费形式列表
+	ProjectID         int64     `gorm:"column:project_id;primary_key;AUTO_INCREMENT"` // 项目id
+	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      int64     `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        int       `gorm:"column:auto_task_id;NOT NULL"`                 // 定时任务id
+	AutoDefaultID     int       `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"`                  // 初稿违约自动处理时间
 }
 
 func (m *ProjectInfo) TableName() string {

+ 34 - 23
model/gorm_model/project_task.go

@@ -6,29 +6,40 @@ import (
 )
 
 type YoungeeTaskInfo struct {
-	TaskId                 int       `gorm:"column:task_id;type:int(11);primary_key;AUTO_INCREMENT;comment:任务id" json:"task_id"`
-	ProjectId              int       `gorm:"column:project_id;type:int(11);comment:项目id;NOT NULL" json:"project_id"`
-	TalentId               string    `gorm:"column:talent_id;type:varchar(25);comment:达人id;NOT NULL" json:"talent_id"`
-	AccountId              int       `gorm:"column:account_id;type:int(11);comment:账号id;NOT NULL" json:"account_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"`
-	StrategyId             int       `gorm:"column:strategy_id;type:int(11);comment:报名选择的招募策略id" json:"strategy_id"`
-	TaskReward             float64   `gorm:"column:task_reward;type:float;comment:达人报酬;NOT NULL" json:"task_reward"`
-	SettleAmount           float64   `gorm:"column:settle_amount;type:float;comment:达人实际所得(扣除违约扣款);NOT NULL" json:"settle_amount"`
-	AllPayment             float64   `gorm:"column:all_payment;type:float;comment:企业支付;NOT NULL" json:"all_payment"`
-	RealPayment            float64   `gorm:"column:real_payment;type:float;comment:企业实际支付(扣除违约扣款);NOT NULL" json:"real_payment"`
-	Penalty                int       `gorm:"column:penalty;type:int(11);comment:违约扣款比例,百分之;NOT NULL" json:"penalty"`
-	FeeForm                int       `gorm:"column:fee_form;type:tinyint(4);comment:稿费形式,1,2,3分别代表产品置换、固定稿费、自报价;NOT NULL" json:"fee_form"`
-	ServiceCharge          float64   `gorm:"column:service_charge;type:float;comment:服务费" json:"service_charge"`
-	ServiceRate            int       `gorm:"column:service_rate;type:int(11);comment:服务费率,千分之" json:"service_rate"`
-	TaskStatus             int       `gorm:"column:task_status;type:tinyint(4);default:1;comment:任务状态 1待选 2已选 3落选;NOT NULL" json:"task_status"`
-	TaskStage              int       `gorm:"column:task_stage;type:tinyint(1);comment:任务阶段;NOT NULL" json:"task_stage"`
-	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"`
-	CompleteStatus         int       `gorm:"column:complete_status;type:tinyint(1);default:1;comment:结束方式 1未结束 2正常结束 3反选失败 4被解约;NOT NULL" json:"complete_status"`
-	CompleteDate           time.Time `gorm:"column:complete_date;type:datetime;comment:结束时间" json:"complete_date"`
-	UpdateAt               time.Time `gorm:"column:update_at"` // 更新时间
+	TaskId                 int       `gorm:"column:task_id;primary_key;AUTO_INCREMENT"`             // 任务id
+	ProjectId              int       `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分别表示未违约、脚本超时违约、脚本未上传违约、初稿超时违约、初稿未上传违约、链接超时违约、链接未上传违约、数据超时违约、数据未上传违约
 }
 
 func (m *YoungeeTaskInfo) TableName() string {

+ 29 - 0
model/gorm_model/script_info.go

@@ -0,0 +1,29 @@
+package gorm_model
+
+// Code generated by sql2gorm. DO NOT EDIT.
+
+import (
+	"time"
+)
+
+type YounggeeScriptInfo struct {
+	ScriptID          int       `gorm:"column:script_id;primary_key;AUTO_INCREMENT"` // 脚本id
+	TaskID            int       `gorm:"column:task_id;NOT NULL"`                     // 任务id
+	Title             string    `gorm:"column:title;NOT NULL"`                       // 脚本标题
+	Content           string    `gorm:"column:content;NOT NULL"`                     // 脚本内容
+	ReviseOpinion     string    `gorm:"column:revise_opinion"`                       // 审核意见
+	IsSubmit          int       `gorm:"column:is_submit;NOT NULL"`                   // 是否提交
+	IsReview          int       `gorm:"column:is_review;default:0;NOT NULL"`         // 是否审核
+	IsOk              int       `gorm:"column:is_ok;NOT NULL"`                       // 是否合格
+	CreateAt          time.Time `gorm:"column:create_at"`                            // 创建时间
+	SubmitAt          time.Time `gorm:"column:submit_at"`                            // 提交时间
+	AgreeAt           time.Time `gorm:"column:agree_at"`                             // 同意时间
+	RejectAt          time.Time `gorm:"column:reject_at"`                            // 驳回时间
+	AutoAgreeAt       time.Time `gorm:"column:auto_agree_at"`                        // 脚本自动审核时间
+	AutoSketchBreakAt time.Time `gorm:"column:auto_sketch_break_at"`                 // 初稿违约自动处理时间
+	AutoScriptBreakAt time.Time `gorm:"column:auto_script_break_at"`                 // 脚本违约自动处理时间
+}
+
+func (m *YounggeeScriptInfo) TableName() string {
+	return "younggee_script_info"
+}

+ 30 - 0
model/gorm_model/sketch_info.go

@@ -0,0 +1,30 @@
+package gorm_model
+
+// Code generated by sql2gorm. DO NOT EDIT.
+
+import (
+	"time"
+)
+
+type YounggeeSketchInfo struct {
+	SketchID          int       `gorm:"column:sketch_id;primary_key;AUTO_INCREMENT"` // 初稿id
+	TaskID            int       `gorm:"column:task_id;NOT NULL"`                     // 任务id
+	Title             string    `gorm:"column:title"`                                // 标题
+	Type              int       `gorm:"column:type"`                                 // 初稿形式,1为图片,2为视频
+	Content           string    `gorm:"column:content"`                              // 正文
+	ReviseOpinion     string    `gorm:"column:revise_opinion"`                       // 反馈意见
+	IsSubmit          int       `gorm:"column:is_submit;NOT NULL"`                   // 是否提交
+	IsReview          int       `gorm:"column:is_review;default:0;NOT NULL"`         // 是否审核
+	IsOk              int       `gorm:"column:is_ok;NOT NULL"`                       // 是否合格
+	CreateAt          time.Time `gorm:"column:create_at;NOT NULL"`                   // 创建时间
+	AgreeAt           time.Time `gorm:"column:agree_at"`                             // 同意时间
+	RejectAt          time.Time `gorm:"column:reject_at"`                            // 驳回时间
+	SubmitAt          time.Time `gorm:"column:submit_at"`                            // 提交时间
+	AutoAgreeAt       time.Time `gorm:"column:auto_agree_at"`                        // 初稿自动审核时间
+	AutoLinkBreakAt   time.Time `gorm:"column:auto_link_break_at"`                   // 链接违约自动处理时间
+	AutoSketchBreakAt time.Time `gorm:"column:auto_sketch_break_at"`                 // 初稿违约自动处理时间
+}
+
+func (m *YounggeeSketchInfo) TableName() string {
+	return "younggee_sketch_info"
+}

+ 20 - 0
model/gorm_model/sketch_photo.go

@@ -0,0 +1,20 @@
+package gorm_model
+
+// Code generated by sql2gorm. DO NOT EDIT.
+
+import (
+	"time"
+)
+
+type YounggeeSketchPhoto struct {
+	ID       int       `gorm:"column:id;primary_key;AUTO_INCREMENT"` // 脚本id
+	SketchID int       `gorm:"column:sketch_id"`
+	PhotoUrl string    `gorm:"column:photo_url"`
+	PhotoUid string    `gorm:"column:photo_uid"`
+	Symbol   int       `gorm:"column:symbol"` // 1是图片,2是视频
+	CreateAt time.Time `gorm:"column:create_at"`
+}
+
+func (m *YounggeeSketchPhoto) TableName() string {
+	return "younggee_sketch_photo"
+}

+ 23 - 0
model/gorm_model/task_logistic.go

@@ -0,0 +1,23 @@
+// Package gorm_model Code gorm_model by sql2gorm. DO NOT EDIT.
+package gorm_model
+
+import (
+	"time"
+)
+
+type YoungeeTaskLogistics struct {
+	LogisticsID           int       `gorm:"column:logistics_id;primary_key;AUTO_INCREMENT"` // 货物-id
+	CompanyName           string    `gorm:"column:company_name"`                            // 实物商品-物流公司名称
+	LogisticsNumber       string    `gorm:"column:logistics_number"`                        // 实物商品-物流单号
+	ExplorestoreStarttime time.Time `gorm:"column:explorestore_starttime"`                  // 线下探店-探店开始时间
+	ExplorestoreEndtime   time.Time `gorm:"column:explorestore_endtime"`                    // 线下探店-探店结束时间
+	ExplorestorePeriod    string    `gorm:"column:explorestore_period"`                     // 线下探店-探店持续时间
+	CouponCodeInformation string    `gorm:"column:coupon_code_information"`                 // 虚拟产品-券码信息
+	TaskID                int       `gorm:"column:task_id;NOT NULL"`                        // 任务id
+	DeliveryTime          time.Time `gorm:"column:delivery_time"`                           // 发货时间
+	ThingsType            int       `gorm:"column:things_type;NOT NULL"`                    // 任务类型:1 实物,2:线下探店,3:虚拟产品
+	SignedTime            time.Time `gorm:"column:signed_time"`                             // 实物商品-签收时间
+	AutoSignAt            time.Time `gorm:"column:auto_sign_at"`                            // 自动签收时间
+	AutoScriptBreakAt     time.Time `gorm:"column:auto_script_break_at"`                    // 脚本违约自动处理时间
+	AutoSketchBreakAt     time.Time `gorm:"column:auto_sketch_break_at"`                    // 初稿违约自动处理时间
+}

+ 22 - 0
model/gorm_model/withdraw_info.go

@@ -0,0 +1,22 @@
+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 int64     `gorm:"column:withdraw_amount;NOT NULL"` // 提现金额
+	AmountPayable  int64     `gorm:"column:amount_payable;NOT NULL"`  // 应付金额
+	ReceiveInfo    string    `gorm:"column:receive_info;NOT NULL"`    // 收款信息
+	Status         int       `gorm:"column:status;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"
+}

+ 13 - 0
model/http_model/DataOtherNotUploadRequest.go

@@ -0,0 +1,13 @@
+package http_model
+
+type DataOtherNotUploadRequest struct {
+	Rate int `json:"rate"`
+}
+
+func NewDataOtherNotUploadRequest() *DataOtherNotUploadRequest {
+	return new(DataOtherNotUploadRequest)
+}
+
+func NewDataOtherNotUploadResponse() *CommonResponse {
+	return new(CommonResponse)
+}

+ 13 - 0
model/http_model/DataOtherTimeOutRequest.go

@@ -0,0 +1,13 @@
+package http_model
+
+type DataOtherTimeOutRequest struct {
+	Rate int `json:"rate"`
+}
+
+func NewDataOtherTimeOutRequest() *DataOtherTimeOutRequest {
+	return new(DataOtherTimeOutRequest)
+}
+
+func NewDataOtherTimeOutResponse() *CommonResponse {
+	return new(CommonResponse)
+}

+ 13 - 0
model/http_model/DataReplaceNotUploadRequest.go

@@ -0,0 +1,13 @@
+package http_model
+
+type DataReplaceNotUploadRequest struct {
+	Rate int `json:"rate"`
+}
+
+func NewDataReplaceNotUploadRequest() *DataReplaceNotUploadRequest {
+	return new(DataReplaceNotUploadRequest)
+}
+
+func NewDataReplaceNotUploadResponse() *CommonResponse {
+	return new(CommonResponse)
+}

+ 13 - 0
model/http_model/DataReplaceTimeOutRequest.go

@@ -0,0 +1,13 @@
+package http_model
+
+type DataReplaceTimeOutRequest struct {
+	Rate int `json:"rate"`
+}
+
+func NewDataReplaceTimeOutRequest() *DataReplaceTimeOutRequest {
+	return new(DataReplaceTimeOutRequest)
+}
+
+func NewDataReplaceTimeOutResponse() *CommonResponse {
+	return new(CommonResponse)
+}

+ 14 - 0
model/http_model/DraftDefaultInMv.go

@@ -0,0 +1,14 @@
+package http_model
+
+type DraftDefaultInMvRequest struct {
+	Time int32 `json:"time"`
+}
+
+func NewDraftDefaultInMvRequest() *DraftDefaultInMvRequest {
+	return new(DraftDefaultInMvRequest)
+}
+
+func NewDraftDefaultInMvResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 14 - 0
model/http_model/DraftDefaultInPic.go

@@ -0,0 +1,14 @@
+package http_model
+
+type DraftDefaultInPicRequest struct {
+	Time int32 `json:"time"`
+}
+
+func NewDraftDefaultInPicRequest() *DraftDefaultInPicRequest {
+	return new(DraftDefaultInPicRequest)
+}
+
+func NewDraftDefaultInPicResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 24 - 0
model/http_model/GetWithdrawalRecordRequest.go

@@ -0,0 +1,24 @@
+package http_model
+
+type GetWithdrawalRecordRequest struct {
+	TalentId string `json:"talent_id"`
+}
+
+type WithdrawalRecordData struct {
+	WithdrawAmount float32 `json:"withdraw_amount"`
+	WithdrawAt     string  `json:"withdraw_at"`
+}
+
+type WithdrawalRecordPreview struct {
+	WithdrawalRecordData []*WithdrawalRecordData `json:"withdrawal_record_data"`
+}
+
+func NewGetWithdrawalRecordRequest() *GetWithdrawalRecordRequest {
+	return new(GetWithdrawalRecordRequest)
+}
+
+func NewGetWithdrawRecordRequest() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(WithdrawalRecordData)
+	return resp
+}

+ 14 - 0
model/http_model/LinkBreach.go

@@ -0,0 +1,14 @@
+package http_model
+
+type LinkBreachRequest struct {
+	Time int32 `json:"time"`
+}
+
+func NewLinkBreachRequest() *LinkBreachRequest {
+	return new(LinkBreachRequest)
+}
+
+func NewLinkBreachResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 13 - 0
model/http_model/LinkOtherNotUploadRequest.go

@@ -0,0 +1,13 @@
+package http_model
+
+type LinkOtherNotUploadRequest struct {
+	Rate int `json:"rate"`
+}
+
+func NewLinkOtherNotUploadRequest() *LinkOtherNotUploadRequest {
+	return new(LinkOtherNotUploadRequest)
+}
+
+func NewLinkOtherNotUploadResponse() *CommonResponse {
+	return new(CommonResponse)
+}

+ 13 - 0
model/http_model/LinkOtherTimeOutRequest.go

@@ -0,0 +1,13 @@
+package http_model
+
+type LinkOtherTimeOutRequest struct {
+	Rate int `json:"rate"`
+}
+
+func NewLinkOtherTimeOutRequest() *LinkOtherTimeOutRequest {
+	return new(LinkOtherTimeOutRequest)
+}
+
+func NewLinkOtherTimeOutResponse() *CommonResponse {
+	return new(CommonResponse)
+}

+ 13 - 0
model/http_model/LinkReplaceNotUploadRequest.go

@@ -0,0 +1,13 @@
+package http_model
+
+type LinkReplaceNotUploadRequest struct {
+	Rate int `json:"rate"`
+}
+
+func NewLinkReplaceNotUploadRequest() *LinkReplaceNotUploadRequest {
+	return new(LinkReplaceNotUploadRequest)
+}
+
+func NewLinkReplaceNotUploadResponse() *CommonResponse {
+	return new(CommonResponse)
+}

+ 13 - 0
model/http_model/LinkReplaceTimeOutRequest.go

@@ -0,0 +1,13 @@
+package http_model
+
+type LinkReplaceTimeOutRequest struct {
+	Rate int `json:"rate"`
+}
+
+func NewLinkReplaceTimeOutRequest() *LinkReplaceTimeOutRequest {
+	return new(LinkReplaceTimeOutRequest)
+}
+
+func NewLinkReplaceTimeOutResponse() *CommonResponse {
+	return new(CommonResponse)
+}

+ 13 - 0
model/http_model/ScriptDefault.go

@@ -0,0 +1,13 @@
+package http_model
+
+type ScriptDefaultRequest struct {
+	Time int32 `json:"time"`
+}
+
+func NewScriptDefaultRequest() *ScriptDefaultRequest {
+	return new(ScriptDefaultRequest)
+}
+func NewScriptDefaultResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 13 - 0
model/http_model/ScriptOtherTimeOutRequest.go

@@ -0,0 +1,13 @@
+package http_model
+
+type ScriptOtherTimeOutRequest struct {
+	Rate int `json:"rate"`
+}
+
+func NewScriptOtherTimeOutRequest() *ScriptOtherTimeOutRequest {
+	return new(ScriptOtherTimeOutRequest)
+}
+
+func NewScriptOtherTimeOutResponse() *CommonResponse {
+	return new(CommonResponse)
+}

+ 13 - 0
model/http_model/SketchOtherNotUploadRequest.go

@@ -0,0 +1,13 @@
+package http_model
+
+type SketchOtherNotUploadRequest struct {
+	Rate int `json:"rate"`
+}
+
+func NewSketchOtherNotUploadRequest() *SketchOtherNotUploadRequest {
+	return new(SketchOtherNotUploadRequest)
+}
+
+func NewSketchOtherNotUploadResponse() *CommonResponse {
+	return new(CommonResponse)
+}

+ 13 - 0
model/http_model/SketchOtherTimeOutRequest.go

@@ -0,0 +1,13 @@
+package http_model
+
+type SketchOtherTimeOutRequest struct {
+	Rate int `json:"rate"`
+}
+
+func NewSketchOtherTimeOutRequest() *SketchOtherTimeOutRequest {
+	return new(SketchOtherTimeOutRequest)
+}
+
+func NewSketchOtherTimeOutResponse() *CommonResponse {
+	return new(CommonResponse)
+}

+ 13 - 0
model/http_model/SketchReplaceNotUploadRequest.go

@@ -0,0 +1,13 @@
+package http_model
+
+type SketchReplaceNotUploadRequest struct {
+	Rate int `json:"rate"`
+}
+
+func NewSketchReplaceNotUploadRequest() *SketchReplaceNotUploadRequest {
+	return new(SketchReplaceNotUploadRequest)
+}
+
+func NewSketchReplaceNotUploadResponse() *CommonResponse {
+	return new(CommonResponse)
+}

+ 13 - 0
model/http_model/SketchReplaceTimeOutRequest.go

@@ -0,0 +1,13 @@
+package http_model
+
+type SketchReplaceTimeOutRequest struct {
+	Rate int `json:"rate"`
+}
+
+func NewSketchReplaceTimeOutRequest() *SketchReplaceTimeOutRequest {
+	return new(SketchReplaceTimeOutRequest)
+}
+
+func NewSketchReplaceTimeOutResponse() *CommonResponse {
+	return new(CommonResponse)
+}

+ 37 - 0
model/http_model/WithDrawalRecordsRequest.go

@@ -0,0 +1,37 @@
+package http_model
+
+type WithdrawalRecordsRequest struct {
+	PageSize   int32  `json:"page_size"`
+	PageNum    int32  `json:"page_num"`
+	Status     int32  `json:"status"`
+	SubmitAt   string `json:"submit_at"`
+	WithdrawAt string `json:"withdraw_at"`
+	TalentId   string `json:"talent_id"`
+	TalentName string `json:"talent_name"`
+}
+
+type WithdrawalRecordsData struct {
+	TalentId       string  `json:"talent_id"`
+	TalentName     string  `json:"talent_name"`
+	WithdrawAmount float32 `json:"withdraw_amount"`
+	AmountPayable  float32 `json:"amount_payable"`
+	ReceiveInfo    string  `json:"receive_info"`
+	Phone          string  `json:"phone"`
+	SubmitAt       string  `json:"submit_at"`
+	WithdrawAt     string  `json:"withdraw_at"`
+}
+
+type WithdrawalRecordsPreview struct {
+	WithdrawalRecordsData []*WithdrawalRecordsData `json:"withdrawal_records_data"`
+	Total                 int64                    `json:"total"`
+}
+
+func NewWithdrawalRecordsRequest() *WithdrawalRecordsRequest {
+	return new(WithdrawalRecordsRequest)
+}
+
+func NewWithdrawalRecordsResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(WithdrawalRecordsPreview)
+	return resp
+}

+ 13 - 13
model/http_model/account_income.go

@@ -5,19 +5,19 @@ type TalentInfoRequest struct {
 }
 
 type TalentInfoResponse struct {
-	Income          int64  `json:"income"`            // 收益总数
-	Withdrawing     int64  `json:"withdrawing"`       // 提现中金额
-	Canwithdraw     int64  `json:"canwithdraw"`       // 可提现金额
-	Withdrawed      int64  `json:"withdrawed"`        // 已提现金额
-	DetailAddr      string `json:"detail_addr"`       // 详细地址
-	PhoneNumber     string `json:"phone_number"`      // 联系电话
-	ReceiverName    string `json:"receiver_name"`     // 收货人名字
-	Bank            string `json:"bank"`              // 银行
-	Name            string `json:"name"`              // 户主姓名
-	BankOpenAddress string `json:"bank_open_address"` // 开户地址区域编码
-	BankCardNumber  string `json:"bank_card_number"`  // 银行卡号
-	AliPayNumber    string `json:"ali_pay_number"`    // 支付宝账号
-	AliPayRealName  string `json:"ali_pay_real_name"` // 支付宝真实姓名
+	Income          float32 `json:"income"`            // 收益总数
+	Withdrawing     float32 `json:"withdrawing"`       // 提现中金额
+	Canwithdraw     float32 `json:"canwithdraw"`       // 可提现金额
+	Withdrawed      float32 `json:"withdrawed"`        // 已提现金额
+	DetailAddr      string  `json:"detail_addr"`       // 详细地址
+	PhoneNumber     string  `json:"phone_number"`      // 联系电话
+	ReceiverName    string  `json:"receiver_name"`     // 收货人名字
+	Bank            string  `json:"bank"`              // 银行
+	Name            string  `json:"name"`              // 户主姓名
+	BankOpenAddress string  `json:"bank_open_address"` // 开户地址区域编码
+	BankCardNumber  string  `json:"bank_card_number"`  // 银行卡号
+	AliPayNumber    string  `json:"ali_pay_number"`    // 支付宝账号
+	AliPayRealName  string  `json:"ali_pay_real_name"` // 支付宝真实姓名
 }
 
 func NewTalentInfoRequest() *TalentInfoRequest {

+ 3 - 3
model/http_model/account_info.go

@@ -5,8 +5,8 @@ type AccountInfoRequest struct {
 	PageNum          int32  `json:"page_num"`
 	PlatformID       string `json:"platform_id"`
 	BindDate         string `json:"bind_date"`
-	FansLow          string `json:"fans_low"`
-	FansHigh         string `json:"fans_high"`
+	FansLow          int64  `json:"fans_low"`
+	FansHigh         int64  `json:"fans_high"`
 	TalentId         string `json:"talent_id"`
 	PlatformNickname string `json:"platform_nickname"`
 }
@@ -15,7 +15,7 @@ type AccountInfoData struct {
 	TalentId           string `json:"talent_id"`             //创作者ID
 	PlatformNickname   string `json:"platform_nickname"`     //账号昵称
 	Platform           string `json:"platform"`              //社媒平台
-	Fans               int64  `json:"fans"`                  //粉丝量
+	Fans               string `json:"fans"`                  //粉丝量
 	Phone              string `json:"phone"`                 //联系方式
 	BindDate           string `json:"bind_date"`             // 绑定时间
 	HomePageCaptureUrl string `json:"home_page_capture_url"` //主页截图链接

+ 7 - 7
model/http_model/add_pricing.go

@@ -1,13 +1,13 @@
 package http_model
 
 type AddPricingRequest struct {
-	ProjectType    string `json:"project_type"`    //项目类型
-	ManuscriptForm string `json:"manuscript_form"` //稿费形式
-	Platform       string `json:"platform"`        //社媒平台
-	FansLow        int64  `json:"fans_low"`        //对应创作者 粉丝量
-	FansHigh       int64  `json:"fans_high"`       //对应创作者 粉丝量
-	BaseOffer      int64  `json:"base_offer"`      //基础报价
-	PlatformFee    int64  `json:"platform_fee"`    //平台服务费
+	ProjectType    string  `json:"project_type"`    //项目类型
+	ManuscriptForm string  `json:"manuscript_form"` //稿费形式
+	Platform       string  `json:"platform"`        //社媒平台
+	FansLow        int64   `json:"fans_low"`        //对应创作者 粉丝量
+	FansHigh       int64   `json:"fans_high"`       //对应创作者 粉丝量
+	BaseOffer      float32 `json:"base_offer"`      //基础报价
+	PlatformFee    int64   `json:"platform_fee"`    //平台服务费
 }
 
 type AddPricingResponse struct {

+ 15 - 0
model/http_model/auto_review.go

@@ -0,0 +1,15 @@
+package http_model
+
+type AutoReviewRequest struct {
+	Time        int32 `json:"time"`
+	ContentType int32 `json:"content_type"`
+}
+
+func NewAutoReviewRequest() *AutoReviewRequest {
+	return new(AutoReviewRequest)
+}
+
+func NewAutoReviewResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 14 - 0
model/http_model/auto_review_unlimited.go

@@ -0,0 +1,14 @@
+package http_model
+
+type AutoReviewUnlimitedRequest struct {
+	Time int32 `json:"time"`
+}
+
+func NewAutoReviewUnlimitedRequest() *AutoReviewUnlimitedRequest {
+	return new(AutoReviewUnlimitedRequest)
+}
+
+func NewAutoReviewUnlimitedResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 14 - 0
model/http_model/auto_sign_in_offline.go

@@ -0,0 +1,14 @@
+package http_model
+
+type SignInOfflineRequest struct {
+	Time int32 `json:"time"`
+}
+
+func NewSignInOfflineRequest() *SignInOfflineRequest {
+	return new(SignInOfflineRequest)
+}
+
+func NewSignInOfflineResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 14 - 0
model/http_model/auto_sign_in_virtual.go

@@ -0,0 +1,14 @@
+package http_model
+
+type SignInVirtualRequest struct {
+	Time int32 `json:"time"`
+}
+
+func NewSignInVirtualRequest() *SignInVirtualRequest {
+	return new(SignInVirtualRequest)
+}
+
+func NewSignInVirtualResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 39 - 0
model/http_model/breach_handled.go

@@ -0,0 +1,39 @@
+package http_model
+
+type BreachHandledRequest struct {
+	PageSize        int32  `json:"page_size"`
+	PageNum         int32  `json:"page_num"`
+	HandleResult    string `json:"default_status"` // 处理结果
+	TerminateReason string `json:"break_type"`     // 解约原因
+	TaskId          int32  `json:"task_id"`        //	 任务id
+	ProjectName     string `json:"project_name"`   // 项目名称
+}
+
+type BreachHandledPreview struct {
+	ContractId      int32  `json:"contract_id"`
+	ProjectId       int32  `json:"project_id"`
+	UserId          int32  `json:"user_id"`
+	ProjectName     string `json:"project_name"`
+	UserPhone       string `json:"user_phone"`
+	TaskId          int32  `json:"task_id"`
+	TalentId        string `json:"talent_id"`
+	TalentPhone     string `json:"talent_phone"`
+	TerminateReason string `json:"terminate_reason"` // 解约原因
+	HandleResult    string `json:"handle_result"`    // 处理结果
+	HandleAt        string `json:"handle_at"`        // 处理时间
+}
+
+type BreachHandledData struct {
+	BreachHandledPreview []*BreachHandledPreview `json:"breach_handled_preview"`
+	Total                int64                   `json:"total"`
+}
+
+func NewBreachHandledRequest() *BreachHandledRequest {
+	return new(BreachHandledRequest)
+}
+
+func NewBreachHandledResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(BreachHandledData)
+	return resp
+}

+ 41 - 0
model/http_model/breach_pending.go

@@ -0,0 +1,41 @@
+package http_model
+
+type BreachPendingRequest struct {
+	PageSize    int32  `json:"page_size"`
+	PageNum     int32  `json:"page_num"`
+	DefaultType int32  `json:"break_type"`
+	TaskId      int32  `json:"task_id"`
+	ProjectName string `json:"project_name"`
+}
+
+type BreachPendingPreview struct {
+	ContractId       int32   `json:"contract_id"`
+	ProjectId        int32   `json:"project_id"`
+	UserId           int32   `json:"user_id"`
+	ProjectName      string  `json:"project_name"`
+	UserPhone        string  `json:"user_phone"`
+	TaskId           int32   `json:"task_id"`
+	TalentId         string  `json:"talent_id"`
+	TalentPhone      string  `json:"talent_phone"`
+	SketchInfo       string  `json:"sketch_info"`
+	LinkInfo         string  `json:"link_info"`
+	Price            float64 `json:"price"`
+	SettlementAmount float64 `json:"settlement_amount"`
+	DefaultAt        string  `json:"default_at"`
+	TerminateAt      string  `json:"terminate_at"`
+}
+
+type BreachPendingData struct {
+	BreachPendingPreview []*BreachPendingPreview `json:"breach_pending_preview"`
+	Total                int64                   `json:"total"`
+}
+
+func NewBreachPendingRequest() *BreachPendingRequest {
+	return new(BreachPendingRequest)
+}
+
+func NewBreachPendingResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(BreachPendingData)
+	return resp
+}

+ 14 - 0
model/http_model/caseClose.go

@@ -0,0 +1,14 @@
+package http_model
+
+type CaseCloseRequest struct {
+	Time int32 `json:"time"`
+}
+
+func NewCaseCloseRequest() *CaseCloseRequest {
+	return new(CaseCloseRequest)
+}
+
+func NewCaseCloseResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 14 - 0
model/http_model/caseCloseDefault.go

@@ -0,0 +1,14 @@
+package http_model
+
+type CaseCloseDefaultRequest struct {
+	Time int32 `json:"time"`
+}
+
+func NewCaseCloseDefaultRequest() *CaseCloseDefaultRequest {
+	return new(CaseCloseDefaultRequest)
+}
+
+func NewCaseCloseDefaultResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 15 - 0
model/http_model/contract_breach.go

@@ -0,0 +1,15 @@
+package http_model
+
+type ContractBreachRequest struct {
+	ContractIds   []int32 `json:"contract_ids"`
+	DefaultStatus int32   `json:"default_status"`
+}
+
+func NewContractBreachRequest() *ContractBreachRequest {
+	return new(ContractBreachRequest)
+}
+
+func NewContractBreachResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 20 - 0
model/http_model/count_num_of_defaults.go

@@ -0,0 +1,20 @@
+package http_model
+
+type CountNumOfDefaultsRequest struct {
+}
+
+type CountNumOfDefaultsResponse struct {
+	DraftDefaultNum  int32 `json:"draft_default_num"`
+	ScriptDefaultNum int32 `json:"script_default_num"`
+	LinkDefaultNum   int32 `json:"link_default_num"`
+	DataDefaultNum   int32 `json:"data_default_num"`
+}
+
+func NewCountNumOfDefaultsRequest() *CountNumOfDefaultsRequest {
+	return new(CountNumOfDefaultsRequest)
+}
+func NewCountNumOfDefaultsResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(CountNumOfDefaultsResponse)
+	return resp
+}

+ 21 - 0
model/http_model/get_sketch_info.go

@@ -0,0 +1,21 @@
+package http_model
+
+type GetSketchInfoByTaskIdRequest struct {
+	TaskId int32 `json:"task_id"`
+}
+
+type SketchInfoResponse struct {
+	PhotoUrl string `json:"photo_url"`
+	Type     int32  `json:"type"`
+	Content  string `json:"content"`
+}
+
+func NewGetSketchInfoByTaskIdRequest() *GetSketchInfoByTaskIdRequest {
+	return new(GetSketchInfoByTaskIdRequest)
+}
+
+func NewGetSketchInfoByTaskIdResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	resp.Data = new(SketchInfoResponse)
+	return resp
+}

+ 14 - 0
model/http_model/invalid.go

@@ -0,0 +1,14 @@
+package http_model
+
+type InvalidRequest struct {
+	Time int32 `json:"time"`
+}
+
+func NewInvalidRequest() *InvalidRequest {
+	return new(InvalidRequest)
+}
+
+func NewInvalidResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 1 - 1
model/http_model/platform_acc_info.go

@@ -7,7 +7,7 @@ type PlatformAccInfoRequest struct {
 type PlatformAccInfoData struct {
 	Platform           string `json:"platform"`              //社媒平台
 	PlatformNickname   string `json:"platform_nickname"`     //账号昵称
-	Fans               int64  `json:"fans"`                  //粉丝量
+	Fans               string `json:"fans"`                  //粉丝量
 	HomePageCaptureUrl string `json:"home_page_capture_url"` //主页截图链接
 	HomePageUrl        string `json:"home_page_url"`         //主页链接
 }

+ 14 - 0
model/http_model/postReview.go

@@ -0,0 +1,14 @@
+package http_model
+
+type PostReviewRequest struct {
+	Time int32 `json:"time"`
+}
+
+func NewPostReviewRequest() *PostReviewRequest {
+	return new(PostReviewRequest)
+}
+
+func NewPostReviewResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 14 - 0
model/http_model/script_other_not_upload.go

@@ -0,0 +1,14 @@
+package http_model
+
+type ScriptOtherNotUploadRequest struct {
+	Rate int `json:"rate"`
+}
+
+func NewScriptOtherNotUploadRequest() *ScriptOtherNotUploadRequest {
+	return new(ScriptOtherNotUploadRequest)
+}
+
+func NewScriptOtherNotUploadResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 14 - 0
model/http_model/script_replace_not_upload.go

@@ -0,0 +1,14 @@
+package http_model
+
+type ScriptReplaceNotUploadRequest struct {
+	Rate int `json:"rate"`
+}
+
+func NewScriptReplaceNotUploadRequest() *ScriptReplaceNotUploadRequest {
+	return new(ScriptReplaceNotUploadRequest)
+}
+
+func NewScriptReplaceNotUploadResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 14 - 0
model/http_model/script_replace_time_out.go

@@ -0,0 +1,14 @@
+package http_model
+
+type ScriptReplaceTimeOutRequest struct {
+	Rate int `json:"rate"`
+}
+
+func NewScriptReplaceTimeOutRequest() *ScriptReplaceTimeOutRequest {
+	return new(ScriptReplaceTimeOutRequest)
+}
+
+func NewScriptReplaceTimeOutResponse() *CommonResponse {
+	resp := new(CommonResponse)
+	return resp
+}

+ 2 - 2
pack/creator_list_conditions.go

@@ -18,8 +18,8 @@ func HttpAccountInfoRequestToCondition(req *http_model.AccountInfoRequest) *comm
 	return &common_model.AccountInfoConditions{
 		PlatformID:       conv.MustInt64(req.PlatformID, 0),
 		BindDate:         req.BindDate,
-		FansLow:          conv.MustInt64(req.FansLow, 0),
-		FansHigh:         conv.MustInt64(req.FansHigh, 0),
+		FansLow:          req.FansLow,
+		FansHigh:         req.FansHigh,
 		TalentId:         req.TalentId,
 		PlatformNickname: req.PlatformNickname,
 	}

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff